From 898c7cc84633ea16277a6709c4248d624be22d7d Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 12 Feb 2026 13:09:44 -0800 Subject: [PATCH 01/36] =?UTF-8?q?Phase=201:=20LoopInsights=20=E2=80=94=20A?= =?UTF-8?q?I-powered=20therapy=20settings=20analysis?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add LoopInsights feature: an AI-driven therapy settings advisor that analyzes glucose, insulin, and carb data to suggest adjustments to Carb Ratios, Insulin Sensitivity Factors, and Basal Rates. Core components: - Dashboard with therapy settings overview, pattern detection, and AI suggestions - Configurable AI provider (OpenAI, Anthropic, Gemini, Grok, self-hosted) - Data aggregation pipeline with test data fixtures from Tidepool - Suggestion lifecycle: pending → applied/dismissed with full history - AI personality settings (Supportive Coach, Clinical Expert, Dry Wit, Tough Love) - Developer mode with auto-apply and test data toggles - Secure API key storage via Keychain - Safety guardrails: max 20% change per adjustment, one setting at a time - Unit tests for models, data aggregation, and suggestion store 22 new files, 4 modified files across Views, View Models, Models, Services, Managers, Resources, and Tests. --- .../LoopInsights/LoopInsights_README.md | 125 + Loop.xcodeproj/project.pbxproj | 144 + Loop/Localizable.xcstrings | 574 +- .../LoopInsights_Coordinator.swift | 156 + .../LoopInsights/LoopInsights_Models.swift | 674 + .../LoopInsights_SuggestionRecord.swift | 90 + .../LoopInsights_FeatureFlags.swift | 128 + .../TestData/tidepool_carb_entries.json | 803 + .../TestData/tidepool_dose_entries.json | 45511 +++++++++ .../TestData/tidepool_glucose_samples.json | 79697 ++++++++++++++++ .../TestData/tidepool_therapy_settings.json | 44 + .../LoopInsights_AIAnalysis.swift | 263 + .../LoopInsights_AIServiceAdapter.swift | 253 + .../LoopInsights_DataAggregator.swift | 222 + .../LoopInsights_SecureStorage.swift | 79 + .../LoopInsights_SuggestionStore.swift | 127 + .../LoopInsights_TestDataProvider.swift | 289 + .../LoopInsights_DashboardViewModel.swift | 407 + .../LoopInsights_DashboardView.swift | 478 + .../LoopInsights_SettingsView.swift | 942 + .../LoopInsights_SuggestionDetailView.swift | 239 + .../LoopInsights_SuggestionHistoryView.swift | 183 + Loop/Views/SettingsView.swift | 18 + .../LoopInsights_DataAggregatorTests.swift | 166 + .../LoopInsights_ModelsTests.swift | 255 + .../LoopInsights_SuggestionStoreTests.swift | 168 + 26 files changed, 132032 insertions(+), 3 deletions(-) create mode 100644 Documentation/LoopInsights/LoopInsights_README.md create mode 100644 Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift create mode 100644 Loop/Models/LoopInsights/LoopInsights_Models.swift create mode 100644 Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift create mode 100644 Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift create mode 100644 Loop/Resources/LoopInsights/TestData/tidepool_carb_entries.json create mode 100644 Loop/Resources/LoopInsights/TestData/tidepool_dose_entries.json create mode 100644 Loop/Resources/LoopInsights/TestData/tidepool_glucose_samples.json create mode 100644 Loop/Resources/LoopInsights/TestData/tidepool_therapy_settings.json create mode 100644 Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_AIServiceAdapter.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_SecureStorage.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift create mode 100644 Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_DashboardView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_SettingsView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift create mode 100644 LoopTests/LoopInsights/LoopInsights_DataAggregatorTests.swift create mode 100644 LoopTests/LoopInsights/LoopInsights_ModelsTests.swift create mode 100644 LoopTests/LoopInsights/LoopInsights_SuggestionStoreTests.swift diff --git a/Documentation/LoopInsights/LoopInsights_README.md b/Documentation/LoopInsights/LoopInsights_README.md new file mode 100644 index 0000000000..02bae41ea6 --- /dev/null +++ b/Documentation/LoopInsights/LoopInsights_README.md @@ -0,0 +1,125 @@ +# LoopInsights — AI-Powered Therapy Settings Analysis + +> **Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026.** +> Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. + +## Overview + +LoopInsights is an AI-driven therapy settings advisor for Loop. It analyzes glucose, insulin, and carbohydrate data to suggest adjustments to Carb Ratio (CR), Insulin Sensitivity Factor (ISF), and Basal Rate (BR) schedules that can improve Time in Range. + +## Architecture + +### Data Flow + +``` +Loop Core (read-only) + GlucoseStore ─┐ + DoseStore ────┤── DataAggregator → Aggregated Stats + CarbStore ────┤ │ + StoredSettings┘ ▼ + AIAnalysis → AI Provider (BYO) + │ + ▼ + Suggestion Cards → User Reviews + │ + ┌───────────┴────────────┐ + ▼ ▼ + SuggestionStore User Applies (3 modes) + (history log) +``` + +### File Organization + +``` +Loop/ +├── Models/LoopInsights/ +│ ├── LoopInsights_Models.swift # Core types, enums, data structures +│ └── LoopInsights_SuggestionRecord.swift # Persistent suggestion log entry +├── View Models/LoopInsights/ +│ └── LoopInsights_DashboardViewModel.swift # Main observable, orchestrates analysis +├── Views/LoopInsights/ +│ ├── LoopInsights_DashboardView.swift # Primary entry-point view +│ ├── LoopInsights_SettingsView.swift # Feature config (AI provider, apply mode) +│ ├── LoopInsights_SuggestionDetailView.swift # Single suggestion detail +│ └── LoopInsights_SuggestionHistoryView.swift # Scrollable suggestion log +├── Services/LoopInsights/ +│ ├── LoopInsights_DataAggregator.swift # Reads stores, computes TIR/stats +│ ├── LoopInsights_AIAnalysis.swift # Builds prompts, parses responses +│ ├── LoopInsights_AIServiceAdapter.swift # Provider-agnostic HTTP client +│ ├── LoopInsights_SecureStorage.swift # Keychain wrapper for API keys +│ └── LoopInsights_SuggestionStore.swift # UserDefaults persistence for history +├── Resources/LoopInsights/ +│ └── LoopInsights_FeatureFlags.swift # Runtime feature toggles +└── Managers/LoopInsights/ + └── LoopInsights_Coordinator.swift # Service orchestrator, data bridge + +LoopTests/LoopInsights/ +├── LoopInsights_ModelsTests.swift # Model serialization, validation +├── LoopInsights_SuggestionStoreTests.swift # Store persistence, status transitions +└── LoopInsights_DataAggregatorTests.swift # Aggregation logic with mock data +``` + +### Integration Touchpoints + +Only **1 existing Loop file** is modified: + +| File | Change | Lines | +|------|--------|-------| +| `SettingsView.swift` | NavigationLink to LoopInsights | ~8 | + +## Feature Flags + +All flags are runtime (`UserDefaults`), not compile-time: + +- `LoopInsights_FeatureFlags.isEnabled` — Master on/off (default: off) +- `LoopInsights_FeatureFlags.developerModeEnabled` — Hidden developer mode (default: off) +- `LoopInsights_FeatureFlags.applyMode` — How suggestions are applied (default: manual) +- `LoopInsights_FeatureFlags.analysisPeriod` — Default lookback (default: 14 days) +- `LoopInsights_FeatureFlags.aiConfiguration` — API-agnostic AI endpoint config (default: OpenAI) + +### Developer Mode + +Activated by long-pressing the LoopInsights header 5 times. Unlocks: +- Auto-Apply mode (suggestions applied automatically for high-confidence) +- Developer section in settings + +## Apply Modes + +| Mode | Behavior | +|------|----------| +| Manual (default) | Shows values, user navigates to Therapy Settings | +| One-Tap Apply | Writes via SettingsManager with disclaimer confirmation | +| Pre-Fill Editor | Opens editor with proposed value pre-filled | +| Auto-Apply (hidden) | Developer-only, applies high-confidence suggestions | + +## AI Provider Support + +BYO API key model supporting: +- **OpenAI** (GPT-4o default) +- **Anthropic** (Claude Sonnet 4.5 default) +- **Google** (Gemini 2.0 Flash default) + +API key is stored in iOS Keychain and shared with FoodFinder (same Keychain entry). + +## Guided Tuning Flow + +"One thing at a time" approach: +1. **Carb Ratio** — adjust first (most impact on post-meal variability) +2. **ISF** — adjust second (affects correction doses) +3. **Basal Rate** — adjust last (affects entire 24-hour profile) + +## Safety + +- Suggestions are capped at 20% change from current values +- Conservative approach: under-adjust > over-adjust +- All changes logged in suggestion history with before/after snapshots +- User always sees disclaimer when applying changes +- Feature flag defaults to OFF + +## Portability + +- All code in `LoopInsights/` subdirectories with `LoopInsights_` prefix +- No LoopKit modifications — Loop target only +- Runtime feature flags (not compile-time) +- Data access through existing LoopKit protocols +- Merge script viable: copy subdirectories + apply SettingsView patch + run pbxproj script diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 4767ba3142..68a66b40c8 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -588,6 +588,24 @@ E9C58A7E24DB529A00487A17 /* dynamic_glucose_effect_partially_observed.json in Resources */ = {isa = PBXBuildFile; fileRef = E9C58A7924DB529A00487A17 /* dynamic_glucose_effect_partially_observed.json */; }; E9C58A7F24DB529A00487A17 /* counteraction_effect_falling_glucose.json in Resources */ = {isa = PBXBuildFile; fileRef = E9C58A7A24DB529A00487A17 /* counteraction_effect_falling_glucose.json */; }; E9C58A8024DB529A00487A17 /* insulin_effect.json in Resources */ = {isa = PBXBuildFile; fileRef = E9C58A7B24DB529A00487A17 /* insulin_effect.json */; }; + 7BA48343293E11001AB1CAD2 /* LoopInsights_Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B34C595DAA79BB6836BA60C /* LoopInsights_Models.swift */; }; + FC5E93D39794E71B0FA5C2FD /* LoopInsights_SuggestionRecord.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20EB0E3DF88A1303EA105423 /* LoopInsights_SuggestionRecord.swift */; }; + AAE5993C1E1A822BFCD8D5A9 /* LoopInsights_DashboardViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76F7734CE5F39086ACDF05E4 /* LoopInsights_DashboardViewModel.swift */; }; + 5B58FD84606E28D455284224 /* LoopInsights_DashboardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2797FE7C4BD311CFD6130EE6 /* LoopInsights_DashboardView.swift */; }; + 6985216D28A1B2ADE17B40A0 /* LoopInsights_SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 298B9D3C1F836418FB49F5A4 /* LoopInsights_SettingsView.swift */; }; + D062E93B8CA1AFF98CCB804D /* LoopInsights_SuggestionDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FF964C8C711F6D2BC5ABADF /* LoopInsights_SuggestionDetailView.swift */; }; + C55289DE70B96F1DDAD60001 /* LoopInsights_SuggestionHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F30BE128F5152CCEFCE77A91 /* LoopInsights_SuggestionHistoryView.swift */; }; + 88B26E5EBD790388B811AA73 /* LoopInsights_DataAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 38E1A1D32871794C3B3D3627 /* LoopInsights_DataAggregator.swift */; }; + 9B67835D9437872514B959ED /* LoopInsights_AIAnalysis.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D9C7D82541170EF3C66E380 /* LoopInsights_AIAnalysis.swift */; }; + BB812EF3B85C5D20E4663846 /* LoopInsights_AIServiceAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 330B944B4E606429228D8936 /* LoopInsights_AIServiceAdapter.swift */; }; + 26721D288EAABC6270DB048C /* LoopInsights_TestDataProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8F875E984C8C1A149E4242E /* LoopInsights_TestDataProvider.swift */; }; + 014EFF54B2555BF06508F782 /* LoopInsights_SecureStorage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF3390DD6BCC87E617CF9C4E /* LoopInsights_SecureStorage.swift */; }; + 9C14D255A2CA94966BAD7667 /* LoopInsights_SuggestionStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 186598BBCF20AF6BFDA7C65E /* LoopInsights_SuggestionStore.swift */; }; + 17EAECD5386B86C1F7968394 /* LoopInsights_FeatureFlags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6339ED478F8AEB8DBDDD9324 /* LoopInsights_FeatureFlags.swift */; }; + 6C78970231AAF9CC3E477BCB /* LoopInsights_Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DD1A8C2568AD3C055D53CABA /* LoopInsights_Coordinator.swift */; }; + 51E08775179BF0C6D3C4468A /* LoopInsights_ModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9807F50B2A84D11791A7C992 /* LoopInsights_ModelsTests.swift */; }; + 84F08AFCA333AFD961F8B037 /* LoopInsights_SuggestionStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9EE7EF28AC643A5A61BA90 /* LoopInsights_SuggestionStoreTests.swift */; }; + 11D448D84F8B6FDE43A9DC77 /* LoopInsights_DataAggregatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF3371B113CDE1971B80A91 /* LoopInsights_DataAggregatorTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1409,6 +1427,24 @@ F5E0BDD827E1D71E0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Main.strings; sourceTree = ""; }; F5E0BDDA27E1D71F0033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; F5E0BDE327E1D7230033557E /* he */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = he; path = he.lproj/Localizable.strings; sourceTree = ""; }; + 1B34C595DAA79BB6836BA60C /* LoopInsights_Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_Models.swift; sourceTree = ""; }; + 20EB0E3DF88A1303EA105423 /* LoopInsights_SuggestionRecord.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SuggestionRecord.swift; sourceTree = ""; }; + 76F7734CE5F39086ACDF05E4 /* LoopInsights_DashboardViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_DashboardViewModel.swift; sourceTree = ""; }; + 2797FE7C4BD311CFD6130EE6 /* LoopInsights_DashboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_DashboardView.swift; sourceTree = ""; }; + 298B9D3C1F836418FB49F5A4 /* LoopInsights_SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SettingsView.swift; sourceTree = ""; }; + 6FF964C8C711F6D2BC5ABADF /* LoopInsights_SuggestionDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SuggestionDetailView.swift; sourceTree = ""; }; + F30BE128F5152CCEFCE77A91 /* LoopInsights_SuggestionHistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SuggestionHistoryView.swift; sourceTree = ""; }; + 38E1A1D32871794C3B3D3627 /* LoopInsights_DataAggregator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_DataAggregator.swift; sourceTree = ""; }; + 0D9C7D82541170EF3C66E380 /* LoopInsights_AIAnalysis.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AIAnalysis.swift; sourceTree = ""; }; + 330B944B4E606429228D8936 /* LoopInsights_AIServiceAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AIServiceAdapter.swift; sourceTree = ""; }; + E8F875E984C8C1A149E4242E /* LoopInsights_TestDataProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_TestDataProvider.swift; sourceTree = ""; }; + EF3390DD6BCC87E617CF9C4E /* LoopInsights_SecureStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SecureStorage.swift; sourceTree = ""; }; + 186598BBCF20AF6BFDA7C65E /* LoopInsights_SuggestionStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SuggestionStore.swift; sourceTree = ""; }; + 6339ED478F8AEB8DBDDD9324 /* LoopInsights_FeatureFlags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_FeatureFlags.swift; sourceTree = ""; }; + DD1A8C2568AD3C055D53CABA /* LoopInsights_Coordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_Coordinator.swift; sourceTree = ""; }; + 9807F50B2A84D11791A7C992 /* LoopInsights_ModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ModelsTests.swift; sourceTree = ""; }; + 8E9EE7EF28AC643A5A61BA90 /* LoopInsights_SuggestionStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SuggestionStoreTests.swift; sourceTree = ""; }; + 1DF3371B113CDE1971B80A91 /* LoopInsights_DataAggregatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_DataAggregatorTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -1675,6 +1711,7 @@ C1E3862428247B7100F561A4 /* StoredLoopNotRunningNotification.swift */, 4328E0311CFC068900E199AA /* WatchContext+LoopKit.swift */, A987CD4824A58A0100439ADC /* ZipArchive.swift */, + 45118D66CCF482E662F7DAC5 /* LoopInsights */, ); path = Models; sourceTree = ""; @@ -1741,6 +1778,8 @@ 43F5C2CE1B92A2A0003EB13D /* View Controllers */, 43F5C2CF1B92A2ED003EB13D /* Views */, 897A5A9724C22DCE00C4E71D /* View Models */, + 30A7BA28AD6B99C005058D2B /* Services */, + 64E225E5D16AAC4F29EDC1FA /* Resources */, ); path = Loop; sourceTree = ""; @@ -1994,6 +2033,7 @@ C1AF062229426300002C1B19 /* ManualGlucoseEntryRow.swift */, DDC389FD2A2C4C830066E2E8 /* GlucoseBasedApplicationFactorSelectionView.swift */, DD3DBD282A33AFE9000F8B5B /* IntegralRetrospectiveCorrectionSelectionView.swift */, + 3EE1B928CEC88845E1F639EA /* LoopInsights */, ); path = Views; sourceTree = ""; @@ -2038,6 +2078,7 @@ A96DAC2B2838F31200D94E38 /* SharedLogging.swift */, 7E69CFFB2A16A77E00203CBD /* ResetLoopManager.swift */, 84AA81E42A4A3981000B658B /* DeeplinkManager.swift */, + 0CCABD3F947EB320F1E71E1A /* LoopInsights */, ); path = Managers; sourceTree = ""; @@ -2056,6 +2097,7 @@ A9DAE7CF2332D77F006AE942 /* LoopTests.swift */, 8968B113240C55F10074BB48 /* LoopSettingsTests.swift */, E93E86AC24DDE02C00FF40C8 /* Mock Stores */, + 8B8260200F8E2C87C406E665 /* LoopInsights */, ); path = LoopTests; sourceTree = ""; @@ -2350,6 +2392,7 @@ C174233B259BEB0F00399C9D /* ManualEntryDoseViewModel.swift */, 1DB619AB270BAD3D006C9D07 /* VersionUpdateViewModel.swift */, 3ED319952EB65A5C00820BCF /* LiveActivityManagementViewModel.swift */, + 28AF6BC126CFBFAA4E6A2F5C /* LoopInsights */, ); path = "View Models"; sourceTree = ""; @@ -2660,6 +2703,89 @@ path = Fixtures; sourceTree = ""; }; + 45118D66CCF482E662F7DAC5 /* LoopInsights */ = { + isa = PBXGroup; + children = ( + 1B34C595DAA79BB6836BA60C /* LoopInsights_Models.swift */, + 20EB0E3DF88A1303EA105423 /* LoopInsights_SuggestionRecord.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; + 28AF6BC126CFBFAA4E6A2F5C /* LoopInsights */ = { + isa = PBXGroup; + children = ( + 76F7734CE5F39086ACDF05E4 /* LoopInsights_DashboardViewModel.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; + 3EE1B928CEC88845E1F639EA /* LoopInsights */ = { + isa = PBXGroup; + children = ( + 2797FE7C4BD311CFD6130EE6 /* LoopInsights_DashboardView.swift */, + 298B9D3C1F836418FB49F5A4 /* LoopInsights_SettingsView.swift */, + 6FF964C8C711F6D2BC5ABADF /* LoopInsights_SuggestionDetailView.swift */, + F30BE128F5152CCEFCE77A91 /* LoopInsights_SuggestionHistoryView.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; + 30A7BA28AD6B99C005058D2B /* Services */ = { + isa = PBXGroup; + children = ( + E2B183EAECD6393B2AE7F724 /* LoopInsights */, + ); + path = Services; + sourceTree = ""; + }; + E2B183EAECD6393B2AE7F724 /* LoopInsights */ = { + isa = PBXGroup; + children = ( + 38E1A1D32871794C3B3D3627 /* LoopInsights_DataAggregator.swift */, + 0D9C7D82541170EF3C66E380 /* LoopInsights_AIAnalysis.swift */, + 330B944B4E606429228D8936 /* LoopInsights_AIServiceAdapter.swift */, + E8F875E984C8C1A149E4242E /* LoopInsights_TestDataProvider.swift */, + EF3390DD6BCC87E617CF9C4E /* LoopInsights_SecureStorage.swift */, + 186598BBCF20AF6BFDA7C65E /* LoopInsights_SuggestionStore.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; + 64E225E5D16AAC4F29EDC1FA /* Resources */ = { + isa = PBXGroup; + children = ( + D039CC9018413633A20943E1 /* LoopInsights */, + ); + path = Resources; + sourceTree = ""; + }; + D039CC9018413633A20943E1 /* LoopInsights */ = { + isa = PBXGroup; + children = ( + 6339ED478F8AEB8DBDDD9324 /* LoopInsights_FeatureFlags.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; + 0CCABD3F947EB320F1E71E1A /* LoopInsights */ = { + isa = PBXGroup; + children = ( + DD1A8C2568AD3C055D53CABA /* LoopInsights_Coordinator.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; + 8B8260200F8E2C87C406E665 /* LoopInsights */ = { + isa = PBXGroup; + children = ( + 9807F50B2A84D11791A7C992 /* LoopInsights_ModelsTests.swift */, + 8E9EE7EF28AC643A5A61BA90 /* LoopInsights_SuggestionStoreTests.swift */, + 1DF3371B113CDE1971B80A91 /* LoopInsights_DataAggregatorTests.swift */, + ); + path = LoopInsights; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -3576,6 +3702,21 @@ 7E69CFFC2A16A77E00203CBD /* ResetLoopManager.swift in Sources */, B40D07C7251A89D500C1C6D7 /* GlucoseDisplay.swift in Sources */, 43C2FAE11EB656A500364AFF /* GlucoseEffectVelocity.swift in Sources */, + 7BA48343293E11001AB1CAD2 /* LoopInsights_Models.swift in Sources */, + FC5E93D39794E71B0FA5C2FD /* LoopInsights_SuggestionRecord.swift in Sources */, + AAE5993C1E1A822BFCD8D5A9 /* LoopInsights_DashboardViewModel.swift in Sources */, + 5B58FD84606E28D455284224 /* LoopInsights_DashboardView.swift in Sources */, + 6985216D28A1B2ADE17B40A0 /* LoopInsights_SettingsView.swift in Sources */, + D062E93B8CA1AFF98CCB804D /* LoopInsights_SuggestionDetailView.swift in Sources */, + C55289DE70B96F1DDAD60001 /* LoopInsights_SuggestionHistoryView.swift in Sources */, + 88B26E5EBD790388B811AA73 /* LoopInsights_DataAggregator.swift in Sources */, + 9B67835D9437872514B959ED /* LoopInsights_AIAnalysis.swift in Sources */, + BB812EF3B85C5D20E4663846 /* LoopInsights_AIServiceAdapter.swift in Sources */, + 26721D288EAABC6270DB048C /* LoopInsights_TestDataProvider.swift in Sources */, + 014EFF54B2555BF06508F782 /* LoopInsights_SecureStorage.swift in Sources */, + 9C14D255A2CA94966BAD7667 /* LoopInsights_SuggestionStore.swift in Sources */, + 17EAECD5386B86C1F7968394 /* LoopInsights_FeatureFlags.swift in Sources */, + 6C78970231AAF9CC3E477BCB /* LoopInsights_Coordinator.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3758,6 +3899,9 @@ C1900900252271BB00721625 /* SimpleBolusCalculatorTests.swift in Sources */, A9C1719725366F780053BCBD /* WatchHistoricalGlucoseTest.swift in Sources */, E93E86B224DDE21D00FF40C8 /* MockCarbStore.swift in Sources */, + 51E08775179BF0C6D3C4468A /* LoopInsights_ModelsTests.swift in Sources */, + 84F08AFCA333AFD961F8B037 /* LoopInsights_SuggestionStoreTests.swift in Sources */, + 11D448D84F8B6FDE43A9DC77 /* LoopInsights_DataAggregatorTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index fb33d3a80f..b3435231a2 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -587,6 +587,44 @@ } } }, + "(%@%%)" : { + "comment" : "A small label that shows the percentage change in a time block's value. The argument is the string “%+.0f”.", + "isCommentAutoGenerated" : true + }, + "%.1f%% time above range in %@" : { + "comment" : "LoopInsights pattern detail: consistent highs\nLoopInsights pattern detail: consistent highs moderate", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$.1f%% time above range in %2$@" + } + } + } + }, + "%.1f%% time below range in %@" : { + "comment" : "LoopInsights pattern detail: frequent lows\nLoopInsights pattern detail: frequent lows moderate", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$.1f%% time below range in %2$@" + } + } + } + }, + "%@ — %@" : { + "comment" : "A text displaying the date range of the loaded fixtures.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ — %2$@" + } + } + } + }, "%@ %@" : { "comment" : "The format for an active custom preset. (1: preset symbol)(2: preset name)", "localizations" : { @@ -718,6 +756,18 @@ } } }, + "%@ → %@" : { + "comment" : "A text field showing the current and proposed values for a specific time block, along with a percentage change indicator. The first argument is the string “%.1f”. The second argument is the string “%.1f”. The third argument is the change percentage, formatted to the nearest whole number.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ → %2$@" + } + } + } + }, "%@ absorbed" : { "comment" : "Formats absorbed carb value", "localizations" : { @@ -3136,6 +3186,16 @@ } } }, + "%d suggestions" : { + "comment" : "LoopInsights suggestion count" + }, + "%d time blocks" : { + "comment" : "LoopInsights time block count" + }, + "%lld" : { + "comment" : "The text that appears next to the \"Suggestion History\" label in the LoopInsights settings view, showing the number of suggestion records stored.", + "isCommentAutoGenerated" : true + }, "⚠️" : { "localizations" : { "da" : { @@ -3194,6 +3254,15 @@ } } }, + "3 Days" : { + "comment" : "LoopInsights analysis period: 3 days" + }, + "7 Days" : { + "comment" : "LoopInsights analysis period: 7 days" + }, + "14 Days" : { + "comment" : "LoopInsights analysis period: 14 days" + }, "15 min glucose regression coefficient (b₁), continued with decay over 30 min" : { "comment" : "Description of the prediction input effect for glucose momentum", "localizations" : { @@ -3319,6 +3388,9 @@ } } }, + "30 Days" : { + "comment" : "LoopInsights analysis period: 30 days" + }, "30 min comparison of glucose prediction vs actual, continued with decay over 60 min" : { "comment" : "Description of the prediction input effect for retrospective correction", "localizations" : { @@ -3438,6 +3510,9 @@ } } }, + "90 Days" : { + "comment" : "LoopInsights analysis period: 90 days" + }, "A few seconds remaining" : { "comment" : "Estimated remaining duration with a few seconds", "localizations" : { @@ -4373,6 +4448,9 @@ } } }, + "Active" : { + "comment" : "LoopInsights developer mode active" + }, "Active Carbohydrates" : { "comment" : "The title of the Carbs On-Board graph", "localizations" : { @@ -5693,6 +5771,17 @@ } } }, + "Adjust %@ across %d time blocks" : { + "comment" : "LoopInsights: multi-block suggestion summary", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Adjust %1$@ across %2$d time blocks" + } + } + } + }, "Adjusted for" : { "localizations" : { "da" : { @@ -5775,6 +5864,30 @@ } } }, + "Advanced API Settings" : { + "comment" : "LoopInsights advanced settings toggle" + }, + "AI Assessment" : { + "comment" : "LoopInsights assessment header" + }, + "AI CONFIGURATION" : { + "comment" : "LoopInsights AI config header" + }, + "AI PERSONALITY" : { + "comment" : "LoopInsights AI personality header" + }, + "AI Provider Error: %@" : { + "comment" : "LoopInsights error: AI provider" + }, + "AI Reasoning" : { + "comment" : "LoopInsights reasoning header" + }, + "AI therapy suggestions are advisory only. You are responsible for reviewing all changes. Consult your healthcare provider for significant therapy adjustments." : { + "comment" : "LoopInsights medical disclaimer" + }, + "AI-powered therapy settings analysis" : { + "comment" : "LoopInsights settings descriptive text" + }, "Alert Management" : { "comment" : "Alert Permissions button text\nTitle of alert management screen", "localizations" : { @@ -6379,6 +6492,9 @@ } } }, + "All past AI suggestions, including applied, dismissed, and expired records." : { + "comment" : "LoopInsights history description" + }, "Amount Consumed" : { "comment" : "Label for carb quantity entry row on carb entry screen", "localizations" : { @@ -6973,6 +7089,18 @@ } } }, + "ANALYSIS OPTIONS" : { + "comment" : "LoopInsights analysis options header" + }, + "Analysis Period" : { + "comment" : "LoopInsights period picker label" + }, + "Analyze %@" : { + "comment" : "LoopInsights analyze button" + }, + "Analyzing..." : { + "comment" : "LoopInsights analyzing" + }, "API Key" : { "comment" : "The title of the amplitude API key credential", "extractionState" : "manual", @@ -7249,6 +7377,9 @@ } } }, + "API Version" : { + "comment" : "LoopInsights API version label" + }, "App Profile" : { "comment" : "Settings app profile section", "localizations" : { @@ -7385,6 +7516,21 @@ } } }, + "Applied" : { + "comment" : "LoopInsights suggestion status: user applied" + }, + "Applied via" : { + "comment" : "LoopInsights applied via label" + }, + "Apply" : { + "comment" : "LoopInsights apply\nLoopInsights apply button" + }, + "Apply Suggestion" : { + "comment" : "LoopInsights apply confirmation title\nLoopInsights apply suggestion button" + }, + "Apply suggestions with a single tap. You'll see a confirmation with a responsibility disclaimer." : { + "comment" : "LoopInsights apply mode description: one-tap" + }, "Are you sure you want to delete all history entries?" : { "comment" : "Action sheet confirmation message for pump history deletion", "localizations" : { @@ -8419,6 +8565,49 @@ } } }, + "Auto-Applied" : { + "comment" : "LoopInsights suggestion status: automatically applied" + }, + "Auto-Apply" : { + "comment" : "LoopInsights apply mode: automatically apply suggestions (developer only)" + }, + "Auto-Apply is enabled. High-confidence suggestions will be applied automatically." : { + "comment" : "LoopInsights auto-apply warning" + }, + "Auto-detected:" : { + "comment" : "LoopInsights auto-detected format label" + }, + "Average Glucose" : { + "comment" : "LoopInsights avg glucose label" + }, + "Average glucose %.0f mg/dL with %.1f%% below range" : { + "comment" : "LoopInsights pattern detail: consistent lows", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Average glucose %1$.0f mg/dL with %2$.1f%% below range" + } + } + } + }, + "Average overnight glucose %.0f mg/dL in %@" : { + "comment" : "LoopInsights pattern detail: overnight highs\nLoopInsights pattern detail: overnight highs moderate\nLoopInsights pattern detail: overnight lows\nLoopInsights pattern detail: overnight lows moderate", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Average overnight glucose %1$.0f mg/dL in %2$@" + } + } + } + }, + "Average rise of %.0f mg/dL between 3 AM–7 AM" : { + "comment" : "LoopInsights pattern detail: dawn phenomenon\nLoopInsights pattern detail: dawn phenomenon moderate" + }, + "Basal Rate" : { + "comment" : "LoopInsights setting type: Basal Rate" + }, "Basal Rate Schedule" : { "comment" : "Details for configuration error when basal rate schedule is missing", "localizations" : { @@ -8682,6 +8871,9 @@ } } }, + "Base URL" : { + "comment" : "LoopInsights base URL label" + }, "Based on your predicted glucose, no bolus is recommended." : { "comment" : "Caption for bolus screen notice when no bolus is recommended for the predicted glucose", "localizations" : { @@ -9895,7 +10087,7 @@ } }, "Cancel" : { - "comment" : "Button label for cancel\nButton text to cancel\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", + "comment" : "Button label for cancel\nButton text to cancel\nCancel button\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", "localizations" : { "ar" : { "stringUnit" : { @@ -10423,6 +10615,9 @@ } } }, + "Carb Ratio" : { + "comment" : "LoopInsights setting type: Carb Ratio" + }, "Carb Ratio Schedule" : { "comment" : "Details for configuration error when carb ratio schedule is missing", "localizations" : { @@ -12003,6 +12198,18 @@ } } }, + "Clear All" : { + "comment" : "LoopInsights clear all button" + }, + "Clear History" : { + "comment" : "LoopInsights clear history alert title" + }, + "Clear Suggestion History" : { + "comment" : "LoopInsights clear history button" + }, + "Clinical Expert" : { + "comment" : "LoopInsights personality: clinical expert" + }, "Close" : { "comment" : "Button title to close view\nThe button label of the action used to dismiss the unsafe notification permission alert", "localizations" : { @@ -12466,6 +12673,9 @@ } } }, + "Coefficient of variation %.1f%% (target <36%%)" : { + "comment" : "LoopInsights pattern detail: high variability\nLoopInsights pattern detail: high variability moderate" + }, "com.loudnate.InsulinKit.IOBDateLabel" : { "comment" : "The format string describing the date of an IOB value. The first format argument is the localized date.", "extractionState" : "extracted_with_value", @@ -12909,6 +13119,9 @@ } } }, + "Confidence Level:" : { + "comment" : "LoopInsights confidence legend label" + }, "Configuration" : { "comment" : "The title of the Configuration section in settings", "localizations" : { @@ -13166,6 +13379,18 @@ "comment" : "A link that takes the user to a view where they can configure the display of the live activity screen on their lock screen and in CarPlay.", "isCommentAutoGenerated" : true }, + "Configure your AI API key in LoopInsights Settings to begin analysis." : { + "comment" : "LoopInsights no API key message" + }, + "Connected" : { + "comment" : "LoopInsights connection success" + }, + "Consistent Highs" : { + "comment" : "LoopInsights pattern: consistent highs" + }, + "Consistent Lows" : { + "comment" : "LoopInsights pattern: consistent lows" + }, "Continue" : { "comment" : "Button label for continue\nDefault alert dismissal", "localizations" : { @@ -13921,6 +14146,9 @@ } } }, + "Current" : { + "comment" : "LoopInsights current value label" + }, "Current Glucose" : { "comment" : "Label for glucose entry row on simple bolus screen", "localizations" : { @@ -14367,6 +14595,9 @@ } } }, + "CV" : { + "comment" : "LoopInsights CV label" + }, "Date" : { "comment" : "Date picker label", "localizations" : { @@ -14492,6 +14723,9 @@ } } }, + "Dawn Phenomenon" : { + "comment" : "LoopInsights pattern: dawn phenomenon" + }, "dB" : { "comment" : "The short unit display string for decibles", "localizations" : { @@ -14611,6 +14845,9 @@ } } }, + "Decrease" : { + "comment" : "LoopInsights: decrease direction" + }, "Delete" : { "localizations" : { "ar" : { @@ -15826,6 +16063,18 @@ } } }, + "Detected Patterns" : { + "comment" : "LoopInsights detected patterns header" + }, + "DEVELOPER" : { + "comment" : "LoopInsights developer section header" + }, + "Developer Mode" : { + "comment" : "LoopInsights developer mode alert title\nLoopInsights developer mode label" + }, + "Developer mode has been enabled. You now have access to test data fixtures and auto-apply mode." : { + "comment" : "LoopInsights developer mode unlocked message" + }, "Diabetes Treatment" : { "comment" : "Descriptive text for Therapy Settings", "localizations" : { @@ -15986,6 +16235,12 @@ } } }, + "Direct and no-nonsense. Holds you accountable and tells it like it is." : { + "comment" : "LoopInsights personality desc: tough love" + }, + "Disable Developer Mode" : { + "comment" : "LoopInsights disable developer button" + }, "Disables" : { "comment" : "The action hint of the workout mode toggle button when enabled", "localizations" : { @@ -16106,7 +16361,7 @@ } }, "Dismiss" : { - "comment" : "Default alert dismissal\nThe button label of the action used to dismiss an error alert", + "comment" : "Default alert dismissal\nLoopInsights dismiss\nThe button label of the action used to dismiss an error alert", "localizations" : { "ar" : { "stringUnit" : { @@ -16224,6 +16479,15 @@ } } }, + "Dismiss All" : { + "comment" : "LoopInsights dismiss all button" + }, + "Dismiss Suggestion" : { + "comment" : "LoopInsights dismiss suggestion button" + }, + "Dismissed" : { + "comment" : "LoopInsights suggestion status: user dismissed" + }, "Display colors for glucose" : { "comment" : "Title for glucose coloring" }, @@ -16237,7 +16501,12 @@ "Display up to 4 items. Display label is in parentheses." : { "comment" : "Indicates the maximum number of items that can be displayed and how the label for each item is shortened." }, + "Documents path: %@" : { + "comment" : "A text label displaying the path to the directory containing the test data files.", + "isCommentAutoGenerated" : true + }, "Done" : { + "comment" : "Done button", "localizations" : { "cs" : { "stringUnit" : { @@ -16515,6 +16784,9 @@ } } }, + "Dry Wit" : { + "comment" : "LoopInsights personality: dry wit" + }, "Duration exceeds: %1$.1f hours" : { "comment" : "Override error description: duration exceed max (1: max duration in hours).", "localizations" : { @@ -16586,6 +16858,24 @@ } } }, + "e.g. /chat/completions" : { + "comment" : "A placeholder text for the endpoint path in the LoopInsights settings view.", + "isCommentAutoGenerated" : true + }, + "e.g. 2024-06-01 (Azure only)" : { + "comment" : "A hint explaining that the API version for Azure is \"e.g. 2024-06-01\".", + "isCommentAutoGenerated" : true + }, + "e.g. gpt-4o, claude-sonnet-4-5-20250514, gemini-2.0-flash" : { + + }, + "e.g. https://api.openai.com/v1" : { + + }, + "e.g. org-... (OpenAI, Azure)" : { + "comment" : "A placeholder text for the user to enter their OpenAI or Azure organization ID.", + "isCommentAutoGenerated" : true + }, "Enable\nBluetooth" : { "comment" : "Message to the user to enable bluetooth", "localizations" : { @@ -16681,6 +16971,9 @@ } } }, + "Enable AI-powered therapy settings analysis and suggestions. When disabled, the feature is hidden but settings are preserved." : { + "comment" : "LoopInsights feature toggle description" + }, "Enable Glucose Based Partial Application" : { "comment" : "Title for Glucose Based Partial Application toggle", "localizations" : { @@ -16763,6 +17056,9 @@ } } }, + "Enable LoopInsights" : { + "comment" : "LoopInsights enable toggle" + }, "Enabled" : { "comment" : "Title for enable live activity toggle", "localizations" : { @@ -16899,6 +17195,12 @@ } } }, + "Encouraging and positive. Celebrates your wins and gently explains areas for improvement." : { + "comment" : "LoopInsights personality desc: supportive coach" + }, + "Endpoint Path" : { + "comment" : "LoopInsights endpoint path label" + }, "Enter a blood glucose from a meter for a recommended bolus amount." : { "comment" : "Caption for bolus screen notice when glucose data is missing or stale", "localizations" : { @@ -17399,6 +17701,12 @@ } } }, + "Enter your API key" : { + "comment" : "LoopInsights API key placeholder" + }, + "Enter your preferred AI API connection details. Any provider that supports chat completions will work." : { + "comment" : "LoopInsights AI config description" + }, "Error Canceling Bolus" : { "comment" : "The alert title for an error while canceling a bolus", "localizations" : { @@ -18404,6 +18712,12 @@ } } }, + "Failed to apply settings: %@" : { + "comment" : "LoopInsights error: settings write" + }, + "Failed to parse AI response: %@" : { + "comment" : "LoopInsights error: parse" + }, "Failed to Resume Insulin Delivery" : { "comment" : "The alert title for a resume error", "localizations" : { @@ -18719,6 +19033,9 @@ } } }, + "Filter" : { + "comment" : "LoopInsights filter picker" + }, "Fingerstick Glucose" : { "comment" : "Label for manual glucose entry row on bolus screen", "localizations" : { @@ -18891,6 +19208,9 @@ } } }, + "Fixtures loaded" : { + "comment" : "LoopInsights fixtures loaded" + }, "Food Type" : { "comment" : "Label for food type entry on add favorite food screen", "localizations" : { @@ -19335,6 +19655,13 @@ } } }, + "Format" : { + "comment" : "A label for a segmented control in the LoopInsights settings view.", + "isCommentAutoGenerated" : true + }, + "Frequent Lows" : { + "comment" : "LoopInsights pattern: frequent lows" + }, "Frequently asked questions about alerts" : { "comment" : "Label for link to see frequently asked questions", "localizations" : { @@ -19388,6 +19715,9 @@ } } }, + "Full endpoint URL:" : { + "comment" : "LoopInsights endpoint preview label" + }, "g" : { "comment" : "The short unit display string for grams", "localizations" : { @@ -19513,6 +19843,12 @@ } } }, + "g/U" : { + "comment" : "LoopInsights unit: grams per unit of insulin" + }, + "Get an API key from a provider:" : { + "comment" : "LoopInsights API key links header" + }, "Get help with Alert Permissions" : { "comment" : "Get help with Alert Permissions support button text", "localizations" : { @@ -20415,6 +20751,9 @@ } } }, + "GMI (est. A1C)" : { + "comment" : "LoopInsights GMI label" + }, "HARDWARE SOUNDS" : { "localizations" : { "da" : { @@ -20467,6 +20806,9 @@ } } }, + "High" : { + "comment" : "LoopInsights confidence: high\nLoopInsights legend: high" + }, "High Glucose" : { "localizations" : { "da" : { @@ -20519,6 +20861,9 @@ } } }, + "High Variability" : { + "comment" : "LoopInsights pattern: high variability" + }, "How can I silence non-Critical Alerts?" : { "localizations" : { "da" : { @@ -20936,6 +21281,9 @@ } } }, + "Increase" : { + "comment" : "LoopInsights: increase direction" + }, "Indefinitely" : { "comment" : "The title of a target alert action specifying an indefinitely long workout targets duration", "extractionState" : "manual", @@ -21090,6 +21438,9 @@ } } }, + "Insufficient data for analysis: %@" : { + "comment" : "LoopInsights error: insufficient data" + }, "Insulin" : { "comment" : "Title of the prediction input effect for insulin", "localizations" : { @@ -21996,6 +22347,9 @@ } } }, + "Insulin Sensitivity" : { + "comment" : "LoopInsights setting type: Insulin Sensitivity Factor" + }, "Insulin Sensitivity Schedule" : { "comment" : "Details for configuration error when insulin sensitivity schedule is missing", "localizations" : { @@ -23185,6 +23539,9 @@ } } }, + "Keychain Error: %@" : { + "comment" : "LoopInsights error: keychain" + }, "Large Meal Entered" : { "comment" : "Title of the warning shown when a large meal was entered", "localizations" : { @@ -23268,6 +23625,9 @@ } } }, + "Last analysis: %@" : { + "comment" : "LoopInsights last analysis date" + }, "Launches CGM app" : { "comment" : "Glucose HUD accessibility hint", "extractionState" : "manual", @@ -23483,6 +23843,9 @@ } } }, + "Leave blank to use the default for your chosen format." : { + "comment" : "LoopInsights endpoint path hint" + }, "Less than a minute remaining" : { "comment" : "Estimated remaining duration with less than a minute", "localizations" : { @@ -23589,6 +23952,15 @@ } } }, + "Load JSON fixtures from Documents/LoopInsights/ instead of real Loop data. Use pull_tidepool_data.py to generate fixtures from your Tidepool account." : { + "comment" : "LoopInsights test data description" + }, + "Loading test data..." : { + "comment" : "LoopInsights loading test data" + }, + "Loading therapy settings..." : { + "comment" : "LoopInsights loading settings" + }, "Loading..." : { "comment" : "The loading message for the diagnostic report screen", "localizations" : { @@ -24010,6 +24382,9 @@ } } }, + "Lookback Period" : { + "comment" : "LoopInsights period picker" + }, "Loop Crashed" : { "comment" : "Title for crash recovery alert", "localizations" : { @@ -24787,6 +25162,22 @@ } } }, + "LoopInsights" : { + "comment" : "LoopInsights dashboard title\nLoopInsights header\nLoopInsights settings button" + }, + "LOOPINSIGHTS" : { + "comment" : "The uppercase name of the feature.", + "isCommentAutoGenerated" : true + }, + "LoopInsights analyzes your glucose, insulin, and carb data to suggest adjustments to your Basal Rates, Carb Ratios, and Insulin Sensitivity factors. Tap one of the settings, choose a lookback period, and tap Analyze to get AI-generated suggestions. All changes require your review and approval." : { + "comment" : "LoopInsights subtitle" + }, + "LoopInsights Settings" : { + "comment" : "LoopInsights settings title" + }, + "Low" : { + "comment" : "LoopInsights confidence: low\nLoopInsights legend: low" + }, "Low Glucose" : { "comment" : "Title for bolus screen warning when glucose is below glucose warning limit.\nTitle for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended", "localizations" : { @@ -25006,6 +25397,9 @@ } } }, + "Manual" : { + "comment" : "LoopInsights apply mode: navigate to settings manually" + }, "Manual Dose: %1$@ %2$@" : { "comment" : "Description of a bolus dose entry (1: value (? if no value) in bold, 2: unit)", "localizations" : { @@ -25463,6 +25857,12 @@ } } }, + "MEDICAL DISCLAIMER" : { + "comment" : "LoopInsights medical disclaimer header" + }, + "Medium" : { + "comment" : "LoopInsights confidence: medium\nLoopInsights legend: medium" + }, "mg/dL" : { "comment" : "The short unit display string for milligrams of glucose per decilter", "localizations" : { @@ -25588,6 +25988,9 @@ } } }, + "mg/dL per U" : { + "comment" : "LoopInsights unit: mg/dL per unit of insulin" + }, "Missed Meal Notifications" : { "comment" : "Title for missed meal notifications toggle", "localizations" : { @@ -26003,6 +26406,9 @@ } } }, + "Model" : { + "comment" : "LoopInsights model label" + }, "Momentum effects" : { "comment" : "Details for missing data error when momentum effects are missing", "localizations" : { @@ -26235,6 +26641,9 @@ } } }, + "Most providers use OpenAI Compatible. Only change this if auto-detection is wrong." : { + "comment" : "LoopInsights format override hint" + }, "Mute All Alerts" : { "comment" : "Label for button to mute all alerts", "localizations" : { @@ -26693,6 +27102,9 @@ } } }, + "Network Error: %@" : { + "comment" : "LoopInsights error: network" + }, "New Favorite Food" : { "comment" : "Title of new favorite food screen", "localizations" : { @@ -26895,6 +27307,9 @@ } } }, + "No API key configured. Please add your API key in LoopInsights Settings." : { + "comment" : "LoopInsights error: no API key" + }, "No Bolus Recommended" : { "comment" : "Title for bolus screen notice when no bolus is recommended\nTitle for bolus screen warning when glucose is below suspend threshold, and a bolus is not recommended\nTitle for bolus screen warning when no bolus is recommended", "localizations" : { @@ -26984,6 +27399,12 @@ } } }, + "No changes" : { + "comment" : "LoopInsights legend: OK" + }, + "No changes suggested" : { + "comment" : "LoopInsights: no suggestion" + }, "No connected devices, or failure during device connection" : { "comment" : "The error message displayed for device connection errors.", "localizations" : { @@ -27103,6 +27524,9 @@ } } }, + "No fixtures found" : { + "comment" : "LoopInsights no fixtures" + }, "No Maximum Bolus Configured" : { "comment" : "Alert title for a missing maximum bolus setting error", "localizations" : { @@ -27578,6 +28002,9 @@ } } }, + "No suggestions yet" : { + "comment" : "LoopInsights empty history title" + }, "No, edit amount" : { "comment" : "The title of the action used when rejecting the the amount of carbohydrates entered.", "localizations" : { @@ -27792,6 +28219,9 @@ } } }, + "Not analyzed" : { + "comment" : "LoopInsights legend: not analyzed" + }, "Notification Delivery" : { "comment" : "Notification Delivery Status text", "localizations" : { @@ -28457,7 +28887,7 @@ } }, "OK" : { - "comment" : "Alert acknowledgment OK button\nCritical Alert permissions disabled alert button\nDefault action for alert when alert acknowledgment fails\nNotifications permissions disabled alert button\nText for ok action on notification of upcoming TestFlight expiration\nText for ok action on notification of upcoming profile expiration\nThe title of the notification action to acknowledge a device alert", + "comment" : "Alert acknowledgment OK button\nCritical Alert permissions disabled alert button\nDefault action for alert when alert acknowledgment fails\nNotifications permissions disabled alert button\nOK button\nText for ok action on notification of upcoming TestFlight expiration\nText for ok action on notification of upcoming profile expiration\nThe title of the notification action to acknowledge a device alert", "localizations" : { "ar" : { "stringUnit" : { @@ -28718,6 +29148,24 @@ } } }, + "One-Tap Apply" : { + "comment" : "LoopInsights apply mode: apply with confirmation" + }, + "Open Dashboard" : { + "comment" : "LoopInsights open dashboard button" + }, + "Opens the Therapy Settings editor with the suggested value pre-filled. You confirm by tapping Save." : { + "comment" : "LoopInsights apply mode description: pre-fill" + }, + "Organization ID" : { + "comment" : "LoopInsights org ID label" + }, + "Overnight Highs" : { + "comment" : "LoopInsights pattern: overnight highs" + }, + "Overnight Lows" : { + "comment" : "LoopInsights pattern: overnight lows" + }, "Override Presets" : { "comment" : "The title text for the override presets", "extractionState" : "manual", @@ -28844,6 +29292,15 @@ } } }, + "Pending" : { + "comment" : "LoopInsights suggestion status: pending review" + }, + "Pick from your Current Therapy Settings" : { + "comment" : "LoopInsights current settings header" + }, + "Place fixture files in Documents/LoopInsights/ or rebuild with bundled test data." : { + "comment" : "LoopInsights no fixtures hint" + }, "Possible Missed Meal" : { "comment" : "The notification title for a meal that was possibly not logged in Loop.", "localizations" : { @@ -28921,6 +29378,15 @@ } } }, + "Post-meal glucose spikes detected at %d of 3 meal windows" : { + "comment" : "LoopInsights pattern detail: post-meal spikes" + }, + "Post-Meal Spikes" : { + "comment" : "LoopInsights pattern: post-meal spikes" + }, + "Pre-Fill Editor" : { + "comment" : "LoopInsights apply mode: navigate to editor with value pre-filled" + }, "Pre-Meal Targets" : { "comment" : "The label of the pre-meal mode toggle button", "localizations" : { @@ -29862,6 +30328,9 @@ } } }, + "Professional and evidence-based. Precise medical terminology with clear clinical reasoning." : { + "comment" : "LoopInsights personality desc: clinical expert" + }, "Profile Expiration" : { "comment" : "Settings App Profile expiration view", "localizations" : { @@ -30111,6 +30580,12 @@ } } }, + "Proposed" : { + "comment" : "LoopInsights proposed value label" + }, + "Proposed Changes" : { + "comment" : "LoopInsights proposed changes header" + }, "Pump" : { "comment" : "The title of the pump section in settings", "extractionState" : "manual", @@ -31682,6 +32157,12 @@ } } }, + "Reasoning" : { + "comment" : "LoopInsight's detailed reasoning" + }, + "Rebound Highs" : { + "comment" : "LoopInsights pattern: rebound highs" + }, "Recommendation expired: %1$@ old" : { "comment" : "The error message when a recommendation has expired. (1: age of recommendation in minutes)", "localizations" : { @@ -32397,6 +32878,9 @@ } } }, + "Request Format Override" : { + "comment" : "LoopInsights format override label" + }, "Reservoir" : { "comment" : "Segmented button title for insulin delivery log reservoir history", "localizations" : { @@ -32574,6 +33058,12 @@ } } }, + "Reset" : { + "comment" : "LoopInsights reset format button" + }, + "Response Style" : { + "comment" : "LoopInsights personality picker label" + }, "Retrospective Correction" : { "comment" : "Title of the prediction input effect for retrospective correction", "localizations" : { @@ -32824,6 +33314,15 @@ } } }, + "Review" : { + "comment" : "LoopInsights legend: review" + }, + "Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { + "comment" : "LoopInsights analysis period description" + }, + "Run an analysis from the LoopInsights Dashboard to generate your first suggestions." : { + "comment" : "LoopInsights empty history message" + }, "Save" : { "localizations" : { "da" : { @@ -34505,6 +35004,27 @@ } } }, + "Status" : { + "comment" : "LoopInsights status header" + }, + "Stored securely in Keychain" : { + "comment" : "LoopInsights keychain confirmation" + }, + "Stored Suggestions" : { + "comment" : "LoopInsights stored suggestions label" + }, + "Suggestion History" : { + "comment" : "LoopInsights history button\nLoopInsights history title" + }, + "SUGGESTION HISTORY" : { + "comment" : "LoopInsights history header" + }, + "Suggestions are applied automatically when confidence is high. All changes are logged." : { + "comment" : "LoopInsights apply mode description: auto-apply" + }, + "Suggestions for Fine Tuning" : { + "comment" : "LoopInsights suggestions header" + }, "Support" : { "comment" : "Section title for Support\nThe title of the support section in settings", "localizations" : { @@ -34594,6 +35114,9 @@ } } }, + "Supportive Coach" : { + "comment" : "LoopInsights personality: supportive coach" + }, "Suspend Threshold" : { "comment" : "The title text in settings", "extractionState" : "manual", @@ -35449,6 +35972,9 @@ } } }, + "Test Connection" : { + "comment" : "LoopInsights test connection button" + }, "TestFlight" : { "comment" : "Settings app TestFlight section", "localizations" : { @@ -35673,6 +36199,9 @@ } } }, + "Testing..." : { + "comment" : "LoopInsights testing connection" + }, "The bolus amount entered is smaller than the minimum deliverable." : { "comment" : "Alert message for a bolus too small validation error", "localizations" : { @@ -36690,6 +37219,18 @@ } } }, + "This section is for self-hosted, Azure, or non-standard API endpoints. Most users can ignore these." : { + "comment" : "LoopInsights advanced settings description" + }, + "This will modify your therapy settings. You are responsible for reviewing and verifying all changes. AI suggestions are advisory and may not be appropriate for your situation. Consult your healthcare provider for significant therapy adjustments." : { + "comment" : "LoopInsights apply disclaimer" + }, + "This will permanently delete all suggestion history. This cannot be undone." : { + "comment" : "LoopInsights clear history warning" + }, + "Time in Range" : { + "comment" : "LoopInsights TIR label" + }, "Time Sensitive Alerts" : { "localizations" : { "da" : { @@ -36825,6 +37366,12 @@ } } }, + "Total Daily Dose" : { + "comment" : "LoopInsights TDD label" + }, + "Tough Love" : { + "comment" : "LoopInsights personality: tough love" + }, "Transmitter Low Battery" : { "localizations" : { "da" : { @@ -37239,6 +37786,9 @@ } } }, + "U/hr" : { + "comment" : "LoopInsights unit: units per hour" + }, "Unable To Clear Alert" : { "comment" : "Title for alert shown when alert acknowledgement fails", "localizations" : { @@ -37803,6 +38353,9 @@ } } }, + "Unknown error" : { + "comment" : "LoopInsights unknown error" + }, "Unknown Error: %1$@" : { "comment" : "The error message displayed for unknown errors. (1: unknown error)", "localizations" : { @@ -38744,6 +39297,9 @@ } } }, + "Use Test Data Fixtures" : { + "comment" : "LoopInsights test data toggle" + }, "Use the Mute Alerts feature. It allows you to temporarily silence all of your alerts and alarms via the %1$@ app, including Critical Alerts and Time Sensitive Alerts." : { "comment" : "Description text for temporarily silencing all sounds (1: app name)", "localizations" : { @@ -39012,6 +39568,12 @@ } } }, + "View the suggested values, then navigate to Therapy Settings to make changes yourself." : { + "comment" : "LoopInsights apply mode description: manual" + }, + "View therapy settings, run AI analysis, and manage suggestions" : { + "comment" : "LoopInsights dashboard description" + }, "Walsh" : { "comment" : "Title of insulin model setting", "extractionState" : "manual", @@ -39267,6 +39829,9 @@ } } }, + "When applying suggestions" : { + "comment" : "LoopInsights apply mode picker" + }, "When current or forecasted glucose is below the glucose safety limit, Loop will not recommend a bolus, and will always recommend a temporary basal rate of 0 units per hour." : { "comment" : "Explanation of glucose safety limit", "localizations" : { @@ -39811,6 +40376,9 @@ } } }, + "Witty and clever. No sugar-coating (pun intended) — helpful advice with a side of humor." : { + "comment" : "LoopInsights personality desc: dry wit" + }, "Workout Targets" : { "comment" : "The label of the workout mode toggle button", "localizations" : { diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift new file mode 100644 index 0000000000..10b1ff4354 --- /dev/null +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -0,0 +1,156 @@ +// +// LoopInsights_Coordinator.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +/// Orchestrates all LoopInsights services and manages the feature lifecycle. +/// Created when LoopInsights is accessed from Settings. Owns the DataAggregator, +/// SuggestionStore, and AIAnalysis service, and provides the data access bridge +/// between Loop's stores and LoopInsights' analysis engine. +final class LoopInsights_Coordinator: ObservableObject { + + // MARK: - Services + + let dataAggregator: LoopInsights_DataAggregator + let aiAnalysis: LoopInsights_AIAnalysis + let suggestionStore: LoopInsights_SuggestionStore + + // MARK: - Data Provider Bridge + + private var dataProviderBridge: DataProviderBridge? + + /// Retained reference to test data provider (when using fixtures). + private var testDataProvider: LoopInsights_TestDataProvider? + + // MARK: - Initialization + + /// Initialize with Loop's existing store references. + /// The coordinator only reads from these stores — it never writes glucose, dose, or carb data. + init( + glucoseStore: GlucoseStoreProtocol, + doseStore: DoseStoreProtocol, + carbStore: CarbStoreProtocol, + settingsProvider: LatestStoredSettingsProvider + ) { + let bridge = DataProviderBridge( + glucoseStore: glucoseStore, + doseStore: doseStore, + carbStore: carbStore, + settingsProvider: settingsProvider + ) + self.dataProviderBridge = bridge + self.dataAggregator = LoopInsights_DataAggregator(dataProvider: bridge) + self.aiAnalysis = LoopInsights_AIAnalysis() + self.suggestionStore = LoopInsights_SuggestionStore.shared + } + + /// Initialize with test data fixtures (for simulator/developer mode). + /// Loads JSON fixtures from Documents/LoopInsights/ or the app bundle. + init(testDataProvider: LoopInsights_TestDataProvider) { + self.testDataProvider = testDataProvider + self.dataProviderBridge = nil + self.dataAggregator = LoopInsights_DataAggregator(dataProvider: testDataProvider) + self.aiAnalysis = LoopInsights_AIAnalysis() + self.suggestionStore = LoopInsights_SuggestionStore.shared + } + + /// Factory method: creates a Coordinator with test data if available and enabled, + /// otherwise returns nil (caller should fall back to real stores). + static func withTestDataIfAvailable() -> LoopInsights_Coordinator? { + guard LoopInsights_FeatureFlags.useTestData else { return nil } + + let provider = LoopInsights_TestDataProvider() + guard provider.hasTestData else { + print("[LoopInsights] Test data mode enabled but no fixtures found") + return nil + } + + print("[LoopInsights] Using test data: \(provider.dataSummary)") + return LoopInsights_Coordinator(testDataProvider: provider) + } + + // MARK: - Therapy Settings Write Access + + /// Reference to settings provider for write operations (one-tap apply) + private var settingsProvider: LatestStoredSettingsProvider? { + return dataProviderBridge?.settingsProvider + } + + /// Capture a snapshot of the current therapy settings + func captureCurrentSnapshot() throws -> LoopInsightsTherapySnapshot { + return try dataAggregator.captureTherapySnapshot() + } +} + +// MARK: - Data Provider Bridge + +/// Bridges Loop's concrete store types to the LoopInsightsDataProviderProtocol. +/// This keeps LoopInsights decoupled from the specific store implementations. +private final class DataProviderBridge: LoopInsightsDataProviderProtocol { + + private let glucoseStore: GlucoseStoreProtocol + private let doseStore: DoseStoreProtocol + private let carbStore: CarbStoreProtocol + fileprivate let settingsProvider: LatestStoredSettingsProvider + + init( + glucoseStore: GlucoseStoreProtocol, + doseStore: DoseStoreProtocol, + carbStore: CarbStoreProtocol, + settingsProvider: LatestStoredSettingsProvider + ) { + self.glucoseStore = glucoseStore + self.doseStore = doseStore + self.carbStore = carbStore + self.settingsProvider = settingsProvider + } + + func getGlucoseSamples(start: Date, end: Date) async throws -> [StoredGlucoseSample] { + return try await withCheckedThrowingContinuation { continuation in + glucoseStore.getGlucoseSamples(start: start, end: end) { result in + continuation.resume(with: result) + } + } + } + + func getCarbEntries(start: Date, end: Date) async throws -> [StoredCarbEntry] { + // CarbStoreProtocol doesn't expose getCarbEntries; cast to concrete CarbStore + guard let store = carbStore as? CarbStore else { + throw LoopInsightsError.insufficientData("CarbStore not available") + } + return try await withCheckedThrowingContinuation { continuation in + store.getCarbEntries(start: start, end: end) { result in + switch result { + case .success(let entries): + continuation.resume(returning: entries) + case .failure(let error): + continuation.resume(throwing: error) + } + } + } + } + + func getNormalizedDoseEntries(start: Date, end: Date) async throws -> [DoseEntry] { + return try await withCheckedThrowingContinuation { continuation in + doseStore.getNormalizedDoseEntries(start: start, end: end) { result in + switch result { + case .success(let entries): + continuation.resume(returning: entries) + case .failure(let error): + continuation.resume(throwing: error) + } + } + } + } + + func getLatestStoredSettings() -> StoredSettings { + return settingsProvider.latestSettings + } +} diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift new file mode 100644 index 0000000000..7ece698423 --- /dev/null +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -0,0 +1,674 @@ +// +// LoopInsights_Models.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +// MARK: - Setting Type + +/// The three therapy settings LoopInsights can analyze and suggest changes for +enum LoopInsightsSettingType: String, Codable, CaseIterable, Identifiable { + case carbRatio = "carb_ratio" + case insulinSensitivity = "insulin_sensitivity" + case basalRate = "basal_rate" + + var id: String { rawValue } + + var displayName: String { + switch self { + case .carbRatio: + return NSLocalizedString("Carb Ratio", comment: "LoopInsights setting type: Carb Ratio") + case .insulinSensitivity: + return NSLocalizedString("Insulin Sensitivity", comment: "LoopInsights setting type: Insulin Sensitivity Factor") + case .basalRate: + return NSLocalizedString("Basal Rate", comment: "LoopInsights setting type: Basal Rate") + } + } + + var abbreviation: String { + switch self { + case .carbRatio: return "CR" + case .insulinSensitivity: return "ISF" + case .basalRate: return "BR" + } + } + + var unitDescription: String { + switch self { + case .carbRatio: + return NSLocalizedString("g/U", comment: "LoopInsights unit: grams per unit of insulin") + case .insulinSensitivity: + return NSLocalizedString("mg/dL per U", comment: "LoopInsights unit: mg/dL per unit of insulin") + case .basalRate: + return NSLocalizedString("U/hr", comment: "LoopInsights unit: units per hour") + } + } + + var systemImage: String { + switch self { + case .carbRatio: return "fork.knife" + case .insulinSensitivity: return "arrow.up.arrow.down" + case .basalRate: return "drop.fill" + } + } +} + +// MARK: - Setting Analysis Status + +/// Status of an individual therapy setting after analysis +enum LoopInsightsSettingStatus { + case notAnalyzed // Gray — hasn't been analyzed yet + case analyzedOK // Green — analyzed, no changes needed + case hasSuggestions // Orange — has pending suggestions +} + +// MARK: - Detected Pattern + +/// A glucose/insulin pattern detected from aggregated data +struct LoopInsightsDetectedPattern: Identifiable { + let id = UUID() + let type: LoopInsightsPatternType + let detail: String + let severity: LoopInsightsConfidence +} + +/// Types of patterns LoopInsights can detect from glucose/insulin/carb data +enum LoopInsightsPatternType: String, CaseIterable { + case overnightLows + case frequentLows + case overnightHighs + case dawnPhenomenon + case postMealSpikes + case reboundHighs + case highVariability + case consistentHighs + case consistentLows + + var displayName: String { + switch self { + case .overnightLows: + return NSLocalizedString("Overnight Lows", comment: "LoopInsights pattern: overnight lows") + case .frequentLows: + return NSLocalizedString("Frequent Lows", comment: "LoopInsights pattern: frequent lows") + case .overnightHighs: + return NSLocalizedString("Overnight Highs", comment: "LoopInsights pattern: overnight highs") + case .dawnPhenomenon: + return NSLocalizedString("Dawn Phenomenon", comment: "LoopInsights pattern: dawn phenomenon") + case .postMealSpikes: + return NSLocalizedString("Post-Meal Spikes", comment: "LoopInsights pattern: post-meal spikes") + case .reboundHighs: + return NSLocalizedString("Rebound Highs", comment: "LoopInsights pattern: rebound highs") + case .highVariability: + return NSLocalizedString("High Variability", comment: "LoopInsights pattern: high variability") + case .consistentHighs: + return NSLocalizedString("Consistent Highs", comment: "LoopInsights pattern: consistent highs") + case .consistentLows: + return NSLocalizedString("Consistent Lows", comment: "LoopInsights pattern: consistent lows") + } + } + + var systemImage: String { + switch self { + case .overnightLows: return "moon.zzz" + case .frequentLows: return "arrow.down.circle" + case .overnightHighs: return "moon.stars" + case .dawnPhenomenon: return "sunrise" + case .postMealSpikes: return "fork.knife" + case .reboundHighs: return "arrow.turn.up.right" + case .highVariability: return "waveform.path.ecg" + case .consistentHighs: return "arrow.up.circle" + case .consistentLows: return "arrow.down.to.line" + } + } +} + +// MARK: - Analysis Period + +/// How far back LoopInsights looks when aggregating data +enum LoopInsightsAnalysisPeriod: Int, Codable, CaseIterable, Identifiable { + case threeDays = 3 + case sevenDays = 7 + case fourteenDays = 14 + case thirtyDays = 30 + case ninetyDays = 90 + + var id: Int { rawValue } + + var displayName: String { + switch self { + case .threeDays: + return NSLocalizedString("3 Days", comment: "LoopInsights analysis period: 3 days") + case .sevenDays: + return NSLocalizedString("7 Days", comment: "LoopInsights analysis period: 7 days") + case .fourteenDays: + return NSLocalizedString("14 Days", comment: "LoopInsights analysis period: 14 days") + case .thirtyDays: + return NSLocalizedString("30 Days", comment: "LoopInsights analysis period: 30 days") + case .ninetyDays: + return NSLocalizedString("90 Days", comment: "LoopInsights analysis period: 90 days") + } + } + + var timeInterval: TimeInterval { + return TimeInterval(rawValue) * 24 * 60 * 60 + } +} + +// MARK: - AI Personality + +/// Personality style for AI responses — changes the tone of assessments and reasoning +enum LoopInsightsAIPersonality: String, Codable, CaseIterable, Identifiable { + case supportiveCoach = "supportive_coach" + case clinicalExpert = "clinical_expert" + case dryWit = "dry_wit" + case toughLove = "tough_love" + + var id: String { rawValue } + + var displayName: String { + switch self { + case .supportiveCoach: + return NSLocalizedString("Supportive Coach", comment: "LoopInsights personality: supportive coach") + case .clinicalExpert: + return NSLocalizedString("Clinical Expert", comment: "LoopInsights personality: clinical expert") + case .dryWit: + return NSLocalizedString("Dry Wit", comment: "LoopInsights personality: dry wit") + case .toughLove: + return NSLocalizedString("Tough Love", comment: "LoopInsights personality: tough love") + } + } + + var description: String { + switch self { + case .supportiveCoach: + return NSLocalizedString("Encouraging and positive. Celebrates your wins and gently explains areas for improvement.", comment: "LoopInsights personality desc: supportive coach") + case .clinicalExpert: + return NSLocalizedString("Professional and evidence-based. Precise medical terminology with clear clinical reasoning.", comment: "LoopInsights personality desc: clinical expert") + case .dryWit: + return NSLocalizedString("Witty and clever. No sugar-coating (pun intended) — helpful advice with a side of humor.", comment: "LoopInsights personality desc: dry wit") + case .toughLove: + return NSLocalizedString("Direct and no-nonsense. Holds you accountable and tells it like it is.", comment: "LoopInsights personality desc: tough love") + } + } + + /// Prompt instructions injected into the AI system prompt + var promptInstruction: String { + switch self { + case .supportiveCoach: + return """ + PERSONALITY: You are a warm, encouraging diabetes coach. Celebrate what's going well before \ + discussing changes. Use phrases like "Great job on...", "Let's work together to...", and \ + "You're making real progress with...". Be optimistic and supportive while still being honest \ + about areas that need attention. Use simple, accessible language. + """ + case .clinicalExpert: + return """ + PERSONALITY: You are a board-certified endocrinologist reviewing pump settings. Use precise \ + medical terminology (TIR, CV, GMI, basal/bolus ratio). Reference clinical guidelines (ADA, \ + consensus targets) when making recommendations. Be thorough, methodical, and evidence-based. \ + Maintain a professional, measured tone throughout. + """ + case .dryWit: + return """ + PERSONALITY: You are a witty diabetes advisor with a dry sense of humor. Deliver helpful, \ + accurate advice but make it entertaining. Use clever wordplay, diabetes-related puns, and \ + wry observations. You might say things like "Your overnight basals are throwing a party \ + your glucose wasn't invited to" or "That dawn phenomenon is more reliable than your alarm \ + clock." Always be helpful underneath the humor. + """ + case .toughLove: + return """ + PERSONALITY: You are a brutally honest drill-sergeant-style diabetes coach. You do NOT \ + hand out participation trophies. Lead with what's wrong — skip the pleasantries. Use \ + blunt, punchy language: "These numbers are unacceptable", "You're leaving 20% TIR on \ + the table and that's on your settings", "Stop ignoring this — your overnights are a \ + mess." If a pattern is dangerous, say so plainly: "This is putting you at risk. Full \ + stop." Be relentless about accountability — if the data shows a problem, hammer it home. \ + Every statement should hit hard, but always end with a concrete fix. You're tough because \ + you care, not because you're cruel. + """ + } + } +} + +// MARK: - Apply Mode + +/// How suggestions are applied to therapy settings +enum LoopInsightsApplyMode: String, Codable, CaseIterable, Identifiable { + case manual = "manual" + case oneTap = "one_tap" + case preFill = "pre_fill" + case autoApply = "auto_apply" + + var id: String { rawValue } + + var displayName: String { + switch self { + case .manual: + return NSLocalizedString("Manual", comment: "LoopInsights apply mode: navigate to settings manually") + case .oneTap: + return NSLocalizedString("One-Tap Apply", comment: "LoopInsights apply mode: apply with confirmation") + case .preFill: + return NSLocalizedString("Pre-Fill Editor", comment: "LoopInsights apply mode: navigate to editor with value pre-filled") + case .autoApply: + return NSLocalizedString("Auto-Apply", comment: "LoopInsights apply mode: automatically apply suggestions (developer only)") + } + } + + var description: String { + switch self { + case .manual: + return NSLocalizedString("View the suggested values, then navigate to Therapy Settings to make changes yourself.", comment: "LoopInsights apply mode description: manual") + case .oneTap: + return NSLocalizedString("Apply suggestions with a single tap. You'll see a confirmation with a responsibility disclaimer.", comment: "LoopInsights apply mode description: one-tap") + case .preFill: + return NSLocalizedString("Opens the Therapy Settings editor with the suggested value pre-filled. You confirm by tapping Save.", comment: "LoopInsights apply mode description: pre-fill") + case .autoApply: + return NSLocalizedString("Suggestions are applied automatically when confidence is high. All changes are logged.", comment: "LoopInsights apply mode description: auto-apply") + } + } + + /// Modes visible to all users (auto-apply is developer-only) + static var publicModes: [LoopInsightsApplyMode] { + return [.manual, .oneTap, .preFill] + } +} + +// MARK: - Request Format + +/// Determines how the HTTP request body is built and how the response is parsed. +/// Supports OpenAI-compatible endpoints (OpenAI, Azure, Groq, Together, Ollama, etc.), +/// Anthropic Messages API, and Google Generative AI (Gemini). +enum LoopInsightsRequestFormat: String, Codable, CaseIterable, Equatable { + case openAICompatible + case anthropicMessages + case googleGenerativeAI + + var displayName: String { + switch self { + case .openAICompatible: return "OpenAI Compatible" + case .anthropicMessages: return "Anthropic Messages" + case .googleGenerativeAI: return "Google Generative AI" + } + } + + /// Default response JSON path for extracting text content. + var defaultResponseKeyPath: String { + switch self { + case .openAICompatible: return "choices.0.message.content" + case .anthropicMessages: return "content.0.text" + case .googleGenerativeAI: return "candidates.0.content.parts.0.text" + } + } + + /// Default API key header name. + var defaultAPIKeyHeader: String { + switch self { + case .openAICompatible: return "Authorization" + case .anthropicMessages: return "x-api-key" + case .googleGenerativeAI: return "x-goog-api-key" + } + } + + /// Default API key prefix (e.g., "Bearer " for OpenAI). + var defaultAPIKeyPrefix: String { + switch self { + case .openAICompatible: return "Bearer " + case .anthropicMessages: return "" + case .googleGenerativeAI: return "" + } + } + + /// Default endpoint path. + var defaultEndpoint: String { + switch self { + case .openAICompatible: return "/chat/completions" + case .anthropicMessages: return "/messages" + case .googleGenerativeAI: return "/models/{MODEL}:generateContent" + } + } + + /// Auto-detect request format from a base URL. + /// Falls back to `.openAICompatible` for any unrecognized URL. + static func detect(from baseURL: String) -> LoopInsightsRequestFormat { + let lower = baseURL.lowercased() + if lower.contains("anthropic.com") { + return .anthropicMessages + } else if lower.contains("googleapis.com") || lower.contains("generativelanguage") { + return .googleGenerativeAI + } + return .openAICompatible + } +} + +// MARK: - AI Provider Configuration + +/// User-configurable AI endpoint configuration for LoopInsights. +/// +/// The `apiKey` field is populated at runtime from the Keychain and is NOT +/// persisted to UserDefaults. Use `LoopInsights_SecureStorage` to read/write keys. +struct LoopInsightsAIProviderConfiguration: Codable, Equatable { + var baseURL: String + var model: String + var endpointPath: String + var requestFormat: LoopInsightsRequestFormat + var apiKeyHeader: String + var apiKeyPrefix: String + var maxTokens: Int + var temperature: Double + var apiVersion: String? + var organizationID: String? + + /// Transient — populated from Keychain at load time, NOT stored in UserDefaults. + var apiKey: String + + init( + baseURL: String = "https://api.openai.com/v1", + model: String = "gpt-4o", + endpointPath: String? = nil, + requestFormat: LoopInsightsRequestFormat = .openAICompatible, + apiKeyHeader: String? = nil, + apiKeyPrefix: String? = nil, + maxTokens: Int = 4096, + temperature: Double = 0.3, + apiVersion: String? = nil, + organizationID: String? = nil, + apiKey: String = "" + ) { + self.baseURL = baseURL + self.model = model + self.endpointPath = endpointPath ?? requestFormat.defaultEndpoint + self.requestFormat = requestFormat + self.apiKeyHeader = apiKeyHeader ?? requestFormat.defaultAPIKeyHeader + self.apiKeyPrefix = apiKeyPrefix ?? requestFormat.defaultAPIKeyPrefix + self.maxTokens = maxTokens + self.temperature = temperature + self.apiVersion = apiVersion + self.organizationID = organizationID + self.apiKey = apiKey + } + + /// Returns a copy with the API key loaded from Keychain. + func withKeychainAPIKey() -> LoopInsightsAIProviderConfiguration { + var copy = self + copy.apiKey = LoopInsights_SecureStorage.loadAPIKey() ?? "" + return copy + } + + // MARK: - Codable (exclude apiKey from persistence) + + enum CodingKeys: String, CodingKey { + case baseURL, model, endpointPath, requestFormat + case apiKeyHeader, apiKeyPrefix, maxTokens, temperature + case apiVersion, organizationID + } + + init(from decoder: Decoder) throws { + let c = try decoder.container(keyedBy: CodingKeys.self) + baseURL = try c.decode(String.self, forKey: .baseURL) + model = try c.decode(String.self, forKey: .model) + endpointPath = try c.decode(String.self, forKey: .endpointPath) + requestFormat = try c.decode(LoopInsightsRequestFormat.self, forKey: .requestFormat) + apiKeyHeader = try c.decode(String.self, forKey: .apiKeyHeader) + apiKeyPrefix = try c.decode(String.self, forKey: .apiKeyPrefix) + maxTokens = try c.decode(Int.self, forKey: .maxTokens) + temperature = try c.decode(Double.self, forKey: .temperature) + apiVersion = try c.decodeIfPresent(String.self, forKey: .apiVersion) + organizationID = try c.decodeIfPresent(String.self, forKey: .organizationID) + apiKey = "" // Never decoded — loaded from Keychain + } + + func encode(to encoder: Encoder) throws { + var c = encoder.container(keyedBy: CodingKeys.self) + try c.encode(baseURL, forKey: .baseURL) + try c.encode(model, forKey: .model) + try c.encode(endpointPath, forKey: .endpointPath) + try c.encode(requestFormat, forKey: .requestFormat) + try c.encode(apiKeyHeader, forKey: .apiKeyHeader) + try c.encode(apiKeyPrefix, forKey: .apiKeyPrefix) + try c.encode(maxTokens, forKey: .maxTokens) + try c.encode(temperature, forKey: .temperature) + try c.encodeIfPresent(apiVersion, forKey: .apiVersion) + try c.encodeIfPresent(organizationID, forKey: .organizationID) + // apiKey intentionally omitted — stored in Keychain only + } +} + +// MARK: - Confidence Level + +/// How confident the AI is in a suggestion +enum LoopInsightsConfidence: String, Codable, Comparable { + case low = "low" + case medium = "medium" + case high = "high" + + var displayName: String { + switch self { + case .low: + return NSLocalizedString("Low", comment: "LoopInsights confidence: low") + case .medium: + return NSLocalizedString("Medium", comment: "LoopInsights confidence: medium") + case .high: + return NSLocalizedString("High", comment: "LoopInsights confidence: high") + } + } + + var color: String { + switch self { + case .low: return "yellow" + case .medium: return "orange" + case .high: return "blue" + } + } + + private var sortOrder: Int { + switch self { + case .low: return 0 + case .medium: return 1 + case .high: return 2 + } + } + + static func < (lhs: LoopInsightsConfidence, rhs: LoopInsightsConfidence) -> Bool { + return lhs.sortOrder < rhs.sortOrder + } +} + +// MARK: - Time Block + +/// A specific time block within a schedule (e.g., 12pm-3pm) +struct LoopInsightsTimeBlock: Codable, Identifiable, Equatable { + let id: UUID + let startTime: TimeInterval // Seconds since midnight + let endTime: TimeInterval // Seconds since midnight + let currentValue: Double + let proposedValue: Double + + init(startTime: TimeInterval, endTime: TimeInterval, currentValue: Double, proposedValue: Double) { + self.id = UUID() + self.startTime = startTime + self.endTime = endTime + self.currentValue = currentValue + self.proposedValue = proposedValue + } + + var startTimeFormatted: String { + return Self.formatTime(startTime) + } + + var endTimeFormatted: String { + return Self.formatTime(endTime) + } + + var timeRangeFormatted: String { + return "\(startTimeFormatted) – \(endTimeFormatted)" + } + + var changePercent: Double { + guard currentValue != 0 else { return 0 } + return ((proposedValue - currentValue) / currentValue) * 100 + } + + private static func formatTime(_ seconds: TimeInterval) -> String { + let hours = Int(seconds) / 3600 + let minutes = (Int(seconds) % 3600) / 60 + let formatter = DateFormatter() + formatter.dateFormat = hours >= 12 ? "h:mm a" : "h:mm a" + var calendar = Calendar.current + calendar.timeZone = TimeZone.current + let date = calendar.startOfDay(for: Date()).addingTimeInterval(seconds) + return formatter.string(from: date) + } +} + +// MARK: - Suggestion + +/// A single AI-generated therapy setting suggestion +struct LoopInsightsSuggestion: Codable, Identifiable, Equatable { + let id: UUID + let settingType: LoopInsightsSettingType + let timeBlocks: [LoopInsightsTimeBlock] + let reasoning: String + let confidence: LoopInsightsConfidence + let analysisPeriod: LoopInsightsAnalysisPeriod + let createdAt: Date + + /// Summary of the overall change direction + var summaryDescription: String { + guard let first = timeBlocks.first else { + return NSLocalizedString("No changes suggested", comment: "LoopInsights: no suggestion") + } + + if timeBlocks.count == 1 { + let direction = first.proposedValue > first.currentValue + ? NSLocalizedString("Increase", comment: "LoopInsights: increase direction") + : NSLocalizedString("Decrease", comment: "LoopInsights: decrease direction") + return "\(direction) \(settingType.abbreviation) at \(first.timeRangeFormatted)" + } else { + return String( + format: NSLocalizedString("Adjust %@ across %d time blocks", comment: "LoopInsights: multi-block suggestion summary"), + settingType.abbreviation, + timeBlocks.count + ) + } + } + + static func == (lhs: LoopInsightsSuggestion, rhs: LoopInsightsSuggestion) -> Bool { + return lhs.id == rhs.id + } +} + +// MARK: - Therapy Snapshot + +/// A point-in-time capture of all therapy settings, used for before/after comparison +struct LoopInsightsTherapySnapshot: Codable { + let basalRateItems: [LoopInsightsScheduleItem] + let insulinSensitivityItems: [LoopInsightsScheduleItem] + let carbRatioItems: [LoopInsightsScheduleItem] + let capturedAt: Date + + struct LoopInsightsScheduleItem: Codable, Identifiable { + let id: UUID + let startTime: TimeInterval // Seconds since midnight + let value: Double + + init(startTime: TimeInterval, value: Double) { + self.id = UUID() + self.startTime = startTime + self.value = value + } + } +} + +// MARK: - Aggregated Stats + +/// Aggregated statistics from Loop's data stores, used as input to AI analysis +struct LoopInsightsAggregatedStats: Codable { + let period: LoopInsightsAnalysisPeriod + let glucoseStats: GlucoseStats + let insulinStats: InsulinStats + let carbStats: CarbStats + let generatedAt: Date + + struct GlucoseStats: Codable { + let averageGlucose: Double // mg/dL + let standardDeviation: Double // mg/dL + let coefficientOfVariation: Double // percentage + let timeInRange: Double // percentage (70-180 mg/dL) + let timeBelowRange: Double // percentage (<70 mg/dL) + let timeAboveRange: Double // percentage (>180 mg/dL) + let gmi: Double // Glucose Management Indicator (estimated A1C) + let sampleCount: Int + let hourlyAverages: [Int: Double] // hour (0-23) → average glucose + } + + struct InsulinStats: Codable { + let totalDailyDose: Double // Average total units/day + let basalPercentage: Double // percentage of TDD from basal + let bolusPercentage: Double // percentage of TDD from bolus + let hourlyBasalAverages: [Int: Double] // hour → average basal rate delivered + let correctionBolusCount: Int // number of correction boluses in period + } + + struct CarbStats: Codable { + let averageDailyCarbs: Double // grams/day + let mealCount: Int // total meals logged + let averageCarbsPerMeal: Double // grams/meal + let hourlyMealFrequency: [Int: Int] // hour → number of meals at that hour + } +} + +// MARK: - AI Analysis Request/Response + +/// The structured request sent to the AI provider +struct LoopInsightsAnalysisRequest: Codable { + let currentSettings: LoopInsightsTherapySnapshot + let aggregatedStats: LoopInsightsAggregatedStats + let focusSettingType: LoopInsightsSettingType + let userNotes: String? +} + +/// The structured response parsed from the AI provider +struct LoopInsightsAnalysisResponse: Codable { + let suggestions: [LoopInsightsSuggestion] + let overallAssessment: String + let nextRecommendedFocus: LoopInsightsSettingType? + let rawResponse: String? +} + +// MARK: - Error Types + +enum LoopInsightsError: Error, LocalizedError { + case noAPIKeyConfigured + case aiProviderError(String) + case networkError(Error) + case parseError(String) + case insufficientData(String) + case settingsWriteError(String) + case keychainError(String) + + var errorDescription: String? { + switch self { + case .noAPIKeyConfigured: + return NSLocalizedString("No API key configured. Please add your API key in LoopInsights Settings.", comment: "LoopInsights error: no API key") + case .aiProviderError(let message): + return String(format: NSLocalizedString("AI Provider Error: %@", comment: "LoopInsights error: AI provider"), message) + case .networkError(let error): + return String(format: NSLocalizedString("Network Error: %@", comment: "LoopInsights error: network"), error.localizedDescription) + case .parseError(let message): + return String(format: NSLocalizedString("Failed to parse AI response: %@", comment: "LoopInsights error: parse"), message) + case .insufficientData(let message): + return String(format: NSLocalizedString("Insufficient data for analysis: %@", comment: "LoopInsights error: insufficient data"), message) + case .settingsWriteError(let message): + return String(format: NSLocalizedString("Failed to apply settings: %@", comment: "LoopInsights error: settings write"), message) + case .keychainError(let message): + return String(format: NSLocalizedString("Keychain Error: %@", comment: "LoopInsights error: keychain"), message) + } + } +} diff --git a/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift b/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift new file mode 100644 index 0000000000..c7f9f05962 --- /dev/null +++ b/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift @@ -0,0 +1,90 @@ +// +// LoopInsights_SuggestionRecord.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - Suggestion Status + +/// The lifecycle status of a suggestion +enum LoopInsightsSuggestionStatus: String, Codable { + case pending = "pending" + case applied = "applied" + case dismissed = "dismissed" + case autoApplied = "auto_applied" + + var displayName: String { + switch self { + case .pending: + return NSLocalizedString("Pending", comment: "LoopInsights suggestion status: pending review") + case .applied: + return NSLocalizedString("Applied", comment: "LoopInsights suggestion status: user applied") + case .dismissed: + return NSLocalizedString("Dismissed", comment: "LoopInsights suggestion status: user dismissed") + case .autoApplied: + return NSLocalizedString("Auto-Applied", comment: "LoopInsights suggestion status: automatically applied") + } + } + + var systemImage: String { + switch self { + case .pending: return "clock" + case .applied: return "checkmark.circle.fill" + case .dismissed: return "xmark.circle" + case .autoApplied: return "bolt.circle.fill" + } + } + + var isResolved: Bool { + switch self { + case .pending: return false + case .applied, .dismissed, .autoApplied: return true + } + } +} + +// MARK: - Suggestion Record + +/// A persistent record of a suggestion, including its status and any actions taken +struct LoopInsightsSuggestionRecord: Codable, Identifiable, Equatable { + let id: UUID + let suggestion: LoopInsightsSuggestion + var status: LoopInsightsSuggestionStatus + let createdAt: Date + var resolvedAt: Date? + var applyMode: LoopInsightsApplyMode? + var settingsSnapshotBefore: LoopInsightsTherapySnapshot? + var settingsSnapshotAfter: LoopInsightsTherapySnapshot? + + init(suggestion: LoopInsightsSuggestion) { + self.id = UUID() + self.suggestion = suggestion + self.status = .pending + self.createdAt = Date() + self.resolvedAt = nil + self.applyMode = nil + self.settingsSnapshotBefore = nil + self.settingsSnapshotAfter = nil + } + + mutating func markApplied(mode: LoopInsightsApplyMode, snapshotBefore: LoopInsightsTherapySnapshot?, snapshotAfter: LoopInsightsTherapySnapshot?) { + self.status = mode == .autoApply ? .autoApplied : .applied + self.resolvedAt = Date() + self.applyMode = mode + self.settingsSnapshotBefore = snapshotBefore + self.settingsSnapshotAfter = snapshotAfter + } + + mutating func markDismissed() { + self.status = .dismissed + self.resolvedAt = Date() + } + + static func == (lhs: LoopInsightsSuggestionRecord, rhs: LoopInsightsSuggestionRecord) -> Bool { + return lhs.id == rhs.id + } +} diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift new file mode 100644 index 0000000000..dafbf4d27d --- /dev/null +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -0,0 +1,128 @@ +// +// LoopInsights_FeatureFlags.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +/// Runtime feature flags for LoopInsights. All flags are UserDefaults-backed +/// so they can be toggled without recompilation. +struct LoopInsights_FeatureFlags { + + private enum Keys { + static let isEnabled = "LoopInsights_isEnabled" + static let developerModeEnabled = "LoopInsights_developerModeEnabled" + static let applyMode = "LoopInsights_applyMode" + static let analysisPeriod = "LoopInsights_analysisPeriod" + static let aiConfiguration = "LoopInsights_aiConfiguration" + static let developerUnlockCount = "LoopInsights_developerUnlockCount" + static let useTestData = "LoopInsights_useTestData" + static let aiPersonality = "LoopInsights_aiPersonality" + } + + private static let defaults = UserDefaults.standard + + // MARK: - Primary Feature Toggle + + /// Master on/off switch for LoopInsights. Defaults to false. + static var isEnabled: Bool { + get { defaults.bool(forKey: Keys.isEnabled) } + set { defaults.set(newValue, forKey: Keys.isEnabled) } + } + + // MARK: - Developer Mode (Hidden) + + /// Developer-only mode that unlocks auto-apply and advanced testing options. + /// Activated by long-pressing the LoopInsights header 5 times. + /// Not visible in the public settings UI. + static var developerModeEnabled: Bool { + get { defaults.bool(forKey: Keys.developerModeEnabled) } + set { defaults.set(newValue, forKey: Keys.developerModeEnabled) } + } + + /// Tracks long-press count toward developer mode activation + static var developerUnlockCount: Int { + get { defaults.integer(forKey: Keys.developerUnlockCount) } + set { defaults.set(newValue, forKey: Keys.developerUnlockCount) } + } + + /// Number of long-presses required to unlock developer mode + static let developerUnlockThreshold = 3 + + /// Use test data fixtures instead of real Loop data stores (developer mode only). + /// When enabled, LoopInsights loads JSON fixtures from Documents/LoopInsights/ or the app bundle. + static var useTestData: Bool { + get { developerModeEnabled && defaults.bool(forKey: Keys.useTestData) } + set { defaults.set(newValue, forKey: Keys.useTestData) } + } + + // MARK: - Apply Mode + + /// How suggestions are applied. Defaults to manual. + static var applyMode: LoopInsightsApplyMode { + get { + guard let raw = defaults.string(forKey: Keys.applyMode), + let mode = LoopInsightsApplyMode(rawValue: raw) else { + return .manual + } + // Auto-apply only available in developer mode + if mode == .autoApply && !developerModeEnabled { + return .manual + } + return mode + } + set { + defaults.set(newValue.rawValue, forKey: Keys.applyMode) + } + } + + // MARK: - Analysis Period + + /// Default analysis lookback period. Defaults to 14 days. + static var analysisPeriod: LoopInsightsAnalysisPeriod { + get { + let raw = defaults.integer(forKey: Keys.analysisPeriod) + return LoopInsightsAnalysisPeriod(rawValue: raw) ?? .fourteenDays + } + set { + defaults.set(newValue.rawValue, forKey: Keys.analysisPeriod) + } + } + + // MARK: - AI Personality + + /// Personality style for AI responses. Defaults to supportive coach. + static var aiPersonality: LoopInsightsAIPersonality { + get { + guard let raw = defaults.string(forKey: Keys.aiPersonality), + let personality = LoopInsightsAIPersonality(rawValue: raw) else { + return .supportiveCoach + } + return personality + } + set { + defaults.set(newValue.rawValue, forKey: Keys.aiPersonality) + } + } + + // MARK: - AI Configuration + + /// User-configurable AI provider configuration. Persisted to UserDefaults (excluding API key). + static var aiConfiguration: LoopInsightsAIProviderConfiguration { + get { + guard let data = defaults.data(forKey: Keys.aiConfiguration), + let config = try? JSONDecoder().decode(LoopInsightsAIProviderConfiguration.self, from: data) else { + return LoopInsightsAIProviderConfiguration() + } + return config + } + set { + if let data = try? JSONEncoder().encode(newValue) { + defaults.set(data, forKey: Keys.aiConfiguration) + } + } + } +} diff --git a/Loop/Resources/LoopInsights/TestData/tidepool_carb_entries.json b/Loop/Resources/LoopInsights/TestData/tidepool_carb_entries.json new file mode 100644 index 0000000000..b915dbbf67 --- /dev/null +++ b/Loop/Resources/LoopInsights/TestData/tidepool_carb_entries.json @@ -0,0 +1,803 @@ +[ + { + "startDate": "2026-01-13T19:53:42.589Z", + "quantity": 55, + "absorptionTime": 10800, + "syncIdentifier": "0426133705ecd612cb1c9efaf29b8495", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-14T01:40:20.663Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "6901267e663c42e6f7eb654a853bfa4a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Cheeseburger" + }, + { + "startDate": "2026-01-14T17:48:58.533Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "7ccf997304a642f36ae06c5ac3865add", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-14T23:23:27.773Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "6444e10aa09c27615c515c5630929cd3", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf7a" + }, + { + "startDate": "2026-01-15T00:31:53.479Z", + "quantity": 40, + "absorptionTime": 10800, + "syncIdentifier": "2859b169b07214e76ebe8acc0551129a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Grilled chicken bre\u2026" + }, + { + "startDate": "2026-01-15T19:40:30.859Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "75cd27ff45a3af959f752c5ee110ec98", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83e\udd6a" + }, + { + "startDate": "2026-01-15T23:26:48.202Z", + "quantity": 16, + "absorptionTime": 10800, + "syncIdentifier": "17a7b873bbece0be60dc1c9a337b96b0", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Potato Crisps" + }, + { + "startDate": "2026-01-16T20:07:19.096Z", + "quantity": 60, + "absorptionTime": 10800, + "syncIdentifier": "f1d472af83cc3f1b6a853d16ee5d3fa6", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Roasted sweet potat\u2026" + }, + { + "startDate": "2026-01-17T01:58:53.229Z", + "quantity": 45, + "absorptionTime": 10800, + "syncIdentifier": "30a65f0181177631c9ef123b53ec55dc", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Brown rice" + }, + { + "startDate": "2026-01-17T17:38:30.964Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "274897ef22f6812443361052bebfbbf7", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-17T19:47:43.603Z", + "quantity": 16, + "absorptionTime": 10800, + "syncIdentifier": "dbe523e650d30f7b395e0d4c034eb7f3", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Potato Crisps" + }, + { + "startDate": "2026-01-17T22:09:01.199Z", + "quantity": 53, + "absorptionTime": 10800, + "syncIdentifier": "f17bbc9182b411404ad52b85d811587c", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-18T20:02:18.518Z", + "quantity": 16, + "absorptionTime": 10800, + "syncIdentifier": "acee2deab729d174ccb47857f60efc34", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf7a" + }, + { + "startDate": "2026-01-18T20:06:28.261Z", + "quantity": 40, + "absorptionTime": 10800, + "syncIdentifier": "a11dfd36352f694cf13626af45c04430", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Grilled beef steak" + }, + { + "startDate": "2026-01-18T22:47:50.138Z", + "quantity": 16, + "absorptionTime": 10800, + "syncIdentifier": "fc2fafec58fed6f35513cad473622794", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Potato Crisps" + }, + { + "startDate": "2026-01-19T01:19:40.445Z", + "quantity": 23, + "absorptionTime": 10800, + "syncIdentifier": "9c78587fcf5a3909dbbae2f1aa776ce8", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-19T19:26:53.731Z", + "quantity": 5, + "absorptionTime": 10800, + "syncIdentifier": "2fa476ff16758df641cbb7f46f5c38c2", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Cottage Cheese" + }, + { + "startDate": "2026-01-20T01:34:39.863Z", + "quantity": 20, + "absorptionTime": 10800, + "syncIdentifier": "4e19eb42875628492f77d0b6716e2a89", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-20T19:34:05.724Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "a030b3ff14fc12cbe93f273e8c248520", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "MEDIUM HOT COCKTAIL\u2026" + }, + { + "startDate": "2026-01-21T00:51:55.57Z", + "quantity": 15, + "absorptionTime": 10800, + "syncIdentifier": "1144947bd35731b2630316b83767b583", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-21T01:40:14.873Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "3857442c5dba51248a393e165fefa235", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-21T01:52:26.854Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "b5fdff7729483ffb6dbc2a38290934da", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "M&M'S, CHOCOLATE CA\u2026" + }, + { + "startDate": "2026-01-21T02:05:17.083Z", + "quantity": 20, + "absorptionTime": 10800, + "syncIdentifier": "47dbd4e2a2764f45a956395cee622d60", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-21T22:37:03.796Z", + "quantity": 5, + "absorptionTime": 10800, + "syncIdentifier": "10cf55a7ebe737f1293e8ac7af05b380", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-22T01:14:21.84Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "4cb61965b6614b3fd47fc167f729fb2d", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-22T01:43:41.865Z", + "quantity": 50, + "absorptionTime": 10800, + "syncIdentifier": "0aaa700f89a8bbc096ad689ba3cbc03f", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-22T19:51:00.288Z", + "quantity": 42.5, + "absorptionTime": 10800, + "syncIdentifier": "3f9726092160ecff645ec5da12f57820", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Wegmans Shrimp Gyoza" + }, + { + "startDate": "2026-01-23T00:59:52.041Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "d59634b9c49b5a22eb030b3d1e55783c", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-23T01:59:20.4Z", + "quantity": 45, + "absorptionTime": 10800, + "syncIdentifier": "289e67d0c686242bdeaaa9a1dfb4731b", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Chicken Vindaloo" + }, + { + "startDate": "2026-01-23T14:55:29.584Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "8af67c89de807be5951fc2ec99d1efc5", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-23T22:27:05.482Z", + "quantity": 15, + "absorptionTime": 10800, + "syncIdentifier": "3e890554c307d80eed3753bd9ae131bc", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-23T22:32:17.195Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "00fa89860fa32086ab481d1264677325", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-23T22:59:49.356Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "02525baf1f06e985f94128daa0783558", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Chewy Fruity Candy!" + }, + { + "startDate": "2026-01-24T02:40:39.575Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "480e1ed48efa5f4adde347c101644987", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-24T03:08:02.862Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "9efc26fc96deba1802e8e9643a0dbc96", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-24T17:53:39.607Z", + "quantity": 21, + "absorptionTime": 10800, + "syncIdentifier": "7bd31505a1552bb9f853a4fe33d3f3cb", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Vanilla Greek Yogur\u2026" + }, + { + "startDate": "2026-01-24T20:11:04.963Z", + "quantity": 21, + "absorptionTime": 10800, + "syncIdentifier": "4f70bb3133d0b157c6e1172e8d508be9", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-25T17:29:25.672Z", + "quantity": 21, + "absorptionTime": 10800, + "syncIdentifier": "a2aab830dfd66299846d6e43933e100a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-25T20:25:04.961Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "1705e4e58fe81976ee94daed4d43649b", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-25T20:27:49.064Z", + "quantity": 9, + "absorptionTime": 10800, + "syncIdentifier": "5ee44052d5870ffbc4e3953102e6f5be", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Chopped salad with \u2026" + }, + { + "startDate": "2026-01-25T20:42:50.966Z", + "quantity": 34, + "absorptionTime": 10800, + "syncIdentifier": "982958bedb90aac8ad32f018a8417ca2", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Stir-fried pork" + }, + { + "startDate": "2026-01-25T21:45:35.435Z", + "quantity": 15, + "absorptionTime": 10800, + "syncIdentifier": "aa4c78b91f911626c1bc10b34fa5247b", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "peanut butter patti\u2026" + }, + { + "startDate": "2026-01-25T22:59:13.467Z", + "quantity": 15, + "absorptionTime": 10800, + "syncIdentifier": "dfd019d70710eea3b8b78efd9ceff7d1", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-26T00:14:14.189Z", + "quantity": 7.5, + "absorptionTime": 10800, + "syncIdentifier": "bd835ee199709aca9343d71baeffef93", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-26T02:43:52.974Z", + "quantity": 40.2, + "absorptionTime": 10800, + "syncIdentifier": "9a5ca427ba0d8f26cb89d8477432464b", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Sliced Porridge Bre\u2026" + }, + { + "startDate": "2026-01-26T19:38:59.512Z", + "quantity": 44.5, + "absorptionTime": 10800, + "syncIdentifier": "cc4ed6d6e1c7e1cbc66a81ef7c5a1969", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Stir-fried beef wit\u2026" + }, + { + "startDate": "2026-01-26T19:52:47.898Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "0494e7e8fcf89ddfd8ca8713d320ca89", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-26T23:44:33.868Z", + "quantity": 22, + "absorptionTime": 10800, + "syncIdentifier": "3c9f6e0b7411d9a3bd43bd4046cee304", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-27T02:16:40.488Z", + "quantity": 18, + "absorptionTime": 10800, + "syncIdentifier": "990b27c7666aef263ec4e58b1f553482", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-27T18:04:45.24Z", + "quantity": 33, + "absorptionTime": 10800, + "syncIdentifier": "53462149b22aef19ff23fe6378e6c1c9", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-27T18:37:15.995Z", + "quantity": 21, + "absorptionTime": 10800, + "syncIdentifier": "60bcfd46ecf83d389dcef58229fdb3f7", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-27T20:50:41.856Z", + "quantity": 5, + "absorptionTime": 10800, + "syncIdentifier": "5140d1d136a2c8a0829e48135f3d42d5", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-01-27T21:03:23.17Z", + "quantity": 22, + "absorptionTime": 10800, + "syncIdentifier": "cb748f2d245a981095a5bf69712a80ae", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-02T19:45:08.531Z", + "quantity": 40, + "absorptionTime": 10800, + "syncIdentifier": "bc3277a192d6df25695906f1985a6b68", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-03T02:44:28.561Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "fd29720d21996e722c44cf4b1613be73", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-03T21:15:18.375Z", + "quantity": 15, + "absorptionTime": 10800, + "syncIdentifier": "91663cb532106f5440a6077892d2bc64", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Peanut Cocoa Crunch" + }, + { + "startDate": "2026-02-04T01:51:28.87Z", + "quantity": 6, + "absorptionTime": 10800, + "syncIdentifier": "3d04f1cfcd0d44cbf774c5801e474f23", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Beetroot with cream\u2026" + }, + { + "startDate": "2026-02-04T02:20:19.492Z", + "quantity": 40, + "absorptionTime": 10800, + "syncIdentifier": "f9d55b509a61b6888c7e0154b4af146c", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Grilled shrimp" + }, + { + "startDate": "2026-02-04T03:01:14.626Z", + "quantity": 5, + "absorptionTime": 10800, + "syncIdentifier": "732054e93b86a3cae616b9ec581a242a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Tuna Tartare" + }, + { + "startDate": "2026-02-04T04:03:02.976Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "5f317fb650b6b67f9d8bc9334d71be3a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-04T18:28:51.391Z", + "quantity": 15, + "absorptionTime": 10800, + "syncIdentifier": "dd7e315e90e02d46c88db70fa9709b4c", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Low Fat Cottage Che\u2026" + }, + { + "startDate": "2026-02-05T01:38:49.729Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "f83c1c3e5798cd6bd4de4fade07c7166", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Cheeseburger" + }, + { + "startDate": "2026-02-05T15:30:26.253Z", + "quantity": 27, + "absorptionTime": 10800, + "syncIdentifier": "9acbc436941faf1fef9fabd8f237312a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "BANANA" + }, + { + "startDate": "2026-02-05T20:49:13.1Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "b0c5b4206bdf62ce451593aab06edfb2", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Peanut Butter Dark \u2026" + }, + { + "startDate": "2026-02-06T00:56:11.485Z", + "quantity": 8, + "absorptionTime": 10800, + "syncIdentifier": "c17aced8b6ce62facb8653c146d356db", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Low Fat Cottage Che\u2026" + }, + { + "startDate": "2026-02-06T02:28:37.174Z", + "quantity": 30, + "absorptionTime": 10800, + "syncIdentifier": "ffa903c7fefe2766c0230625f5641206", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-06T15:06:26.464Z", + "quantity": 27, + "absorptionTime": 10800, + "syncIdentifier": "1370951f76697ee3ea5c70c337c9d1c2", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-06T20:26:22.125Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "b5f0f18f7592129f0502d7a018512ed6", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-06T20:30:49.972Z", + "quantity": 1, + "absorptionTime": 10800, + "syncIdentifier": "33974b54190a5f22e4e223a3f6edfea0", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Albacore Wild Tuna" + }, + { + "startDate": "2026-02-06T23:55:49.278Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "076c934454413154f3ac7e230a0439d4", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf7a" + }, + { + "startDate": "2026-02-07T00:57:05.202Z", + "quantity": 45, + "absorptionTime": 10800, + "syncIdentifier": "1b51202e8ab5487eb8c57e9e064a13b5", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Chocolate mousse ca\u2026" + }, + { + "startDate": "2026-02-07T04:01:10.7Z", + "quantity": 10, + "absorptionTime": 10800, + "syncIdentifier": "a8be1ee2ec713cf7dd7ebd7c623e5d8a", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-07T17:21:53.536Z", + "quantity": 20, + "absorptionTime": 10800, + "syncIdentifier": "76f419a9dc49256cf38b5693c8c3e10d", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-07T21:22:20.181Z", + "quantity": 31, + "absorptionTime": 10800, + "syncIdentifier": "da8fadab348cf8b2bb81a8c0015bddcf", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-08T00:48:02.862Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "3994586f98fbd00f0b45d5ac76e8bf75", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-08T03:09:23.026Z", + "quantity": 45, + "absorptionTime": 10800, + "syncIdentifier": "74447b9d3c61f18d19c88ef4a3650c28", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Seafood paella with\u2026" + }, + { + "startDate": "2026-02-08T03:30:06.299Z", + "quantity": 20, + "absorptionTime": 10800, + "syncIdentifier": "c5412e9c367b6ccd49552243b4c9decb", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-08T19:13:56.276Z", + "quantity": 22, + "absorptionTime": 10800, + "syncIdentifier": "f4f081d53596a67e771a6390ff0772dd", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-09T00:40:05.606Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "0086012feaebdf0237ab2aad5a3b9e4d", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-09T01:56:06.849Z", + "quantity": 40, + "absorptionTime": 10800, + "syncIdentifier": "2b7ebd23d121bd7dba7d8d0694c65b1e", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "Twice-baked potato \u2026" + }, + { + "startDate": "2026-02-09T18:47:59.105Z", + "quantity": 16, + "absorptionTime": 10800, + "syncIdentifier": "64547b1800d614515a19d79c7f6ee2da", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-09T20:33:32.309Z", + "quantity": 20, + "absorptionTime": 10800, + "syncIdentifier": "c6868d4efbfb03f7b2bbb251eaeeae46", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-10T01:19:16.768Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "470c80513b267c1244aaf9f17c6d241e", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-10T15:54:30.175Z", + "quantity": 18, + "absorptionTime": 10800, + "syncIdentifier": "a608dc45c0c957a929c32e491d4bbce8", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-10T16:35:29.931Z", + "quantity": 7.5, + "absorptionTime": 10800, + "syncIdentifier": "465905bff56ff27c45c76c39a867d05d", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-10T19:46:56.912Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "23d883058c3318a2d61da5d79e893b9e", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf7a" + }, + { + "startDate": "2026-02-10T19:47:35.71Z", + "quantity": 12, + "absorptionTime": 10800, + "syncIdentifier": "0df809961ed49f2e0c0271eec1c5a477", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf7a" + }, + { + "startDate": "2026-02-10T19:51:17.315Z", + "quantity": 60, + "absorptionTime": 10800, + "syncIdentifier": "d7c915f12a8dba1d1ef7bcbf3ea9ea62", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + }, + { + "startDate": "2026-02-10T22:05:55.627Z", + "quantity": 25, + "absorptionTime": 10800, + "syncIdentifier": "09a33c693308a664d9d16369e47bc16b", + "syncVersion": 1, + "createdByCurrentApp": false, + "foodType": "\ud83c\udf2e" + } +] \ No newline at end of file diff --git a/Loop/Resources/LoopInsights/TestData/tidepool_dose_entries.json b/Loop/Resources/LoopInsights/TestData/tidepool_dose_entries.json new file mode 100644 index 0000000000..5211f610d1 --- /dev/null +++ b/Loop/Resources/LoopInsights/TestData/tidepool_dose_entries.json @@ -0,0 +1,45511 @@ +[ + { + "type": "tempBasal", + "startDate": "2026-01-13T18:59:46.446Z", + "endDate": "2026-01-13T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T19:00:00Z", + "endDate": "2026-01-13T19:14:50.354Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T19:14:50.354Z", + "endDate": "2026-01-13T19:29:45.313Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T19:29:45.313Z", + "endDate": "2026-01-13T19:39:45.608Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T19:39:45.609Z", + "endDate": "2026-01-13T19:54:44.510Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T19:53:47.164Z", + "endDate": "2026-01-13T19:56:56.164Z", + "value": 6.3, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T19:54:44.51Z", + "endDate": "2026-01-13T21:04:44.421Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:24:44.475Z", + "endDate": "2026-01-13T20:25:42.975Z", + "value": 1.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:29:45.527Z", + "endDate": "2026-01-13T20:30:21.527Z", + "value": 1.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:34:46.298Z", + "endDate": "2026-01-13T20:35:13.298Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:39:44.188Z", + "endDate": "2026-01-13T20:40:03.688Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:44:44.838Z", + "endDate": "2026-01-13T20:44:53.838Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:49:45.484Z", + "endDate": "2026-01-13T20:49:50.484Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T20:54:46.902Z", + "endDate": "2026-01-13T20:54:51.902Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:04:44.422Z", + "endDate": "2026-01-13T21:09:46.634Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:09:46.635Z", + "endDate": "2026-01-13T21:09:46.638Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:09:46.638Z", + "endDate": "2026-01-13T21:14:44.524Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:14:44.525Z", + "endDate": "2026-01-13T21:39:45.535Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T21:14:45.275Z", + "endDate": "2026-01-13T21:14:50.275Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T21:19:47.051Z", + "endDate": "2026-01-13T21:19:52.051Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:39:45.536Z", + "endDate": "2026-01-13T21:44:47.299Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:44:47.3Z", + "endDate": "2026-01-13T21:54:45.263Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T21:49:45.16Z", + "endDate": "2026-01-13T21:49:50.160Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:54:45.263Z", + "endDate": "2026-01-13T21:59:44.496Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:59:44.497Z", + "endDate": "2026-01-13T21:59:44.503Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T21:59:44.503Z", + "endDate": "2026-01-13T22:04:44.393Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T22:04:44.394Z", + "endDate": "2026-01-13T22:04:44.397Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T22:04:44.397Z", + "endDate": "2026-01-13T22:24:46.056Z", + "value": 0.95, + "unit": "U/hour", + "scheduledBasalRate": 0.95, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:04:45.758Z", + "endDate": "2026-01-13T22:04:50.758Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:09:47.58Z", + "endDate": "2026-01-13T22:09:58.080Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:19:45.192Z", + "endDate": "2026-01-13T22:19:52.692Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T22:24:46.056Z", + "endDate": "2026-01-13T22:24:46.061Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T22:24:46.061Z", + "endDate": "2026-01-13T22:44:45.481Z", + "value": 0.95, + "unit": "U/hour", + "scheduledBasalRate": 0.95, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:24:47.316Z", + "endDate": "2026-01-13T22:25:05.316Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:29:46.664Z", + "endDate": "2026-01-13T22:30:06.164Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:34:44.418Z", + "endDate": "2026-01-13T22:34:56.418Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:39:44.11Z", + "endDate": "2026-01-13T22:40:02.110Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T22:44:45.482Z", + "endDate": "2026-01-13T22:44:45.485Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T22:44:45.485Z", + "endDate": "2026-01-13T23:04:46.546Z", + "value": 0.95, + "unit": "U/hour", + "scheduledBasalRate": 0.95, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:44:46.669Z", + "endDate": "2026-01-13T22:44:54.169Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:49:46.899Z", + "endDate": "2026-01-13T22:49:58.899Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:54:44.37Z", + "endDate": "2026-01-13T22:54:57.870Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T22:59:44.255Z", + "endDate": "2026-01-13T22:59:50.255Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:04:46.546Z", + "endDate": "2026-01-13T23:04:46.547Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:04:46.548Z", + "endDate": "2026-01-13T23:14:44.264Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T23:04:47.672Z", + "endDate": "2026-01-13T23:04:52.672Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T23:09:45.756Z", + "endDate": "2026-01-13T23:09:50.756Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:14:44.265Z", + "endDate": "2026-01-13T23:14:44.266Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:14:44.266Z", + "endDate": "2026-01-13T23:34:47.459Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T23:19:44.973Z", + "endDate": "2026-01-13T23:19:49.973Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T23:24:45.293Z", + "endDate": "2026-01-13T23:24:50.293Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T23:29:45.806Z", + "endDate": "2026-01-13T23:29:51.806Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:34:47.463Z", + "endDate": "2026-01-13T23:44:49.874Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:34:47.46Z", + "endDate": "2026-01-13T23:34:47.463Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-13T23:34:48.901Z", + "endDate": "2026-01-13T23:34:53.901Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:44:49.875Z", + "endDate": "2026-01-13T23:44:49.877Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:44:49.878Z", + "endDate": "2026-01-13T23:49:47.405Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:49:47.405Z", + "endDate": "2026-01-13T23:49:47.406Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-13T23:49:47.406Z", + "endDate": "2026-01-14T00:09:50.910Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T00:09:50.911Z", + "endDate": "2026-01-14T00:09:50.917Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T00:09:50.917Z", + "endDate": "2026-01-14T00:29:45.853Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T00:29:45.853Z", + "endDate": "2026-01-14T00:29:45.855Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T00:29:45.855Z", + "endDate": "2026-01-14T00:49:46.506Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T00:49:46.507Z", + "endDate": "2026-01-14T00:49:46.509Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T00:49:46.51Z", + "endDate": "2026-01-14T01:09:59.438Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T01:09:59.438Z", + "endDate": "2026-01-14T01:09:59.441Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T01:09:59.441Z", + "endDate": "2026-01-14T01:29:59.448Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T01:29:59.449Z", + "endDate": "2026-01-14T01:29:59.450Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T01:29:59.45Z", + "endDate": "2026-01-14T01:49:47.097Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T01:49:47.097Z", + "endDate": "2026-01-14T02:54:46.148Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:14:49.203Z", + "endDate": "2026-01-14T02:16:08.703Z", + "value": 2.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:19:48.018Z", + "endDate": "2026-01-14T02:20:36.018Z", + "value": 1.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:24:45.439Z", + "endDate": "2026-01-14T02:25:12.439Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:29:48.935Z", + "endDate": "2026-01-14T02:30:05.435Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:34:53.104Z", + "endDate": "2026-01-14T02:35:06.604Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:39:45.467Z", + "endDate": "2026-01-14T02:39:54.467Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T02:44:48.436Z", + "endDate": "2026-01-14T02:44:53.436Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T02:54:46.149Z", + "endDate": "2026-01-14T02:59:51.405Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T02:59:51.405Z", + "endDate": "2026-01-14T02:59:51.407Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T02:59:51.408Z", + "endDate": "2026-01-14T03:04:52.499Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:04:52.499Z", + "endDate": "2026-01-14T03:04:52.501Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:04:52.502Z", + "endDate": "2026-01-14T03:14:47.683Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T03:04:53.746Z", + "endDate": "2026-01-14T03:05:01.246Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:14:47.683Z", + "endDate": "2026-01-14T03:14:47.685Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:14:47.686Z", + "endDate": "2026-01-14T03:34:47.455Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:34:47.455Z", + "endDate": "2026-01-14T03:34:47.457Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:34:47.458Z", + "endDate": "2026-01-14T03:54:45.339Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:54:45.339Z", + "endDate": "2026-01-14T03:54:45.341Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:54:45.341Z", + "endDate": "2026-01-14T03:59:46.102Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:59:46.103Z", + "endDate": "2026-01-14T03:59:46.105Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T03:59:46.105Z", + "endDate": "2026-01-14T04:04:47.151Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T04:04:47.152Z", + "endDate": "2026-01-14T04:04:47.154Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T04:04:47.155Z", + "endDate": "2026-01-14T04:14:47.630Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T04:14:47.63Z", + "endDate": "2026-01-14T04:44:45.519Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:14:48.378Z", + "endDate": "2026-01-14T04:14:53.378Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:19:45.545Z", + "endDate": "2026-01-14T04:19:50.545Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:24:44.62Z", + "endDate": "2026-01-14T04:24:49.620Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:29:46.575Z", + "endDate": "2026-01-14T04:29:51.575Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:34:47.628Z", + "endDate": "2026-01-14T04:34:52.628Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:39:47.89Z", + "endDate": "2026-01-14T04:39:52.890Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T04:44:45.52Z", + "endDate": "2026-01-14T04:49:56.245Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T04:49:56.245Z", + "endDate": "2026-01-14T05:09:45.684Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:49:56.994Z", + "endDate": "2026-01-14T04:50:05.994Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:54:45.656Z", + "endDate": "2026-01-14T04:54:54.656Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T04:59:47.369Z", + "endDate": "2026-01-14T04:59:52.369Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:09:45.685Z", + "endDate": "2026-01-14T05:14:47.890Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:14:47.892Z", + "endDate": "2026-01-14T05:19:47.462Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:14:47.89Z", + "endDate": "2026-01-14T05:14:47.891Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:19:47.463Z", + "endDate": "2026-01-14T05:19:47.466Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:19:47.466Z", + "endDate": "2026-01-14T05:24:44.918Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:24:44.918Z", + "endDate": "2026-01-14T05:44:48.127Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:24:45.76Z", + "endDate": "2026-01-14T05:24:50.760Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:29:45.329Z", + "endDate": "2026-01-14T05:29:55.829Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:34:45.699Z", + "endDate": "2026-01-14T05:34:57.699Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:39:44.969Z", + "endDate": "2026-01-14T05:39:49.969Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:44:48.127Z", + "endDate": "2026-01-14T05:49:44.732Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T05:49:44.733Z", + "endDate": "2026-01-14T06:59:45.498Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:49:45.602Z", + "endDate": "2026-01-14T05:49:50.602Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:54:46.309Z", + "endDate": "2026-01-14T05:54:56.809Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T05:59:45.519Z", + "endDate": "2026-01-14T05:59:53.019Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:04:45.955Z", + "endDate": "2026-01-14T06:04:50.955Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:09:46.244Z", + "endDate": "2026-01-14T06:09:51.244Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:14:45.137Z", + "endDate": "2026-01-14T06:14:50.137Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:19:44.915Z", + "endDate": "2026-01-14T06:19:49.915Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:24:47.558Z", + "endDate": "2026-01-14T06:24:52.558Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:29:44.817Z", + "endDate": "2026-01-14T06:29:49.817Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:34:45.631Z", + "endDate": "2026-01-14T06:34:50.631Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:39:47.854Z", + "endDate": "2026-01-14T06:39:55.354Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:44:45.888Z", + "endDate": "2026-01-14T06:44:50.888Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T06:54:44.75Z", + "endDate": "2026-01-14T06:54:49.750Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T06:59:45.498Z", + "endDate": "2026-01-14T07:04:46.284Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:04:46.285Z", + "endDate": "2026-01-14T07:04:46.289Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:04:46.289Z", + "endDate": "2026-01-14T07:09:47.634Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:09:47.634Z", + "endDate": "2026-01-14T07:24:46.503Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T07:09:48.49Z", + "endDate": "2026-01-14T07:09:53.490Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T07:14:46.558Z", + "endDate": "2026-01-14T07:14:51.558Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:24:46.504Z", + "endDate": "2026-01-14T07:29:45.824Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:29:45.824Z", + "endDate": "2026-01-14T07:29:45.826Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:29:45.827Z", + "endDate": "2026-01-14T07:34:46.156Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:34:46.157Z", + "endDate": "2026-01-14T07:44:46.279Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T07:34:47.537Z", + "endDate": "2026-01-14T07:34:56.537Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T07:39:53.272Z", + "endDate": "2026-01-14T07:39:58.272Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:44:46.279Z", + "endDate": "2026-01-14T07:54:48.550Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T07:54:48.551Z", + "endDate": "2026-01-14T07:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T07:54:51.64Z", + "endDate": "2026-01-14T07:54:56.640Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T08:00:00Z", + "endDate": "2026-01-14T08:49:46.651Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:04:45.553Z", + "endDate": "2026-01-14T08:04:50.553Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:09:48.87Z", + "endDate": "2026-01-14T08:09:53.870Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:14:45.364Z", + "endDate": "2026-01-14T08:14:50.364Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:19:46.013Z", + "endDate": "2026-01-14T08:19:51.013Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:34:44.895Z", + "endDate": "2026-01-14T08:34:49.895Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:39:47.821Z", + "endDate": "2026-01-14T08:39:52.821Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:44:47.881Z", + "endDate": "2026-01-14T08:44:52.881Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T08:49:46.652Z", + "endDate": "2026-01-14T08:54:46.707Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T08:54:46.707Z", + "endDate": "2026-01-14T08:54:46.709Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T08:54:46.709Z", + "endDate": "2026-01-14T08:59:46.317Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T08:59:46.318Z", + "endDate": "2026-01-14T09:14:44.495Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T08:59:47.068Z", + "endDate": "2026-01-14T08:59:52.068Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T09:04:46.56Z", + "endDate": "2026-01-14T09:04:51.560Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T09:09:45.946Z", + "endDate": "2026-01-14T09:09:51.946Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:14:44.496Z", + "endDate": "2026-01-14T09:34:45.924Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:34:45.924Z", + "endDate": "2026-01-14T09:34:45.925Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:34:45.926Z", + "endDate": "2026-01-14T09:39:46.600Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:39:46.601Z", + "endDate": "2026-01-14T09:39:46.604Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:39:46.604Z", + "endDate": "2026-01-14T09:44:47.152Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:44:47.152Z", + "endDate": "2026-01-14T09:44:47.154Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:44:47.155Z", + "endDate": "2026-01-14T09:49:47.092Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:49:47.092Z", + "endDate": "2026-01-14T09:49:47.094Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:49:47.095Z", + "endDate": "2026-01-14T09:54:45.726Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T09:54:45.727Z", + "endDate": "2026-01-14T10:19:45.909Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T09:54:46.372Z", + "endDate": "2026-01-14T09:54:51.372Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T09:59:46.583Z", + "endDate": "2026-01-14T09:59:51.583Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T10:09:46.272Z", + "endDate": "2026-01-14T10:09:51.272Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:19:45.909Z", + "endDate": "2026-01-14T10:24:47.251Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:24:47.251Z", + "endDate": "2026-01-14T10:24:47.252Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:24:47.253Z", + "endDate": "2026-01-14T10:29:47.419Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:29:47.419Z", + "endDate": "2026-01-14T10:29:47.423Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:29:47.423Z", + "endDate": "2026-01-14T10:34:45.007Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:34:45.008Z", + "endDate": "2026-01-14T10:34:45.010Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:34:45.01Z", + "endDate": "2026-01-14T10:39:47.486Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:39:47.487Z", + "endDate": "2026-01-14T10:59:44.623Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T10:49:47.538Z", + "endDate": "2026-01-14T10:49:52.538Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T10:59:44.623Z", + "endDate": "2026-01-14T11:04:46.312Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:04:46.313Z", + "endDate": "2026-01-14T11:09:47.328Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:09:47.329Z", + "endDate": "2026-01-14T11:19:46.969Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:19:46.969Z", + "endDate": "2026-01-14T11:24:46.318Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:24:46.318Z", + "endDate": "2026-01-14T11:29:47.092Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:29:47.093Z", + "endDate": "2026-01-14T11:44:45.676Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:44:45.677Z", + "endDate": "2026-01-14T11:54:46.233Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T11:54:46.233Z", + "endDate": "2026-01-14T12:29:45.830Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T12:14:45.08Z", + "endDate": "2026-01-14T12:14:52.580Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T12:19:46.011Z", + "endDate": "2026-01-14T12:19:51.011Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:29:45.831Z", + "endDate": "2026-01-14T12:34:45.542Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:34:45.542Z", + "endDate": "2026-01-14T12:34:45.545Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:34:45.546Z", + "endDate": "2026-01-14T12:39:47.117Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:39:47.118Z", + "endDate": "2026-01-14T12:39:47.121Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:39:47.121Z", + "endDate": "2026-01-14T12:49:47.648Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:49:47.649Z", + "endDate": "2026-01-14T12:59:47.241Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T12:59:47.242Z", + "endDate": "2026-01-14T13:14:45.437Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T13:14:45.437Z", + "endDate": "2026-01-14T14:24:50.491Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T13:49:45.19Z", + "endDate": "2026-01-14T13:49:50.190Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T13:54:49.108Z", + "endDate": "2026-01-14T13:54:55.108Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T13:59:45.696Z", + "endDate": "2026-01-14T13:59:53.196Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T14:04:46.586Z", + "endDate": "2026-01-14T14:04:52.586Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T14:14:49.649Z", + "endDate": "2026-01-14T14:14:55.649Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T14:19:48.378Z", + "endDate": "2026-01-14T14:19:53.378Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:24:50.492Z", + "endDate": "2026-01-14T14:34:48.406Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:34:48.407Z", + "endDate": "2026-01-14T14:34:48.409Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:34:48.41Z", + "endDate": "2026-01-14T14:39:47.287Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:39:47.288Z", + "endDate": "2026-01-14T14:39:47.292Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:39:47.293Z", + "endDate": "2026-01-14T14:44:47.698Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:44:47.698Z", + "endDate": "2026-01-14T14:49:47.033Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:49:47.033Z", + "endDate": "2026-01-14T14:54:46.130Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T14:54:46.13Z", + "endDate": "2026-01-14T14:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T14:59:45.703Z", + "endDate": "2026-01-14T14:59:50.703Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:00:00Z", + "endDate": "2026-01-14T15:34:46.412Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:04:45.921Z", + "endDate": "2026-01-14T15:04:50.921Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:09:48.596Z", + "endDate": "2026-01-14T15:09:53.596Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:14:47.835Z", + "endDate": "2026-01-14T15:14:52.835Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:19:45.977Z", + "endDate": "2026-01-14T15:19:50.977Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:24:48.454Z", + "endDate": "2026-01-14T15:24:53.454Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:34:46.413Z", + "endDate": "2026-01-14T15:39:48.338Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:39:48.338Z", + "endDate": "2026-01-14T15:39:48.340Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:39:48.34Z", + "endDate": "2026-01-14T15:44:47.934Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:44:47.935Z", + "endDate": "2026-01-14T15:44:47.938Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:44:47.938Z", + "endDate": "2026-01-14T15:49:47.559Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T15:49:47.56Z", + "endDate": "2026-01-14T16:00:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:49:48.369Z", + "endDate": "2026-01-14T15:49:53.369Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:54:46.629Z", + "endDate": "2026-01-14T15:54:51.629Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T15:59:49.374Z", + "endDate": "2026-01-14T15:59:54.374Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:00:00Z", + "endDate": "2026-01-14T16:19:46.821Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T16:04:48.087Z", + "endDate": "2026-01-14T16:04:53.087Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T16:09:47.561Z", + "endDate": "2026-01-14T16:09:52.561Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T16:14:49.376Z", + "endDate": "2026-01-14T16:14:54.376Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:19:46.822Z", + "endDate": "2026-01-14T16:24:45.587Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:24:45.588Z", + "endDate": "2026-01-14T16:24:45.591Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:24:45.591Z", + "endDate": "2026-01-14T16:29:47.109Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:29:47.109Z", + "endDate": "2026-01-14T16:29:47.109Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:29:47.11Z", + "endDate": "2026-01-14T16:34:45.690Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:34:45.69Z", + "endDate": "2026-01-14T16:44:45.833Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T16:34:46.529Z", + "endDate": "2026-01-14T16:34:52.529Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T16:39:51.752Z", + "endDate": "2026-01-14T16:40:03.752Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T16:44:45.833Z", + "endDate": "2026-01-14T17:04:48.474Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T17:04:48.474Z", + "endDate": "2026-01-14T17:04:48.480Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T17:04:48.481Z", + "endDate": "2026-01-14T17:09:47.515Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T17:09:47.516Z", + "endDate": "2026-01-14T17:09:47.517Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T17:09:47.518Z", + "endDate": "2026-01-14T17:19:46.294Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T17:19:46.294Z", + "endDate": "2026-01-14T18:04:47.071Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:19:47.059Z", + "endDate": "2026-01-14T17:19:52.059Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:24:46.148Z", + "endDate": "2026-01-14T17:24:52.148Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:29:45.479Z", + "endDate": "2026-01-14T17:29:50.479Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:34:47.493Z", + "endDate": "2026-01-14T17:34:52.493Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:39:46.705Z", + "endDate": "2026-01-14T17:39:51.705Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:44:53.501Z", + "endDate": "2026-01-14T17:44:58.501Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:49:01.695Z", + "endDate": "2026-01-14T17:50:22.695Z", + "value": 2.7, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-14T17:54:46.986Z", + "endDate": "2026-01-14T17:54:51.986Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T18:04:47.072Z", + "endDate": "2026-01-14T18:09:46.869Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T18:09:46.869Z", + "endDate": "2026-01-14T18:09:46.878Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T18:09:46.879Z", + "endDate": "2026-01-14T18:14:48.057Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T18:14:48.057Z", + "endDate": "2026-01-14T18:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:19:47.327Z", + "endDate": "2026-01-14T18:19:52.327Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:24:54.62Z", + "endDate": "2026-01-14T18:24:59.620Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:29:45.969Z", + "endDate": "2026-01-14T18:29:50.969Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:34:51.959Z", + "endDate": "2026-01-14T18:35:02.459Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:39:54.575Z", + "endDate": "2026-01-14T18:40:09.575Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:44:52.421Z", + "endDate": "2026-01-14T18:44:59.921Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:49:48.077Z", + "endDate": "2026-01-14T18:49:53.077Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:54:47.812Z", + "endDate": "2026-01-14T18:54:58.312Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T18:59:47.759Z", + "endDate": "2026-01-14T18:59:53.759Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:00:00Z", + "endDate": "2026-01-14T19:04:45.622Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:04:45.623Z", + "endDate": "2026-01-14T19:09:48.492Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:09:48.492Z", + "endDate": "2026-01-14T19:09:48.500Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:09:48.5Z", + "endDate": "2026-01-14T19:14:48.465Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:14:48.466Z", + "endDate": "2026-01-14T19:14:48.467Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:14:48.467Z", + "endDate": "2026-01-14T19:29:46.236Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:29:46.237Z", + "endDate": "2026-01-14T19:29:46.242Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:29:46.242Z", + "endDate": "2026-01-14T19:34:48.491Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:34:48.492Z", + "endDate": "2026-01-14T19:34:48.496Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:34:48.496Z", + "endDate": "2026-01-14T19:44:46.795Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:44:46.795Z", + "endDate": "2026-01-14T19:44:46.798Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:44:46.799Z", + "endDate": "2026-01-14T19:49:47.087Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T19:49:47.088Z", + "endDate": "2026-01-14T20:49:47.188Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T19:54:46.598Z", + "endDate": "2026-01-14T19:54:51.598Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T19:59:47.987Z", + "endDate": "2026-01-14T19:59:52.987Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T20:04:48.366Z", + "endDate": "2026-01-14T20:04:53.366Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T20:09:47.321Z", + "endDate": "2026-01-14T20:09:52.321Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T20:14:45.987Z", + "endDate": "2026-01-14T20:14:50.987Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T20:19:46.967Z", + "endDate": "2026-01-14T20:19:51.967Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T20:49:47.188Z", + "endDate": "2026-01-14T20:54:48.926Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T20:54:48.926Z", + "endDate": "2026-01-14T21:19:48.445Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T20:54:49.541Z", + "endDate": "2026-01-14T20:54:54.541Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T20:59:46.047Z", + "endDate": "2026-01-14T20:59:51.047Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T21:09:47.842Z", + "endDate": "2026-01-14T21:09:52.842Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:19:48.445Z", + "endDate": "2026-01-14T21:24:45.638Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:24:45.639Z", + "endDate": "2026-01-14T21:29:45.994Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:29:45.995Z", + "endDate": "2026-01-14T21:34:52.896Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:34:52.896Z", + "endDate": "2026-01-14T21:34:52.898Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:34:52.899Z", + "endDate": "2026-01-14T21:39:50.063Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:39:50.063Z", + "endDate": "2026-01-14T21:39:50.066Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:39:50.067Z", + "endDate": "2026-01-14T21:44:49.227Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:44:49.228Z", + "endDate": "2026-01-14T21:59:46.052Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T21:49:47.942Z", + "endDate": "2026-01-14T21:49:52.942Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T21:59:46.053Z", + "endDate": "2026-01-14T22:04:45.929Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T22:04:45.929Z", + "endDate": "2026-01-14T22:09:45.975Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T22:09:45.975Z", + "endDate": "2026-01-14T22:29:46.091Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T22:29:46.092Z", + "endDate": "2026-01-14T22:29:46.094Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T22:29:46.095Z", + "endDate": "2026-01-14T22:49:47.780Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T22:49:47.783Z", + "endDate": "2026-01-14T23:09:48.494Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T22:49:47.78Z", + "endDate": "2026-01-14T22:49:47.783Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-14T23:09:48.494Z", + "endDate": "2026-01-15T00:39:46.708Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:23:35.59Z", + "endDate": "2026-01-14T23:24:20.590Z", + "value": 1.5, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:29:49.174Z", + "endDate": "2026-01-14T23:30:20.674Z", + "value": 1.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:34:48.745Z", + "endDate": "2026-01-14T23:35:02.245Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:39:48.677Z", + "endDate": "2026-01-14T23:39:59.177Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:44:45.982Z", + "endDate": "2026-01-14T23:44:54.982Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:49:48.06Z", + "endDate": "2026-01-14T23:49:53.060Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:54:48.23Z", + "endDate": "2026-01-14T23:54:53.230Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-14T23:59:50.697Z", + "endDate": "2026-01-15T00:00:02.697Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:04:54.587Z", + "endDate": "2026-01-15T00:05:09.587Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:09:47.482Z", + "endDate": "2026-01-15T00:10:00.982Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:14:47.622Z", + "endDate": "2026-01-15T00:14:59.622Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:19:56.145Z", + "endDate": "2026-01-15T00:20:17.145Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:24:47.585Z", + "endDate": "2026-01-15T00:25:04.085Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:29:49.015Z", + "endDate": "2026-01-15T00:30:01.015Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T00:32:47.039Z", + "endDate": "2026-01-15T00:35:05.039Z", + "value": 4.6, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T00:39:46.709Z", + "endDate": "2026-01-15T01:04:59.692Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T01:04:59.692Z", + "endDate": "2026-01-15T01:04:59.745Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T01:04:59.745Z", + "endDate": "2026-01-15T01:24:48.422Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T01:24:48.423Z", + "endDate": "2026-01-15T01:24:48.426Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T01:24:48.426Z", + "endDate": "2026-01-15T01:44:47.198Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T01:24:49.652Z", + "endDate": "2026-01-15T01:25:07.652Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T01:29:47.695Z", + "endDate": "2026-01-15T01:30:02.695Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T01:34:47.594Z", + "endDate": "2026-01-15T01:35:05.594Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T01:39:46.428Z", + "endDate": "2026-01-15T01:39:59.928Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T01:44:47.199Z", + "endDate": "2026-01-15T01:44:47.204Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T01:44:47.204Z", + "endDate": "2026-01-15T02:05:09.050Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T01:44:51.159Z", + "endDate": "2026-01-15T01:44:57.159Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T01:49:54.791Z", + "endDate": "2026-01-15T01:49:59.791Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:05:09.051Z", + "endDate": "2026-01-15T02:05:09.052Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:05:09.053Z", + "endDate": "2026-01-15T02:09:51.371Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:09:51.371Z", + "endDate": "2026-01-15T02:09:51.372Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:09:51.373Z", + "endDate": "2026-01-15T02:20:21.708Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:20:21.709Z", + "endDate": "2026-01-15T02:20:21.712Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:20:21.712Z", + "endDate": "2026-01-15T02:39:47.219Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T02:29:53.838Z", + "endDate": "2026-01-15T02:30:01.338Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:39:47.222Z", + "endDate": "2026-01-15T02:59:57.773Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:39:47.22Z", + "endDate": "2026-01-15T02:39:47.222Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T02:39:48.465Z", + "endDate": "2026-01-15T02:40:18.465Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T02:44:47.511Z", + "endDate": "2026-01-15T02:45:35.511Z", + "value": 1.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T02:50:16.06Z", + "endDate": "2026-01-15T02:50:40.060Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T02:54:59.222Z", + "endDate": "2026-01-15T02:55:15.722Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:59:57.774Z", + "endDate": "2026-01-15T02:59:57.776Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T02:59:57.777Z", + "endDate": "2026-01-15T03:04:52.949Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T02:59:59.334Z", + "endDate": "2026-01-15T03:00:27.834Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:04:52.952Z", + "endDate": "2026-01-15T03:29:48.055Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:04:52.95Z", + "endDate": "2026-01-15T03:04:52.952Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T03:04:54.209Z", + "endDate": "2026-01-15T03:05:16.709Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T03:14:47.336Z", + "endDate": "2026-01-15T03:15:05.336Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T03:16:13.183Z", + "endDate": "2026-01-15T03:16:49.183Z", + "value": 1.2, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-15T03:19:54.021Z", + "endDate": "2026-01-15T03:19:59.021Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:29:48.056Z", + "endDate": "2026-01-15T03:29:48.058Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:29:48.059Z", + "endDate": "2026-01-15T03:39:47.299Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T03:29:49.796Z", + "endDate": "2026-01-15T03:29:54.796Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T03:34:51.766Z", + "endDate": "2026-01-15T03:34:59.266Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:39:47.299Z", + "endDate": "2026-01-15T03:39:47.301Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:39:47.302Z", + "endDate": "2026-01-15T03:44:46.656Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:44:46.657Z", + "endDate": "2026-01-15T03:44:46.659Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:44:46.659Z", + "endDate": "2026-01-15T03:49:46.436Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:49:46.436Z", + "endDate": "2026-01-15T03:49:46.438Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:49:46.439Z", + "endDate": "2026-01-15T03:54:46.484Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:54:46.485Z", + "endDate": "2026-01-15T03:54:46.489Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T03:54:46.489Z", + "endDate": "2026-01-15T04:14:58.532Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:04:49.862Z", + "endDate": "2026-01-15T04:05:00.362Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:09:50.127Z", + "endDate": "2026-01-15T04:09:59.127Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:14:58.533Z", + "endDate": "2026-01-15T04:14:58.536Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:14:58.536Z", + "endDate": "2026-01-15T04:34:47.916Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:14:59.823Z", + "endDate": "2026-01-15T04:15:11.823Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:19:48.429Z", + "endDate": "2026-01-15T04:20:00.429Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:24:55.153Z", + "endDate": "2026-01-15T04:25:07.153Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:29:46.426Z", + "endDate": "2026-01-15T04:29:56.926Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:34:47.916Z", + "endDate": "2026-01-15T04:34:47.919Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:34:47.92Z", + "endDate": "2026-01-15T04:39:47.202Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:39:47.202Z", + "endDate": "2026-01-15T04:39:47.207Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:39:47.208Z", + "endDate": "2026-01-15T04:54:48.168Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:44:46.191Z", + "endDate": "2026-01-15T04:44:52.191Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:54:48.168Z", + "endDate": "2026-01-15T04:54:48.170Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T04:54:48.17Z", + "endDate": "2026-01-15T05:14:46.134Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T04:59:46.341Z", + "endDate": "2026-01-15T04:59:53.841Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:04:46.227Z", + "endDate": "2026-01-15T05:04:51.227Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:09:48.665Z", + "endDate": "2026-01-15T05:09:53.665Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T05:14:46.135Z", + "endDate": "2026-01-15T05:14:46.138Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T05:14:46.138Z", + "endDate": "2026-01-15T05:34:46.298Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:14:47.499Z", + "endDate": "2026-01-15T05:14:52.499Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:19:48.328Z", + "endDate": "2026-01-15T05:19:54.328Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T05:34:46.299Z", + "endDate": "2026-01-15T05:39:46.947Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:34:47.257Z", + "endDate": "2026-01-15T05:34:52.257Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T05:39:46.947Z", + "endDate": "2026-01-15T05:44:46.607Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T05:44:46.607Z", + "endDate": "2026-01-15T06:09:45.772Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:44:47.388Z", + "endDate": "2026-01-15T05:44:52.388Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:49:48.819Z", + "endDate": "2026-01-15T05:49:53.819Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T05:59:46.292Z", + "endDate": "2026-01-15T05:59:51.292Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:04:46.853Z", + "endDate": "2026-01-15T06:04:51.853Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T06:09:45.773Z", + "endDate": "2026-01-15T06:14:47.294Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T06:14:47.294Z", + "endDate": "2026-01-15T06:14:47.297Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T06:14:47.297Z", + "endDate": "2026-01-15T06:19:47.403Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T06:19:47.403Z", + "endDate": "2026-01-15T06:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:24:46.264Z", + "endDate": "2026-01-15T06:24:52.264Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:29:48.218Z", + "endDate": "2026-01-15T06:29:53.218Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:34:48.393Z", + "endDate": "2026-01-15T06:34:53.393Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:39:46.37Z", + "endDate": "2026-01-15T06:39:51.370Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:44:46.313Z", + "endDate": "2026-01-15T06:44:51.313Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:49:48.25Z", + "endDate": "2026-01-15T06:49:53.250Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:54:49.242Z", + "endDate": "2026-01-15T06:54:54.242Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T06:59:49.033Z", + "endDate": "2026-01-15T06:59:54.033Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T07:00:00Z", + "endDate": "2026-01-15T07:49:47.845Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:04:48.467Z", + "endDate": "2026-01-15T07:04:53.467Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:09:47.045Z", + "endDate": "2026-01-15T07:09:52.045Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:14:49.355Z", + "endDate": "2026-01-15T07:14:54.355Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:19:48.382Z", + "endDate": "2026-01-15T07:19:53.382Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:24:47.996Z", + "endDate": "2026-01-15T07:24:52.996Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:29:48.191Z", + "endDate": "2026-01-15T07:29:53.191Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:34:46.967Z", + "endDate": "2026-01-15T07:34:51.967Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T07:39:48.426Z", + "endDate": "2026-01-15T07:39:53.426Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T07:49:47.845Z", + "endDate": "2026-01-15T07:54:46.680Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T07:54:46.681Z", + "endDate": "2026-01-15T07:54:46.701Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T07:54:46.702Z", + "endDate": "2026-01-15T08:09:48.156Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:09:48.156Z", + "endDate": "2026-01-15T08:24:48.597Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T08:09:49.131Z", + "endDate": "2026-01-15T08:09:55.131Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T08:14:49.539Z", + "endDate": "2026-01-15T08:14:55.539Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:24:48.597Z", + "endDate": "2026-01-15T08:29:47.264Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:29:47.265Z", + "endDate": "2026-01-15T08:29:47.268Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:29:47.268Z", + "endDate": "2026-01-15T08:34:47.851Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:34:47.852Z", + "endDate": "2026-01-15T08:44:46.896Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:44:46.896Z", + "endDate": "2026-01-15T08:49:47.062Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:49:47.063Z", + "endDate": "2026-01-15T08:49:47.067Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:49:47.067Z", + "endDate": "2026-01-15T08:54:48.536Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:54:48.536Z", + "endDate": "2026-01-15T08:54:48.538Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:54:48.539Z", + "endDate": "2026-01-15T08:59:48.067Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:59:48.068Z", + "endDate": "2026-01-15T08:59:48.070Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T08:59:48.071Z", + "endDate": "2026-01-15T09:04:46.467Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:04:46.467Z", + "endDate": "2026-01-15T09:09:47.579Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:09:47.58Z", + "endDate": "2026-01-15T09:14:46.431Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:14:46.431Z", + "endDate": "2026-01-15T09:14:46.434Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:14:46.434Z", + "endDate": "2026-01-15T09:34:47.330Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:34:47.334Z", + "endDate": "2026-01-15T09:49:47.070Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:34:47.33Z", + "endDate": "2026-01-15T09:34:47.333Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:49:47.07Z", + "endDate": "2026-01-15T09:59:46.413Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T09:59:46.414Z", + "endDate": "2026-01-15T10:14:46.398Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T10:14:46.398Z", + "endDate": "2026-01-15T10:24:47.064Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T10:24:47.065Z", + "endDate": "2026-01-15T10:44:48.477Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T10:44:48.477Z", + "endDate": "2026-01-15T10:44:48.481Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T10:44:48.481Z", + "endDate": "2026-01-15T10:49:47.610Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T10:49:47.611Z", + "endDate": "2026-01-15T11:29:49.156Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T11:29:49.157Z", + "endDate": "2026-01-15T11:39:48.714Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T11:39:48.714Z", + "endDate": "2026-01-15T12:14:48.036Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T12:14:48.036Z", + "endDate": "2026-01-15T12:29:49.515Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T12:29:49.516Z", + "endDate": "2026-01-15T12:49:47.967Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T12:49:47.968Z", + "endDate": "2026-01-15T12:54:47.890Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T12:54:47.89Z", + "endDate": "2026-01-15T13:29:48.115Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T13:09:48.081Z", + "endDate": "2026-01-15T13:09:57.081Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T13:14:47.561Z", + "endDate": "2026-01-15T13:14:53.561Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T13:19:47.322Z", + "endDate": "2026-01-15T13:19:52.322Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:29:48.116Z", + "endDate": "2026-01-15T13:34:48.889Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:34:48.889Z", + "endDate": "2026-01-15T13:34:48.890Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:34:48.891Z", + "endDate": "2026-01-15T13:39:47.124Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:39:47.125Z", + "endDate": "2026-01-15T13:39:47.128Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:39:47.129Z", + "endDate": "2026-01-15T13:44:47.137Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:44:47.137Z", + "endDate": "2026-01-15T13:44:47.138Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:44:47.138Z", + "endDate": "2026-01-15T13:49:48.195Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:49:48.195Z", + "endDate": "2026-01-15T13:49:48.197Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T13:49:48.198Z", + "endDate": "2026-01-15T14:09:49.073Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T14:09:49.074Z", + "endDate": "2026-01-15T14:09:49.076Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T14:09:49.077Z", + "endDate": "2026-01-15T14:24:48.279Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T14:24:48.279Z", + "endDate": "2026-01-15T14:59:47.694Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T14:34:55.221Z", + "endDate": "2026-01-15T14:35:08.721Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T14:39:49.362Z", + "endDate": "2026-01-15T14:39:58.362Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T14:44:47.851Z", + "endDate": "2026-01-15T14:44:56.851Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T14:49:49.251Z", + "endDate": "2026-01-15T14:49:58.251Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T14:54:48.215Z", + "endDate": "2026-01-15T14:54:53.215Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T14:59:47.694Z", + "endDate": "2026-01-15T15:19:51.948Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:19:51.949Z", + "endDate": "2026-01-15T15:19:51.951Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:19:51.952Z", + "endDate": "2026-01-15T15:29:47.823Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:29:47.823Z", + "endDate": "2026-01-15T15:29:47.824Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:29:47.825Z", + "endDate": "2026-01-15T15:34:53.135Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:34:53.136Z", + "endDate": "2026-01-15T15:34:53.138Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:34:53.138Z", + "endDate": "2026-01-15T15:39:48.112Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T15:39:48.113Z", + "endDate": "2026-01-15T16:00:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T15:44:46.762Z", + "endDate": "2026-01-15T15:44:51.762Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T15:49:48.175Z", + "endDate": "2026-01-15T15:49:53.175Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T15:54:48.765Z", + "endDate": "2026-01-15T15:54:53.765Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T15:59:48.332Z", + "endDate": "2026-01-15T15:59:53.332Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T16:00:00Z", + "endDate": "2026-01-15T16:39:49.574Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T16:04:49.126Z", + "endDate": "2026-01-15T16:04:54.126Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T16:09:47.298Z", + "endDate": "2026-01-15T16:09:52.298Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T16:29:53.065Z", + "endDate": "2026-01-15T16:30:02.065Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T16:34:51.193Z", + "endDate": "2026-01-15T16:35:00.193Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T16:39:49.574Z", + "endDate": "2026-01-15T16:44:47.812Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T16:44:47.813Z", + "endDate": "2026-01-15T16:44:47.815Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T16:44:47.815Z", + "endDate": "2026-01-15T16:59:50.187Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T16:59:50.188Z", + "endDate": "2026-01-15T16:59:50.191Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T16:59:50.191Z", + "endDate": "2026-01-15T17:04:54.439Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T17:04:54.44Z", + "endDate": "2026-01-15T17:49:50.453Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T17:04:55.07Z", + "endDate": "2026-01-15T17:05:04.070Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T17:09:53.352Z", + "endDate": "2026-01-15T17:09:58.352Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T17:19:52Z", + "endDate": "2026-01-15T17:19:57.000Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T17:24:47.28Z", + "endDate": "2026-01-15T17:24:52.280Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T17:29:47.778Z", + "endDate": "2026-01-15T17:29:52.778Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T17:49:50.454Z", + "endDate": "2026-01-15T17:54:48.403Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T17:54:48.404Z", + "endDate": "2026-01-15T17:54:48.406Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T17:54:48.407Z", + "endDate": "2026-01-15T17:59:49.745Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T17:59:49.745Z", + "endDate": "2026-01-15T18:14:48.119Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T18:04:47.513Z", + "endDate": "2026-01-15T18:04:52.513Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T18:14:48.12Z", + "endDate": "2026-01-15T18:19:52.765Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T18:19:52.765Z", + "endDate": "2026-01-15T18:59:47.722Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T18:24:50.279Z", + "endDate": "2026-01-15T18:24:55.279Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T18:29:48.331Z", + "endDate": "2026-01-15T18:29:53.331Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T18:34:49.265Z", + "endDate": "2026-01-15T18:34:54.265Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T18:39:49.348Z", + "endDate": "2026-01-15T18:39:54.348Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T18:44:49.384Z", + "endDate": "2026-01-15T18:44:54.384Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T18:59:47.722Z", + "endDate": "2026-01-15T19:04:51.767Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:04:51.768Z", + "endDate": "2026-01-15T19:19:48.680Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:19:48.681Z", + "endDate": "2026-01-15T19:24:47.329Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:24:47.331Z", + "endDate": "2026-01-15T19:29:47.168Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:24:47.33Z", + "endDate": "2026-01-15T19:24:47.331Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:29:47.169Z", + "endDate": "2026-01-15T19:34:51.260Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:34:51.261Z", + "endDate": "2026-01-15T19:39:47.089Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T19:39:47.09Z", + "endDate": "2026-01-15T20:54:48.411Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T19:40:45.501Z", + "endDate": "2026-01-15T19:43:47.001Z", + "value": 6.05, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:04:47.864Z", + "endDate": "2026-01-15T20:04:52.864Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:09:46.984Z", + "endDate": "2026-01-15T20:09:51.984Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:14:48.549Z", + "endDate": "2026-01-15T20:14:53.549Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:19:49.455Z", + "endDate": "2026-01-15T20:19:54.455Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:24:48.181Z", + "endDate": "2026-01-15T20:24:53.181Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:34:47.893Z", + "endDate": "2026-01-15T20:34:52.893Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:39:47.891Z", + "endDate": "2026-01-15T20:39:52.891Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T20:44:47.267Z", + "endDate": "2026-01-15T20:44:52.267Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T20:54:48.411Z", + "endDate": "2026-01-15T20:59:47.793Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T20:59:47.793Z", + "endDate": "2026-01-15T21:09:47.013Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T21:09:47.014Z", + "endDate": "2026-01-15T21:14:48.222Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T21:14:48.222Z", + "endDate": "2026-01-15T21:14:48.223Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T21:14:48.223Z", + "endDate": "2026-01-15T21:19:47.671Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T21:19:47.671Z", + "endDate": "2026-01-15T22:44:46.711Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:19:48.573Z", + "endDate": "2026-01-15T21:19:53.573Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:24:51.052Z", + "endDate": "2026-01-15T21:25:04.552Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:29:49.227Z", + "endDate": "2026-01-15T21:29:56.727Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:39:51.558Z", + "endDate": "2026-01-15T21:39:56.558Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:44:47.376Z", + "endDate": "2026-01-15T21:44:59.376Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:49:48.96Z", + "endDate": "2026-01-15T21:50:02.460Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:54:48.611Z", + "endDate": "2026-01-15T21:55:05.111Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T21:59:48.254Z", + "endDate": "2026-01-15T22:00:18.254Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:04:49.638Z", + "endDate": "2026-01-15T22:05:19.638Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:09:47.677Z", + "endDate": "2026-01-15T22:09:59.677Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:14:50.021Z", + "endDate": "2026-01-15T22:14:55.021Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:19:49.725Z", + "endDate": "2026-01-15T22:19:58.725Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:24:47.314Z", + "endDate": "2026-01-15T22:25:03.814Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:29:48.097Z", + "endDate": "2026-01-15T22:29:57.097Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:34:53.276Z", + "endDate": "2026-01-15T22:35:02.276Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:39:50.2Z", + "endDate": "2026-01-15T22:39:56.200Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T22:44:46.712Z", + "endDate": "2026-01-15T22:59:49.343Z", + "value": 0.95, + "unit": "U/hour", + "scheduledBasalRate": 0.95, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T22:49:47.255Z", + "endDate": "2026-01-15T22:49:52.255Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T22:59:49.343Z", + "endDate": "2026-01-15T22:59:49.346Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T22:59:49.347Z", + "endDate": "2026-01-15T23:04:47.572Z", + "value": 0.95, + "unit": "U/hour", + "scheduledBasalRate": 0.95, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:04:47.572Z", + "endDate": "2026-01-15T23:04:47.574Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:04:47.575Z", + "endDate": "2026-01-15T23:09:47.710Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:09:47.712Z", + "endDate": "2026-01-15T23:29:48.303Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:09:47.71Z", + "endDate": "2026-01-15T23:09:47.711Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T23:27:01.336Z", + "endDate": "2026-01-15T23:27:38.836Z", + "value": 1.25, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:29:48.303Z", + "endDate": "2026-01-15T23:49:52.289Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T23:39:51.159Z", + "endDate": "2026-01-15T23:39:56.159Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T23:44:53.861Z", + "endDate": "2026-01-15T23:44:58.861Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:49:52.289Z", + "endDate": "2026-01-15T23:59:53.868Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-15T23:59:53.869Z", + "endDate": "2026-01-16T00:14:47.471Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-15T23:59:54.857Z", + "endDate": "2026-01-15T23:59:59.857Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T00:05:08.914Z", + "endDate": "2026-01-16T00:05:13.914Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T00:09:52.233Z", + "endDate": "2026-01-16T00:09:57.233Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:14:47.471Z", + "endDate": "2026-01-16T00:19:47.412Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:19:47.412Z", + "endDate": "2026-01-16T00:34:50.877Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:34:50.877Z", + "endDate": "2026-01-16T00:39:47.716Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:39:47.717Z", + "endDate": "2026-01-16T00:39:47.720Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:39:47.72Z", + "endDate": "2026-01-16T00:44:50.045Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:44:50.046Z", + "endDate": "2026-01-16T00:49:48.742Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T00:44:50.781Z", + "endDate": "2026-01-16T00:44:56.781Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:49:48.743Z", + "endDate": "2026-01-16T00:54:50.576Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:54:50.577Z", + "endDate": "2026-01-16T00:54:50.579Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:54:50.579Z", + "endDate": "2026-01-16T00:59:47.713Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T00:59:47.714Z", + "endDate": "2026-01-16T01:04:50.118Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T00:59:48.508Z", + "endDate": "2026-01-16T00:59:53.508Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T01:04:50.119Z", + "endDate": "2026-01-16T01:24:48.650Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T01:24:48.653Z", + "endDate": "2026-01-16T01:29:53.478Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T01:24:48.65Z", + "endDate": "2026-01-16T01:24:48.652Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T01:29:53.478Z", + "endDate": "2026-01-16T02:04:55.198Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T01:29:54.573Z", + "endDate": "2026-01-16T01:30:00.573Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T01:34:56.102Z", + "endDate": "2026-01-16T01:35:01.102Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T01:44:48.207Z", + "endDate": "2026-01-16T01:44:53.207Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T01:49:47.304Z", + "endDate": "2026-01-16T01:49:52.304Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T01:54:54.816Z", + "endDate": "2026-01-16T01:55:00.816Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:04:55.199Z", + "endDate": "2026-01-16T02:09:48.700Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:09:48.701Z", + "endDate": "2026-01-16T02:09:48.703Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:09:48.703Z", + "endDate": "2026-01-16T02:14:52.326Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:14:52.327Z", + "endDate": "2026-01-16T02:14:52.329Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:14:52.329Z", + "endDate": "2026-01-16T02:34:57.483Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:34:57.484Z", + "endDate": "2026-01-16T02:34:57.487Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:34:57.487Z", + "endDate": "2026-01-16T02:54:49.674Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:54:49.675Z", + "endDate": "2026-01-16T02:54:49.677Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T02:54:49.678Z", + "endDate": "2026-01-16T03:14:49.459Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T03:14:49.459Z", + "endDate": "2026-01-16T04:49:47.748Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T03:39:52.022Z", + "endDate": "2026-01-16T03:40:07.022Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T03:44:49.473Z", + "endDate": "2026-01-16T03:44:58.473Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T03:49:47.253Z", + "endDate": "2026-01-16T03:49:53.253Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T03:54:50.225Z", + "endDate": "2026-01-16T03:54:55.225Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T03:59:50.816Z", + "endDate": "2026-01-16T03:59:55.816Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:14:47.925Z", + "endDate": "2026-01-16T04:14:52.925Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:19:49.64Z", + "endDate": "2026-01-16T04:19:54.640Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:24:50.708Z", + "endDate": "2026-01-16T04:25:01.208Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:29:53.379Z", + "endDate": "2026-01-16T04:30:30.879Z", + "value": 1.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:34:48.613Z", + "endDate": "2026-01-16T04:35:20.113Z", + "value": 1.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:39:49.374Z", + "endDate": "2026-01-16T04:40:11.874Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T04:44:47.93Z", + "endDate": "2026-01-16T04:45:02.930Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T04:49:47.748Z", + "endDate": "2026-01-16T04:54:48.086Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T04:54:48.086Z", + "endDate": "2026-01-16T04:54:48.089Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T04:54:48.09Z", + "endDate": "2026-01-16T05:14:49.867Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T05:14:49.867Z", + "endDate": "2026-01-16T05:14:49.870Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T05:14:49.87Z", + "endDate": "2026-01-16T05:34:49.943Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T05:34:49.943Z", + "endDate": "2026-01-16T05:34:49.996Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T05:34:49.997Z", + "endDate": "2026-01-16T05:54:47.566Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T05:54:47.566Z", + "endDate": "2026-01-16T06:04:48.973Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T06:04:48.973Z", + "endDate": "2026-01-16T06:09:47.773Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T06:09:47.774Z", + "endDate": "2026-01-16T06:29:49.907Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:14:47.79Z", + "endDate": "2026-01-16T06:14:52.790Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:19:47.961Z", + "endDate": "2026-01-16T06:19:52.961Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:24:48.24Z", + "endDate": "2026-01-16T06:24:53.240Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T06:29:49.908Z", + "endDate": "2026-01-16T06:39:47.649Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T06:39:47.65Z", + "endDate": "2026-01-16T06:44:47.701Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:39:48.326Z", + "endDate": "2026-01-16T06:39:53.326Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T06:44:47.701Z", + "endDate": "2026-01-16T06:49:48.023Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T06:49:48.023Z", + "endDate": "2026-01-16T06:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:49:49.014Z", + "endDate": "2026-01-16T06:49:54.014Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:54:49.813Z", + "endDate": "2026-01-16T06:54:57.313Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T06:59:48.791Z", + "endDate": "2026-01-16T06:59:57.791Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T07:00:00Z", + "endDate": "2026-01-16T07:59:47.238Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T07:04:48.413Z", + "endDate": "2026-01-16T07:04:55.913Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T07:09:48.637Z", + "endDate": "2026-01-16T07:09:53.637Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T07:59:47.238Z", + "endDate": "2026-01-16T08:04:49.495Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:04:49.496Z", + "endDate": "2026-01-16T08:04:49.504Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:04:49.505Z", + "endDate": "2026-01-16T08:09:49.437Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:09:49.437Z", + "endDate": "2026-01-16T08:34:47.700Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T08:09:50.112Z", + "endDate": "2026-01-16T08:09:55.112Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T08:14:49.498Z", + "endDate": "2026-01-16T08:14:54.498Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T08:19:51.175Z", + "endDate": "2026-01-16T08:19:56.175Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T08:24:49.018Z", + "endDate": "2026-01-16T08:24:54.018Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:34:47.7Z", + "endDate": "2026-01-16T08:39:47.761Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:39:47.762Z", + "endDate": "2026-01-16T08:54:48.465Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T08:44:49.368Z", + "endDate": "2026-01-16T08:44:54.368Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T08:49:49.177Z", + "endDate": "2026-01-16T08:49:54.177Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:54:48.466Z", + "endDate": "2026-01-16T08:59:48.651Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:59:48.651Z", + "endDate": "2026-01-16T08:59:48.653Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T08:59:48.654Z", + "endDate": "2026-01-16T09:04:53.273Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T09:04:53.273Z", + "endDate": "2026-01-16T09:19:48.793Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T09:19:48.794Z", + "endDate": "2026-01-16T09:29:49.113Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T09:29:49.114Z", + "endDate": "2026-01-16T09:29:49.117Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T09:29:49.118Z", + "endDate": "2026-01-16T09:34:47.751Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T09:34:47.751Z", + "endDate": "2026-01-16T10:09:52.045Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T09:39:48.007Z", + "endDate": "2026-01-16T09:39:53.007Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T09:44:48.835Z", + "endDate": "2026-01-16T09:44:53.835Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T10:09:52.046Z", + "endDate": "2026-01-16T10:14:54.160Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T10:14:54.164Z", + "endDate": "2026-01-16T10:19:49.960Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T10:14:54.16Z", + "endDate": "2026-01-16T10:14:54.163Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T10:19:49.961Z", + "endDate": "2026-01-16T11:14:51.572Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T10:24:49.618Z", + "endDate": "2026-01-16T10:24:54.618Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T10:44:49.927Z", + "endDate": "2026-01-16T10:44:54.927Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T10:49:48.372Z", + "endDate": "2026-01-16T10:49:53.372Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:14:51.573Z", + "endDate": "2026-01-16T11:19:48.965Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:19:48.966Z", + "endDate": "2026-01-16T11:19:48.969Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:19:48.969Z", + "endDate": "2026-01-16T11:24:47.975Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:24:47.975Z", + "endDate": "2026-01-16T11:44:50.860Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T11:24:48.949Z", + "endDate": "2026-01-16T11:24:53.949Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T11:29:48.234Z", + "endDate": "2026-01-16T11:29:53.234Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T11:34:49.077Z", + "endDate": "2026-01-16T11:34:54.077Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T11:39:48.255Z", + "endDate": "2026-01-16T11:39:53.255Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:44:50.861Z", + "endDate": "2026-01-16T11:49:48.752Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:49:48.752Z", + "endDate": "2026-01-16T11:49:48.754Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:49:48.755Z", + "endDate": "2026-01-16T11:54:48.797Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:54:48.797Z", + "endDate": "2026-01-16T11:54:48.799Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:54:48.8Z", + "endDate": "2026-01-16T11:59:48.336Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:59:48.336Z", + "endDate": "2026-01-16T11:59:48.337Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T11:59:48.338Z", + "endDate": "2026-01-16T12:19:49.410Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T12:19:49.413Z", + "endDate": "2026-01-16T12:29:48.168Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T12:19:49.41Z", + "endDate": "2026-01-16T12:19:49.412Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T12:29:48.168Z", + "endDate": "2026-01-16T12:51:13.454Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T12:39:49.461Z", + "endDate": "2026-01-16T12:39:56.961Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T12:44:49.764Z", + "endDate": "2026-01-16T12:44:58.764Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T12:49:49.451Z", + "endDate": "2026-01-16T12:49:56.951Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-01-16T12:51:13.455Z", + "endDate": "2026-01-16T14:17:10.222Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T14:17:10.223Z", + "endDate": "2026-01-16T14:54:48.397Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:19:48.741Z", + "endDate": "2026-01-16T14:20:18.741Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:24:50.966Z", + "endDate": "2026-01-16T14:25:25.466Z", + "value": 1.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:29:50.402Z", + "endDate": "2026-01-16T14:30:14.402Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:34:48.768Z", + "endDate": "2026-01-16T14:34:57.768Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:39:49.868Z", + "endDate": "2026-01-16T14:39:57.368Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:44:49.748Z", + "endDate": "2026-01-16T14:44:54.748Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T14:49:49.932Z", + "endDate": "2026-01-16T14:49:54.932Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T14:54:48.397Z", + "endDate": "2026-01-16T14:59:50.758Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T14:59:50.759Z", + "endDate": "2026-01-16T14:59:50.761Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T14:59:50.761Z", + "endDate": "2026-01-16T15:04:50.522Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:04:50.522Z", + "endDate": "2026-01-16T15:09:50.372Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:09:50.373Z", + "endDate": "2026-01-16T15:14:48.263Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:14:48.264Z", + "endDate": "2026-01-16T15:14:48.267Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:14:48.268Z", + "endDate": "2026-01-16T15:19:49.828Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:19:49.828Z", + "endDate": "2026-01-16T15:19:49.830Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:19:49.831Z", + "endDate": "2026-01-16T15:24:50.431Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T15:24:50.432Z", + "endDate": "2026-01-16T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:24:51.185Z", + "endDate": "2026-01-16T15:24:56.185Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:29:49.131Z", + "endDate": "2026-01-16T15:29:54.131Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:34:49.913Z", + "endDate": "2026-01-16T15:34:54.913Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:39:51.642Z", + "endDate": "2026-01-16T15:39:57.642Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:44:55.537Z", + "endDate": "2026-01-16T15:45:00.537Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:49:49.445Z", + "endDate": "2026-01-16T15:49:55.445Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:54:51.064Z", + "endDate": "2026-01-16T15:55:10.564Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T15:59:50.322Z", + "endDate": "2026-01-16T15:59:55.322Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T16:00:00Z", + "endDate": "2026-01-16T16:04:49.427Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T16:04:49.427Z", + "endDate": "2026-01-16T16:09:49.656Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T16:09:49.656Z", + "endDate": "2026-01-16T16:59:48.056Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T16:14:51.111Z", + "endDate": "2026-01-16T16:14:56.111Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T16:34:51.787Z", + "endDate": "2026-01-16T16:34:56.787Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T16:49:52.396Z", + "endDate": "2026-01-16T16:49:57.396Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T16:59:48.057Z", + "endDate": "2026-01-16T17:09:52.119Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T17:09:52.12Z", + "endDate": "2026-01-16T17:14:49.106Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T17:09:52.964Z", + "endDate": "2026-01-16T17:09:57.964Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T17:14:49.106Z", + "endDate": "2026-01-16T17:14:50.533Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T17:14:50.534Z", + "endDate": "2026-01-16T17:19:50.676Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T17:19:50.676Z", + "endDate": "2026-01-16T17:24:48.422Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T17:24:48.423Z", + "endDate": "2026-01-16T17:29:52.528Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T17:29:52.529Z", + "endDate": "2026-01-16T18:49:49.491Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T17:34:49.336Z", + "endDate": "2026-01-16T17:34:54.336Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T17:39:50.554Z", + "endDate": "2026-01-16T17:39:55.554Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T18:19:48.831Z", + "endDate": "2026-01-16T18:19:53.831Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T18:24:53.546Z", + "endDate": "2026-01-16T18:24:58.546Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T18:29:55.319Z", + "endDate": "2026-01-16T18:30:00.319Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T18:34:50.251Z", + "endDate": "2026-01-16T18:34:55.251Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T18:39:48.5Z", + "endDate": "2026-01-16T18:39:53.500Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T18:49:49.491Z", + "endDate": "2026-01-16T18:54:48.901Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T18:54:48.902Z", + "endDate": "2026-01-16T18:54:48.905Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T18:54:48.905Z", + "endDate": "2026-01-16T18:59:49.835Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T18:59:49.836Z", + "endDate": "2026-01-16T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T19:00:00Z", + "endDate": "2026-01-16T19:59:55.877Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T19:34:52.41Z", + "endDate": "2026-01-16T19:34:58.410Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T19:39:51.138Z", + "endDate": "2026-01-16T19:39:56.138Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T19:49:49.212Z", + "endDate": "2026-01-16T19:49:54.212Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T19:54:50.366Z", + "endDate": "2026-01-16T19:54:55.366Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T19:59:55.878Z", + "endDate": "2026-01-16T20:04:55.029Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T20:04:55.029Z", + "endDate": "2026-01-16T21:49:48.377Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T20:04:55.863Z", + "endDate": "2026-01-16T20:05:00.863Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T20:09:30.308Z", + "endDate": "2026-01-16T20:13:19.808Z", + "value": 7.65, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-16T20:40:06.05Z", + "endDate": "2026-01-16T20:40:34.550Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T20:54:50.585Z", + "endDate": "2026-01-16T20:55:19.085Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T20:59:48.957Z", + "endDate": "2026-01-16T21:00:21.957Z", + "value": 1.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T21:04:48.543Z", + "endDate": "2026-01-16T21:05:20.043Z", + "value": 1.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T21:14:50.251Z", + "endDate": "2026-01-16T21:15:14.251Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T21:19:52.567Z", + "endDate": "2026-01-16T21:20:10.567Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T21:39:49.482Z", + "endDate": "2026-01-16T21:39:55.482Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T21:44:48.71Z", + "endDate": "2026-01-16T21:44:54.710Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T21:49:48.378Z", + "endDate": "2026-01-16T21:54:51.910Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T21:54:51.911Z", + "endDate": "2026-01-16T21:54:51.913Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T21:54:51.913Z", + "endDate": "2026-01-16T21:59:50.298Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T21:59:50.298Z", + "endDate": "2026-01-16T22:24:49.465Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T21:59:50.899Z", + "endDate": "2026-01-16T21:59:56.899Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T22:04:50.29Z", + "endDate": "2026-01-16T22:04:56.290Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T22:09:51.75Z", + "endDate": "2026-01-16T22:09:56.750Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T22:24:49.465Z", + "endDate": "2026-01-16T22:29:49.829Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T22:29:49.833Z", + "endDate": "2026-01-16T22:39:48.458Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T22:29:49.83Z", + "endDate": "2026-01-16T22:29:49.832Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T22:39:48.458Z", + "endDate": "2026-01-16T22:39:48.460Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T22:39:48.461Z", + "endDate": "2026-01-16T22:44:48.990Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T22:44:48.99Z", + "endDate": "2026-01-16T23:00:00.000Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T22:44:49.83Z", + "endDate": "2026-01-16T22:44:54.830Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T22:49:49.774Z", + "endDate": "2026-01-16T22:49:54.774Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T23:00:00Z", + "endDate": "2026-01-16T23:49:49.447Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:04:50.601Z", + "endDate": "2026-01-16T23:04:55.601Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:09:51.311Z", + "endDate": "2026-01-16T23:09:56.311Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:14:48.493Z", + "endDate": "2026-01-16T23:14:53.493Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:19:51.318Z", + "endDate": "2026-01-16T23:20:00.318Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:24:49.868Z", + "endDate": "2026-01-16T23:24:58.868Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:29:49.015Z", + "endDate": "2026-01-16T23:29:54.015Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:34:51.75Z", + "endDate": "2026-01-16T23:34:59.250Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:39:48.635Z", + "endDate": "2026-01-16T23:39:56.135Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-16T23:44:52.977Z", + "endDate": "2026-01-16T23:44:57.977Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T23:49:49.447Z", + "endDate": "2026-01-16T23:54:51.782Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T23:54:51.782Z", + "endDate": "2026-01-16T23:54:51.787Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T23:54:51.787Z", + "endDate": "2026-01-16T23:59:49.536Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-16T23:59:49.537Z", + "endDate": "2026-01-17T00:09:51.055Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:09:51.056Z", + "endDate": "2026-01-17T00:25:00.409Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:25:00.409Z", + "endDate": "2026-01-17T00:25:00.420Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:25:00.421Z", + "endDate": "2026-01-17T00:29:52.693Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:29:52.693Z", + "endDate": "2026-01-17T00:29:52.696Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:29:52.697Z", + "endDate": "2026-01-17T00:49:51.897Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:49:51.898Z", + "endDate": "2026-01-17T00:49:51.899Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:49:51.9Z", + "endDate": "2026-01-17T00:54:50.882Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:54:50.882Z", + "endDate": "2026-01-17T00:59:56.261Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T00:54:51.738Z", + "endDate": "2026-01-17T00:55:00.738Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T00:59:56.262Z", + "endDate": "2026-01-17T01:04:52.712Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T01:04:52.712Z", + "endDate": "2026-01-17T01:04:52.715Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T01:04:52.715Z", + "endDate": "2026-01-17T01:09:49.203Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T01:09:49.204Z", + "endDate": "2026-01-17T01:09:49.206Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T01:09:49.206Z", + "endDate": "2026-01-17T01:19:51.906Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T01:19:51.907Z", + "endDate": "2026-01-17T03:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T01:24:49.647Z", + "endDate": "2026-01-17T01:24:54.647Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T01:29:52.756Z", + "endDate": "2026-01-17T01:29:57.756Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T01:34:52.501Z", + "endDate": "2026-01-17T01:34:57.501Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T01:39:54.321Z", + "endDate": "2026-01-17T01:39:59.321Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T01:44:53.299Z", + "endDate": "2026-01-17T01:44:58.299Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T01:49:50.255Z", + "endDate": "2026-01-17T01:49:55.255Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T02:00:18.699Z", + "endDate": "2026-01-17T02:02:50.199Z", + "value": 5.05, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-17T02:19:50.957Z", + "endDate": "2026-01-17T02:20:14.957Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T02:25:05.27Z", + "endDate": "2026-01-17T02:25:24.770Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T02:29:50.812Z", + "endDate": "2026-01-17T02:30:08.812Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T02:34:51.382Z", + "endDate": "2026-01-17T02:35:12.382Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T03:00:00Z", + "endDate": "2026-01-17T04:44:49.807Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T03:09:55.252Z", + "endDate": "2026-01-17T03:10:19.252Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T03:44:50.611Z", + "endDate": "2026-01-17T03:45:07.111Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T03:59:49.321Z", + "endDate": "2026-01-17T03:59:58.321Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T04:04:50.318Z", + "endDate": "2026-01-17T04:04:57.818Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T04:09:50.533Z", + "endDate": "2026-01-17T04:09:55.533Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T04:14:49.095Z", + "endDate": "2026-01-17T04:14:54.095Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T04:19:51.182Z", + "endDate": "2026-01-17T04:19:56.182Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T04:44:49.807Z", + "endDate": "2026-01-17T04:54:49.378Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T04:54:49.379Z", + "endDate": "2026-01-17T04:54:49.433Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T04:54:49.433Z", + "endDate": "2026-01-17T05:04:49.713Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:04:49.714Z", + "endDate": "2026-01-17T05:39:54.465Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T05:14:49.38Z", + "endDate": "2026-01-17T05:14:54.380Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T05:19:49.146Z", + "endDate": "2026-01-17T05:19:54.146Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T05:29:49.934Z", + "endDate": "2026-01-17T05:29:54.934Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T05:34:49.222Z", + "endDate": "2026-01-17T05:34:54.222Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:39:54.466Z", + "endDate": "2026-01-17T05:44:52.443Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:44:52.443Z", + "endDate": "2026-01-17T05:44:52.445Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:44:52.446Z", + "endDate": "2026-01-17T05:49:50.784Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:49:50.784Z", + "endDate": "2026-01-17T05:49:50.787Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:49:50.787Z", + "endDate": "2026-01-17T05:54:49.581Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T05:54:49.581Z", + "endDate": "2026-01-17T06:49:48.771Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T05:59:49.931Z", + "endDate": "2026-01-17T05:59:54.931Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T06:39:50.646Z", + "endDate": "2026-01-17T06:39:55.646Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T06:49:48.772Z", + "endDate": "2026-01-17T06:54:49.819Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T06:54:49.819Z", + "endDate": "2026-01-17T06:54:49.823Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T06:54:49.824Z", + "endDate": "2026-01-17T07:04:52.261Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T07:04:52.261Z", + "endDate": "2026-01-17T07:14:49.060Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T07:14:49.061Z", + "endDate": "2026-01-17T07:19:49.735Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T07:19:49.735Z", + "endDate": "2026-01-17T07:44:50.225Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T07:19:50.501Z", + "endDate": "2026-01-17T07:19:55.501Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T07:24:51.196Z", + "endDate": "2026-01-17T07:25:00.196Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T07:39:50.857Z", + "endDate": "2026-01-17T07:39:55.857Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T07:44:50.226Z", + "endDate": "2026-01-17T07:54:49.795Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T07:54:49.795Z", + "endDate": "2026-01-17T07:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T07:54:50.575Z", + "endDate": "2026-01-17T07:54:55.575Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T07:59:50.866Z", + "endDate": "2026-01-17T07:59:55.866Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:00:00Z", + "endDate": "2026-01-17T08:04:50.436Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:04:50.437Z", + "endDate": "2026-01-17T08:09:49.813Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:09:49.813Z", + "endDate": "2026-01-17T08:09:49.816Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:09:49.816Z", + "endDate": "2026-01-17T08:14:49.128Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:14:49.128Z", + "endDate": "2026-01-17T08:29:49.329Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T08:19:50.587Z", + "endDate": "2026-01-17T08:19:55.587Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T08:24:51.987Z", + "endDate": "2026-01-17T08:24:56.987Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:29:49.33Z", + "endDate": "2026-01-17T08:34:51.183Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:34:51.184Z", + "endDate": "2026-01-17T08:39:50.671Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:39:50.671Z", + "endDate": "2026-01-17T08:44:50.172Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T08:44:50.173Z", + "endDate": "2026-01-17T09:29:51.005Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T09:09:49.071Z", + "endDate": "2026-01-17T09:09:54.071Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T09:19:50.158Z", + "endDate": "2026-01-17T09:19:55.158Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T09:24:50.853Z", + "endDate": "2026-01-17T09:24:55.853Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T09:29:51.005Z", + "endDate": "2026-01-17T09:34:49.935Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T09:34:49.935Z", + "endDate": "2026-01-17T09:44:51.277Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T09:44:51.278Z", + "endDate": "2026-01-17T09:49:50.758Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T09:49:50.758Z", + "endDate": "2026-01-17T09:49:50.760Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T09:49:50.761Z", + "endDate": "2026-01-17T10:04:51.776Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T10:04:51.777Z", + "endDate": "2026-01-17T10:09:48.829Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T10:09:48.83Z", + "endDate": "2026-01-17T10:14:50.499Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T10:14:50.5Z", + "endDate": "2026-01-17T10:24:51.924Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T10:19:49.843Z", + "endDate": "2026-01-17T10:19:55.843Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T10:24:51.924Z", + "endDate": "2026-01-17T10:34:52.151Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T10:34:52.151Z", + "endDate": "2026-01-17T10:49:49.660Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T10:49:49.661Z", + "endDate": "2026-01-17T11:09:51.588Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:09:51.588Z", + "endDate": "2026-01-17T11:09:51.590Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:09:51.591Z", + "endDate": "2026-01-17T11:29:49.899Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:29:49.903Z", + "endDate": "2026-01-17T11:44:51.369Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:29:49.9Z", + "endDate": "2026-01-17T11:29:49.903Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:44:51.37Z", + "endDate": "2026-01-17T11:49:50.499Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:49:50.499Z", + "endDate": "2026-01-17T11:59:49.379Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T11:59:49.38Z", + "endDate": "2026-01-17T12:04:49.078Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T12:04:49.079Z", + "endDate": "2026-01-17T12:14:50.069Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T12:14:50.069Z", + "endDate": "2026-01-17T12:19:51.595Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T12:19:51.595Z", + "endDate": "2026-01-17T12:39:49.599Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T12:39:49.6Z", + "endDate": "2026-01-17T13:19:49.054Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T13:19:49.054Z", + "endDate": "2026-01-17T13:29:52.110Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T13:29:52.11Z", + "endDate": "2026-01-17T13:39:50.285Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T13:39:50.286Z", + "endDate": "2026-01-17T13:54:51.325Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T13:54:51.326Z", + "endDate": "2026-01-17T14:49:49.439Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T14:34:50.837Z", + "endDate": "2026-01-17T14:34:59.837Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T14:39:51.602Z", + "endDate": "2026-01-17T14:39:56.602Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T14:49:49.439Z", + "endDate": "2026-01-17T14:54:51.562Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T14:54:51.563Z", + "endDate": "2026-01-17T14:54:51.568Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T14:54:51.568Z", + "endDate": "2026-01-17T15:14:51.237Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T15:14:51.237Z", + "endDate": "2026-01-17T15:14:51.242Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T15:14:51.243Z", + "endDate": "2026-01-17T15:34:50.060Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T15:34:50.06Z", + "endDate": "2026-01-17T16:00:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T15:54:52.431Z", + "endDate": "2026-01-17T15:55:01.431Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T15:59:51.491Z", + "endDate": "2026-01-17T16:00:04.991Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:00:00Z", + "endDate": "2026-01-17T16:10:01.633Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T16:04:49.966Z", + "endDate": "2026-01-17T16:04:57.466Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:10:01.633Z", + "endDate": "2026-01-17T16:14:52.929Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:14:52.934Z", + "endDate": "2026-01-17T16:19:58.584Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:14:52.93Z", + "endDate": "2026-01-17T16:14:52.933Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:19:58.584Z", + "endDate": "2026-01-17T16:29:51.172Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T16:19:59.349Z", + "endDate": "2026-01-17T16:20:04.349Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T16:24:57.219Z", + "endDate": "2026-01-17T16:25:02.219Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:29:51.173Z", + "endDate": "2026-01-17T16:49:49.646Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:49:49.646Z", + "endDate": "2026-01-17T16:49:49.674Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:49:49.675Z", + "endDate": "2026-01-17T16:54:50.664Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:54:50.665Z", + "endDate": "2026-01-17T16:54:50.668Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:54:50.668Z", + "endDate": "2026-01-17T16:59:52.210Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T16:59:52.211Z", + "endDate": "2026-01-17T17:44:49.492Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T17:04:49.934Z", + "endDate": "2026-01-17T17:04:54.934Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T17:19:51.845Z", + "endDate": "2026-01-17T17:19:56.845Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T17:34:49.947Z", + "endDate": "2026-01-17T17:34:54.947Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T17:38:33.974Z", + "endDate": "2026-01-17T17:39:57.974Z", + "value": 2.8, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T17:44:49.492Z", + "endDate": "2026-01-17T17:49:50.999Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T17:49:51.002Z", + "endDate": "2026-01-17T17:54:50.930Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T17:49:51Z", + "endDate": "2026-01-17T17:49:51.001Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T17:54:50.93Z", + "endDate": "2026-01-17T18:14:49.113Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T17:59:55.21Z", + "endDate": "2026-01-17T18:00:00.210Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T18:04:53.894Z", + "endDate": "2026-01-17T18:05:01.394Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T18:09:54.916Z", + "endDate": "2026-01-17T18:09:59.916Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:14:49.113Z", + "endDate": "2026-01-17T18:34:50.891Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:34:50.891Z", + "endDate": "2026-01-17T18:34:50.893Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:34:50.894Z", + "endDate": "2026-01-17T18:49:52.004Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:49:52.004Z", + "endDate": "2026-01-17T18:54:50.563Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:54:50.564Z", + "endDate": "2026-01-17T18:59:50.782Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:59:50.782Z", + "endDate": "2026-01-17T18:59:50.784Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T18:59:50.785Z", + "endDate": "2026-01-17T19:14:53.150Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:14:53.15Z", + "endDate": "2026-01-17T19:24:51.515Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T19:14:53.796Z", + "endDate": "2026-01-17T19:14:58.796Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:24:51.515Z", + "endDate": "2026-01-17T19:29:51.241Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:29:51.242Z", + "endDate": "2026-01-17T19:29:51.245Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:29:51.245Z", + "endDate": "2026-01-17T19:34:50.613Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:34:50.614Z", + "endDate": "2026-01-17T19:34:50.616Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:34:50.617Z", + "endDate": "2026-01-17T19:39:51.502Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:39:51.502Z", + "endDate": "2026-01-17T19:39:51.504Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:39:51.504Z", + "endDate": "2026-01-17T19:44:50.127Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T19:44:50.128Z", + "endDate": "2026-01-17T20:04:52.275Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T19:47:57.689Z", + "endDate": "2026-01-17T19:49:44.189Z", + "value": 3.55, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T20:04:52.275Z", + "endDate": "2026-01-17T20:14:50.220Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T20:14:50.22Z", + "endDate": "2026-01-17T20:19:50.446Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T20:19:50.447Z", + "endDate": "2026-01-17T20:29:52.106Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T20:29:52.107Z", + "endDate": "2026-01-17T20:44:49.456Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T20:29:52.857Z", + "endDate": "2026-01-17T20:29:57.857Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T20:34:51.975Z", + "endDate": "2026-01-17T20:34:57.975Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T20:39:50.386Z", + "endDate": "2026-01-17T20:39:55.386Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T20:44:49.456Z", + "endDate": "2026-01-17T20:54:50.291Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T20:54:50.292Z", + "endDate": "2026-01-17T21:19:52.842Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:19:52.843Z", + "endDate": "2026-01-17T21:24:52.654Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:24:52.654Z", + "endDate": "2026-01-17T21:34:53.742Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T21:24:53.343Z", + "endDate": "2026-01-17T21:24:58.343Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T21:29:52.442Z", + "endDate": "2026-01-17T21:29:57.442Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:34:53.742Z", + "endDate": "2026-01-17T21:54:52.546Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:54:52.546Z", + "endDate": "2026-01-17T21:54:52.548Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:54:52.549Z", + "endDate": "2026-01-17T21:59:51.179Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:59:51.183Z", + "endDate": "2026-01-17T22:04:50.307Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T21:59:51.18Z", + "endDate": "2026-01-17T21:59:51.183Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T22:04:50.308Z", + "endDate": "2026-01-17T22:04:50.309Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T22:04:50.309Z", + "endDate": "2026-01-17T22:09:50.743Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T22:09:08.174Z", + "endDate": "2026-01-17T22:13:48.674Z", + "value": 9.35, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T22:09:50.744Z", + "endDate": "2026-01-17T22:59:59.999Z", + "value": 0.95, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T22:39:52.05Z", + "endDate": "2026-01-17T22:40:22.050Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-17T22:44:50.058Z", + "endDate": "2026-01-17T22:45:08.058Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T23:00:00Z", + "endDate": "2026-01-17T23:09:51.304Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T23:09:51.304Z", + "endDate": "2026-01-17T23:24:52.462Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-17T23:24:52.463Z", + "endDate": "2026-01-18T00:44:49.645Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T00:44:49.646Z", + "endDate": "2026-01-18T00:54:50.324Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T00:54:50.324Z", + "endDate": "2026-01-18T01:04:49.698Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T01:04:49.698Z", + "endDate": "2026-01-18T01:09:50.150Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T01:09:50.151Z", + "endDate": "2026-01-18T01:19:49.959Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T01:19:49.959Z", + "endDate": "2026-01-18T01:39:24.937Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-01-18T01:39:24.938Z", + "endDate": "2026-01-18T01:39:25.446Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "basal", + "startDate": "2026-01-18T01:39:25.446Z", + "endDate": "2026-01-18T01:41:35.229Z", + "value": 1.1, + "unit": "U/hour" + }, + { + "type": "suspend", + "startDate": "2026-01-18T01:41:35.229Z", + "endDate": "2026-01-18T01:41:35.738Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "basal", + "startDate": "2026-01-18T01:41:35.739Z", + "endDate": "2026-01-18T01:42:05.364Z", + "value": 1.1, + "unit": "U/hour" + }, + { + "type": "suspend", + "startDate": "2026-01-18T01:42:05.365Z", + "endDate": "2026-01-18T01:42:05.873Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "basal", + "startDate": "2026-01-18T01:42:05.874Z", + "endDate": "2026-01-18T01:42:32.485Z", + "value": 1.1, + "unit": "U/hour" + }, + { + "type": "suspend", + "startDate": "2026-01-18T01:42:32.485Z", + "endDate": "2026-01-18T01:42:32.995Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "basal", + "startDate": "2026-01-18T01:42:32.996Z", + "endDate": "2026-01-18T01:43:19.345Z", + "value": 1.1, + "unit": "U/hour" + }, + { + "type": "suspend", + "startDate": "2026-01-18T01:43:19.345Z", + "endDate": "2026-01-18T01:43:19.856Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T01:43:19.857Z", + "endDate": "2026-01-18T02:19:52.133Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T02:09:52.964Z", + "endDate": "2026-01-18T02:10:00.464Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T02:14:51.394Z", + "endDate": "2026-01-18T02:14:56.394Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:19:52.133Z", + "endDate": "2026-01-18T02:24:51.434Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:24:51.435Z", + "endDate": "2026-01-18T02:24:51.437Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:24:51.438Z", + "endDate": "2026-01-18T02:34:52.989Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:34:52.992Z", + "endDate": "2026-01-18T02:44:55.873Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:34:52.99Z", + "endDate": "2026-01-18T02:34:52.992Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:44:55.873Z", + "endDate": "2026-01-18T02:54:51.913Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T02:44:56.504Z", + "endDate": "2026-01-18T02:45:04.004Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T02:49:58.182Z", + "endDate": "2026-01-18T02:50:05.682Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:54:51.914Z", + "endDate": "2026-01-18T02:59:54.518Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:59:54.518Z", + "endDate": "2026-01-18T02:59:54.520Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T02:59:54.521Z", + "endDate": "2026-01-18T03:04:51.126Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:04:51.127Z", + "endDate": "2026-01-18T03:04:51.129Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:04:51.13Z", + "endDate": "2026-01-18T03:09:50.180Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:09:50.18Z", + "endDate": "2026-01-18T03:14:52.760Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T03:09:50.944Z", + "endDate": "2026-01-18T03:09:55.944Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:14:52.76Z", + "endDate": "2026-01-18T03:19:51.359Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:19:51.361Z", + "endDate": "2026-01-18T03:29:52.917Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:19:51.36Z", + "endDate": "2026-01-18T03:19:51.361Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:29:52.918Z", + "endDate": "2026-01-18T03:39:57.763Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:39:57.764Z", + "endDate": "2026-01-18T03:54:50.299Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:54:50.3Z", + "endDate": "2026-01-18T03:59:50.356Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T03:59:50.356Z", + "endDate": "2026-01-18T04:19:50.451Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T04:19:50.452Z", + "endDate": "2026-01-18T04:19:50.455Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T04:19:50.455Z", + "endDate": "2026-01-18T04:39:52.552Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T04:39:52.553Z", + "endDate": "2026-01-18T05:14:50.959Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T04:59:56.591Z", + "endDate": "2026-01-18T05:00:11.591Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:04:51.39Z", + "endDate": "2026-01-18T05:05:01.890Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:09:51.547Z", + "endDate": "2026-01-18T05:09:56.547Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:14:50.959Z", + "endDate": "2026-01-18T05:19:50.473Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:19:50.473Z", + "endDate": "2026-01-18T05:19:50.475Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:19:50.476Z", + "endDate": "2026-01-18T05:24:50.452Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:24:50.452Z", + "endDate": "2026-01-18T05:29:50.149Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:24:51.067Z", + "endDate": "2026-01-18T05:24:56.067Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:29:50.15Z", + "endDate": "2026-01-18T05:34:55.170Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:34:55.171Z", + "endDate": "2026-01-18T05:34:55.173Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:34:55.173Z", + "endDate": "2026-01-18T05:39:52.353Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:39:52.354Z", + "endDate": "2026-01-18T05:49:51.568Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:39:52.939Z", + "endDate": "2026-01-18T05:39:58.939Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:44:55.762Z", + "endDate": "2026-01-18T05:45:00.762Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:49:51.569Z", + "endDate": "2026-01-18T05:54:51.934Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T05:54:51.935Z", + "endDate": "2026-01-18T07:24:50.149Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:54:52.564Z", + "endDate": "2026-01-18T05:54:57.564Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T05:59:53.74Z", + "endDate": "2026-01-18T05:59:58.740Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T06:09:50.395Z", + "endDate": "2026-01-18T06:09:55.395Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T06:24:52.475Z", + "endDate": "2026-01-18T06:24:57.475Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:09:50.691Z", + "endDate": "2026-01-18T07:09:55.691Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:14:52.401Z", + "endDate": "2026-01-18T07:14:57.401Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:19:52.358Z", + "endDate": "2026-01-18T07:19:57.358Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T07:24:50.149Z", + "endDate": "2026-01-18T07:29:50.395Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T07:29:50.395Z", + "endDate": "2026-01-18T07:29:50.398Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T07:29:50.398Z", + "endDate": "2026-01-18T07:34:50.650Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T07:34:50.651Z", + "endDate": "2026-01-18T07:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:34:51.266Z", + "endDate": "2026-01-18T07:34:56.266Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:39:50.816Z", + "endDate": "2026-01-18T07:39:55.816Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:44:51.686Z", + "endDate": "2026-01-18T07:44:56.686Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:49:52.376Z", + "endDate": "2026-01-18T07:49:57.376Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T07:59:52.079Z", + "endDate": "2026-01-18T07:59:57.079Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:00:00Z", + "endDate": "2026-01-18T08:14:50.255Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T08:09:50.586Z", + "endDate": "2026-01-18T08:09:55.586Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:14:50.255Z", + "endDate": "2026-01-18T08:19:52.970Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:19:52.971Z", + "endDate": "2026-01-18T08:19:52.973Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:19:52.973Z", + "endDate": "2026-01-18T08:24:52.658Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:24:52.659Z", + "endDate": "2026-01-18T08:39:52.032Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T08:29:50.605Z", + "endDate": "2026-01-18T08:29:58.105Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:39:52.032Z", + "endDate": "2026-01-18T08:59:53.734Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:59:53.735Z", + "endDate": "2026-01-18T08:59:53.737Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T08:59:53.737Z", + "endDate": "2026-01-18T09:04:53.179Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:04:53.183Z", + "endDate": "2026-01-18T09:09:53.058Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:04:53.18Z", + "endDate": "2026-01-18T09:04:53.183Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:09:53.059Z", + "endDate": "2026-01-18T09:09:53.062Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:09:53.062Z", + "endDate": "2026-01-18T09:14:52.865Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:14:52.866Z", + "endDate": "2026-01-18T09:14:52.868Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:14:52.869Z", + "endDate": "2026-01-18T09:29:52.225Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T09:29:52.226Z", + "endDate": "2026-01-18T10:04:52.512Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T09:34:53.484Z", + "endDate": "2026-01-18T09:34:58.484Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T09:39:51.475Z", + "endDate": "2026-01-18T09:39:56.475Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T09:49:51.086Z", + "endDate": "2026-01-18T09:49:57.086Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T09:54:51.749Z", + "endDate": "2026-01-18T09:54:59.249Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:04:52.512Z", + "endDate": "2026-01-18T10:09:50.715Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:09:50.716Z", + "endDate": "2026-01-18T10:09:50.719Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:09:50.719Z", + "endDate": "2026-01-18T10:14:51.255Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:14:51.255Z", + "endDate": "2026-01-18T10:14:51.257Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:14:51.258Z", + "endDate": "2026-01-18T10:19:52.171Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:19:52.171Z", + "endDate": "2026-01-18T10:19:52.173Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:19:52.174Z", + "endDate": "2026-01-18T10:24:50.660Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:24:50.663Z", + "endDate": "2026-01-18T10:29:51.709Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:24:50.66Z", + "endDate": "2026-01-18T10:24:50.662Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:29:51.709Z", + "endDate": "2026-01-18T10:29:51.711Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:29:51.712Z", + "endDate": "2026-01-18T10:34:51.982Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T10:34:51.982Z", + "endDate": "2026-01-18T11:09:51.465Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T10:39:53.271Z", + "endDate": "2026-01-18T10:39:58.271Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T11:09:51.466Z", + "endDate": "2026-01-18T11:14:53.097Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T11:14:53.097Z", + "endDate": "2026-01-18T12:29:52.778Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T11:14:53.743Z", + "endDate": "2026-01-18T11:14:58.743Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T11:29:51.411Z", + "endDate": "2026-01-18T11:29:56.411Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T11:34:51.068Z", + "endDate": "2026-01-18T11:34:56.068Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T11:39:53.007Z", + "endDate": "2026-01-18T11:39:58.007Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T11:49:52.325Z", + "endDate": "2026-01-18T11:49:57.325Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T11:54:52.914Z", + "endDate": "2026-01-18T11:54:57.914Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T12:29:52.778Z", + "endDate": "2026-01-18T12:34:51.961Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T12:34:51.962Z", + "endDate": "2026-01-18T12:39:52.736Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T12:39:52.736Z", + "endDate": "2026-01-18T12:44:53.271Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T12:44:53.271Z", + "endDate": "2026-01-18T12:59:52.939Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T12:44:54.021Z", + "endDate": "2026-01-18T12:44:59.021Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T12:49:51.653Z", + "endDate": "2026-01-18T12:49:57.653Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T12:59:52.94Z", + "endDate": "2026-01-18T13:04:55.545Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:04:55.545Z", + "endDate": "2026-01-18T13:04:55.547Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:04:55.548Z", + "endDate": "2026-01-18T13:09:56.370Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:09:56.371Z", + "endDate": "2026-01-18T13:09:56.373Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:09:56.373Z", + "endDate": "2026-01-18T13:14:51.047Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:14:51.048Z", + "endDate": "2026-01-18T13:14:51.050Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:14:51.051Z", + "endDate": "2026-01-18T13:19:53.284Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:19:53.284Z", + "endDate": "2026-01-18T13:19:53.286Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:19:53.287Z", + "endDate": "2026-01-18T13:39:50.850Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:39:50.851Z", + "endDate": "2026-01-18T13:39:50.852Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:39:50.852Z", + "endDate": "2026-01-18T13:49:53.750Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T13:49:53.75Z", + "endDate": "2026-01-18T14:39:52.699Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T14:09:52.46Z", + "endDate": "2026-01-18T14:09:57.460Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T14:14:52.836Z", + "endDate": "2026-01-18T14:14:57.836Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T14:19:51.817Z", + "endDate": "2026-01-18T14:19:56.817Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T14:24:51.355Z", + "endDate": "2026-01-18T14:24:56.355Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T14:29:51.445Z", + "endDate": "2026-01-18T14:29:56.445Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T14:39:52.699Z", + "endDate": "2026-01-18T14:54:53.493Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T14:54:53.494Z", + "endDate": "2026-01-18T14:54:53.497Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T14:54:53.497Z", + "endDate": "2026-01-18T15:04:51.409Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T15:04:51.41Z", + "endDate": "2026-01-18T15:24:51.028Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T15:04:52.234Z", + "endDate": "2026-01-18T15:04:57.234Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T15:09:53.978Z", + "endDate": "2026-01-18T15:09:59.978Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T15:14:52.675Z", + "endDate": "2026-01-18T15:15:00.175Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T15:19:53.352Z", + "endDate": "2026-01-18T15:19:58.352Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T15:24:51.028Z", + "endDate": "2026-01-18T15:29:51.333Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T15:29:51.333Z", + "endDate": "2026-01-18T15:34:51.245Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T15:34:51.246Z", + "endDate": "2026-01-18T15:44:51.565Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T15:44:51.565Z", + "endDate": "2026-01-18T15:59:50.783Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T15:54:51.274Z", + "endDate": "2026-01-18T15:54:56.274Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T15:59:50.783Z", + "endDate": "2026-01-18T16:04:51.700Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:04:51.701Z", + "endDate": "2026-01-18T16:04:51.704Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:04:51.705Z", + "endDate": "2026-01-18T16:09:52.127Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:09:52.127Z", + "endDate": "2026-01-18T16:29:53.362Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T16:14:54.036Z", + "endDate": "2026-01-18T16:14:59.036Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T16:19:53.302Z", + "endDate": "2026-01-18T16:19:58.302Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:29:53.362Z", + "endDate": "2026-01-18T16:34:53.421Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:34:53.422Z", + "endDate": "2026-01-18T16:34:53.425Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:34:53.426Z", + "endDate": "2026-01-18T16:39:53.062Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T16:39:53.063Z", + "endDate": "2026-01-18T17:09:52.871Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T16:49:52.498Z", + "endDate": "2026-01-18T16:49:57.498Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T16:59:52.141Z", + "endDate": "2026-01-18T16:59:59.641Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T17:09:52.871Z", + "endDate": "2026-01-18T17:14:55.431Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T17:14:55.432Z", + "endDate": "2026-01-18T17:27:36.775Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T17:14:57.098Z", + "endDate": "2026-01-18T17:15:03.098Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T17:24:55.935Z", + "endDate": "2026-01-18T17:25:03.435Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T17:27:36.775Z", + "endDate": "2026-01-18T17:29:53.011Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T17:29:53.012Z", + "endDate": "2026-01-18T17:49:54.391Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T17:49:54.391Z", + "endDate": "2026-01-18T17:49:54.392Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T17:49:54.393Z", + "endDate": "2026-01-18T18:09:51.865Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T17:54:51.59Z", + "endDate": "2026-01-18T17:54:59.090Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T17:59:52.176Z", + "endDate": "2026-01-18T17:59:58.176Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:09:51.865Z", + "endDate": "2026-01-18T18:09:51.867Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:09:51.868Z", + "endDate": "2026-01-18T18:29:52.044Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T18:14:52.26Z", + "endDate": "2026-01-18T18:14:57.260Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T18:19:53.87Z", + "endDate": "2026-01-18T18:19:59.870Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:29:52.044Z", + "endDate": "2026-01-18T18:34:51.516Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:34:51.516Z", + "endDate": "2026-01-18T18:39:52.720Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:39:52.721Z", + "endDate": "2026-01-18T18:44:53.580Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:39:52.72Z", + "endDate": "2026-01-18T18:39:52.721Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:44:53.581Z", + "endDate": "2026-01-18T18:44:53.583Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:44:53.584Z", + "endDate": "2026-01-18T18:50:00.481Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:50:00.481Z", + "endDate": "2026-01-18T18:59:51.857Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T18:59:51.857Z", + "endDate": "2026-01-18T19:09:51.704Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T19:09:51.705Z", + "endDate": "2026-01-18T19:34:50.969Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T19:09:52.213Z", + "endDate": "2026-01-18T19:09:58.213Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T19:14:51.725Z", + "endDate": "2026-01-18T19:14:57.725Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T19:19:51.297Z", + "endDate": "2026-01-18T19:19:56.297Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T19:34:50.969Z", + "endDate": "2026-01-18T19:44:52.486Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T19:44:52.487Z", + "endDate": "2026-01-18T19:54:51.029Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T19:44:53.192Z", + "endDate": "2026-01-18T19:44:58.192Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T19:54:51.029Z", + "endDate": "2026-01-18T19:59:53.283Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T19:59:53.284Z", + "endDate": "2026-01-18T21:59:59.999Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T19:59:53.897Z", + "endDate": "2026-01-18T19:59:58.897Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T20:02:45.397Z", + "endDate": "2026-01-18T20:04:40.897Z", + "value": 3.85, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-18T20:07:00.468Z", + "endDate": "2026-01-18T20:08:34.968Z", + "value": 3.15, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-18T20:20:02.71Z", + "endDate": "2026-01-18T20:20:26.710Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T20:24:59.986Z", + "endDate": "2026-01-18T20:25:19.486Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T20:30:11.275Z", + "endDate": "2026-01-18T20:30:29.275Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T20:49:55.7Z", + "endDate": "2026-01-18T20:50:16.700Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T21:29:57.532Z", + "endDate": "2026-01-18T21:30:18.532Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T21:34:54.081Z", + "endDate": "2026-01-18T21:35:15.081Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T21:39:51.708Z", + "endDate": "2026-01-18T21:40:09.708Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T21:50:00.235Z", + "endDate": "2026-01-18T21:50:13.735Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T21:54:59.546Z", + "endDate": "2026-01-18T21:55:10.046Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T22:00:00Z", + "endDate": "2026-01-18T22:19:52.489Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T22:19:52.489Z", + "endDate": "2026-01-18T22:24:52.806Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T22:24:52.807Z", + "endDate": "2026-01-18T23:09:54.287Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T22:24:53.468Z", + "endDate": "2026-01-18T22:24:58.468Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T22:29:54.144Z", + "endDate": "2026-01-18T22:29:59.144Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T22:34:57.355Z", + "endDate": "2026-01-18T22:35:02.355Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-18T22:48:06.868Z", + "endDate": "2026-01-18T22:49:54.868Z", + "value": 3.6, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T23:09:54.288Z", + "endDate": "2026-01-18T23:24:54.074Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T23:24:54.075Z", + "endDate": "2026-01-18T23:54:56.922Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T23:54:56.922Z", + "endDate": "2026-01-18T23:59:59.069Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-18T23:59:59.07Z", + "endDate": "2026-01-19T00:34:56.644Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T00:14:51.965Z", + "endDate": "2026-01-19T00:14:56.965Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T00:19:51.522Z", + "endDate": "2026-01-19T00:19:56.522Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T00:24:52.213Z", + "endDate": "2026-01-19T00:24:57.213Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T00:34:56.645Z", + "endDate": "2026-01-19T00:39:54.658Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T00:39:54.658Z", + "endDate": "2026-01-19T00:59:54.739Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T00:44:55.168Z", + "endDate": "2026-01-19T00:45:00.168Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T00:59:54.739Z", + "endDate": "2026-01-19T01:04:53.265Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T01:04:53.266Z", + "endDate": "2026-01-19T01:34:56.790Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T01:19:44.362Z", + "endDate": "2026-01-19T01:22:17.362Z", + "value": 5.1, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T01:34:56.79Z", + "endDate": "2026-01-19T01:54:53.382Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T01:54:53.383Z", + "endDate": "2026-01-19T01:54:53.387Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T01:54:53.387Z", + "endDate": "2026-01-19T01:59:57.511Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T01:59:57.512Z", + "endDate": "2026-01-19T05:09:52.440Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T03:05:03.233Z", + "endDate": "2026-01-19T03:05:08.233Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T03:09:54.507Z", + "endDate": "2026-01-19T03:09:59.507Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T04:44:53.974Z", + "endDate": "2026-01-19T04:45:02.974Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T04:49:52.349Z", + "endDate": "2026-01-19T04:50:04.349Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T04:54:52.985Z", + "endDate": "2026-01-19T04:55:18.485Z", + "value": 0.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T04:59:54.011Z", + "endDate": "2026-01-19T05:00:09.011Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:09:52.44Z", + "endDate": "2026-01-19T05:14:52.604Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:14:52.604Z", + "endDate": "2026-01-19T05:14:52.608Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:14:52.608Z", + "endDate": "2026-01-19T05:34:54.152Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:34:54.152Z", + "endDate": "2026-01-19T05:34:54.154Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:34:54.154Z", + "endDate": "2026-01-19T05:54:51.989Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:54:51.993Z", + "endDate": "2026-01-19T05:59:54.365Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:54:51.99Z", + "endDate": "2026-01-19T05:54:51.993Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:59:54.366Z", + "endDate": "2026-01-19T05:59:54.368Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T05:59:54.368Z", + "endDate": "2026-01-19T06:04:53.368Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:04:53.369Z", + "endDate": "2026-01-19T06:04:53.372Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:04:53.372Z", + "endDate": "2026-01-19T06:09:54.365Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:09:54.366Z", + "endDate": "2026-01-19T06:09:54.369Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:09:54.369Z", + "endDate": "2026-01-19T06:19:52.308Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:19:52.308Z", + "endDate": "2026-01-19T06:19:52.311Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:19:52.312Z", + "endDate": "2026-01-19T06:24:54.379Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:24:54.383Z", + "endDate": "2026-01-19T06:34:51.971Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:24:54.38Z", + "endDate": "2026-01-19T06:24:54.383Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:34:51.971Z", + "endDate": "2026-01-19T06:39:51.702Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:39:51.703Z", + "endDate": "2026-01-19T06:44:53.658Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:44:53.659Z", + "endDate": "2026-01-19T06:54:53.458Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T06:54:53.458Z", + "endDate": "2026-01-19T07:14:54.017Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T07:14:54.017Z", + "endDate": "2026-01-19T07:19:52.419Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T07:19:52.419Z", + "endDate": "2026-01-19T07:39:52.838Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T07:39:52.838Z", + "endDate": "2026-01-19T07:39:52.843Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T07:39:52.844Z", + "endDate": "2026-01-19T07:59:52.049Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T07:59:52.05Z", + "endDate": "2026-01-19T08:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T08:00:00Z", + "endDate": "2026-01-19T08:09:51.803Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T08:09:51.803Z", + "endDate": "2026-01-19T08:29:53.667Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T08:29:53.667Z", + "endDate": "2026-01-19T08:29:53.668Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T08:29:53.669Z", + "endDate": "2026-01-19T08:39:52.594Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T08:39:52.595Z", + "endDate": "2026-01-19T09:09:54.082Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T09:09:54.082Z", + "endDate": "2026-01-19T09:19:52.150Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T09:19:52.151Z", + "endDate": "2026-01-19T09:59:54.281Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T09:59:54.281Z", + "endDate": "2026-01-19T10:19:54.607Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T10:19:54.607Z", + "endDate": "2026-01-19T10:24:51.826Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T10:24:51.827Z", + "endDate": "2026-01-19T10:44:52.290Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T10:44:52.293Z", + "endDate": "2026-01-19T10:49:53.811Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T10:44:52.29Z", + "endDate": "2026-01-19T10:44:52.293Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T10:49:53.812Z", + "endDate": "2026-01-19T11:39:53.402Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T11:24:52.345Z", + "endDate": "2026-01-19T11:25:01.345Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T11:39:53.402Z", + "endDate": "2026-01-19T11:59:53.011Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T11:59:53.012Z", + "endDate": "2026-01-19T11:59:53.014Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T11:59:53.014Z", + "endDate": "2026-01-19T12:19:52.388Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T12:19:52.388Z", + "endDate": "2026-01-19T12:19:52.391Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T12:19:52.392Z", + "endDate": "2026-01-19T12:34:54.662Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T12:34:54.662Z", + "endDate": "2026-01-19T13:19:53.569Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T13:04:54.347Z", + "endDate": "2026-01-19T13:05:03.347Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T13:09:54.97Z", + "endDate": "2026-01-19T13:10:03.970Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:19:53.569Z", + "endDate": "2026-01-19T13:29:52.569Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:29:52.569Z", + "endDate": "2026-01-19T13:29:52.571Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:29:52.572Z", + "endDate": "2026-01-19T13:34:53.414Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:34:53.414Z", + "endDate": "2026-01-19T13:39:54.393Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:39:54.393Z", + "endDate": "2026-01-19T13:59:53.411Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:59:53.411Z", + "endDate": "2026-01-19T13:59:53.464Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T13:59:53.465Z", + "endDate": "2026-01-19T14:19:53.977Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T14:19:53.978Z", + "endDate": "2026-01-19T14:19:53.981Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T14:19:53.981Z", + "endDate": "2026-01-19T14:29:55.675Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T14:29:55.676Z", + "endDate": "2026-01-19T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T14:44:52.79Z", + "endDate": "2026-01-19T14:45:01.790Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T14:49:52.763Z", + "endDate": "2026-01-19T14:49:57.763Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T14:54:54.865Z", + "endDate": "2026-01-19T14:54:59.865Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:00:00Z", + "endDate": "2026-01-19T15:04:52.028Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:04:52.029Z", + "endDate": "2026-01-19T15:24:55.013Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:24:55.013Z", + "endDate": "2026-01-19T15:24:55.014Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:24:55.014Z", + "endDate": "2026-01-19T15:44:54.573Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:44:54.574Z", + "endDate": "2026-01-19T15:44:54.576Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:44:54.577Z", + "endDate": "2026-01-19T15:59:55.670Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T15:59:55.67Z", + "endDate": "2026-01-19T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T16:00:00Z", + "endDate": "2026-01-19T17:04:54.217Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T16:54:53.115Z", + "endDate": "2026-01-19T16:54:59.115Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T16:59:53.165Z", + "endDate": "2026-01-19T16:59:58.165Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:04:54.218Z", + "endDate": "2026-01-19T17:09:54.150Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:09:54.15Z", + "endDate": "2026-01-19T17:19:52.195Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:19:52.196Z", + "endDate": "2026-01-19T17:39:52.865Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:39:52.866Z", + "endDate": "2026-01-19T17:39:52.868Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:39:52.868Z", + "endDate": "2026-01-19T17:45:00.444Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:45:00.445Z", + "endDate": "2026-01-19T17:59:55.487Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T17:49:59.982Z", + "endDate": "2026-01-19T17:50:04.982Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T17:59:55.487Z", + "endDate": "2026-01-19T18:04:54.115Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T18:04:54.116Z", + "endDate": "2026-01-19T18:39:54.832Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T18:09:53.249Z", + "endDate": "2026-01-19T18:10:00.749Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T18:14:53.78Z", + "endDate": "2026-01-19T18:14:58.780Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T18:34:53.903Z", + "endDate": "2026-01-19T18:34:58.903Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T18:39:54.832Z", + "endDate": "2026-01-19T19:00:10.114Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T19:00:10.114Z", + "endDate": "2026-01-19T19:00:10.118Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T19:00:10.119Z", + "endDate": "2026-01-19T19:14:53.710Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T19:14:53.71Z", + "endDate": "2026-01-19T19:54:53.061Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T19:27:10.352Z", + "endDate": "2026-01-19T19:27:41.852Z", + "value": 1.05, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-19T19:39:53.204Z", + "endDate": "2026-01-19T19:39:58.204Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T19:44:53.231Z", + "endDate": "2026-01-19T19:44:58.231Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T19:54:53.061Z", + "endDate": "2026-01-19T20:00:07.541Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:00:07.541Z", + "endDate": "2026-01-19T20:00:07.545Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:00:07.546Z", + "endDate": "2026-01-19T20:04:54.659Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:04:54.66Z", + "endDate": "2026-01-19T20:39:55.753Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:04:55.238Z", + "endDate": "2026-01-19T20:05:00.238Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:09:52.782Z", + "endDate": "2026-01-19T20:09:57.782Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:15:07.932Z", + "endDate": "2026-01-19T20:15:12.932Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:24:58.325Z", + "endDate": "2026-01-19T20:25:03.325Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:34:53.715Z", + "endDate": "2026-01-19T20:35:01.215Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:39:55.754Z", + "endDate": "2026-01-19T20:40:01.516Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:40:01.516Z", + "endDate": "2026-01-19T20:44:58.134Z", + "value": 1, + "unit": "U/hour", + "scheduledBasalRate": 1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:44:58.135Z", + "endDate": "2026-01-19T20:44:58.138Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T20:44:58.139Z", + "endDate": "2026-01-19T21:04:55.182Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:49:59.279Z", + "endDate": "2026-01-19T20:50:04.279Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T20:59:55.988Z", + "endDate": "2026-01-19T21:00:00.988Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T21:04:55.183Z", + "endDate": "2026-01-19T21:04:55.185Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T21:04:55.185Z", + "endDate": "2026-01-19T21:19:53.110Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:04:56.321Z", + "endDate": "2026-01-19T21:05:01.321Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:14:53.298Z", + "endDate": "2026-01-19T21:14:58.298Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T21:19:53.11Z", + "endDate": "2026-01-19T21:38:32.356Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:19:53.991Z", + "endDate": "2026-01-19T21:20:01.491Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:24:54.955Z", + "endDate": "2026-01-19T21:25:12.955Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:29:54.161Z", + "endDate": "2026-01-19T21:30:06.161Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:34:54.417Z", + "endDate": "2026-01-19T21:34:59.417Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-01-19T21:38:32.357Z", + "endDate": "2026-01-19T21:41:02.960Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T21:41:02.96Z", + "endDate": "2026-01-19T21:59:54.262Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:44:54.17Z", + "endDate": "2026-01-19T21:44:59.170Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:49:54.699Z", + "endDate": "2026-01-19T21:50:00.699Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T21:54:54.435Z", + "endDate": "2026-01-19T21:54:59.435Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T21:59:54.263Z", + "endDate": "2026-01-19T22:04:56.861Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:04:56.861Z", + "endDate": "2026-01-19T22:04:56.864Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:04:56.865Z", + "endDate": "2026-01-19T22:09:54.950Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:09:54.953Z", + "endDate": "2026-01-19T22:20:04.514Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:09:54.95Z", + "endDate": "2026-01-19T22:09:54.952Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T22:14:57.908Z", + "endDate": "2026-01-19T22:15:03.908Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:20:04.515Z", + "endDate": "2026-01-19T22:20:04.517Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:20:04.517Z", + "endDate": "2026-01-19T22:35:04.826Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:35:04.827Z", + "endDate": "2026-01-19T22:35:04.829Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:35:04.83Z", + "endDate": "2026-01-19T22:39:53.551Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:39:53.551Z", + "endDate": "2026-01-19T22:49:56.580Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:49:56.581Z", + "endDate": "2026-01-19T22:54:53.491Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:54:53.491Z", + "endDate": "2026-01-19T22:54:53.492Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T22:54:53.493Z", + "endDate": "2026-01-19T23:24:53.493Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-19T23:24:53.493Z", + "endDate": "2026-01-20T00:14:54.900Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-19T23:39:55.896Z", + "endDate": "2026-01-19T23:40:00.896Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T00:09:55.678Z", + "endDate": "2026-01-20T00:10:00.678Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:14:54.901Z", + "endDate": "2026-01-20T00:19:55.401Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:19:55.401Z", + "endDate": "2026-01-20T00:19:55.404Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:19:55.405Z", + "endDate": "2026-01-20T00:24:55.014Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:24:55.014Z", + "endDate": "2026-01-20T00:24:55.016Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:24:55.016Z", + "endDate": "2026-01-20T00:30:08.414Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:30:08.415Z", + "endDate": "2026-01-20T00:34:54.960Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:34:54.96Z", + "endDate": "2026-01-20T00:49:54.155Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:49:54.156Z", + "endDate": "2026-01-20T00:49:54.158Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:49:54.159Z", + "endDate": "2026-01-20T00:59:54.899Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T00:59:54.9Z", + "endDate": "2026-01-20T01:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T00:59:55.619Z", + "endDate": "2026-01-20T01:00:03.119Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T01:00:00Z", + "endDate": "2026-01-20T01:55:07.646Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:04:53.78Z", + "endDate": "2026-01-20T01:04:58.780Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:14:59.806Z", + "endDate": "2026-01-20T01:15:04.806Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:19:58.52Z", + "endDate": "2026-01-20T01:20:03.520Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:25:05.633Z", + "endDate": "2026-01-20T01:25:10.633Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:29:57.822Z", + "endDate": "2026-01-20T01:30:02.822Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:34:43.291Z", + "endDate": "2026-01-20T01:36:59.791Z", + "value": 4.55, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:39:57.743Z", + "endDate": "2026-01-20T01:40:05.243Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T01:44:53.918Z", + "endDate": "2026-01-20T01:44:58.918Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T01:55:07.647Z", + "endDate": "2026-01-20T02:04:55.105Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:04:55.105Z", + "endDate": "2026-01-20T02:04:55.160Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:04:55.161Z", + "endDate": "2026-01-20T02:09:55.573Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:09:55.573Z", + "endDate": "2026-01-20T02:09:55.576Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:09:55.577Z", + "endDate": "2026-01-20T02:19:53.649Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:19:53.649Z", + "endDate": "2026-01-20T02:19:53.650Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:19:53.651Z", + "endDate": "2026-01-20T02:24:53.982Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:24:53.982Z", + "endDate": "2026-01-20T02:24:53.986Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:24:53.987Z", + "endDate": "2026-01-20T02:29:53.488Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T02:29:53.488Z", + "endDate": "2026-01-20T03:04:53.721Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T02:54:57.711Z", + "endDate": "2026-01-20T02:55:02.711Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T03:04:53.721Z", + "endDate": "2026-01-20T03:10:03.983Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T03:10:03.984Z", + "endDate": "2026-01-20T03:24:52.907Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:10:04.643Z", + "endDate": "2026-01-20T03:10:09.643Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:14:54.973Z", + "endDate": "2026-01-20T03:14:59.973Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T03:24:52.908Z", + "endDate": "2026-01-20T03:29:53.704Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T03:29:53.704Z", + "endDate": "2026-01-20T04:19:55.731Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:29:54.32Z", + "endDate": "2026-01-20T03:29:59.320Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:34:56.466Z", + "endDate": "2026-01-20T03:35:03.966Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:39:54.399Z", + "endDate": "2026-01-20T03:39:59.399Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:45:13.032Z", + "endDate": "2026-01-20T03:45:18.032Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:49:54.06Z", + "endDate": "2026-01-20T03:49:59.060Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:54:55.5Z", + "endDate": "2026-01-20T03:55:01.500Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T03:59:55.232Z", + "endDate": "2026-01-20T04:00:00.232Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T04:05:03.452Z", + "endDate": "2026-01-20T04:05:09.452Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T04:09:59.347Z", + "endDate": "2026-01-20T04:10:06.847Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T04:14:54.634Z", + "endDate": "2026-01-20T04:14:59.634Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:19:55.732Z", + "endDate": "2026-01-20T04:24:55.324Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:24:55.325Z", + "endDate": "2026-01-20T04:24:55.327Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:24:55.328Z", + "endDate": "2026-01-20T04:29:56.256Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:29:56.256Z", + "endDate": "2026-01-20T04:39:55.557Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T04:34:57.093Z", + "endDate": "2026-01-20T04:35:02.093Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:39:55.557Z", + "endDate": "2026-01-20T04:44:56.687Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:44:56.688Z", + "endDate": "2026-01-20T04:44:56.690Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:44:56.691Z", + "endDate": "2026-01-20T04:49:55.503Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:49:55.503Z", + "endDate": "2026-01-20T04:59:53.930Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T04:59:53.93Z", + "endDate": "2026-01-20T05:05:01.385Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:05:01.386Z", + "endDate": "2026-01-20T05:30:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T05:05:02.031Z", + "endDate": "2026-01-20T05:05:07.031Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T05:09:58.934Z", + "endDate": "2026-01-20T05:10:03.934Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:30:00Z", + "endDate": "2026-01-20T05:39:55.688Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:39:55.688Z", + "endDate": "2026-01-20T05:44:55.446Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:44:55.447Z", + "endDate": "2026-01-20T05:44:55.449Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:44:55.449Z", + "endDate": "2026-01-20T05:49:55.471Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:49:55.471Z", + "endDate": "2026-01-20T05:49:55.473Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:49:55.473Z", + "endDate": "2026-01-20T05:54:56.213Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:54:56.214Z", + "endDate": "2026-01-20T05:54:56.216Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:54:56.217Z", + "endDate": "2026-01-20T05:59:54.163Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:59:54.163Z", + "endDate": "2026-01-20T05:59:54.164Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T05:59:54.164Z", + "endDate": "2026-01-20T06:09:53.460Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T06:09:53.461Z", + "endDate": "2026-01-20T06:19:54.052Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T06:09:54.075Z", + "endDate": "2026-01-20T06:09:59.075Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T06:19:54.052Z", + "endDate": "2026-01-20T06:39:55.628Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T06:39:55.629Z", + "endDate": "2026-01-20T06:39:55.682Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T06:39:55.683Z", + "endDate": "2026-01-20T06:59:54.367Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T06:59:54.367Z", + "endDate": "2026-01-20T06:59:54.369Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T06:59:54.369Z", + "endDate": "2026-01-20T07:19:55.022Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T07:19:55.023Z", + "endDate": "2026-01-20T07:24:53.342Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T07:24:53.342Z", + "endDate": "2026-01-20T07:44:56.238Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T07:44:56.238Z", + "endDate": "2026-01-20T07:44:56.239Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T07:44:56.239Z", + "endDate": "2026-01-20T08:04:54.714Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T08:04:54.714Z", + "endDate": "2026-01-20T08:04:54.716Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T08:04:54.717Z", + "endDate": "2026-01-20T08:24:53.713Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T08:24:53.714Z", + "endDate": "2026-01-20T08:24:53.716Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T08:24:53.716Z", + "endDate": "2026-01-20T08:44:53.874Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T08:44:53.875Z", + "endDate": "2026-01-20T08:44:53.875Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T08:44:53.876Z", + "endDate": "2026-01-20T09:04:55.368Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T09:04:55.368Z", + "endDate": "2026-01-20T09:04:55.370Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T09:04:55.371Z", + "endDate": "2026-01-20T09:14:54.268Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T09:14:54.268Z", + "endDate": "2026-01-20T09:24:53.628Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T09:24:53.629Z", + "endDate": "2026-01-20T09:44:55.192Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T09:44:55.192Z", + "endDate": "2026-01-20T09:44:55.195Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T09:44:55.196Z", + "endDate": "2026-01-20T10:04:53.872Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:04:53.872Z", + "endDate": "2026-01-20T10:04:53.875Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:04:53.875Z", + "endDate": "2026-01-20T10:19:54.843Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:19:54.844Z", + "endDate": "2026-01-20T10:24:53.643Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:24:53.643Z", + "endDate": "2026-01-20T10:44:54.239Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:44:54.239Z", + "endDate": "2026-01-20T10:44:54.241Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:44:54.242Z", + "endDate": "2026-01-20T10:59:55.657Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T10:59:55.658Z", + "endDate": "2026-01-20T11:34:55.413Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T11:34:55.413Z", + "endDate": "2026-01-20T11:44:58.198Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T11:44:58.199Z", + "endDate": "2026-01-20T11:54:53.790Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T11:54:53.79Z", + "endDate": "2026-01-20T11:59:56.607Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T11:59:56.608Z", + "endDate": "2026-01-20T12:09:56.164Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T12:09:56.164Z", + "endDate": "2026-01-20T12:19:55.572Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T12:19:55.573Z", + "endDate": "2026-01-20T12:24:55.427Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T12:24:55.428Z", + "endDate": "2026-01-20T12:44:53.793Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T12:44:53.794Z", + "endDate": "2026-01-20T12:44:53.795Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T12:44:53.795Z", + "endDate": "2026-01-20T12:49:55.799Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T12:49:55.8Z", + "endDate": "2026-01-20T13:44:54.218Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T13:44:54.219Z", + "endDate": "2026-01-20T14:04:55.953Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T14:04:55.953Z", + "endDate": "2026-01-20T14:04:55.957Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T14:04:55.957Z", + "endDate": "2026-01-20T14:14:58.551Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T14:14:58.552Z", + "endDate": "2026-01-20T14:50:04.621Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T14:24:54.144Z", + "endDate": "2026-01-20T14:25:06.144Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T14:29:59.558Z", + "endDate": "2026-01-20T14:30:05.558Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T14:34:58.165Z", + "endDate": "2026-01-20T14:35:03.165Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T14:39:54.175Z", + "endDate": "2026-01-20T14:39:59.175Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T14:50:04.621Z", + "endDate": "2026-01-20T15:00:05.636Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:00:05.637Z", + "endDate": "2026-01-20T15:00:05.639Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:00:05.639Z", + "endDate": "2026-01-20T15:04:54.600Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:04:54.602Z", + "endDate": "2026-01-20T15:09:55.562Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:04:54.6Z", + "endDate": "2026-01-20T15:04:54.601Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:09:55.562Z", + "endDate": "2026-01-20T15:09:55.563Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:09:55.563Z", + "endDate": "2026-01-20T15:14:56.117Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:14:56.117Z", + "endDate": "2026-01-20T15:14:56.119Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:14:56.12Z", + "endDate": "2026-01-20T15:19:54.140Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:19:54.141Z", + "endDate": "2026-01-20T15:19:54.142Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:19:54.143Z", + "endDate": "2026-01-20T15:24:56.425Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:24:56.426Z", + "endDate": "2026-01-20T15:29:53.952Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:29:53.952Z", + "endDate": "2026-01-20T15:34:55.146Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:34:55.146Z", + "endDate": "2026-01-20T15:39:53.211Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:39:53.211Z", + "endDate": "2026-01-20T15:39:54.489Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:39:54.49Z", + "endDate": "2026-01-20T15:44:54.571Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T15:44:54.571Z", + "endDate": "2026-01-20T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T15:44:55.218Z", + "endDate": "2026-01-20T15:45:00.218Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T15:54:53.974Z", + "endDate": "2026-01-20T15:54:58.974Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T15:59:54.735Z", + "endDate": "2026-01-20T16:00:03.735Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:00:00Z", + "endDate": "2026-01-20T16:14:55.152Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T16:04:56.887Z", + "endDate": "2026-01-20T16:05:04.387Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T16:09:57.179Z", + "endDate": "2026-01-20T16:10:02.179Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:14:55.152Z", + "endDate": "2026-01-20T16:19:54.289Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:19:54.289Z", + "endDate": "2026-01-20T16:19:54.343Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:19:54.344Z", + "endDate": "2026-01-20T16:24:56.230Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:24:56.232Z", + "endDate": "2026-01-20T16:29:54.115Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:24:56.23Z", + "endDate": "2026-01-20T16:24:56.232Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:29:54.116Z", + "endDate": "2026-01-20T16:29:54.118Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:29:54.118Z", + "endDate": "2026-01-20T16:34:55.409Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:34:55.413Z", + "endDate": "2026-01-20T16:44:59.299Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:34:55.41Z", + "endDate": "2026-01-20T16:34:55.413Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:44:59.299Z", + "endDate": "2026-01-20T16:44:59.302Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:44:59.303Z", + "endDate": "2026-01-20T16:49:55.609Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T16:49:55.61Z", + "endDate": "2026-01-20T17:49:59.664Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T16:59:54.073Z", + "endDate": "2026-01-20T16:59:59.073Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T17:04:55.081Z", + "endDate": "2026-01-20T17:05:00.081Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T17:09:56.954Z", + "endDate": "2026-01-20T17:10:01.954Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T17:14:54.032Z", + "endDate": "2026-01-20T17:14:59.032Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T17:19:59.387Z", + "endDate": "2026-01-20T17:20:05.387Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T17:24:56.391Z", + "endDate": "2026-01-20T17:25:01.391Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T17:29:53.994Z", + "endDate": "2026-01-20T17:29:58.994Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T17:49:59.664Z", + "endDate": "2026-01-20T17:54:54.142Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T17:54:54.143Z", + "endDate": "2026-01-20T17:54:54.151Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T17:54:54.152Z", + "endDate": "2026-01-20T17:59:55.723Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T17:59:55.723Z", + "endDate": "2026-01-20T17:59:55.725Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T17:59:55.726Z", + "endDate": "2026-01-20T18:09:55.553Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T18:09:55.553Z", + "endDate": "2026-01-20T18:09:55.555Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T18:09:55.555Z", + "endDate": "2026-01-20T18:14:54.882Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T18:14:54.883Z", + "endDate": "2026-01-20T18:14:54.885Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T18:14:54.886Z", + "endDate": "2026-01-20T18:19:54.531Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T18:19:54.531Z", + "endDate": "2026-01-20T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T19:00:00Z", + "endDate": "2026-01-20T19:14:53.658Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T19:14:53.658Z", + "endDate": "2026-01-20T19:19:54.335Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T19:19:54.336Z", + "endDate": "2026-01-20T19:29:54.046Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T19:29:54.046Z", + "endDate": "2026-01-20T19:34:54.748Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T19:34:54.748Z", + "endDate": "2026-01-20T20:34:55.166Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T19:35:02.234Z", + "endDate": "2026-01-20T19:38:17.234Z", + "value": 6.5, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-20T20:04:56.734Z", + "endDate": "2026-01-20T20:05:04.234Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T20:09:55.119Z", + "endDate": "2026-01-20T20:10:02.619Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T20:14:55.86Z", + "endDate": "2026-01-20T20:15:01.860Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T20:19:54.812Z", + "endDate": "2026-01-20T20:19:59.812Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T20:24:56.241Z", + "endDate": "2026-01-20T20:25:01.241Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:34:55.167Z", + "endDate": "2026-01-20T20:39:54.469Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:39:54.469Z", + "endDate": "2026-01-20T20:39:54.472Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:39:54.473Z", + "endDate": "2026-01-20T20:44:54.285Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:44:54.286Z", + "endDate": "2026-01-20T20:44:54.287Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:44:54.287Z", + "endDate": "2026-01-20T20:49:55.896Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:49:55.897Z", + "endDate": "2026-01-20T20:49:55.898Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:49:55.898Z", + "endDate": "2026-01-20T20:54:54.986Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:54:54.987Z", + "endDate": "2026-01-20T20:54:54.989Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:54:54.989Z", + "endDate": "2026-01-20T20:59:54.853Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T20:59:54.853Z", + "endDate": "2026-01-20T21:09:54.911Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T20:59:55.38Z", + "endDate": "2026-01-20T21:00:00.380Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T21:09:54.912Z", + "endDate": "2026-01-20T21:14:55.495Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T21:14:55.495Z", + "endDate": "2026-01-20T21:59:59.999Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:19:54.208Z", + "endDate": "2026-01-20T21:20:00.208Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:24:54.577Z", + "endDate": "2026-01-20T21:25:02.077Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:29:55.089Z", + "endDate": "2026-01-20T21:30:00.089Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:34:54.913Z", + "endDate": "2026-01-20T21:35:00.913Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:39:55.547Z", + "endDate": "2026-01-20T21:40:07.547Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:44:54.681Z", + "endDate": "2026-01-20T21:45:06.681Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:49:56.153Z", + "endDate": "2026-01-20T21:50:02.153Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:54:55.947Z", + "endDate": "2026-01-20T21:55:03.447Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T21:59:56.251Z", + "endDate": "2026-01-20T22:00:05.251Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:00:00Z", + "endDate": "2026-01-20T22:24:56.174Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:04:56.897Z", + "endDate": "2026-01-20T22:05:04.397Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:10:00.098Z", + "endDate": "2026-01-20T22:10:05.098Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:14:55.77Z", + "endDate": "2026-01-20T22:15:03.270Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:19:55.074Z", + "endDate": "2026-01-20T22:20:00.074Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:24:56.174Z", + "endDate": "2026-01-20T22:29:57.318Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:29:57.319Z", + "endDate": "2026-01-20T22:29:57.321Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:29:57.321Z", + "endDate": "2026-01-20T22:34:55.300Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:34:55.301Z", + "endDate": "2026-01-20T22:50:00.223Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:34:55.944Z", + "endDate": "2026-01-20T22:35:00.944Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:39:54.792Z", + "endDate": "2026-01-20T22:39:59.792Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:50:00.223Z", + "endDate": "2026-01-20T22:54:59.679Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T22:54:59.68Z", + "endDate": "2026-01-20T23:39:55.559Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:55:00.58Z", + "endDate": "2026-01-20T22:55:05.580Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T22:59:54.988Z", + "endDate": "2026-01-20T23:00:00.988Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T23:04:56.297Z", + "endDate": "2026-01-20T23:05:01.297Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T23:09:55.221Z", + "endDate": "2026-01-20T23:10:00.221Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T23:24:56.387Z", + "endDate": "2026-01-20T23:25:01.387Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T23:29:54.591Z", + "endDate": "2026-01-20T23:30:02.091Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-20T23:34:58.569Z", + "endDate": "2026-01-20T23:35:03.569Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T23:39:55.56Z", + "endDate": "2026-01-20T23:45:02.008Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T23:45:02.008Z", + "endDate": "2026-01-20T23:50:06.219Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-20T23:50:06.22Z", + "endDate": "2026-01-21T00:09:58.937Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:09:58.937Z", + "endDate": "2026-01-21T00:09:58.939Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:09:58.94Z", + "endDate": "2026-01-21T00:15:13.788Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:15:13.789Z", + "endDate": "2026-01-21T00:15:13.789Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:15:13.79Z", + "endDate": "2026-01-21T00:40:57.714Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:40:57.714Z", + "endDate": "2026-01-21T00:55:04.429Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T00:51:58.891Z", + "endDate": "2026-01-21T00:53:42.391Z", + "value": 3.45, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:55:04.43Z", + "endDate": "2026-01-21T00:59:56.079Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T00:59:56.079Z", + "endDate": "2026-01-21T00:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:00:00Z", + "endDate": "2026-01-21T01:04:54.829Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:04:54.83Z", + "endDate": "2026-01-21T01:09:56.219Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:09:56.219Z", + "endDate": "2026-01-21T01:44:55.891Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T01:14:56.901Z", + "endDate": "2026-01-21T01:15:01.901Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T01:19:55.272Z", + "endDate": "2026-01-21T01:20:00.272Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T01:24:54.872Z", + "endDate": "2026-01-21T01:24:59.872Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T01:40:19.024Z", + "endDate": "2026-01-21T01:41:25.024Z", + "value": 2.2, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:44:55.891Z", + "endDate": "2026-01-21T01:49:54.961Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:49:54.962Z", + "endDate": "2026-01-21T01:49:54.966Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:49:54.966Z", + "endDate": "2026-01-21T01:54:54.568Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T01:52:54.99Z", + "endDate": "2026-01-21T01:55:33.990Z", + "value": 5.3, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T01:54:54.569Z", + "endDate": "2026-01-21T02:54:55.980Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T02:05:21.488Z", + "endDate": "2026-01-21T02:07:36.488Z", + "value": 4.5, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-21T02:34:57.203Z", + "endDate": "2026-01-21T02:35:02.203Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T02:39:57.415Z", + "endDate": "2026-01-21T02:40:02.415Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T02:44:59.504Z", + "endDate": "2026-01-21T02:45:04.504Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T02:54:55.981Z", + "endDate": "2026-01-21T03:04:58.834Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T03:04:58.834Z", + "endDate": "2026-01-21T03:24:55.909Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T03:24:55.91Z", + "endDate": "2026-01-21T03:30:00.220Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T03:30:00.221Z", + "endDate": "2026-01-21T04:04:57.579Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T03:30:00.931Z", + "endDate": "2026-01-21T03:30:05.931Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T03:34:55.936Z", + "endDate": "2026-01-21T03:35:00.936Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T03:39:58.636Z", + "endDate": "2026-01-21T03:40:03.636Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T03:44:57.004Z", + "endDate": "2026-01-21T03:45:02.004Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T03:49:59.737Z", + "endDate": "2026-01-21T03:50:04.737Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T03:54:57.399Z", + "endDate": "2026-01-21T03:55:02.399Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:04:57.579Z", + "endDate": "2026-01-21T04:09:57.645Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:09:57.646Z", + "endDate": "2026-01-21T04:09:57.650Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:09:57.65Z", + "endDate": "2026-01-21T04:15:01.981Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:15:01.981Z", + "endDate": "2026-01-21T04:15:01.982Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:15:01.983Z", + "endDate": "2026-01-21T04:19:55.174Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:19:55.174Z", + "endDate": "2026-01-21T04:19:55.175Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:19:55.175Z", + "endDate": "2026-01-21T04:24:55.235Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:24:55.236Z", + "endDate": "2026-01-21T04:24:55.238Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:24:55.239Z", + "endDate": "2026-01-21T04:30:07.582Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:30:07.582Z", + "endDate": "2026-01-21T04:30:07.584Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:30:07.585Z", + "endDate": "2026-01-21T04:34:56.575Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T04:34:56.575Z", + "endDate": "2026-01-21T05:29:54.330Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T04:44:59.193Z", + "endDate": "2026-01-21T04:45:04.193Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T04:49:57.888Z", + "endDate": "2026-01-21T04:50:02.888Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T04:54:57.454Z", + "endDate": "2026-01-21T04:55:03.454Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T04:59:55.521Z", + "endDate": "2026-01-21T05:00:01.521Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:05:05.182Z", + "endDate": "2026-01-21T05:05:11.182Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:09:57.158Z", + "endDate": "2026-01-21T05:10:02.158Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:14:58.755Z", + "endDate": "2026-01-21T05:15:03.755Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:19:59.199Z", + "endDate": "2026-01-21T05:20:04.199Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:24:55.45Z", + "endDate": "2026-01-21T05:25:00.450Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T05:29:54.331Z", + "endDate": "2026-01-21T05:34:57.559Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T05:34:57.559Z", + "endDate": "2026-01-21T05:34:57.612Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T05:34:57.613Z", + "endDate": "2026-01-21T05:39:54.949Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T05:39:54.949Z", + "endDate": "2026-01-21T06:14:55.207Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:39:55.663Z", + "endDate": "2026-01-21T05:40:00.663Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:44:56.209Z", + "endDate": "2026-01-21T05:45:03.709Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:49:54.935Z", + "endDate": "2026-01-21T05:49:59.935Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:54:56.891Z", + "endDate": "2026-01-21T05:55:01.891Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T05:59:54.988Z", + "endDate": "2026-01-21T05:59:59.988Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T06:04:58.054Z", + "endDate": "2026-01-21T06:05:03.054Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T06:09:54.937Z", + "endDate": "2026-01-21T06:09:59.937Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:14:55.208Z", + "endDate": "2026-01-21T06:19:56.521Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:19:56.521Z", + "endDate": "2026-01-21T06:34:56.622Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T06:24:55.685Z", + "endDate": "2026-01-21T06:25:01.685Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T06:29:55.869Z", + "endDate": "2026-01-21T06:30:00.869Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:34:56.623Z", + "endDate": "2026-01-21T06:39:55.265Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:39:55.266Z", + "endDate": "2026-01-21T06:44:57.054Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:44:57.055Z", + "endDate": "2026-01-21T06:49:56.829Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:49:56.829Z", + "endDate": "2026-01-21T06:49:56.833Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:49:56.834Z", + "endDate": "2026-01-21T06:54:56.428Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T06:54:56.429Z", + "endDate": "2026-01-21T07:14:55.599Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T06:54:57.194Z", + "endDate": "2026-01-21T06:55:02.194Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T07:04:55.253Z", + "endDate": "2026-01-21T07:05:00.253Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T07:09:55.122Z", + "endDate": "2026-01-21T07:10:00.122Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:14:55.599Z", + "endDate": "2026-01-21T07:19:54.932Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:19:54.933Z", + "endDate": "2026-01-21T07:24:56.903Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T07:19:55.699Z", + "endDate": "2026-01-21T07:20:00.699Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:24:56.904Z", + "endDate": "2026-01-21T07:34:57.613Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:34:57.613Z", + "endDate": "2026-01-21T07:49:56.112Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T07:34:58.347Z", + "endDate": "2026-01-21T07:35:03.347Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T07:39:55.155Z", + "endDate": "2026-01-21T07:40:00.155Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:49:56.112Z", + "endDate": "2026-01-21T07:54:56.409Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:54:56.409Z", + "endDate": "2026-01-21T07:54:56.412Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:54:56.412Z", + "endDate": "2026-01-21T07:59:57.343Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T07:59:57.344Z", + "endDate": "2026-01-21T08:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T08:00:00Z", + "endDate": "2026-01-21T08:04:55.172Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T08:04:55.172Z", + "endDate": "2026-01-21T08:14:56.139Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T08:14:56.14Z", + "endDate": "2026-01-21T08:19:57.850Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T08:19:57.85Z", + "endDate": "2026-01-21T08:34:55.121Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T08:34:55.122Z", + "endDate": "2026-01-21T08:54:55.767Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T08:54:55.767Z", + "endDate": "2026-01-21T09:14:56.378Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T09:14:56.378Z", + "endDate": "2026-01-21T09:14:56.380Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T09:14:56.381Z", + "endDate": "2026-01-21T09:29:57.008Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T09:29:57.008Z", + "endDate": "2026-01-21T09:39:56.454Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T09:39:56.455Z", + "endDate": "2026-01-21T09:49:55.130Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T09:49:55.13Z", + "endDate": "2026-01-21T09:54:56.895Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T09:54:56.896Z", + "endDate": "2026-01-21T10:14:55.437Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T10:14:55.438Z", + "endDate": "2026-01-21T10:14:55.440Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T10:14:55.44Z", + "endDate": "2026-01-21T10:34:55.316Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T10:34:55.317Z", + "endDate": "2026-01-21T10:34:55.319Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T10:34:55.32Z", + "endDate": "2026-01-21T10:54:57.608Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T10:54:57.609Z", + "endDate": "2026-01-21T10:54:57.613Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T10:54:57.613Z", + "endDate": "2026-01-21T11:14:55.461Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T11:14:55.462Z", + "endDate": "2026-01-21T11:14:55.464Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T11:14:55.464Z", + "endDate": "2026-01-21T11:34:55.085Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T11:34:55.085Z", + "endDate": "2026-01-21T11:34:55.087Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T11:34:55.088Z", + "endDate": "2026-01-21T11:54:55.382Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T11:54:55.383Z", + "endDate": "2026-01-21T11:54:55.386Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T11:54:55.386Z", + "endDate": "2026-01-21T12:04:55.279Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T12:04:55.28Z", + "endDate": "2026-01-21T12:29:56.997Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T12:29:56.998Z", + "endDate": "2026-01-21T12:34:55.801Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T12:34:55.801Z", + "endDate": "2026-01-21T12:39:54.787Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T12:39:54.788Z", + "endDate": "2026-01-21T12:49:57.653Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T12:49:57.654Z", + "endDate": "2026-01-21T13:09:55.599Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T13:09:55.599Z", + "endDate": "2026-01-21T13:19:57.189Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T13:19:57.19Z", + "endDate": "2026-01-21T13:29:56.944Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T13:29:56.944Z", + "endDate": "2026-01-21T13:34:57.213Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T13:34:57.214Z", + "endDate": "2026-01-21T14:29:55.034Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T14:09:57.585Z", + "endDate": "2026-01-21T14:10:06.585Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T14:14:56.433Z", + "endDate": "2026-01-21T14:15:02.433Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T14:19:56.962Z", + "endDate": "2026-01-21T14:20:01.962Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:29:55.034Z", + "endDate": "2026-01-21T14:34:55.352Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:34:55.352Z", + "endDate": "2026-01-21T14:34:55.379Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:34:55.38Z", + "endDate": "2026-01-21T14:39:55.445Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:39:55.446Z", + "endDate": "2026-01-21T14:39:55.448Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:39:55.448Z", + "endDate": "2026-01-21T14:44:57.051Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:44:57.052Z", + "endDate": "2026-01-21T14:59:57.485Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T14:44:57.668Z", + "endDate": "2026-01-21T14:45:02.668Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T14:49:57.326Z", + "endDate": "2026-01-21T14:50:02.326Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T14:59:57.485Z", + "endDate": "2026-01-21T15:04:55.607Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:04:55.607Z", + "endDate": "2026-01-21T15:04:55.609Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:04:55.61Z", + "endDate": "2026-01-21T15:09:57.485Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:09:57.485Z", + "endDate": "2026-01-21T15:19:57.187Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:09:58.101Z", + "endDate": "2026-01-21T15:10:03.101Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:19:57.188Z", + "endDate": "2026-01-21T15:24:56.051Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:24:56.052Z", + "endDate": "2026-01-21T15:24:56.053Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:24:56.054Z", + "endDate": "2026-01-21T15:29:57.165Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T15:29:57.165Z", + "endDate": "2026-01-21T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:29:57.811Z", + "endDate": "2026-01-21T15:30:02.811Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:35:00.138Z", + "endDate": "2026-01-21T15:35:05.138Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:39:57.502Z", + "endDate": "2026-01-21T15:40:02.502Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:44:56.199Z", + "endDate": "2026-01-21T15:45:01.199Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:49:59.442Z", + "endDate": "2026-01-21T15:50:04.442Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:55:01.066Z", + "endDate": "2026-01-21T15:55:06.066Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T15:59:58.01Z", + "endDate": "2026-01-21T16:00:03.010Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:00:00Z", + "endDate": "2026-01-21T16:19:59.974Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:19:59.975Z", + "endDate": "2026-01-21T16:24:55.342Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:24:55.343Z", + "endDate": "2026-01-21T16:24:55.344Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:24:55.344Z", + "endDate": "2026-01-21T16:29:55.730Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:29:55.73Z", + "endDate": "2026-01-21T16:44:55.377Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T16:29:56.346Z", + "endDate": "2026-01-21T16:30:01.346Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:44:55.378Z", + "endDate": "2026-01-21T16:49:59.224Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:49:59.224Z", + "endDate": "2026-01-21T16:49:59.227Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:49:59.228Z", + "endDate": "2026-01-21T16:54:55.943Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T16:54:55.943Z", + "endDate": "2026-01-21T17:05:08.668Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T16:54:56.812Z", + "endDate": "2026-01-21T16:55:02.812Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T16:59:56.5Z", + "endDate": "2026-01-21T17:00:04.000Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T17:05:08.669Z", + "endDate": "2026-01-21T17:25:10.597Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T17:25:10.597Z", + "endDate": "2026-01-21T17:25:10.599Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T17:25:10.6Z", + "endDate": "2026-01-21T17:39:57.067Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T17:39:57.067Z", + "endDate": "2026-01-21T18:09:57.108Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T17:39:57.818Z", + "endDate": "2026-01-21T17:40:05.318Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T17:44:58.077Z", + "endDate": "2026-01-21T17:45:03.077Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:09:57.108Z", + "endDate": "2026-01-21T18:14:58.299Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:14:58.302Z", + "endDate": "2026-01-21T18:19:55.620Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:14:58.3Z", + "endDate": "2026-01-21T18:14:58.302Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:19:55.621Z", + "endDate": "2026-01-21T18:19:55.622Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:19:55.623Z", + "endDate": "2026-01-21T18:24:56.344Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:24:56.344Z", + "endDate": "2026-01-21T18:24:56.345Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:24:56.345Z", + "endDate": "2026-01-21T18:29:57.637Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:29:57.638Z", + "endDate": "2026-01-21T18:29:57.640Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:29:57.64Z", + "endDate": "2026-01-21T18:34:58.421Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:34:58.422Z", + "endDate": "2026-01-21T18:54:58.267Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:54:58.268Z", + "endDate": "2026-01-21T18:59:58.004Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T18:59:58.004Z", + "endDate": "2026-01-21T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T19:00:00Z", + "endDate": "2026-01-21T19:54:55.529Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T19:04:57.303Z", + "endDate": "2026-01-21T19:05:02.303Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T19:09:56.184Z", + "endDate": "2026-01-21T19:10:01.184Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T19:24:56.332Z", + "endDate": "2026-01-21T19:25:01.332Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T19:34:58.23Z", + "endDate": "2026-01-21T19:35:03.230Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T19:39:58.369Z", + "endDate": "2026-01-21T19:40:03.369Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T19:54:55.53Z", + "endDate": "2026-01-21T19:59:56.390Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T19:59:56.393Z", + "endDate": "2026-01-21T20:04:55.767Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T19:59:56.39Z", + "endDate": "2026-01-21T19:59:56.392Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:04:55.768Z", + "endDate": "2026-01-21T20:04:55.770Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:04:55.77Z", + "endDate": "2026-01-21T20:09:56.099Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:09:56.102Z", + "endDate": "2026-01-21T20:29:56.010Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:09:56.1Z", + "endDate": "2026-01-21T20:09:56.102Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:29:56.011Z", + "endDate": "2026-01-21T20:29:56.013Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:29:56.013Z", + "endDate": "2026-01-21T20:34:55.878Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T20:34:55.878Z", + "endDate": "2026-01-21T21:00:00.031Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T21:00:00.031Z", + "endDate": "2026-01-21T21:04:56.082Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T21:04:56.083Z", + "endDate": "2026-01-21T21:34:55.622Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T21:34:55.622Z", + "endDate": "2026-01-21T21:54:57.261Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T21:54:57.261Z", + "endDate": "2026-01-21T21:54:57.314Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T21:54:57.315Z", + "endDate": "2026-01-21T22:09:57.843Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T22:09:57.844Z", + "endDate": "2026-01-21T22:30:01.763Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T22:30:01.763Z", + "endDate": "2026-01-21T22:39:56.089Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T22:37:09.121Z", + "endDate": "2026-01-21T22:37:25.621Z", + "value": 0.55, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-21T22:39:56.09Z", + "endDate": "2026-01-22T00:54:55.500Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T23:09:58.681Z", + "endDate": "2026-01-21T23:10:07.681Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T23:14:57.604Z", + "endDate": "2026-01-21T23:15:05.104Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T23:19:59.278Z", + "endDate": "2026-01-21T23:20:04.278Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-21T23:39:56.376Z", + "endDate": "2026-01-21T23:40:01.376Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T00:05:01.384Z", + "endDate": "2026-01-22T00:05:06.384Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T00:19:55.901Z", + "endDate": "2026-01-22T00:20:01.901Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T00:24:56.418Z", + "endDate": "2026-01-22T00:25:02.418Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T00:29:57.783Z", + "endDate": "2026-01-22T00:30:02.783Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T00:44:58.17Z", + "endDate": "2026-01-22T00:45:03.170Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T00:49:56.226Z", + "endDate": "2026-01-22T00:50:01.226Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T00:54:55.5Z", + "endDate": "2026-01-22T00:59:56.131Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T00:59:56.132Z", + "endDate": "2026-01-22T00:59:56.134Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T00:59:56.135Z", + "endDate": "2026-01-22T01:04:57.865Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T01:04:57.865Z", + "endDate": "2026-01-22T01:24:55.900Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:14:28.499Z", + "endDate": "2026-01-22T01:15:37.499Z", + "value": 2.3, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:19:58.492Z", + "endDate": "2026-01-22T01:20:03.492Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T01:24:55.901Z", + "endDate": "2026-01-22T01:29:56.580Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T01:29:56.581Z", + "endDate": "2026-01-22T02:04:59.605Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:29:57.197Z", + "endDate": "2026-01-22T01:30:02.197Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:35:00.79Z", + "endDate": "2026-01-22T01:35:05.790Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:43:55.303Z", + "endDate": "2026-01-22T01:49:31.303Z", + "value": 11.2, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:55:01.534Z", + "endDate": "2026-01-22T01:55:06.534Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T01:59:56.792Z", + "endDate": "2026-01-22T02:00:01.792Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:04:59.605Z", + "endDate": "2026-01-22T02:10:02.475Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:10:02.476Z", + "endDate": "2026-01-22T02:10:02.478Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:10:02.478Z", + "endDate": "2026-01-22T02:19:58.542Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:19:58.543Z", + "endDate": "2026-01-22T02:19:58.545Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:19:58.546Z", + "endDate": "2026-01-22T02:24:56.096Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:24:56.096Z", + "endDate": "2026-01-22T02:24:56.098Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:24:56.099Z", + "endDate": "2026-01-22T02:29:56.155Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:29:56.156Z", + "endDate": "2026-01-22T02:59:57.894Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T02:44:58.297Z", + "endDate": "2026-01-22T02:45:03.297Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T02:49:58.52Z", + "endDate": "2026-01-22T02:50:03.520Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T02:55:02.721Z", + "endDate": "2026-01-22T02:55:07.721Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T02:59:57.895Z", + "endDate": "2026-01-22T03:09:58.763Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T03:09:58.763Z", + "endDate": "2026-01-22T03:34:56.294Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T03:34:56.295Z", + "endDate": "2026-01-22T03:39:56.254Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T03:39:56.255Z", + "endDate": "2026-01-22T03:54:56.137Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T03:39:56.913Z", + "endDate": "2026-01-22T03:40:01.913Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T03:44:57.906Z", + "endDate": "2026-01-22T03:45:02.906Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T03:49:57.239Z", + "endDate": "2026-01-22T03:50:02.239Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T03:54:56.137Z", + "endDate": "2026-01-22T04:00:01.845Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T04:00:01.846Z", + "endDate": "2026-01-22T04:50:03.980Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:00:02.491Z", + "endDate": "2026-01-22T04:00:07.491Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:05:00.63Z", + "endDate": "2026-01-22T04:05:17.130Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:10:02.078Z", + "endDate": "2026-01-22T04:10:15.578Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:14:59.109Z", + "endDate": "2026-01-22T04:15:14.109Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:19:58.177Z", + "endDate": "2026-01-22T04:20:14.677Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:25:06.293Z", + "endDate": "2026-01-22T04:25:16.793Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:29:57.515Z", + "endDate": "2026-01-22T04:30:06.515Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:34:56.929Z", + "endDate": "2026-01-22T04:35:11.929Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:39:57.019Z", + "endDate": "2026-01-22T04:40:06.019Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T04:44:58.081Z", + "endDate": "2026-01-22T04:45:03.081Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T04:50:03.98Z", + "endDate": "2026-01-22T04:54:59.534Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T04:54:59.535Z", + "endDate": "2026-01-22T05:09:56.154Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:00:00.569Z", + "endDate": "2026-01-22T05:00:09.569Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:04:59.096Z", + "endDate": "2026-01-22T05:05:04.096Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T05:09:56.154Z", + "endDate": "2026-01-22T05:14:56.843Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T05:14:56.843Z", + "endDate": "2026-01-22T05:29:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:14:57.654Z", + "endDate": "2026-01-22T05:15:02.654Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:19:59.243Z", + "endDate": "2026-01-22T05:20:04.243Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:30:00.514Z", + "endDate": "2026-01-22T05:30:05.514Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T05:30:00Z", + "endDate": "2026-01-22T06:14:58.462Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:34:56.297Z", + "endDate": "2026-01-22T05:35:03.797Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:39:58.126Z", + "endDate": "2026-01-22T05:40:04.126Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:44:57.792Z", + "endDate": "2026-01-22T05:45:02.792Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T05:49:56.787Z", + "endDate": "2026-01-22T05:50:01.787Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:05:17.057Z", + "endDate": "2026-01-22T06:05:22.057Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:09:57.986Z", + "endDate": "2026-01-22T06:10:02.986Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T06:14:58.463Z", + "endDate": "2026-01-22T06:19:57.038Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T06:19:57.038Z", + "endDate": "2026-01-22T07:09:56.065Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:24:57.944Z", + "endDate": "2026-01-22T06:25:06.944Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:29:58.056Z", + "endDate": "2026-01-22T06:30:13.056Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:34:58.932Z", + "endDate": "2026-01-22T06:35:12.432Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:39:58.488Z", + "endDate": "2026-01-22T06:40:07.488Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:54:56.768Z", + "endDate": "2026-01-22T06:55:01.768Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T06:59:57.072Z", + "endDate": "2026-01-22T07:00:02.072Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T07:04:57.65Z", + "endDate": "2026-01-22T07:05:02.650Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:09:56.066Z", + "endDate": "2026-01-22T07:14:59.020Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:14:59.022Z", + "endDate": "2026-01-22T07:29:58.758Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:14:59.02Z", + "endDate": "2026-01-22T07:14:59.021Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:29:58.758Z", + "endDate": "2026-01-22T07:29:58.763Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:29:58.764Z", + "endDate": "2026-01-22T07:34:57.593Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:34:57.593Z", + "endDate": "2026-01-22T07:34:57.596Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:34:57.596Z", + "endDate": "2026-01-22T07:39:58.602Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:39:58.603Z", + "endDate": "2026-01-22T07:39:58.605Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:39:58.605Z", + "endDate": "2026-01-22T07:44:59.508Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:44:59.509Z", + "endDate": "2026-01-22T07:44:59.511Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:44:59.512Z", + "endDate": "2026-01-22T07:49:58.122Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:49:58.122Z", + "endDate": "2026-01-22T07:49:58.125Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T07:49:58.125Z", + "endDate": "2026-01-22T08:04:59.430Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:04:59.431Z", + "endDate": "2026-01-22T08:04:59.433Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:04:59.434Z", + "endDate": "2026-01-22T08:09:58.010Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:09:58.01Z", + "endDate": "2026-01-22T08:24:57.218Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T08:09:58.747Z", + "endDate": "2026-01-22T08:10:03.747Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T08:14:59.183Z", + "endDate": "2026-01-22T08:15:11.183Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T08:19:57.225Z", + "endDate": "2026-01-22T08:20:06.225Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:24:57.219Z", + "endDate": "2026-01-22T08:39:58.658Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:39:58.659Z", + "endDate": "2026-01-22T08:44:57.366Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:44:57.366Z", + "endDate": "2026-01-22T08:49:58.727Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:49:58.728Z", + "endDate": "2026-01-22T08:49:58.732Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:49:58.733Z", + "endDate": "2026-01-22T08:59:57.146Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:59:57.146Z", + "endDate": "2026-01-22T08:59:57.149Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T08:59:57.15Z", + "endDate": "2026-01-22T09:04:58.291Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:04:58.291Z", + "endDate": "2026-01-22T09:04:58.316Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:04:58.317Z", + "endDate": "2026-01-22T09:09:56.530Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:09:56.531Z", + "endDate": "2026-01-22T09:09:56.534Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:09:56.534Z", + "endDate": "2026-01-22T09:14:56.665Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:14:56.665Z", + "endDate": "2026-01-22T09:14:56.666Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:14:56.666Z", + "endDate": "2026-01-22T09:19:59.071Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:19:59.072Z", + "endDate": "2026-01-22T09:24:56.922Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T09:19:59.807Z", + "endDate": "2026-01-22T09:20:05.807Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:24:56.922Z", + "endDate": "2026-01-22T09:34:58.633Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:34:58.633Z", + "endDate": "2026-01-22T09:39:57.159Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:39:57.16Z", + "endDate": "2026-01-22T09:49:56.925Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:49:56.925Z", + "endDate": "2026-01-22T09:59:57.071Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T09:49:57.703Z", + "endDate": "2026-01-22T09:50:02.703Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T09:59:57.072Z", + "endDate": "2026-01-22T10:19:57.210Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T10:19:57.211Z", + "endDate": "2026-01-22T10:24:56.520Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T10:24:56.52Z", + "endDate": "2026-01-22T10:34:58.651Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T10:34:58.651Z", + "endDate": "2026-01-22T10:39:56.342Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T10:39:56.343Z", + "endDate": "2026-01-22T10:44:56.812Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T10:44:56.812Z", + "endDate": "2026-01-22T11:34:56.472Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T10:59:56.573Z", + "endDate": "2026-01-22T11:00:05.573Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T11:04:59.789Z", + "endDate": "2026-01-22T11:05:05.789Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T11:09:58.625Z", + "endDate": "2026-01-22T11:10:03.625Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T11:14:58.405Z", + "endDate": "2026-01-22T11:15:03.405Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T11:19:57.856Z", + "endDate": "2026-01-22T11:20:02.856Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T11:24:57.396Z", + "endDate": "2026-01-22T11:25:04.896Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T11:34:56.473Z", + "endDate": "2026-01-22T11:44:57.992Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T11:44:57.992Z", + "endDate": "2026-01-22T11:44:57.995Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T11:44:57.996Z", + "endDate": "2026-01-22T12:04:56.840Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T12:04:56.844Z", + "endDate": "2026-01-22T12:24:56.787Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T12:04:56.84Z", + "endDate": "2026-01-22T12:04:56.844Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T12:24:56.788Z", + "endDate": "2026-01-22T13:14:57.603Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T12:40:01.401Z", + "endDate": "2026-01-22T12:40:06.401Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T12:44:56.98Z", + "endDate": "2026-01-22T12:45:01.980Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T12:49:58.936Z", + "endDate": "2026-01-22T12:50:03.936Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T12:54:57.606Z", + "endDate": "2026-01-22T12:55:02.606Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T12:59:58.539Z", + "endDate": "2026-01-22T13:00:03.539Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T13:04:58.918Z", + "endDate": "2026-01-22T13:05:04.918Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T13:09:58.577Z", + "endDate": "2026-01-22T13:10:03.577Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T13:14:57.603Z", + "endDate": "2026-01-22T13:34:58.335Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T13:34:58.336Z", + "endDate": "2026-01-22T13:34:58.340Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T13:34:58.341Z", + "endDate": "2026-01-22T13:54:58.206Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T13:54:58.206Z", + "endDate": "2026-01-22T14:34:59.846Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T14:09:57.007Z", + "endDate": "2026-01-22T14:10:02.007Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T14:19:57.675Z", + "endDate": "2026-01-22T14:20:02.675Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T14:24:57.08Z", + "endDate": "2026-01-22T14:25:06.080Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T14:29:58.344Z", + "endDate": "2026-01-22T14:30:04.344Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T14:34:59.846Z", + "endDate": "2026-01-22T14:40:00.313Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T14:40:00.313Z", + "endDate": "2026-01-22T14:40:00.315Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T14:40:00.316Z", + "endDate": "2026-01-22T14:44:58.617Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T14:44:58.618Z", + "endDate": "2026-01-22T14:59:57.565Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T14:44:59.264Z", + "endDate": "2026-01-22T14:45:08.264Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T14:49:59.905Z", + "endDate": "2026-01-22T14:50:04.905Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T14:59:57.565Z", + "endDate": "2026-01-22T15:04:57.282Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:04:57.283Z", + "endDate": "2026-01-22T15:04:57.285Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:04:57.286Z", + "endDate": "2026-01-22T15:09:59.222Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:09:59.222Z", + "endDate": "2026-01-22T15:19:58.072Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T15:10:00.107Z", + "endDate": "2026-01-22T15:10:05.107Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T15:14:59.943Z", + "endDate": "2026-01-22T15:15:04.943Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:19:58.073Z", + "endDate": "2026-01-22T15:24:59.670Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:24:59.67Z", + "endDate": "2026-01-22T15:39:57.232Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T15:29:59.015Z", + "endDate": "2026-01-22T15:30:14.015Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:39:57.233Z", + "endDate": "2026-01-22T15:45:00.258Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:45:00.259Z", + "endDate": "2026-01-22T15:49:58.673Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T15:45:01.129Z", + "endDate": "2026-01-22T15:45:11.629Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:49:58.673Z", + "endDate": "2026-01-22T15:55:10.634Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:55:10.634Z", + "endDate": "2026-01-22T15:55:10.635Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T15:55:10.636Z", + "endDate": "2026-01-22T16:00:02.714Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:00:02.714Z", + "endDate": "2026-01-22T16:04:57.078Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T16:00:03.584Z", + "endDate": "2026-01-22T16:00:08.584Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:04:57.078Z", + "endDate": "2026-01-22T16:09:58.479Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:09:58.482Z", + "endDate": "2026-01-22T16:15:05.501Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:09:58.48Z", + "endDate": "2026-01-22T16:09:58.482Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:15:05.502Z", + "endDate": "2026-01-22T16:24:56.900Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T16:15:06.131Z", + "endDate": "2026-01-22T16:15:11.131Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:24:56.9Z", + "endDate": "2026-01-22T16:29:59.714Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:29:59.715Z", + "endDate": "2026-01-22T16:29:59.718Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:29:59.719Z", + "endDate": "2026-01-22T16:34:58.831Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:34:58.832Z", + "endDate": "2026-01-22T16:34:58.834Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:34:58.835Z", + "endDate": "2026-01-22T16:40:09.856Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T16:40:09.856Z", + "endDate": "2026-01-22T17:04:57.194Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T16:40:10.517Z", + "endDate": "2026-01-22T16:40:15.517Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T16:50:04.559Z", + "endDate": "2026-01-22T16:50:09.559Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T16:55:03.568Z", + "endDate": "2026-01-22T16:55:09.568Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T16:59:58.063Z", + "endDate": "2026-01-22T17:00:04.063Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:04:57.195Z", + "endDate": "2026-01-22T17:09:59.180Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:09:59.18Z", + "endDate": "2026-01-22T17:24:58.042Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T17:14:57.623Z", + "endDate": "2026-01-22T17:15:02.623Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T17:19:57.928Z", + "endDate": "2026-01-22T17:20:02.928Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:24:58.043Z", + "endDate": "2026-01-22T17:30:07.535Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:30:07.535Z", + "endDate": "2026-01-22T17:30:07.538Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:30:07.538Z", + "endDate": "2026-01-22T17:35:13.163Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:35:13.164Z", + "endDate": "2026-01-22T17:35:13.166Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:35:13.167Z", + "endDate": "2026-01-22T17:40:09.284Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:40:09.284Z", + "endDate": "2026-01-22T17:45:01.128Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T17:40:09.928Z", + "endDate": "2026-01-22T17:40:14.928Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:45:01.129Z", + "endDate": "2026-01-22T17:49:59.091Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T17:49:59.091Z", + "endDate": "2026-01-22T18:34:59.235Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T18:00:02.611Z", + "endDate": "2026-01-22T18:00:07.611Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T18:04:58.456Z", + "endDate": "2026-01-22T18:05:03.456Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T18:10:06.573Z", + "endDate": "2026-01-22T18:10:11.573Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T18:19:57.819Z", + "endDate": "2026-01-22T18:20:02.819Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T18:25:00.794Z", + "endDate": "2026-01-22T18:25:05.794Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T18:34:59.236Z", + "endDate": "2026-01-22T18:45:00.144Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T18:45:00.145Z", + "endDate": "2026-01-22T18:45:00.148Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T18:45:00.148Z", + "endDate": "2026-01-22T18:49:58.288Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T18:49:58.288Z", + "endDate": "2026-01-22T18:49:58.290Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T18:49:58.29Z", + "endDate": "2026-01-22T18:54:57.736Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T18:54:57.736Z", + "endDate": "2026-01-22T18:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T19:00:00Z", + "endDate": "2026-01-22T20:50:01.460Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T19:09:58.059Z", + "endDate": "2026-01-22T19:10:03.059Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T19:14:58.576Z", + "endDate": "2026-01-22T19:15:03.576Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T19:29:58.169Z", + "endDate": "2026-01-22T19:30:03.169Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T19:35:07.255Z", + "endDate": "2026-01-22T19:35:12.255Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T19:40:00.386Z", + "endDate": "2026-01-22T19:40:05.386Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T19:51:33.125Z", + "endDate": "2026-01-22T19:56:13.625Z", + "value": 9.35, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-22T20:15:01.827Z", + "endDate": "2026-01-22T20:15:07.827Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T20:19:59.357Z", + "endDate": "2026-01-22T20:20:06.857Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T20:25:00.637Z", + "endDate": "2026-01-22T20:25:05.637Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T20:30:00.141Z", + "endDate": "2026-01-22T20:30:05.141Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T20:34:57.403Z", + "endDate": "2026-01-22T20:35:02.403Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T20:39:58.669Z", + "endDate": "2026-01-22T20:40:03.669Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T20:50:01.46Z", + "endDate": "2026-01-22T20:54:59.223Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T20:54:59.224Z", + "endDate": "2026-01-22T20:54:59.281Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T20:54:59.281Z", + "endDate": "2026-01-22T20:59:58.133Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T20:59:58.134Z", + "endDate": "2026-01-22T20:59:58.136Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T20:59:58.137Z", + "endDate": "2026-01-22T21:04:59.441Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:04:59.441Z", + "endDate": "2026-01-22T21:04:59.444Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:04:59.444Z", + "endDate": "2026-01-22T21:09:59.937Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:09:59.937Z", + "endDate": "2026-01-22T21:09:59.940Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:09:59.941Z", + "endDate": "2026-01-22T21:19:58.040Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:19:58.04Z", + "endDate": "2026-01-22T21:24:59.501Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:24:59.501Z", + "endDate": "2026-01-22T21:29:57.291Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:29:57.292Z", + "endDate": "2026-01-22T21:29:57.295Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:29:57.296Z", + "endDate": "2026-01-22T21:34:59.650Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:34:59.652Z", + "endDate": "2026-01-22T21:39:58.208Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:34:59.65Z", + "endDate": "2026-01-22T21:34:59.652Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:39:58.208Z", + "endDate": "2026-01-22T21:39:58.210Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:39:58.21Z", + "endDate": "2026-01-22T21:45:02.622Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:45:02.623Z", + "endDate": "2026-01-22T21:50:12.153Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:50:12.154Z", + "endDate": "2026-01-22T21:54:58.078Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:54:58.078Z", + "endDate": "2026-01-22T21:54:58.080Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T21:54:58.08Z", + "endDate": "2026-01-22T22:04:57.588Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:04:57.589Z", + "endDate": "2026-01-22T22:04:57.592Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:04:57.592Z", + "endDate": "2026-01-22T22:09:59.733Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:09:59.734Z", + "endDate": "2026-01-22T22:09:59.740Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:09:59.74Z", + "endDate": "2026-01-22T22:14:57.448Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:14:57.449Z", + "endDate": "2026-01-22T22:14:57.451Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:14:57.451Z", + "endDate": "2026-01-22T22:19:59.943Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:19:59.943Z", + "endDate": "2026-01-22T22:35:00.442Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T22:20:00.708Z", + "endDate": "2026-01-22T22:20:05.708Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T22:24:57.683Z", + "endDate": "2026-01-22T22:25:06.683Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T22:29:57.674Z", + "endDate": "2026-01-22T22:30:02.674Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:35:00.443Z", + "endDate": "2026-01-22T22:39:59.378Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:39:59.378Z", + "endDate": "2026-01-22T22:50:04.847Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-22T22:40:00.277Z", + "endDate": "2026-01-22T22:40:05.277Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:50:04.847Z", + "endDate": "2026-01-22T22:54:58.912Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:54:58.913Z", + "endDate": "2026-01-22T22:54:58.915Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:54:58.915Z", + "endDate": "2026-01-22T22:59:58.211Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:59:58.212Z", + "endDate": "2026-01-22T22:59:58.213Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T22:59:58.214Z", + "endDate": "2026-01-22T23:05:00.090Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:05:00.091Z", + "endDate": "2026-01-22T23:05:00.092Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:05:00.092Z", + "endDate": "2026-01-22T23:15:01.823Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:15:01.823Z", + "endDate": "2026-01-22T23:15:01.824Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:15:01.825Z", + "endDate": "2026-01-22T23:19:59.354Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:19:59.354Z", + "endDate": "2026-01-22T23:19:59.357Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:19:59.357Z", + "endDate": "2026-01-22T23:40:33.072Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:40:33.073Z", + "endDate": "2026-01-22T23:40:33.075Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-22T23:40:33.075Z", + "endDate": "2026-01-23T00:01:02.124Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T00:01:02.125Z", + "endDate": "2026-01-23T00:01:02.127Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T00:01:02.127Z", + "endDate": "2026-01-23T00:18:00.455Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T00:18:00.455Z", + "endDate": "2026-01-23T00:25:06.006Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T00:25:06.007Z", + "endDate": "2026-01-23T00:44:57.516Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T00:44:57.517Z", + "endDate": "2026-01-23T00:49:57.576Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T00:49:57.576Z", + "endDate": "2026-01-23T01:05:01.771Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T01:00:03.506Z", + "endDate": "2026-01-23T01:00:32.006Z", + "value": 0.95, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T01:05:01.771Z", + "endDate": "2026-01-23T01:49:59.735Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T01:30:05.645Z", + "endDate": "2026-01-23T01:30:25.145Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T01:35:02.812Z", + "endDate": "2026-01-23T01:35:14.812Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T01:40:00.65Z", + "endDate": "2026-01-23T01:40:05.650Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T01:49:59.735Z", + "endDate": "2026-01-23T01:55:07.646Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T01:55:07.647Z", + "endDate": "2026-01-23T01:55:07.649Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T01:55:07.649Z", + "endDate": "2026-01-23T02:00:05.577Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T01:59:39.104Z", + "endDate": "2026-01-23T02:04:21.104Z", + "value": 9.4, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T02:00:05.578Z", + "endDate": "2026-01-23T02:39:57.738Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T02:15:02.706Z", + "endDate": "2026-01-23T02:15:13.206Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T02:20:01.345Z", + "endDate": "2026-01-23T02:20:11.845Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T02:25:00.844Z", + "endDate": "2026-01-23T02:25:05.844Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T02:29:58.106Z", + "endDate": "2026-01-23T02:30:03.106Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T02:39:57.739Z", + "endDate": "2026-01-23T02:59:58.018Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T02:59:58.019Z", + "endDate": "2026-01-23T03:34:58.634Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T03:04:58.506Z", + "endDate": "2026-01-23T03:05:04.506Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T03:14:58.564Z", + "endDate": "2026-01-23T03:15:03.564Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T03:19:57.779Z", + "endDate": "2026-01-23T03:20:02.779Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T03:24:58.501Z", + "endDate": "2026-01-23T03:25:03.501Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T03:34:58.634Z", + "endDate": "2026-01-23T03:39:58.264Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T03:39:58.264Z", + "endDate": "2026-01-23T03:39:58.265Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T03:39:58.266Z", + "endDate": "2026-01-23T03:45:24.270Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T03:45:24.27Z", + "endDate": "2026-01-23T03:59:57.713Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T03:49:58.806Z", + "endDate": "2026-01-23T03:50:03.806Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T03:59:57.714Z", + "endDate": "2026-01-23T04:04:57.599Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T04:04:57.599Z", + "endDate": "2026-01-23T04:29:57.466Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:09:58.564Z", + "endDate": "2026-01-23T04:10:03.564Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:14:58.375Z", + "endDate": "2026-01-23T04:15:03.375Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:19:59.94Z", + "endDate": "2026-01-23T04:20:05.940Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T04:29:57.467Z", + "endDate": "2026-01-23T04:34:58.132Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T04:34:58.133Z", + "endDate": "2026-01-23T05:04:58.436Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:34:58.884Z", + "endDate": "2026-01-23T04:35:12.384Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:39:58.075Z", + "endDate": "2026-01-23T04:40:22.075Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:44:58.679Z", + "endDate": "2026-01-23T04:45:27.179Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:50:04.095Z", + "endDate": "2026-01-23T04:50:26.595Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:54:58.939Z", + "endDate": "2026-01-23T04:55:19.939Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T04:59:57.981Z", + "endDate": "2026-01-23T05:00:18.981Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T05:02:24.459Z", + "endDate": "2026-01-23T05:02:57.459Z", + "value": 1.1, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:04:58.437Z", + "endDate": "2026-01-23T05:09:59.028Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:09:59.028Z", + "endDate": "2026-01-23T05:09:59.029Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:09:59.029Z", + "endDate": "2026-01-23T05:14:57.700Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:14:57.701Z", + "endDate": "2026-01-23T05:14:57.703Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:14:57.704Z", + "endDate": "2026-01-23T05:19:58.249Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:19:58.249Z", + "endDate": "2026-01-23T05:19:58.250Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:19:58.251Z", + "endDate": "2026-01-23T05:20:33.633Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-01-23T05:20:33.633Z", + "endDate": "2026-01-23T05:23:16.702Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:23:16.703Z", + "endDate": "2026-01-23T05:24:59.913Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:24:59.914Z", + "endDate": "2026-01-23T05:30:00.444Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:30:00.444Z", + "endDate": "2026-01-23T05:30:00.445Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:30:00.446Z", + "endDate": "2026-01-23T05:34:58.562Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:34:58.563Z", + "endDate": "2026-01-23T05:34:58.566Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:34:58.566Z", + "endDate": "2026-01-23T05:44:59.488Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:44:59.489Z", + "endDate": "2026-01-23T05:44:59.542Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:44:59.543Z", + "endDate": "2026-01-23T05:49:58.255Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T05:49:58.255Z", + "endDate": "2026-01-23T06:09:57.674Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T05:49:58.901Z", + "endDate": "2026-01-23T05:50:03.901Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T05:54:58.173Z", + "endDate": "2026-01-23T05:55:10.173Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T05:59:58.268Z", + "endDate": "2026-01-23T06:00:10.268Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T06:04:57.901Z", + "endDate": "2026-01-23T06:05:02.901Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T06:09:57.675Z", + "endDate": "2026-01-23T06:19:58.122Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T06:19:58.122Z", + "endDate": "2026-01-23T07:44:59.062Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T06:39:58.067Z", + "endDate": "2026-01-23T06:40:03.067Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T06:44:59.017Z", + "endDate": "2026-01-23T06:45:05.017Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T06:50:00.971Z", + "endDate": "2026-01-23T06:50:06.971Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T06:54:59.295Z", + "endDate": "2026-01-23T06:55:06.795Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T06:59:58.986Z", + "endDate": "2026-01-23T07:00:03.986Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:10:00.105Z", + "endDate": "2026-01-23T07:10:06.105Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:15:00.231Z", + "endDate": "2026-01-23T07:15:10.731Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:19:58.691Z", + "endDate": "2026-01-23T07:20:03.691Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:24:58.47Z", + "endDate": "2026-01-23T07:25:03.470Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:29:59.12Z", + "endDate": "2026-01-23T07:30:09.620Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:34:58.284Z", + "endDate": "2026-01-23T07:35:08.784Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T07:44:59.063Z", + "endDate": "2026-01-23T07:49:58.280Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T07:49:58.284Z", + "endDate": "2026-01-23T07:54:59.034Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T07:49:58.28Z", + "endDate": "2026-01-23T07:49:58.283Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T07:54:59.034Z", + "endDate": "2026-01-23T07:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T07:54:59.678Z", + "endDate": "2026-01-23T07:55:08.678Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:00:00.596Z", + "endDate": "2026-01-23T08:00:08.096Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T08:00:00Z", + "endDate": "2026-01-23T08:49:59.553Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:05:00.196Z", + "endDate": "2026-01-23T08:05:05.196Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:09:57.963Z", + "endDate": "2026-01-23T08:10:02.963Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:14:58.475Z", + "endDate": "2026-01-23T08:15:03.475Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:19:59.185Z", + "endDate": "2026-01-23T08:20:05.185Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:24:58.38Z", + "endDate": "2026-01-23T08:25:04.380Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:39:58.078Z", + "endDate": "2026-01-23T08:40:03.078Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T08:45:00.484Z", + "endDate": "2026-01-23T08:45:05.484Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T08:49:59.553Z", + "endDate": "2026-01-23T08:54:58.467Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T08:54:58.467Z", + "endDate": "2026-01-23T08:54:58.470Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T08:54:58.471Z", + "endDate": "2026-01-23T08:59:59.714Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T08:59:59.715Z", + "endDate": "2026-01-23T08:59:59.717Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T08:59:59.717Z", + "endDate": "2026-01-23T09:10:01.006Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:10:01.006Z", + "endDate": "2026-01-23T09:10:01.008Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:10:01.009Z", + "endDate": "2026-01-23T09:15:00.095Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:15:00.095Z", + "endDate": "2026-01-23T09:24:59.157Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T09:15:00.845Z", + "endDate": "2026-01-23T09:15:05.845Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T09:20:00.742Z", + "endDate": "2026-01-23T09:20:08.242Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:24:59.157Z", + "endDate": "2026-01-23T09:29:58.063Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:29:58.064Z", + "endDate": "2026-01-23T09:29:58.066Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:29:58.066Z", + "endDate": "2026-01-23T09:34:59.191Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:34:59.192Z", + "endDate": "2026-01-23T09:40:00.008Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:40:00.008Z", + "endDate": "2026-01-23T09:45:00.143Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:45:00.144Z", + "endDate": "2026-01-23T09:54:59.617Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T09:45:01.058Z", + "endDate": "2026-01-23T09:45:07.058Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T09:49:58.467Z", + "endDate": "2026-01-23T09:50:11.967Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:54:59.618Z", + "endDate": "2026-01-23T09:59:58.066Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:59:58.066Z", + "endDate": "2026-01-23T09:59:58.068Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T09:59:58.069Z", + "endDate": "2026-01-23T10:04:58.458Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T10:04:58.459Z", + "endDate": "2026-01-23T10:14:59.628Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T10:04:59.269Z", + "endDate": "2026-01-23T10:05:06.769Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T10:09:59.21Z", + "endDate": "2026-01-23T10:10:05.210Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T10:14:59.629Z", + "endDate": "2026-01-23T10:35:02.960Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T10:35:02.96Z", + "endDate": "2026-01-23T10:44:58.304Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T10:35:03.709Z", + "endDate": "2026-01-23T10:35:08.709Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T10:39:59.767Z", + "endDate": "2026-01-23T10:40:04.767Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T10:44:58.304Z", + "endDate": "2026-01-23T10:49:59.667Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T10:49:59.667Z", + "endDate": "2026-01-23T10:49:59.669Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T10:49:59.67Z", + "endDate": "2026-01-23T11:00:00.965Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:00:00.966Z", + "endDate": "2026-01-23T11:00:00.968Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:00:00.968Z", + "endDate": "2026-01-23T11:04:58.359Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:04:58.363Z", + "endDate": "2026-01-23T11:10:00.718Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:04:58.36Z", + "endDate": "2026-01-23T11:04:58.362Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:10:00.718Z", + "endDate": "2026-01-23T11:10:00.720Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:10:00.72Z", + "endDate": "2026-01-23T11:30:00.480Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:30:00.481Z", + "endDate": "2026-01-23T11:30:00.482Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:30:00.483Z", + "endDate": "2026-01-23T11:49:58.382Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:49:58.383Z", + "endDate": "2026-01-23T11:54:57.961Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T11:54:57.961Z", + "endDate": "2026-01-23T12:05:00.245Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T12:05:00.246Z", + "endDate": "2026-01-23T12:20:00.613Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T12:20:00.614Z", + "endDate": "2026-01-23T12:39:58.565Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T12:39:58.565Z", + "endDate": "2026-01-23T12:39:58.569Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T12:39:58.569Z", + "endDate": "2026-01-23T12:59:59.576Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T12:59:59.576Z", + "endDate": "2026-01-23T12:59:59.579Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T12:59:59.579Z", + "endDate": "2026-01-23T13:15:00.409Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T13:15:00.41Z", + "endDate": "2026-01-23T13:19:59.501Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T13:19:59.501Z", + "endDate": "2026-01-23T13:39:58.425Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T13:39:58.426Z", + "endDate": "2026-01-23T13:39:58.429Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T13:39:58.429Z", + "endDate": "2026-01-23T13:59:58.637Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T13:59:58.637Z", + "endDate": "2026-01-23T13:59:58.640Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T13:59:58.641Z", + "endDate": "2026-01-23T14:10:01.726Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T14:10:01.726Z", + "endDate": "2026-01-23T14:15:00.860Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T14:15:00.86Z", + "endDate": "2026-01-23T14:24:59.723Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T14:24:59.724Z", + "endDate": "2026-01-23T14:55:00.432Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T14:55:00.433Z", + "endDate": "2026-01-23T14:59:59.551Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T14:55:33.545Z", + "endDate": "2026-01-23T14:56:03.545Z", + "value": 1, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T14:59:59.551Z", + "endDate": "2026-01-23T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T15:00:00Z", + "endDate": "2026-01-23T15:40:00.548Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T15:15:00.52Z", + "endDate": "2026-01-23T15:15:23.020Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T15:20:01.658Z", + "endDate": "2026-01-23T15:20:16.658Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T15:24:58.732Z", + "endDate": "2026-01-23T15:25:06.232Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T15:30:01.489Z", + "endDate": "2026-01-23T15:30:06.489Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T15:40:00.548Z", + "endDate": "2026-01-23T15:54:58.660Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T15:54:58.66Z", + "endDate": "2026-01-23T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T16:00:00Z", + "endDate": "2026-01-23T16:24:59.811Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T16:15:01.959Z", + "endDate": "2026-01-23T16:15:06.959Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T16:24:59.812Z", + "endDate": "2026-01-23T16:29:58.718Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T16:29:58.719Z", + "endDate": "2026-01-23T17:36:00.547Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T17:11:01.286Z", + "endDate": "2026-01-23T17:11:06.286Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T17:16:03.299Z", + "endDate": "2026-01-23T17:16:18.299Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T17:21:04.038Z", + "endDate": "2026-01-23T17:21:11.538Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T17:26:01.346Z", + "endDate": "2026-01-23T17:26:34.346Z", + "value": 1.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T17:31:02.996Z", + "endDate": "2026-01-23T17:31:29.996Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T17:36:00.547Z", + "endDate": "2026-01-23T17:41:03.815Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T17:41:03.816Z", + "endDate": "2026-01-23T17:41:03.868Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T17:41:03.868Z", + "endDate": "2026-01-23T17:51:01.734Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T17:51:01.735Z", + "endDate": "2026-01-23T17:51:01.738Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T17:51:01.739Z", + "endDate": "2026-01-23T18:01:02.158Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:01:02.158Z", + "endDate": "2026-01-23T18:01:02.161Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:01:02.161Z", + "endDate": "2026-01-23T18:21:02.184Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:21:02.185Z", + "endDate": "2026-01-23T18:21:02.189Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:21:02.189Z", + "endDate": "2026-01-23T18:31:02.878Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:31:02.878Z", + "endDate": "2026-01-23T18:31:02.882Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:31:02.882Z", + "endDate": "2026-01-23T18:36:02.925Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:36:02.926Z", + "endDate": "2026-01-23T18:41:01.742Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:41:01.743Z", + "endDate": "2026-01-23T18:51:03.100Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:51:03.1Z", + "endDate": "2026-01-23T18:56:00.849Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T18:56:00.85Z", + "endDate": "2026-01-23T19:01:02.552Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:01:02.553Z", + "endDate": "2026-01-23T19:11:01.056Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T19:01:03.466Z", + "endDate": "2026-01-23T19:01:08.466Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T19:06:03.754Z", + "endDate": "2026-01-23T19:06:08.754Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:11:01.056Z", + "endDate": "2026-01-23T19:26:04.033Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:26:04.034Z", + "endDate": "2026-01-23T19:26:04.035Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:26:04.035Z", + "endDate": "2026-01-23T19:31:05.162Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:31:05.162Z", + "endDate": "2026-01-23T19:31:05.163Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:31:05.163Z", + "endDate": "2026-01-23T19:36:02.504Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:36:02.505Z", + "endDate": "2026-01-23T19:36:02.507Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:36:02.507Z", + "endDate": "2026-01-23T19:56:01.278Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T19:56:01.278Z", + "endDate": "2026-01-23T20:36:03.261Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:01:01.236Z", + "endDate": "2026-01-23T20:01:06.236Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:06:02.532Z", + "endDate": "2026-01-23T20:06:13.032Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:11:01.319Z", + "endDate": "2026-01-23T20:11:25.319Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:16:02.749Z", + "endDate": "2026-01-23T20:16:35.749Z", + "value": 1.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:21:03.47Z", + "endDate": "2026-01-23T20:21:40.970Z", + "value": 1.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:26:03.129Z", + "endDate": "2026-01-23T20:26:39.129Z", + "value": 1.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T20:31:01.169Z", + "endDate": "2026-01-23T20:31:08.669Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T20:36:03.262Z", + "endDate": "2026-01-23T20:56:02.393Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T20:56:02.393Z", + "endDate": "2026-01-23T20:56:02.394Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T20:56:02.395Z", + "endDate": "2026-01-23T21:16:00.868Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T21:16:00.869Z", + "endDate": "2026-01-23T21:16:00.871Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T21:16:00.871Z", + "endDate": "2026-01-23T21:36:03.745Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T21:36:03.746Z", + "endDate": "2026-01-23T21:36:03.750Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T21:36:03.751Z", + "endDate": "2026-01-23T21:56:02.266Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T21:56:02.266Z", + "endDate": "2026-01-23T21:56:02.268Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T21:56:02.269Z", + "endDate": "2026-01-23T22:16:01.222Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T22:16:01.223Z", + "endDate": "2026-01-23T22:16:01.225Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T22:16:01.225Z", + "endDate": "2026-01-23T22:36:03.329Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T22:36:03.332Z", + "endDate": "2026-01-23T22:46:04.024Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T22:36:03.33Z", + "endDate": "2026-01-23T22:36:03.331Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T22:46:04.024Z", + "endDate": "2026-01-23T23:43:16.568Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:00:17.848Z", + "endDate": "2026-01-23T23:04:17.848Z", + "value": 8, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:16:04.53Z", + "endDate": "2026-01-23T23:16:21.030Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:21:01.053Z", + "endDate": "2026-01-23T23:21:14.553Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:26:03.474Z", + "endDate": "2026-01-23T23:26:10.974Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:31:03.416Z", + "endDate": "2026-01-23T23:31:13.916Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:36:01.26Z", + "endDate": "2026-01-23T23:36:11.760Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:41:00.875Z", + "endDate": "2026-01-23T23:41:05.875Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-01-23T23:43:16.569Z", + "endDate": "2026-01-23T23:46:54.402Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-01-23T23:46:54.402Z", + "endDate": "2026-01-24T00:51:01.930Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:51:01.307Z", + "endDate": "2026-01-23T23:51:06.307Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-23T23:56:02.564Z", + "endDate": "2026-01-23T23:56:11.564Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:01:01.654Z", + "endDate": "2026-01-24T00:01:07.654Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:06:01.449Z", + "endDate": "2026-01-24T00:06:06.449Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:16:02.29Z", + "endDate": "2026-01-24T00:16:09.790Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:21:02.071Z", + "endDate": "2026-01-24T00:21:17.071Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:26:02.976Z", + "endDate": "2026-01-24T00:26:19.476Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:31:02.199Z", + "endDate": "2026-01-24T00:31:23.199Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:36:01.318Z", + "endDate": "2026-01-24T00:36:19.318Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:41:02.584Z", + "endDate": "2026-01-24T00:41:16.084Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T00:46:01.314Z", + "endDate": "2026-01-24T00:46:14.814Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T00:51:01.931Z", + "endDate": "2026-01-24T00:56:03.134Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T00:56:03.134Z", + "endDate": "2026-01-24T00:56:03.137Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T00:56:03.138Z", + "endDate": "2026-01-24T01:01:03.227Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:01:03.228Z", + "endDate": "2026-01-24T01:01:03.230Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:01:03.23Z", + "endDate": "2026-01-24T01:06:01.027Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:06:01.028Z", + "endDate": "2026-01-24T01:06:01.028Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:06:01.029Z", + "endDate": "2026-01-24T01:11:01.455Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:11:01.455Z", + "endDate": "2026-01-24T01:11:01.458Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:11:01.459Z", + "endDate": "2026-01-24T01:16:00.992Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:16:00.992Z", + "endDate": "2026-01-24T01:16:00.995Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:16:00.995Z", + "endDate": "2026-01-24T01:42:03.822Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:42:03.823Z", + "endDate": "2026-01-24T01:42:03.826Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T01:42:03.827Z", + "endDate": "2026-01-24T02:06:06.963Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T01:42:05.086Z", + "endDate": "2026-01-24T01:42:26.086Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T01:56:03.235Z", + "endDate": "2026-01-24T01:56:34.735Z", + "value": 1.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T02:01:02.548Z", + "endDate": "2026-01-24T02:01:07.548Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:06:06.964Z", + "endDate": "2026-01-24T02:06:06.968Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:06:06.968Z", + "endDate": "2026-01-24T02:16:03.299Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T02:06:08.402Z", + "endDate": "2026-01-24T02:06:36.902Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T02:11:02.843Z", + "endDate": "2026-01-24T02:11:20.843Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:16:03.299Z", + "endDate": "2026-01-24T02:16:03.303Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:16:03.304Z", + "endDate": "2026-01-24T02:21:02.034Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:21:02.035Z", + "endDate": "2026-01-24T02:21:02.037Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:21:02.037Z", + "endDate": "2026-01-24T02:46:02.484Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T02:36:10.102Z", + "endDate": "2026-01-24T02:36:15.102Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T02:40:45.041Z", + "endDate": "2026-01-24T02:43:36.041Z", + "value": 5.7, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:46:02.485Z", + "endDate": "2026-01-24T02:46:02.487Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:46:02.488Z", + "endDate": "2026-01-24T02:51:03.853Z", + "value": 1.1, + "unit": "U/hour", + "scheduledBasalRate": 1.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T02:46:03.715Z", + "endDate": "2026-01-24T02:46:08.715Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:51:03.853Z", + "endDate": "2026-01-24T02:51:03.858Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:51:03.859Z", + "endDate": "2026-01-24T02:56:01.459Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:56:01.459Z", + "endDate": "2026-01-24T02:56:01.464Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T02:56:01.465Z", + "endDate": "2026-01-24T03:01:02.422Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:01:02.422Z", + "endDate": "2026-01-24T03:16:00.293Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T03:08:09.823Z", + "endDate": "2026-01-24T03:11:30.823Z", + "value": 6.7, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:16:00.294Z", + "endDate": "2026-01-24T03:21:01.537Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:21:01.537Z", + "endDate": "2026-01-24T03:21:01.539Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:21:01.54Z", + "endDate": "2026-01-24T03:26:02.386Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:26:02.386Z", + "endDate": "2026-01-24T03:31:00.434Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:31:00.434Z", + "endDate": "2026-01-24T03:36:00.677Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:36:00.677Z", + "endDate": "2026-01-24T03:36:00.678Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:36:00.679Z", + "endDate": "2026-01-24T03:41:01.978Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:41:01.979Z", + "endDate": "2026-01-24T03:41:01.981Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:41:01.981Z", + "endDate": "2026-01-24T03:46:00.961Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:46:00.962Z", + "endDate": "2026-01-24T03:51:08.810Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:51:08.81Z", + "endDate": "2026-01-24T03:56:08.037Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T03:56:08.038Z", + "endDate": "2026-01-24T04:13:02.282Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:13:02.282Z", + "endDate": "2026-01-24T04:21:03.501Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:21:03.502Z", + "endDate": "2026-01-24T04:31:01.462Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:31:01.463Z", + "endDate": "2026-01-24T04:36:02.659Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:36:02.659Z", + "endDate": "2026-01-24T04:36:02.662Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:36:02.662Z", + "endDate": "2026-01-24T04:41:03.948Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:41:03.948Z", + "endDate": "2026-01-24T04:41:03.950Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:41:03.951Z", + "endDate": "2026-01-24T04:46:03.391Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T04:46:03.391Z", + "endDate": "2026-01-24T05:11:03.626Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T04:46:03.992Z", + "endDate": "2026-01-24T04:46:08.992Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T04:51:06.345Z", + "endDate": "2026-01-24T04:51:12.345Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T04:56:03.99Z", + "endDate": "2026-01-24T04:56:08.990Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:01:01.74Z", + "endDate": "2026-01-24T05:01:06.740Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:06:01.466Z", + "endDate": "2026-01-24T05:06:06.466Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T05:11:03.627Z", + "endDate": "2026-01-24T05:16:01.484Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T05:16:01.484Z", + "endDate": "2026-01-24T05:16:01.487Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T05:16:01.488Z", + "endDate": "2026-01-24T05:21:03.638Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T05:21:03.638Z", + "endDate": "2026-01-24T05:29:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:21:04.883Z", + "endDate": "2026-01-24T05:21:21.383Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:26:02.939Z", + "endDate": "2026-01-24T05:26:11.939Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T05:30:00Z", + "endDate": "2026-01-24T06:01:02.278Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:31:02.975Z", + "endDate": "2026-01-24T05:31:07.975Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:36:06.672Z", + "endDate": "2026-01-24T05:36:14.172Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:41:02.161Z", + "endDate": "2026-01-24T05:41:11.161Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:46:02.808Z", + "endDate": "2026-01-24T05:46:10.308Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T05:51:05.499Z", + "endDate": "2026-01-24T05:51:10.499Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:01:02.278Z", + "endDate": "2026-01-24T06:06:03.250Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:06:03.251Z", + "endDate": "2026-01-24T06:06:03.255Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:06:03.255Z", + "endDate": "2026-01-24T06:11:03.644Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:11:03.645Z", + "endDate": "2026-01-24T06:11:03.647Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:11:03.648Z", + "endDate": "2026-01-24T06:31:05.723Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:31:05.723Z", + "endDate": "2026-01-24T06:31:05.725Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:31:05.726Z", + "endDate": "2026-01-24T06:51:03.210Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:51:03.211Z", + "endDate": "2026-01-24T06:51:03.211Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T06:51:03.212Z", + "endDate": "2026-01-24T07:11:03.054Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T07:11:03.054Z", + "endDate": "2026-01-24T07:11:03.057Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T07:11:03.057Z", + "endDate": "2026-01-24T07:31:01.546Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T07:31:01.546Z", + "endDate": "2026-01-24T07:31:01.549Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T07:31:01.549Z", + "endDate": "2026-01-24T07:51:02.555Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T07:51:02.556Z", + "endDate": "2026-01-24T07:51:02.558Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T07:51:02.558Z", + "endDate": "2026-01-24T08:11:02.678Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T08:11:02.679Z", + "endDate": "2026-01-24T08:11:02.682Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T08:11:02.682Z", + "endDate": "2026-01-24T08:31:00.954Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T08:31:00.955Z", + "endDate": "2026-01-24T08:31:00.957Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T08:31:00.958Z", + "endDate": "2026-01-24T08:51:03.730Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T08:51:03.732Z", + "endDate": "2026-01-24T09:11:01.112Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T08:51:03.73Z", + "endDate": "2026-01-24T08:51:03.731Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T09:11:01.112Z", + "endDate": "2026-01-24T09:11:01.113Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T09:11:01.113Z", + "endDate": "2026-01-24T09:31:03.222Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T09:31:03.223Z", + "endDate": "2026-01-24T09:31:03.226Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T09:31:03.226Z", + "endDate": "2026-01-24T09:51:02.726Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T09:51:02.727Z", + "endDate": "2026-01-24T10:16:01.302Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T10:16:01.302Z", + "endDate": "2026-01-24T10:36:01.041Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T10:36:01.042Z", + "endDate": "2026-01-24T10:36:01.047Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T10:36:01.047Z", + "endDate": "2026-01-24T10:56:01.725Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T10:56:01.726Z", + "endDate": "2026-01-24T10:56:01.728Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T10:56:01.729Z", + "endDate": "2026-01-24T11:01:00.711Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T11:01:00.711Z", + "endDate": "2026-01-24T11:06:02.311Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T11:06:02.311Z", + "endDate": "2026-01-24T11:21:02.014Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T11:21:02.015Z", + "endDate": "2026-01-24T11:36:01.582Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T11:36:01.582Z", + "endDate": "2026-01-24T11:41:00.839Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T11:41:00.839Z", + "endDate": "2026-01-24T12:16:01.307Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T12:16:01.307Z", + "endDate": "2026-01-24T12:21:02.663Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T12:21:02.664Z", + "endDate": "2026-01-24T12:36:00.794Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T12:26:03.074Z", + "endDate": "2026-01-24T12:26:21.074Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T12:31:01.502Z", + "endDate": "2026-01-24T12:31:06.502Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T12:36:00.795Z", + "endDate": "2026-01-24T12:41:03.073Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T12:41:03.073Z", + "endDate": "2026-01-24T12:56:02.213Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T12:46:03.617Z", + "endDate": "2026-01-24T12:46:08.617Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T12:51:01.018Z", + "endDate": "2026-01-24T12:51:06.018Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T12:56:02.214Z", + "endDate": "2026-01-24T13:01:02.461Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T13:01:02.461Z", + "endDate": "2026-01-24T13:01:02.464Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T13:01:02.464Z", + "endDate": "2026-01-24T13:21:02.683Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T13:21:02.684Z", + "endDate": "2026-01-24T13:21:02.687Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T13:21:02.687Z", + "endDate": "2026-01-24T13:26:01.550Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T13:26:01.55Z", + "endDate": "2026-01-24T13:56:00.904Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T13:31:03.399Z", + "endDate": "2026-01-24T13:31:16.899Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T13:36:01.665Z", + "endDate": "2026-01-24T13:36:12.165Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T13:41:02.479Z", + "endDate": "2026-01-24T13:41:07.479Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T13:46:02.046Z", + "endDate": "2026-01-24T13:46:07.046Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T13:56:00.904Z", + "endDate": "2026-01-24T14:01:00.856Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:01:00.857Z", + "endDate": "2026-01-24T14:01:00.859Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:01:00.86Z", + "endDate": "2026-01-24T14:21:00.762Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:21:00.762Z", + "endDate": "2026-01-24T14:21:00.766Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:21:00.766Z", + "endDate": "2026-01-24T14:41:00.790Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:41:00.791Z", + "endDate": "2026-01-24T14:41:00.793Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:41:00.793Z", + "endDate": "2026-01-24T14:46:03.810Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T14:46:03.811Z", + "endDate": "2026-01-24T15:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T14:46:04.455Z", + "endDate": "2026-01-24T14:46:09.455Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T14:51:01.911Z", + "endDate": "2026-01-24T14:51:06.911Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T15:00:00Z", + "endDate": "2026-01-24T15:21:00.251Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T15:01:01.248Z", + "endDate": "2026-01-24T15:01:06.248Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T15:06:03.368Z", + "endDate": "2026-01-24T15:06:08.368Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T15:21:00.251Z", + "endDate": "2026-01-24T15:26:00.916Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T15:26:00.917Z", + "endDate": "2026-01-24T15:26:00.919Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T15:26:00.919Z", + "endDate": "2026-01-24T15:36:00.803Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T15:36:00.804Z", + "endDate": "2026-01-24T15:51:03.092Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T15:41:02.52Z", + "endDate": "2026-01-24T15:41:07.520Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T15:51:03.092Z", + "endDate": "2026-01-24T16:06:03.831Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T16:06:03.832Z", + "endDate": "2026-01-24T16:11:03.357Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T16:11:03.357Z", + "endDate": "2026-01-24T16:16:01.804Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T16:16:01.804Z", + "endDate": "2026-01-24T17:31:07.462Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T16:16:02.449Z", + "endDate": "2026-01-24T16:16:07.449Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T16:36:02.996Z", + "endDate": "2026-01-24T16:36:08.996Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T16:41:01.769Z", + "endDate": "2026-01-24T16:41:06.769Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T16:46:02.715Z", + "endDate": "2026-01-24T16:46:07.715Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T16:51:04.115Z", + "endDate": "2026-01-24T16:51:09.115Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T16:56:07.164Z", + "endDate": "2026-01-24T16:56:12.164Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:01:02.126Z", + "endDate": "2026-01-24T17:01:07.126Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:06:03.227Z", + "endDate": "2026-01-24T17:06:08.227Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:11:02.138Z", + "endDate": "2026-01-24T17:11:07.138Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:16:01.735Z", + "endDate": "2026-01-24T17:16:06.735Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:21:03.895Z", + "endDate": "2026-01-24T17:21:24.895Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:26:13.299Z", + "endDate": "2026-01-24T17:26:18.299Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T17:31:07.462Z", + "endDate": "2026-01-24T17:51:01.143Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T17:51:01.144Z", + "endDate": "2026-01-24T17:51:01.145Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T17:51:01.145Z", + "endDate": "2026-01-24T17:56:01.824Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T17:54:09.951Z", + "endDate": "2026-01-24T17:55:57.951Z", + "value": 3.6, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T17:56:01.825Z", + "endDate": "2026-01-24T18:41:02.945Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T18:16:02.688Z", + "endDate": "2026-01-24T18:16:07.688Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T18:21:07.156Z", + "endDate": "2026-01-24T18:21:13.156Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T18:26:01.561Z", + "endDate": "2026-01-24T18:26:06.561Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T18:41:02.945Z", + "endDate": "2026-01-24T18:46:03.035Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T18:46:03.035Z", + "endDate": "2026-01-24T18:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:00:00Z", + "endDate": "2026-01-24T19:06:00.688Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:06:00.689Z", + "endDate": "2026-01-24T19:11:03.426Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:11:03.426Z", + "endDate": "2026-01-24T19:11:03.427Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:11:03.428Z", + "endDate": "2026-01-24T19:16:04.825Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:16:04.826Z", + "endDate": "2026-01-24T19:16:04.827Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:16:04.827Z", + "endDate": "2026-01-24T19:21:02.446Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:21:02.447Z", + "endDate": "2026-01-24T19:21:02.451Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:21:02.451Z", + "endDate": "2026-01-24T19:26:03.665Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:26:03.666Z", + "endDate": "2026-01-24T19:41:00.699Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:41:00.699Z", + "endDate": "2026-01-24T19:51:01.634Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:51:01.634Z", + "endDate": "2026-01-24T19:56:02.797Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T19:56:02.798Z", + "endDate": "2026-01-24T20:01:00.862Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:01:00.863Z", + "endDate": "2026-01-24T20:01:00.865Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:01:00.865Z", + "endDate": "2026-01-24T20:06:26.641Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:06:26.642Z", + "endDate": "2026-01-24T20:06:26.645Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:06:26.645Z", + "endDate": "2026-01-24T20:11:03.601Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:11:03.602Z", + "endDate": "2026-01-24T20:11:03.614Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:11:03.614Z", + "endDate": "2026-01-24T20:16:00.824Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T20:11:08.083Z", + "endDate": "2026-01-24T20:13:12.583Z", + "value": 4.15, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T20:16:00.825Z", + "endDate": "2026-01-24T21:26:02.482Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T21:26:02.482Z", + "endDate": "2026-01-24T21:41:00.827Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T21:41:00.828Z", + "endDate": "2026-01-24T21:46:00.765Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T21:46:00.765Z", + "endDate": "2026-01-24T21:51:00.934Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T21:51:00.934Z", + "endDate": "2026-01-24T21:59:59.999Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T22:00:00Z", + "endDate": "2026-01-24T22:51:04.342Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:01:02.91Z", + "endDate": "2026-01-24T22:01:20.910Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:06:00.782Z", + "endDate": "2026-01-24T22:06:14.282Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:11:01.896Z", + "endDate": "2026-01-24T22:11:09.396Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:16:01.477Z", + "endDate": "2026-01-24T22:16:07.477Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:21:01.781Z", + "endDate": "2026-01-24T22:21:07.781Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:31:01.654Z", + "endDate": "2026-01-24T22:31:10.654Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:36:00.621Z", + "endDate": "2026-01-24T22:36:20.121Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:41:02.244Z", + "endDate": "2026-01-24T22:41:21.744Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-24T22:46:04.675Z", + "endDate": "2026-01-24T22:46:19.675Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T22:51:04.343Z", + "endDate": "2026-01-24T22:56:03.682Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T22:56:03.682Z", + "endDate": "2026-01-24T22:56:03.685Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T22:56:03.686Z", + "endDate": "2026-01-24T23:16:02.636Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T23:16:02.636Z", + "endDate": "2026-01-24T23:16:02.637Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T23:16:02.637Z", + "endDate": "2026-01-24T23:36:02.342Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T23:36:02.343Z", + "endDate": "2026-01-24T23:36:02.345Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T23:36:02.345Z", + "endDate": "2026-01-24T23:56:03.230Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T23:56:03.235Z", + "endDate": "2026-01-25T00:16:00.704Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-24T23:56:03.23Z", + "endDate": "2026-01-24T23:56:03.234Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T00:16:00.704Z", + "endDate": "2026-01-25T00:16:00.707Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T00:16:00.708Z", + "endDate": "2026-01-25T00:36:01.560Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T00:36:01.562Z", + "endDate": "2026-01-25T00:41:01.500Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T00:36:01.56Z", + "endDate": "2026-01-25T00:36:01.562Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T00:41:01.501Z", + "endDate": "2026-01-25T01:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T00:46:00.95Z", + "endDate": "2026-01-25T00:46:20.450Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T00:51:04.308Z", + "endDate": "2026-01-25T00:51:25.308Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T00:56:04.475Z", + "endDate": "2026-01-25T00:56:28.475Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T01:00:00Z", + "endDate": "2026-01-25T01:11:05.421Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T01:01:01.207Z", + "endDate": "2026-01-25T01:01:22.207Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T01:06:01.032Z", + "endDate": "2026-01-25T01:06:08.532Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T01:11:05.422Z", + "endDate": "2026-01-25T01:31:02.390Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T01:31:02.392Z", + "endDate": "2026-01-25T01:51:03.655Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T01:31:02.39Z", + "endDate": "2026-01-25T01:31:02.392Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T01:51:03.656Z", + "endDate": "2026-01-25T01:51:03.658Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T01:51:03.659Z", + "endDate": "2026-01-25T02:11:03.276Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T02:11:03.276Z", + "endDate": "2026-01-25T02:51:02.072Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T02:16:00.5Z", + "endDate": "2026-01-25T02:16:15.500Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T02:21:01.578Z", + "endDate": "2026-01-25T02:21:16.578Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T02:26:03.436Z", + "endDate": "2026-01-25T02:26:21.436Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T02:31:04.485Z", + "endDate": "2026-01-25T02:31:20.985Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T02:36:02.115Z", + "endDate": "2026-01-25T02:36:07.115Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T02:51:02.073Z", + "endDate": "2026-01-25T02:56:00.713Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T02:56:00.714Z", + "endDate": "2026-01-25T02:56:00.716Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T02:56:00.717Z", + "endDate": "2026-01-25T03:16:00.820Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T03:16:00.824Z", + "endDate": "2026-01-25T03:36:00.794Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T03:16:00.82Z", + "endDate": "2026-01-25T03:16:00.823Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T03:36:00.794Z", + "endDate": "2026-01-25T03:36:00.798Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T03:36:00.799Z", + "endDate": "2026-01-25T03:56:03.229Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T03:56:03.229Z", + "endDate": "2026-01-25T03:56:03.233Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T03:56:03.233Z", + "endDate": "2026-01-25T04:16:03.173Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T04:16:03.174Z", + "endDate": "2026-01-25T04:16:03.177Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T04:16:03.177Z", + "endDate": "2026-01-25T04:31:03.117Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T04:31:03.118Z", + "endDate": "2026-01-25T04:36:00.582Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T04:36:00.582Z", + "endDate": "2026-01-25T04:41:00.463Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T04:41:00.464Z", + "endDate": "2026-01-25T05:30:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:06:08.707Z", + "endDate": "2026-01-25T05:06:29.707Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:11:02.785Z", + "endDate": "2026-01-25T05:11:13.285Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:16:01.572Z", + "endDate": "2026-01-25T05:16:07.572Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:21:02.242Z", + "endDate": "2026-01-25T05:21:07.242Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:26:02.899Z", + "endDate": "2026-01-25T05:26:07.899Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T05:30:00Z", + "endDate": "2026-01-25T05:41:00.135Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:31:06.533Z", + "endDate": "2026-01-25T05:31:11.533Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T05:36:02.488Z", + "endDate": "2026-01-25T05:36:07.488Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T05:41:00.135Z", + "endDate": "2026-01-25T05:51:03.192Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T05:51:03.193Z", + "endDate": "2026-01-25T05:56:00.368Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T05:56:00.369Z", + "endDate": "2026-01-25T06:26:00.369Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T06:26:00.369Z", + "endDate": "2026-01-25T06:46:01.452Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T06:46:01.453Z", + "endDate": "2026-01-25T06:51:02.840Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T06:51:02.845Z", + "endDate": "2026-01-25T06:56:01.992Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T06:51:02.84Z", + "endDate": "2026-01-25T06:51:02.844Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T06:56:01.993Z", + "endDate": "2026-01-25T07:01:01.935Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T07:01:01.936Z", + "endDate": "2026-01-25T07:21:02.754Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T07:21:02.754Z", + "endDate": "2026-01-25T07:21:02.758Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T07:21:02.759Z", + "endDate": "2026-01-25T07:41:01.471Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T07:41:01.472Z", + "endDate": "2026-01-25T07:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T07:56:02.089Z", + "endDate": "2026-01-25T07:56:14.089Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T08:00:00Z", + "endDate": "2026-01-25T08:16:00.916Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T08:01:00.881Z", + "endDate": "2026-01-25T08:01:09.881Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T08:06:02.93Z", + "endDate": "2026-01-25T08:06:07.930Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T08:11:02.337Z", + "endDate": "2026-01-25T08:11:07.337Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T08:16:00.916Z", + "endDate": "2026-01-25T08:21:01.613Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T08:21:01.613Z", + "endDate": "2026-01-25T08:21:01.617Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T08:21:01.618Z", + "endDate": "2026-01-25T08:41:01.021Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T08:41:01.021Z", + "endDate": "2026-01-25T08:41:01.024Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T08:41:01.024Z", + "endDate": "2026-01-25T09:01:00.696Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T09:01:00.697Z", + "endDate": "2026-01-25T09:01:00.699Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T09:01:00.699Z", + "endDate": "2026-01-25T09:21:01.664Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T09:21:01.665Z", + "endDate": "2026-01-25T09:21:01.669Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T09:21:01.669Z", + "endDate": "2026-01-25T09:41:02.792Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T09:41:02.792Z", + "endDate": "2026-01-25T09:41:02.793Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T09:41:02.794Z", + "endDate": "2026-01-25T10:01:00.692Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T10:01:00.692Z", + "endDate": "2026-01-25T10:56:01.451Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T10:31:02.607Z", + "endDate": "2026-01-25T10:31:13.107Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T10:36:00.813Z", + "endDate": "2026-01-25T10:36:05.813Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T10:41:02.663Z", + "endDate": "2026-01-25T10:41:07.663Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T10:46:01.225Z", + "endDate": "2026-01-25T10:46:06.225Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T10:56:01.452Z", + "endDate": "2026-01-25T11:01:01.346Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:01:01.346Z", + "endDate": "2026-01-25T11:01:01.349Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:01:01.35Z", + "endDate": "2026-01-25T11:06:00.599Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:06:00.599Z", + "endDate": "2026-01-25T11:06:00.600Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:06:00.6Z", + "endDate": "2026-01-25T11:11:03.845Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:11:03.846Z", + "endDate": "2026-01-25T11:11:03.848Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:11:03.848Z", + "endDate": "2026-01-25T11:16:01.600Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:16:01.6Z", + "endDate": "2026-01-25T11:21:01.767Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T11:16:02.322Z", + "endDate": "2026-01-25T11:16:07.322Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:21:01.767Z", + "endDate": "2026-01-25T11:26:01.361Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:26:01.362Z", + "endDate": "2026-01-25T11:26:01.363Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:26:01.364Z", + "endDate": "2026-01-25T11:46:03.029Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:46:03.029Z", + "endDate": "2026-01-25T11:46:03.031Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T11:46:03.032Z", + "endDate": "2026-01-25T12:01:00.989Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T12:01:00.989Z", + "endDate": "2026-01-25T12:51:01.766Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T12:21:00.83Z", + "endDate": "2026-01-25T12:21:08.330Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T12:26:04.781Z", + "endDate": "2026-01-25T12:26:10.781Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T12:31:02.639Z", + "endDate": "2026-01-25T12:31:07.639Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T12:36:01.324Z", + "endDate": "2026-01-25T12:36:06.324Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T12:51:01.767Z", + "endDate": "2026-01-25T12:56:03.703Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T12:56:03.704Z", + "endDate": "2026-01-25T12:56:03.707Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T12:56:03.708Z", + "endDate": "2026-01-25T13:01:01.325Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T13:01:01.326Z", + "endDate": "2026-01-25T13:01:01.329Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T13:01:01.329Z", + "endDate": "2026-01-25T13:16:01.527Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T13:16:01.527Z", + "endDate": "2026-01-25T13:21:02.620Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T13:21:02.621Z", + "endDate": "2026-01-25T13:41:01.417Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T13:41:01.417Z", + "endDate": "2026-01-25T14:26:00.971Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T13:51:03.089Z", + "endDate": "2026-01-25T13:51:09.089Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T14:11:01.049Z", + "endDate": "2026-01-25T14:11:06.049Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T14:16:02.404Z", + "endDate": "2026-01-25T14:16:07.404Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T14:26:00.971Z", + "endDate": "2026-01-25T14:31:01.766Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T14:31:01.767Z", + "endDate": "2026-01-25T14:31:01.771Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T14:31:01.771Z", + "endDate": "2026-01-25T14:36:02.862Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T14:36:02.862Z", + "endDate": "2026-01-25T14:36:02.864Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T14:36:02.865Z", + "endDate": "2026-01-25T14:51:02.091Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T14:51:02.091Z", + "endDate": "2026-01-25T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T14:51:03.111Z", + "endDate": "2026-01-25T14:51:08.111Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T14:56:05.95Z", + "endDate": "2026-01-25T14:56:10.950Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:00:00Z", + "endDate": "2026-01-25T15:01:01.148Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:01:01.148Z", + "endDate": "2026-01-25T15:06:03.379Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:06:03.379Z", + "endDate": "2026-01-25T15:06:03.381Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:06:03.382Z", + "endDate": "2026-01-25T15:11:02.677Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:11:02.678Z", + "endDate": "2026-01-25T15:25:59.987Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T15:16:03.356Z", + "endDate": "2026-01-25T15:16:08.356Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:25:59.988Z", + "endDate": "2026-01-25T15:46:01.243Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:46:01.243Z", + "endDate": "2026-01-25T15:46:01.268Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T15:46:01.269Z", + "endDate": "2026-01-25T16:01:00.801Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:01:00.801Z", + "endDate": "2026-01-25T16:36:01.879Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T16:21:01.481Z", + "endDate": "2026-01-25T16:21:10.481Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T16:26:01.091Z", + "endDate": "2026-01-25T16:26:07.091Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T16:31:01.033Z", + "endDate": "2026-01-25T16:31:06.033Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:36:01.879Z", + "endDate": "2026-01-25T16:41:02.313Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:41:02.314Z", + "endDate": "2026-01-25T16:41:02.317Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:41:02.317Z", + "endDate": "2026-01-25T16:46:01.818Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:46:01.818Z", + "endDate": "2026-01-25T16:51:02.047Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:51:02.047Z", + "endDate": "2026-01-25T16:56:05.182Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:56:05.183Z", + "endDate": "2026-01-25T16:56:05.184Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T16:56:05.184Z", + "endDate": "2026-01-25T17:01:03.443Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:01:03.443Z", + "endDate": "2026-01-25T17:01:03.445Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:01:03.446Z", + "endDate": "2026-01-25T17:06:02.949Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:06:02.953Z", + "endDate": "2026-01-25T17:11:08.485Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:06:02.95Z", + "endDate": "2026-01-25T17:06:02.952Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:11:08.485Z", + "endDate": "2026-01-25T17:16:11.328Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:16:11.328Z", + "endDate": "2026-01-25T17:21:02.316Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:21:02.317Z", + "endDate": "2026-01-25T17:56:01.436Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T17:29:28.523Z", + "endDate": "2026-01-25T17:31:40.523Z", + "value": 4.4, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-25T17:46:00.768Z", + "endDate": "2026-01-25T17:46:06.768Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T17:51:00.786Z", + "endDate": "2026-01-25T17:51:06.786Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T17:56:01.436Z", + "endDate": "2026-01-25T18:16:02.313Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:16:02.313Z", + "endDate": "2026-01-25T18:16:02.316Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:16:02.317Z", + "endDate": "2026-01-25T18:31:00.727Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:31:00.727Z", + "endDate": "2026-01-25T18:31:00.730Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:31:00.731Z", + "endDate": "2026-01-25T18:36:01.374Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:36:01.374Z", + "endDate": "2026-01-25T18:36:01.376Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:36:01.377Z", + "endDate": "2026-01-25T18:41:00.957Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:41:00.958Z", + "endDate": "2026-01-25T18:41:00.960Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:41:00.96Z", + "endDate": "2026-01-25T18:46:01.123Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:46:01.123Z", + "endDate": "2026-01-25T18:46:01.125Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:46:01.126Z", + "endDate": "2026-01-25T18:56:00.636Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:56:00.636Z", + "endDate": "2026-01-25T18:56:00.642Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T18:56:00.642Z", + "endDate": "2026-01-25T19:01:00.460Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:01:00.46Z", + "endDate": "2026-01-25T19:26:01.781Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:26:01.782Z", + "endDate": "2026-01-25T19:31:02.069Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:31:02.073Z", + "endDate": "2026-01-25T19:36:01.431Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:31:02.07Z", + "endDate": "2026-01-25T19:31:02.073Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:36:01.431Z", + "endDate": "2026-01-25T19:36:01.435Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:36:01.436Z", + "endDate": "2026-01-25T19:41:05.737Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:41:05.737Z", + "endDate": "2026-01-25T19:46:00.083Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:46:00.084Z", + "endDate": "2026-01-25T19:56:01.172Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T19:56:01.172Z", + "endDate": "2026-01-25T20:01:00.077Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T20:01:00.078Z", + "endDate": "2026-01-25T20:06:00.558Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T20:06:00.559Z", + "endDate": "2026-01-25T20:10:59.931Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T20:10:59.931Z", + "endDate": "2026-01-25T20:21:00.940Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T20:21:00.941Z", + "endDate": "2026-01-25T21:51:00.992Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T20:25:10.274Z", + "endDate": "2026-01-25T20:26:23.774Z", + "value": 2.45, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-25T20:29:37.266Z", + "endDate": "2026-01-25T20:30:07.266Z", + "value": 1, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-25T20:41:02.092Z", + "endDate": "2026-01-25T20:41:14.092Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T20:43:28.794Z", + "endDate": "2026-01-25T20:45:42.294Z", + "value": 4.45, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-25T21:21:03.197Z", + "endDate": "2026-01-25T21:21:30.197Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T21:41:02.988Z", + "endDate": "2026-01-25T21:41:26.988Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T21:45:51.024Z", + "endDate": "2026-01-25T21:47:57.024Z", + "value": 4.2, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T21:51:00.992Z", + "endDate": "2026-01-25T21:51:02.355Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T21:51:02.355Z", + "endDate": "2026-01-25T21:56:01.472Z", + "value": 1, + "unit": "U/hour", + "scheduledBasalRate": 1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T21:56:01.473Z", + "endDate": "2026-01-25T21:56:01.476Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T21:56:01.477Z", + "endDate": "2026-01-25T22:01:03.680Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T22:01:03.683Z", + "endDate": "2026-01-25T22:06:02.045Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T22:01:03.68Z", + "endDate": "2026-01-25T22:01:03.683Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T22:06:02.046Z", + "endDate": "2026-01-25T22:06:02.049Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T22:06:02.05Z", + "endDate": "2026-01-25T22:26:00.549Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T22:26:00.549Z", + "endDate": "2026-01-25T23:21:00.489Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T22:46:00.458Z", + "endDate": "2026-01-25T22:46:18.458Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T22:51:01.405Z", + "endDate": "2026-01-25T22:51:11.905Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T22:56:01.484Z", + "endDate": "2026-01-25T22:56:08.984Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-25T22:59:16.214Z", + "endDate": "2026-01-25T23:01:10.214Z", + "value": 3.8, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T23:21:00.49Z", + "endDate": "2026-01-25T23:41:01.239Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T23:41:01.239Z", + "endDate": "2026-01-25T23:41:01.295Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T23:41:01.295Z", + "endDate": "2026-01-25T23:46:02.727Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T23:46:02.728Z", + "endDate": "2026-01-25T23:55:59.829Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-25T23:55:59.829Z", + "endDate": "2026-01-26T00:06:02.186Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T00:06:02.187Z", + "endDate": "2026-01-26T00:16:00.470Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T00:14:21.919Z", + "endDate": "2026-01-26T00:15:15.919Z", + "value": 1.8, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T00:16:00.47Z", + "endDate": "2026-01-26T00:26:00.461Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T00:26:00.462Z", + "endDate": "2026-01-26T00:51:09.394Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T00:31:05.609Z", + "endDate": "2026-01-26T00:31:10.609Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T00:51:09.394Z", + "endDate": "2026-01-26T00:56:02.143Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T00:56:02.143Z", + "endDate": "2026-01-26T00:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T01:00:00Z", + "endDate": "2026-01-26T01:16:02.818Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T01:06:02.006Z", + "endDate": "2026-01-26T01:06:07.006Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T01:16:02.819Z", + "endDate": "2026-01-26T01:21:06.107Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T01:21:06.107Z", + "endDate": "2026-01-26T01:25:59.897Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T01:25:59.898Z", + "endDate": "2026-01-26T01:31:02.706Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T01:31:02.706Z", + "endDate": "2026-01-26T02:26:00.169Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T01:56:05.575Z", + "endDate": "2026-01-26T01:56:11.575Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T02:01:00.809Z", + "endDate": "2026-01-26T02:01:05.809Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T02:06:01.306Z", + "endDate": "2026-01-26T02:06:06.306Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T02:21:07.179Z", + "endDate": "2026-01-26T02:21:12.179Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T02:26:00.169Z", + "endDate": "2026-01-26T02:36:01.122Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T02:36:01.122Z", + "endDate": "2026-01-26T02:36:01.125Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T02:36:01.125Z", + "endDate": "2026-01-26T02:51:00.557Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T02:44:16.861Z", + "endDate": "2026-01-26T02:48:33.361Z", + "value": 8.55, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T02:51:00.558Z", + "endDate": "2026-01-26T05:06:02.511Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T04:36:02.491Z", + "endDate": "2026-01-26T04:36:07.491Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T04:46:00.126Z", + "endDate": "2026-01-26T04:46:05.126Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T04:51:02.42Z", + "endDate": "2026-01-26T04:51:07.420Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T04:56:02.695Z", + "endDate": "2026-01-26T04:56:07.695Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:06:02.511Z", + "endDate": "2026-01-26T05:11:02.023Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:11:02.023Z", + "endDate": "2026-01-26T05:16:00.070Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:16:00.071Z", + "endDate": "2026-01-26T05:21:01.655Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:21:01.655Z", + "endDate": "2026-01-26T05:21:01.657Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:21:01.658Z", + "endDate": "2026-01-26T05:26:04.867Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:26:04.867Z", + "endDate": "2026-01-26T05:26:04.870Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:26:04.871Z", + "endDate": "2026-01-26T05:31:02.964Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:31:02.965Z", + "endDate": "2026-01-26T05:33:12.821Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-01-26T05:33:12.821Z", + "endDate": "2026-01-26T05:36:53.669Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:36:53.669Z", + "endDate": "2026-01-26T05:40:59.730Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:40:59.73Z", + "endDate": "2026-01-26T05:46:00.398Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T05:46:00.399Z", + "endDate": "2026-01-26T07:26:01.350Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T05:51:02.749Z", + "endDate": "2026-01-26T05:51:07.749Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T05:56:01.182Z", + "endDate": "2026-01-26T05:56:06.182Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:01:03.017Z", + "endDate": "2026-01-26T06:01:08.017Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:06:01.869Z", + "endDate": "2026-01-26T06:06:06.869Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:11:02.612Z", + "endDate": "2026-01-26T06:11:07.612Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:16:02.574Z", + "endDate": "2026-01-26T06:16:14.574Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:21:04.965Z", + "endDate": "2026-01-26T06:21:12.465Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:26:04.072Z", + "endDate": "2026-01-26T06:26:09.072Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:31:03.222Z", + "endDate": "2026-01-26T06:31:08.222Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:36:07.175Z", + "endDate": "2026-01-26T06:36:12.175Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:41:06.865Z", + "endDate": "2026-01-26T06:41:11.865Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:46:10.231Z", + "endDate": "2026-01-26T06:46:15.231Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T06:56:03.793Z", + "endDate": "2026-01-26T06:56:08.793Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:01:04.429Z", + "endDate": "2026-01-26T07:01:09.429Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:16:01.376Z", + "endDate": "2026-01-26T07:16:06.376Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:21:01.95Z", + "endDate": "2026-01-26T07:21:06.950Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T07:26:01.35Z", + "endDate": "2026-01-26T07:31:02.067Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T07:31:02.067Z", + "endDate": "2026-01-26T07:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:36:03.153Z", + "endDate": "2026-01-26T07:36:09.153Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:41:02.558Z", + "endDate": "2026-01-26T07:41:07.558Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:51:05.445Z", + "endDate": "2026-01-26T07:51:10.445Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T07:56:03.485Z", + "endDate": "2026-01-26T07:56:08.485Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:00:00Z", + "endDate": "2026-01-26T08:26:02.636Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T08:01:02.919Z", + "endDate": "2026-01-26T08:01:07.919Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:26:02.636Z", + "endDate": "2026-01-26T08:31:02.256Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:31:02.257Z", + "endDate": "2026-01-26T08:31:02.260Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:31:02.26Z", + "endDate": "2026-01-26T08:36:01.722Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:36:01.722Z", + "endDate": "2026-01-26T08:40:59.881Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T08:36:02.757Z", + "endDate": "2026-01-26T08:36:07.757Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:40:59.881Z", + "endDate": "2026-01-26T08:51:02.742Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:51:02.743Z", + "endDate": "2026-01-26T08:51:02.746Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:51:02.747Z", + "endDate": "2026-01-26T08:56:01.500Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T08:56:01.5Z", + "endDate": "2026-01-26T09:01:01.820Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T08:56:02.414Z", + "endDate": "2026-01-26T08:56:07.414Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:01:01.82Z", + "endDate": "2026-01-26T09:06:03.655Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:06:03.656Z", + "endDate": "2026-01-26T09:06:03.660Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:06:03.661Z", + "endDate": "2026-01-26T09:11:02.818Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:11:02.819Z", + "endDate": "2026-01-26T09:11:02.822Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:11:02.822Z", + "endDate": "2026-01-26T09:16:01.149Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:16:01.149Z", + "endDate": "2026-01-26T09:16:01.151Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:16:01.152Z", + "endDate": "2026-01-26T09:21:03.795Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:21:03.796Z", + "endDate": "2026-01-26T09:21:03.799Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:21:03.799Z", + "endDate": "2026-01-26T09:26:01.145Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:26:01.146Z", + "endDate": "2026-01-26T09:31:02.336Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:31:02.336Z", + "endDate": "2026-01-26T09:51:01.265Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T09:51:01.265Z", + "endDate": "2026-01-26T10:01:00.748Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T10:01:00.749Z", + "endDate": "2026-01-26T10:21:02.554Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T10:21:02.554Z", + "endDate": "2026-01-26T10:21:02.558Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T10:21:02.558Z", + "endDate": "2026-01-26T10:41:01.497Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T10:41:01.497Z", + "endDate": "2026-01-26T10:46:00.157Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T10:46:00.158Z", + "endDate": "2026-01-26T11:06:03.189Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T11:06:03.189Z", + "endDate": "2026-01-26T11:06:03.192Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T11:06:03.193Z", + "endDate": "2026-01-26T11:26:06.596Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T11:26:06.597Z", + "endDate": "2026-01-26T11:31:00.257Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T11:31:00.258Z", + "endDate": "2026-01-26T11:41:03.325Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T11:41:03.325Z", + "endDate": "2026-01-26T12:51:02.454Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T12:51:02.455Z", + "endDate": "2026-01-26T12:56:02.717Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T12:56:02.717Z", + "endDate": "2026-01-26T13:31:04.528Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T13:31:04.529Z", + "endDate": "2026-01-26T13:41:02.572Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T13:41:02.573Z", + "endDate": "2026-01-26T13:56:02.140Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T13:56:02.14Z", + "endDate": "2026-01-26T14:26:02.140Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T14:26:02.14Z", + "endDate": "2026-01-26T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T14:36:03.025Z", + "endDate": "2026-01-26T14:36:12.025Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T14:41:00.952Z", + "endDate": "2026-01-26T14:41:05.952Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T14:46:05.126Z", + "endDate": "2026-01-26T14:46:14.126Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T14:51:00.623Z", + "endDate": "2026-01-26T14:51:12.623Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T14:56:01.465Z", + "endDate": "2026-01-26T14:56:14.965Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T15:00:00Z", + "endDate": "2026-01-26T16:00:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:01:01.854Z", + "endDate": "2026-01-26T15:01:15.354Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:11:01.404Z", + "endDate": "2026-01-26T15:11:10.404Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:16:09.338Z", + "endDate": "2026-01-26T15:16:22.838Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:21:01.241Z", + "endDate": "2026-01-26T15:21:08.741Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:26:00.358Z", + "endDate": "2026-01-26T15:26:05.358Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:31:00.795Z", + "endDate": "2026-01-26T15:31:05.795Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:36:03.077Z", + "endDate": "2026-01-26T15:36:08.077Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:41:00.41Z", + "endDate": "2026-01-26T15:41:06.410Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:46:03.389Z", + "endDate": "2026-01-26T15:46:08.389Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:51:01.264Z", + "endDate": "2026-01-26T15:51:06.264Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T15:56:00.83Z", + "endDate": "2026-01-26T15:56:05.830Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T16:00:00Z", + "endDate": "2026-01-26T18:01:01.268Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:01:02.288Z", + "endDate": "2026-01-26T16:01:07.288Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:06:02.91Z", + "endDate": "2026-01-26T16:06:07.910Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:11:01.335Z", + "endDate": "2026-01-26T16:11:06.335Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:21:03.085Z", + "endDate": "2026-01-26T16:21:08.085Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:36:02.732Z", + "endDate": "2026-01-26T16:36:07.732Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:41:00.264Z", + "endDate": "2026-01-26T16:41:09.264Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:46:00.772Z", + "endDate": "2026-01-26T16:46:05.772Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:51:00.72Z", + "endDate": "2026-01-26T16:51:05.720Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T16:56:02.705Z", + "endDate": "2026-01-26T16:56:07.705Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:01:02.423Z", + "endDate": "2026-01-26T17:01:07.423Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:06:00.778Z", + "endDate": "2026-01-26T17:06:05.778Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:11:00.17Z", + "endDate": "2026-01-26T17:11:05.170Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:21:02.611Z", + "endDate": "2026-01-26T17:21:07.611Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:26:01.954Z", + "endDate": "2026-01-26T17:26:06.954Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:31:01.256Z", + "endDate": "2026-01-26T17:31:06.256Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:36:00.767Z", + "endDate": "2026-01-26T17:36:05.767Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:41:00.724Z", + "endDate": "2026-01-26T17:41:05.724Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:51:02.548Z", + "endDate": "2026-01-26T17:51:14.548Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T17:56:05.656Z", + "endDate": "2026-01-26T17:56:10.656Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T18:01:01.268Z", + "endDate": "2026-01-26T18:06:03.488Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T18:06:03.489Z", + "endDate": "2026-01-26T18:06:03.491Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T18:06:03.491Z", + "endDate": "2026-01-26T18:11:01.843Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T18:11:01.843Z", + "endDate": "2026-01-26T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:11:02.549Z", + "endDate": "2026-01-26T18:11:10.049Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:16:01.305Z", + "endDate": "2026-01-26T18:16:06.305Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:21:01.938Z", + "endDate": "2026-01-26T18:21:06.938Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:31:01.402Z", + "endDate": "2026-01-26T18:31:06.402Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:36:01.196Z", + "endDate": "2026-01-26T18:36:10.196Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:41:00.7Z", + "endDate": "2026-01-26T18:41:06.700Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:46:02.785Z", + "endDate": "2026-01-26T18:46:07.785Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:51:02.502Z", + "endDate": "2026-01-26T18:51:07.502Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T18:56:03.016Z", + "endDate": "2026-01-26T18:56:08.016Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T19:00:00Z", + "endDate": "2026-01-26T19:36:04.725Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T19:01:01.038Z", + "endDate": "2026-01-26T19:01:06.038Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T19:06:04.115Z", + "endDate": "2026-01-26T19:06:09.115Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T19:16:01.931Z", + "endDate": "2026-01-26T19:16:06.931Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T19:36:04.726Z", + "endDate": "2026-01-26T19:41:00.569Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T19:39:33.685Z", + "endDate": "2026-01-26T19:41:21.685Z", + "value": 3.6, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T19:41:00.569Z", + "endDate": "2026-01-26T21:56:00.135Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T19:51:07.523Z", + "endDate": "2026-01-26T19:51:28.523Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T19:52:52.027Z", + "endDate": "2026-01-26T19:56:05.527Z", + "value": 6.45, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-01-26T20:06:03.496Z", + "endDate": "2026-01-26T20:06:34.996Z", + "value": 1.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T20:11:21.483Z", + "endDate": "2026-01-26T20:11:43.983Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T20:26:02.44Z", + "endDate": "2026-01-26T20:26:21.940Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T20:41:01.008Z", + "endDate": "2026-01-26T20:41:16.008Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:01:00.193Z", + "endDate": "2026-01-26T21:01:21.193Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:06:03.091Z", + "endDate": "2026-01-26T21:06:21.091Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:11:07.009Z", + "endDate": "2026-01-26T21:11:28.009Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:16:03.129Z", + "endDate": "2026-01-26T21:16:24.129Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:21:02.669Z", + "endDate": "2026-01-26T21:21:16.169Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:31:01.569Z", + "endDate": "2026-01-26T21:31:06.569Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:36:02.456Z", + "endDate": "2026-01-26T21:36:07.456Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:46:01.825Z", + "endDate": "2026-01-26T21:46:06.825Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T21:51:04.413Z", + "endDate": "2026-01-26T21:51:11.913Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T21:56:00.135Z", + "endDate": "2026-01-26T22:01:01.936Z", + "value": 1, + "unit": "U/hour", + "scheduledBasalRate": 1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:01:01.937Z", + "endDate": "2026-01-26T22:01:01.939Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:01:01.939Z", + "endDate": "2026-01-26T22:06:00.442Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:06:00.442Z", + "endDate": "2026-01-26T22:06:00.445Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:06:00.446Z", + "endDate": "2026-01-26T22:11:00.976Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:11:00.976Z", + "endDate": "2026-01-26T22:11:00.979Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:11:00.979Z", + "endDate": "2026-01-26T22:16:03.320Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:16:03.323Z", + "endDate": "2026-01-26T22:21:05.502Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:16:03.32Z", + "endDate": "2026-01-26T22:16:03.322Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:21:05.503Z", + "endDate": "2026-01-26T22:21:05.506Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:21:05.506Z", + "endDate": "2026-01-26T22:36:01.125Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:36:01.125Z", + "endDate": "2026-01-26T22:36:01.127Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:36:01.128Z", + "endDate": "2026-01-26T22:41:02.527Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T22:41:02.527Z", + "endDate": "2026-01-26T23:36:03.874Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T22:41:03.264Z", + "endDate": "2026-01-26T22:41:12.264Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T22:46:01.619Z", + "endDate": "2026-01-26T22:46:16.619Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T22:51:05.273Z", + "endDate": "2026-01-26T22:51:20.273Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T22:56:02.907Z", + "endDate": "2026-01-26T22:56:19.407Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:01:02.536Z", + "endDate": "2026-01-26T23:01:16.036Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:06:02.54Z", + "endDate": "2026-01-26T23:06:10.040Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:11:03.026Z", + "endDate": "2026-01-26T23:11:08.026Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:16:02.581Z", + "endDate": "2026-01-26T23:16:07.581Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:21:00.5Z", + "endDate": "2026-01-26T23:21:05.500Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:26:08.394Z", + "endDate": "2026-01-26T23:26:13.394Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T23:36:03.875Z", + "endDate": "2026-01-26T23:41:02.591Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T23:41:02.592Z", + "endDate": "2026-01-26T23:41:02.594Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T23:41:02.594Z", + "endDate": "2026-01-26T23:46:02.109Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-26T23:44:38.47Z", + "endDate": "2026-01-26T23:46:15.970Z", + "value": 3.25, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T23:46:02.11Z", + "endDate": "2026-01-26T23:56:01.270Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-26T23:56:01.27Z", + "endDate": "2026-01-27T00:16:02.080Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T00:16:02.081Z", + "endDate": "2026-01-27T00:16:02.082Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T00:16:02.082Z", + "endDate": "2026-01-27T00:21:02.914Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T00:21:02.915Z", + "endDate": "2026-01-27T01:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T00:41:01.672Z", + "endDate": "2026-01-27T00:41:06.672Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T00:46:02.743Z", + "endDate": "2026-01-27T00:46:07.743Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T01:00:00Z", + "endDate": "2026-01-27T01:00:59.624Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T01:00:59.624Z", + "endDate": "2026-01-27T01:06:11.570Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T01:06:11.571Z", + "endDate": "2026-01-27T01:06:11.576Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T01:06:11.576Z", + "endDate": "2026-01-27T01:26:01.007Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T01:26:01.007Z", + "endDate": "2026-01-27T01:56:12.445Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T01:56:12.445Z", + "endDate": "2026-01-27T02:06:07.816Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T02:06:07.817Z", + "endDate": "2026-01-27T04:21:00.638Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T03:51:01.483Z", + "endDate": "2026-01-27T03:51:26.983Z", + "value": 0.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T03:56:02.972Z", + "endDate": "2026-01-27T03:56:19.472Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T04:01:02.199Z", + "endDate": "2026-01-27T04:01:12.699Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T04:06:02.597Z", + "endDate": "2026-01-27T04:06:10.097Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T04:11:00.992Z", + "endDate": "2026-01-27T04:11:06.992Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:21:00.639Z", + "endDate": "2026-01-27T04:26:04.625Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:26:04.625Z", + "endDate": "2026-01-27T04:26:04.629Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:26:04.63Z", + "endDate": "2026-01-27T04:31:01.808Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:31:01.809Z", + "endDate": "2026-01-27T04:31:01.812Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:31:01.812Z", + "endDate": "2026-01-27T04:36:00.913Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:36:00.914Z", + "endDate": "2026-01-27T04:36:00.919Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:36:00.919Z", + "endDate": "2026-01-27T04:41:02.373Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:41:02.373Z", + "endDate": "2026-01-27T04:41:02.376Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:41:02.377Z", + "endDate": "2026-01-27T04:46:02.950Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:46:02.953Z", + "endDate": "2026-01-27T04:51:02.699Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:46:02.95Z", + "endDate": "2026-01-27T04:46:02.952Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:51:02.699Z", + "endDate": "2026-01-27T04:51:02.701Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:51:02.701Z", + "endDate": "2026-01-27T04:56:00.317Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:56:00.318Z", + "endDate": "2026-01-27T04:56:00.320Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T04:56:00.32Z", + "endDate": "2026-01-27T05:01:00.156Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T05:01:00.157Z", + "endDate": "2026-01-27T05:01:00.160Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T05:01:00.16Z", + "endDate": "2026-01-27T05:21:03.001Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T05:21:03.002Z", + "endDate": "2026-01-27T05:21:03.004Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T05:21:03.005Z", + "endDate": "2026-01-27T05:41:01.903Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T05:41:01.904Z", + "endDate": "2026-01-27T05:41:01.907Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T05:41:01.907Z", + "endDate": "2026-01-27T06:01:01.184Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T06:01:01.185Z", + "endDate": "2026-01-27T06:01:01.187Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T06:01:01.187Z", + "endDate": "2026-01-27T06:21:02.247Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T06:21:02.247Z", + "endDate": "2026-01-27T06:21:02.250Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T06:21:02.251Z", + "endDate": "2026-01-27T06:41:01.588Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T06:41:01.588Z", + "endDate": "2026-01-27T06:46:01.034Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T06:46:01.034Z", + "endDate": "2026-01-27T07:06:02.935Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T07:06:02.935Z", + "endDate": "2026-01-27T07:11:02.257Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T07:11:02.258Z", + "endDate": "2026-01-27T07:21:03.875Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T07:21:03.875Z", + "endDate": "2026-01-27T07:41:02.625Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T07:41:02.625Z", + "endDate": "2026-01-27T07:46:00.518Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T07:46:00.519Z", + "endDate": "2026-01-27T07:56:01.572Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T07:56:01.573Z", + "endDate": "2026-01-27T08:16:00.147Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T08:16:00.147Z", + "endDate": "2026-01-27T08:16:00.148Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T08:16:00.149Z", + "endDate": "2026-01-27T08:26:01.149Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T08:26:01.149Z", + "endDate": "2026-01-27T08:36:00.364Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T08:36:00.364Z", + "endDate": "2026-01-27T08:46:03.487Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T08:46:03.488Z", + "endDate": "2026-01-27T08:50:59.871Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T08:50:59.872Z", + "endDate": "2026-01-27T09:16:06.607Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T09:16:06.607Z", + "endDate": "2026-01-27T09:16:06.611Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T09:16:06.611Z", + "endDate": "2026-01-27T09:21:01.118Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T09:21:01.119Z", + "endDate": "2026-01-27T10:16:00.921Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T09:41:00.031Z", + "endDate": "2026-01-27T09:41:13.531Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T09:46:00.15Z", + "endDate": "2026-01-27T09:46:10.650Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T09:51:01.047Z", + "endDate": "2026-01-27T09:51:07.047Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T09:56:00.383Z", + "endDate": "2026-01-27T09:56:05.383Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T10:01:00.851Z", + "endDate": "2026-01-27T10:01:06.851Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T10:06:01.919Z", + "endDate": "2026-01-27T10:06:06.919Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:16:00.922Z", + "endDate": "2026-01-27T10:21:06.813Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:21:06.814Z", + "endDate": "2026-01-27T10:21:06.816Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:21:06.817Z", + "endDate": "2026-01-27T10:26:01.122Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:26:01.122Z", + "endDate": "2026-01-27T10:26:01.124Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:26:01.124Z", + "endDate": "2026-01-27T10:46:00.422Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:46:00.423Z", + "endDate": "2026-01-27T10:46:00.425Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T10:46:00.426Z", + "endDate": "2026-01-27T11:06:00.421Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:06:00.422Z", + "endDate": "2026-01-27T11:06:00.426Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:06:00.426Z", + "endDate": "2026-01-27T11:16:01.550Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:16:01.55Z", + "endDate": "2026-01-27T11:31:02.134Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T11:16:02.299Z", + "endDate": "2026-01-27T11:16:07.299Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T11:21:01.315Z", + "endDate": "2026-01-27T11:21:08.815Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T11:26:00.087Z", + "endDate": "2026-01-27T11:26:05.087Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:31:02.135Z", + "endDate": "2026-01-27T11:36:01.131Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:36:01.131Z", + "endDate": "2026-01-27T11:36:01.135Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:36:01.136Z", + "endDate": "2026-01-27T11:41:00.954Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:41:00.954Z", + "endDate": "2026-01-27T11:51:01.158Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T11:41:01.718Z", + "endDate": "2026-01-27T11:41:09.218Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T11:51:01.159Z", + "endDate": "2026-01-27T12:01:01.880Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:01:01.881Z", + "endDate": "2026-01-27T12:01:01.882Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:01:01.882Z", + "endDate": "2026-01-27T12:06:00.579Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:06:00.579Z", + "endDate": "2026-01-27T12:46:00.624Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T12:21:00.854Z", + "endDate": "2026-01-27T12:21:05.854Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T12:26:01.974Z", + "endDate": "2026-01-27T12:26:06.974Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T12:31:04.228Z", + "endDate": "2026-01-27T12:31:09.228Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T12:36:00.226Z", + "endDate": "2026-01-27T12:36:05.226Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:46:00.624Z", + "endDate": "2026-01-27T12:51:03.442Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:51:03.443Z", + "endDate": "2026-01-27T12:51:03.446Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:51:03.446Z", + "endDate": "2026-01-27T12:56:03.116Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:56:03.117Z", + "endDate": "2026-01-27T12:56:03.119Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T12:56:03.12Z", + "endDate": "2026-01-27T13:01:00.388Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:01:00.388Z", + "endDate": "2026-01-27T13:01:00.389Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:01:00.39Z", + "endDate": "2026-01-27T13:06:01.905Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:06:01.905Z", + "endDate": "2026-01-27T13:06:01.907Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:06:01.908Z", + "endDate": "2026-01-27T13:11:01.861Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:11:01.862Z", + "endDate": "2026-01-27T13:11:01.864Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:11:01.865Z", + "endDate": "2026-01-27T13:16:00.153Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:16:00.153Z", + "endDate": "2026-01-27T13:21:01.301Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:21:01.302Z", + "endDate": "2026-01-27T13:26:01.242Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:26:01.242Z", + "endDate": "2026-01-27T13:51:00.057Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T13:46:02.762Z", + "endDate": "2026-01-27T13:46:07.762Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T13:51:00.058Z", + "endDate": "2026-01-27T14:06:03.940Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T14:06:03.94Z", + "endDate": "2026-01-27T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:10:59.987Z", + "endDate": "2026-01-27T14:11:07.487Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:16:02.976Z", + "endDate": "2026-01-27T14:16:07.976Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:21:00.055Z", + "endDate": "2026-01-27T14:21:07.555Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:26:02.368Z", + "endDate": "2026-01-27T14:26:17.368Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:31:01.141Z", + "endDate": "2026-01-27T14:31:10.141Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:36:02.345Z", + "endDate": "2026-01-27T14:36:07.345Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:41:00.533Z", + "endDate": "2026-01-27T14:41:05.533Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:46:00.777Z", + "endDate": "2026-01-27T14:46:05.777Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T14:51:00.765Z", + "endDate": "2026-01-27T14:51:05.765Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:00:00Z", + "endDate": "2026-01-27T15:01:00.608Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:01:00.608Z", + "endDate": "2026-01-27T15:06:00.727Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:06:00.728Z", + "endDate": "2026-01-27T15:06:00.731Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:06:00.732Z", + "endDate": "2026-01-27T15:11:00.146Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:11:00.146Z", + "endDate": "2026-01-27T15:11:00.148Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:11:00.149Z", + "endDate": "2026-01-27T15:16:00.165Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T15:16:00.165Z", + "endDate": "2026-01-27T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T15:16:00.916Z", + "endDate": "2026-01-27T15:16:05.916Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T15:41:06.123Z", + "endDate": "2026-01-27T15:41:11.123Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T15:46:01.429Z", + "endDate": "2026-01-27T15:46:06.429Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T15:51:01.554Z", + "endDate": "2026-01-27T15:51:06.554Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T15:56:01.517Z", + "endDate": "2026-01-27T15:56:06.517Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:00:00Z", + "endDate": "2026-01-27T16:15:59.597Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:01:01.938Z", + "endDate": "2026-01-27T16:01:06.938Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:06:02.154Z", + "endDate": "2026-01-27T16:06:07.154Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:11:02.233Z", + "endDate": "2026-01-27T16:11:07.233Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:15:59.598Z", + "endDate": "2026-01-27T16:21:00.292Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:21:00.292Z", + "endDate": "2026-01-27T16:46:03.076Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:21:01.041Z", + "endDate": "2026-01-27T16:21:06.041Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:26:00.282Z", + "endDate": "2026-01-27T16:26:05.282Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:36:00.438Z", + "endDate": "2026-01-27T16:36:05.438Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:41:02.436Z", + "endDate": "2026-01-27T16:41:07.436Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:46:03.077Z", + "endDate": "2026-01-27T16:50:59.922Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:50:59.923Z", + "endDate": "2026-01-27T16:50:59.927Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:50:59.928Z", + "endDate": "2026-01-27T16:56:05.824Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T16:56:05.824Z", + "endDate": "2026-01-27T17:11:04.449Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T16:56:06.722Z", + "endDate": "2026-01-27T16:56:11.722Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T17:01:02.882Z", + "endDate": "2026-01-27T17:01:16.382Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T17:06:02.567Z", + "endDate": "2026-01-27T17:06:25.067Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:11:04.449Z", + "endDate": "2026-01-27T17:15:59.999Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:16:00.001Z", + "endDate": "2026-01-27T17:36:06.066Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:16:00Z", + "endDate": "2026-01-27T17:16:00.001Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:36:06.067Z", + "endDate": "2026-01-27T17:36:06.070Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:36:06.07Z", + "endDate": "2026-01-27T17:56:00.777Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:56:00.778Z", + "endDate": "2026-01-27T17:56:00.781Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T17:56:00.781Z", + "endDate": "2026-01-27T18:06:00.301Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T18:04:48.962Z", + "endDate": "2026-01-27T18:07:18.962Z", + "value": 5, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T18:06:00.302Z", + "endDate": "2026-01-27T18:41:01.658Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T18:16:01.693Z", + "endDate": "2026-01-27T18:16:22.693Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T18:26:00.216Z", + "endDate": "2026-01-27T18:26:13.716Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T18:31:01.282Z", + "endDate": "2026-01-27T18:31:10.282Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T18:36:00.7Z", + "endDate": "2026-01-27T18:36:05.700Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T18:37:19.434Z", + "endDate": "2026-01-27T18:39:47.934Z", + "value": 4.95, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T18:41:01.658Z", + "endDate": "2026-01-27T18:46:01.559Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T18:46:01.56Z", + "endDate": "2026-01-27T18:51:04.706Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T18:51:04.706Z", + "endDate": "2026-01-27T18:56:00.125Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T18:56:00.126Z", + "endDate": "2026-01-27T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T19:00:00Z", + "endDate": "2026-01-27T19:36:02.833Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T19:36:02.833Z", + "endDate": "2026-01-27T19:41:01.477Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T19:41:01.478Z", + "endDate": "2026-01-27T19:41:01.481Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T19:41:01.481Z", + "endDate": "2026-01-27T19:46:01.253Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T19:46:01.254Z", + "endDate": "2026-01-27T20:01:03.691Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:01:03.691Z", + "endDate": "2026-01-27T20:06:00.553Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:06:00.553Z", + "endDate": "2026-01-27T20:06:00.554Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:06:00.555Z", + "endDate": "2026-01-27T20:16:01.943Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:16:01.944Z", + "endDate": "2026-01-27T20:25:59.932Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T20:21:00.777Z", + "endDate": "2026-01-27T20:21:05.777Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:25:59.932Z", + "endDate": "2026-01-27T20:31:00.184Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:31:00.185Z", + "endDate": "2026-01-27T20:31:00.188Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:31:00.188Z", + "endDate": "2026-01-27T20:36:02.272Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:36:02.273Z", + "endDate": "2026-01-27T20:36:02.275Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:36:02.275Z", + "endDate": "2026-01-27T20:56:00.519Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T20:50:47.421Z", + "endDate": "2026-01-27T20:51:12.921Z", + "value": 0.85, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:56:00.52Z", + "endDate": "2026-01-27T20:56:00.545Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T20:56:00.546Z", + "endDate": "2026-01-27T21:16:02.522Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T21:03:42.304Z", + "endDate": "2026-01-27T21:04:12.304Z", + "value": 1, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T21:16:02.522Z", + "endDate": "2026-01-27T22:00:00.000Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T22:00:00Z", + "endDate": "2026-01-27T22:31:01.974Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T22:01:00.514Z", + "endDate": "2026-01-27T22:01:53.014Z", + "value": 1.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T22:06:01.436Z", + "endDate": "2026-01-27T22:06:31.436Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T22:11:01.893Z", + "endDate": "2026-01-27T22:11:19.893Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T22:16:02.962Z", + "endDate": "2026-01-27T22:16:14.962Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-27T22:21:02.667Z", + "endDate": "2026-01-27T22:21:07.667Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T22:31:01.974Z", + "endDate": "2026-01-27T22:51:02.133Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T22:51:02.134Z", + "endDate": "2026-01-27T22:51:02.137Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T22:51:02.138Z", + "endDate": "2026-01-27T23:11:03.405Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T23:11:03.405Z", + "endDate": "2026-01-27T23:11:03.408Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T23:11:03.409Z", + "endDate": "2026-01-27T23:31:00.971Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T23:31:00.971Z", + "endDate": "2026-01-27T23:31:00.974Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T23:31:00.974Z", + "endDate": "2026-01-27T23:51:03.420Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T23:51:03.421Z", + "endDate": "2026-01-27T23:51:03.423Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-27T23:51:03.424Z", + "endDate": "2026-01-28T00:11:08.972Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-28T00:11:08.973Z", + "endDate": "2026-01-28T00:11:08.974Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-28T00:11:08.975Z", + "endDate": "2026-01-28T00:31:00.012Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-28T00:31:00.013Z", + "endDate": "2026-01-28T00:31:00.017Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-01-28T00:31:00.017Z", + "endDate": "2026-01-28T00:51:00.586Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-01-28T01:00:59.788Z", + "endDate": "2026-01-28T01:01:20.788Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T02:10:59.085Z", + "endDate": "2026-02-02T02:16:00.536Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T02:16:00.536Z", + "endDate": "2026-02-02T02:21:00.493Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T02:21:00.494Z", + "endDate": "2026-02-02T02:36:00.082Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T02:36:00.082Z", + "endDate": "2026-02-02T02:56:00.455Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T02:56:00.456Z", + "endDate": "2026-02-02T02:56:00.458Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T02:56:00.459Z", + "endDate": "2026-02-02T03:00:59.472Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T03:00:59.473Z", + "endDate": "2026-02-02T03:11:06.629Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T03:11:06.629Z", + "endDate": "2026-02-02T03:26:01.858Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T03:26:01.858Z", + "endDate": "2026-02-02T03:35:58.759Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T03:35:58.759Z", + "endDate": "2026-02-02T03:46:00.179Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T03:46:00.18Z", + "endDate": "2026-02-02T04:36:00.100Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T04:31:00.045Z", + "endDate": "2026-02-02T04:31:13.545Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T04:36:00.101Z", + "endDate": "2026-02-02T04:41:00.776Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T04:41:00.776Z", + "endDate": "2026-02-02T04:55:58.529Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T04:41:01.647Z", + "endDate": "2026-02-02T04:41:06.647Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T04:46:01.284Z", + "endDate": "2026-02-02T04:46:07.284Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T04:55:58.529Z", + "endDate": "2026-02-02T05:00:59.082Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T05:00:59.083Z", + "endDate": "2026-02-02T05:00:59.089Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T05:00:59.09Z", + "endDate": "2026-02-02T05:20:58.891Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T05:20:58.891Z", + "endDate": "2026-02-02T05:20:58.892Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T05:20:58.892Z", + "endDate": "2026-02-02T05:41:01.658Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T05:41:01.659Z", + "endDate": "2026-02-02T05:41:01.665Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T05:41:01.666Z", + "endDate": "2026-02-02T06:00:58.911Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T06:00:58.911Z", + "endDate": "2026-02-02T06:00:58.913Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T06:00:58.914Z", + "endDate": "2026-02-02T06:21:01.073Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T06:21:01.074Z", + "endDate": "2026-02-02T06:21:01.080Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T06:21:01.081Z", + "endDate": "2026-02-02T06:41:01.407Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T06:41:01.407Z", + "endDate": "2026-02-02T06:41:01.408Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T06:41:01.409Z", + "endDate": "2026-02-02T07:01:00.046Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T07:01:00.047Z", + "endDate": "2026-02-02T07:01:00.053Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T07:01:00.054Z", + "endDate": "2026-02-02T07:21:01.253Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T07:21:01.253Z", + "endDate": "2026-02-02T07:21:01.255Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T07:21:01.256Z", + "endDate": "2026-02-02T07:40:59.877Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T07:40:59.878Z", + "endDate": "2026-02-02T07:40:59.881Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T07:40:59.881Z", + "endDate": "2026-02-02T08:00:58.836Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T08:00:58.836Z", + "endDate": "2026-02-02T08:00:58.839Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T08:00:58.84Z", + "endDate": "2026-02-02T08:20:58.861Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T08:20:58.861Z", + "endDate": "2026-02-02T08:20:58.863Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T08:20:58.863Z", + "endDate": "2026-02-02T08:50:58.863Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T08:50:58.863Z", + "endDate": "2026-02-02T08:56:00.911Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T08:56:00.912Z", + "endDate": "2026-02-02T09:16:01.345Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T09:16:01.345Z", + "endDate": "2026-02-02T09:21:01.638Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T09:21:01.638Z", + "endDate": "2026-02-02T09:41:03.236Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T09:41:03.237Z", + "endDate": "2026-02-02T09:41:03.240Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T09:41:03.24Z", + "endDate": "2026-02-02T09:45:58.885Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T09:45:58.885Z", + "endDate": "2026-02-02T09:55:58.545Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T09:55:58.546Z", + "endDate": "2026-02-02T10:15:58.968Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T10:15:58.968Z", + "endDate": "2026-02-02T10:15:58.970Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T10:15:58.971Z", + "endDate": "2026-02-02T10:25:58.911Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T10:25:58.911Z", + "endDate": "2026-02-02T10:36:00.657Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T10:36:00.657Z", + "endDate": "2026-02-02T10:41:00.960Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T10:41:00.961Z", + "endDate": "2026-02-02T11:41:00.542Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T11:41:00.542Z", + "endDate": "2026-02-02T12:01:00.581Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T12:01:00.582Z", + "endDate": "2026-02-02T12:01:00.586Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T12:01:00.586Z", + "endDate": "2026-02-02T12:21:00.913Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T12:21:00.914Z", + "endDate": "2026-02-02T12:21:00.917Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T12:21:00.918Z", + "endDate": "2026-02-02T12:45:59.417Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T12:45:59.418Z", + "endDate": "2026-02-02T12:45:59.421Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T12:45:59.421Z", + "endDate": "2026-02-02T13:05:59.577Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T13:05:59.577Z", + "endDate": "2026-02-02T13:05:59.578Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T13:05:59.578Z", + "endDate": "2026-02-02T13:25:59.368Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T13:25:59.369Z", + "endDate": "2026-02-02T13:25:59.371Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T13:25:59.372Z", + "endDate": "2026-02-02T13:46:02.772Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T13:46:02.772Z", + "endDate": "2026-02-02T13:46:02.775Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T13:46:02.776Z", + "endDate": "2026-02-02T14:06:00.286Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T14:06:00.286Z", + "endDate": "2026-02-02T14:06:00.291Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T14:06:00.291Z", + "endDate": "2026-02-02T14:25:59.732Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T14:25:59.733Z", + "endDate": "2026-02-02T14:25:59.880Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T14:25:59.88Z", + "endDate": "2026-02-02T14:41:01.576Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T14:41:01.577Z", + "endDate": "2026-02-02T15:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T14:51:04.598Z", + "endDate": "2026-02-02T14:51:39.098Z", + "value": 1.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T14:56:01.308Z", + "endDate": "2026-02-02T14:56:25.308Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:00:00Z", + "endDate": "2026-02-02T15:10:59.320Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T15:01:01.73Z", + "endDate": "2026-02-02T15:01:10.730Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T15:05:58.655Z", + "endDate": "2026-02-02T15:06:03.655Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:10:59.32Z", + "endDate": "2026-02-02T15:16:00.177Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:16:00.178Z", + "endDate": "2026-02-02T15:16:00.181Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:16:00.181Z", + "endDate": "2026-02-02T15:35:58.570Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:35:58.571Z", + "endDate": "2026-02-02T15:35:58.583Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:35:58.583Z", + "endDate": "2026-02-02T15:56:00.414Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:56:00.415Z", + "endDate": "2026-02-02T15:56:00.427Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T15:56:00.427Z", + "endDate": "2026-02-02T16:05:59.886Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:05:59.886Z", + "endDate": "2026-02-02T16:21:04.562Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T16:06:00.558Z", + "endDate": "2026-02-02T16:06:05.558Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T16:11:01.555Z", + "endDate": "2026-02-02T16:11:06.555Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:21:04.563Z", + "endDate": "2026-02-02T16:25:59.780Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:25:59.782Z", + "endDate": "2026-02-02T16:45:59.035Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:25:59.78Z", + "endDate": "2026-02-02T16:25:59.781Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:45:59.036Z", + "endDate": "2026-02-02T16:45:59.161Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:45:59.162Z", + "endDate": "2026-02-02T16:56:00.140Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T16:56:00.14Z", + "endDate": "2026-02-02T17:40:08.656Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T17:06:00.705Z", + "endDate": "2026-02-02T17:06:14.205Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T17:15:59.003Z", + "endDate": "2026-02-02T17:16:04.003Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T17:40:08.657Z", + "endDate": "2026-02-02T17:45:06.109Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T17:45:06.116Z", + "endDate": "2026-02-02T17:50:06.038Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T17:45:06.11Z", + "endDate": "2026-02-02T17:45:06.116Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T17:50:06.039Z", + "endDate": "2026-02-02T18:00:06.713Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T17:50:06.791Z", + "endDate": "2026-02-02T17:50:17.291Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T17:55:09.647Z", + "endDate": "2026-02-02T17:55:14.647Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:00:06.714Z", + "endDate": "2026-02-02T18:05:07.134Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:05:07.134Z", + "endDate": "2026-02-02T18:20:06.065Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T18:05:07.748Z", + "endDate": "2026-02-02T18:05:12.748Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T18:10:06.866Z", + "endDate": "2026-02-02T18:10:18.866Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T18:15:06.197Z", + "endDate": "2026-02-02T18:15:21.197Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:20:06.065Z", + "endDate": "2026-02-02T18:35:07.074Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:35:07.075Z", + "endDate": "2026-02-02T18:35:07.087Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:35:07.087Z", + "endDate": "2026-02-02T18:40:06.729Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:40:06.729Z", + "endDate": "2026-02-02T18:40:06.730Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T18:40:06.731Z", + "endDate": "2026-02-02T19:00:06.004Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:00:06.005Z", + "endDate": "2026-02-02T19:00:06.008Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:00:06.009Z", + "endDate": "2026-02-02T19:05:06.055Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:05:06.056Z", + "endDate": "2026-02-02T19:15:07.272Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T19:05:06.568Z", + "endDate": "2026-02-02T19:05:15.568Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T19:10:09.016Z", + "endDate": "2026-02-02T19:10:15.016Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:15:07.272Z", + "endDate": "2026-02-02T19:20:07.665Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:20:07.666Z", + "endDate": "2026-02-02T19:25:05.519Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:25:05.519Z", + "endDate": "2026-02-02T19:45:09.400Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:45:09.402Z", + "endDate": "2026-02-02T19:50:07.465Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:45:09.4Z", + "endDate": "2026-02-02T19:45:09.401Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T19:50:07.466Z", + "endDate": "2026-02-02T20:15:11.865Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T20:05:07.417Z", + "endDate": "2026-02-02T20:06:55.417Z", + "value": 3.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T20:10:06.898Z", + "endDate": "2026-02-02T20:11:02.398Z", + "value": 1.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T20:15:11.865Z", + "endDate": "2026-02-02T20:20:11.272Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T20:20:11.273Z", + "endDate": "2026-02-02T20:35:08.341Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T20:25:11.039Z", + "endDate": "2026-02-02T20:25:36.539Z", + "value": 0.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T20:30:08.63Z", + "endDate": "2026-02-02T20:30:25.130Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T20:35:08.341Z", + "endDate": "2026-02-02T20:55:06.338Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T20:55:06.339Z", + "endDate": "2026-02-02T20:55:06.342Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T20:55:06.342Z", + "endDate": "2026-02-02T21:10:08.772Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:10:08.772Z", + "endDate": "2026-02-02T21:10:08.774Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:10:08.774Z", + "endDate": "2026-02-02T21:15:06.708Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:15:06.709Z", + "endDate": "2026-02-02T21:15:06.711Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:15:06.712Z", + "endDate": "2026-02-02T21:30:07.209Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:30:07.211Z", + "endDate": "2026-02-02T21:50:06.829Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:30:07.21Z", + "endDate": "2026-02-02T21:30:07.211Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T21:40:06.271Z", + "endDate": "2026-02-02T21:40:22.771Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T21:45:08.986Z", + "endDate": "2026-02-02T21:45:16.486Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:50:06.833Z", + "endDate": "2026-02-02T22:00:11.834Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T21:50:06.83Z", + "endDate": "2026-02-02T21:50:06.833Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T21:55:06.355Z", + "endDate": "2026-02-02T21:55:11.355Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:00:11.834Z", + "endDate": "2026-02-02T22:00:11.835Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:00:11.836Z", + "endDate": "2026-02-02T22:15:07.663Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:00:13.005Z", + "endDate": "2026-02-02T22:00:20.505Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:05:06.317Z", + "endDate": "2026-02-02T22:05:24.317Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:10:07.132Z", + "endDate": "2026-02-02T22:10:17.632Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:15:07.663Z", + "endDate": "2026-02-02T22:15:07.665Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:15:07.666Z", + "endDate": "2026-02-02T22:30:08.008Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:30:08.009Z", + "endDate": "2026-02-02T22:30:08.010Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:30:08.011Z", + "endDate": "2026-02-02T22:50:08.687Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:30:09.137Z", + "endDate": "2026-02-02T22:30:14.137Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:35:09.907Z", + "endDate": "2026-02-02T22:35:18.907Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:40:07.452Z", + "endDate": "2026-02-02T22:40:23.952Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:45:18.632Z", + "endDate": "2026-02-02T22:45:41.132Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:50:08.687Z", + "endDate": "2026-02-02T22:50:08.691Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:50:08.691Z", + "endDate": "2026-02-02T22:55:06.578Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T22:50:09.796Z", + "endDate": "2026-02-02T22:50:17.296Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:55:06.578Z", + "endDate": "2026-02-02T22:55:06.586Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T22:55:06.586Z", + "endDate": "2026-02-02T23:15:18.775Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T23:15:18.776Z", + "endDate": "2026-02-02T23:15:18.777Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T23:15:18.777Z", + "endDate": "2026-02-02T23:25:09.471Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-02T23:25:09.472Z", + "endDate": "2026-02-03T00:00:07.023Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:25:10.659Z", + "endDate": "2026-02-02T23:25:24.159Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:30:06.775Z", + "endDate": "2026-02-02T23:30:45.775Z", + "value": 1.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:35:09.237Z", + "endDate": "2026-02-02T23:35:30.237Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:40:07.172Z", + "endDate": "2026-02-02T23:40:20.672Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:45:08.629Z", + "endDate": "2026-02-02T23:45:19.129Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:50:06.623Z", + "endDate": "2026-02-02T23:50:35.123Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-02T23:55:07.6Z", + "endDate": "2026-02-02T23:55:46.600Z", + "value": 1.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T00:00:07.023Z", + "endDate": "2026-02-03T00:05:06.768Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T00:05:06.768Z", + "endDate": "2026-02-03T00:05:06.771Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T00:05:06.771Z", + "endDate": "2026-02-03T00:10:08.471Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T00:10:08.471Z", + "endDate": "2026-02-03T00:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T00:10:09.4Z", + "endDate": "2026-02-03T00:10:14.400Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T00:15:08.172Z", + "endDate": "2026-02-03T00:15:24.672Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T00:20:06.901Z", + "endDate": "2026-02-03T00:20:18.901Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T00:25:06.592Z", + "endDate": "2026-02-03T00:25:20.092Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T00:30:06.494Z", + "endDate": "2026-02-03T00:30:16.994Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:00:00Z", + "endDate": "2026-02-03T01:00:05.979Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:00:05.979Z", + "endDate": "2026-02-03T01:05:07.757Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:05:07.758Z", + "endDate": "2026-02-03T01:05:07.762Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:05:07.762Z", + "endDate": "2026-02-03T01:10:07.149Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:10:07.15Z", + "endDate": "2026-02-03T01:10:43.878Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T01:10:07.795Z", + "endDate": "2026-02-03T01:10:18.295Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:10:43.878Z", + "endDate": "2026-02-03T01:15:06.961Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:15:06.962Z", + "endDate": "2026-02-03T01:15:08.053Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:15:08.053Z", + "endDate": "2026-02-03T01:25:07.076Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:25:07.077Z", + "endDate": "2026-02-03T01:40:15.958Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T01:25:07.989Z", + "endDate": "2026-02-03T01:25:28.989Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T01:30:08.729Z", + "endDate": "2026-02-03T01:30:44.729Z", + "value": 1.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T01:35:07.772Z", + "endDate": "2026-02-03T01:35:12.772Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:40:15.958Z", + "endDate": "2026-02-03T01:50:09.409Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:50:09.409Z", + "endDate": "2026-02-03T01:50:09.412Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:50:09.412Z", + "endDate": "2026-02-03T01:55:06.760Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T01:55:06.761Z", + "endDate": "2026-02-03T02:00:07.993Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T01:55:07.707Z", + "endDate": "2026-02-03T01:55:27.207Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:00:07.993Z", + "endDate": "2026-02-03T02:05:06.894Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:05:06.895Z", + "endDate": "2026-02-03T02:05:06.897Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:05:06.898Z", + "endDate": "2026-02-03T02:20:21.748Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:20:21.748Z", + "endDate": "2026-02-03T02:30:06.920Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T02:20:23.082Z", + "endDate": "2026-02-03T02:20:30.582Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T02:25:09.616Z", + "endDate": "2026-02-03T02:25:20.116Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:30:06.92Z", + "endDate": "2026-02-03T02:50:08.019Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T02:45:04.908Z", + "endDate": "2026-02-03T02:46:42.408Z", + "value": 3.25, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:50:08.019Z", + "endDate": "2026-02-03T02:55:07.759Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T02:50:08.696Z", + "endDate": "2026-02-03T02:50:22.196Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T02:55:07.76Z", + "endDate": "2026-02-03T03:15:08.777Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T03:15:08.777Z", + "endDate": "2026-02-03T03:15:08.780Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T03:15:08.78Z", + "endDate": "2026-02-03T03:35:08.170Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T03:35:08.171Z", + "endDate": "2026-02-03T03:35:08.174Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T03:35:08.175Z", + "endDate": "2026-02-03T03:55:10.584Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T03:55:10.584Z", + "endDate": "2026-02-03T03:55:10.589Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T03:55:10.589Z", + "endDate": "2026-02-03T04:05:09.036Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:05:09.037Z", + "endDate": "2026-02-03T04:05:09.039Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:05:09.039Z", + "endDate": "2026-02-03T04:10:07.712Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:10:07.713Z", + "endDate": "2026-02-03T04:10:07.715Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:10:07.715Z", + "endDate": "2026-02-03T04:30:08.845Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:30:08.845Z", + "endDate": "2026-02-03T04:30:08.847Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:30:08.848Z", + "endDate": "2026-02-03T04:50:08.978Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:50:08.979Z", + "endDate": "2026-02-03T04:50:09.015Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T04:50:09.015Z", + "endDate": "2026-02-03T05:00:08.961Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:00:08.961Z", + "endDate": "2026-02-03T05:05:10.891Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:05:10.891Z", + "endDate": "2026-02-03T05:25:08.933Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:25:08.934Z", + "endDate": "2026-02-03T05:30:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:30:00Z", + "endDate": "2026-02-03T05:35:08.479Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:35:08.48Z", + "endDate": "2026-02-03T05:40:09.115Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:40:09.116Z", + "endDate": "2026-02-03T05:45:08.672Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:45:08.673Z", + "endDate": "2026-02-03T05:50:09.432Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T05:50:09.432Z", + "endDate": "2026-02-03T06:00:06.876Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T06:00:06.877Z", + "endDate": "2026-02-03T06:10:09.230Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T06:10:09.231Z", + "endDate": "2026-02-03T06:55:06.634Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T06:55:06.634Z", + "endDate": "2026-02-03T07:00:07.307Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:00:07.307Z", + "endDate": "2026-02-03T07:15:09.431Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T07:05:07.66Z", + "endDate": "2026-02-03T07:05:36.160Z", + "value": 0.95, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T07:10:08.535Z", + "endDate": "2026-02-03T07:10:13.535Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:15:09.431Z", + "endDate": "2026-02-03T07:35:07.611Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:35:07.611Z", + "endDate": "2026-02-03T07:40:09.549Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T07:35:08.227Z", + "endDate": "2026-02-03T07:35:13.227Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:40:09.55Z", + "endDate": "2026-02-03T07:45:07.872Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:45:07.872Z", + "endDate": "2026-02-03T07:45:07.875Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:45:07.875Z", + "endDate": "2026-02-03T07:50:10.530Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T07:50:10.531Z", + "endDate": "2026-02-03T08:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:00:00Z", + "endDate": "2026-02-03T08:05:09.619Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T08:00:07.84Z", + "endDate": "2026-02-03T08:00:12.840Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:05:09.62Z", + "endDate": "2026-02-03T08:10:08.805Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:10:08.805Z", + "endDate": "2026-02-03T08:10:08.807Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:10:08.808Z", + "endDate": "2026-02-03T08:15:11.913Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:15:11.913Z", + "endDate": "2026-02-03T08:15:11.914Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:15:11.914Z", + "endDate": "2026-02-03T08:20:09.770Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:20:09.773Z", + "endDate": "2026-02-03T08:30:09.458Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:20:09.77Z", + "endDate": "2026-02-03T08:20:09.772Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:30:09.459Z", + "endDate": "2026-02-03T08:40:10.816Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T08:35:09.894Z", + "endDate": "2026-02-03T08:35:14.894Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T08:40:10.816Z", + "endDate": "2026-02-03T09:00:09.014Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T09:00:09.014Z", + "endDate": "2026-02-03T09:00:09.016Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T09:00:09.016Z", + "endDate": "2026-02-03T09:20:07.523Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T09:20:07.524Z", + "endDate": "2026-02-03T09:20:07.527Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T09:20:07.528Z", + "endDate": "2026-02-03T09:40:08.263Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T09:40:08.263Z", + "endDate": "2026-02-03T10:10:09.771Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T10:10:09.771Z", + "endDate": "2026-02-03T10:25:12.128Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T10:25:12.129Z", + "endDate": "2026-02-03T10:40:09.876Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T10:40:09.877Z", + "endDate": "2026-02-03T10:45:09.135Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T10:45:09.135Z", + "endDate": "2026-02-03T11:10:07.062Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T11:10:07.062Z", + "endDate": "2026-02-03T11:25:09.041Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T11:25:09.042Z", + "endDate": "2026-02-03T11:45:08.242Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T11:45:08.243Z", + "endDate": "2026-02-03T11:50:08.500Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T11:50:08.5Z", + "endDate": "2026-02-03T12:00:08.943Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T11:55:08.833Z", + "endDate": "2026-02-03T11:55:22.333Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:00:08.944Z", + "endDate": "2026-02-03T12:05:08.672Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:05:08.673Z", + "endDate": "2026-02-03T12:15:09.324Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T12:05:09.379Z", + "endDate": "2026-02-03T12:05:14.379Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T12:10:10.234Z", + "endDate": "2026-02-03T12:10:15.234Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:15:09.325Z", + "endDate": "2026-02-03T12:35:08.960Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:35:08.962Z", + "endDate": "2026-02-03T12:55:09.994Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:35:08.96Z", + "endDate": "2026-02-03T12:35:08.961Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:55:09.994Z", + "endDate": "2026-02-03T12:55:09.996Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T12:55:09.997Z", + "endDate": "2026-02-03T13:15:10.271Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T13:15:10.271Z", + "endDate": "2026-02-03T13:25:11.974Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T13:25:11.975Z", + "endDate": "2026-02-03T13:35:12.395Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T13:35:12.395Z", + "endDate": "2026-02-03T14:15:07.612Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T13:55:08.277Z", + "endDate": "2026-02-03T13:55:20.277Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T14:00:10.364Z", + "endDate": "2026-02-03T14:00:17.864Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T14:05:09.68Z", + "endDate": "2026-02-03T14:05:18.680Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:15:07.613Z", + "endDate": "2026-02-03T14:25:10.533Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:25:10.533Z", + "endDate": "2026-02-03T14:25:10.536Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:25:10.537Z", + "endDate": "2026-02-03T14:30:12.034Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:30:12.035Z", + "endDate": "2026-02-03T14:30:12.037Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:30:12.037Z", + "endDate": "2026-02-03T14:35:10.429Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:35:10.433Z", + "endDate": "2026-02-03T14:45:08.220Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:35:10.43Z", + "endDate": "2026-02-03T14:35:10.432Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:45:08.221Z", + "endDate": "2026-02-03T14:50:08.483Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T14:45:09.09Z", + "endDate": "2026-02-03T14:45:14.090Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:50:08.483Z", + "endDate": "2026-02-03T14:55:08.185Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:55:08.185Z", + "endDate": "2026-02-03T14:55:08.186Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T14:55:08.187Z", + "endDate": "2026-02-03T15:00:10.340Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T15:00:10.34Z", + "endDate": "2026-02-03T15:15:07.940Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T15:00:11.089Z", + "endDate": "2026-02-03T15:00:18.589Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T15:05:08.712Z", + "endDate": "2026-02-03T15:05:25.212Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T15:10:09.827Z", + "endDate": "2026-02-03T15:10:21.827Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T15:15:07.941Z", + "endDate": "2026-02-03T15:25:08.515Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T15:25:08.515Z", + "endDate": "2026-02-03T15:35:10.100Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T15:35:10.101Z", + "endDate": "2026-02-03T15:45:08.562Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T15:45:08.562Z", + "endDate": "2026-02-03T15:50:09.831Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T15:50:09.831Z", + "endDate": "2026-02-03T16:00:10.698Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:00:10.699Z", + "endDate": "2026-02-03T16:05:07.863Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T16:00:11.343Z", + "endDate": "2026-02-03T16:00:16.343Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:05:07.863Z", + "endDate": "2026-02-03T16:15:10.581Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:15:10.582Z", + "endDate": "2026-02-03T16:15:10.583Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:15:10.584Z", + "endDate": "2026-02-03T16:20:12.481Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:20:12.481Z", + "endDate": "2026-02-03T16:30:08.598Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T16:25:08.567Z", + "endDate": "2026-02-03T16:25:13.567Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:30:08.598Z", + "endDate": "2026-02-03T16:35:08.619Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T16:35:08.62Z", + "endDate": "2026-02-03T17:15:10.721Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T16:40:09.105Z", + "endDate": "2026-02-03T16:40:22.605Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T16:45:08.288Z", + "endDate": "2026-02-03T16:45:13.288Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T16:50:11.444Z", + "endDate": "2026-02-03T16:50:16.444Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T17:00:08.318Z", + "endDate": "2026-02-03T17:00:13.318Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:15:10.722Z", + "endDate": "2026-02-03T17:20:09.445Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:20:09.445Z", + "endDate": "2026-02-03T17:20:09.447Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:20:09.448Z", + "endDate": "2026-02-03T17:25:10.711Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:25:10.711Z", + "endDate": "2026-02-03T17:25:10.713Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:25:10.714Z", + "endDate": "2026-02-03T17:30:11.163Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:30:11.164Z", + "endDate": "2026-02-03T17:35:09.625Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:35:09.625Z", + "endDate": "2026-02-03T17:40:11.191Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T17:40:11.192Z", + "endDate": "2026-02-03T18:20:09.951Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T17:45:09.084Z", + "endDate": "2026-02-03T17:45:14.084Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T17:50:10.89Z", + "endDate": "2026-02-03T17:50:15.890Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T18:00:11.099Z", + "endDate": "2026-02-03T18:00:16.099Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T18:05:10.898Z", + "endDate": "2026-02-03T18:05:21.398Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T18:10:11.369Z", + "endDate": "2026-02-03T18:10:24.869Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T18:15:09.458Z", + "endDate": "2026-02-03T18:15:19.958Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T18:20:09.952Z", + "endDate": "2026-02-03T18:40:10.011Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T18:40:10.011Z", + "endDate": "2026-02-03T18:40:10.012Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T18:40:10.013Z", + "endDate": "2026-02-03T19:00:09.030Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:00:09.032Z", + "endDate": "2026-02-03T19:05:12.815Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:00:09.03Z", + "endDate": "2026-02-03T19:00:09.031Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:05:12.815Z", + "endDate": "2026-02-03T19:05:12.817Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:05:12.818Z", + "endDate": "2026-02-03T19:10:09.924Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:10:09.924Z", + "endDate": "2026-02-03T19:10:09.927Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:10:09.927Z", + "endDate": "2026-02-03T19:15:09.194Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:15:09.195Z", + "endDate": "2026-02-03T19:15:09.197Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:15:09.197Z", + "endDate": "2026-02-03T19:20:09.985Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:20:09.986Z", + "endDate": "2026-02-03T19:44:24.952Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T19:20:10.778Z", + "endDate": "2026-02-03T19:20:15.778Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T19:25:08.788Z", + "endDate": "2026-02-03T19:25:13.788Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T19:35:12.472Z", + "endDate": "2026-02-03T19:35:17.472Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:44:24.952Z", + "endDate": "2026-02-03T19:45:09.401Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T19:45:09.402Z", + "endDate": "2026-02-03T20:05:15.173Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T19:50:09.278Z", + "endDate": "2026-02-03T19:50:14.278Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T19:55:10.887Z", + "endDate": "2026-02-03T19:55:15.887Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:05:15.173Z", + "endDate": "2026-02-03T20:05:15.188Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:05:15.188Z", + "endDate": "2026-02-03T20:20:10.306Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T20:05:16.282Z", + "endDate": "2026-02-03T20:05:21.282Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T20:10:11.112Z", + "endDate": "2026-02-03T20:10:16.112Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T20:15:09.842Z", + "endDate": "2026-02-03T20:15:14.842Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:20:10.307Z", + "endDate": "2026-02-03T20:40:08.440Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T20:20:10.908Z", + "endDate": "2026-02-03T20:20:19.908Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T20:25:08.766Z", + "endDate": "2026-02-03T20:25:13.766Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T20:30:09.311Z", + "endDate": "2026-02-03T20:30:14.311Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:40:08.44Z", + "endDate": "2026-02-03T20:45:09.336Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:45:09.337Z", + "endDate": "2026-02-03T20:45:09.338Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:45:09.338Z", + "endDate": "2026-02-03T20:50:10.271Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:50:10.272Z", + "endDate": "2026-02-03T20:50:10.273Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:50:10.273Z", + "endDate": "2026-02-03T20:55:09.621Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:55:09.622Z", + "endDate": "2026-02-03T20:55:09.624Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T20:55:09.625Z", + "endDate": "2026-02-03T21:00:09.514Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T21:00:09.514Z", + "endDate": "2026-02-03T21:52:09.127Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T21:15:37.651Z", + "endDate": "2026-02-03T21:17:15.151Z", + "value": 3.25, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-03T21:25:11.287Z", + "endDate": "2026-02-03T21:25:18.787Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T21:52:09.127Z", + "endDate": "2026-02-03T22:15:12.051Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T22:15:12.052Z", + "endDate": "2026-02-03T22:15:12.055Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T22:15:12.056Z", + "endDate": "2026-02-03T22:25:09.086Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T22:25:09.087Z", + "endDate": "2026-02-03T23:00:11.764Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T22:30:09.953Z", + "endDate": "2026-02-03T22:30:15.953Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T22:35:11.352Z", + "endDate": "2026-02-03T22:35:16.352Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T22:45:11.574Z", + "endDate": "2026-02-03T22:45:16.574Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T22:50:11.58Z", + "endDate": "2026-02-03T22:50:19.080Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-03T22:55:10.371Z", + "endDate": "2026-02-03T22:55:15.371Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:00:11.764Z", + "endDate": "2026-02-03T23:10:09.213Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:10:09.214Z", + "endDate": "2026-02-03T23:10:09.215Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:10:09.216Z", + "endDate": "2026-02-03T23:30:10.757Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:30:10.758Z", + "endDate": "2026-02-03T23:30:10.762Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:30:10.762Z", + "endDate": "2026-02-03T23:50:09.644Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:50:09.644Z", + "endDate": "2026-02-03T23:50:09.647Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-03T23:50:09.648Z", + "endDate": "2026-02-04T00:10:12.426Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T00:10:12.426Z", + "endDate": "2026-02-04T00:10:12.429Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T00:10:12.43Z", + "endDate": "2026-02-04T00:25:10.302Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T00:25:10.303Z", + "endDate": "2026-02-04T01:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T00:40:10.092Z", + "endDate": "2026-02-04T00:40:22.092Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T00:45:10.144Z", + "endDate": "2026-02-04T00:45:20.644Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T00:50:09.354Z", + "endDate": "2026-02-04T00:50:19.854Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T00:55:11.191Z", + "endDate": "2026-02-04T00:55:21.691Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:00:00Z", + "endDate": "2026-02-04T01:25:10.398Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T01:00:12.143Z", + "endDate": "2026-02-04T01:00:17.143Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T01:10:12.447Z", + "endDate": "2026-02-04T01:10:17.447Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:25:10.398Z", + "endDate": "2026-02-04T01:30:10.724Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:30:10.725Z", + "endDate": "2026-02-04T01:30:10.729Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:30:10.73Z", + "endDate": "2026-02-04T01:35:10.657Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:35:10.657Z", + "endDate": "2026-02-04T01:35:10.659Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:35:10.66Z", + "endDate": "2026-02-04T01:40:10.201Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:40:10.201Z", + "endDate": "2026-02-04T01:40:10.204Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:40:10.205Z", + "endDate": "2026-02-04T01:45:15.113Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T01:45:15.114Z", + "endDate": "2026-02-04T02:10:11.258Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T01:45:15.743Z", + "endDate": "2026-02-04T01:45:20.743Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T01:50:12.951Z", + "endDate": "2026-02-04T01:50:17.951Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T01:52:43.97Z", + "endDate": "2026-02-04T01:53:28.970Z", + "value": 1.5, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-04T02:00:13.941Z", + "endDate": "2026-02-04T02:00:21.441Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T02:10:11.258Z", + "endDate": "2026-02-04T02:15:09.906Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T02:15:09.907Z", + "endDate": "2026-02-04T02:15:09.909Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T02:15:09.91Z", + "endDate": "2026-02-04T02:20:11.312Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T02:20:11.312Z", + "endDate": "2026-02-04T02:20:11.314Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T02:20:11.314Z", + "endDate": "2026-02-04T02:25:11.738Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T02:22:17.253Z", + "endDate": "2026-02-04T02:24:17.253Z", + "value": 4, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T02:25:11.739Z", + "endDate": "2026-02-04T03:05:10.352Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T02:35:10.884Z", + "endDate": "2026-02-04T02:35:36.384Z", + "value": 0.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T02:40:10.081Z", + "endDate": "2026-02-04T02:40:29.581Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T03:00:09.601Z", + "endDate": "2026-02-04T03:00:33.601Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T03:02:25.28Z", + "endDate": "2026-02-04T03:03:17.780Z", + "value": 1.75, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T03:05:10.352Z", + "endDate": "2026-02-04T03:15:15.638Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T03:15:15.638Z", + "endDate": "2026-02-04T04:10:08.961Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T03:30:10.716Z", + "endDate": "2026-02-04T03:30:31.716Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T03:40:14.029Z", + "endDate": "2026-02-04T03:40:30.529Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T04:03:07.462Z", + "endDate": "2026-02-04T04:04:16.462Z", + "value": 2.3, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T04:10:08.962Z", + "endDate": "2026-02-04T04:15:09.533Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T04:15:09.533Z", + "endDate": "2026-02-04T04:30:14.381Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T04:25:10.87Z", + "endDate": "2026-02-04T04:25:16.870Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T04:30:14.382Z", + "endDate": "2026-02-04T04:45:13.126Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T04:45:13.126Z", + "endDate": "2026-02-04T05:20:11.202Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T04:55:12.317Z", + "endDate": "2026-02-04T04:55:17.317Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T05:00:10.982Z", + "endDate": "2026-02-04T05:00:15.982Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T05:20:11.202Z", + "endDate": "2026-02-04T05:25:14.101Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T05:25:14.102Z", + "endDate": "2026-02-04T05:25:14.104Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T05:25:14.105Z", + "endDate": "2026-02-04T05:30:12.861Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T05:30:12.862Z", + "endDate": "2026-02-04T06:05:11.867Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T05:35:10.84Z", + "endDate": "2026-02-04T05:35:16.840Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T05:40:15.448Z", + "endDate": "2026-02-04T05:40:20.448Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T05:50:12.288Z", + "endDate": "2026-02-04T05:50:17.288Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T05:55:15.362Z", + "endDate": "2026-02-04T05:55:20.362Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T06:00:15.709Z", + "endDate": "2026-02-04T06:00:20.709Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-02-04T06:05:11.867Z", + "endDate": "2026-02-04T06:08:45.267Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T06:08:45.268Z", + "endDate": "2026-02-04T06:10:14.961Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T06:10:14.962Z", + "endDate": "2026-02-04T06:15:09.865Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T06:15:09.865Z", + "endDate": "2026-02-04T06:25:12.426Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T06:25:12.426Z", + "endDate": "2026-02-04T06:30:13.999Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T06:30:13.999Z", + "endDate": "2026-02-04T06:55:09.919Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T06:35:10.842Z", + "endDate": "2026-02-04T06:35:15.842Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T06:40:11.151Z", + "endDate": "2026-02-04T06:40:16.151Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T06:45:09.988Z", + "endDate": "2026-02-04T06:45:14.988Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T06:50:10.488Z", + "endDate": "2026-02-04T06:50:15.488Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T06:55:09.92Z", + "endDate": "2026-02-04T07:00:10.186Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T07:00:10.186Z", + "endDate": "2026-02-04T07:00:10.189Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T07:00:10.19Z", + "endDate": "2026-02-04T07:05:11.811Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T07:05:11.811Z", + "endDate": "2026-02-04T07:20:09.731Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T07:20:09.731Z", + "endDate": "2026-02-04T07:25:11.050Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T07:25:11.051Z", + "endDate": "2026-02-04T08:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T07:30:11.221Z", + "endDate": "2026-02-04T07:30:16.221Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T07:35:13.58Z", + "endDate": "2026-02-04T07:35:18.580Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T07:40:11.081Z", + "endDate": "2026-02-04T07:40:16.081Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T08:00:00Z", + "endDate": "2026-02-04T08:40:11.160Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T08:05:12.086Z", + "endDate": "2026-02-04T08:05:17.086Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T08:10:10.056Z", + "endDate": "2026-02-04T08:10:15.056Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T08:15:11.156Z", + "endDate": "2026-02-04T08:15:17.156Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T08:20:10.8Z", + "endDate": "2026-02-04T08:20:15.800Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T08:25:11.748Z", + "endDate": "2026-02-04T08:25:16.748Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T08:30:10.796Z", + "endDate": "2026-02-04T08:30:15.796Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T08:40:11.161Z", + "endDate": "2026-02-04T08:45:12.175Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T08:45:12.176Z", + "endDate": "2026-02-04T08:45:12.180Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T08:45:12.181Z", + "endDate": "2026-02-04T08:55:11.166Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T08:55:11.166Z", + "endDate": "2026-02-04T09:15:11.722Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T09:10:12.402Z", + "endDate": "2026-02-04T09:10:17.402Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:15:11.722Z", + "endDate": "2026-02-04T09:20:12.186Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:20:12.186Z", + "endDate": "2026-02-04T09:20:12.188Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:20:12.189Z", + "endDate": "2026-02-04T09:25:11.119Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:25:11.12Z", + "endDate": "2026-02-04T09:35:11.703Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T09:30:11.785Z", + "endDate": "2026-02-04T09:30:16.785Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:35:11.703Z", + "endDate": "2026-02-04T09:45:12.145Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:45:12.145Z", + "endDate": "2026-02-04T09:55:10.908Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T09:55:10.909Z", + "endDate": "2026-02-04T10:00:12.746Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:00:12.746Z", + "endDate": "2026-02-04T10:35:09.886Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T10:05:11.14Z", + "endDate": "2026-02-04T10:05:16.140Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T10:15:12.229Z", + "endDate": "2026-02-04T10:15:17.229Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T10:20:12.195Z", + "endDate": "2026-02-04T10:20:17.195Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T10:25:12.925Z", + "endDate": "2026-02-04T10:25:17.925Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T10:30:11.178Z", + "endDate": "2026-02-04T10:30:16.178Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:35:09.887Z", + "endDate": "2026-02-04T10:40:10.577Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:40:10.578Z", + "endDate": "2026-02-04T10:40:10.579Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:40:10.579Z", + "endDate": "2026-02-04T10:45:10.733Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:45:10.734Z", + "endDate": "2026-02-04T10:45:10.736Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:45:10.736Z", + "endDate": "2026-02-04T10:50:12.177Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:50:12.177Z", + "endDate": "2026-02-04T10:50:12.178Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:50:12.179Z", + "endDate": "2026-02-04T10:55:10.534Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:55:10.535Z", + "endDate": "2026-02-04T10:55:10.540Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T10:55:10.54Z", + "endDate": "2026-02-04T11:00:11.666Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T11:00:11.667Z", + "endDate": "2026-02-04T11:00:11.670Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T11:00:11.67Z", + "endDate": "2026-02-04T11:05:10.483Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T11:05:10.484Z", + "endDate": "2026-02-04T11:25:10.775Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T11:10:18.155Z", + "endDate": "2026-02-04T11:10:23.155Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T11:15:13.044Z", + "endDate": "2026-02-04T11:15:18.044Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T11:25:10.776Z", + "endDate": "2026-02-04T11:40:12.177Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T11:40:12.177Z", + "endDate": "2026-02-04T11:50:11.852Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T11:50:11.852Z", + "endDate": "2026-02-04T12:10:13.257Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T12:10:13.257Z", + "endDate": "2026-02-04T12:10:13.263Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T12:10:13.264Z", + "endDate": "2026-02-04T12:20:12.049Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T12:20:12.049Z", + "endDate": "2026-02-04T12:55:11.282Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T12:55:11.282Z", + "endDate": "2026-02-04T13:10:11.527Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T13:10:11.528Z", + "endDate": "2026-02-04T13:35:12.251Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T13:20:11.201Z", + "endDate": "2026-02-04T13:20:20.201Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T13:25:12.922Z", + "endDate": "2026-02-04T13:25:18.922Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T13:30:12.238Z", + "endDate": "2026-02-04T13:30:17.238Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T13:35:12.251Z", + "endDate": "2026-02-04T13:40:10.896Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T13:40:10.896Z", + "endDate": "2026-02-04T13:40:10.903Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T13:40:10.903Z", + "endDate": "2026-02-04T14:00:11.929Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T14:00:11.929Z", + "endDate": "2026-02-04T14:00:11.930Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T14:00:11.931Z", + "endDate": "2026-02-04T14:20:11.198Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T14:20:11.199Z", + "endDate": "2026-02-04T15:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:25:10.676Z", + "endDate": "2026-02-04T14:25:30.176Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:30:13.166Z", + "endDate": "2026-02-04T14:30:20.666Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:35:12.761Z", + "endDate": "2026-02-04T14:35:17.761Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:40:12.767Z", + "endDate": "2026-02-04T14:40:17.767Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:45:11.833Z", + "endDate": "2026-02-04T14:45:17.833Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:50:12.477Z", + "endDate": "2026-02-04T14:50:21.477Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T14:55:13.576Z", + "endDate": "2026-02-04T14:55:18.576Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:00:00Z", + "endDate": "2026-02-04T15:10:12.515Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T15:00:13.763Z", + "endDate": "2026-02-04T15:00:18.763Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:10:12.516Z", + "endDate": "2026-02-04T15:15:12.546Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:15:12.546Z", + "endDate": "2026-02-04T15:15:12.548Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:15:12.549Z", + "endDate": "2026-02-04T15:20:11.089Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:20:11.089Z", + "endDate": "2026-02-04T15:30:11.231Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:30:11.232Z", + "endDate": "2026-02-04T15:35:13.724Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:35:13.724Z", + "endDate": "2026-02-04T15:35:13.726Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:35:13.727Z", + "endDate": "2026-02-04T15:40:15.327Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:40:15.328Z", + "endDate": "2026-02-04T15:40:15.331Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:40:15.331Z", + "endDate": "2026-02-04T15:45:11.940Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:45:11.941Z", + "endDate": "2026-02-04T15:45:11.944Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:45:11.945Z", + "endDate": "2026-02-04T15:50:12.508Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T15:50:12.508Z", + "endDate": "2026-02-04T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T16:00:00Z", + "endDate": "2026-02-04T16:35:12.849Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T16:15:15.664Z", + "endDate": "2026-02-04T16:15:20.664Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T16:20:13.524Z", + "endDate": "2026-02-04T16:20:18.524Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T16:25:19.66Z", + "endDate": "2026-02-04T16:25:28.660Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T16:30:11.724Z", + "endDate": "2026-02-04T16:30:25.224Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T16:35:12.849Z", + "endDate": "2026-02-04T16:45:12.863Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T16:45:12.863Z", + "endDate": "2026-02-04T17:05:11.016Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T16:45:13.673Z", + "endDate": "2026-02-04T16:45:22.673Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T16:50:13.891Z", + "endDate": "2026-02-04T16:50:18.891Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:05:11.017Z", + "endDate": "2026-02-04T17:10:12.667Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:10:12.667Z", + "endDate": "2026-02-04T17:15:10.944Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:15:10.945Z", + "endDate": "2026-02-04T17:20:13.473Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:20:13.474Z", + "endDate": "2026-02-04T17:20:13.479Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:20:13.479Z", + "endDate": "2026-02-04T17:25:12.099Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:25:12.103Z", + "endDate": "2026-02-04T17:30:11.261Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:25:12.1Z", + "endDate": "2026-02-04T17:25:12.102Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:30:11.261Z", + "endDate": "2026-02-04T17:30:11.264Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:30:11.265Z", + "endDate": "2026-02-04T17:40:13.844Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:40:13.844Z", + "endDate": "2026-02-04T17:40:13.850Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:40:13.851Z", + "endDate": "2026-02-04T17:45:11.841Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T17:45:11.842Z", + "endDate": "2026-02-04T18:45:13.147Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T17:55:11.763Z", + "endDate": "2026-02-04T17:55:16.763Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:00:11.335Z", + "endDate": "2026-02-04T18:00:16.335Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:05:12.057Z", + "endDate": "2026-02-04T18:05:17.057Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:10:12.56Z", + "endDate": "2026-02-04T18:10:17.560Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:15:11.066Z", + "endDate": "2026-02-04T18:15:16.066Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:29:25.198Z", + "endDate": "2026-02-04T18:31:05.698Z", + "value": 3.35, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:35:13.684Z", + "endDate": "2026-02-04T18:35:18.684Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T18:45:13.147Z", + "endDate": "2026-02-04T18:50:16.110Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T18:50:16.111Z", + "endDate": "2026-02-04T18:50:16.114Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T18:50:16.114Z", + "endDate": "2026-02-04T18:55:13.310Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T18:55:13.31Z", + "endDate": "2026-02-04T18:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T18:55:14.061Z", + "endDate": "2026-02-04T18:55:19.061Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:00:00Z", + "endDate": "2026-02-04T19:15:11.668Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T19:00:12.969Z", + "endDate": "2026-02-04T19:00:17.969Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T19:05:11.998Z", + "endDate": "2026-02-04T19:05:16.998Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T19:10:13.641Z", + "endDate": "2026-02-04T19:10:18.641Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:15:11.668Z", + "endDate": "2026-02-04T19:20:13.481Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:20:13.482Z", + "endDate": "2026-02-04T19:20:13.484Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:20:13.484Z", + "endDate": "2026-02-04T19:25:16.722Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:25:16.723Z", + "endDate": "2026-02-04T19:25:16.726Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:25:16.726Z", + "endDate": "2026-02-04T19:30:11.479Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:30:11.479Z", + "endDate": "2026-02-04T19:30:11.483Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:30:11.484Z", + "endDate": "2026-02-04T19:35:11.874Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:35:11.875Z", + "endDate": "2026-02-04T19:50:11.069Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T19:35:12.88Z", + "endDate": "2026-02-04T19:35:17.880Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T19:40:11.777Z", + "endDate": "2026-02-04T19:40:22.277Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T19:45:11.852Z", + "endDate": "2026-02-04T19:45:16.852Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:50:11.07Z", + "endDate": "2026-02-04T19:55:11.636Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T19:55:11.636Z", + "endDate": "2026-02-04T20:26:26.560Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:00:13.485Z", + "endDate": "2026-02-04T20:00:20.985Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:05:15.489Z", + "endDate": "2026-02-04T20:05:31.989Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:10:11.453Z", + "endDate": "2026-02-04T20:10:21.953Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:15:12.763Z", + "endDate": "2026-02-04T20:15:24.763Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:25:11.592Z", + "endDate": "2026-02-04T20:25:17.592Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T20:26:26.561Z", + "endDate": "2026-02-04T20:30:10.992Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T20:30:10.992Z", + "endDate": "2026-02-04T20:35:14.635Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T20:35:14.636Z", + "endDate": "2026-02-04T20:40:15.907Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:35:15.595Z", + "endDate": "2026-02-04T20:35:20.595Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T20:40:15.907Z", + "endDate": "2026-02-04T20:50:14.518Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T20:50:14.519Z", + "endDate": "2026-02-04T21:30:11.583Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:50:19.873Z", + "endDate": "2026-02-04T20:50:25.873Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T20:55:14.061Z", + "endDate": "2026-02-04T20:55:29.061Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:00:11.98Z", + "endDate": "2026-02-04T21:00:35.980Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:05:13.938Z", + "endDate": "2026-02-04T21:05:25.938Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:10:13.864Z", + "endDate": "2026-02-04T21:10:27.364Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:15:15.024Z", + "endDate": "2026-02-04T21:15:30.024Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:20:11.735Z", + "endDate": "2026-02-04T21:20:19.235Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:25:13.416Z", + "endDate": "2026-02-04T21:25:19.416Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:30:11.583Z", + "endDate": "2026-02-04T21:35:16.989Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:35:16.992Z", + "endDate": "2026-02-04T21:40:14.640Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:35:16.99Z", + "endDate": "2026-02-04T21:35:16.992Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:40:14.64Z", + "endDate": "2026-02-04T21:45:12.088Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T21:40:15.39Z", + "endDate": "2026-02-04T21:40:20.390Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:45:12.089Z", + "endDate": "2026-02-04T21:50:12.014Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:50:12.015Z", + "endDate": "2026-02-04T21:50:12.019Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:50:12.019Z", + "endDate": "2026-02-04T21:55:21.381Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:55:21.382Z", + "endDate": "2026-02-04T21:55:21.435Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T21:55:21.436Z", + "endDate": "2026-02-04T22:00:14.528Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:00:14.528Z", + "endDate": "2026-02-04T22:00:14.580Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:00:14.581Z", + "endDate": "2026-02-04T22:20:15.870Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:20:15.873Z", + "endDate": "2026-02-04T22:25:14.840Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:20:15.87Z", + "endDate": "2026-02-04T22:20:15.872Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:25:14.841Z", + "endDate": "2026-02-04T22:25:14.844Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:25:14.844Z", + "endDate": "2026-02-04T22:30:18.536Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:30:18.536Z", + "endDate": "2026-02-04T22:30:18.538Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:30:18.539Z", + "endDate": "2026-02-04T22:35:24.671Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T22:35:24.671Z", + "endDate": "2026-02-04T23:05:14.938Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-04T22:40:12.856Z", + "endDate": "2026-02-04T22:40:17.856Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:05:14.939Z", + "endDate": "2026-02-04T23:10:22.186Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:10:22.187Z", + "endDate": "2026-02-04T23:10:22.191Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:10:22.191Z", + "endDate": "2026-02-04T23:15:12.361Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:15:12.361Z", + "endDate": "2026-02-04T23:20:34.732Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:20:34.733Z", + "endDate": "2026-02-04T23:30:22.180Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:30:22.183Z", + "endDate": "2026-02-04T23:50:13.083Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:30:22.18Z", + "endDate": "2026-02-04T23:30:22.182Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:50:13.083Z", + "endDate": "2026-02-04T23:50:13.084Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:50:13.085Z", + "endDate": "2026-02-04T23:55:15.060Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-04T23:55:15.06Z", + "endDate": "2026-02-05T00:00:15.907Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:00:15.908Z", + "endDate": "2026-02-05T00:05:13.236Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:05:13.237Z", + "endDate": "2026-02-05T00:15:13.444Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:15:13.444Z", + "endDate": "2026-02-05T00:20:12.155Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:20:12.156Z", + "endDate": "2026-02-05T00:25:12.414Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:25:12.414Z", + "endDate": "2026-02-05T00:35:12.061Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:35:12.061Z", + "endDate": "2026-02-05T00:45:12.530Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T00:45:12.531Z", + "endDate": "2026-02-05T01:05:14.751Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T01:05:14.751Z", + "endDate": "2026-02-05T01:05:14.755Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T01:05:14.756Z", + "endDate": "2026-02-05T01:25:13.160Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T01:25:13.163Z", + "endDate": "2026-02-05T01:40:14.212Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T01:25:13.16Z", + "endDate": "2026-02-05T01:25:13.163Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T01:40:07.735Z", + "endDate": "2026-02-05T01:40:39.235Z", + "value": 1.05, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T01:40:14.213Z", + "endDate": "2026-02-05T02:35:15.995Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T02:35:15.995Z", + "endDate": "2026-02-05T02:40:14.644Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T02:40:14.645Z", + "endDate": "2026-02-05T05:29:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T03:10:13.693Z", + "endDate": "2026-02-05T03:11:01.693Z", + "value": 1.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T03:15:14.463Z", + "endDate": "2026-02-05T03:15:48.963Z", + "value": 1.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T04:40:17.156Z", + "endDate": "2026-02-05T04:40:41.156Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T04:45:14.031Z", + "endDate": "2026-02-05T04:45:27.531Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T05:30:00Z", + "endDate": "2026-02-05T08:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T07:25:13.819Z", + "endDate": "2026-02-05T07:25:18.819Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T07:30:13.718Z", + "endDate": "2026-02-05T07:30:18.718Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T07:35:12.762Z", + "endDate": "2026-02-05T07:35:17.762Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T07:40:14.747Z", + "endDate": "2026-02-05T07:40:19.747Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T08:00:00Z", + "endDate": "2026-02-05T08:35:12.687Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T08:06:11.44Z", + "endDate": "2026-02-05T08:06:16.440Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T08:15:14.485Z", + "endDate": "2026-02-05T08:15:23.485Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T08:20:13.378Z", + "endDate": "2026-02-05T08:20:20.878Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T08:25:15.245Z", + "endDate": "2026-02-05T08:25:20.245Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T08:35:12.687Z", + "endDate": "2026-02-05T08:40:16.494Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T08:40:16.495Z", + "endDate": "2026-02-05T08:40:16.502Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T08:40:16.503Z", + "endDate": "2026-02-05T08:45:15.411Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T08:45:15.412Z", + "endDate": "2026-02-05T08:50:13.056Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T08:50:13.056Z", + "endDate": "2026-02-05T09:00:15.387Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:00:15.388Z", + "endDate": "2026-02-05T09:05:13.338Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:05:13.339Z", + "endDate": "2026-02-05T09:10:12.867Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:10:12.868Z", + "endDate": "2026-02-05T09:10:12.871Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:10:12.871Z", + "endDate": "2026-02-05T09:15:13.047Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:15:13.047Z", + "endDate": "2026-02-05T09:45:12.354Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T09:15:13.828Z", + "endDate": "2026-02-05T09:15:18.828Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T09:20:13.626Z", + "endDate": "2026-02-05T09:20:19.626Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T09:25:13.781Z", + "endDate": "2026-02-05T09:25:21.281Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T09:30:14.193Z", + "endDate": "2026-02-05T09:30:19.193Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T09:35:12.939Z", + "endDate": "2026-02-05T09:35:17.939Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:45:12.355Z", + "endDate": "2026-02-05T09:50:13.855Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:50:13.856Z", + "endDate": "2026-02-05T09:50:13.860Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T09:50:13.86Z", + "endDate": "2026-02-05T10:10:15.778Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:10:15.779Z", + "endDate": "2026-02-05T10:10:15.783Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:10:15.784Z", + "endDate": "2026-02-05T10:15:14.427Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:15:14.427Z", + "endDate": "2026-02-05T10:15:14.429Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:15:14.43Z", + "endDate": "2026-02-05T10:20:14.540Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:20:14.541Z", + "endDate": "2026-02-05T10:20:14.544Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:20:14.544Z", + "endDate": "2026-02-05T10:25:14.040Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:25:14.041Z", + "endDate": "2026-02-05T10:45:14.115Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T10:25:14.774Z", + "endDate": "2026-02-05T10:25:19.774Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T10:30:14.075Z", + "endDate": "2026-02-05T10:30:24.575Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T10:35:13.768Z", + "endDate": "2026-02-05T10:35:19.768Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:45:14.115Z", + "endDate": "2026-02-05T10:50:14.355Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:50:14.356Z", + "endDate": "2026-02-05T10:50:14.359Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:50:14.359Z", + "endDate": "2026-02-05T10:55:15.392Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:55:15.392Z", + "endDate": "2026-02-05T10:55:15.394Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T10:55:15.395Z", + "endDate": "2026-02-05T11:00:13.372Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:00:13.372Z", + "endDate": "2026-02-05T11:05:12.815Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:00:14.002Z", + "endDate": "2026-02-05T11:00:19.002Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:05:12.816Z", + "endDate": "2026-02-05T11:10:13.864Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:10:13.864Z", + "endDate": "2026-02-05T11:30:13.606Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:15:15.236Z", + "endDate": "2026-02-05T11:15:22.736Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:20:13.64Z", + "endDate": "2026-02-05T11:20:19.640Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:25:13.227Z", + "endDate": "2026-02-05T11:25:18.227Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:30:13.606Z", + "endDate": "2026-02-05T11:35:13.631Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:35:13.631Z", + "endDate": "2026-02-05T11:35:13.634Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:35:13.635Z", + "endDate": "2026-02-05T11:40:15.454Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T11:40:15.454Z", + "endDate": "2026-02-05T12:00:16.157Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:40:16.219Z", + "endDate": "2026-02-05T11:40:21.219Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:45:14.29Z", + "endDate": "2026-02-05T11:45:20.290Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:50:14.282Z", + "endDate": "2026-02-05T11:50:19.282Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T11:55:13.147Z", + "endDate": "2026-02-05T11:55:18.147Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:00:16.158Z", + "endDate": "2026-02-05T12:05:15.860Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:05:15.862Z", + "endDate": "2026-02-05T12:10:13.314Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:05:15.86Z", + "endDate": "2026-02-05T12:05:15.862Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:10:13.315Z", + "endDate": "2026-02-05T12:30:13.173Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T12:10:14.065Z", + "endDate": "2026-02-05T12:10:19.065Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T12:15:14.431Z", + "endDate": "2026-02-05T12:15:19.431Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T12:20:14.874Z", + "endDate": "2026-02-05T12:20:19.874Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:30:13.173Z", + "endDate": "2026-02-05T12:35:14.650Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:35:14.65Z", + "endDate": "2026-02-05T12:55:14.289Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T12:40:13.503Z", + "endDate": "2026-02-05T12:40:18.503Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T12:45:16.016Z", + "endDate": "2026-02-05T12:45:21.016Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T12:50:13.876Z", + "endDate": "2026-02-05T12:50:18.876Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T12:55:14.29Z", + "endDate": "2026-02-05T13:00:13.591Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:00:13.591Z", + "endDate": "2026-02-05T13:15:14.481Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T13:00:14.311Z", + "endDate": "2026-02-05T13:00:19.311Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T13:05:14.167Z", + "endDate": "2026-02-05T13:05:23.167Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T13:10:16.002Z", + "endDate": "2026-02-05T13:10:21.002Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:15:14.482Z", + "endDate": "2026-02-05T13:20:15.123Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:20:15.123Z", + "endDate": "2026-02-05T13:20:15.125Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:20:15.126Z", + "endDate": "2026-02-05T13:30:13.289Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:30:13.289Z", + "endDate": "2026-02-05T13:35:13.120Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:35:13.121Z", + "endDate": "2026-02-05T13:40:13.509Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:40:13.513Z", + "endDate": "2026-02-05T13:50:13.732Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:40:13.51Z", + "endDate": "2026-02-05T13:40:13.513Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:50:13.733Z", + "endDate": "2026-02-05T13:50:13.736Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:50:13.736Z", + "endDate": "2026-02-05T13:55:13.574Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T13:55:13.575Z", + "endDate": "2026-02-05T14:05:13.207Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T14:00:14.766Z", + "endDate": "2026-02-05T14:00:19.766Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T14:05:13.207Z", + "endDate": "2026-02-05T14:10:16.440Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T14:10:16.441Z", + "endDate": "2026-02-05T14:30:15.645Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T14:10:17.312Z", + "endDate": "2026-02-05T14:10:22.312Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T14:15:16.534Z", + "endDate": "2026-02-05T14:15:21.534Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T14:20:14.398Z", + "endDate": "2026-02-05T14:20:19.398Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T14:30:15.645Z", + "endDate": "2026-02-05T14:35:17.262Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T14:35:17.262Z", + "endDate": "2026-02-05T14:45:13.097Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T14:45:13.097Z", + "endDate": "2026-02-05T14:50:14.745Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T14:50:14.746Z", + "endDate": "2026-02-05T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T14:55:14.558Z", + "endDate": "2026-02-05T14:55:19.558Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T15:00:00Z", + "endDate": "2026-02-05T15:10:14.947Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T15:00:21.63Z", + "endDate": "2026-02-05T15:00:26.630Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T15:05:20.123Z", + "endDate": "2026-02-05T15:05:25.123Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T15:10:14.948Z", + "endDate": "2026-02-05T15:20:15.756Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T15:20:15.756Z", + "endDate": "2026-02-05T15:30:13.280Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T15:25:17.245Z", + "endDate": "2026-02-05T15:25:22.245Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T15:30:13.28Z", + "endDate": "2026-02-05T15:35:15.151Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T15:30:42.432Z", + "endDate": "2026-02-05T15:33:24.432Z", + "value": 5.4, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T15:35:15.151Z", + "endDate": "2026-02-05T15:45:13.214Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T15:40:15.145Z", + "endDate": "2026-02-05T15:40:27.145Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T15:45:13.215Z", + "endDate": "2026-02-05T16:05:18.415Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T16:05:18.415Z", + "endDate": "2026-02-05T16:05:18.424Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T16:05:18.424Z", + "endDate": "2026-02-05T16:10:22.889Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T16:10:22.89Z", + "endDate": "2026-02-05T16:30:13.332Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T16:10:23.594Z", + "endDate": "2026-02-05T16:10:28.594Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T16:15:13.939Z", + "endDate": "2026-02-05T16:15:18.939Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T16:20:17.603Z", + "endDate": "2026-02-05T16:20:22.603Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T16:30:13.333Z", + "endDate": "2026-02-05T16:50:15.272Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T16:50:15.272Z", + "endDate": "2026-02-05T16:50:15.275Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T16:50:15.275Z", + "endDate": "2026-02-05T17:05:14.868Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:05:14.868Z", + "endDate": "2026-02-05T17:05:14.871Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:05:14.872Z", + "endDate": "2026-02-05T17:10:15.818Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:10:15.818Z", + "endDate": "2026-02-05T17:10:15.819Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:10:15.82Z", + "endDate": "2026-02-05T17:20:24.346Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:20:24.347Z", + "endDate": "2026-02-05T17:30:13.660Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:30:13.66Z", + "endDate": "2026-02-05T17:35:15.976Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:35:15.977Z", + "endDate": "2026-02-05T17:35:15.982Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:35:15.983Z", + "endDate": "2026-02-05T17:45:18.471Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T17:45:18.471Z", + "endDate": "2026-02-05T18:30:16.907Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T17:45:19.236Z", + "endDate": "2026-02-05T17:45:24.236Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T17:50:16.985Z", + "endDate": "2026-02-05T17:50:21.985Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T17:55:15.381Z", + "endDate": "2026-02-05T17:55:21.381Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T18:00:16.932Z", + "endDate": "2026-02-05T18:00:22.932Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T18:05:15.133Z", + "endDate": "2026-02-05T18:05:24.133Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T18:10:17.263Z", + "endDate": "2026-02-05T18:10:29.263Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T18:15:26.414Z", + "endDate": "2026-02-05T18:15:36.914Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T18:20:14.115Z", + "endDate": "2026-02-05T18:20:20.115Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T18:30:16.908Z", + "endDate": "2026-02-05T18:40:18.150Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T18:40:18.151Z", + "endDate": "2026-02-05T18:40:18.153Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T18:40:18.153Z", + "endDate": "2026-02-05T18:50:14.242Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T18:50:14.243Z", + "endDate": "2026-02-05T18:50:14.245Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T18:50:14.246Z", + "endDate": "2026-02-05T19:00:14.692Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T19:00:14.692Z", + "endDate": "2026-02-05T19:00:14.695Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T19:00:14.695Z", + "endDate": "2026-02-05T19:05:14.096Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T19:05:14.097Z", + "endDate": "2026-02-05T19:15:14.988Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T19:10:15.872Z", + "endDate": "2026-02-05T19:10:20.872Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T19:15:14.988Z", + "endDate": "2026-02-05T19:20:15.396Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T19:20:15.397Z", + "endDate": "2026-02-05T20:05:16.562Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T19:25:17.426Z", + "endDate": "2026-02-05T19:25:26.426Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T19:30:15.87Z", + "endDate": "2026-02-05T19:30:20.870Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T19:35:24.304Z", + "endDate": "2026-02-05T19:35:29.304Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T19:40:15.053Z", + "endDate": "2026-02-05T19:40:21.053Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T19:55:16.152Z", + "endDate": "2026-02-05T19:55:21.152Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T20:00:26.432Z", + "endDate": "2026-02-05T20:00:31.432Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:05:16.562Z", + "endDate": "2026-02-05T20:10:15.238Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:10:15.239Z", + "endDate": "2026-02-05T20:20:15.267Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:20:15.268Z", + "endDate": "2026-02-05T20:25:14.210Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:25:14.213Z", + "endDate": "2026-02-05T20:30:17.020Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:25:14.21Z", + "endDate": "2026-02-05T20:25:14.213Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:30:17.021Z", + "endDate": "2026-02-05T20:30:17.023Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:30:17.024Z", + "endDate": "2026-02-05T20:35:16.754Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T20:35:16.754Z", + "endDate": "2026-02-05T21:05:16.540Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T20:45:15.98Z", + "endDate": "2026-02-05T20:45:20.980Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T20:49:28.594Z", + "endDate": "2026-02-05T20:52:18.094Z", + "value": 5.65, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:05:16.54Z", + "endDate": "2026-02-05T21:10:16.622Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:10:16.622Z", + "endDate": "2026-02-05T21:10:16.626Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:10:16.627Z", + "endDate": "2026-02-05T21:15:20.634Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:15:20.634Z", + "endDate": "2026-02-05T21:15:20.637Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:15:20.637Z", + "endDate": "2026-02-05T21:20:18.088Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:20:18.089Z", + "endDate": "2026-02-05T21:20:18.091Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:20:18.091Z", + "endDate": "2026-02-05T21:25:14.642Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:25:14.643Z", + "endDate": "2026-02-05T21:36:17.020Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T21:30:15.035Z", + "endDate": "2026-02-05T21:30:20.035Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:36:17.02Z", + "endDate": "2026-02-05T21:40:15.418Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:40:15.418Z", + "endDate": "2026-02-05T21:50:16.432Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:50:16.433Z", + "endDate": "2026-02-05T21:50:16.435Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T21:50:16.435Z", + "endDate": "2026-02-05T22:00:15.323Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:00:15.324Z", + "endDate": "2026-02-05T22:00:15.326Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:00:15.327Z", + "endDate": "2026-02-05T22:05:14.491Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:05:14.491Z", + "endDate": "2026-02-05T22:05:14.493Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:05:14.493Z", + "endDate": "2026-02-05T22:10:15.543Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:10:15.544Z", + "endDate": "2026-02-05T22:28:58.758Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-05T22:21:09.111Z", + "endDate": "2026-02-05T22:21:14.111Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:28:58.759Z", + "endDate": "2026-02-05T22:35:15.908Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:35:15.908Z", + "endDate": "2026-02-05T22:40:15.367Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:40:15.368Z", + "endDate": "2026-02-05T22:40:15.371Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T22:40:15.372Z", + "endDate": "2026-02-05T23:00:16.571Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T23:00:16.571Z", + "endDate": "2026-02-05T23:00:16.577Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T23:00:16.577Z", + "endDate": "2026-02-05T23:15:14.814Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T23:15:14.815Z", + "endDate": "2026-02-05T23:42:04.908Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T23:42:04.908Z", + "endDate": "2026-02-05T23:45:23.274Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T23:45:23.274Z", + "endDate": "2026-02-05T23:50:37.173Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-05T23:50:37.174Z", + "endDate": "2026-02-06T00:30:16.549Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T00:30:16.549Z", + "endDate": "2026-02-06T00:35:16.529Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T00:35:16.529Z", + "endDate": "2026-02-06T00:45:15.140Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T00:45:15.14Z", + "endDate": "2026-02-06T01:05:21.709Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T00:56:38.813Z", + "endDate": "2026-02-06T00:57:19.313Z", + "value": 1.35, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T01:05:21.71Z", + "endDate": "2026-02-06T01:11:36.045Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T01:11:36.045Z", + "endDate": "2026-02-06T01:14:44.745Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T01:14:44.745Z", + "endDate": "2026-02-06T01:45:17.701Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T01:30:19.504Z", + "endDate": "2026-02-06T01:30:24.504Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T01:35:15.746Z", + "endDate": "2026-02-06T01:35:20.746Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T01:45:17.702Z", + "endDate": "2026-02-06T01:50:15.117Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T01:50:15.117Z", + "endDate": "2026-02-06T02:25:14.980Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T01:50:16.346Z", + "endDate": "2026-02-06T01:50:21.346Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T01:55:15.917Z", + "endDate": "2026-02-06T01:55:20.917Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T02:00:16.596Z", + "endDate": "2026-02-06T02:00:21.596Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T02:25:14.981Z", + "endDate": "2026-02-06T02:25:18.422Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T02:25:18.423Z", + "endDate": "2026-02-06T02:30:20.234Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T02:28:43.361Z", + "endDate": "2026-02-06T02:30:16.361Z", + "value": 3.1, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T02:30:20.234Z", + "endDate": "2026-02-06T03:10:20.526Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T02:40:20.634Z", + "endDate": "2026-02-06T02:40:26.634Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T03:10:20.527Z", + "endDate": "2026-02-06T03:15:23.343Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T03:15:23.343Z", + "endDate": "2026-02-06T04:35:17.027Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T03:30:20.592Z", + "endDate": "2026-02-06T03:30:25.592Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T03:45:19.223Z", + "endDate": "2026-02-06T03:45:24.223Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T03:50:18.76Z", + "endDate": "2026-02-06T03:50:23.760Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T04:20:17.105Z", + "endDate": "2026-02-06T04:20:22.105Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T04:25:19.117Z", + "endDate": "2026-02-06T04:25:24.117Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T04:30:19.794Z", + "endDate": "2026-02-06T04:30:24.794Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T04:35:17.028Z", + "endDate": "2026-02-06T04:40:15.530Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T04:40:15.531Z", + "endDate": "2026-02-06T04:50:15.379Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T04:40:16.295Z", + "endDate": "2026-02-06T04:40:21.295Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T04:45:15.657Z", + "endDate": "2026-02-06T04:45:24.657Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T04:50:15.38Z", + "endDate": "2026-02-06T04:55:15.184Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T04:55:15.184Z", + "endDate": "2026-02-06T04:55:15.188Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T04:55:15.188Z", + "endDate": "2026-02-06T05:00:19.671Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T05:00:19.672Z", + "endDate": "2026-02-06T05:30:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T05:00:20.573Z", + "endDate": "2026-02-06T05:00:26.573Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T05:05:18.3Z", + "endDate": "2026-02-06T05:05:30.300Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T05:10:16.445Z", + "endDate": "2026-02-06T05:10:28.445Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T05:15:16.301Z", + "endDate": "2026-02-06T05:15:26.801Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T05:20:16.29Z", + "endDate": "2026-02-06T05:20:22.290Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T05:25:15.303Z", + "endDate": "2026-02-06T05:25:20.303Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T05:30:00Z", + "endDate": "2026-02-06T05:35:16.306Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T05:35:16.306Z", + "endDate": "2026-02-06T05:55:19.289Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T05:55:19.29Z", + "endDate": "2026-02-06T05:55:19.345Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T05:55:19.346Z", + "endDate": "2026-02-06T06:00:16.671Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T06:00:16.671Z", + "endDate": "2026-02-06T06:05:18.058Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T06:05:18.059Z", + "endDate": "2026-02-06T06:10:16.777Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T06:10:16.777Z", + "endDate": "2026-02-06T06:40:16.959Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T06:10:17.647Z", + "endDate": "2026-02-06T06:10:22.647Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T06:15:16.886Z", + "endDate": "2026-02-06T06:15:22.886Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T06:20:18.086Z", + "endDate": "2026-02-06T06:20:23.086Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T06:25:16.443Z", + "endDate": "2026-02-06T06:25:21.443Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T06:30:16.643Z", + "endDate": "2026-02-06T06:30:21.643Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T06:35:18.975Z", + "endDate": "2026-02-06T06:35:23.975Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T06:40:16.96Z", + "endDate": "2026-02-06T06:45:16.843Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T06:45:16.843Z", + "endDate": "2026-02-06T07:05:15.111Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T07:05:15.111Z", + "endDate": "2026-02-06T07:10:15.452Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T07:10:15.453Z", + "endDate": "2026-02-06T07:40:17.177Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T07:25:15.583Z", + "endDate": "2026-02-06T07:25:20.583Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T07:30:15.842Z", + "endDate": "2026-02-06T07:30:23.342Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T07:35:18.131Z", + "endDate": "2026-02-06T07:35:23.131Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T07:40:17.177Z", + "endDate": "2026-02-06T07:45:15.453Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T07:45:15.454Z", + "endDate": "2026-02-06T07:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:00:00Z", + "endDate": "2026-02-06T08:05:15.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:05:15Z", + "endDate": "2026-02-06T08:10:16.004Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:10:16.005Z", + "endDate": "2026-02-06T08:20:15.218Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:20:15.219Z", + "endDate": "2026-02-06T08:25:16.260Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:25:16.26Z", + "endDate": "2026-02-06T08:25:16.309Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:25:16.309Z", + "endDate": "2026-02-06T08:30:16.623Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:30:16.624Z", + "endDate": "2026-02-06T08:40:17.303Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T08:35:15.56Z", + "endDate": "2026-02-06T08:35:20.560Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:40:17.304Z", + "endDate": "2026-02-06T08:45:17.608Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:45:17.608Z", + "endDate": "2026-02-06T08:45:17.611Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T08:45:17.612Z", + "endDate": "2026-02-06T09:00:17.049Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T09:00:17.05Z", + "endDate": "2026-02-06T09:45:15.937Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T09:10:15.924Z", + "endDate": "2026-02-06T09:10:20.924Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T09:15:16.455Z", + "endDate": "2026-02-06T09:15:21.455Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T09:20:17.888Z", + "endDate": "2026-02-06T09:20:22.888Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T09:25:16.782Z", + "endDate": "2026-02-06T09:25:24.282Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T09:30:17.912Z", + "endDate": "2026-02-06T09:30:22.912Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T09:45:15.938Z", + "endDate": "2026-02-06T09:50:17.269Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T09:50:17.269Z", + "endDate": "2026-02-06T09:50:17.273Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T09:50:17.274Z", + "endDate": "2026-02-06T09:55:18.249Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T09:55:18.249Z", + "endDate": "2026-02-06T09:55:18.252Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T09:55:18.253Z", + "endDate": "2026-02-06T10:10:16.032Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T10:10:16.032Z", + "endDate": "2026-02-06T10:10:16.035Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T10:10:16.036Z", + "endDate": "2026-02-06T10:15:17.852Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T10:15:17.852Z", + "endDate": "2026-02-06T10:15:17.856Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T10:15:17.857Z", + "endDate": "2026-02-06T10:20:16.189Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T10:20:16.189Z", + "endDate": "2026-02-06T10:55:17.216Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T10:25:16.344Z", + "endDate": "2026-02-06T10:25:21.344Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T10:30:16.917Z", + "endDate": "2026-02-06T10:30:21.917Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T10:35:21.011Z", + "endDate": "2026-02-06T10:35:27.011Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T10:40:16.238Z", + "endDate": "2026-02-06T10:40:22.238Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T10:45:18.327Z", + "endDate": "2026-02-06T10:45:23.327Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T10:50:16.88Z", + "endDate": "2026-02-06T10:50:21.880Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T10:55:17.216Z", + "endDate": "2026-02-06T11:00:17.221Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:00:17.222Z", + "endDate": "2026-02-06T11:00:17.231Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:00:17.231Z", + "endDate": "2026-02-06T11:15:16.026Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:15:16.027Z", + "endDate": "2026-02-06T11:15:16.031Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:15:16.031Z", + "endDate": "2026-02-06T11:20:16.617Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:20:16.617Z", + "endDate": "2026-02-06T11:20:16.747Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:20:16.748Z", + "endDate": "2026-02-06T11:40:17.653Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T11:40:17.654Z", + "endDate": "2026-02-06T12:15:16.227Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T11:40:18.523Z", + "endDate": "2026-02-06T11:40:23.523Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T11:45:17.868Z", + "endDate": "2026-02-06T11:45:22.868Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T11:50:16.086Z", + "endDate": "2026-02-06T11:50:21.086Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T11:55:17.652Z", + "endDate": "2026-02-06T11:55:25.152Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T12:00:17.958Z", + "endDate": "2026-02-06T12:00:23.958Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T12:05:19.912Z", + "endDate": "2026-02-06T12:05:24.912Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T12:10:18.955Z", + "endDate": "2026-02-06T12:10:23.955Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:15:16.227Z", + "endDate": "2026-02-06T12:20:20.314Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:20:20.314Z", + "endDate": "2026-02-06T12:20:20.318Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:20:20.319Z", + "endDate": "2026-02-06T12:35:19.143Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:35:19.143Z", + "endDate": "2026-02-06T12:35:19.146Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:35:19.146Z", + "endDate": "2026-02-06T12:40:17.346Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:40:17.347Z", + "endDate": "2026-02-06T12:45:15.613Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:45:15.614Z", + "endDate": "2026-02-06T12:50:16.139Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:50:16.139Z", + "endDate": "2026-02-06T12:50:16.142Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:50:16.143Z", + "endDate": "2026-02-06T12:55:18.125Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T12:55:18.125Z", + "endDate": "2026-02-06T13:00:16.206Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T13:00:16.206Z", + "endDate": "2026-02-06T13:10:17.760Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T13:10:17.761Z", + "endDate": "2026-02-06T13:40:17.048Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T13:10:18.495Z", + "endDate": "2026-02-06T13:10:23.495Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T13:15:16.478Z", + "endDate": "2026-02-06T13:15:22.478Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T13:20:18.27Z", + "endDate": "2026-02-06T13:20:23.270Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T13:25:16.46Z", + "endDate": "2026-02-06T13:25:23.960Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T13:30:16.327Z", + "endDate": "2026-02-06T13:30:22.327Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T13:35:17.757Z", + "endDate": "2026-02-06T13:35:22.757Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T13:40:17.048Z", + "endDate": "2026-02-06T13:55:16.556Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T13:55:16.556Z", + "endDate": "2026-02-06T13:55:16.560Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T13:55:16.56Z", + "endDate": "2026-02-06T14:00:17.949Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:00:17.951Z", + "endDate": "2026-02-06T14:20:19.626Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:00:17.95Z", + "endDate": "2026-02-06T14:00:17.951Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:20:19.627Z", + "endDate": "2026-02-06T14:30:19.260Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:30:19.261Z", + "endDate": "2026-02-06T14:40:17.536Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:40:17.537Z", + "endDate": "2026-02-06T14:45:18.051Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:45:18.052Z", + "endDate": "2026-02-06T14:55:17.815Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T14:55:17.815Z", + "endDate": "2026-02-06T14:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:00:00Z", + "endDate": "2026-02-06T15:05:36.081Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T15:00:16.525Z", + "endDate": "2026-02-06T15:00:21.525Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T15:05:18.402Z", + "endDate": "2026-02-06T15:05:23.402Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:05:36.082Z", + "endDate": "2026-02-06T15:06:24.802Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:06:24.802Z", + "endDate": "2026-02-06T15:20:16.372Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T15:06:54.165Z", + "endDate": "2026-02-06T15:10:01.665Z", + "value": 6.25, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-06T15:15:19.011Z", + "endDate": "2026-02-06T15:15:37.011Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:20:16.373Z", + "endDate": "2026-02-06T15:25:16.797Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:25:16.797Z", + "endDate": "2026-02-06T15:25:16.801Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:25:16.802Z", + "endDate": "2026-02-06T15:30:16.861Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:30:16.862Z", + "endDate": "2026-02-06T15:30:16.865Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:30:16.865Z", + "endDate": "2026-02-06T15:35:19.041Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:35:19.042Z", + "endDate": "2026-02-06T15:40:16.504Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:40:16.504Z", + "endDate": "2026-02-06T15:45:16.877Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:45:16.877Z", + "endDate": "2026-02-06T15:45:16.882Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:45:16.883Z", + "endDate": "2026-02-06T15:50:18.935Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:50:18.935Z", + "endDate": "2026-02-06T15:50:18.938Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:50:18.939Z", + "endDate": "2026-02-06T15:55:18.311Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:55:18.311Z", + "endDate": "2026-02-06T15:55:18.315Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T15:55:18.315Z", + "endDate": "2026-02-06T16:00:19.995Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:00:19.996Z", + "endDate": "2026-02-06T16:00:19.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:00:20Z", + "endDate": "2026-02-06T16:05:17.510Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:05:17.513Z", + "endDate": "2026-02-06T16:20:19.295Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:05:17.51Z", + "endDate": "2026-02-06T16:05:17.512Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:20:19.296Z", + "endDate": "2026-02-06T16:20:19.306Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:20:19.307Z", + "endDate": "2026-02-06T16:25:17.798Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:25:17.798Z", + "endDate": "2026-02-06T16:25:17.801Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:25:17.801Z", + "endDate": "2026-02-06T16:30:18.956Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:30:18.957Z", + "endDate": "2026-02-06T16:30:18.960Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:30:18.96Z", + "endDate": "2026-02-06T16:35:16.744Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:35:16.744Z", + "endDate": "2026-02-06T16:35:16.746Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:35:16.747Z", + "endDate": "2026-02-06T16:40:16.662Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:40:16.662Z", + "endDate": "2026-02-06T16:55:16.326Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T16:55:16.326Z", + "endDate": "2026-02-06T17:00:16.983Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:00:16.983Z", + "endDate": "2026-02-06T17:05:15.803Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:05:15.804Z", + "endDate": "2026-02-06T17:05:17.324Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:05:17.324Z", + "endDate": "2026-02-06T17:10:20.484Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:10:20.485Z", + "endDate": "2026-02-06T17:10:20.487Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:10:20.488Z", + "endDate": "2026-02-06T17:15:18.542Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:15:18.543Z", + "endDate": "2026-02-06T17:25:17.618Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T17:15:19.289Z", + "endDate": "2026-02-06T17:15:24.289Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T17:20:18.231Z", + "endDate": "2026-02-06T17:20:24.231Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:25:17.618Z", + "endDate": "2026-02-06T17:45:17.815Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:45:17.815Z", + "endDate": "2026-02-06T17:45:17.817Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T17:45:17.818Z", + "endDate": "2026-02-06T18:00:19.701Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T18:00:19.701Z", + "endDate": "2026-02-06T18:55:19.021Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:00:20.454Z", + "endDate": "2026-02-06T18:00:25.454Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:05:19.512Z", + "endDate": "2026-02-06T18:05:24.512Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:10:17.476Z", + "endDate": "2026-02-06T18:10:22.476Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:20:17.198Z", + "endDate": "2026-02-06T18:20:22.198Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:25:19.408Z", + "endDate": "2026-02-06T18:25:24.408Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:30:18.667Z", + "endDate": "2026-02-06T18:30:23.667Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:35:18.778Z", + "endDate": "2026-02-06T18:35:23.778Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:40:18.454Z", + "endDate": "2026-02-06T18:40:23.454Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T18:45:18.881Z", + "endDate": "2026-02-06T18:45:23.881Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T18:55:19.021Z", + "endDate": "2026-02-06T19:05:17.271Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:05:17.272Z", + "endDate": "2026-02-06T19:05:17.275Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:05:17.275Z", + "endDate": "2026-02-06T19:15:17.131Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:15:17.132Z", + "endDate": "2026-02-06T19:15:17.135Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:15:17.136Z", + "endDate": "2026-02-06T19:20:19.640Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:20:19.645Z", + "endDate": "2026-02-06T19:30:18.282Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:20:19.64Z", + "endDate": "2026-02-06T19:20:19.644Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:30:18.283Z", + "endDate": "2026-02-06T19:35:16.643Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:35:16.643Z", + "endDate": "2026-02-06T19:40:17.650Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T19:40:17.651Z", + "endDate": "2026-02-06T20:30:32.368Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T19:55:17.997Z", + "endDate": "2026-02-06T19:55:22.997Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T20:20:19.823Z", + "endDate": "2026-02-06T20:20:24.823Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T20:26:26.376Z", + "endDate": "2026-02-06T20:27:30.876Z", + "value": 2.15, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T20:30:32.368Z", + "endDate": "2026-02-06T20:30:48.144Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T20:30:48.144Z", + "endDate": "2026-02-06T20:45:18.718Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T20:31:12.806Z", + "endDate": "2026-02-06T20:31:18.806Z", + "value": 0.2, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-06T20:35:17.306Z", + "endDate": "2026-02-06T20:35:22.306Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T20:45:18.718Z", + "endDate": "2026-02-06T20:50:18.205Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T20:50:18.206Z", + "endDate": "2026-02-06T20:55:19.236Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T20:55:19.237Z", + "endDate": "2026-02-06T21:05:29.336Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:05:29.336Z", + "endDate": "2026-02-06T21:10:16.615Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:10:16.616Z", + "endDate": "2026-02-06T21:15:16.958Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:15:16.959Z", + "endDate": "2026-02-06T21:21:46.654Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:21:46.654Z", + "endDate": "2026-02-06T21:25:19.317Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:25:19.318Z", + "endDate": "2026-02-06T21:45:17.997Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:45:17.997Z", + "endDate": "2026-02-06T21:45:18.006Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:45:18.007Z", + "endDate": "2026-02-06T21:55:20.783Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T21:55:20.783Z", + "endDate": "2026-02-06T21:59:59.999Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T21:55:21.564Z", + "endDate": "2026-02-06T21:55:26.564Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T21:59:50.74Z", + "endDate": "2026-02-06T21:59:55.740Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T22:00:00Z", + "endDate": "2026-02-06T22:18:23.706Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T22:00:17.996Z", + "endDate": "2026-02-06T22:00:22.996Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T22:15:17.842Z", + "endDate": "2026-02-06T22:15:22.842Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T22:18:23.707Z", + "endDate": "2026-02-06T22:20:17.326Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T22:20:17.326Z", + "endDate": "2026-02-06T22:40:21.881Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T22:40:21.882Z", + "endDate": "2026-02-06T22:40:21.885Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T22:40:21.886Z", + "endDate": "2026-02-06T23:00:18.184Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T22:55:19.115Z", + "endDate": "2026-02-06T22:55:24.115Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T23:00:18.185Z", + "endDate": "2026-02-06T23:00:18.186Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T23:00:18.186Z", + "endDate": "2026-02-06T23:20:21.724Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T23:15:18.124Z", + "endDate": "2026-02-06T23:15:23.124Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T23:20:21.725Z", + "endDate": "2026-02-06T23:20:21.728Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T23:20:21.728Z", + "endDate": "2026-02-06T23:40:22.237Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T23:35:22.408Z", + "endDate": "2026-02-06T23:35:29.908Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T23:40:22.238Z", + "endDate": "2026-02-06T23:40:22.241Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-06T23:40:22.241Z", + "endDate": "2026-02-07T00:00:20.087Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T23:40:23.393Z", + "endDate": "2026-02-06T23:40:28.393Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-06T23:58:17.4Z", + "endDate": "2026-02-06T23:59:54.900Z", + "value": 3.25, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:00:20.087Z", + "endDate": "2026-02-07T00:10:18.544Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T00:05:18.294Z", + "endDate": "2026-02-07T00:05:33.294Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:10:18.545Z", + "endDate": "2026-02-07T00:15:17.349Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:15:17.352Z", + "endDate": "2026-02-07T00:20:19.774Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:15:17.35Z", + "endDate": "2026-02-07T00:15:17.351Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:20:19.774Z", + "endDate": "2026-02-07T00:35:17.114Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T00:25:20.127Z", + "endDate": "2026-02-07T00:25:25.127Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T00:30:17.224Z", + "endDate": "2026-02-07T00:30:22.224Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:35:17.115Z", + "endDate": "2026-02-07T00:40:18.739Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:40:18.739Z", + "endDate": "2026-02-07T00:40:18.741Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:40:18.741Z", + "endDate": "2026-02-07T00:45:24.177Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:45:24.178Z", + "endDate": "2026-02-07T00:45:24.180Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:45:24.181Z", + "endDate": "2026-02-07T00:50:23.633Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:50:23.633Z", + "endDate": "2026-02-07T00:50:23.635Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:50:23.635Z", + "endDate": "2026-02-07T00:55:19.104Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:55:19.105Z", + "endDate": "2026-02-07T00:55:19.106Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T00:55:19.107Z", + "endDate": "2026-02-07T01:05:17.949Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T00:58:10.319Z", + "endDate": "2026-02-07T01:00:55.319Z", + "value": 5.5, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:05:17.95Z", + "endDate": "2026-02-07T01:24:09.202Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:24:09.202Z", + "endDate": "2026-02-07T01:25:19.052Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:25:19.053Z", + "endDate": "2026-02-07T01:45:19.095Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T01:30:19.976Z", + "endDate": "2026-02-07T01:30:36.476Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T01:35:18.168Z", + "endDate": "2026-02-07T01:35:33.168Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T01:40:18.295Z", + "endDate": "2026-02-07T01:40:28.795Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:45:19.096Z", + "endDate": "2026-02-07T01:45:19.098Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:45:19.099Z", + "endDate": "2026-02-07T01:50:19.911Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:50:19.911Z", + "endDate": "2026-02-07T01:50:19.913Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:50:19.913Z", + "endDate": "2026-02-07T01:55:24.776Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:55:24.777Z", + "endDate": "2026-02-07T01:55:24.780Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T01:55:24.78Z", + "endDate": "2026-02-07T02:15:19.600Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T01:55:26.021Z", + "endDate": "2026-02-07T01:55:35.021Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T02:00:27.246Z", + "endDate": "2026-02-07T02:00:34.746Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T02:15:19.603Z", + "endDate": "2026-02-07T02:35:19.645Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T02:15:19.6Z", + "endDate": "2026-02-07T02:15:19.603Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T02:15:20.845Z", + "endDate": "2026-02-07T02:15:25.845Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T02:20:22.187Z", + "endDate": "2026-02-07T02:20:27.187Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T02:35:19.646Z", + "endDate": "2026-02-07T02:35:19.648Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T02:35:19.649Z", + "endDate": "2026-02-07T02:55:27.388Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T02:55:27.388Z", + "endDate": "2026-02-07T02:55:27.390Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T02:55:27.39Z", + "endDate": "2026-02-07T03:15:19.395Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T03:10:27.351Z", + "endDate": "2026-02-07T03:10:32.351Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T03:15:19.395Z", + "endDate": "2026-02-07T03:15:19.397Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T03:15:19.398Z", + "endDate": "2026-02-07T03:25:18.591Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T03:25:18.592Z", + "endDate": "2026-02-07T04:20:26.845Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T03:25:19.339Z", + "endDate": "2026-02-07T03:25:29.839Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T03:40:19.171Z", + "endDate": "2026-02-07T03:40:26.671Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T03:45:18.247Z", + "endDate": "2026-02-07T03:45:23.247Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T03:50:18.988Z", + "endDate": "2026-02-07T03:50:24.988Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T03:55:18.709Z", + "endDate": "2026-02-07T03:55:23.709Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T04:01:14.186Z", + "endDate": "2026-02-07T04:02:23.186Z", + "value": 2.3, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-07T04:05:18.107Z", + "endDate": "2026-02-07T04:05:28.607Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T04:10:20.109Z", + "endDate": "2026-02-07T04:10:41.109Z", + "value": 0.7, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T04:20:26.845Z", + "endDate": "2026-02-07T04:25:23.161Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T04:25:23.162Z", + "endDate": "2026-02-07T04:25:23.164Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T04:25:23.164Z", + "endDate": "2026-02-07T04:45:22.369Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T04:45:22.369Z", + "endDate": "2026-02-07T04:45:22.370Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T04:45:22.371Z", + "endDate": "2026-02-07T05:00:20.308Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T05:00:20.309Z", + "endDate": "2026-02-07T05:00:20.312Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T05:00:20.312Z", + "endDate": "2026-02-07T05:05:18.169Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T05:05:18.169Z", + "endDate": "2026-02-07T05:05:18.171Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T05:05:18.172Z", + "endDate": "2026-02-07T05:08:36.308Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-02-07T05:08:36.309Z", + "endDate": "2026-02-07T05:10:58.695Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T05:10:58.695Z", + "endDate": "2026-02-07T05:30:00.000Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T05:30:00Z", + "endDate": "2026-02-07T06:55:20.436Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T05:33:21.994Z", + "endDate": "2026-02-07T05:33:26.994Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T05:40:33.414Z", + "endDate": "2026-02-07T05:40:46.914Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T05:45:28.08Z", + "endDate": "2026-02-07T05:45:37.080Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T05:50:33.8Z", + "endDate": "2026-02-07T05:50:45.800Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T05:55:26.5Z", + "endDate": "2026-02-07T05:55:35.500Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:00:27.121Z", + "endDate": "2026-02-07T06:00:32.121Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:05:25.084Z", + "endDate": "2026-02-07T06:05:32.584Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:10:24.549Z", + "endDate": "2026-02-07T06:10:29.549Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:20:19.49Z", + "endDate": "2026-02-07T06:20:24.490Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:25:18.925Z", + "endDate": "2026-02-07T06:25:24.925Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:30:20.836Z", + "endDate": "2026-02-07T06:30:28.336Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:35:21.532Z", + "endDate": "2026-02-07T06:35:26.532Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T06:45:18.675Z", + "endDate": "2026-02-07T06:45:23.675Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T06:55:20.437Z", + "endDate": "2026-02-07T07:00:20.549Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T07:00:20.549Z", + "endDate": "2026-02-07T07:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:05:19.654Z", + "endDate": "2026-02-07T07:05:24.654Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:10:18.471Z", + "endDate": "2026-02-07T07:10:25.971Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:15:18.436Z", + "endDate": "2026-02-07T07:15:24.436Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:20:19.911Z", + "endDate": "2026-02-07T07:20:25.911Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:25:20.965Z", + "endDate": "2026-02-07T07:25:25.965Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:30:18.286Z", + "endDate": "2026-02-07T07:30:23.286Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:35:18.156Z", + "endDate": "2026-02-07T07:35:23.156Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T07:50:20.612Z", + "endDate": "2026-02-07T07:50:26.612Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T08:00:00Z", + "endDate": "2026-02-07T08:30:19.418Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:00:28.631Z", + "endDate": "2026-02-07T08:00:33.631Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:05:56.175Z", + "endDate": "2026-02-07T08:06:01.175Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:10:19.937Z", + "endDate": "2026-02-07T08:10:24.937Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:15:19.03Z", + "endDate": "2026-02-07T08:15:28.030Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:20:20.431Z", + "endDate": "2026-02-07T08:20:32.431Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:25:19.985Z", + "endDate": "2026-02-07T08:25:24.985Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T08:30:19.419Z", + "endDate": "2026-02-07T08:35:18.763Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T08:35:18.763Z", + "endDate": "2026-02-07T08:55:18.995Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:40:18.961Z", + "endDate": "2026-02-07T08:40:23.961Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:45:19.087Z", + "endDate": "2026-02-07T08:45:26.587Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T08:50:20.774Z", + "endDate": "2026-02-07T08:50:25.774Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T08:55:18.996Z", + "endDate": "2026-02-07T09:00:19.284Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T09:00:19.284Z", + "endDate": "2026-02-07T09:00:19.339Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T09:00:19.34Z", + "endDate": "2026-02-07T09:05:19.197Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T09:05:19.198Z", + "endDate": "2026-02-07T09:50:20.394Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:10:20.282Z", + "endDate": "2026-02-07T09:10:32.282Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:15:19.828Z", + "endDate": "2026-02-07T09:15:33.328Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:20:18.842Z", + "endDate": "2026-02-07T09:20:23.842Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:25:19.131Z", + "endDate": "2026-02-07T09:25:24.131Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:30:21.28Z", + "endDate": "2026-02-07T09:30:26.280Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:40:25.821Z", + "endDate": "2026-02-07T09:40:34.821Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T09:45:19.437Z", + "endDate": "2026-02-07T09:45:24.437Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T09:50:20.394Z", + "endDate": "2026-02-07T10:00:22.665Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:00:22.666Z", + "endDate": "2026-02-07T10:00:22.669Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:00:22.669Z", + "endDate": "2026-02-07T10:05:18.546Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:05:18.547Z", + "endDate": "2026-02-07T10:05:18.549Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:05:18.55Z", + "endDate": "2026-02-07T10:10:20.310Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:10:20.31Z", + "endDate": "2026-02-07T10:15:18.639Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:15:18.639Z", + "endDate": "2026-02-07T10:20:19.060Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T10:20:19.06Z", + "endDate": "2026-02-07T11:05:20.385Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T10:30:18.723Z", + "endDate": "2026-02-07T10:30:23.723Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T10:40:18.648Z", + "endDate": "2026-02-07T10:40:23.648Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T10:50:19.459Z", + "endDate": "2026-02-07T10:50:24.459Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T10:55:21.187Z", + "endDate": "2026-02-07T10:55:26.187Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T11:00:23.604Z", + "endDate": "2026-02-07T11:00:28.604Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:05:20.385Z", + "endDate": "2026-02-07T11:10:19.921Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:10:19.922Z", + "endDate": "2026-02-07T11:10:19.926Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:10:19.926Z", + "endDate": "2026-02-07T11:15:19.303Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:15:19.304Z", + "endDate": "2026-02-07T11:30:20.095Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T11:20:18.695Z", + "endDate": "2026-02-07T11:20:24.695Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T11:25:20.081Z", + "endDate": "2026-02-07T11:25:25.081Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:30:20.095Z", + "endDate": "2026-02-07T11:35:18.981Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:35:18.982Z", + "endDate": "2026-02-07T11:35:18.986Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:35:18.987Z", + "endDate": "2026-02-07T11:45:20.866Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:45:20.866Z", + "endDate": "2026-02-07T11:45:20.868Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:45:20.868Z", + "endDate": "2026-02-07T11:50:20.914Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:50:20.915Z", + "endDate": "2026-02-07T11:50:20.919Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T11:50:20.919Z", + "endDate": "2026-02-07T12:10:19.578Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T12:10:19.579Z", + "endDate": "2026-02-07T12:10:19.581Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T12:10:19.581Z", + "endDate": "2026-02-07T12:15:18.861Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T12:15:18.862Z", + "endDate": "2026-02-07T12:20:20.764Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T12:20:20.764Z", + "endDate": "2026-02-07T12:40:19.224Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T12:40:19.224Z", + "endDate": "2026-02-07T13:00:18.812Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T13:00:18.813Z", + "endDate": "2026-02-07T13:20:21.497Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T13:20:21.498Z", + "endDate": "2026-02-07T13:20:21.501Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T13:20:21.501Z", + "endDate": "2026-02-07T13:40:19.970Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T13:40:19.971Z", + "endDate": "2026-02-07T13:40:19.973Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T13:40:19.974Z", + "endDate": "2026-02-07T13:55:19.799Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T13:55:19.8Z", + "endDate": "2026-02-07T14:15:18.902Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T14:15:18.902Z", + "endDate": "2026-02-07T14:20:21.441Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T14:20:21.442Z", + "endDate": "2026-02-07T14:30:20.534Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T14:30:20.535Z", + "endDate": "2026-02-07T14:50:26.865Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T14:50:26.865Z", + "endDate": "2026-02-07T15:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T15:00:00Z", + "endDate": "2026-02-07T15:45:22.238Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T15:20:21.451Z", + "endDate": "2026-02-07T15:20:34.951Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T15:25:21.495Z", + "endDate": "2026-02-07T15:25:26.495Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T15:30:22.112Z", + "endDate": "2026-02-07T15:30:27.112Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T15:35:19.773Z", + "endDate": "2026-02-07T15:35:24.773Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T15:45:22.239Z", + "endDate": "2026-02-07T15:50:19.826Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T15:50:19.826Z", + "endDate": "2026-02-07T15:50:19.830Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T15:50:19.831Z", + "endDate": "2026-02-07T15:55:20.459Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T15:55:20.464Z", + "endDate": "2026-02-07T16:00:34.201Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T15:55:20.46Z", + "endDate": "2026-02-07T15:55:20.463Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T16:00:34.201Z", + "endDate": "2026-02-07T16:45:19.216Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T16:45:19.217Z", + "endDate": "2026-02-07T16:55:19.521Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T16:55:19.521Z", + "endDate": "2026-02-07T17:05:19.086Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T16:55:20.274Z", + "endDate": "2026-02-07T16:55:30.774Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T17:00:20.772Z", + "endDate": "2026-02-07T17:00:28.272Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T17:04:54.458Z", + "endDate": "2026-02-07T17:05:00.458Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T17:05:19.087Z", + "endDate": "2026-02-07T17:20:21.862Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T17:20:21.862Z", + "endDate": "2026-02-07T17:35:24.598Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T17:20:22.806Z", + "endDate": "2026-02-07T17:20:27.806Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T17:21:57.907Z", + "endDate": "2026-02-07T17:24:12.907Z", + "value": 4.5, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T17:35:24.599Z", + "endDate": "2026-02-07T17:45:27.194Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T17:45:27.194Z", + "endDate": "2026-02-07T17:45:27.197Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T17:45:27.198Z", + "endDate": "2026-02-07T17:55:19.472Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T17:55:19.473Z", + "endDate": "2026-02-07T18:00:19.770Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T18:00:19.771Z", + "endDate": "2026-02-07T18:05:19.491Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T18:05:19.492Z", + "endDate": "2026-02-07T18:10:21.302Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T18:10:21.302Z", + "endDate": "2026-02-07T18:15:19.412Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T18:15:19.412Z", + "endDate": "2026-02-07T18:43:41.851Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:15:19.953Z", + "endDate": "2026-02-07T18:15:24.953Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:20:20.33Z", + "endDate": "2026-02-07T18:20:29.330Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:25:21.489Z", + "endDate": "2026-02-07T18:25:26.489Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:30:21.085Z", + "endDate": "2026-02-07T18:30:34.585Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:35:19.424Z", + "endDate": "2026-02-07T18:35:32.924Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:40:21.393Z", + "endDate": "2026-02-07T18:40:39.393Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T18:43:41.851Z", + "endDate": "2026-02-07T18:44:45.141Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T18:44:45.142Z", + "endDate": "2026-02-07T18:59:59.999Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:45:24.273Z", + "endDate": "2026-02-07T18:45:36.273Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:50:24.608Z", + "endDate": "2026-02-07T18:50:32.108Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T18:55:19.919Z", + "endDate": "2026-02-07T18:56:01.919Z", + "value": 1.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T19:00:00Z", + "endDate": "2026-02-07T19:20:21.415Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T19:00:19.429Z", + "endDate": "2026-02-07T19:01:02.929Z", + "value": 1.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T19:05:23.244Z", + "endDate": "2026-02-07T19:05:41.244Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T19:15:22.611Z", + "endDate": "2026-02-07T19:15:27.611Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T19:20:21.415Z", + "endDate": "2026-02-07T19:30:19.833Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T19:30:19.834Z", + "endDate": "2026-02-07T19:30:19.836Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T19:30:19.836Z", + "endDate": "2026-02-07T19:40:22.260Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T19:40:22.261Z", + "endDate": "2026-02-07T20:10:21.396Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T19:45:22.552Z", + "endDate": "2026-02-07T19:45:27.552Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T19:50:20.776Z", + "endDate": "2026-02-07T19:50:28.276Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T19:55:19.598Z", + "endDate": "2026-02-07T19:55:27.098Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:00:21.777Z", + "endDate": "2026-02-07T20:00:29.277Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:05:20.645Z", + "endDate": "2026-02-07T20:05:25.645Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T20:10:21.396Z", + "endDate": "2026-02-07T20:15:19.727Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T20:15:19.728Z", + "endDate": "2026-02-07T21:15:21.414Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:15:20.357Z", + "endDate": "2026-02-07T20:15:25.357Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:20:19.867Z", + "endDate": "2026-02-07T20:20:24.867Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:25:22.182Z", + "endDate": "2026-02-07T20:25:27.182Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:30:20.627Z", + "endDate": "2026-02-07T20:30:25.627Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:35:20.754Z", + "endDate": "2026-02-07T20:35:25.754Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:46:07.44Z", + "endDate": "2026-02-07T20:46:12.440Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:50:19.456Z", + "endDate": "2026-02-07T20:50:24.456Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T20:55:21.741Z", + "endDate": "2026-02-07T20:55:27.741Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T21:00:19.783Z", + "endDate": "2026-02-07T21:00:28.783Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T21:05:20.416Z", + "endDate": "2026-02-07T21:05:27.916Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:15:21.414Z", + "endDate": "2026-02-07T21:20:19.983Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:20:19.984Z", + "endDate": "2026-02-07T21:20:19.985Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:20:19.986Z", + "endDate": "2026-02-07T21:40:22.408Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T21:22:23.827Z", + "endDate": "2026-02-07T21:25:20.827Z", + "value": 5.9, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:40:22.408Z", + "endDate": "2026-02-07T21:40:22.410Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:40:22.411Z", + "endDate": "2026-02-07T21:55:21.780Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:55:21.782Z", + "endDate": "2026-02-07T22:00:21.638Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T21:55:21.78Z", + "endDate": "2026-02-07T21:55:21.782Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:00:21.639Z", + "endDate": "2026-02-07T22:00:21.643Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:00:21.643Z", + "endDate": "2026-02-07T22:20:29.986Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:20:29.986Z", + "endDate": "2026-02-07T22:20:29.987Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:20:29.988Z", + "endDate": "2026-02-07T22:25:22.343Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:25:22.343Z", + "endDate": "2026-02-07T22:25:22.345Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:25:22.346Z", + "endDate": "2026-02-07T22:45:21.254Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:45:21.255Z", + "endDate": "2026-02-07T22:45:21.259Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T22:45:21.259Z", + "endDate": "2026-02-07T23:05:21.144Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:05:21.145Z", + "endDate": "2026-02-07T23:05:21.146Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:05:21.146Z", + "endDate": "2026-02-07T23:20:20.770Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:20:20.772Z", + "endDate": "2026-02-07T23:35:20.219Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:20:20.77Z", + "endDate": "2026-02-07T23:20:20.771Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:35:20.219Z", + "endDate": "2026-02-07T23:50:23.252Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T23:40:25.145Z", + "endDate": "2026-02-07T23:40:30.145Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:50:23.253Z", + "endDate": "2026-02-07T23:55:23.978Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-07T23:55:23.978Z", + "endDate": "2026-02-08T00:05:20.349Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-07T23:55:24.713Z", + "endDate": "2026-02-07T23:55:29.713Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T00:00:23.79Z", + "endDate": "2026-02-08T00:00:28.790Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:05:20.35Z", + "endDate": "2026-02-08T00:15:20.384Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:15:20.384Z", + "endDate": "2026-02-08T00:15:20.385Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:15:20.386Z", + "endDate": "2026-02-08T00:20:24.156Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:20:24.156Z", + "endDate": "2026-02-08T00:20:24.159Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:20:24.16Z", + "endDate": "2026-02-08T00:40:20.891Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:40:20.891Z", + "endDate": "2026-02-08T00:40:20.893Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:40:20.894Z", + "endDate": "2026-02-08T00:55:20.958Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T00:48:08.583Z", + "endDate": "2026-02-08T00:49:37.083Z", + "value": 2.95, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T00:55:20.959Z", + "endDate": "2026-02-08T01:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T01:00:00Z", + "endDate": "2026-02-08T01:30:20.115Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T01:00:27.34Z", + "endDate": "2026-02-08T01:01:04.840Z", + "value": 1.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T01:05:22.426Z", + "endDate": "2026-02-08T01:05:47.926Z", + "value": 0.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T01:10:22.386Z", + "endDate": "2026-02-08T01:10:34.386Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T01:15:20.637Z", + "endDate": "2026-02-08T01:15:25.637Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T01:20:24.784Z", + "endDate": "2026-02-08T01:20:29.784Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T01:25:23.108Z", + "endDate": "2026-02-08T01:25:28.108Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T01:30:20.116Z", + "endDate": "2026-02-08T01:35:22.021Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T01:35:22.021Z", + "endDate": "2026-02-08T01:35:22.023Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T01:35:22.024Z", + "endDate": "2026-02-08T01:55:22.536Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T01:55:22.537Z", + "endDate": "2026-02-08T01:55:22.540Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T01:55:22.54Z", + "endDate": "2026-02-08T02:05:20.985Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T02:05:20.985Z", + "endDate": "2026-02-08T03:10:25.834Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T02:55:27.003Z", + "endDate": "2026-02-08T02:55:32.003Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T03:00:28.596Z", + "endDate": "2026-02-08T03:00:33.596Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T03:10:25.835Z", + "endDate": "2026-02-08T03:20:23.354Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T03:11:12.581Z", + "endDate": "2026-02-08T03:13:11.081Z", + "value": 3.95, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T03:20:23.354Z", + "endDate": "2026-02-08T05:29:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T03:30:11.344Z", + "endDate": "2026-02-08T03:32:09.844Z", + "value": 3.95, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-08T04:00:20.735Z", + "endDate": "2026-02-08T04:00:50.735Z", + "value": 1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T04:05:20.441Z", + "endDate": "2026-02-08T04:05:44.441Z", + "value": 0.8, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T05:30:00Z", + "endDate": "2026-02-08T05:55:22.354Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T05:55:22.355Z", + "endDate": "2026-02-08T06:15:23.044Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T06:15:23.044Z", + "endDate": "2026-02-08T06:15:23.152Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T06:15:23.153Z", + "endDate": "2026-02-08T06:35:24.775Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T06:35:24.775Z", + "endDate": "2026-02-08T06:35:24.776Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T06:35:24.776Z", + "endDate": "2026-02-08T06:55:22.514Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T06:55:22.515Z", + "endDate": "2026-02-08T06:55:22.557Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T06:55:22.557Z", + "endDate": "2026-02-08T07:15:23.808Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T07:15:23.809Z", + "endDate": "2026-02-08T07:15:23.810Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T07:15:23.81Z", + "endDate": "2026-02-08T07:35:21.909Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T07:35:21.912Z", + "endDate": "2026-02-08T07:55:21.896Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T07:35:21.91Z", + "endDate": "2026-02-08T07:35:21.911Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T07:55:21.896Z", + "endDate": "2026-02-08T07:55:21.897Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T07:55:21.897Z", + "endDate": "2026-02-08T08:15:22.875Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T08:15:22.876Z", + "endDate": "2026-02-08T08:15:22.878Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T08:15:22.878Z", + "endDate": "2026-02-08T08:35:21.301Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T08:35:21.302Z", + "endDate": "2026-02-08T08:35:21.304Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T08:35:21.305Z", + "endDate": "2026-02-08T08:55:21.752Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T08:55:21.752Z", + "endDate": "2026-02-08T08:55:21.804Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T08:55:21.804Z", + "endDate": "2026-02-08T09:15:21.351Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T09:15:21.352Z", + "endDate": "2026-02-08T09:15:21.359Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T09:15:21.36Z", + "endDate": "2026-02-08T09:35:21.959Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T09:35:21.959Z", + "endDate": "2026-02-08T09:35:21.961Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T09:35:21.961Z", + "endDate": "2026-02-08T09:45:21.939Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T09:45:21.94Z", + "endDate": "2026-02-08T10:00:21.221Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T10:00:21.222Z", + "endDate": "2026-02-08T10:05:21.900Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T10:05:21.901Z", + "endDate": "2026-02-08T10:15:23.040Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T10:15:23.041Z", + "endDate": "2026-02-08T10:35:23.400Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T10:35:23.403Z", + "endDate": "2026-02-08T10:55:21.418Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T10:35:23.4Z", + "endDate": "2026-02-08T10:35:23.402Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T10:55:21.418Z", + "endDate": "2026-02-08T12:40:25.162Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T12:40:25.163Z", + "endDate": "2026-02-08T12:45:27.927Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T12:45:27.928Z", + "endDate": "2026-02-08T13:30:21.890Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T13:15:25.996Z", + "endDate": "2026-02-08T13:15:37.996Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T13:20:23.766Z", + "endDate": "2026-02-08T13:20:31.266Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T13:30:21.89Z", + "endDate": "2026-02-08T13:50:21.930Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T13:50:21.931Z", + "endDate": "2026-02-08T13:50:21.935Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T13:50:21.936Z", + "endDate": "2026-02-08T14:05:23.592Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T14:05:23.593Z", + "endDate": "2026-02-08T14:15:22.232Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T14:15:22.232Z", + "endDate": "2026-02-08T14:35:23.744Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T14:35:23.745Z", + "endDate": "2026-02-08T15:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T14:40:23.343Z", + "endDate": "2026-02-08T14:40:30.843Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T14:45:24.188Z", + "endDate": "2026-02-08T14:45:30.188Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T14:50:23.279Z", + "endDate": "2026-02-08T14:50:30.779Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T14:55:22.666Z", + "endDate": "2026-02-08T14:55:27.666Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:00:00Z", + "endDate": "2026-02-08T15:00:22.435Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:00:22.436Z", + "endDate": "2026-02-08T15:05:22.014Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:05:22.014Z", + "endDate": "2026-02-08T15:05:22.017Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:05:22.018Z", + "endDate": "2026-02-08T15:10:21.913Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:10:21.913Z", + "endDate": "2026-02-08T15:10:21.915Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:10:21.916Z", + "endDate": "2026-02-08T15:15:21.856Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:15:21.857Z", + "endDate": "2026-02-08T15:15:21.858Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:15:21.858Z", + "endDate": "2026-02-08T15:30:22.544Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:30:22.545Z", + "endDate": "2026-02-08T15:45:24.021Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T15:30:23.354Z", + "endDate": "2026-02-08T15:30:28.354Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T15:35:23.54Z", + "endDate": "2026-02-08T15:35:35.540Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:45:24.021Z", + "endDate": "2026-02-08T15:50:25.633Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T15:50:25.634Z", + "endDate": "2026-02-08T15:59:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T15:50:26.385Z", + "endDate": "2026-02-08T15:50:31.385Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T16:00:00Z", + "endDate": "2026-02-08T16:10:24.869Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T16:10:24.869Z", + "endDate": "2026-02-08T16:15:22.973Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T16:15:22.974Z", + "endDate": "2026-02-08T17:25:22.187Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T16:35:27.82Z", + "endDate": "2026-02-08T16:35:32.820Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T17:15:23.629Z", + "endDate": "2026-02-08T17:15:28.629Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T17:20:23.916Z", + "endDate": "2026-02-08T17:20:28.916Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T17:25:22.187Z", + "endDate": "2026-02-08T17:30:23.852Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T17:30:23.853Z", + "endDate": "2026-02-08T17:40:28.453Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T17:30:24.483Z", + "endDate": "2026-02-08T17:30:30.483Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T17:35:24.547Z", + "endDate": "2026-02-08T17:35:33.547Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T17:40:28.454Z", + "endDate": "2026-02-08T17:50:25.392Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T17:50:25.392Z", + "endDate": "2026-02-08T17:55:24.110Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T17:55:24.111Z", + "endDate": "2026-02-08T18:00:26.091Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:00:26.092Z", + "endDate": "2026-02-08T18:00:26.095Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:00:26.095Z", + "endDate": "2026-02-08T18:15:22.387Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:15:22.388Z", + "endDate": "2026-02-08T18:20:24.379Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:20:24.379Z", + "endDate": "2026-02-08T18:40:24.604Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:40:24.605Z", + "endDate": "2026-02-08T18:40:24.608Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:40:24.608Z", + "endDate": "2026-02-08T18:50:23.080Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T18:50:23.081Z", + "endDate": "2026-02-08T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:00:00Z", + "endDate": "2026-02-08T19:05:27.144Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T19:00:22.193Z", + "endDate": "2026-02-08T19:00:28.193Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:05:27.145Z", + "endDate": "2026-02-08T19:10:22.366Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:10:22.366Z", + "endDate": "2026-02-08T19:25:21.902Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T19:10:23.013Z", + "endDate": "2026-02-08T19:10:28.013Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T19:14:04.581Z", + "endDate": "2026-02-08T19:16:39.081Z", + "value": 5.15, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-08T19:20:24.657Z", + "endDate": "2026-02-08T19:20:35.157Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:25:21.903Z", + "endDate": "2026-02-08T19:45:23.538Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:45:23.539Z", + "endDate": "2026-02-08T19:45:23.541Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:45:23.541Z", + "endDate": "2026-02-08T19:50:23.381Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:50:23.381Z", + "endDate": "2026-02-08T19:50:23.384Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:50:23.385Z", + "endDate": "2026-02-08T19:56:45.938Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:56:45.938Z", + "endDate": "2026-02-08T19:56:45.942Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T19:56:45.943Z", + "endDate": "2026-02-08T20:10:25.011Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:10:25.012Z", + "endDate": "2026-02-08T20:25:23.124Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T20:10:25.626Z", + "endDate": "2026-02-08T20:10:34.626Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:25:23.124Z", + "endDate": "2026-02-08T20:25:24.248Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:25:24.249Z", + "endDate": "2026-02-08T20:30:24.938Z", + "value": 1, + "unit": "U/hour", + "scheduledBasalRate": 1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:30:24.939Z", + "endDate": "2026-02-08T20:30:24.941Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:30:24.941Z", + "endDate": "2026-02-08T20:35:24.387Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:35:24.387Z", + "endDate": "2026-02-08T20:35:24.388Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:35:24.389Z", + "endDate": "2026-02-08T20:40:25.428Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:40:25.429Z", + "endDate": "2026-02-08T20:40:25.430Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T20:40:25.431Z", + "endDate": "2026-02-08T21:00:23.919Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T20:45:24.384Z", + "endDate": "2026-02-08T20:45:29.384Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T20:50:28.364Z", + "endDate": "2026-02-08T20:50:33.364Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:00:23.922Z", + "endDate": "2026-02-08T21:05:24.495Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:00:23.92Z", + "endDate": "2026-02-08T21:00:23.922Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:00:25.12Z", + "endDate": "2026-02-08T21:00:30.120Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:05:24.496Z", + "endDate": "2026-02-08T21:50:22.935Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:05:25.111Z", + "endDate": "2026-02-08T21:05:38.611Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:10:26.168Z", + "endDate": "2026-02-08T21:10:42.668Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:15:22.786Z", + "endDate": "2026-02-08T21:15:39.286Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:20:23.09Z", + "endDate": "2026-02-08T21:20:32.090Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:25:23.972Z", + "endDate": "2026-02-08T21:25:31.472Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:30:24.982Z", + "endDate": "2026-02-08T21:30:32.482Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:35:24.521Z", + "endDate": "2026-02-08T21:35:29.521Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:40:22.769Z", + "endDate": "2026-02-08T21:40:27.769Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:50:22.936Z", + "endDate": "2026-02-08T21:50:24.025Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:50:24.026Z", + "endDate": "2026-02-08T21:55:24.255Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:55:24.255Z", + "endDate": "2026-02-08T21:55:24.258Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T21:55:24.259Z", + "endDate": "2026-02-08T22:00:25.864Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T21:55:25.559Z", + "endDate": "2026-02-08T21:55:30.559Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:00:25.864Z", + "endDate": "2026-02-08T22:00:25.865Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:00:25.866Z", + "endDate": "2026-02-08T22:05:24.098Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:05:24.099Z", + "endDate": "2026-02-08T22:05:24.099Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:05:24.1Z", + "endDate": "2026-02-08T22:15:22.548Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:15:22.548Z", + "endDate": "2026-02-08T22:50:23.760Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T22:15:23.045Z", + "endDate": "2026-02-08T22:15:28.045Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T22:20:23.635Z", + "endDate": "2026-02-08T22:20:31.135Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T22:25:24.936Z", + "endDate": "2026-02-08T22:25:29.936Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T22:40:25.401Z", + "endDate": "2026-02-08T22:40:30.401Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T22:45:23.799Z", + "endDate": "2026-02-08T22:45:31.299Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:50:23.761Z", + "endDate": "2026-02-08T22:55:23.091Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:55:23.092Z", + "endDate": "2026-02-08T22:55:23.095Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T22:55:23.096Z", + "endDate": "2026-02-08T23:00:24.912Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:00:24.913Z", + "endDate": "2026-02-08T23:05:25.203Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:05:25.203Z", + "endDate": "2026-02-08T23:10:30.455Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:10:30.455Z", + "endDate": "2026-02-08T23:30:23.346Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-08T23:10:31.055Z", + "endDate": "2026-02-08T23:10:36.055Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:30:23.346Z", + "endDate": "2026-02-08T23:30:27.911Z", + "value": 0.45, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:30:27.912Z", + "endDate": "2026-02-08T23:40:23.507Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:40:23.508Z", + "endDate": "2026-02-08T23:40:23.510Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:40:23.51Z", + "endDate": "2026-02-08T23:45:25.478Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:45:25.479Z", + "endDate": "2026-02-08T23:45:25.480Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:45:25.48Z", + "endDate": "2026-02-08T23:50:22.782Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:50:22.783Z", + "endDate": "2026-02-08T23:50:22.786Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:50:22.786Z", + "endDate": "2026-02-08T23:55:23.217Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:55:23.217Z", + "endDate": "2026-02-08T23:55:23.232Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-08T23:55:23.232Z", + "endDate": "2026-02-09T00:00:25.915Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T00:00:25.916Z", + "endDate": "2026-02-09T00:00:25.918Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T00:00:25.919Z", + "endDate": "2026-02-09T00:05:26.792Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T00:05:26.792Z", + "endDate": "2026-02-09T01:00:00.000Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T00:15:23.532Z", + "endDate": "2026-02-09T00:15:28.532Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T00:25:26.589Z", + "endDate": "2026-02-09T00:25:31.589Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T00:30:33.391Z", + "endDate": "2026-02-09T00:30:38.391Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T00:35:26.185Z", + "endDate": "2026-02-09T00:35:33.685Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T00:40:09.567Z", + "endDate": "2026-02-09T00:41:42.567Z", + "value": 3.1, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-09T00:45:24.634Z", + "endDate": "2026-02-09T00:45:29.634Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:00:00Z", + "endDate": "2026-02-09T01:10:26.531Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T01:05:24.265Z", + "endDate": "2026-02-09T01:05:29.265Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:10:26.531Z", + "endDate": "2026-02-09T01:15:26.285Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:15:26.286Z", + "endDate": "2026-02-09T01:15:26.288Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:15:26.288Z", + "endDate": "2026-02-09T01:20:22.824Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:20:22.825Z", + "endDate": "2026-02-09T01:20:22.826Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:20:22.826Z", + "endDate": "2026-02-09T01:25:23.552Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:25:23.553Z", + "endDate": "2026-02-09T01:25:23.555Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:25:23.555Z", + "endDate": "2026-02-09T01:30:22.958Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:30:22.959Z", + "endDate": "2026-02-09T01:45:24.419Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T01:35:24.208Z", + "endDate": "2026-02-09T01:35:29.208Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:45:24.42Z", + "endDate": "2026-02-09T01:50:23.699Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:50:23.701Z", + "endDate": "2026-02-09T01:55:23.223Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:50:23.7Z", + "endDate": "2026-02-09T01:50:23.701Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T01:55:23.224Z", + "endDate": "2026-02-09T04:25:25.887Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T01:55:23.75Z", + "endDate": "2026-02-09T01:55:28.750Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T01:57:12.293Z", + "endDate": "2026-02-09T01:59:09.293Z", + "value": 3.9, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-09T02:00:23.694Z", + "endDate": "2026-02-09T02:00:40.194Z", + "value": 0.55, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T02:05:24.584Z", + "endDate": "2026-02-09T02:05:51.584Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T02:15:23.132Z", + "endDate": "2026-02-09T02:15:41.132Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T03:05:25.019Z", + "endDate": "2026-02-09T03:05:50.519Z", + "value": 0.85, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T03:10:23.677Z", + "endDate": "2026-02-09T03:10:50.677Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T03:15:24.282Z", + "endDate": "2026-02-09T03:15:46.782Z", + "value": 0.75, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T03:40:23.23Z", + "endDate": "2026-02-09T03:40:32.230Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T03:45:23.278Z", + "endDate": "2026-02-09T03:45:32.278Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T03:50:28.439Z", + "endDate": "2026-02-09T03:50:33.439Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:05:23.323Z", + "endDate": "2026-02-09T04:05:28.323Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:10:25.093Z", + "endDate": "2026-02-09T04:10:32.593Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:15:25.791Z", + "endDate": "2026-02-09T04:15:30.791Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T04:25:25.888Z", + "endDate": "2026-02-09T04:30:24.036Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T04:30:24.036Z", + "endDate": "2026-02-09T04:35:25.043Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:30:24.681Z", + "endDate": "2026-02-09T04:30:29.681Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T04:35:25.043Z", + "endDate": "2026-02-09T04:45:26.135Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T04:45:26.136Z", + "endDate": "2026-02-09T04:45:26.145Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T04:45:26.145Z", + "endDate": "2026-02-09T04:50:23.486Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T04:50:23.487Z", + "endDate": "2026-02-09T05:20:23.953Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:50:24.087Z", + "endDate": "2026-02-09T04:50:29.087Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:54:40.635Z", + "endDate": "2026-02-09T04:54:45.635Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T04:55:23.37Z", + "endDate": "2026-02-09T04:55:29.370Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:05:23.454Z", + "endDate": "2026-02-09T05:05:28.454Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:10:24.96Z", + "endDate": "2026-02-09T05:10:36.960Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:14:53.102Z", + "endDate": "2026-02-09T05:14:59.102Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:15:28.457Z", + "endDate": "2026-02-09T05:15:35.957Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T05:20:23.953Z", + "endDate": "2026-02-09T05:25:25.309Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T05:25:25.309Z", + "endDate": "2026-02-09T05:29:59.999Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:25:25.942Z", + "endDate": "2026-02-09T05:25:30.942Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T05:30:00Z", + "endDate": "2026-02-09T06:00:23.325Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:30:25.002Z", + "endDate": "2026-02-09T05:30:30.002Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:40:26.378Z", + "endDate": "2026-02-09T05:40:35.378Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:45:25.95Z", + "endDate": "2026-02-09T05:45:36.450Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:50:24.173Z", + "endDate": "2026-02-09T05:50:31.673Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T05:55:25.451Z", + "endDate": "2026-02-09T05:55:30.451Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:00:23.325Z", + "endDate": "2026-02-09T06:05:25.691Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:05:25.691Z", + "endDate": "2026-02-09T06:05:25.695Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:05:25.696Z", + "endDate": "2026-02-09T06:15:29.601Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:15:29.601Z", + "endDate": "2026-02-09T06:15:29.605Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:15:29.605Z", + "endDate": "2026-02-09T06:25:24.548Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:25:24.549Z", + "endDate": "2026-02-09T06:25:24.551Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:25:24.551Z", + "endDate": "2026-02-09T06:30:25.200Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:30:25.201Z", + "endDate": "2026-02-09T06:30:25.206Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:30:25.207Z", + "endDate": "2026-02-09T06:35:24.500Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:35:24.5Z", + "endDate": "2026-02-09T06:55:23.158Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T06:40:24.071Z", + "endDate": "2026-02-09T06:40:29.071Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T06:45:25.307Z", + "endDate": "2026-02-09T06:45:30.307Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T06:55:23.158Z", + "endDate": "2026-02-09T07:00:25.335Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T07:00:25.336Z", + "endDate": "2026-02-09T07:40:23.194Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:05:24.412Z", + "endDate": "2026-02-09T07:05:30.412Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:10:27.147Z", + "endDate": "2026-02-09T07:10:32.147Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:15:24.513Z", + "endDate": "2026-02-09T07:15:32.013Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:20:28.943Z", + "endDate": "2026-02-09T07:20:33.943Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:25:28.231Z", + "endDate": "2026-02-09T07:25:33.231Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:30:25.222Z", + "endDate": "2026-02-09T07:30:30.222Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T07:40:23.194Z", + "endDate": "2026-02-09T07:45:25.652Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T07:45:25.653Z", + "endDate": "2026-02-09T07:45:25.708Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T07:45:25.708Z", + "endDate": "2026-02-09T07:50:24.954Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T07:50:24.955Z", + "endDate": "2026-02-09T08:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T07:55:24.017Z", + "endDate": "2026-02-09T07:55:29.017Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T08:00:00Z", + "endDate": "2026-02-09T08:35:24.334Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T08:00:26.064Z", + "endDate": "2026-02-09T08:00:41.064Z", + "value": 0.5, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T08:05:24.192Z", + "endDate": "2026-02-09T08:05:31.692Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T08:25:25.909Z", + "endDate": "2026-02-09T08:25:30.909Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T08:35:24.334Z", + "endDate": "2026-02-09T08:40:24.381Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T08:40:24.382Z", + "endDate": "2026-02-09T08:50:25.348Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T08:50:25.348Z", + "endDate": "2026-02-09T08:55:25.235Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T08:55:25.236Z", + "endDate": "2026-02-09T08:55:25.239Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T08:55:25.239Z", + "endDate": "2026-02-09T09:00:24.733Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:00:24.733Z", + "endDate": "2026-02-09T09:15:25.491Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:15:25.492Z", + "endDate": "2026-02-09T09:20:26.104Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:20:26.105Z", + "endDate": "2026-02-09T09:20:26.108Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:20:26.109Z", + "endDate": "2026-02-09T09:25:24.836Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:25:24.836Z", + "endDate": "2026-02-09T09:35:25.557Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T09:25:25.616Z", + "endDate": "2026-02-09T09:25:30.616Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T09:30:25.274Z", + "endDate": "2026-02-09T09:30:30.274Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:35:25.557Z", + "endDate": "2026-02-09T09:40:28.149Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:40:28.153Z", + "endDate": "2026-02-09T09:45:26.988Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:40:28.15Z", + "endDate": "2026-02-09T09:40:28.153Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:45:26.988Z", + "endDate": "2026-02-09T09:45:26.992Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:45:26.993Z", + "endDate": "2026-02-09T09:50:25.536Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:50:25.536Z", + "endDate": "2026-02-09T09:50:25.538Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T09:50:25.539Z", + "endDate": "2026-02-09T10:10:25.916Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T10:10:25.916Z", + "endDate": "2026-02-09T10:10:25.920Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T10:10:25.92Z", + "endDate": "2026-02-09T10:15:25.919Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T10:15:25.92Z", + "endDate": "2026-02-09T10:40:24.995Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T10:15:26.656Z", + "endDate": "2026-02-09T10:15:31.656Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T10:20:25.67Z", + "endDate": "2026-02-09T10:20:30.670Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T10:25:24.313Z", + "endDate": "2026-02-09T10:25:29.313Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T10:40:24.995Z", + "endDate": "2026-02-09T11:00:24.369Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:00:24.372Z", + "endDate": "2026-02-09T11:05:25.691Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:00:24.37Z", + "endDate": "2026-02-09T11:00:24.372Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:05:25.692Z", + "endDate": "2026-02-09T11:20:25.344Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:20:25.345Z", + "endDate": "2026-02-09T11:25:26.133Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:25:26.133Z", + "endDate": "2026-02-09T11:45:23.809Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T11:30:24.159Z", + "endDate": "2026-02-09T11:30:34.659Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T11:35:24.582Z", + "endDate": "2026-02-09T11:35:32.082Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:45:23.809Z", + "endDate": "2026-02-09T11:50:26.787Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:50:26.787Z", + "endDate": "2026-02-09T11:50:26.790Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T11:50:26.791Z", + "endDate": "2026-02-09T12:10:25.353Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T12:10:25.353Z", + "endDate": "2026-02-09T12:10:25.355Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T12:10:25.356Z", + "endDate": "2026-02-09T12:25:26.572Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T12:25:26.573Z", + "endDate": "2026-02-09T12:55:23.990Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T12:35:26.81Z", + "endDate": "2026-02-09T12:35:31.810Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T12:40:25.36Z", + "endDate": "2026-02-09T12:40:35.860Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T12:45:26.325Z", + "endDate": "2026-02-09T12:45:36.825Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T12:50:24.996Z", + "endDate": "2026-02-09T12:50:29.996Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T12:55:23.99Z", + "endDate": "2026-02-09T13:00:24.630Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:00:24.631Z", + "endDate": "2026-02-09T13:00:24.636Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:00:24.636Z", + "endDate": "2026-02-09T13:20:26.403Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:20:26.404Z", + "endDate": "2026-02-09T13:20:26.408Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:20:26.409Z", + "endDate": "2026-02-09T13:30:25.949Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:30:25.949Z", + "endDate": "2026-02-09T13:30:25.952Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:30:25.952Z", + "endDate": "2026-02-09T13:35:36.258Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:35:36.258Z", + "endDate": "2026-02-09T13:40:26.113Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:40:26.114Z", + "endDate": "2026-02-09T13:45:25.991Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:45:25.992Z", + "endDate": "2026-02-09T13:45:25.995Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:45:25.995Z", + "endDate": "2026-02-09T13:50:24.798Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T13:50:24.798Z", + "endDate": "2026-02-09T14:40:25.155Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T14:15:26.324Z", + "endDate": "2026-02-09T14:15:31.324Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T14:20:26.538Z", + "endDate": "2026-02-09T14:20:31.538Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T14:25:24.517Z", + "endDate": "2026-02-09T14:25:29.517Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T14:40:25.156Z", + "endDate": "2026-02-09T14:40:26.439Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T14:40:26.439Z", + "endDate": "2026-02-09T14:45:24.416Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T14:45:24.417Z", + "endDate": "2026-02-09T14:45:24.419Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T14:45:24.42Z", + "endDate": "2026-02-09T14:55:25.158Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T14:55:25.158Z", + "endDate": "2026-02-09T14:55:25.164Z", + "value": 0.4, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T14:55:25.165Z", + "endDate": "2026-02-09T15:00:25.579Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T15:00:25.581Z", + "endDate": "2026-02-09T15:20:24.915Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T15:00:25.58Z", + "endDate": "2026-02-09T15:00:25.581Z", + "value": 0.55, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T15:15:25.068Z", + "endDate": "2026-02-09T15:15:30.068Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T15:20:24.916Z", + "endDate": "2026-02-09T15:40:24.380Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T15:20:25.666Z", + "endDate": "2026-02-09T15:20:37.666Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T15:29:23.482Z", + "endDate": "2026-02-09T15:29:29.482Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T15:30:25.236Z", + "endDate": "2026-02-09T15:30:32.736Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T15:40:24.38Z", + "endDate": "2026-02-09T15:45:31.578Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T15:45:31.579Z", + "endDate": "2026-02-09T15:45:31.581Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T15:45:31.581Z", + "endDate": "2026-02-09T16:05:24.588Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T16:05:24.588Z", + "endDate": "2026-02-09T16:05:24.590Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T16:05:24.591Z", + "endDate": "2026-02-09T16:25:24.500Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T16:25:24.501Z", + "endDate": "2026-02-09T16:25:24.503Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T16:25:24.503Z", + "endDate": "2026-02-09T16:40:28.370Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T16:40:28.371Z", + "endDate": "2026-02-09T17:10:24.579Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T16:55:25.331Z", + "endDate": "2026-02-09T16:55:32.831Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T17:00:25.513Z", + "endDate": "2026-02-09T17:00:31.513Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T17:05:27.184Z", + "endDate": "2026-02-09T17:05:34.684Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:10:24.58Z", + "endDate": "2026-02-09T17:20:24.948Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:20:24.948Z", + "endDate": "2026-02-09T17:30:26.841Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T17:20:25.616Z", + "endDate": "2026-02-09T17:20:39.116Z", + "value": 0.45, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T17:28:27.99Z", + "endDate": "2026-02-09T17:28:32.990Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:30:26.842Z", + "endDate": "2026-02-09T17:40:25.077Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:40:25.078Z", + "endDate": "2026-02-09T17:45:24.151Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:45:24.152Z", + "endDate": "2026-02-09T17:50:25.410Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:50:25.411Z", + "endDate": "2026-02-09T17:50:25.412Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:50:25.412Z", + "endDate": "2026-02-09T17:55:26.568Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:55:26.569Z", + "endDate": "2026-02-09T17:55:26.571Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T17:55:26.571Z", + "endDate": "2026-02-09T18:05:25.474Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T18:05:25.475Z", + "endDate": "2026-02-09T18:10:24.539Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T18:05:26.075Z", + "endDate": "2026-02-09T18:05:31.075Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T18:10:24.539Z", + "endDate": "2026-02-09T18:15:24.952Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T18:15:24.953Z", + "endDate": "2026-02-09T19:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T18:20:26.012Z", + "endDate": "2026-02-09T18:20:31.012Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T18:30:26.917Z", + "endDate": "2026-02-09T18:30:31.917Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T18:45:27.002Z", + "endDate": "2026-02-09T18:45:32.002Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T18:48:04.279Z", + "endDate": "2026-02-09T18:49:58.279Z", + "value": 3.8, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T19:00:00Z", + "endDate": "2026-02-09T19:20:26.441Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T19:05:25.964Z", + "endDate": "2026-02-09T19:05:30.964Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T19:10:26.596Z", + "endDate": "2026-02-09T19:10:34.096Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T19:15:26.137Z", + "endDate": "2026-02-09T19:15:31.137Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T19:20:26.441Z", + "endDate": "2026-02-09T19:40:27.790Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T19:40:27.791Z", + "endDate": "2026-02-09T19:40:27.805Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T19:40:27.806Z", + "endDate": "2026-02-09T20:00:25.562Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:00:25.562Z", + "endDate": "2026-02-09T20:00:25.572Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:00:25.572Z", + "endDate": "2026-02-09T20:05:26.889Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:05:26.89Z", + "endDate": "2026-02-09T20:10:25.407Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:10:25.408Z", + "endDate": "2026-02-09T20:15:29.794Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:15:29.794Z", + "endDate": "2026-02-09T20:15:29.797Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:15:29.797Z", + "endDate": "2026-02-09T20:20:25.238Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:20:25.238Z", + "endDate": "2026-02-09T20:20:25.244Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:20:25.245Z", + "endDate": "2026-02-09T20:25:27.223Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:25:27.224Z", + "endDate": "2026-02-09T20:25:27.250Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:25:27.25Z", + "endDate": "2026-02-09T20:30:30.987Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:30:30.987Z", + "endDate": "2026-02-09T20:30:30.989Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:30:30.99Z", + "endDate": "2026-02-09T20:40:25.865Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T20:33:38.116Z", + "endDate": "2026-02-09T20:35:47.116Z", + "value": 4.3, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T20:40:25.866Z", + "endDate": "2026-02-09T21:45:25.719Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T21:30:27.338Z", + "endDate": "2026-02-09T21:30:32.338Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T21:35:27.295Z", + "endDate": "2026-02-09T21:35:32.295Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T21:40:12.524Z", + "endDate": "2026-02-09T21:40:17.524Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T21:45:25.719Z", + "endDate": "2026-02-09T21:50:27.860Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T21:50:27.861Z", + "endDate": "2026-02-09T21:50:27.863Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T21:50:27.863Z", + "endDate": "2026-02-09T21:55:25.989Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T21:55:25.989Z", + "endDate": "2026-02-09T21:55:25.990Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T21:55:25.991Z", + "endDate": "2026-02-09T22:00:26.789Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:00:26.79Z", + "endDate": "2026-02-09T22:23:24.374Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T22:05:27.817Z", + "endDate": "2026-02-09T22:05:32.817Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T22:10:25.534Z", + "endDate": "2026-02-09T22:10:30.534Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-09T22:15:26.319Z", + "endDate": "2026-02-09T22:15:31.319Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:23:24.374Z", + "endDate": "2026-02-09T22:25:27.415Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:25:27.415Z", + "endDate": "2026-02-09T22:25:27.443Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:25:27.444Z", + "endDate": "2026-02-09T22:30:25.215Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:30:25.215Z", + "endDate": "2026-02-09T22:30:25.222Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:30:25.223Z", + "endDate": "2026-02-09T22:35:29.179Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:35:29.179Z", + "endDate": "2026-02-09T22:35:29.182Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:35:29.182Z", + "endDate": "2026-02-09T22:35:31.998Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:35:31.999Z", + "endDate": "2026-02-09T22:35:32.001Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:35:32.001Z", + "endDate": "2026-02-09T22:40:26.469Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-09T22:40:26.47Z", + "endDate": "2026-02-10T00:30:30.924Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T00:30:30.924Z", + "endDate": "2026-02-10T00:35:25.947Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T00:35:25.948Z", + "endDate": "2026-02-10T00:35:25.951Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T00:35:25.951Z", + "endDate": "2026-02-10T00:40:26.191Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T00:40:26.191Z", + "endDate": "2026-02-10T00:59:59.999Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T00:40:26.809Z", + "endDate": "2026-02-10T00:40:31.809Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T00:55:26.223Z", + "endDate": "2026-02-10T00:55:31.223Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T01:00:00Z", + "endDate": "2026-02-10T01:05:27.210Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T01:05:27.211Z", + "endDate": "2026-02-10T01:10:25.651Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T01:10:25.651Z", + "endDate": "2026-02-10T01:15:25.845Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T01:15:25.845Z", + "endDate": "2026-02-10T01:20:29.409Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T01:19:21.053Z", + "endDate": "2026-02-10T01:22:04.553Z", + "value": 5.45, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T01:20:29.41Z", + "endDate": "2026-02-10T01:55:25.112Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T01:45:28.289Z", + "endDate": "2026-02-10T01:45:33.289Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T01:55:25.112Z", + "endDate": "2026-02-10T02:00:26.235Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:00:26.235Z", + "endDate": "2026-02-10T02:00:26.237Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:00:26.238Z", + "endDate": "2026-02-10T02:05:27.295Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:05:27.296Z", + "endDate": "2026-02-10T02:10:26.297Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T02:05:27.912Z", + "endDate": "2026-02-10T02:05:32.912Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:10:26.297Z", + "endDate": "2026-02-10T02:15:28.032Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:15:28.032Z", + "endDate": "2026-02-10T02:15:28.034Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:15:28.034Z", + "endDate": "2026-02-10T02:20:28.637Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T02:20:28.638Z", + "endDate": "2026-02-10T03:05:27.812Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T02:30:28.262Z", + "endDate": "2026-02-10T02:30:33.262Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T02:55:26.023Z", + "endDate": "2026-02-10T02:55:31.023Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T03:00:28.218Z", + "endDate": "2026-02-10T03:00:33.218Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:05:27.813Z", + "endDate": "2026-02-10T03:10:26.746Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:10:26.746Z", + "endDate": "2026-02-10T03:15:27.551Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:15:27.552Z", + "endDate": "2026-02-10T03:20:28.028Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:20:28.029Z", + "endDate": "2026-02-10T03:20:28.032Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:20:28.032Z", + "endDate": "2026-02-10T03:25:26.081Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:25:26.081Z", + "endDate": "2026-02-10T03:25:26.082Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:25:26.082Z", + "endDate": "2026-02-10T03:30:26.035Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:30:26.035Z", + "endDate": "2026-02-10T03:30:26.047Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:30:26.047Z", + "endDate": "2026-02-10T03:35:28.323Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T03:35:28.324Z", + "endDate": "2026-02-10T04:00:25.546Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T03:45:28.689Z", + "endDate": "2026-02-10T03:45:33.689Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T03:50:26.129Z", + "endDate": "2026-02-10T03:50:31.129Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T04:00:25.546Z", + "endDate": "2026-02-10T04:05:26.665Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T04:05:26.665Z", + "endDate": "2026-02-10T04:25:27.473Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T04:15:26.179Z", + "endDate": "2026-02-10T04:15:31.179Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T04:25:27.473Z", + "endDate": "2026-02-10T04:25:34.511Z", + "value": 0.15, + "unit": "U/hour", + "scheduledBasalRate": 0.15, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "suspend", + "startDate": "2026-02-10T04:25:34.512Z", + "endDate": "2026-02-10T04:28:19.797Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr" + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T04:28:19.798Z", + "endDate": "2026-02-10T05:05:25.908Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T04:30:27.312Z", + "endDate": "2026-02-10T04:30:32.312Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T04:35:27.326Z", + "endDate": "2026-02-10T04:35:36.326Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T04:40:27.153Z", + "endDate": "2026-02-10T04:40:32.153Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T04:55:26.359Z", + "endDate": "2026-02-10T04:55:31.359Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:05:25.908Z", + "endDate": "2026-02-10T05:10:26.931Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:10:26.932Z", + "endDate": "2026-02-10T05:10:26.936Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:10:26.936Z", + "endDate": "2026-02-10T05:15:28.391Z", + "value": 0.6, + "unit": "U/hour", + "scheduledBasalRate": 0.6, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:15:28.391Z", + "endDate": "2026-02-10T05:15:28.393Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:15:28.394Z", + "endDate": "2026-02-10T05:20:26.235Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:20:26.236Z", + "endDate": "2026-02-10T05:20:26.238Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:20:26.238Z", + "endDate": "2026-02-10T05:25:27.258Z", + "value": 0.9, + "unit": "U/hour", + "scheduledBasalRate": 0.9, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:25:27.259Z", + "endDate": "2026-02-10T05:25:27.261Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:25:27.261Z", + "endDate": "2026-02-10T05:30:27.144Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:30:27.145Z", + "endDate": "2026-02-10T05:30:27.147Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:30:27.148Z", + "endDate": "2026-02-10T05:50:26.364Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:50:26.364Z", + "endDate": "2026-02-10T05:50:26.367Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:50:26.368Z", + "endDate": "2026-02-10T05:55:28.256Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T05:55:28.256Z", + "endDate": "2026-02-10T06:25:25.784Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T06:00:26.895Z", + "endDate": "2026-02-10T06:00:31.895Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T06:05:27.366Z", + "endDate": "2026-02-10T06:05:32.366Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T06:10:26.395Z", + "endDate": "2026-02-10T06:10:32.395Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T06:15:26.398Z", + "endDate": "2026-02-10T06:15:31.398Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T06:25:25.784Z", + "endDate": "2026-02-10T06:30:27.056Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T06:30:27.057Z", + "endDate": "2026-02-10T06:30:27.059Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T06:30:27.06Z", + "endDate": "2026-02-10T06:50:28.199Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T06:50:28.2Z", + "endDate": "2026-02-10T07:00:26.597Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T06:50:28.964Z", + "endDate": "2026-02-10T06:50:33.964Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:00:26.597Z", + "endDate": "2026-02-10T07:05:26.380Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:05:26.38Z", + "endDate": "2026-02-10T07:35:27.388Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T07:05:27.071Z", + "endDate": "2026-02-10T07:05:32.071Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T07:10:28.979Z", + "endDate": "2026-02-10T07:10:33.979Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T07:15:27.452Z", + "endDate": "2026-02-10T07:15:32.452Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T07:20:28.091Z", + "endDate": "2026-02-10T07:20:33.091Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T07:25:26.675Z", + "endDate": "2026-02-10T07:25:31.675Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:35:27.389Z", + "endDate": "2026-02-10T07:40:29.214Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:40:29.214Z", + "endDate": "2026-02-10T07:40:29.216Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:40:29.217Z", + "endDate": "2026-02-10T07:45:27.508Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:45:27.508Z", + "endDate": "2026-02-10T07:45:27.510Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:45:27.511Z", + "endDate": "2026-02-10T07:55:26.933Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:55:26.933Z", + "endDate": "2026-02-10T07:55:26.935Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T07:55:26.935Z", + "endDate": "2026-02-10T08:00:26.474Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T08:00:26.474Z", + "endDate": "2026-02-10T08:00:26.476Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T08:00:26.477Z", + "endDate": "2026-02-10T08:05:27.869Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T08:05:27.87Z", + "endDate": "2026-02-10T08:45:26.093Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T08:15:29.318Z", + "endDate": "2026-02-10T08:15:34.318Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T08:20:28.829Z", + "endDate": "2026-02-10T08:20:33.829Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T08:45:26.094Z", + "endDate": "2026-02-10T08:55:26.547Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T08:55:26.547Z", + "endDate": "2026-02-10T09:05:27.427Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T09:05:27.428Z", + "endDate": "2026-02-10T09:10:26.862Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T09:10:26.863Z", + "endDate": "2026-02-10T09:50:28.049Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T09:25:26.876Z", + "endDate": "2026-02-10T09:25:31.876Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T09:30:27.496Z", + "endDate": "2026-02-10T09:30:32.496Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T09:35:26.901Z", + "endDate": "2026-02-10T09:35:31.901Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T09:40:27.295Z", + "endDate": "2026-02-10T09:40:32.295Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T09:45:27.314Z", + "endDate": "2026-02-10T09:45:32.314Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T09:50:28.049Z", + "endDate": "2026-02-10T09:55:28.477Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T09:55:28.478Z", + "endDate": "2026-02-10T09:55:28.481Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T09:55:28.481Z", + "endDate": "2026-02-10T10:15:28.467Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T10:15:28.468Z", + "endDate": "2026-02-10T10:15:28.470Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T10:15:28.471Z", + "endDate": "2026-02-10T10:30:28.586Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T10:30:28.586Z", + "endDate": "2026-02-10T11:30:28.761Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T11:15:27.236Z", + "endDate": "2026-02-10T11:15:34.736Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T11:20:28.829Z", + "endDate": "2026-02-10T11:20:33.829Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T11:30:28.762Z", + "endDate": "2026-02-10T11:35:28.364Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T11:35:28.364Z", + "endDate": "2026-02-10T11:35:28.366Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T11:35:28.366Z", + "endDate": "2026-02-10T11:45:28.988Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T11:45:28.989Z", + "endDate": "2026-02-10T11:45:28.991Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T11:45:28.992Z", + "endDate": "2026-02-10T12:05:28.480Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T12:05:28.482Z", + "endDate": "2026-02-10T12:20:29.511Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T12:05:28.48Z", + "endDate": "2026-02-10T12:05:28.482Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T12:20:29.511Z", + "endDate": "2026-02-10T12:50:28.438Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T12:50:28.439Z", + "endDate": "2026-02-10T13:05:28.638Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T13:05:28.639Z", + "endDate": "2026-02-10T13:30:26.636Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T13:20:27.764Z", + "endDate": "2026-02-10T13:20:35.264Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T13:30:26.636Z", + "endDate": "2026-02-10T13:50:29.299Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T13:50:29.3Z", + "endDate": "2026-02-10T14:20:28.482Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T14:05:27.534Z", + "endDate": "2026-02-10T14:05:35.034Z", + "value": 0.25, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T14:10:27.493Z", + "endDate": "2026-02-10T14:10:36.493Z", + "value": 0.3, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T14:20:28.482Z", + "endDate": "2026-02-10T14:30:27.177Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T14:30:27.177Z", + "endDate": "2026-02-10T14:30:27.180Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T14:30:27.18Z", + "endDate": "2026-02-10T14:35:28.383Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T14:35:28.384Z", + "endDate": "2026-02-10T14:35:28.386Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T14:35:28.386Z", + "endDate": "2026-02-10T14:50:45.467Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T14:50:45.468Z", + "endDate": "2026-02-10T15:00:00.000Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T14:50:46.263Z", + "endDate": "2026-02-10T14:50:51.263Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T14:55:27.086Z", + "endDate": "2026-02-10T14:55:32.086Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:00:00Z", + "endDate": "2026-02-10T15:20:29.258Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T15:00:28.081Z", + "endDate": "2026-02-10T15:00:40.081Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T15:05:28.188Z", + "endDate": "2026-02-10T15:05:38.688Z", + "value": 0.35, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T15:10:31.357Z", + "endDate": "2026-02-10T15:10:37.357Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:20:29.259Z", + "endDate": "2026-02-10T15:25:29.288Z", + "value": 0.85, + "unit": "U/hour", + "scheduledBasalRate": 0.85, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:25:29.288Z", + "endDate": "2026-02-10T15:25:29.290Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:25:29.29Z", + "endDate": "2026-02-10T15:30:28.980Z", + "value": 0.75, + "unit": "U/hour", + "scheduledBasalRate": 0.75, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:30:28.982Z", + "endDate": "2026-02-10T15:35:29.714Z", + "value": 0.8, + "unit": "U/hour", + "scheduledBasalRate": 0.8, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:30:28.98Z", + "endDate": "2026-02-10T15:30:28.981Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:35:29.715Z", + "endDate": "2026-02-10T15:35:29.715Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:35:29.716Z", + "endDate": "2026-02-10T15:40:29.590Z", + "value": 0.55, + "unit": "U/hour", + "scheduledBasalRate": 0.55, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:40:29.591Z", + "endDate": "2026-02-10T15:45:30.820Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:40:29.59Z", + "endDate": "2026-02-10T15:40:29.591Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:45:30.821Z", + "endDate": "2026-02-10T15:45:30.823Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:45:30.824Z", + "endDate": "2026-02-10T15:50:28.228Z", + "value": 0.45, + "unit": "U/hour", + "scheduledBasalRate": 0.45, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:50:28.228Z", + "endDate": "2026-02-10T15:50:28.230Z", + "value": 1.1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T15:50:28.23Z", + "endDate": "2026-02-10T16:00:29.439Z", + "value": 0.65, + "unit": "U/hour", + "scheduledBasalRate": 0.65, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T15:54:40.984Z", + "endDate": "2026-02-10T15:56:36.484Z", + "value": 3.85, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:00:29.444Z", + "endDate": "2026-02-10T16:05:31.663Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:00:29.44Z", + "endDate": "2026-02-10T16:00:29.443Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:05:31.663Z", + "endDate": "2026-02-10T16:15:30.167Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:15:30.168Z", + "endDate": "2026-02-10T16:20:28.421Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:20:28.421Z", + "endDate": "2026-02-10T16:25:27.004Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:25:27.005Z", + "endDate": "2026-02-10T16:35:27.247Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:35:27.247Z", + "endDate": "2026-02-10T16:35:27.249Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:35:27.249Z", + "endDate": "2026-02-10T16:40:27.326Z", + "value": 0.3, + "unit": "U/hour", + "scheduledBasalRate": 0.3, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T16:35:36.878Z", + "endDate": "2026-02-10T16:36:18.878Z", + "value": 1.4, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T16:40:27.327Z", + "endDate": "2026-02-10T17:05:21.895Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T16:40:27.838Z", + "endDate": "2026-02-10T16:40:32.838Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T16:50:29.779Z", + "endDate": "2026-02-10T16:50:34.779Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T16:55:27.851Z", + "endDate": "2026-02-10T16:55:32.851Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T17:05:21.895Z", + "endDate": "2026-02-10T17:05:27.647Z", + "value": 0.05, + "unit": "U/hour", + "scheduledBasalRate": 0.05, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T17:05:27.648Z", + "endDate": "2026-02-10T18:25:27.381Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:10:28.556Z", + "endDate": "2026-02-10T17:10:33.556Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:25:28.692Z", + "endDate": "2026-02-10T17:25:33.692Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:30:29.824Z", + "endDate": "2026-02-10T17:30:34.824Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:35:28.615Z", + "endDate": "2026-02-10T17:35:33.615Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:40:27.782Z", + "endDate": "2026-02-10T17:40:33.782Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:45:28.51Z", + "endDate": "2026-02-10T17:45:33.510Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:50:27.977Z", + "endDate": "2026-02-10T17:50:33.977Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T17:55:29.391Z", + "endDate": "2026-02-10T17:55:34.391Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T18:00:27.671Z", + "endDate": "2026-02-10T18:00:32.671Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T18:05:29.148Z", + "endDate": "2026-02-10T18:05:34.148Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T18:15:29.594Z", + "endDate": "2026-02-10T18:15:34.594Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T18:20:28.956Z", + "endDate": "2026-02-10T18:20:33.956Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:25:27.381Z", + "endDate": "2026-02-10T18:30:30.006Z", + "value": 0.2, + "unit": "U/hour", + "scheduledBasalRate": 0.2, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:30:30.006Z", + "endDate": "2026-02-10T18:30:30.009Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:30:30.009Z", + "endDate": "2026-02-10T18:35:27.448Z", + "value": 0.25, + "unit": "U/hour", + "scheduledBasalRate": 0.25, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:35:27.449Z", + "endDate": "2026-02-10T18:35:27.452Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:35:27.453Z", + "endDate": "2026-02-10T18:40:29.192Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:40:29.192Z", + "endDate": "2026-02-10T18:50:29.728Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T18:40:30.077Z", + "endDate": "2026-02-10T18:40:35.077Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T18:45:27.608Z", + "endDate": "2026-02-10T18:45:32.608Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:50:29.729Z", + "endDate": "2026-02-10T18:55:27.861Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:55:27.861Z", + "endDate": "2026-02-10T18:55:27.894Z", + "value": 0.8, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T18:55:27.894Z", + "endDate": "2026-02-10T19:00:28.859Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:00:28.864Z", + "endDate": "2026-02-10T19:05:27.652Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:00:28.86Z", + "endDate": "2026-02-10T19:00:28.864Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:05:27.652Z", + "endDate": "2026-02-10T19:10:29.071Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T19:05:28.473Z", + "endDate": "2026-02-10T19:05:33.473Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:10:29.071Z", + "endDate": "2026-02-10T19:15:31.395Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:15:31.395Z", + "endDate": "2026-02-10T19:15:31.398Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:15:31.399Z", + "endDate": "2026-02-10T19:35:30.576Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:35:30.576Z", + "endDate": "2026-02-10T19:35:30.579Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:35:30.58Z", + "endDate": "2026-02-10T19:40:29.921Z", + "value": 0.1, + "unit": "U/hour", + "scheduledBasalRate": 0.1, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:40:29.922Z", + "endDate": "2026-02-10T19:40:29.924Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:40:29.924Z", + "endDate": "2026-02-10T19:55:37.512Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T19:47:44.977Z", + "endDate": "2026-02-10T19:48:50.977Z", + "value": 2.2, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-10T19:51:21.393Z", + "endDate": "2026-02-10T19:59:21.393Z", + "value": 16, + "unit": "U", + "isMutable": false + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T19:55:37.513Z", + "endDate": "2026-02-10T20:38:57.457Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T20:05:33.807Z", + "endDate": "2026-02-10T20:06:09.807Z", + "value": 1.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T20:15:27.998Z", + "endDate": "2026-02-10T20:15:54.998Z", + "value": 0.9, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T20:20:30.165Z", + "endDate": "2026-02-10T20:20:49.665Z", + "value": 0.65, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T20:25:29.011Z", + "endDate": "2026-02-10T20:25:34.011Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T20:30:29.004Z", + "endDate": "2026-02-10T20:30:34.004Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T20:35:29.397Z", + "endDate": "2026-02-10T20:35:34.397Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T20:38:57.457Z", + "endDate": "2026-02-10T20:40:39.733Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T20:40:39.734Z", + "endDate": "2026-02-10T21:00:28.134Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:00:28.135Z", + "endDate": "2026-02-10T21:00:28.138Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:00:28.138Z", + "endDate": "2026-02-10T21:10:28.685Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:10:28.686Z", + "endDate": "2026-02-10T21:10:28.688Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:10:28.688Z", + "endDate": "2026-02-10T21:15:29.418Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:15:29.419Z", + "endDate": "2026-02-10T21:15:29.421Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:15:29.422Z", + "endDate": "2026-02-10T21:20:28.390Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:20:28.393Z", + "endDate": "2026-02-10T21:40:27.957Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:20:28.39Z", + "endDate": "2026-02-10T21:20:28.392Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:40:27.957Z", + "endDate": "2026-02-10T21:40:27.960Z", + "value": 0.5, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:40:27.961Z", + "endDate": "2026-02-10T21:45:31.851Z", + "value": 0.5, + "unit": "U/hour", + "scheduledBasalRate": 0.5, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:45:31.852Z", + "endDate": "2026-02-10T21:50:27.929Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T21:45:32.467Z", + "endDate": "2026-02-10T21:45:38.467Z", + "value": 0.2, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:50:27.93Z", + "endDate": "2026-02-10T21:55:29.752Z", + "value": 0.7, + "unit": "U/hour", + "scheduledBasalRate": 0.7, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:55:29.752Z", + "endDate": "2026-02-10T21:55:29.763Z", + "value": 1, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T21:55:29.763Z", + "endDate": "2026-02-10T22:05:30.590Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T22:05:30.591Z", + "endDate": "2026-02-10T22:45:28.995Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:05:31.341Z", + "endDate": "2026-02-10T22:05:36.341Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:06:10.341Z", + "endDate": "2026-02-10T22:08:32.841Z", + "value": 4.75, + "unit": "U", + "isMutable": false + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:10:29.549Z", + "endDate": "2026-02-10T22:10:47.549Z", + "value": 0.6, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:15:28.97Z", + "endDate": "2026-02-10T22:15:40.970Z", + "value": 0.4, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:20:29.816Z", + "endDate": "2026-02-10T22:20:34.816Z", + "value": 0.15, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:25:30.769Z", + "endDate": "2026-02-10T22:25:35.769Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:30:31.031Z", + "endDate": "2026-02-10T22:30:36.031Z", + "value": 0.1, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-10T22:35:28.937Z", + "endDate": "2026-02-10T22:35:33.937Z", + "value": 0.05, + "unit": "U", + "isMutable": false, + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T22:45:28.995Z", + "endDate": "2026-02-10T22:50:29.092Z", + "value": 0.4, + "unit": "U/hour", + "scheduledBasalRate": 0.4, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T22:50:29.093Z", + "endDate": "2026-02-10T22:50:29.095Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T22:50:29.096Z", + "endDate": "2026-02-10T22:55:28.197Z", + "value": 0.35, + "unit": "U/hour", + "scheduledBasalRate": 0.35, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T22:55:28.198Z", + "endDate": "2026-02-10T22:55:28.199Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T22:55:28.199Z", + "endDate": "2026-02-10T23:15:27.943Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T23:15:27.943Z", + "endDate": "2026-02-10T23:15:27.945Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T23:15:27.946Z", + "endDate": "2026-02-10T23:35:29.010Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T23:35:29.015Z", + "endDate": "2026-02-11T00:00:28.827Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-10T23:35:29.01Z", + "endDate": "2026-02-10T23:35:29.014Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-11T00:00:28.827Z", + "endDate": "2026-02-11T00:00:28.829Z", + "value": 0.9, + "unit": "U/hour", + "automatic": true + }, + { + "type": "tempBasal", + "startDate": "2026-02-11T00:00:28.829Z", + "endDate": "2026-02-11T00:05:37.841Z", + "value": 0, + "unit": "U/hour", + "scheduledBasalRate": 0, + "scheduledBasalRateUnit": "IU/hr", + "automatic": true + } +] \ No newline at end of file diff --git a/Loop/Resources/LoopInsights/TestData/tidepool_glucose_samples.json b/Loop/Resources/LoopInsights/TestData/tidepool_glucose_samples.json new file mode 100644 index 0000000000..90625bc5a0 --- /dev/null +++ b/Loop/Resources/LoopInsights/TestData/tidepool_glucose_samples.json @@ -0,0 +1,79697 @@ +[ + { + "startDate": "2026-01-13T19:29:52.417Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebc6a37e7af365c2728008b644a07ef8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T19:34:53.442Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4710a1dcb56f29ad8f2fedec4561874f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T19:39:51.87Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e562189c095f75f4e8a4a3b67f971f63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T19:44:52.039Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "754e2c5906443890eb27a30f8d94a85b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T19:49:51.418Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e1a4b1a1b7e84474c8be1d5d1ca9b78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T19:54:51.124Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7a1ddcbe11b6bbd14a6ebf1eceaa4e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T19:59:51.343Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e48095929958c3790f6aef751858450", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:04:52.051Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "567e9e4801c213a29366ddd3bf3ce422", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:09:52.06Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d41ff852673463b159726d51119ded3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:14:51.388Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d179c355c033b6b2681bdc6faa1f9d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:19:52.165Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f007c1114b8c56b82db606e415f04e23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:19:52.165Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9104e7e5bb7605ab591a4339b68923f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:24:51.267Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58f0885828f624d4876711c117081a09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:29:52.264Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cce8bf2a35328647e34dba88ae177c3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:34:52.143Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4ddc287e196961cf3a2f56ec0ad471d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:39:51.872Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fe29d9fb9e8690561bdbfdb7d65b11d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:44:51.569Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b755ef7cbd407b4c80c0f75788f5c53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:49:51.418Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e141cbfe86aca5e6bf21ed589a66148", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:54:51.566Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37b473a8365db654bcb2a71149f4e7fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T20:59:51.575Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dda45348c3b8672af11748b3f2f591f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:04:51.874Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80d07c8fdb7da58e398e558f09e70977", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:09:51.384Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8d6a24f91595c362015ec20ede47ad3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:14:51.446Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dec3d5e1742401032922d9796ef918a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:19:51.977Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "551aefd9f6f53648c30585c64a9406e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:24:52.225Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7491295db3c82efd0aa3d6617dbbcdcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:29:51.866Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f871515f2d7c6e3d66770e3f37889d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:34:52.579Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "422dd459d6b51bbc241a94439b6deef1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:39:52.03Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4ea2f63cda26c7ee4a8b8ea757ab5ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:44:52.36Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ad8389ba349849bfcbb7105af6829cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:49:52.001Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd3cec2196e42ade33fb30c80ad3f084", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:54:51.55Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d8eb9cc617a2a7bcff2aef956a14205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T21:59:51.36Z", + "quantity": 212.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23e1a2da1e401d2dbb854fdbea14c303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:04:52.109Z", + "quantity": 221.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39250a6d83818e6dc487be4201f440ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:09:52.573Z", + "quantity": 224.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "632193374231f9626f6af34f0ce99c21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:14:52.231Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4ca9633002775a8cca05f43f8025bd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:19:52.01Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db31eaae14f750d58b1e370a514c2a4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:24:51.893Z", + "quantity": 226.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdcc4f6b90b6f0d12b94a091123e3e6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:24:51.893Z", + "quantity": 226.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15fe04346654b9ec479e7353f8d4e032", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:29:51.413Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83b065cc99f610c2649291bf5e341806", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:34:52.356Z", + "quantity": 230.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47278c8ca02fd0b2f07aa688cd1ccc46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:39:52.125Z", + "quantity": 238.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c705882567b235d7d7ce5e1810463b4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:44:51.517Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f9a5f4395c0ec1402d6ffc95f9003a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:49:52Z", + "quantity": 239.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffbee51c71bd16f0702b9bde53973dce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:54:51.43Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa74b2cbbffd06ba9582dcc9b7f46b2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T22:59:52.261Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b0d51ba9c977ffc557d6247a4fee58a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:04:51.642Z", + "quantity": 238.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2aa6a5f59c086db5b57266121a7ead8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:09:51.721Z", + "quantity": 236.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fc20eabb4b8e1763e3d5c690867efc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:14:52.383Z", + "quantity": 230.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f1692aaf948ee36eef0fb86b6b7db87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:19:52.054Z", + "quantity": 227.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1cfc40ee0dcb49a20fe50040d473558a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:24:52.422Z", + "quantity": 227.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ef4f5bdca3038152c75641141df4488", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:29:51.79Z", + "quantity": 227.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61b3125d8cdff75942f7c3e6ea1d58db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:34:53.141Z", + "quantity": 225.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a29846bbf5805f1c18dc69e49c76c278", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:39:51.783Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4762bf74acd67e76724b79a88670aec5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:44:52.512Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac509bde1467beae19b8b94549bd5a0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:49:52.452Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6ba8f8127f81678e3fe0e8bd8b7dba5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:54:51.913Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d00405790460d1e8c57c31508539977f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-13T23:59:52.213Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18717b6e4518dababd660f51b9b6d365", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:04:52.355Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8692b9abe7ba4c90ccf2986ab0d4741b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:09:53.709Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a709f37009f74b90a44a42df2f8171e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:14:52.079Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94b9034b5851d16fc969ffac3de1c897", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:14:52.079Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "caf41053f309ee93fcd197de1010a9ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:19:51.592Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8335a5813b7393d9967889c552fd90ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:24:52.442Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "377643cacb2aeb4288e45d6a192a7f47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:29:51.754Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89a36e8b184001b040d4e33a2fd162e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:34:52.474Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56c1e6afc375d0be2897d1ae3a454814", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:39:52.503Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dcd17d2af22053284d27a3768ef89be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:44:52.374Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "585bf4aaa8cf3a55afc5561cc1ed529d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:49:52.454Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "828f0aaa12f23524ac20ea699d78ee22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:54:51.873Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1deb3bfdf147d31a8c02524d86230d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T00:59:52.001Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c971eafab820f7d33e2063130419dfb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:04:52.767Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3057355d56a94d5076bf56943e3350e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:09:52.767Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a390d94c08160ab1176112c57800a280", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:14:52.569Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06a854822090ed0cee1919fccf534b2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:19:52.704Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bd1a70ff851c799f81f9015ff9911de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:24:53.527Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d60936e223aa84bf7c7f4259d67f363", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:29:52.839Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7163b77234f2e6ce3bfad2e3770468f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:34:53.005Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7d10ee4177694800ab197b4ed696253", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:39:56.521Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51bcea341d4240bb6844aa4086e198a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:44:52.456Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22ece89eac670a76f9ef2c46fc844f6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:49:52.473Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fe3b717a7375ce7eb3f5daf3bc510d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:54:52.437Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8cbeb15f3c01ac3a51fa3a6788b54ea3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T01:59:52.613Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ecfdd930e08842c2f0786dfd8562c204", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:04:52.769Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff74ca79373082d03b15cd9ed5c8c074", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:04:52.769Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98e06728b925dc39371078bc0d9c0ac4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:09:52.805Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a65e2bbe90222e8bdf4bd8dc589d34be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:14:52.301Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ad104c395146df79ae57c68c7de315b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:19:52.046Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff9d3de94736a451eee8c6b165407693", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:24:52.44Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fe23f4cf13959675623e63ada611b57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:29:53.259Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76710cacc2ed73270e2540d192d3f8aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:34:52.313Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dff0172d6493cadf7465ea54a80cc501", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:39:52.454Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bab0787fa04e81d7d9023c7d547c7856", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:44:52.488Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9f9a0b8fa9dc39f74db0a2f971dcb39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:49:52.273Z", + "quantity": 236.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba464b077ae1b7a50eedfe70fe52d416", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:54:52.82Z", + "quantity": 228.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "512f4009e6fa73d51adc22f24b68b6ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T02:59:53.373Z", + "quantity": 237.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48e4d62f2c7e6c46785d8a15e8ebf041", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:04:52.708Z", + "quantity": 243.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "189ead8d0a059da759b1bd95075f91ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:09:52.746Z", + "quantity": 235.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d5d3821107439fa70b0089df572a332", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:14:52.746Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36e6ea6c284018fe8ac05d4d83fea855", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:19:52.657Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c8a90f50ad690f289d95aca4a718780", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:24:52.351Z", + "quantity": 198.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e66c92e74a809589013215026d746b68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:29:52.015Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ba49d58bce183d1293858a883458478", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:34:52.451Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b072a2c5724e060136b769247d2f6162", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:39:52.504Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf50e368a3dd7a04d26f0f7040442703", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:44:53.955Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d73136886dcec03e1b95fa44d0346a36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:49:53.955Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd56f15da26a696fcc8927d8d00e6cd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:54:52.609Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a60e64c188fdd44e5784501cef68eae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T03:59:52.242Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc05493a2ac175649994bdb2f75467b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:04:52.325Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea9782d051c46a6b24bb7d82a03aaa4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:09:52.535Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbf46b82ced5d1f93484a2b84614f4f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:09:52.535Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5276b60a86701dee6c4873f26a243a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:14:52.735Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "886859a01fc019d4def148ec372dc26f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:19:52.739Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17543251e64226ffdae218c9e9c449b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:24:52.846Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e98d466f7821e0ef0f9dfb9a3c782276", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:29:52.59Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbbded94d2c8b465d6c3ad68af40ec5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:34:52.589Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "677c919f83332ccfa26b6056d309cd8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:39:52.961Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b92b52dd050a35eefa602d93cdc0695", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:44:52.295Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6659fe0fb180b7b1aea26c02bb101d41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:49:53.164Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55daad31a25934209d76fd4690f083dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:54:52.71Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b53bd2b91ed05d1bd336818cf7fb9fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T04:59:52.608Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b499b8a81aa896871c8a6b89776046f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:04:52.362Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70ea475a0bc0a2b1041a99f57b886961", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:09:52.271Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99a3367c3f50c4f8cf3224e2bad915e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:14:52.995Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a346fdc66e8c2f09d0e76b9c4d59c160", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:19:52.526Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "641994c112082b6f9b51881420e3a918", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:24:53.106Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b749a7b744ff7fec8ac9d24cd1762159", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:29:52.507Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "930f34e0f0bf3879fc259fc1aab96207", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:34:52.76Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "576c3f04ad6019dc9f2173a1d4720d37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:39:53.049Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf0ed05fc5dda08737a2d208e7697a86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:44:52.747Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5eb20a6068e692a4d96840ac7389d76e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:49:52.856Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72fcbe4ff0d5944350d48098ed3de15d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:54:53.447Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6efb9e7418db63cfeb6d7e955d50bcd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T05:59:52.621Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72fc6fec40097a471efff16a3aadf2e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:04:53.138Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b1b07fa736bb7a46e099c7dc93168f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:09:52.384Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "081dfe9dbb21f985fe5a8c4380599c2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:14:52.981Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f82510732101b871f8d171dfcec11afa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:19:53.11Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e19a9e19cc7da88ec676fe1b571a2d41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:24:52.608Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1253bd38ded691b4d662759fb62e5705", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:24:52.608Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d44088768f2e49ed05d42d0e07a81cc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:29:52.946Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b59f2b4662e59a0ba54cc1267ee4f909", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:34:52.795Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d837e8d326f459773bfd28ee37a0c23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:39:53.051Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc088a6a6372e08cb4c0f747ae43f31e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:44:53.14Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55592c730b59d15b683f0154cbdbe209", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:49:53.196Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6965926fce33b83a978f62eb5909eb8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:54:53.04Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b19771b0234d0298b1559bb90bf9d56d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T06:59:53.186Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09cb3af7fd095108e61280fd5745c8a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:04:52.58Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9389a3b27cbbd6fc2e7d7ff1c7f12fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:09:52.695Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6be9ca1ee442fd96a648ae1d0d72b8f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:14:52.741Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd5286ca159a9ccb6f8597f262354b39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:19:52.999Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bee7d5debf72d49cb01483302d4d5330", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:24:53.295Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d3c6082ffcd13bccd9b602a8a399c2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:29:53.128Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad2bd0b9f11b0b86a96318055047e605", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:34:53.136Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e04932022217c337f9330aaae07aa473", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:39:53.216Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72d160858c199dae3cb37e44932577c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:44:52.98Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "929c83fe6db51e7cad9bb394fb00862f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:49:53.173Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec00675429775ad38bf80b80c2e95782", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:54:53.672Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0e3fbbe4045570dd9ddc30f314a66d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T07:59:52.59Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58aa64063d776f5c6bd4afe3129816a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:04:52.467Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed85819a742a621922138d1aabe42e26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:09:53.003Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d7d51927c441b7f99881b9a5ece6544", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:14:52.599Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1325012e1803e979474da8d94abfad89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:19:53.265Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b0606abeb6053a75382358827e4bc8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:24:53.159Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bcc1e74ab82c59e3c9b24527613dcd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:29:53.317Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13f80dedf09b4405605020782184c303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:34:53.232Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "342c0bb706b1733ec39ff1531c2002a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:34:53.232Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a20ef6745b2312beadc7f4d8f416b5bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:39:53.117Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "649e755e296c6ab764e41af05bcd5f03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:44:53.001Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5753e80f36472ae2cf382c0580ecd8b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:49:53.437Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "898e193491ee9acce6f9b51fecf327cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:54:52.991Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "639392944a3875ebf5991abaef8d3176", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T08:59:52.695Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a3b23c45c5693d50fba6c14b92ffc9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:04:52.881Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26b4b98a01773a09506266bf76095d14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:09:53.287Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29247100949918f4a62b301cf4808c74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:14:53.243Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0257a1a3cb88c76f9c93803e8a5e9ed8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:19:52.707Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a11f1eb039cd6fc1867dfc89cb0f35e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:24:53.451Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8493239408667c499f2120be9b012088", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:29:53.314Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0c7b14d8d28252a38b404f69bba88ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:34:53.247Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a96cd6754f5eb3c274a567605438f978", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:39:52.944Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51f263ed7f3cf1274bf81a6e2b4757d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:44:53.349Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ddf11aede5d2b0f07a964d95d4167bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:49:52.663Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e28b4a341773420f5580b661c2b6d802", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:54:53.099Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2289ec6f548ce87a14a222178e0f5e42", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T09:59:54.116Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73ca3dd0cb1faa29bb48349b700a1849", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:04:53.392Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3e2191fc76f734ba128316249fb119f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:09:53.627Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59cd155834fa54d5d6574fc9cd79993c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:14:53.622Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f0102e57674cfbc5ea7cebd52128d5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:19:52.846Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7b547a5871b41a709f7fbb57d85978b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:24:53.63Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "779f42cf0c168d5d0dd712f8da266e93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:29:52.786Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d81a1c70db64f878959e14c8188a45b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:34:53.394Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e7c823ce7c8920e0cde388227dc5e7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:34:53.394Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8198e84d8339469d016aa68ec0353257", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:39:52.952Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e01b1e4950ee6636ae1baffecf9b58ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:44:53.318Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58c4c41f89bc49ce44b4becd7c9c569e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:49:52.907Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0aeee7865b54ece306f5e019bb3c157f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:54:53.685Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ee10dcf3b3a78deb04f41f0eb9d8d6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T10:59:53.522Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47e539e814a4914ce9a5c71091e26687", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:04:52.789Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49a7d72c99519eb83fa080fd79581d64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:09:53.206Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d62aa56ecf0bfc0a07f79a1aec55f2e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:14:53.396Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7a1fbec75c323ff55af47ef81cf84e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:19:53.264Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0a8429e153c7fc7cfda8dc9a46582f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:24:53.243Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0164378a9bdcdedac3a58c4e7e2dfc12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:29:53.58Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "238394c178a5ea9b6c599c1173c3beba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:34:53.818Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ac7d1948a8c2de265f00f3fbbe96077", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:39:53.755Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50a40701d9f04dcb51c93c617e598fe7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:44:53.612Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "570584ab136baf4a7cbe4ceba7783d1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:49:52.996Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a10d20236b2757fc2a06ed612bc9ab58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:54:53.681Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd36db9466477a741e905c48ad8354b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T11:59:54.296Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70a1bf978001c68d0900208655662e13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:04:53.541Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c83041e96d76e7b9f30d5582f70ebc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:09:53.385Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ba873bbbbd03e932d7ac7179b77841d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:14:53.59Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a3e7682925fc5d67aa95ebe2bf532d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:19:52.925Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c2cd4590ba71fb7617b9f58fec0c88e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:24:53.755Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22f601326681db69d84920912552dee7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:29:53.691Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94ceeba73639a0913965cc6b4c97739b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:34:53.038Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d1fb6f0106b3247affe0e986df00adc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:39:53.605Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23f51fc514b0a745af84d13d79632fa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:39:53.605Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d18d5cbff040f0f29c9e8358ba386b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:44:53.632Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c7c35b9f6f3e8dde5f3838a3681f747", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:49:53.218Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb5380fb6cde22a9224a9b704d2e8f41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:54:53.895Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6708bce16dc813b2dc2f8beb4f1024e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T12:59:53.201Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ed9e4fd16b91db2b9ca72eaeca6884f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:04:53.155Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bc55aa77b8d2b17ebbb128f51b91dbd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:09:53.61Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9780562951a8dda12dc9b11c25dd539", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:14:54.026Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9230f7a0371f805bacfb87e539889b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:19:53.5Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "125eb6c5a93f611714db416f5a90d686", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:24:53.897Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7f7c7ae45e75ea3913803bf0f5a1f12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:29:53.664Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1b718b68cc706b1ab185ffd52eae0c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:34:53.75Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edef01a2615e9764398316a77ccce585", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:39:53.947Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c8daf92e3a6de69efc63d598598f462", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:44:53.687Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "031c4074113841016bac88297f158454", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:49:53.837Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb017f1d2fff926e0f77248124e17298", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:54:53.654Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ee2233125594fb5bef0c36ed4c26e51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T13:59:53.245Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c64f947aab83604b5f6aab08c6784533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:04:54.298Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d91bd91873e89251f954d79a81a1fc9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:09:54.124Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43ac982fea8aa13b39ebf7c631134216", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:14:54.124Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ade6fbabbaedaa65c8dded9081c26f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:19:54.096Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c9be92833af7c89f1fef6a9761517ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:24:53.562Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b90b49fa5a9c9b4944047f17630c47fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:29:53.424Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfda20127c3b2a432f9aa548b80d91da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:34:54.002Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09bc12a45199e2fa08590840a6f5a7b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:39:54.085Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6dfb22bd82907e5f05790fbd63c9d1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:44:53.274Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e29152e29ebb5f82d78dabc2330c836", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:49:54.042Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "350991ffbaf6838f9dbd44baec147867", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:54:53.789Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c911ddfb3b9c50ec858ab67b648964e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T14:59:53.232Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27fdcdf7ca62b9c3808df3653c285dd3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:04:53.575Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae168e09d7f46f3c1ed36b6706c7dbfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:09:54.014Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3dd82d600e686f1db9d835284bfcced", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:14:54.183Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e2b7ecde80937ebc535b0320420abb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:19:53.569Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "773d047299dd859ada8ff3111ad97abc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:24:54.066Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff2a90e2e4c158424166145bc6097a13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:29:53.823Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7a4ef44601963072c4f7673aa3e57e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:34:53.58Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "201c148a994b5bb35c0bc371bfdafce6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:39:54.025Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5986484b30546bb4df255f287f16c940", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:44:53.669Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6d79dfdd3a0a34395c1928c3820c6d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:49:54.164Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68f146ad1e674f92b4e443fc2734b4b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:54:54.269Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98880263d9a925f5312751e49a825216", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T15:59:53.946Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "860699eb60b7770437906fafb9c03bcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:04:55.04Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bab9dd921671df031da6ccf3b82e8664", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:09:53.365Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ca1ce089c5e16cc61a242e4ce91fde7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:14:54.048Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab0e21d01ab051f6322cdff64094a5f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:14:54.048Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce377f4ba72d51cad584f28ccac0309a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:19:53.897Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "255d8dc31909e3024cd55ee0436d17ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:24:54.347Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86207846caa576a802c7162110d123df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:29:53.882Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10cb952593fc6f81e2576c043ba6ff2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:34:54.27Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32a782d03b45f8596dbad52996078c98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:39:54.428Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0583e1f87f4b89e2a6df407a83341d3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:44:53.975Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b81f4b030ba15d52888c26305507cc35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:49:53.514Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9a4ed072c0eaee5464971c7244c82fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:54:54.301Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e39cbec6e05d7f59c68b4add3514e73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T16:59:53.781Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14732daf72bd8e7709dcc632ce45a7f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:04:54.202Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d009f68898cc7065d589dcbea12457af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:09:54.247Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "156c559cc7c36ea12cdaa56315b389b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:14:54.367Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09f8187dba1c75ab9b5f1fada30d00b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:19:54.034Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "971ba706f226992e011a0c0857589b7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:24:53.952Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "077cc950975b4d6aa95a46120df9e169", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:29:54.152Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e81c3ed3e94856c5b6b734fe26847ee5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:34:54.229Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32a44cb196fdbca95d184ad858bf0bfd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:39:54.457Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0de6f9083df69c3948944add6bc1154b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:44:54.338Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28c44f1c2b5272d569c587351ae34fea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:49:54.254Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1f75f85fcde15a84a5453d91eb1e14e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:54:53.664Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34d76c6f43d23ca13692a3f7e6ebab93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T17:59:54.204Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45ef0557cc919d16bd4c1e08f26025e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:04:54.404Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e8d2a14f599af5d1dd3441cd8fc0fe7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:09:54.983Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63c5e6f3724c9ca6f7b0a9f5d1ee7272", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:14:53.813Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd61ee0d15cc081a67bb3dcd98c4f857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:19:54.014Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26c0eda644a78fd89d89672a2c58e1fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:24:54.37Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb8d157967da6cefc2b6902a761bbfdc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:29:53.736Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13a2cbbb98bb93cde4308712a0d27e41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:34:53.714Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92ad9c8019940b58be2f172214e4c0ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:39:54.366Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe593ff4bed3c0e6c886938573e8f16c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:44:54.397Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eabcf07ce4b4b51304de329e9d071c7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:49:53.876Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49cbf0dc787e9495c7e1982c52eee56b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:54:54.495Z", + "quantity": 206.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ace96efe7c3e2018c9b343eda525cd08", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T18:59:54.209Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1cc21a73cb272b381b08bcc8073cfa8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:04:53.925Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d49a7bff50a9572bd15fc5f1d748236", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:09:54.426Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "008d6529868766b73ef0cd1160a7ad10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:14:54.223Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4712ef6d2b2f8e04bff45658cf6928e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:19:54.112Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "098f514e4a65af3c8320f81b51b31754", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:24:53.783Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dffadbd3b091ead2be349e46b4338cf5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:29:53.765Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c8d635ffcef50c27f9e12aec92c90fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:34:54.205Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4644d5080f49c06379ba7fbc42f03cc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:39:53.898Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1da9a889d36ab57f5ff353ea56281a64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:44:54.427Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14242e89dcbbbec3e804469b1c550eeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:49:53.948Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d56f6f7652228eb7b9b3fb4d4b323f57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:54:54.42Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f469c6c2de1f3ee7a9401aa8b6d8ef9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T19:59:54.662Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a0a958df08336db8c09500240945156", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:04:54.031Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b9273452459b7ce2de299ddc2eaa20e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:09:56.871Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e165b9a966ed45119413d851d2865f87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:14:54.768Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10c5cf75f85e50882da8f685bba11395", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:19:54.799Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1dc81ca2537f345e7a5845f01b5d01b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:24:53.978Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a459e2e8c4f73368b8446314d06d82a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:29:54.168Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2cf6b47a7070f29a0d18ab06bee7922", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:34:53.862Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3472c243e3070ea7cb143ee9905bced7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:39:54.751Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "233b50ab073ba9f6fcfcf7bc00ac0ad6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:39:54.751Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3400ec4ae7eaee80ac7772039055cf94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:44:54.559Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0af9a126d65d288c37b15410a849cef8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:49:53.822Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "159c4e1e8ad8eac2ebaccf8e0584c44b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:54:54.363Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1d82e7a790b3a2710d9f5e11b8ebd34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T20:59:54.249Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc2e8a5dd5c24e75603b1302d4ccda73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:04:54.789Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f498ca2347ecd8da450763674345f94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:09:54.796Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad8ce465199d93bf840dff6c13612f5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:14:54.422Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03115086e4ddb5548447b5eb09034d81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:19:54.152Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2c57be41e7034c78f1ab8bedf4a8c4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:24:54.637Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3462bd5fc6e53dc823454ef4840d168", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:29:54.4Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bf7fdde601ecfa63f179af21da2290b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:34:54.828Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "653824058ccda9f6ea6fa64365f09508", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:39:54.288Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39a7c79f99953340c9735f1373a51954", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:44:54.457Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9e8765af7acbacc2db9567720e6eedd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:49:54.844Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b7e7e246e74876091dd6391e925a55d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:54:54.165Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c2ef0a6aae7813fd9c5b198e6f03c53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T21:59:54.513Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e5eec0e8dabaf8ecdba70595310bec9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:04:54.836Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f40012949f9bbe8ff905846264da77c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:09:54.387Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb2422f804c8229b8e5193e96d2ae7ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:14:55.99Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e88ace168b174fbd6003d424cbb9f0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:19:54.406Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b237133f5f1888205c907b9f660bd0b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:24:54.059Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fef1c22a565e52cc8b1b029348d284d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:29:54.038Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16cabaab4f8277fa7d456852e0c50dc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:34:54.135Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89caeb1a6a240278cda15c7955ac596c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:39:54.025Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f773e8d6d54324703005bd5509347f3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:44:54.366Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14265edd7bbf3a31f1c0acba97e58a76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:49:54.938Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a6e454d9ee1a4b71fc70422afb9d8f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:54:54.564Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a41c322b0c2d78f53ee962c96eda927d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:54:54.564Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f51a6ad3547d2f02c807610136ecfa78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T22:59:54.614Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea5c49ae11adefd42738ecfc6e0ee335", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:04:54.892Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa1935f19daca15ced05cc594b04c1d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:09:54.583Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e22cc25b0227213f90e8718cc2cd5c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:14:54.241Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c41a0fe54029df29bd6e3da8b19407e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:19:54.348Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e726b5ed4bb5dc6a68b65b4689145b3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:24:54.818Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed4f05477cd63483f82bda7c4f3a651f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:29:54.18Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f97c2b49afbdf6d1a4fa12c0e53c74d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:34:55.74Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7bdd903c5106f9ce67cfa5d6ff0a420", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:39:55.602Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c9e499d0d233e892a37c77a0d89b53f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:44:55.227Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "712cabbc2360cd5a440a225fd36346d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:49:55.126Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59d9bd1a107e88a8f8b8e6c7f3c84c44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:54:56.787Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fb47609cac4b0797b1091a7b1c8a204", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-14T23:59:55.328Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "798f764fe7b7f03821dd07be79213344", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:04:55.147Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08405fe2486aaeec57e82141a7da7a85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:09:54.345Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca6f4d934d4fce0f2b1e64663a56e654", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:14:56.286Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "891d7c29e6de0a332d6b11eb882d28cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:19:55.123Z", + "quantity": 225.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d685fc3caccb08e4ec2a825a15b96ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:24:54.986Z", + "quantity": 229.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0409e6d7aa30f62a8c26bad501938e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:29:55.132Z", + "quantity": 234.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fd586f6c932bf6ea1d67e9d7757fbda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:34:55.766Z", + "quantity": 230.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e12ea29efbb1c882507915e9bfb825a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:39:55.385Z", + "quantity": 229.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddf6de006b0e25f71bf09ef8adde7838", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:44:56.304Z", + "quantity": 230.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0750920bccc3c768210d868761145c9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:49:55.683Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80a7b4272e26b0e851e203f1efa80fe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:49:55.683Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ada0a6038b575b84eb86fdf180bfc81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:54:55.434Z", + "quantity": 229.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b52c441d4e1fe039621f71a9bfc2d506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T00:59:54.978Z", + "quantity": 228.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cefc387030d0ab29119ca2a1457585a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:04:54.978Z", + "quantity": 224.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da0e4cba8b8f4ceb279e141577ecee59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:09:55.089Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae01247d1064adea29a352d571b299d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:14:54.684Z", + "quantity": 231.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e252f89c3053bb69ffffea3d3ec9edf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:19:54.919Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d62c28bd5777f044bca9ae7f9dd6ef3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:24:54.649Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b800bf277bd64918e59f367c9fc8a871", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:29:54.819Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acfa578df2561416f2fe7692f9b43d86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:34:55.226Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "caf9b1440f6576c3da55d24d6ad70a5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:39:54.666Z", + "quantity": 233.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b01760d6384b9c2808f0ee6b8e0bd93b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:44:55.038Z", + "quantity": 237.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c4c389e0c1bb5cd725d60785bdba3ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:49:55.175Z", + "quantity": 239.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "213f9021d516537c09bedb3538b7ac2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:54:55.323Z", + "quantity": 238.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e914f863843eddfc65526a4c613fa88d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T01:59:54.715Z", + "quantity": 234.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3a5306d5b3f5f8b3b7abd49e8615ccf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:04:55.084Z", + "quantity": 235.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "817286225d70070649ebb1ec23c4d911", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:09:54.715Z", + "quantity": 231.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0af6d958d8f7a120bcb2f50e0d58a905", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:15:00.712Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0dc1a2d28bf646596ce2589214f4b8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:20:00.712Z", + "quantity": 248.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "642433281ea0507fc67b18332ecbe469", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:24:56.815Z", + "quantity": 259.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e923c5e927d239d11231b313b3418400", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:29:56.815Z", + "quantity": 265.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8708c176c423afc5822cd9fc8cac7c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:34:55.759Z", + "quantity": 278.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48b31b1a38066d2f9df31beb80529884", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:39:55.759Z", + "quantity": 286.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4f704857144d8f2f5c49042a90f187d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:44:54.895Z", + "quantity": 300.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b2779e51ff920ef67df5383811ac0df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:49:55.574Z", + "quantity": 293.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bd15ca064e07e44811f013c2637a5d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:49:55.574Z", + "quantity": 293.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8146051b646ec9150a73937928b3d9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:54:55.786Z", + "quantity": 297.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36ea5287e16ccf5fd4e75e225a16be51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T02:59:56.03Z", + "quantity": 307.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "124056f2d42babc94c1e247b8ef2a1f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:04:56.208Z", + "quantity": 312.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2209403d1014efa241591f1bd204dffa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:09:54.673Z", + "quantity": 315.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec3f0d551c27e5629349e93827ab38ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:14:54.673Z", + "quantity": 322.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff00895dda36ce3e4c2c0300690db4d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:19:55.809Z", + "quantity": 326.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0f54e33838e260ad2e2fda7695afbb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:24:55.111Z", + "quantity": 326.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c24fbf395d276ef1d5b8154140ba39b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:29:55.533Z", + "quantity": 321.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a86ce4d6583b5149a25dea631a3882a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:34:55.435Z", + "quantity": 324.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb92e1546edb8663e16adda88a4db1e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:39:55.551Z", + "quantity": 312.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8777c22785d6980485b14cfda25d7ebd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:44:55.018Z", + "quantity": 298.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc90f1ed78c00df6fd660fb7bf3a0c0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:49:54.727Z", + "quantity": 285.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eeb51944e6eec16e73a6e837e5e1ca05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:54:54.825Z", + "quantity": 287.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0fc11e95a6c6dedaaf9b16cfd8fd263", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T03:59:54.659Z", + "quantity": 291.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0283b7e1f6409dc0a4082aee400eed75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:04:55.299Z", + "quantity": 287.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ebde2d1ea2bbefdf59cb81b57baef93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:09:55.334Z", + "quantity": 287.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e50b32bfbb4fbdf8908ac7d208b8112", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:14:54.833Z", + "quantity": 285.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f6bf5d790b0c39f02e5ec04522c78f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:19:55.675Z", + "quantity": 282.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50cd1a09a782a98860f0c3cb8f4a70e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:24:56.695Z", + "quantity": 280.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ecaa1335900cb57c7c7ce3be2650928", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:29:55.531Z", + "quantity": 279.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9cf01a34689ce35f8a0e879b2ec6534", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:34:55.223Z", + "quantity": 262.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74bb0aa1ef81a00209d25b5f2274d4d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:34:55.223Z", + "quantity": 262.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71a24203b7f738db01ade4dfead797f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:39:54.942Z", + "quantity": 256.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d7d43754ba7406c6d78b01a472e3f3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:44:55.382Z", + "quantity": 259.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "040d4beec9661f435f61eff7c42996e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:49:55.053Z", + "quantity": 250.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47602ec3014836f93f1ef49ee7887831", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:54:55.502Z", + "quantity": 245.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f375087eb9dacd58c8b64852023bd70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T04:59:55.682Z", + "quantity": 247.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ad6305d54d04e3bab94e32201d9b37e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:04:55.481Z", + "quantity": 241.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffc7fadb66d289df559636bb20b9b440", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:09:54.984Z", + "quantity": 234.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfe22988b88a1a758e157a379249a78a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:14:55.502Z", + "quantity": 230.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b2abe2216faef42d2012fabf4db2648", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:19:55.73Z", + "quantity": 228.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "526981b3a7d78b8d8103bf772f5430c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:24:54.91Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0058b52a9174b2f68bfdb9d332eae854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:29:55.557Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e83365f2479ce04dd38466f0cf4e0e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:34:55.684Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68fbc9849c5f11a0a1980fbfefb7a54a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:39:55.682Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c49a8be0702e68305604be9cb08e214e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:44:55.788Z", + "quantity": 201.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41cbbdd9245a578f1ea4a754d2360368", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:49:55.11Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4853a63cc004df95511f809a12b6565", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:54:55.1Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7adf1812ee5dc8e86c43964d819a8b72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T05:59:55.549Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37f71fd2eaca97e1f1dbc0642639456d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:04:55.158Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e45acbd7dd682b5be6e869505b5385f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:09:55.507Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9c369ed5e9b0e5e6ba5e506ce8403ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:14:55.746Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6596cbf1c1916d9e2e3987cb76b892b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:19:55.843Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f47a21144f653135bd18aa24256f7a63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:24:55.709Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf09e6acdc7c61d56ce64615f3c3642b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:24:55.709Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57c1f056b42e83314349fbe35b955abb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:29:56.749Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "240626352be2f79e3a28fd30511e3acb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:34:55.404Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0ad83a2d6dfb3e34109799e77510309", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:39:55.67Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "992ba1652385d24ae10a15eaaa363549", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:44:55.675Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55a941f2f3c962e7ae864c9a8542c18a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:49:55.661Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c42cfd1f53714ca141607d5eea4f571", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:54:55.477Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae3abc474e0ef12ebdc0699dbb4b62c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T06:59:55.424Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3eb38ddc1748923f8e2f3c1739c2e417", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:04:55.77Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "380312f28c6e763e76f9648b4977d9ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:09:55.457Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80ed192358b59338b8716d56a2786414", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:14:55.745Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b6f75a1d8c7f429369a354599b1be89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:19:55.704Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "149e515ec6dbcfaa1faa42020141d26c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:24:55.352Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8b4cc99a7b4c21c922c532f4ac17fbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:29:55.629Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd08b50d4b07db2f0323d560a79bcd25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:34:55.376Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c108f34bb242fe61d44e9b51a42867cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:39:55.795Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3d0aa214ced805731d04a488d8f8d1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:44:55.375Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f32b8da87d308d78a6c82d97818b7748", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:49:55.843Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f1d65bbd0d2c316c129140c2c7690ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:54:56.051Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5dc7ac310edb4973b94aba5be18e9a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T07:59:55.978Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fbd6b9e31f6c4965dc8c200c4ab8e17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:04:55.726Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0325ae5812a3a63175f579ae585ed787", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:09:55.454Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37eef4f3b5e9101351d529f859791ecc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:14:55.782Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "523c84672c22ca027fc9515ab8ead784", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:19:55.178Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "023c7afa69f8cad95b21c36efd24a233", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:24:55.646Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8770f315d894d52099ec4282a7df3d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:29:55.731Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3659665e707013050b4c3f2220721285", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:34:57.21Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a5471b13d669390d38cfbb7b4675e65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:34:57.21Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22e4a7c7e5d869e7813af152cfd825ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:39:55.936Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2133ec16a9c207d09fbf7adc7208744", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:44:55.871Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec5807b7c04d84fceeae09ba0b549f0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:49:55.517Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22e00683b8f2db93d83a49e8a5727586", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:54:56.083Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44b7b7c35db7209cbb93714f34b5ddde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T08:59:55.441Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0dd0a234d4e0b651a24343784002381", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:04:56.008Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7615e26caedf30271f7235b0a44e715e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:09:55.516Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aeb71fe7a89e9de4e9d927aa4c56fe62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:14:55.963Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5a8361df387eb607f80c28372114c25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:19:55.241Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "daa7c962460c8ce796b75581e39f195b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:24:55.839Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21d24708072989e7cf8a5ad4d3afe8c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:29:56.108Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b07a3f438c61f6821386407a5d293c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:34:55.747Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3ea64a2d322384230ff2318be436639", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:39:56.223Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6853262411f2e7979dcb5917d497a7fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:44:56.272Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1cfeee33d7241186aa18215a7f1fb711", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:49:55.651Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b64250a23a2803c5614f94fe1a0c61a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:54:56.167Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6956be9e52469287a2c5a3530364d4d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T09:59:55.515Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0cdea205d23a58a48e3b02d77777d3bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:04:55.344Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0972bb6b9e87df7f194f7a69b16c5973", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:09:55.974Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4c8c92c6393e3765d441530e06a39c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:14:56.001Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7afe416413ee7ac12906796eef605333", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:19:56.29Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f8e58c3919f0cc7a21f656397ef2d70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:19:56.29Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "972e99dbc4ae7d43ae4efe7e00e25f22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:24:56.158Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "822a577b88fece36c3688b9222f578f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:29:56.4Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be0d00efae3f7c1a973a5bcb2244e279", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:34:56.889Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3ce5029256930d5281476ee9d9cd382", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:39:55.636Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73f6c7792924d94d1f1cef484e934c4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:44:56.155Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "702d7246df4aedc0ea095fa854164dac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:49:56.326Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e67443e6e18708b602c55c425c695c04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:54:56.163Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1dc71353abfe281058857df837f99031", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T10:59:55.62Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4ab72d1253116c30b50bd989b586cba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:04:56.148Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6c9f00729107e5b7139f87db3693481", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:09:56.306Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58a957e5dd5ff0f35fb65d8348efffab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:14:56.334Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "778298c803853dd098e0efb60a79dd32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:19:56.362Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8735529b7a1a5489bb5c2e22f85fcfca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:24:55.58Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0049a417fd09d8f674f4bc2c6dfa5586", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:29:56.367Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a8bc61773a2847b04f6487924f52742", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:34:55.647Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03f1998e7ff7c4a4c52a656c0a5cddcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:39:56.454Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "209f4c66cb14095e41a802221cfff5bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:44:55.552Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca7a540d1e72c4d1ac3f583a3e2ec93c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:49:56.129Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "618269c7cc3e18a50c76c4f4045e350f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:54:56.348Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e27de120ba25378eae1ea5c9e6d7d3fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T11:59:56.226Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bc604ff7eecf036877f1fa24b237967", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:04:56.273Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f35f0282e2eda4526c4623501121f01c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:09:55.959Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1febfc3480a72457945dd09ff923520a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:14:56.298Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "703a065dafd568bac1d736dd7a1baa48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:19:56.386Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e1403be3d88d823a7246be01bb0647e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:24:56.074Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "027a9ce0970aff9fed1d0b2f29d23b68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:24:56.074Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6abe4158f3524b257dbec4afe5311bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:29:56.285Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45b6f8749fb8149ec118f64f132111e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:34:55.655Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e0181641fe89f0a72cf7d7e2f67d3f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:39:57.316Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fa866e2db0745f99148bf5d22dc589d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:44:55.822Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4a9985773b4d6507940f84250e37cee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:49:56.269Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8d98212a93672831a9d68fd0b75e097", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:54:56.588Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1330449665ff42c3097c8ffea1cd9cc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T12:59:56.455Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1dd1d3a1447dc7afa50dff4706de6f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:04:55.863Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1c6fb5566050a49e4cb8b8014c90a5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:09:55.942Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5321fa2a35276d906c1bfdc8b274fb0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:14:56.378Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a165f4a371d64180361e18743188f3f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:19:56.087Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3574968faf39472a34c9fcef4b9e80c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:24:55.801Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "540fd46ef9791ba8c29b78a804441c11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:29:56.42Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "239908a0707e42dcde3b853865110425", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:34:56.667Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1d29755097e4e5f1be59728bb85b764", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:39:55.935Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c462f4b6c05ca8aae54eb1aad4f8750", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:44:55.936Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5e7f284bc8df8f4568e13c98e42097a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:49:56.121Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1946b9c0bba6d9e2643312a4f6cd585", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:54:56.378Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1644e57a22114c347982ba25258cd82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T13:59:55.856Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10b9e22e11568fa13cadcb9db631ab92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:04:56.246Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9814692988067629e448913dbaf41a41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:09:55.875Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f434b62d7233c9800ecd01867e70f130", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:14:56.28Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "479d7c9186c55523c6e26574371d2528", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:19:56.696Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b2952e144ef69d4a03d91a1d088bdfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:24:56.141Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7afa5301baff8ddc765bf54df3199f74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:29:56.707Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a8c6e475654e5e74d28718757051015", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:29:56.707Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8163a9fa6cb24a801d81b1cf8e12d78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:34:56.707Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d6483b2f78c0bf27efce75da9c6796d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:39:57.381Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09ad63076ec982c1fcc376161d859da4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:44:56.659Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "694476fe6d50d0bcb60747536e32c82c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:49:56.118Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7453ed9d012be716a8caaa5a2ef22f20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:54:56.098Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae8333833816cc0e35ef03d058419031", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T14:59:56.047Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "901c0df8c73443b84541d3a4c454c8ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:04:56.135Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "877f6fc12fb8564e95abe822938ab0bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:09:56.072Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "469869693ecd94c801db54951426d794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:14:56.76Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41db0d8722513b78bc632ad372414857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:19:55.914Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37f000277eec9bf57b868106cbe8ee11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:24:56.759Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a1519e49e6970032b891a9d61c569db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:29:56.813Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9191cf138772ccb409c71cde0e8d510d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:34:56.221Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "463219494434837b990c58c2197c9c5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:39:56.157Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6e0f6d39ca1f747cfaadcd7e4379578", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:44:56.634Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13b4a2db6300ec150c7bf11211e86a8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:49:56.361Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32ffa088d663d8e8fcd4e996d32544f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:54:56.632Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e1ba47f1ec4b3a01b2daf23b9020115", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T15:59:56.248Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f63ca2cf58edf6288fbb956d9e1b3767", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:04:56.184Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "669c92d5d16eb732dc1187d6c1221989", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:09:56.24Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a52d5f1fa555b27adfdfa1f5af4a6cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:14:56.424Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5507f3041835705481d2abb50eb6dbb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:19:56.473Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96fd4e3bfe2c776f7a75c440bbda7470", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:24:56.473Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ca404380b60b4b529a2c47cf57c2948", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:29:56.991Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c8d7ece6127e11ce263ab4b0e013ae3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:34:56.229Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "daca55db8a5f875c24f855d17701b1ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:34:56.229Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20c633a48bea4f0996ee50d3b1070d8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:39:58.15Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88b6cc22aef74cee82117b54fa405e49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:44:56.768Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0670d83a745ec5df58e869e00e77dd1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:49:56.759Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b08d20bef8d72720dff42555e9aff014", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:54:56.159Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8c6345d79232c3ced6841e8d43d3107", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T16:59:56.111Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91b98b528ae93aaaec654ec7e559f0df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:04:56.442Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90048b4899fe62b9d5835d0689a16c39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:09:56.284Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1804de324169bfd69761bf115da9625c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:14:56.426Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe335c55df78c0d0ef13dccc55c4e98e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:19:57.016Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ae4eb29ceb461178a5f3dae7a6dc170", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:24:56.285Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1aeb25a8838410eaca79c9c85ec7380a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:29:56.773Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1c6a16b782fb1185e5a2e4aecdbbf34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:34:56.552Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e34abeb508bca0989ee081fcaa2e1cdc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:39:57.082Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2a157651ad67a0d16c1e5d7fe17edff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:44:56.914Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cf974bfde14f0c3bc7a0483e0eb8269", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:49:57.834Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b5bf01b9e42ddf8f1450803ba645eca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:54:56.482Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca3e9f0bc5c58b35a584914c1866d800", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T17:59:56.812Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97dd98bb16d4a9ae57547ed6529ea6a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:04:56.813Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16888e0b425ebe56b197243606f38430", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:09:56.58Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a20e10a5e5bc14acf61c4932e56f7225", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:14:56.731Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8dfd7faa7e3dae55537827c2bbf58ad7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:19:56.76Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b354f2f593d8ac105fc56de492460572", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:24:57.157Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a0f2d42e34329295fc839a8b3b9a8cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:29:56.455Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41aa90d909c0eca8f6fbdf51b3674a52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:34:57.123Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8877b5b6a4de4840a110499a8d98dd31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:39:58.265Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d24d1a7176f707da087a4430154bbbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:44:56.354Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb5e295783be049c70d4ee16ed4e728d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:44:56.354Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f8ac388cbccbadf667cbaa92fdada37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:49:56.453Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dddef55f4add9f7971e99fd2feb2704f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:54:56.764Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0334f018ce847f08a4018a4ff666e76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T18:59:56.975Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66e423b57ec12ef3170b40490fee1f23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:04:56.724Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4df9f5b1c5cf9390cccfb4d3d25fe7c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:09:56.575Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58305e336c90b21e0339c9c09a449c81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:14:57.226Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c34ce209bbb65605308fc26e063bbb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:19:57.551Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03be2883793ce8ca247e5821194f2db5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:24:56.398Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a98995e323d417e0932e27ff5f7f8987", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:29:57.317Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b37ba607cceedaafa740a1fea17b7209", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:34:56.886Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cb93ac339cab7c3a8e411cb426f277e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:39:57.184Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "094185e9c469305e17ad458eda065d2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:44:56.735Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "759c5ba2385b367ae5906d031f9991d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:49:57.013Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "817db389730bb4cb565302dd7e3aad10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:54:57.522Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac0867ae2638e6bbd92eb239dc7ee881", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T19:59:57.151Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ff4521f3c9ac0992cea49c300cbad8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:04:57.222Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f43f3f934190d588a0a2cb96b21020f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:09:57.3Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15dc8f970b3ad383ca60d69597b52ea5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:14:56.689Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c6f62b1953145008ac8a28dfed4df66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:19:56.567Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23e4db23096ba4c4319a19a3e5f137ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:24:57.377Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1b6d06bc37f97157781167e2845fc5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:29:57.067Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "720ccb553fa328b2b72e650602a24301", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:34:57.127Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cbecf48d54576a964200ffa5270524c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:39:57.058Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2e6900ea3a438cd801e3b6eb6e2b496", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:44:58.49Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "214c1631bdc05d10d2bbc0b105484be5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:49:56.797Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "656125eeb1f5fed54021c20f300f3b3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:49:56.797Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fd1a80220ef50640882c3b3733b5205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:54:57.136Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49060a9d430674aa715da76e4c77aba6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T20:59:57.065Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "042f18be3b7cdfc7ca3f3969fb18fc68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:04:57.223Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3242287da2dc2a6259c820b0e122058", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:09:56.932Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f8c99affeb7dccc19b2b616f921eb9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:14:57.389Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27f79b0706d1e5ce9d277159f58a21ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:19:57.009Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce610aeb9cee67ed466e382ad9cc0616", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:24:57.352Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f1d9d19f45ff3e4ba4b86e68aad44d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:29:57.44Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd88cc78e2392c57206311ab984aeb28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:34:56.88Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31c8aa13df61d569686009e8947a4c5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:39:56.797Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3e2eae6495e9c3ccab496ca68b7fea7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:44:57.516Z", + "quantity": 198.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5351c44920df47a5303b0467f1af2850", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:49:56.85Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4206f219a4daa09d353273d85275dc50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:54:57.312Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd03e169961ff3ffbd829d8afc8be70c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T21:59:57.47Z", + "quantity": 228.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76783e306b9559b317fb5d0ab4ba75c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:04:56.857Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d029b3cc91bfd94dbbddb9d8528d96a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:09:56.887Z", + "quantity": 239.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa849af7a2c654ad740407fedf5f37db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:14:57.266Z", + "quantity": 237.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70caa27eb9b6c461946bd5eb0353ed61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:19:57.003Z", + "quantity": 242.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f4e0a53386e11c8e800623cbcf46c0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:24:57.581Z", + "quantity": 249.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ac75f4ed46645e18e42ee569ef74a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:29:57.368Z", + "quantity": 249.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49a33edfd2c8177a20bfcd1ff34a4390", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:34:57.506Z", + "quantity": 256.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09b1f7a1e288d656582d75d377e59160", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:39:57.606Z", + "quantity": 256.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5a70fbe4683476cfc7a786a6d52514b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:44:58.543Z", + "quantity": 247.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e12efaeceb482ba71dc0cb3f2b42b914", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:49:57.412Z", + "quantity": 249.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b40055c6ed6729cd9090b06a006af2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:54:57.23Z", + "quantity": 242.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4947c8379c27509d391f212615718771", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:54:57.23Z", + "quantity": 242.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f052e475ab0b959a30cd47394bd01e62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T22:59:57.68Z", + "quantity": 233.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41ec376539f71ec4a8f1a8e6c8e3171b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:04:56.971Z", + "quantity": 225.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "debcdb6350875df250d0019faeebd53f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:09:57.16Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "603079f071b498e25cb8b69251d207f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:14:57.766Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c536bd0089f3e552dec93010d626b83a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:19:57.07Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7b51eb9dbb44459ef54e8dbbee008cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:24:57.018Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8b723ea9192bf20fb32550d77bd03fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:29:57.859Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5b3ddf92851ee8b4549a48605c74879", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:34:57.604Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8503b498e7462587925657785a0f7b4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:39:58.054Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfa6fac498becca3739919119c778eb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:44:58.149Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b72156fd872279051cf9262f52313f60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:49:58.224Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60be8fd8345ad513369c25882d6c81a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:54:57.689Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "252081cbb0052672c33c9709e4287ded", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-15T23:59:58.124Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72c882db651031ce63cd6569b797af0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:04:59.024Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b93011addc772ec03602f66a1f19a517", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:09:57.126Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ecdd072e07728c2df0f7cfa992c9498", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:14:57.589Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14c0957859b86951dbf973b2cbb0856b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:19:57.695Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7232691ff5478f044e6d544eaeb7a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:24:57.524Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b323b504954a518feaa2b438f989809c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:29:57.399Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29ad3c65322f04ef1551feb1c0d318a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:34:57.979Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac09a184071d400d4f564513e00b6b51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:39:57.115Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09fe94e0291d7e89da4c4d247dddd591", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:44:58.994Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a6ebef07213b2ca66d55c2be51df421", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:49:57.571Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4a4b80c74119ac7c1ef0e557c5bec40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:54:57.018Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bae5af2b82f3efed5cbb4ff699df2ce7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:59:57.507Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "daa296229530bdca3a11ece0568bed69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T00:59:57.507Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b4f92bdb4588003f88da98b6d162b47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:04:58.034Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7bfabef8b81ea1279a0b180e39ae567", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:09:57.781Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d1e4d7993af44cc518de6627250b37a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:14:57.74Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5aad3682f378dde85d226d885a97b797", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:19:57.917Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b334c78ed0117f579f80f3161af71402", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:24:57.108Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cc8e02cac494a691e582dd2ed0ac771", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:29:57.881Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6aafdd1cd5950becc5afb351a13b1408", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:34:58.129Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "416b1284b2f9a12dccd7471d04f23a25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:39:57.748Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44d38eff06b6fa02fead7afa95753d30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:44:57.793Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d7df863f59a39ebfd0c58c036793ddb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:49:57.803Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6c34b7666c2d652ad6dcdc3c0eb6e58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:54:57.274Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2504fe6173162eb156bb57bfe2e8356", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T01:59:58.237Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3768c1bf1bcac6b94564cc0f8dc4ff47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:04:57.81Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cff0dfc0ff00ea48349098adb64ed5ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:09:57.25Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69a93d4370d50d1758de5dc320f0c6c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:14:57.701Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6cc497f32fa57856dac5a93e52e68a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:19:57.395Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b846dcd0a1a669916e6a2502c2012ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:24:57.57Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79ab28162f9be6bde9221a8720aa5b6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:29:58.325Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b128f74e24b67f364afa039e5a6fee20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:35:00.252Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f88ab38c6ad6f991b8d6c5c351dab63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:39:57.877Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a253796e720afa0cd0ba818bbdd9da71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:44:57.466Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6511584512fe64b92002e31b4523c03e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:49:59.206Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0547e6a5b15f6d63bd1870fac6250d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:54:57.316Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e13e2411d119af7c799c23991f1fdc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:59:58.273Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70fedaba3e87f4d117c36a45154a589b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T02:59:58.273Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef3b086091f26b20dc08d4d288576d45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:04:58.307Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c812a838eeca47b0d82be836af95b649", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:09:58.307Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab01d3f024cc1350a08f065acd7f9534", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:14:58.225Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "717b50b4da9457f4f97c1c2592063100", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:19:57.679Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61aaf6417df609b763b15d48fae28c7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:24:58.288Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90a5afb805c966aee6ef950abdcbfe92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:29:57.745Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ab6aab33109756947951fddcff260e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:34:57.561Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4747b44dad3016b411fb6b60bed84cad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:39:57.528Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23cca4eabe961748e72ee09d5ad0a633", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:44:58.269Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf8fda288454532569adaca5fbc03f3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:49:58.176Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71bec845ce97796bcc8380d36949fe7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:54:58.12Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b949719352dbf62d5f26063d18942f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T03:59:58.366Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52a841c3a8baaf9a5050d7276b4e3bce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:04:57.484Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d76bbf48d3b6b49100e1f91a6562a7b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:09:58.171Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "881fc8ec964e7bd18cbe7325f88cd51c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:14:57.476Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c32d6845e43fc323ba635a7ded63f26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:19:58.162Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85e64e300c14b4597dcf65a3bcda533a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:24:58.273Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b756c8d1535feaab6997cc3da5ea7c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:29:58.2Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48094f7efb436363ce70473421b5e89c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:34:58.164Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0370f1cdd33de0a304575cb3420d292a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:39:57.772Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1aa2af817a95de5ad4acd01d8d030db2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:44:57.49Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc42f16a377f0f29c5548e712767eeea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:49:57.737Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb0694b331a003a87a6d116a7e4c28f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:54:58.649Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab81c7074072e211c11c9c8709f93de1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T04:59:57.663Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5cd03b23f774542b0ff52809de09e79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:04:58.149Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92311974cf8d781b22f249e13b4af9d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:09:57.946Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7b64e09a5b0cfebafef9265c96e7498", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:09:57.946Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db50143e8f4fae53f7e045ccbe50e8c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:14:58.541Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2cf89542dc9775cd7c8ecad0ac1634c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:19:58.274Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc9db8f1e9b68092e4a7af159f2fbfd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:24:57.67Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08b3adfc73bb05b67233c5803e72590b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:29:57.995Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e6a157df46dddd46776e51f2c255413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:34:58.503Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db8431b6837317f6fc8f3725c085423a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:39:58.468Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f648280e750861c9495921429acae8e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:44:57.694Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ae6ef3dbd5629e3875fb7b82c49605e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:49:57.937Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5f2d2cd8c59565099c8239c16f6e516", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:54:58.364Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f893822dfc78d2048beb2920b30e586", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T05:59:58.579Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a51c497363ca717da5ce668b573e56bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:04:58.114Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8057abb2b0ba259e4de147a046c119fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:09:58.526Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1295c651c8484e78df1912a58743ba1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:14:58.411Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f35509f6c4ec17f552777b14782f1ca2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:19:58.693Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e03d10521d7a70f384636ee3ec91842d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:24:57.87Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e94df614e33ce05611632f1d70cbb101", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:29:58.093Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e1643c0465629f43de72baf95b8c6b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:34:58.429Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a179d462f36d174f6572596e5a66811b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:39:58.492Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30fff95549a106b3167bd2a0323a199a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:44:57.946Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71da7b081ca5ad6c41b1f779536298a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:49:58.619Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c75193dfab024eb418d6cbca432837e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:54:59.535Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ac51233981de36cd501db4d67e2d6aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:54:59.535Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2146354d8fc87a4c0a60bee646c61a8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T06:59:58.523Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09df14956297550358bec9827eb2a216", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:04:58.196Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "675328a31b1903926fe338f5ca8f6562", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:09:58.377Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19f03f2e20bb84e285c30a906dc90368", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:14:58.421Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5efcd8f328fb51e5b451292f9d6836f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:19:58.514Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0cfb669f169befe1d5fd75b652ee7fb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:24:58.759Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1aaa8ff4349b2ccefc3aa09d8f3aef05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:29:58.091Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06b8fd7743051e15d56d205c17233c80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:34:58.764Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "884041623326f4172be08b7f521a261c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:39:58.677Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8676de6cc3bb346fcc47324680f9b526", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:44:58.321Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e6e3f8ed2fdd70609255572be0a72eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:49:58.453Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1b65e22f0a4ba3f5bb5e2a9287d9887", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:54:57.995Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33f379e564aadc9e94c1688cb5f3d446", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T07:59:58.57Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdf1bd9899536ccda2d166d24ec3686d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:04:58.112Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5cd898a2e51da1eb001ca973f4999dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:09:58.318Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9649273ce94e03f23330183279da7757", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:14:58.763Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "671e80f665e50e854fa72f71068398f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:19:58.399Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5edcfe686bac88de3a217009f1521c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:24:58.564Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1607864065728a7cd2b85361af8188a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:29:58.759Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c637e82667dcbbb32e0d89b5f98525a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:34:58.067Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "457ca758d01e14a5be97314539840322", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:39:58.685Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45ee1c457cd48aa9d5c2f3cfe0fb8c0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:44:58.279Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "006f4a8335c7e8a2b32131d54e955955", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:49:57.985Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f982821afd3aac7d59ba02322ed97f2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:54:58.779Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a1a6849f7b5607ea761796ff17207fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T08:59:59.894Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "846c2fa7b7a1268db35f8d8e18f88af0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:04:58.231Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "841c2b67f3bc3c88be476c8b801344d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:04:58.231Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a310d8320e98f79f00328683918e4e34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:09:58.906Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99b3b1748f5b9be4b6a154fe22857a41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:14:58.092Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f4ca00565cbc7fa8ea692a4967bb129", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:19:58.048Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f1feefbfdd2103cecab6dc4da26cf62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:24:58.914Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e27423195172605f85af4d6c8621c650", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:29:59.002Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dafc14bde30ec0f8172660e36ef87c94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:34:58.717Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c78e400b72c33c1aebc0a8ecbaeddb8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:39:58.844Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df462b98ea42ec41984c69308633df75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:44:58.749Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6209ec2134f7f0cb5e4d4f1cb770ee23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:49:58.946Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6518037e9d3dff462307dba90c4639e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:54:58.761Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "666d5a440dccc21eab071b6fc5e696c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T09:59:58.109Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1adc91722bab7b2e9cf9d51d5e41a9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:04:58.757Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31f1e86c9559f54f966e5c8710150dd9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:09:58.433Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "725b785c5eedd228dcd56874be094f2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:14:58.159Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fa53dd5c9fa48ff444178456ec88741", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:19:58.207Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f4bb73f095f46ac9b8c449be50c5a21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:24:58.462Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a869d4ef0d3d75e8acfc1eabf056cc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:29:58.817Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad218a3bc82f9ae1e7142754f93ff041", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:34:58.667Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "feb068326bfd1d69f4522bc4736a9104", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:39:59.361Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7a6875ae6a30cf4b8a51df97e907cf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:44:58.578Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f00b1799ad099cd1c5c72286c7e590af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:49:58.267Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3217dd31a8846295a48e13c43bc59e49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T10:54:59.414Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff72b7545c87b9ef1410669b19de852d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:00:00.365Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4863d9cf1b080d9019748ab31e685843", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:04:58.553Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ae79e0bff8a3d75354f9ecf1a572e8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:04:58.553Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b2259fb4569f8b9c8ad0b5668427ab5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:09:59.631Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b170451408e0fc821611593f3312433e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:14:58.177Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59d26bb5283604393594a2a3bb1965ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:19:58.402Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7fa2c962dd8fcc43cc855c22b284c3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:24:59.047Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d7ace3f42e66465e5c798218c91d16e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:29:59.174Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67182be2c1ec1c89395f0b1ae7584cf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:34:58.963Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d325373d6d499ab9f801c37238567117", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:39:58.248Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "923264839f1a9c0b33e9320a97f425a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:44:58.254Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9321e81869099ebf4f9d19ef96ab6011", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:49:58.59Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fb4152366c17fa4e7f7ddd4d9d5cb3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:54:58.837Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0d9b49771d61ab69cc47fdc0d82099d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T11:59:58.305Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "597c0a0be79dc5b8652e2248a20982b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:04:58.414Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bac9e2e1c1d62891b34bc07bacc949b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:09:59.049Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f8ce4706e05cac1f4cdc4a507a0ba6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:14:58.545Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8a23b5c2fb2a829a1aa04651c74fc51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:19:58.412Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53d835703bb52be2865bb0869f23df89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:24:58.787Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ec71a2a15ad89ad13cb7f5b3e453dec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:29:59.255Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65519ca33c15fa22ae5986fde4533803", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:34:59.191Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fcd7c5c999b64c6777cd446fbb37bd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:39:58.679Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7347bf7299292e852d68a3c289d10ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:44:58.987Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7597810c6ddb783ffb6bc4c7a0edd6c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:49:58.663Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6924d077739e46a154f615ef4f2c377c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:54:59.132Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d78c204adfc0bf9b0634f6c9bbc31432", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T12:59:58.944Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc9e8475a6a59881a122cf69d48a0675", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:05:00.248Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "def85aa33badd5ee5ee83c2a6937fafb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:09:58.819Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5450973a9e7d862612053eaeaa25a4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:14:59.089Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4def3ba17a8d5e15bc3b6ebe74b6d4e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:14:59.089Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92fa0cf2b6b5dcce2f999d919fa8ee1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:19:58.432Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ae4c4c57a5c42a712ff46130093ebc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:24:59.143Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "468b2afb617dccdc20c3065a0c6c3fd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:29:59.276Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a86d8013cab083eb20ee0a64b34126a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:34:58.487Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "667c0c7a0bb9c7f8079abe3dfdba2d11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:39:59.329Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6f4e90d7e0b5173bfbc77fa1e2ba8d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:44:59.429Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a1588555e5c7fbe5efb60029e914849", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:49:59.213Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb5bea2215a6e09f8d67c4dfeb890f31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:54:59.397Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2510a29596d1ed6a3feab30fa480c273", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T13:59:59.202Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6640f66b6eedb2f1b687cc0a279644a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:04:59.421Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db5ca691a15682406fa99f6bb2b94514", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:09:59.137Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb8f96f38421786dee9c6ebebec9d177", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:14:59.211Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0534e5ca520a393aa510bada07746c35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:19:59.024Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "063af1a6ea06e96a71408e9c78665d7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:24:59.221Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56eb60d6e79a4c468a070b000583b0bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:29:58.63Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa993b366587eeffb9d50bce5df6a205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:34:59.14Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5f859a227c8685a801c0d690e947ffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:39:58.925Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8d333905564d31b9beda37ccc337db9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:44:58.87Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54ab8529c6fb56021717df93ecd132c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:49:59.025Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5ed53c0b284d8dae768db9a020ef2fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:54:59.013Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d16a04225a338d2debf99f2d124878e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T14:59:58.942Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "461daf5346c6be2aaa8b51fcfceea5d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:05:00.885Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a05823b58ed6e989bafc44ee520e1486", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:09:59.019Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a6b0e6ea753f29995def7d1bd77d89d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:14:59.358Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "263dbe6dbe49167aa0c0f12e59557841", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:19:58.925Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91d17c32a9d008e7ff362bc13b8dc2bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:24:59.686Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da660fc4b1c47fb70345e1dac10941c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:24:59.686Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ef00e8f436cd8a63860d81d02d749b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:29:59.283Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cb4223dffb0562379fa1e414299d568", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:34:59.043Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "007c2e1cf53a116aaea599aa95f7adf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:39:58.731Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c65ef649a505cbb1807dd4d851fdb934", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:44:59.671Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75ee1d00bbc7fcdb33e0f26f6dec5ec8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:49:59.318Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3fba5f14dc9f5ec0e3febd6c3a8713a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:54:59.666Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fb4f97902029bda86208c71ec773001", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T15:59:59.534Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19408e5448bd2a027dcdd0216584184a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:04:59.089Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11e9014a4b1b57f4a0790cff3fec5eec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:09:58.917Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73082ebeeb858d8e414a4f7b37d8f9ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:14:59.425Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d08964c0087842fa62aaf13b44492304", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:19:58.875Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3af617583c851001fedcbda84b258ae5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:24:59.162Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39d17f97138cb00d742c6e9bb4975533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:29:59.111Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a88dcfe7d202561c90facfa69725bc39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:34:59.088Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25e2f0d437ed7637c9fa482373f7247f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:39:59.095Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37d0992fabe2630ee35ae9cc3d8e56c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:44:58.872Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8674b7f3170553411d28c062ac247aa0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:49:58.893Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "589e846bb4b21c9540ce1373cbc2fca8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:54:59.338Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cb7430581c7e131882af76df5c5b71d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T16:59:59.948Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4af3ef4ca2646e158c7db3c5c3f73b10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:05:00.76Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "115e91837047426ac33277437412f70e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:10:00.76Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27a668663732c8bc7dd94d4bb772861a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:14:58.996Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "924897fbfb001accb9bd674e1f392aef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:20:00.029Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6510e706b5568a929373912ff36d1e34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:24:58.884Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23c1fc9e82f8e9b84ad5fe211ee48021", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:24:58.884Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24d5fb79b857299195e84901ed56d785", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:29:58.85Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f56ddcb85a4edb20b381aeef3530173", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:34:59.225Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1e5d89de98fe354a342c960b7771bda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:39:59.731Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9abe1138fae904308f964169731b7e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:44:58.759Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6ddb2deceb922c73f74021c2db98093", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:49:59.267Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bc0345030c3bd36d1100acf41b8af45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:54:59.684Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7750402d0e7487e179ed6d81a08eab80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T17:59:58.918Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f149291452547c1ce5ca5a1b592b3b1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:04:59.006Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49724045251c80e40b0d13360e14c75b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:09:59.105Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d91436bf8d31a4a9fadbe444a4c2c078", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:14:59.39Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d72989d25037ebeeaa1bb9e7d9eca961", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:19:59.02Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "102d78ff106e30fa02d74785a2110185", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:24:59.68Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a01e8fa22231c912a25ce2453986e60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:29:59.523Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "943e03c9c6afc1870a82cf2b44e04bb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:34:59.452Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ab96e9b9c36b923702c8da7b08ed340", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:39:59.72Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc588283bcd83bee3c58b8ea4c1ab25b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:44:59.433Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "955ac84bac92d03abbbadff40c3f5f7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:49:59.243Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22ff30aa84c186af930f772bcc37dc3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:54:59.167Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc424546152e090a594968b2b6c25037", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T18:59:59.05Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31d666f39acd5e866e5a39689635f937", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:04:59.455Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "297a1421ad41aee25277d1b47fb5683a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:10:00.605Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7d9c71f6f2e7ba28c2b175e5e142138", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:14:59.018Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d4e38764f686887b82a650d2c2d54f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:19:59.461Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d21382f44ec0f96b124556d17c3f54bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:25:00.223Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8fe299e8f44f11c0213726423f3e2e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:29:59.249Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39c800b585c67a644800b63d182a845e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:34:59.595Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6574c098540b1c9c14a33e682756cfed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:39:59.403Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c2a092be4069b70184f2e9887b6c91c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:44:59.091Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29e5358182a237bfae63143382deee7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:49:59.498Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70ab15b058975e2f96f842c9468a92f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:54:59.895Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28cf84a3b3dccd68c74e3a8b50cdddaf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T19:59:59.606Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e153773f767724b031f0394b191f7f4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:04:59.298Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2dfc3bce930407420acf86ab78f3b3fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:09:59.328Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7435d92c6484aab8e221faecb0168e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:15:00.063Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4eac8c2ef23a59a75d96fabfa32481ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:19:59.495Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18c66a2013baf6e88d4995b162e6179e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:24:59.135Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1caa4c0440f3fda089275d10cd85eba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:29:59.103Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "feefcecb52ca1edf1f9f3099b87d7b3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:34:59.232Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c6282cf97da2ef968b08088b305dd44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:39:59.452Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40ede2e8fc336e980c0810984ba9db69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:44:59.407Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3abc0ac6851572441a57e47e26c434bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:49:59.077Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6517adf7d6d3dc8e156d08e3efbb421d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:54:59.703Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebe0f3cf4f349c9557df1e7add5d1dd8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T20:59:59.273Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d72c9aad6b3a68555481840dce5f81a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:04:59.888Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5150f10eb6274e69dc68c4ae2331c08", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:10:02.382Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73211db0fe1e9196644435c165217242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:14:59.589Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "266d2b1a8ae3b07ae59757d533e94814", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:20:00.15Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acc375e43ffac24673af4ae79a92f0f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:25:00.09Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3c44dbd376e8ed70f119b04cef9102a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:30:00.744Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8be9031774d655c74bf5c06afe459d48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:35:00.09Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fe13dc97f94a30e24e8ef3584f57927", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:39:59.203Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbf0fa9e19c76182c2088ab13109cf1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:45:00.082Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9b5513a5daaf9d9fc4e3a16a0059728", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:45:00.082Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8f1e11b679af1e373dbe08e0980666b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:49:59.242Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83af71b2fbad5451e947b1d2ddc80d7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T21:54:59.55Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78a106a797393b87dea672db81c4862e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:00:00.066Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d197dddd984761737779a3f2bfa1f71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:04:59.834Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb913c9b90b7221275714802235b8531", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:09:59.374Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc0efd90ec4b61938d8657f18c428482", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:15:00.25Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd677656c045d66c18e91335825c17b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:19:59.846Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8ba17508e1f9be622053cde056200c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:24:59.451Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cde55cc50ecece69db4a491788174205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:29:59.713Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bebf6be071b722b3e55f24a90252b15", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:34:59.511Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13bd0dd25afb5adf6c36ce2264f269de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:40:00.04Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d4492410ff78095601c2d801a509b39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:44:59.474Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cda4d8ac1cbbf707861bdb1e78674a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:50:00.015Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f6120b4995831fa4ab3377601148b0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:55:00.209Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "852b69ed1be86e7b57adb15f7301b21c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T22:59:59.352Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac7e81badf8d56cca0c0552139fa9410", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:05:00.077Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38d11b87e7cb5a8881b49c77b3ad1e0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:10:00.85Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bd1d1c4bcfee23972ee162d949c786e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:14:59.997Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2f35998138a020a017545bd7df03c0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:19:59.643Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea28833a8000c82852668a99d3ab7a55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:25:00.302Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46a97d66da4e3b1a93f08e55d87adf54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:29:59.471Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e84b6c033c674b7603600fa15debdd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:34:59.741Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5711e6e8370ae9022458ff0c2f42594b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:40:00.099Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "258e41080444921ed939de897610e355", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:40:00.099Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38162d930e8a4cdbf67626f712c170b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:44:59.447Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8db6f3a0f1626bfd64c6f1a64591ff4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:50:00.261Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9fcae6086b20b8f19257762d21e979d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:55:00.319Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dd96eb0962e3c94a93ea34da0de38b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-16T23:59:59.913Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09898dc3128ac436a8733bc856bdad6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:04:59.458Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6200055949d6dc903461e4fe6090bd24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:09:59.628Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f29deee57d1372176cff6baf08ccaa42", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:14:59.667Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "339d69858f02c32f9bab120a535214d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:19:59.804Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75458aa1596d520f86a94adc809e609b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:25:00.06Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89fa215bc5daaa4d033304c27aa804f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:30:00.293Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99bd5da84e5468814d5c8e1f0810a4f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:35:00.701Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f2447962607509dcb658c0632c7f309", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:39:59.803Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a7ae241016da7edf4c8b0918294fd35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:45:00.731Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35ce5b57a89d1d197ffe7f9852dd8a51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:50:00.485Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fffd70df27336bebc73176c332dba5c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T00:55:00.025Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "777a2a0269517de08106e8e49eff1182", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:00:01.052Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "521938a62a2249c1af2d29908b9fdcd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:05:00.374Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a03d6166dfb6c4e7a4880013f204194", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:09:59.866Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f1e535a8bc2bc793372ceb5df616481", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:15:01.476Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "249d47ca3123fac656bf95e3bc630629", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:20:00.465Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c3e153574f885e954859398996a10c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:25:00.221Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a87ac0b08965eb562d040485fa72f6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:30:00.226Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83424887bb6c27b664cf14f143a4d692", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:35:00.053Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4598e1b55d6cb09ac146c7ad6fa6bae5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:39:59.687Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cadc0db1b530f1059aa9912d209eb35e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:45:00.384Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54da1d9e9a5cf7e0499a0cd6b5ae1b85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:50:00.43Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "650ccc2417e352c30754049f0084efa0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T01:55:00.41Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7e0d88290a2790ada80f3992c4eb796", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:00:00.629Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e882d8752b64b798828f9139c0a4c21a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:05:00.095Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28add4dd8431767b7abf5f9df3a02a97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:09:59.761Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a01bcf20d08a163ada32be7f2585564b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:15:00.579Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fcd9bb44f9dd4c0b41737c06a7b0d1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:19:59.907Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4919dddabec80c924e2d89141eb4ec98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:24:59.893Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36d1c11d0374d25ce0bd0965996a9256", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:30:00.292Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78033e55136e7f2aed94874ac77d88c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:34:59.894Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89e3b4bd68f21520a5459a602bf4487b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:40:00.506Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1e9eea67e1ebc84d4e5d3ad5dcce73d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:45:00.733Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac64dd87ebceeba752b817169d50c942", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:49:59.83Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af7887b65a5f6a1587cdf54121842a90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:55:00.046Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ee699730e8589fb060876b554d38091", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T02:59:59.841Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d069bbc712266892f4d7224f7eeefa0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:05:01.162Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c9f013823e2fca2a38be692a721c557", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:09:59.962Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ab11b7e22430a3858dd734e14e64511", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:15:00.192Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71fbb7d1b625292de44a20390fa4aaed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:20:01.525Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50e8f7b46ba73b2abb8a9fdf92a0b8b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:25:00.012Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e7dc105355f531ef7569b9b43942a8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:30:00.333Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c676ce0a90e8ea53882fca38b24dc18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:35:00.237Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88cc1faa5790c65fbf5c851e8ed8cbbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:40:00.76Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce47c5de10d64b4a7868f49b591234ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:40:00.76Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b730f6c8c9a3493bb5ca4647e7f08889", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:45:00.186Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d399c5d334612cd8c8b481513de0b2c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:50:00.476Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e83bb9d2327914e0d7346c8dad868d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T03:55:00.448Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "334a61d5257ed7baa0a81f4daedf7854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:00:00.763Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7682b0fc3feec42376585983d753ea20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:04:59.936Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd58a15874ae61796c61758d50f2c686", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:10:00.185Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d67c5c03d625eaef05afce30f9afd4df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:15:00.786Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa392a83c43fdffab7723455795ddcf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:20:00.848Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df0e668cd4f33ff7fcf7b00afc6bcee3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:25:00.13Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1caf290dab1aeae3b563265d593fee5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:29:59.936Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22b14226a261c4e590e5632e53c8c2ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:35:00.249Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0a1e95f7ead167f6e624a00a5983723", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:40:00.33Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "778a0cc9eb029662a0f6db41849d06e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:45:00.33Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f15bdd4449d536cad0231af0a0a935a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:50:00.897Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d1d1fdec8791f8362f98160b08d1bee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T04:55:00.179Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19a6db584b0088fd130da40ce0e823fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:00:00.468Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5a09648edbf4d320fd53e6afb3f34db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:05:00.468Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f580dab3c3a7a9c9f506a6d28a31f64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:10:01.249Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f49b293fc40e909f6afd95d09fe0a625", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:15:01.249Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b0402c080c152665b71d33ac00ccb53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:20:00.899Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60fc35afd50acdf8b19e2e4fd8f68768", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:25:01.791Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e8cf2157fc0fdbe381f6465fe00fdbd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:30:00.756Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6b5feb2e96c0c1696089aca29aa30c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:35:00.992Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0845727ac3d1494ceeab632614a7f75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:40:00.759Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fbaa3dbdcd6f886f1400ced06953c1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:45:00.283Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b44a3614d0b7be77c9b81b8095c664e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:50:00.579Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18575b7c05049743ed34f481c0796f19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T05:55:00.297Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c69bc2d5ee7443d1e7bd2d6b3ec96820", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:00:00.726Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "297a8de207f62014b76c01eb47b63e12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:05:00.296Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6c4874b6571d353a0c80a74678502a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:10:00.788Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79dd619c0b899ee8b4c97d07de16f9f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:15:00.397Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f84e73a124cba2d3ec89fc28835d24d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:20:01.141Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1dd1181f084ef3624af2bc1df2e9ddc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:25:00.423Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7143b35adbf923caa3aff5dcd8534fba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:30:00.296Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f92252b733a8c842e79eb8901fb421c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:35:00.611Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ea6dfbd1dfcce98d72906119ef04d94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:40:00.462Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f25e91d1ff4f1aa6a3939cbf1aff4be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:45:00.766Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9a31039b835356093b1bad7e96e3124", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:50:00.223Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2d460546e3dd862a0bda1a2faeb3fb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T06:55:00.711Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "495026dd9b1db181612d775352721aaf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:00:01.056Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f744e46d7dae37a002b54a1987187f2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:05:01.161Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c3a7e200144c226008b1c2ed79c5a5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:10:00.918Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d56b1348008fe447fa20a54cd794215", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:15:00.448Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ffcc62a61ca44d5a7265f07c5e301c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:20:00.575Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c0f19e9195b1e48395cfcc72cc340a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:25:02.07Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fdb4e1253a59da042f180051ee45e99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:30:00.478Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b12ec9b56e29980431a78c7c731b91d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:35:00.983Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2ff8f39699125241686c6687534e3c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:40:00.883Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d301a982e10c0c32a6c73cc59d1436c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:40:00.883Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd64fd60b429227777042dea20cd4145", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:45:00.594Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1596de2a7e2b128be78caae06a83923", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:50:00.931Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81dac2dbcc89fc0fc13cac4ec154c583", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T07:55:00.8Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8431fdf587d58cf14d3a9e0b244e31cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:00:00.651Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e9beba22c2f7b9ad8817d87699d77f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:05:00.78Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5505dd618d354a9ff80609133125ca69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:10:00.796Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f173941174fbb883dda0e4944b38ad5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:15:01.145Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "800c7ef4e658aeaf256239ea1572e6ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:20:00.54Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da19060aa74fcd49350d8fc80085c7a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:25:00.956Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2190ab2d1e80f6a29680482be9911590", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:30:00.714Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da4dd9293b7976e7ffd48aef297c66a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:35:01.075Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bdd48dbbcd2fc2de8a40952fbef3b1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:40:01.051Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c6a44543053828790c0e8dfe42622d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:45:01.128Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce61f4bf9528a291a32e3af3802ea0ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:50:00.517Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31765a79332d96cdefe941320f39686e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T08:55:00.636Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "537c905906865d439df0bc8a2fe73645", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:00:00.576Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "258599f00d40fc8ed593ee2f921e1a4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:05:01.263Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24e3392794af245e15e55d5d0e5cff28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:10:01.159Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49a50dd54757c973b86a3a5f1e9c5355", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:15:01.069Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ce1f452a4cd0c5887cafbb78509421e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:20:01.109Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "703cf6164a4cae3c48213a87f4eda67c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:25:01.906Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e050d94d61e742612e50fcc73f468818", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:30:00.528Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ac3455a63c5df51cc891b5c35acd3ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:35:00.866Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52625039190d1aa72dcabd41fbaaded1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:40:00.939Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d3301a8bdc39002a68e523d2d6e362b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:40:00.939Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef5a3db7c755ee197887f5336889b85a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:45:00.833Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ce9f544b71503221e990c9af6d67c0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:50:00.728Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "403a73f85b8435ee7b07df4b2dc7e490", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T09:55:00.593Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ca14327095e2ad879053116133a2861", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:00:01.158Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b36520c18fbdfad51ba4e6a37a272cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:05:00.901Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a206f5539faca15d58cb19a59b815017", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:10:01.266Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ebc28bc7d716cf94fabdea86fd90c2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:15:01.571Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f797a4b022a65f7f9b40dc2f4f53794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:20:00.766Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "299a13feb13313185dbd43d8b92ddd76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:25:01.385Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97874b569ad9c644f762f01594f97141", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:30:01.072Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc330258bb5d2b69d2d5dbbf4adc226a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:35:01.194Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e70b34bec499c000c2e21cd513cbe6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:40:00.653Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41dc0a725005dc95ae0c7e750e8f48f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:45:00.934Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22ed9e2cc870ef040824de731a03415d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:50:01.245Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "095224297f99ef903013989f6c1c5006", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T10:55:01.72Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8112792800b16b658d80739cf5c81be4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:00:01.614Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb46dd8902996921ba8981e4aadcaddd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:05:00.843Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6b7b7a9cd60f9fa2d59d0e158d365f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:10:00.723Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8eeb99807570875b7a0c5babbfcfa938", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:15:00.998Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c543b16412483c1bbc1049545777d61b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:20:01.63Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dbc2507bfe891ad7905657bfc5d5736", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:25:01.653Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0b5326c62fa3d775b5469a1cf34ccda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:30:02.334Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69dd314bb433771372b4678e09f17da9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:35:00.881Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "997a3dec36a3df9cf25be92ed527ae0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:40:00.803Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52364cd7621bb55e9b875a9d251c3770", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:45:01.584Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "938dd793619a01b5ef8896c8c60af318", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:50:01.111Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c91b439f126d67c3c555f03818b78922", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:55:01.198Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03220cd9b1196758a95b10a8952c1a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T11:55:01.198Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87d093f9ea86cce3eb162bdaab092f4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:00:01.605Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "358dc994e1f4127bf887a292cafd767d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:05:01.768Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f075f1a5ac86182b6321ff54b56fda8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:10:01.194Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff657539f0008e37cd8b80f5a75d6816", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:15:01.353Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18eb66cf0f2cc45dc19e9dafb09c0b6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:20:01.289Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1e59ac2aa8314cf2df634183bdfbdb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:25:01.089Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa16616c865b4e491e7f3585a28e3205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:30:01.727Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58c447ca53c85b5e7e53e852e73551c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:35:01.627Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "634d14d5eadc59ecbcdabad00062a5b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:40:01.807Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ef5502b5ada884f85e82c98f0c6a2f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:45:01.27Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a2221a1cd1f19e4ccc08fa9019426df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:50:01.563Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13494ce4fb7c4f97187840f8052f27db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T12:55:01.494Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0236aa1d435e0fa687816ccc6537cde4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:00:01.521Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1240e727061e597d2a0fdd7b0ce7e6c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:05:01.842Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8e33d8273f8e67e07f6abf455741459", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:10:01.69Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8da9682407aaa2f19ac567435b9c9faf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:15:01.69Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9df8c0d63ac58d0927dc3c1c953ee795", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:20:01.823Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d784ec150271cbb5bb72a780675930e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:25:01.209Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c5f72c2589c916ade9009224506c4b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:30:02.37Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53312b523f4d4383f55393333c7929a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:35:01.522Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ef95055f3d4e24e05d3cad454686b07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:40:01.031Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b786e705815370f0a133bc50d30b0440", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:45:01.44Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec16822a48abd0822f0c5daca4695a83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:50:01.26Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "124cfa218a2de690ad560b1029c1cab6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:55:01.601Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7194ab840de5d33bf6d4aab55e74a50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T13:55:01.601Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7d86785241cbb5a859fefff73f66c47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:00:01.157Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fc40f3cc0e3009016f492a086565b1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:05:01.198Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bac13f99feb12d874df957447ad6e8de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:10:02.02Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eef917d44f5646c4cc619d8eaec2cbce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:15:01.804Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eff160668cfcc41f5af7b4cf492a0caa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:20:01.843Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4da13b892656eafb7b92eb1bedb8f95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:25:01.593Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d49346df3e0376b0fdc58ff75d48cbee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:30:01.792Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75be965a38916ef3406b82f7b7f715d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:35:01.253Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cab6f4e75e9dcf85c56f42004491ee1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:40:01.858Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87a02a291939c693bf7d5e8a2a071f11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:45:01.144Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d33cdc318fb76a10c3e0ac4182fd049", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:50:01.26Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea58c07a83737560afc2932261ab5f44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T14:55:01.918Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2719af6ebc4b038a8c24da30c59277a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:00:01.479Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8d86581bc93a6aade34b2182a0cedb2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:05:01.337Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a224ff94b0229a440c212be62946e29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:10:01.329Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cf3ad85c89fa6ff5b52f93485669a4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:15:01.506Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb8e5e68d5d0cc39985b2fa8d48b42e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:20:01.987Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66e04506acb4d0c5bd9aa1fa7f923785", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:25:01.346Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3f6115515e1cba26a2a0fc3529df5ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:30:02.132Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd76420d8e658e694f55a835d57c76ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:35:02.385Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b5535cbb7c87e46ead0e673fedf2b4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:40:01.976Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24eb416d90856ef2c8156d56a8566e37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:45:01.656Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54ce77bd299c8151d2de1efadab07150", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:50:02.054Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de102b9657d2ded11d0a09f9618c4000", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:55:01.904Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1caf8e26db38050c706f4aaad3b58e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T15:55:01.904Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d04c03f35646b007fe45f87f7a16d4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:00:01.805Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38ff156700caddc94a0a1d046439bb4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:05:01.434Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e53ec6abd97e0092bd9a4cf409bb41ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:10:02.326Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41fb94cdc49994242c77c6646c583b30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:15:02.156Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb5058e215be5553c71a0f1df4fb1242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:20:02.273Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67a26a15ec11ebd2558e1e05a15ea2dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:25:01.776Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f35d92ece8c6a7ab0c253f7e5861a413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:30:02.139Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea7fe64c52bd2c21c1e3350fbfa747a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:35:01.785Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fab1186942d9647c2511ee482aa87fed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:40:02.252Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5c1367fbe1ce861d668ff980acd1854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:45:01.564Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40583587b70a41d9bf61715374f326e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:50:02.042Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70ab1c6cad8e972dea9659c0a299ff6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T16:55:02.186Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04accd94d2a08dc2d9dfb5f79662a01b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:00:01.782Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36baba2e9d18dde12f63c84d7bf1a5a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:05:02.361Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32378dbcda933ee3b2544ae57bc03554", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:10:02.367Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5d47f5f604dbce84a9bb4980be70528", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:15:01.666Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7449144a13c9455e31a9543c89ae988", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:20:02.365Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "954ef84d12432b97b9cdf81a2055c3f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:25:02.302Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f078b806df1f043dd2bed48099c8e95d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:30:01.612Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b83ea72b1dbcc9876983f3a2e3090c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:35:02.491Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "93f72ec1691a4f420686c45c9979839f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:40:03.361Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1ee63b7d97c65ef8ddc28436a1dcde2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:45:02.205Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "437256dd6ca6e34cb223c5a00bdfed69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:50:02.324Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68274f0a45c6ebc73cbe65e4cc8b93af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T17:55:01.543Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa95ca84e4fc2ba320665fd340424c1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:00:01.626Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b22588bfde06542932ff5d17e5012a29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:05:02.376Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b10c546046fcb35e094b5b55983d58c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:05:02.376Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac0587ddcf2f593f9227f6c2f89bee76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:10:02.407Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee61575e6992af24da0cc21abde72da5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:15:02.342Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6125586cf2a62dca5ea0d4fe0f8cd4c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:20:01.809Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14e7f0655c18fe2a1f862d02481be71b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:25:02.178Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aabf22d39cf9ea095a48ffba926ca412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:30:02.23Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b4a28638a77a462d2bcc056510ca788", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:35:01.731Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8abb18f9ca8544c6aabf227543029fb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:40:01.92Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fff094afae7d6cb85fb673d1650a4ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:45:02.1Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbfb33c6973091933801a42a5d676469", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:50:01.838Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d91e15c75c47225e2b0372635f407a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T18:55:01.766Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "057846b9a7cda12bad0d02bd24724f71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:00:02.203Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8bdd1f003eacecb814638b485693236", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:05:02.848Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cddd9c13e161a2f0bfafc316c7c88307", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:10:02.156Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "050b0c418ea85bef784e385b0c56d2bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:15:02.631Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f36e278d4836ce4fd0f94419897e7eaf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:20:02.174Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "906148e00c32fbcb52d8941347bbd7bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:25:02.293Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "148d66319492b2f0e91bcab760b9f629", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:30:01.809Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f4e630063d5276cd41084bc2ed56a63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:35:02.337Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85780dd297ee5bdc63f92de8158e2f07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:40:02.155Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "478600c10e1e9835dbf550235ff7e6c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:45:03.246Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "452136c026a802bc0b42f43ab356d1b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:50:02.643Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2c40a2282b35939f2e1f752256a5fb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T19:55:02.529Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "279b96cedefbd62be8b704920a9034ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:00:02.055Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b904732e240de7a7d0c70a72aca2c02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:00:02.055Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "009ce27e7245d210bc53d426854058a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:05:02.365Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c449d390cc21e3f8004ee609cba9ee4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:10:02.466Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0be63648df3ba8fd91ac188b394a8e1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:15:01.947Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f015e48a5549d34d27b4f07a62424729", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:20:02.558Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce4e06ffb953c8b6d2aa50101afda468", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:25:02.182Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b75f7b3b361a9236cacf3cabf7575db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:30:02.785Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a791e315c400f49aba1459909e41656", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:35:02.573Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ecd2ed2acd3375c6c79059f0c172cf4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:40:01.933Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4788ce9fabc66f31ba231d441f1076d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:45:02.549Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7570b88d89236b619d6e4d8ad970dde0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:50:02.279Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73d0b242ba874549e72132653d2b88e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T20:55:02.814Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ff33271430b501d667f06b55c2ab555", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:00:02.329Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "823a2c7d4426dac19b2ab995dfa70017", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:05:02.245Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "406fe080bf50c652ccdcb290ba8e0d06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:10:02.655Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc17ada5827791651ed7cd18a99c9f9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:15:02.237Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25175703a17d0c5ace68b343f8a619d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:20:02.237Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6974e6786f2baa9d7e562fbdcb60a82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:25:02.455Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e77d441b1c3c17e87d54c63bc63a503", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:30:02.158Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51ba8929717132782afe7a09e0c55b10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:35:03.233Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28eb2f7b30c6733eaea6f5334bed394d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:40:02.738Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2c3e6bd157a546bb87d2c893abbd18c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:45:03.433Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7c057e1d8a3a43f782188fe31455363", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:50:02.767Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a3d5224b29b9e28eb1203aedcfac3b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:50:02.767Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d34b79f79fffc2714bea9e3d2be9ee69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T21:55:02.378Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a771ba3c02d3be95e65948c67ab0eed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:00:02.888Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a0c8671118b7f5733e623a2a3fd6d07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:05:02.196Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddac3ed4329d800f5c6236f96cb5ed6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:10:02.651Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21efe542111b7e233ef53745f8acf9c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:15:02.101Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38a9adad3419deec93c04c41b320c677", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:20:02.799Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae60c2bcb06907efc82f489f18aa8b84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:25:03.02Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f65f623a44bb31d8cf1f267a9e6cee1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:30:02.532Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebfcffdb37a3589e391156e79ea0c8c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:35:02.609Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d72820b3b0350eb2724902d7a6726b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:40:02.971Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "265ca39f75377f4d936297d49e70ee16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:45:03.089Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b20b539d826c5aabaaef72c8854d469", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:50:02.487Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fc33cc88ba9a6e353b4a7230cd1c53f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T22:55:02.506Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47eb81c12182d26e15b839c5f1a93ed9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:00:02.303Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bfbcaf8e24e768f81111bff66d81e75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:05:02.946Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce38adecb3b5ae08771591b0b5c8d7c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:10:03.021Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68791ef872cf37729639dd7c8febd2d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:15:02.588Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35c5b67f4ca82b2681c7ced0f81027be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:20:02.223Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4714d6aa26d8e780b3945a201b0a3394", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:25:02.274Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "355a9a274668e30ab8691defbc456cce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:30:02.421Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "440db77f2ab483adf4a21e06f2c39f14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:35:02.613Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "718aabebc35174424a8f06b2fd98ab8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:35:02.613Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd80d04a4a471c2a29c4747010214cd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:40:02.235Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa3be49562c9d390d3b186acbf7d27b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:45:03.058Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53f30e46f303e15d957e0761f2c0962e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:50:04.331Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f243fbf322ca6b68c855299d6d1596b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-17T23:55:03.109Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bbb24ca220f607b7a0276b44851eddd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:00:02.954Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb1ebde721f269f44aade13350da3716", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:05:02.303Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd3ff979ef9f0582f617dc0d2455fefa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:10:02.989Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "354dc926ed1ff38a17a7393a8811271f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:15:02.986Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbae2ae792d8b89043e8b300dec631b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:20:03.085Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ceb651383d88899e62d207030f1f0e99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:25:02.607Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3eb92e9a07165bdc5841f7803b1bad2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:30:03.257Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a632bc3d8f21064130002ce0c2d9f73d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:35:02.84Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eba2257e36295828c6a1613d4ab36f35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:40:02.811Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "557f081bf6ceae715c65a20a3862614c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:45:03.201Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4062b3279a296b7986d9b93e2687013", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:50:02.4Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d576dc5d639ec974e15b1a061d1722b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T00:55:03.195Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e95a5c0b541f7fcf187a4198b193bcb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:00:02.678Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8ff36e1a93fc9c9ea521b01e8bf116a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:05:03.089Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ed2f0664bef31b86e57e16d0a0f2e89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:10:03.156Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6eac3443bfbaa547aef8620755ba5d73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:15:02.67Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "466224721a5e624dc457a2d2f2d4883c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:15:06.67Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44be70b75ed2650d3fe09a7020ddca10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:20:02.528Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd5cff003711d0959aad774a0f9fd5b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:25:02.998Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77a1c495d4a4a5ccb2762d409e5df8f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:25:02.998Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a55e023e6ccf2710d2a2fe45bbcc1709", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:30:02.848Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8136baa9b85e3dd5873dcd1bc25f6daa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:35:02.864Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7c4373416ce58595ac0220d1b5c8ff3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:40:02.864Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9a7e0e7cc1454e3bee1ad56470f5158", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:45:03.075Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e4cd096eb9c0b12302cec768e4582b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:50:05.223Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "954fa655af63f0d0811abd14f7381da9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T01:55:02.77Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b55dbf3fdf09db6d6873f3d9138c7fec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:00:03.096Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25ef3f3e5d588e46a7f490c91232e45d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:05:02.997Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2df722ab8277cf6e97f0b059e83c7cde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:10:03.021Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3146e00bb4161e6bfa1ef760702213d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:15:03.381Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "169b581f594374f95a4f284b69edc921", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:20:02.799Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d15eac03b277780dc0c138ae7e7e181e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:25:03.517Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78058cad682477624a625130eb7d9991", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:30:02.989Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f5564891ccde3d39c69f628b1458793", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:35:03.009Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02eb33eafa8ba5bbe82de87749305d61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:40:02.909Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90bfea6c7edd21962cb52bb754a7d3fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:45:03.383Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "619265c04b606f3369be38ce82d5dfd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:50:03.473Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00925ff543efd5b526fb324d5f0d0caa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T02:55:03.428Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05fcf3cd2f3dc5580343f43556614b11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:00:02.623Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd93c82f21982496f53c78415f94654c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:05:03.294Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d4661af0ba9176d4bed15f87816541c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:10:03.309Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1eaf3bf4e8ed2690cb2415966e59233", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:15:03.282Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3696c5b86150fba04c51057b0c167c1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:20:03.545Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b21ef89fc49c7b9fd7870ce457b9130b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:25:03.257Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ca13d0b6fcd058c61cd5ec2addead31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:25:03.257Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f453a1a06ec6cd15a0eff02d9bd43bea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:30:03.022Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e1f0cdce22d3e076519c278ce59dc8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:35:02.653Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "086e2d0ddb99231d5c7889ee0b147e21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:40:03.361Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b6c336cd21e6db7a879a6ecc502a382", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:45:02.923Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b00c2325495b57fab1897d23236937aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:45:06.923Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07030e7909f920b5f2cd799a02d1d89e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:50:04.772Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "502616541ec71fc398959eabd7f9c3d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T03:55:03.356Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7cb6033d36a045ddf3eae812d5ad0d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:00:02.929Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0835a00d2a1b5dfbac163656ec8664c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:05:03.146Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "402594e19bdd0a10ac4ddfeeb8ef8a33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:10:02.988Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e8217687284b40d65181e386ac4091e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:15:02.908Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d61eebdac73bc5a2a0468cc5ba4ff746", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:20:03.624Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f23cdc8a73570bdf4466603b6fdcc7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:25:03.539Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b67ed5927c86231beddba7366ef3f701", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:30:03.886Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1a3839927f741754c859028cf93b478", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:35:03.886Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b9ed4c8ae83c9dc0c24ab172286aa89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:40:03.886Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "133bbeff9b5b4897630f9ee40ad9beea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:45:03.2Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f996c305132934f27ad6fecf8121213", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:50:03.311Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd28c3a71fe46aeeb06a3b7e123fd20a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T04:55:02.93Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9abc42972be66f5cf8279b02ad7011bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:00:03.304Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f036d6c3b56e31e2e63ccd63e476cf44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:05:03.482Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "909632e25056758462b9b13cbfd2d788", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:10:03.7Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aab3182e40a07bbc46f9614173da5e7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:15:03.505Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3173db2c86f56a994c79a92bed61a605", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:20:03.731Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1026eb184862ceb5c5d1be232d1ad4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:25:03.684Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85d727fef58a7c1d0c8f18af954c68c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:30:03.818Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd103261ac5104a99911db7a8bb467a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:30:03.818Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b823feaf26c0480ef26bc79a15a9a5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:35:03.35Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80c1812aeef0ca43049dae48ebca860c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:40:03.664Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99188754113533fd2e6dd27103f17844", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:45:03.526Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40ae7f75b8e09811bd21b951097165fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:50:03.078Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "086aa14dad817fc2271f6af0dfecd053", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T05:55:04.255Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43c58bcccf058321802278f2973ff7ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:00:03.81Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "519a641561fc38324f16dce160aa11b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:05:03.353Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcd41845227543c5082165ea4ef53b86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:10:03.533Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faea7edb6b20050e529f549270dfe2f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:15:03.628Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ddaf857018e63028374855d77d0c850", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:20:03.589Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6e437b305a3c359352f85a2775a887d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:25:03.807Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f3640a58baa01121cbd0d0e796b49eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:30:02.992Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6aa7fff178e1e4c336d2178a6e326a48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:35:03.733Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bc009f4c8a44b8b60116b3470e6cbd9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:40:03.809Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4857b3a515e9c03410dd421e473ef773", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:45:03.928Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "755183a0bf1087ccf38e6b038d8ea0be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:50:03.423Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "569973e03de41b9c3a64d686749d3c9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T06:55:03.477Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbb2fb9a90da80c8ee6b90228c4247c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:00:03.791Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4cfe23e652e5ef8c960301f82b65d31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:05:03.853Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b634b3886269c526b42869aef703a06d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:10:03.773Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26bde360ade6dea6203a951f3ed543c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:15:03.644Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f3504c935cd5a10ae69d9a1eb86969f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:20:03.589Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89eb11c363f187ebf85f387b064994fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:25:03.855Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b743dcdbea6865f0a2de581dd8ee17a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:30:03.743Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad3914acce150a6fbef3b71eab226fb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:35:03.955Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44ab1534dc97e12efad9ec00401880dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:40:03.808Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e30ee16c0cde53da28fb5f2ee7ac3f8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:45:03.984Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae4d57138ec118710512e7bb8173c595", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:50:03.68Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11fa4d0043c5935467432f28aca1b83a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T07:55:03.875Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca0f4640c01f0c1c7585fd13821eebbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:00:04.58Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c744111fd7ebd30db17cb42c1c39f6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:05:03.116Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a942aafcecf583b29aa45d150329b7ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:10:03.78Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e710cff11489438fd91f6c94995e41dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:15:04.029Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "722b3dccae6c1277c6d955578a5443fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:20:03.276Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46ad880bf9a7e0bbe32fddeeab43535a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:25:03.956Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25f6c781ff9031aea0363c7388078a9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:30:03.799Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa4ac205a13ea89da02bfdad32d9dec1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:35:04.076Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1db7f1f0914d81beae83f32a33e66460", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:40:03.82Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "113765aa722eda9162fd691ef46d6a5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:45:03.265Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "819483674af038682398a3cee4742eab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:50:03.556Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a592825b7db9a4be32aee8ab5e34c204", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T08:55:03.235Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9d72bc5a679aaee13f10ff758217e3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:00:03.796Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "896e2ba1687ae84cd29de2d638f64526", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:05:03.474Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a84fb85cc3c2eefd43dd4eda5fc707c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:10:03.418Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2920c45679c5475ed66821b229b46c8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:15:04.213Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7240dc873e4a3eaa3f96d62fe057225e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:20:03.249Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53e953a7cabf1f3b87cf41f7b785197c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:25:03.554Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37ce50939fd187cb326eb0f3dee2d044", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:30:03.509Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c1d6f58faa25fb6f8e953fd3ece8024", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:35:03.772Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3adcaf7566f7f2866b45c453ee8612c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:40:03.8Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5c825968844531fc081ebca3741f1e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:45:03.283Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "330263de1b32fd18fb0835411f4c2b0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:50:03.505Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e47686fec9949453e214398dfef7a169", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T09:55:04.146Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81cd09c8ab1c0dee88c8366660dc4da6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:00:04.298Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c222c3ff576cfa0799afbe4a388f6dfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:05:04.966Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82ee4af03c4de67a92e83cc1ff667a4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:10:04.08Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64eaf714ccd292cda1094699f83ec718", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:15:03.708Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c4f285b04578a5976409ac94e0ba7d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:20:03.499Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27f76a7fb962f8ad45cf0fd0f482eb70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:25:04.066Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dee4d564ec6fd393dabc7580a11a511f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:30:04.149Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d180ca6bfd1abebeb3e339c24c3a1202", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:35:03.479Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbcd5b75af8c091eb9cf0d320d766a00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:40:03.567Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3df6f489d102f4d28fb5c9315fda20a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:45:04.243Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "769bae1f18c71647aa9722d3b4d04942", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:50:03.516Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd2b08419790412fb46a7a2cf65a525a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T10:55:04.211Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb025faf698ba083756b48d2dc2d1714", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:00:04.363Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2db886b508adfffef53b1be160170b95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:05:04.272Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d290e800311a3bde64b41e0dc09d99f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:10:04.399Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6c5d79990ee4b70cd776ffb96b0b189", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:15:03.596Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9b6ae99cf1d5a6f2747a37241783fd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:20:03.763Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cec250ddd966a3ed079c08d2e02ca899", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:25:04.431Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5480725354979467cb2f104d590b9ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:30:03.85Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2a26cb656d3b0864602443dbf34a703", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:35:04.436Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba188abfbd5ffac6a5520669b32587de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:35:04.436Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "891fa227ae2eab294d051445e95277dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:40:04.365Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13961e20515271884954cce0860e278a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:45:04.3Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c872464c5ebde2c8608c87e429bd709", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:50:03.78Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "085e1fe6b38c1475a8ab1e40dd9a8d69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T11:55:04.332Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "688b2f0626255599a0dc25c3929b86ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:00:04.008Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dbffa8558e55e3bd533f728bb970ac1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:05:05.639Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c938db21b39f502f1c6f49d7c31c111c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:10:03.715Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "925a65e63c822645daa6a6a3a5ba394e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:15:03.569Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7ca343753489d65ade7aa916c05fbba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:20:04.369Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1711eed9c9b128e83cee9fa1d5350bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:25:04.389Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "967b7ee4d6c8f9c0cc6e0583a79c3c9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:30:03.832Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cec363928a919cb6974ddfc72d243dd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:35:04.519Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cda005d8a6c45cd2304e412170289b29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:40:04.574Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a48967fa5478e872e9c10492968d656", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:45:03.789Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41fb8f43bdf8a8c75c2bd10cce3c8ea2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:50:04.091Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "858bc870f9bae6deca4275d1c71bb051", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T12:55:04.565Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "615a1c729e50ae5fbd0b5aff2387edc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:00:03.963Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8acb5a5627915e21dd38591b8b3536f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:05:04.064Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8516d3229a846503b42cafcaecad32d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:10:03.908Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dea2ac1f59720892c4cce6feb8c4e4cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:15:04.523Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc399a55121e31034b333322d47fd963", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:20:03.923Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b419683b913ae86cf6475da6a3056cb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:25:03.851Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88fe36f2c7eb40196f256d756f245803", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:30:04.638Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ef5b1edcc42d09f5f2e429197838d30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:35:04.315Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f5f34e35fcc17c012b4f09a1164e506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:35:04.315Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "baa4f600a63cf398e957a34894543cfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:40:04.46Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7819cae2d2aeace220ae6074836993ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:45:04.334Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd1ea1cdb63c1b144e817201af062712", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:50:04.328Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0ed82a45dd8544fd6c59c3f6fb2f6ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T13:55:03.924Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3af260276ea7ea2a1a7c0496c78080e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:00:04.763Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7563be3a99aa0b621b87fa919aceee11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:05:04.528Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1535e4b5931dd575300ffcf66152320f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:10:05.077Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25c0095317e9c8216126e4d86f2d1dc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:15:04.191Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c29195b3a1485a38172851d573d120e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:20:04.361Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "220c17b1f24ec09573780d81995ff143", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:25:04.795Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ff4f3a1c763f20473a169e465097dbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:30:03.95Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b36e78a762ad957d21d6a00c82223987", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:35:04.327Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c55e380d3ae07340e7865a39236597a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:40:04.79Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c1514915a883490c8173997c6d3ff94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:45:04.083Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ed8311f2182d10581227ba592d7029d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:50:04.691Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44efef093a71d8bd637bf971e80aa940", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T14:55:04.135Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00e993b5c990538c88518251be7f31ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:00:04.121Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f84f8b478aa51d1f38c0dcdb51787fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:05:04.13Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "915c786931f2e5a445efe29db3280c8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:10:04.537Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f142c70c525cd95bb34bf650c981864", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:15:04.259Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12dd7f8c4376e7e86f32ba88f6568f06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:20:04.924Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4d9c47a00863faf38d642e0d3042777", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:25:04.161Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec357ed952ad89aaf04266f4e7a0e755", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:30:04.049Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b6d6d3123cc353ef38c864d59b83072", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:30:04.049Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4fa245cf76b780c8e0b319cab926f17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:35:04.353Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "407e37183a4e9cc11e7919aed06120c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:40:04.94Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3f894820fccf01a2cf84ade26032f58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:45:04.218Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f90943cea0d97a0fad134f40c9c39f4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:50:04.344Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa44e818a5e8fd02d4ef1b26db96fbbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T15:55:04.023Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8081c9aead1c7723951a1e6b1552a9e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:00:04.914Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bac31bda2ca3795f07a151e5c7590bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:05:04.341Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e706d610b108d44d2df3bee00a3aa274", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:10:04.855Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efedf5d1b59a03a0b1b3328aee749b26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:15:05.743Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e259215678f64f5148db05eed9e00412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:20:04.959Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34d639e657aa7df3f485f919eb78d89e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:25:04.469Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa6d9dc59e6054756cd625bc08bc6a27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:30:04.543Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b483f84b98e4d3a7f4913da2259c50e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:35:04.067Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9778a87cafbd91dd153156c1574e5e87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:40:04.924Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46cafa3bdd2a4681b46f814707c8c354", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:45:04.499Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e236eb0c01a16b519306f92d44d038d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:50:04.31Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20ea76ffeba812c5b9fd4c7b44225916", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T16:55:04.726Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be5cf0e51d1d7cf1228c6ae7fb70fa45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:00:05.022Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8950cd4b6108c4b66443a5254a8a6baf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:05:04.595Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9c4cfdbeee4fd75ade9280356694006", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:10:04.595Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39353bf53254c8f5f0772eea29d6fb64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:15:05.026Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dcf2a3db26f0841aa8348846dd55a1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:15:05.026Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31ac6fc7cf5e0deb8f52308a2f893641", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:20:04.975Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97e2abd362a255d38a78a4d734bf8533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:25:04.992Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03f25665d876f002df8c707c2091d2b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:30:04.353Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a29d0e97184ec5ad6d7bde9f0ffcec65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:35:04.571Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dee0bfc39f39a8df095d01ab84e97ece", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:40:04.899Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b02ba9c8df198ddb04b7fcf98d6d22d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:45:04.296Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d05eca5dbc4fcb0d1d3186eb5f4b8ff1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:50:04.343Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdc96f42a6247a487afd403596e9d5f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T17:55:04.5Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "954cde6d384a8a1c94f52e294f04f20d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:00:05.075Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39166258b2aaf8125f09be8d93e14316", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:05:04.713Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62a40961a938d83bfd835afcab9d8ae1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:10:04.758Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f45f1228a97da006e4506332b9e015c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:15:05.161Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "842d397e31e77e5d6d52c8fb600bbbca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:20:06.295Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc1c677cdd43a5c581ef0932d82ae273", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:25:04.882Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21f39bdd78627d1dcf4cdd3026eef0c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:30:04.969Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1de907954b101156177ac748f6a71a97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:35:04.389Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a90be2a22c25cf370d0b0e4cf3b62119", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:40:04.361Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "199307ccd19f2e517de4e0b7bf429f6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:45:05.245Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a28b9aa51c548c64e76645e7711b2be6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:50:05.236Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66a37d0dbfbb3868ffe25c69d7988030", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T18:55:04.624Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70b57a26d33cd8cf7ea97552583a97e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:00:05.18Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06158c9fd4cdda03260e316168315100", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:05:04.358Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbbf6eae5362f32e155a2e18f1245f6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:10:04.56Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8a3fe2409e03741ce323333917891e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:15:04.457Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1971aa85de313b1c7efc6413a06aecaa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:15:04.457Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7d01c10339560dcc6fdb3a347bb44e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:20:05.136Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c6da896acc48b514317461dbb7ca504", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:25:04.644Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06ea3bb00943b582ed66618c0df73a3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:30:04.629Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "546912c0a52842d2a46c32665780f5c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:35:05.316Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a634855a37677ddd3252c4c48669137f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:40:04.515Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0280ab5637a820e423134dadae95d8ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:45:05.26Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0df35c9b4033c19ce094d62b3e96e83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:50:05.341Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebaae24e64ae38d6491a4b5b5cb51f47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T19:55:05.357Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ef8d9d1048b15a1327b06c711422475", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:00:05.796Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7817dd7d3efda1488b0afc2df90219e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:05:05.822Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c7ad0c1c50ed5e44bc1a7ad93d67f01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:10:04.811Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8dcfca8395e7ed5fcf8db0c544b37615", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:15:06.027Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b49c5e42083a22ca214c8ef17ca9283f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:20:13.06Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "239850146db4edc766a39b2e47ebd2e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:25:09.401Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5411e0febf6e3d84452b1a6f20310f6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:30:05.502Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf7235dade8f1203c3bf7baa8546ec87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:35:04.884Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c09849fa7baa387baf518a6e56436bcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:40:07.596Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ed6173b46fe25f8d37fff55609d0924", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:45:06.105Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f96869024e46b45e2abf19ed3057af8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:50:05.499Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bb8205e091658bcb4ae4722b73c39d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T20:55:06.825Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "932473f4ce4fde9978ec28841fe5dee5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:00:06.825Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74bac97850de5a701199c357ffbfdb7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:05:06.825Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e6b9d78371cfeda5fe3317ae7984242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:10:06.825Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "968158ca56a01fed546dcad0ab93df75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:15:04.964Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f69b03e8ab9ad0c0731f19d5bbf9dd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:20:05.339Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "995adf3bd19c46755591a001d005728e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:25:04.897Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "436c9ed2dd6d7286f9b0103cf2c4d42e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:30:05.674Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c821d1e0bc3d5b3925d9de2864b6f4c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:30:05.674Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13293fd63172e192641f8d3a886e179c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:35:05.086Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "182b30642e258a16550539b50eda8230", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:40:05.736Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62d62e0f36d6d9a671f6f417bf821621", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:45:05.14Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd6f2c0642dbe8ec175abd4defc3292b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:50:05.326Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7659c9d168783df695a79a8f67b0389", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T21:55:05.46Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8a34876f70791d404f01e3e9f6d6276", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:00:05.73Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05eb347298dcf45c59881721e0ae5e1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:05:06.786Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6563e167a9b61e2a83b5d8626d99ec28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:10:05.305Z", + "quantity": 198.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7e1dbc3be52c93e53520ca450a8359e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:15:05.565Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5e8aefbf64364a115df83a56074ccc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:20:05.059Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56099a4b45753a84a0e4fb57b560ca28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:25:04.827Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "490dc5d1830a4c35d599bcd58e74451a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:30:08.142Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37be6ef8e251d70afd182c0820c5072d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:35:05.396Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d25cf8bd24ec5fa8cbf944b9b93606fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:40:05.114Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbe16d17e4bf9b4b8b15da86d5ba7b05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:45:05.34Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ceccc1a205a8b6251f092b77cee9d3f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:50:05.446Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "654c1c4d77866ad19e6f82ee9b8707a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T22:55:05.278Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d505576bd7801db354efb44cc5d44058", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:00:05.253Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97783482e602f529ce0deb4e0ccfaae0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:05:05.489Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bb75bfc3eae6bf5d3cfb6e089e2410a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:10:05.811Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "740af45f1671766171bee67474d68c3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:15:04.899Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16ca61f9fc23daaf0a82a141a87ce84e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:20:04.956Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "121b4e1a1333f85b8a4b935ec3e089c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:25:05.353Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87e302d902ce82e422d4e5c797c9eea8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:30:05.074Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2cbd2c55c58961dceaa0e658e73f3d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:30:05.074Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7526908bb7b57faca2acd3562461e0ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:35:05.038Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fec0ddcab62dbeb5d517b308d770de9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:40:06.759Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65a42e2da2d98706264329605bf36d7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:45:05.787Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "caeb1c4f52fd3492160da8e18abe1f24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:50:05.728Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ca659eb6580bd3850a826810c2b15c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-18T23:55:05.675Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df7d6815fca680d7537b554b557ec601", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:00:05.784Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "900d005bcdcb531e5eeac16fcbcf9fec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:05:05.72Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d20f0765fcc8e415f32b6bb2eaf3b43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:10:05.407Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "293007cb8e6ed9cbe2da6ac61f37620c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:15:05.803Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3316413ee26a095be5aa9427f246b087", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:20:05.667Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0aff87cd2fc5e2278f8af490951dffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:25:05.32Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dae44026ec8dfc391e2be052645c2464", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:30:06.713Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d329b69db88d8d8f9ae2d2a634312e81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:35:05.334Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d12b0edcd73fae834e5a637f7d48c4f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:40:05.73Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ff9e791f3d8aa2264abf75bef13ba96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:45:05.243Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8009ceda193ce06b8ef337da71c472a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:50:05.567Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da86fe544c170d53468b239c420a03f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T00:55:05.777Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e0215509fd976c2eb0acfd8e90ff29b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:00:05.468Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58875953faf2482130f2ea9e40516d91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:05:05.521Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e50bd9bff56dc6cdb80a0850e07dd356", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:10:05.582Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdc2165ab049fb60020d77e11dcc6c3b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:15:05.444Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dca95806d98c5d1b09e42f0f7b133d5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:20:05.357Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91bf82b089bbd75f364c492d7e04ea73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:20:05.357Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71495cfad60f1c793acc4d56febded69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:25:05.696Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16146a1c55fc8eada09508e7897aefa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:30:05.929Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5af9c94cebb78b6ded274c7ae1e0a1d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:35:05.601Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6220ab501672a3243ee44f5370f8c965", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:40:05.493Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b85063b56e7e902a973bbb07d809e65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:45:05.672Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2987fc34b3457bab6bfd9a553dff59b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:50:05.794Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "735c17198a7baf7d64389ed4f2e4e0b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T01:55:05.611Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37ef1f27c312e0460b9c121888472a9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:00:05.876Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19f2610244502a97d09782cb95ec3131", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:05:05.264Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b3364d4652364b0403c63f78fde6e82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:10:06.351Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6ea51da822c7e0cc1de5beded138670", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:15:06.149Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc4a506a5f6b581d7036abe5bc0b914c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:20:05.24Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9245be949cbb9f66c5c9d97f2f896920", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:25:05.922Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b39fc5881254c5bb4f44f47e7a7ac009", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:30:05.391Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff3ae962b3500b86cf6bdaa61581aa45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:35:07.741Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de8f681d83ef4b72296be2ac0e1c8376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:40:05.509Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99f79ee149fe4380b9b6c0d89eff4d71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:45:06.2Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa4d02f3564512e51046327d79ec9563", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:50:05.896Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d00248b02de7f36c364dcc35bb947391", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T02:55:06.391Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9961dda8532f589fcfeaf7375ec8452a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:00:06.391Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb1b15e74017174fb6dc3e8eab9d1d7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:05:05.661Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9f266b2fd3dbcc44f8c7336df893bab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:05:05.661Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "988addc87326396084da1c0adadbdc6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:10:05.844Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "523955709a4bddc824e1dac1d9237155", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:15:05.88Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5da123ac2788bb35009549b3594982c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:20:06.056Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fdb21ee031b94fb3a81c0363ceda785", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:25:06.552Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e05d8df9ca3fb058ba7545bf8fdcca85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:30:06.552Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a55b3a2e9f52ff13a1ec7f32dc12d249", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:35:06.552Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "770267e1f5521501b9745bf6bda8dbbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:40:06.552Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b766b49c212f3911b46de575a829de89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:45:06.552Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99c08d937f1f76936d45fd6593f732dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:50:06.552Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94e8ec0b7c8c0175c1830f4d1b6b531f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T03:55:06.552Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14ad3d96a41ae863161e79a07e84788a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:00:06.148Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23a8a43658d4b54bf99fd1096f36b6c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:05:06.148Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad363da45bb5a561443a226ac8f84b12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:10:06.148Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e10622ceeb28f463271f4028e7aade8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:15:06.148Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6445998beccb5506aa4d3cf7046fcc7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:20:06.148Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cda3ae620b418b918375e84c9c13f605", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:25:06.148Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa7de1848555e88b834256e94bfd5177", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:30:06.148Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "582c4f1003f36c7817c937af7b17dec9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:35:07.409Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de7bdcb0dfeb393a807f8d81879d5542", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:40:06.629Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27cfb5ff012749aef195268b36b284cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:45:06.629Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c48d9bf88baa5f81f33daf3330e6bcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:50:05.692Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a72deb0eb825958cf62af2f689a7c769", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T04:55:06.21Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa779dd825a768056cd44c6cc1916100", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:00:06.457Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc34026d86dd1e4c7f7836db1bd7cb88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:05:06.392Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76b283318f2e0b7059818ed58a1bab0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:10:06.333Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "957e4edfa34ee8bd22ab1fed00c1505a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:15:06.015Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ed3631be20266be346d26c5034c3e8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:20:05.721Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e85f0c6f4eeb749d89eba2bafe1e106b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:20:05.721Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "230c0887a0615b8d8f4eee1a14050a48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:25:06.201Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76ba281b74a26e7747ddab17b6dcf434", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:30:06.182Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ca5adc98f3afe32df64b19940fc8ad7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:35:06.52Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9c22251f2d575a58320843274d0602c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:40:05.847Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8797f99fab94c3d1b63de500de7063d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:45:06.49Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a88984ad26a7145e1d404b94f0837549", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:50:06.429Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd2be88e0b2bf84b6710d0e637c56099", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T05:55:06.486Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd1b5a819c114baad48ceb519540a51e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:00:05.898Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f7a364d3014a19f20b15ac8f95f3d22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:05:05.681Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb1a3bb55d82fa303846f2fd56c67606", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:10:06.555Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "186d4ed7397ccff352e1030f73f3c31e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:15:05.872Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bca757bca98ed60dfa550778a4e423b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:20:05.844Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42d049b3d568f61472705272e90dffe2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:25:05.836Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d721e3a215c853787f159ddca343f713", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:30:05.707Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3e1f5f5e6843a458d1ef0e0231f083a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:35:06.414Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "527b24c14bff599631acc4ced492d044", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:40:07.763Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acdd139381e46a0317e682c874957a67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:45:06.054Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ba39e93e46a07837ac38e7a6d6a96ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:50:06.469Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77da6a1b59eb85c339e6403c124215ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T06:55:06.459Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49c8763d02ebf5902ca7e6c3b7b91a01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:00:05.959Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b6db31f498e1552ca3c8440405a1a8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:05:05.737Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10c9654e41f4d3b2aa5b6bacc2df3e37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:10:06.504Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07140859a684ff0edea1071dd420713e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:15:06.523Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8532ef035c5bbf4def0f31ef9a7cd8a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:20:06.393Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "033c368afa798124d0aa91e639f1cf7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:25:06.318Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d10adf3f02a3fdb3ed1d2330cd153663", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:30:06.466Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb5c3751a3389d3612dc5e6cf3bef6f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:30:06.466Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42ea7d6442ca26e5f7f3b93a42137aec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:35:06.745Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b28f9472757d7462463b33089b898775", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:40:06.342Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "984cc7cae1ab59250b81a8f031d77435", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:45:06.751Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4b9ede80f1fbdc2472793dae599f6b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:50:06.093Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a568ce0f1d4d89b5f8d7cb91d7360f06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T07:55:06.34Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf8a3f19eb801c8475ae518b8acb3e35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:00:06.6Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34447ec0d9e2a8c2fdfcd8336928482b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:05:05.838Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "644d5399dfe6dba311c19b795647bb91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:10:06.792Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a74c8a02fdbcbbf90a64337dd4b34b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:15:06.806Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83747c2de83070272974d6e16f4c90d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:20:06.694Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7aea7ab224d030fc2fec0c633a583d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:25:06.696Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a39bff6333f2f60ac37a1622b51710e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:30:06.242Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9d98d5d7525a68da51a03801fc1ab5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:35:06.267Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1943331d4550c5a91cc1dc65873f3bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:40:07.343Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbe1155a59496fbbf32a1f27b59a9fef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:45:06.49Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50ef8d841cf26378b7cf13116118db57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:50:06.688Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d95fe81ac942346c8022c39660457e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T08:55:06.826Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee0fc14adefdf858b17ca4df9c0dd9f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:00:06.058Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55caa4d43abb6706dcca68b88e9c13f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:05:06.662Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cc060ce26fcd6e0dd95b28216fc231e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:10:06.155Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69e9789dbcf9848ae789cac70bff7838", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:15:06.502Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43a3d29f405d145ebdbd76e6fe854c02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:20:06.74Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aeab16b6e6db48e8a48b33e99055e243", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:20:06.74Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f7014573c6319e2d52c37fc2fce5923", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:25:06.298Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c729e1afa61d983bc66b607852e5f7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:30:07.016Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18ce2a41c4fc87a327370e16c1d341d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:35:06.23Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a5c870d1ddbb5487c05deeb67a8cd57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:40:06.429Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43f86dbbad6bef607fb9fc19c83fafde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:45:06.117Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8cc6a72b9ed6d5b1f138208751360893", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:50:06.361Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2ebf27b3815ce58af6055dda348e973", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T09:55:06.951Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12fb1549039e60b2f9240b3119f7b00f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:00:06.398Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fff8cb7308d0e4768486febf22b60ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:05:06.594Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "653a62af7492c5a47b5bd5a577916fe2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:10:06.903Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44792cdb1964db9096ef69b000208e45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:15:06.784Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d09dd7c5359275bc0c276c4683ee3c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:20:06.308Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efec594823532f61edb102355c8b23a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:25:06.977Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cf94a2d5d80fac637126ebe3b57a099", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:30:06.326Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ec8f7d267051d2b57bbe7320fb2967a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:35:06.312Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a246ad6b352a30322ec00d10707f486", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:40:07.754Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff997c53556f05c8943d05e1e8e3521d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:45:06.923Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8cc29a0e5a4c2995f6b6d13d34039b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:50:06.459Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "321274ef70a546e5f9e834a2d2e1480b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T10:55:06.974Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c130b1ceaafa997f310874cd009db233", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:00:06.88Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdd697421d3282433bdfdee68fcfbee4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:05:06.974Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7b4a3e9a53aabac72b87dd86bcb360d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:10:06.311Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c1e2702f5d6f91ad03c5dab347b4be2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:10:06.311Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3142c7726f5092e3fa4d0a3e0c4964f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:15:06.949Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25a5cdaf8456eed4828fd39f0930ec13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:20:06.292Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74f0a24df2803aa35b67994cae8a66d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:25:06.973Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55091d4ce8425b7513ed610ad4d816cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:30:06.699Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ca1ff1e2403b3acde0421dd934c7853", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:35:07.101Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8423d516628e415a77d26ebf8e4dee4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:40:06.588Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98c05c67a205893c0709b9d57dc61e3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:45:06.782Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2888ba6f7ef9ddeba6eac1b3e55f80e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:50:07.212Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c5c1f1cc325f346a0134df81103a1fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T11:55:07.002Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "745eb758b92427f72b1138836f700442", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:00:06.793Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "577f72c18f2b3a8e720737dc3fcf8ad7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:05:06.963Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "467185605521ef246128e5a798c534ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:10:07.048Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41c74836926ed04800030e515fd81d1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:15:07.162Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a06500cbb6dbe2312857f345408ffbc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:20:07.085Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47eb871b27f660480b1d722de7ce31a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:25:06.74Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80a5f55a0b908ffb8ed8a5b2250305f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:30:06.806Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4adccc71b341d2c8b7e5c4d44e986fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:35:06.449Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "358d6b9eb3621de76981bcb1d7ffe506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:40:06.985Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c416d747aed79dac9943da63b2772e0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:45:08.456Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bdfd68790aeea82774305989b21f2320", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:50:06.914Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8216d828745cb600a867771ca8de2290", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T12:55:07.16Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c215dbc66f4be6862067e6fbad643a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:00:06.992Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd29814f6c08d11b76bf5d31940c5e3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:05:07.079Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c821b47a86f9887e97cfda2c9f960af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:10:06.719Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3862600fcdd2af697f3053c783e5e27d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:10:06.719Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8aa79287579d282929d1f0213cd0b00e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:15:06.511Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68ff30f3239f6c889cba74d0d04343e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:20:06.931Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6652e357a01d54131961968c483c2be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:25:06.731Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0afbf111d6c92ebc3666f37542398939", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:30:07.387Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "846d712ef59caa9ec5073b6eebc30aab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:35:07.084Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "add6016580281b0c070d02efed6b8dde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:40:06.65Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea557799388a68ed2e67d91897b2a58e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:45:07.441Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca019e66ef6db8ca411d0ae0de40c7d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:50:06.531Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75ecd25ff3929fad52a468b949235018", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T13:55:07.254Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35e2b95cdd6de4a2dc7d2c7cadca5078", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:00:07.332Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d6d7a8558961ade7b7ce12460e133cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:05:07.724Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80536524dc0651bebb01876573e5c85b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:10:07.682Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25e3cbcd4d63b74f9cc85fc59ecdbf3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:15:06.8Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e0967b1baef30a553a722fbbda31d8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:20:06.971Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8a49379444a8d4e619468c3e5c1ad78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:25:07.46Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85fa8dcb1bdfe8f5f88cd5a41256dca3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:30:07.546Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b89f8d2c76923e971a70b960d322433b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:35:06.79Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd94f4b3871774a4c08f633dce0361e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:40:07.264Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91cd6aed72ec61d50303f68cba3bd627", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:45:07.905Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77bbe2194052a96b74f10778d81074c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:50:06.692Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37e3f1eda85e954cfca8d0e0fa5d3d97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T14:55:06.828Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5613ca6db618e241a29ec12aa8ee328", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:00:07.171Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d57a6fa6982a98068e752cd8b38c470", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:05:07.499Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ff5514fdd8409907c539cffebc6dc88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:10:07.419Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8237db0b88265f80e8128b8729857a04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:15:06.904Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8eae616fa03ff5ce55c8a5cdce4da35c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:15:06.904Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7370bd18847795e8a6414e2495bc0f20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:20:07.26Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a52cb5111088753f14d26d5c47eca378", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:25:06.955Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "668cc3c68e183e8383de48d689dcc896", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:30:07.213Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0dac8e8c763b81688e59ef22599e6e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:35:07.692Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d7be1a0307432abef614197705a6b5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:40:06.853Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21900d409b80d4c6b284bde4b02bf346", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:45:07.561Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ffcf81c83cf058e362c1ecead45a633", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:50:07.607Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fb8a2159c78c1ad1fb68b7fb954df14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T15:55:07.684Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b74a738bacef28e2ac586bc2930d416", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:00:07.537Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a8d986b9d101ce110559939c95269ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:05:08.177Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ac64e6299653ee2392ef36b43479327", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:10:07.679Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1f6e4d0b474bfdd4d4dc8a1f3bf427a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:15:07.745Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b147f767f24cfb59e10a77541fa3499a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:20:07.331Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91916589da1c0d072e39a88a3f862f95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:25:07.665Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4446cdb70bf470903cdcc80b54799421", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:30:07.107Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72338225f3576e092c78bd24c5e23242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:35:07.129Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34e6334a3a2993d5fa3fead5db2a1481", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:40:07.544Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f477444721b703d6a3a8c1587c2b6241", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:45:08.276Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7d7c4d5b4df7f4c3f64ec6bbb2d155c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:50:06.872Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc5f90673efd96a4631e66498e14f2cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T16:55:07.195Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1641cb08f0c9a9c0159adf4ead41a289", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:00:06.991Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e74025679460787953c275c1fe161f37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:05:07.713Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88c4a7a4ee0e2a37701979ba47ec5b6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:10:07.214Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89b05836952ecb16d3665644d3f70574", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:15:08.059Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6732e19a765aef06718b6bed790c3cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:15:08.059Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0227def2d839afa50d79238a2d48e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:20:08.059Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66c3b517a6cd0876d1f0c72235182648", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:25:07.708Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ec88ee65e9f0267225ef391ed60a9fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:30:06.945Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6595cfc238f75fa33818d37eb45ff965", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:35:07.264Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "636fae0674c8d11c73ebc9129ae10e20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:40:07.943Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8e2f8db2899cf45259234784f458563", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:45:07.271Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "845f0fa4f653eb162f1c5801ebcd1a35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:50:07.279Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b6410da9e82463e802a09858f727965", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T17:55:07.871Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23990bbdcb6e8d76f6230d27b8d96a78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:00:07.124Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e753889d680afa8ccb3e223f4361366", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:05:07.337Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "792e50a57d5c2ee540313a0c1797743a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:10:07.352Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7752350b2c837e4d468d2326453814df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:15:07.841Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f703bfd6fdf52aa740bcc42846285b75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:20:07.215Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bf0429bf2651295429f7dbf4ab617d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:25:07.884Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8ee1cb764b5f852b0f1095e3759ce0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:30:07.581Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cf3560d8ae5d17d3acadb0670ed1857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:35:08.18Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c06f2888c7d5d14fae3a4865f2b4f05f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:40:07.451Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "960b1b16acb18af391d08dab83ffb8dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:45:11.557Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b800f809b53bdb92b1b83e4a2ff4ad2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:50:11.557Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56af5966ddb44643dd91b6ec787f2499", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T18:55:11.557Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "936b0c901ad7c75e30024c15061340ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:00:09.035Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bb5210fab04f72ae9e86232a3cdcda8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:05:09.191Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "992c6c3fac164f44863b6cafd51c91f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:10:07.425Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c25936bf2d2ca9a5c9beb60caf74b83d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:15:07.478Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62e2ea5faa84d59f50f587c95aaee2a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:15:07.478Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fbbdead4d62d551e5f10d8992cb29a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:20:07.394Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "671af9c8eebb5c02d95a724aa9b24e5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:25:07.299Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d01cf466136441d4cfa3b139836a4ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:30:07.962Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b6b4580f846ceca591f0fb8680298a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:35:07.788Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "069edc11e9d7ba7fd0b382f033566473", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:40:07.197Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb2df3e27aa95f9bd597dcd8ad043c3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:45:07.302Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "854cbc8ac78666d462070a85378c37ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:50:08.903Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d39217ebe50aa20ef7054c4830885083", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T19:55:07.504Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55d8063255e038626270b0773190af7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:00:07.699Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e47f511c60843998769206ed7d96ce4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:05:07.933Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "215f54fc09c9f7a73353e2c35fa8fc19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:10:08.097Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31e7288da5905420b5135fcf9275a51c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:15:08.116Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44983f221a79b307011dc09617a700d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:20:08.151Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e17e2ae3dcb2c2b79e672d931b075399", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:25:07.862Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1b8fe0a296bea81dd30d0c1c95e7d43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:30:08.234Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8671c4530e2911132b7b00a4e9834781", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:35:08.234Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4026f5f0c35ea1d0f11a1528a3e12cd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:40:08.337Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a0b71b584e4d0939f324a934a19f9d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:45:07.39Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fef91e0ae44483ce012fb326ef49e796", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:50:07.571Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49d3ca29fcc29d104607179e1a0a8214", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T20:55:07.628Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d331f4b8ae6f7e1a8b4f277fc7f8269f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:00:08.258Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f25f4955c80377466a0c874199a318e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:05:08.98Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bb9bd2d6837b41d414fc61dfeba633f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:05:08.98Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d029b9f5d84ace7e84de9b15958e8ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:10:08.417Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65023d3f9f855012f32dcfcf774b45e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:15:07.371Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa712790bf2d20203e11badcbc11b087", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:20:07.409Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0519aab12be106850929eac359aa749", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:25:07.426Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7328ea7e5b63c98d77d8a338d1c6f04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:30:07.535Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8efc20f5183f4c59e444f5bb9111f201", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:35:07.789Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64aefd3ea1ba85f6cc1024f481afd61a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:40:07.407Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3aa869f59da8d95dc5e3c6a8bb830d2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:45:07.525Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e565d7049d3c92ed8f69cc7778e06910", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:50:08.045Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "778e2ed0dbf4707ac90d72e22ca0b1af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T21:55:07.726Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8230dda09fc642a7011b6e801737a475", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:00:08.156Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a8ad9c5e8c236e0480901d50eaaa70a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:05:08.657Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a129661c6d93aa1ab563e7fb3412287", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:10:08.72Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3c08fe5252f232d7e256011f154b0b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:15:08.188Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7b8629f0e2d9086ad381a210263d32c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:20:07.767Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "353bcdfb4e849d929890ce13b332ecbd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:25:07.823Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00c3a049abd8dfd030d6cbf271caee46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:30:08.347Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33154fbee16e2af6ef097fe221e0010c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:35:08.273Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "220fc39f54225e3685120c633d5c8921", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:40:07.943Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3075183534a7ce1480e5513c2b549fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:45:07.809Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec51d85f0023b2e082857b80db60fae4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:50:08.496Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b72b288d11b6edbe56be0945b9897f6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T22:55:07.879Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "baaa42c1d3316163225441345c256aa6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:00:16.459Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e41281d48f2be51ba77248ce847c772", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:05:16.459Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2b226fdeefedb1b41de4f7b2223ccca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:05:16.459Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "802ae12b48d11ff229055eb065f761e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:10:16.459Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a95dbea669cee0dd53a121d95ddc623b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:15:16.459Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10468122140c230188149c46fb1a3a6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:20:16.459Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d79805c40a26b05dd8fbddfd727ad85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:25:16.459Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c74f60ae49325fa74ffd75d8405b4413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:30:16.459Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ff725334b6df9cc41086600c7781538", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:35:16.459Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca1c15dddb21fbd1394d6389df7a846b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:40:16.459Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ae6fa5eded4873500f15337396aa2e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:45:08.425Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9494d6bf84b76a1cb5ca036ea93c00ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:50:08.604Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ae610672dd1bb0c6b979f611bbeea21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-19T23:55:08.425Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56aef7b3e3193db1c6e2a5492bb47a6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:00:08.456Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c339dfb9751c759c4781628ed5a2eb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:05:08.626Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28c9173d370d98f62535b212d4ca1c1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:10:08.103Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0459724b125553383732acc923153f39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:15:08.667Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69d80599fe0cf1ebea51e401be99c73a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:20:07.791Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3d3060b19c18aa5f6cc7642c7d379a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:25:08.438Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a3cba917b11ba33dbd2fe7abf52c545", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:30:08.559Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f17a0ec981525dcea0e8bdd3b1348ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:35:07.844Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12a91cfc144b8a9ba9593f31a6d29add", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:40:07.941Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c390741f25d8bdc0532a96775d74da8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:45:07.941Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "368adec8ea5a416fdf770998c42435c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:50:08.517Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6bda381e88eadb8e7ae5b9d1b9a97fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:55:08.597Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30a74fd04d693646351745599c0db6e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T00:55:08.597Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bb69572a6c1f7c2a3a7f65558dec62d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:00:08.262Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a21d244f044f4b8e5c93b5f7e29793b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:05:08.27Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efb36f4c99e0b23c177d53dc24e06bae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:10:07.935Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f81e2a84c4b59bf6306c7d5a67b3ab76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:15:08.354Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b7ec9440b0aab9e937c18e39dbd0a7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:20:09.497Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2ce5fba28340258c167c6df0d529981", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:25:09.675Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a26ed6a056f770155f7b0fe93822e727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:30:08.705Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a573e5c1f073c276511d7d171a45c5ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:35:08.279Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f297cfefd75609241ee8ebb5e936cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:40:14.084Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a66c613b223b9e1da41e44250e671c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:45:08.345Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "548a0c32e80c5a886e29de683c5f7412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:50:08.016Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "656d7bf24cf4fc40b323f5cf274c98ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T01:55:08.738Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a9cd58605bdbab14598600cb7db3e51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:00:08.838Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff1072e5b49ff318e1d102041c54a342", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:05:08.525Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b31e0ece304eeb151b0fe9894be42ee8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:10:08.861Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89a64c7b0507df0250f557426d2118a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:15:08.112Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e59b82c79fb0f1e6dc2acdb0d4cfaf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:20:08.117Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcc55284161ee1359567dfa881094c7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:25:08.418Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce3a4bcffe26c9e616acda472d743ff2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:30:08.919Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea792b055ed384ec5476837dfaa21a58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:35:08.95Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59bf311fa69acf202844f828b25fa237", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:40:10.644Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5564345a60032393b2bae57e6d13516", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:45:08.215Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a539c1c9ef25039f25cf41aaab3124c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:50:08.951Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "965b78be16e47e10dfadbae802221507", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T02:55:08.557Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41ce86269c20849c404be5282dffdfca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:00:09.166Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7772c209b2e676f31b2dd3ef7aac6792", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:05:08.799Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "446ac1fca6e434c3b7f45635fe01f6c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:10:08.467Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d93138928bc5bf409b4ed9c4289ab5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:15:08.444Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34dbc114a42e98e32c06bbae9c0c8c12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:20:08.184Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cf16f49d8623d2100680b5bd57dd915", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:25:09.081Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0bacd33fe784ef06e3c8b86f169cd85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:30:08.419Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13e493c76d454e0291ee5acb26243f4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:35:09.039Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad1eeae6e96b7d17095c90f1adc91bf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:40:08.886Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fa93218f326e3165a9001e0bd386a68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:45:11.211Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09cf1c843bfdbc21dd7d00177153d3ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:50:08.74Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bbf2dda4de0b66fc22b75a86ad4f1a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T03:55:09.104Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5b86f6db4a2ee384b3029488ebd78fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:00:08.718Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc557c453be70306feffb513147ccbcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:05:08.974Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd12c50d40d7c04f5104a1fa65e80939", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:10:08.992Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7010ce4e2f629ef0a3b7f7a33760abed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:15:08.257Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b438fa22dcc63ca5d36dff9cd4688fb2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:20:08.795Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "791cdc2812a245cd0dabb0b4d7dc0c9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:25:08.837Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4678929a48fe34659951094fb808a0bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:30:08.712Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1339d15d3b1cfd03439ad0bfe7cd1dfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:35:08.74Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9f1dc2e7d6431da60f61876b528e506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:40:08.69Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d909b37dc5d2aaec08263ea1e43a9223", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:45:08.233Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ef4e7039470349fd24617d2807ca343", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:50:09.162Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e84af0e479144ff030682144530d3e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:50:09.162Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba9d13a8699254ae5f5e87d06c9782f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T04:55:09.072Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dac693fc67ad0bfe192036aedec8f5df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:00:09.121Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35649d538da53ad39acc904c2ec71034", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:05:09.117Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68cb583fe1251e7df77728c6342be371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:10:08.48Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57d0df78d9ca1d76e941ae4a14358cd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:15:08.916Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9123a4d9560fed5b92ac77c64f7d91c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:20:08.343Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fd31b3e7e9661c6fd69e3452f197489", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:25:09.322Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba3db86764433511037b10881372beb2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:30:08.477Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b74ffd6809099c20936f26f234097d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:35:09.233Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17ae6d529b22b6fa45a940458a2ef217", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:40:08.909Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff68e47d5f14fd6fa311600019855c64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:45:08.928Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d6a226908588fbd0d01655cb8cd3c4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:50:10.371Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f88827a0d87da799b64fe05525230d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T05:55:08.874Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73432274de4bc77ccd8cbcd85f40d4de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:00:08.848Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75e0be0c65d928d3fb44e1c7d41eed14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:05:09.229Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28b26be69fc3195b9b1fabb6cbc7e90a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:10:09.089Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa962804a162963522d01b6647dc37e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:15:09.033Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e0e22877d6422467fdf3fbf9a0a00b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:20:09.249Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6785fed45d962d90d8dbe0e80de97210", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:25:08.407Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eaaf4691f34d96c020719b10303d54ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:30:08.905Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa2ffdd855e18ca0ea617d6a4693c6f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:35:09.025Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bb2dfc723be12f0ec544b8b32e47479", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:40:09.387Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4741d28c8ebdd32b362783fd51627f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:45:08.501Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a0e96439219e5cb434f243e4a8b28a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:50:08.794Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8511d79f58c61dd4c98946282539cb2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T06:55:09.404Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "823577e376105349e5cc805d4def213d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:00:09.157Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32a7bbcd6cf08a2aed026de6f5bb69d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:05:09.214Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1634e3367ca2f032488e2210365c8438", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:10:08.486Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3177e09a406d51aaf6c503b23df01e31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:15:09.152Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74947c1d53ab35ad1fee16ca16b65262", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:20:08.817Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "539c2da4a37fa2d34c49d40728d58a9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:25:09.478Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c32535f2a3809eefceab3a47fdf5c818", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:30:09.334Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa30e6666cfc682eb813cf0b11388b28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:35:09.472Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f455c7fb27e646f1bf2e670bdae61b1a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:40:08.766Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a673016da9193d0123152974dbc5d625", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:45:09.024Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "690783569a042423aabc6609d3e57c96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:50:09.558Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff5d1f68899ec46409cb1d06e0bed0b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T07:55:10.235Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24c0cdbaaeace32c7ac82f1e9bcc75f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:00:08.667Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0dc35d37ed0ca0b81c59ea9e85de8b17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:05:09.492Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff55542eb39d3791770ef1a09cf842da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:10:09.289Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83d5dda8b6fb11ed8d261191b3ec4cd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:15:09.269Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d32ab3977f32958cfb62ae60499f5ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:20:08.649Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09c0a5bcdcd62c11cff7ab92199539f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:25:09.556Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5565814125403ad2d6a55a5d89d0ec8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:30:09.263Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "362694a67c54913cd35050e94d86b8f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:35:08.873Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8ec21046dccbc158d248486f03be831", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:35:08.873Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7037f930706b7a123c81e6b1eb2581e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:40:09.09Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8be09a788df2b7290ab849aabbe95593", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:45:08.797Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf6c7e2210ace1c137bbc57708695e17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:50:08.795Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "565124ccda1abf927b02bf2590efc207", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T08:55:09.478Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02f49d65291c4f52d8a55cecd145a4a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:00:09.009Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60c32c33db7143f8ac69ec2573d72acc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:05:09.148Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b182ba57ac575861d9b9637ebefc3eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:10:08.784Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4399411bdc8bbbc0a045238df669f0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:15:09.171Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0baf8c3cbfd881b6923600839ae87042", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:20:09.68Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28b8bad9c10b6e03fb9d5173b608cb18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:25:08.857Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19d83777b212d8811925949709f40899", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:30:09.073Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "306abc538d2626767f7cb1144d21e469", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:35:09.409Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a294d1711c43d34e635cda6ff49e9a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:40:09.204Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3b463513d1fff4f515ffba9184566c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:45:09.122Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "389cfe32259c6cce271fcb385312cb42", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:50:09.641Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0add704e5e38f352d7fe44eb080991c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T09:55:10.018Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ea5b6c7abe1c850c74b0a0c41e161a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:00:09.354Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fc8228e088fd3f97f70525f2d66a849", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:05:09.802Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7698d6144dc4d143d6eff15821b29cca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:10:09.746Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41f0e3eb67d6df4afd3f9628e270ad7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:15:08.978Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd96fe7ba623875684d297129ef9f566", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:20:08.876Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "478a424eb853b54b51086955d06f8651", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:25:08.952Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47c7510dc9c242feca2237f7d99b562f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:30:09.371Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dff62f8997735be6f466865a04bc70ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:35:09.354Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abdfe442d94578665c613b75d6239c5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:40:09.59Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16cfa2f58ccfddd1bc3f57fc270dedb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:45:09.201Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3231e849b2ed57b8a3f2bf9cd80f1dcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:50:09.821Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d57ce4879acab7a67807289a43699cdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T10:55:09.706Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c41609d01a0f3a21134169b2efd0587f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:00:09.693Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e75eba6489c4fdfe0243721501ddcd99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:05:08.986Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc8b6cbc12202d1684ebc217a1bca2d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:10:08.986Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d19e26207c8eec80e5a8f09946c6c373", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:15:09.215Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db8a605dd9b8e946cee90b7f0f2b4dda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:20:09.364Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a18013dfdf11efac0ca12f457ff40acb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:25:09.05Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "533c66f28ebb8a109fe3792e789a3dbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:30:09.364Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b41adfe519004d6f2699dde52a1391c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:35:09.931Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c86b9bf2a7e8f03e1ff8eaead5893cdf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:40:09.032Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab503dcc388114df5eadfa69d9417996", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:45:09.986Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa9feaad43794a9a8528c81c00dad412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:50:09.538Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1da456f9759af1b0130d459ca50df8ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T11:55:09.349Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24a7361e8b754b0e507cee26bbd73206", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:00:10.887Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "388f1f7c10e369fac482b67aa2abd127", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:05:09.533Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50b3576dc171841a807b8aaba39a443a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:10:09.588Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aaff2acf79dc04bfcd2480cafbc53f55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:15:09.436Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98d73c58a5596aa68d6b704235285348", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:20:09.649Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f69a6ad009061c93dc667b4d2b5e74e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:25:09.721Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e0b69f8568f6bef9c6399310b55c760", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:30:10.042Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59638d9fc9c800f69d74bdb49480e168", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:35:09.095Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "715e300e4cc27853c916542e57698f6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:35:09.095Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "056dcc2bf699975bfc6c665bc24e5e4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:40:09.397Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6163cc4dfff386ccc36a13e340e44972", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:45:09.822Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d465370fe038e52d2cd75d26bcc8a29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:50:09.957Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d7ff1efc767fab5b21034d411576202", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T12:55:09.32Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90d37724beb1cc1fb152d2c2c38d6e7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:00:09.962Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bf91d3bb46dbe102f7a62655790362f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:05:09.566Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b7e1f65ed2df99452683d7fb542ce4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:10:10.133Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87a3462468eee7632e9af150f2f4ca26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:15:09.998Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "248bdf2ce62c4dd5e7a8b57e88a48f97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:20:09.437Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "289133a8c814965ebf752433b9eb8059", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:25:09.942Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38e7788c2baa38558dd0f3aeddd4e665", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:30:09.43Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f26cc30f36b0dfd1a5ef7f06df5007d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:35:09.701Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8f7ef8e5a49987f01c5e9a1b5baed09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:40:10.024Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "301ddf2a16b9578120ab65bd7645a145", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:45:09.752Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cb1c7d529b8580647a481728b6b3aa1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:50:09.328Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62345d54fa13cf92a21a634c772497df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T13:55:09.318Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfcf8ee4ce9ba942b40c380db69ed5de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:00:09.434Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5935fa008b686f40c25dabd4eed73f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:05:11.323Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6595149472f661f0b64d1d62a86a1452", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:10:09.319Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e37f9be1feaa02d143f2ff3cf77a1389", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:15:09.724Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9929a1e3e7b68923e79a728bc80f951a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:20:09.667Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6995c417322c5f93142c989c1ef953d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:25:09.353Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23697eca44858bfc2b297875f4ec462c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:30:09.728Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8a41277ca60c057046e80caee5141dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:35:09.381Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fa6c68eef7dd920e141221830ac9894", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:40:10.246Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce71412ab432056d8b60aef07567bc71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:40:10.246Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a21b4347c11d0be5c3d10dc0b5a437c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:45:09.695Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67d7c477a53b12706178020a9c546e60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:50:10.324Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62d1ae8dba3cb62f688e2a25fb16793e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T14:55:10.142Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84b9d1d957c2e920381f7e9c825321a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:00:10.142Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc36d18d6596cd4b2aba5b7acf9c518b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:05:09.867Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "984439bbb8595fdf1e069cf791189ba7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:10:09.924Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af70f129bd7d41f17d5316c9c80e2bc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:15:09.44Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17a3fe5c95865acd33894604d9a0831d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:20:09.468Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2064914cdb3330c735774c8ea574ad0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:25:09.855Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee879a10e8c8b1ce6e80d265e3ad1b9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:30:09.88Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d74d0b2f9bc8b5d9467a995898f5087", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:35:10.346Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2622874ad628a33f876cec2b0fbf8b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:40:10.137Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fcfa49b23fedcbdb143a5c73ef120194", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:45:10.398Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e7f7ebc36260816c1eab9e129e46711", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:50:09.518Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f93d714e4efce1d0f88caa4735daab86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T15:55:10.171Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c436d1526977eb8003ec05272af01cf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:00:09.904Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2402b8e19e6756184b3e29a112f63fed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:05:11.238Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7aac6a106bec8f0102d64c36c3cf9d22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:10:10.265Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fa6721a7a0528a2b808779ca48b646a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:15:09.8Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1ec5add3200a72c5d6d973013043df5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:20:09.55Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61ab67cf3333423d2b9ecae61c757a99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:25:10.445Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a18691aa379e4733b2a4e84dac63b12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:30:10.359Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ae778a0901fd691d0444c178950fb7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:35:09.748Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac7c92fcec6d2a73c3d041ccb0e5d4ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:40:09.635Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b35cdaa8d328e1c2346c31dce835e33f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:45:10.539Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe12894200ffab3bf6e024f01a9d7f69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:50:09.946Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e052a0fb90fa2412edff33a23d02c91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T16:55:09.713Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f446cf50d0a41b1ecb78e220eea2e7fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:00:10.398Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4fb53dc86886ba4f4325feedca9b9b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:05:10.276Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "186e3684dd53100583aec39b59375928", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:10:10.218Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50fad41e63961c9de5dffb476adfcc7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:15:10.284Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17a3db3a40107d23e0988c197c5d16fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:20:09.722Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b78eb68b74a9f94803d9c0783ffa15b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:25:10.611Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23372d1e3aa7542b11319d0d3e3e268a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:30:10.301Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4d85d7422fcdaa4aac1949d8b3d843a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:35:09.922Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b9a5105ee67756549a9d7ad1641847d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:40:10.488Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcbeb7dcdd6b088991ff44435f37744d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:45:10.219Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "053bb8d15d113309ded30ef581d047bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:50:10.422Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4b3c765616f28b40ffcbe386960e4c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T17:55:10.458Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac033a74566ddda2dd7cfcdd5bd50b6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:00:09.998Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4413887e642fc458a4eb3d131860beb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:05:10.371Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fee08369903901704a457e16ba79c573", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:10:11.182Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95c3c5e0aa55396058790d2ba60fabe0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:15:10.248Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fea9293b49aa1e584128d77f0e0652a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:20:09.866Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cba2767c33ff088b8ecc74132124e2cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:25:10.209Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e95fb8d91731e6f76deae203356399e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:30:10.633Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "436657a3df16d242ffefe86a8e1a5199", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:35:10.312Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1247f62ae7044921c6b94ba94d72da3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:40:10.756Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b01b47ddc93f2d1c3ca335009d6dd381", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:40:10.756Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eacbda89eb5d6088dc76da9d5a2413ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:45:10.306Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2767b3d873e76a469226b8fa0dfdf6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:50:10.735Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f0e112f3b48a21dedaed7dff3d0c689", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T18:55:09.86Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57a1570c97d1dac85a9f8598b69d8260", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:00:10.549Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3855d95ec119e5e3e248da6b206c0ccd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:05:10.788Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eec175671174cf12d481d675715e163f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:10:10.587Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0a51d9d4d0d2a4bbf0315d88d52690c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:15:10.534Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07542f243700fbec0fc9fd54f4249c52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:20:10.728Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1d294cd4906237dc8430de957caea28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:25:10.836Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a06e7535f0d7e34e9c6f62f3dddd1fb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:30:09.906Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5364734442420c48d37006900dca5e11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:35:10.376Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84cb99a1b487edf6d05891a7df13288a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:40:10.67Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e8ef5c75dc128e2f99e14b84043e69f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:45:10.005Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b396173f031c3e6c7f753679effd14d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:50:10.014Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfce3ecf240488ee7922bf0f0a10b1be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T19:55:10.251Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db3e4263dd0275e253ac828cae238ac0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:00:10.854Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab3b7393000c962da35039edfef2cb5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:05:10.371Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e1d669a59b748e7177ec922fbb4d0df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:10:10.64Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d93937268611aaf456442e6d56281e90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:15:11.504Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e5eb2931a23a2cfff78ed4179ff768f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:20:10.359Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6927ca916c236b6b2fd839985af2d74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:25:10.777Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1e02057f7934be1cbec52ba6528a42d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:30:10.336Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fd805a20884d98e9ee6b22a0927baef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:35:10.192Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d58a4d27883b3fe04496eb3291c2e70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:35:10.192Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e753ef7ce9f64d2cc3dead2d5275127", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:40:10.035Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "240af4c606e140734cbf9865bbe25e4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:45:10.946Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c708129b1d0e03639cbe384f34beb282", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:50:10.575Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb884b834ae75b498c151b678ac12371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T20:55:10.565Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6074ae227ccf23e9dc5867aa7886034f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:00:10.392Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2767c033dd04d9b0495ecea4977b19db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:05:10.172Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "997b0b9559e48a35d669cb6b0e874866", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:10:11.04Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf866e8afb97b3e092cf76d44b8d83f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:15:10.108Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8097a84bea62de59def2db0464cad7fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:20:10.826Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "027c37d799b5e2de23e8f30abd502f2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:25:10.134Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fb44cb2c36c973b375dd01a8f6f91cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:30:10.505Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46827389ffd469adab53177a6174752d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:35:10.482Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04625be6108a5ef74c00b3666dd51019", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:40:10.178Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "711aa4b1ea75d9773480a3eb445ccc86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:45:10.286Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54a00f7a6c0741d6bbfdd6e893900d5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:50:10.735Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54d8201d8e224ff95cc344aba7c7bd24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T21:55:10.621Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40b871553b6360de95d5f4633e73a007", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:00:10.93Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "718cb8682a5be145a5d8b6bb627cfdf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:05:10.423Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa8f98b072102fdf5bd96b0ee682d2fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:10:10.652Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e739e287dda31821616a2ef069250b74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:15:11.203Z", + "quantity": 201.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "481cf33ebb83ddb35ee62e05ae938d1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:20:11.957Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bff7467f10a221026c34eed1e051aab7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:20:11.957Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "525796df6d993aed3119f342f3b955be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:25:11.127Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3458658c9a848ccbb6c500189fd6a670", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:30:10.978Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8a9316c394dc779a22d9b8d9a4cf71d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:35:10.909Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f644e93b7b49a137cdca5a0264e3cb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:40:10.381Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3adffc9c41fd01b885e64098906659ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:45:10.408Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "116739af59eb74e6be9e3d84862193d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:50:10.339Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a75465bcea99dfc56dbb15348632527", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T22:55:11.148Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6239c60cf00c13bd3cc88af7b73f9b8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:00:10.474Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5e00169b597a6d8a2303b299d60ac81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:05:10.834Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "765321696ac06702c4e68b125701397e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:10:11.172Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11599f972326325cc7002a6800107ee0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:15:11.067Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "663545e884d6e9566c5e402bd2233ae4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:20:11.137Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41ec18e4a61f7ccee4c83bd2fcd8293c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:25:10.926Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c28b9201229d11316b38b0a4d458c69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:30:11.154Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32ce573f3bff58c844927c23e2def36b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:35:11.126Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ac8a0f70b29056800bc75f68728309e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:40:10.51Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f6e9a4a5145e7c2003d1ac735c5531a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:45:10.684Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "648ea58316c871656e823f14c3d1cfd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:50:12.286Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7774ce9aa793fd8b9008d16805f92cda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:50:12.286Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91a9e67d1de7194da5d59ea2d37f5055", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-20T23:55:16.788Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ba1e31841cb55134e9f9608f87cd09b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:00:16.788Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ccd258966bf79c7f7477113a6f1ec0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:05:16.788Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c9bc1b9b2345d2011ab8ef286f80c7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:10:12.598Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "594bca4d3ed565989c2df0b47fea8ea6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:15:11.96Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4088287993acf9b74068493f5b59cf90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:20:16.788Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd2ce0759e675e24e403cb8c9f3acb79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:25:16.788Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e786e123e09bb2f0d840046772a4434a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:30:16.788Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d4d324ee8747015e49d26061a6f9a9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:35:16.788Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c359a53a5c46b03ee707479c72b82441", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:40:16.788Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d62dd8dfa94460f7a7e2af9f2f5c5cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:45:12.567Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c86570cd4d318822deadbce19eaa5f39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:50:11.586Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b28fb0c513fa1a77e51f94936a2daee3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T00:55:11.282Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e30f5d6a1b7cc7a8f92b3d87aa1bf78c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:00:10.989Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9534bf6427c082fcbfdebc03aca1233", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:05:11.44Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2b7edacc6a457f38f5d4a21a3b697c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:10:11.475Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1293eeafc620bd78076911a338f0598a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:15:11.29Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f58cc82cdfe8005f6619655af75a93ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:20:10.773Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "659e833bffede403fd52faa966c059f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:25:11.539Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12aa42cf1f9cd8cb961f4b7cebcd32f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:30:11.287Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "93fad9289dfe473fffe8ce85756e8494", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:35:11.053Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fc9375e316ef1d233f593a412d5ebdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:40:10.925Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "977eb34ba925e3e12fc7bfdf50854cb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:45:10.624Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47814910f424855215f9941c173c031b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:50:11.588Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e75b23f3f1eed506753ccc4d3607f46a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T01:55:11.531Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0cd0b4449a22d408fee66538ed151835", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:00:12.018Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cb144c638eeef6d34f3e73142f8e458", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:05:11.061Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c9dfe478c73b6b490f8b50e48002aa2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:10:11.756Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c48b2d87de3db1daadb12968ea27b777", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:15:11.756Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02c60ef1ea5a6e26db5ee8acd4e4656d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:20:10.849Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eca9e5e017a6d178004293a48418555e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:25:10.792Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ccf219b2a9108bd8810079994f5879b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:30:11.549Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00d0dca757e4a4ea65e9a945019ccaf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:35:11.002Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4034b6cf89638d3ddc4b6a5249ff4332", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:40:11.19Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1616ab3f50926132e62510667f73b80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:45:14.921Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b6b28c0f9d680ce006b0ed91c832d29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:50:11.846Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45796ada382f5452bc49b3466484e92c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T02:55:11.343Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97921d7164e34b497b214006f06d84c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:00:10.778Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a3444ab118d8aa6f542f179881c38b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:05:10.756Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "902ea185fd802ef91204c03f9985c087", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:10:11.444Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0f79d23cc81fefd77756ee0202c88d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:15:10.82Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d5b47be449279591bf4ffd3f9f1f3da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:20:10.927Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0aabc2448d0a7ceb9b633b11332270b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:25:11.264Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbccafa73e8f693406ae95087f5ba4b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:30:10.992Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9eb8fd59cc2be7621d5491ecd246f6b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:35:11.653Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c26bd42dd87d755e25a13069954ad24f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:40:11.266Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59f2a7070b8e08dd614867a70cbc3ba2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:45:11.804Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf406f62e1c5998dc37ab7711e73e8ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:50:11.481Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6413244112c725eb5cbd952319aaa312", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T03:55:11.027Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc7d3245cd91e96ef468b32034163cc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:00:11.765Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b24a8a4411e81fefd9c35d7f9e295da1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:00:11.765Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "777abcfd18bf4b6a31a8a0ca6952387a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:05:11.028Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2f8201485fa3c1c6b7e4895a85e7825", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:10:11.496Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ae025aa604d5978a6aa0ad1ec2221e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:15:11.853Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a620230886aae3fc3bb54153ca145e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:20:11.107Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a34f00219c2f258e6dadf44884169303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:25:10.965Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d1b15d7848c72d72fb886a9770519ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:30:11.481Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22047eea7449744d3504b3209ae3fbad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:35:11.48Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5236120a678fa46bc2f50a85151b84f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:40:11.836Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ed0975b295212aafff04eeec575ba81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:45:12.595Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d51bcf74deaf2d9771090aa63dfbfee4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:50:11.862Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55d72d055b84ad49344771ce08926cfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T04:55:11.329Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97a33aa6e59878ce3193a4310fd7dfeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:00:11.352Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2fe4725bd35e70c76c20a99945a8527", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:05:11.14Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cab2fcbe1feca1896357d52334f367fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:10:11.073Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9e0f0b056cbf81a463dfa55b22f8ae5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:15:11.758Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a29876fbf1880f03ac35fa1ef4e6ca9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:20:11.273Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e0492749541dbd0fbd37ad46eb3da10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:25:11.317Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c09142e543486b037457998e4aea05a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:30:11.662Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b487607766cd253ef46f4274073549e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:35:11.463Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be165236a46cb0158875b196db6ea180", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:40:11.776Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28cc226af420d9e052237761a0c9c7ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:45:11.075Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9c00660b46627751ef76b1f1f0da2b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:45:11.075Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ba13721c3640aa83cfecf14d4ac1846", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:50:11.733Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aac86e2b67b593fe07c4d81c116ea8a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T05:55:11.672Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34909d2b0496dbca48d02c71be863930", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:00:11.818Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5df7e7b2829cee282d0b4672d0a8208", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:05:11.916Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "806ba553d78e61a44e98f20d491d2fa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:10:11.866Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0d5df1f78851640b6069178873f2f10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:15:11.599Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ca135e324febc3888f2ca47104e3c62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:20:11.474Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4075553c95364035a5d7ff60e0c5cd39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:25:11.581Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31aa0d85b378ce0a3e1f7fce70348c51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:30:11.796Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5128b395263fb090f9d797d152279ab3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:35:12.038Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be2450ef6174eb603c3e52c80d13c249", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:40:11.154Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb4c7f52726ad4c3a0acc57fd004ce6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:45:11.385Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16c22d6550be6a0e6f7d54f314efa290", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:50:13.107Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbb97960f2fac3653c13810dbc1fb1ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T06:55:11.443Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74a4c91c5e22bb606552afd1a5d7aadc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:00:11.679Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ebc33742bfbdb919130c76689b5e1bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:05:11.226Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e4e7ab94daa63e06abda17a48bcd9ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:10:12.09Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "365523769cb865cd5d2bb4c9dd4bd337", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:15:12.055Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b4931101645e30c7d915df80dee3043", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:20:11.861Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f62b04088109b63e9d87c0bb058ddacb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:25:11.24Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30cf843f9b043e3eaecb861f58b350d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:30:11.607Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "411c7f7dcbb93ef15d1817d68a662fb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:35:11.613Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa0f520838666f90812390c07a5188a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:40:12.071Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64759a1c975792fdab4bec5c42053ca7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:45:11.489Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e85b2f308642752ef651c3b714419c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:50:11.587Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b66dd0ee6f2b18886591f613236479d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:55:11.416Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33c66255529ab657664ce647c7c88dc3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T07:55:11.416Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0ecff9e875e06604ab1b4ea283df6f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:00:11.418Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df4299c9c19245a5099e5a7016f330ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:05:11.597Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e628ce627fdfd33f17e4eb0f183ceae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:10:11.463Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d99033bcce1132ac600976d08f2d0a48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:15:12.181Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3bbf11060f63acda2995821e722d97f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:20:11.346Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b517c9d022c1887b81a5b1542b2569f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:25:12.002Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eff8c2bff6a26f5e71157a760bd2019d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:30:11.805Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "204a2e24b4db8b94d492f62371fc2e5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:35:12.187Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b15af529487b4ec90143629a0edeedd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:40:11.584Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "460d762535cc1f48a583f41125cd7069", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:45:12.29Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82520cf55fb2da2aba953face9b1db86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:50:13.135Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "448800455fe14ca9ac10c43c26fb0e90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T08:55:12.361Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "915d376aeb17ad1075cfaea11d068552", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:00:12.286Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d74f299ceeb35405a0c2815d5364613", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:05:12.083Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e42d746a49347b738feafe2c818e732", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:10:12.092Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5936eb7b1ee14f17fce15851a4666eff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:15:11.479Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ebbc4f88a265cd7bed36f0726681ee8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:20:11.812Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00d512cf44ed134fbd7a95045af456c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:25:11.634Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2b25814089f1d2b21ff9c5a1bc191f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:30:12.159Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "847c1e8c0d665a0c36df03e83983cfd3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:35:11.658Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4720820307423daa83a149712bad183e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:40:12.028Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f0bbeb24bfff31a65268ccbd9124a10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:45:12.149Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "826ca365528d17212da6f8ff633e1d9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:50:12.242Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14ee3454eea04aa3c66226f195a08444", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:50:12.242Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34dcee5e94b05bacabc5007aec102c48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T09:55:12.381Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5d3bfa87b6387cd337850ded5b867f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:00:12.124Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3477e4b59da7718b2689833822e43631", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:05:11.854Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5dc3b98fe43d3e49b5eef8f1dc520b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:10:12.452Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13717913fee944ea633e2e5ec550fdfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:15:11.606Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bacb05a01dab9bfc95cd1cf2249ef43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:20:12.194Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b7d3e15402ab1da8b82556e48f75670", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:25:12.282Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d936f2a691dc8c6d0d30bce9c51189f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:30:11.561Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf0f388c875fedb6fba78ceff7e44a38", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:35:12.491Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66d09b6f9d595b5d5a85439054e37bfd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:40:12.518Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "417929a29390824560e7a83c03becab3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:45:12.213Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09d79fc3d36558e4a7d017d4dd75e3cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:50:12.021Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0ddd98bbd1ade39de976a49c1bf69e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T10:55:12.812Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0fb917c9801390b2383d448c16021cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:00:12.278Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2da95810cd72ebaead24822d6af370f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:05:12.382Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97af38ac35cbacabd58c0344edb2f910", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:10:12.128Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dab4ec0de23dacedc395143730616f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:15:11.724Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0fa559311f996216bb1f587f0b9d7b94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:20:11.81Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5eb97417c233f5b80801425f6c15a37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:25:12.039Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4d1aff707d671da823addf5627a4d90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:30:12.454Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5b6b682ae8e44b6393ad4359c9822ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:35:12.366Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25a891c56a38ac40b004a2a743dc5caf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:40:11.683Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6fb504b42585ce1fb20af47c8d69917", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:45:12.363Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3d4856dc7d332bbf49c543391f581b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:45:12.363Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac7e05c2e460c4f32c7f5d8c0ac7fd9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:50:12.603Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e653fc8eaff174294d624888a89ff3b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T11:55:12.607Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f8618443f6328f406b112859eac8fcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:00:12.154Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bb262fcc44f4e8375e2bd2def5cfa9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:05:12.542Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10f7d02d45d0bea99a60133cb1b01f09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:10:12.098Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79a8c9a90d363fa422eb3168fb3c6e62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:15:12.291Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94385ed2941251e9406661d5038e2eb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:20:12.659Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acc0f4f5ea0eca677292381d6b43b701", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:25:12.765Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ab32e7744e859949b564e517444afef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:30:11.782Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3d7642a319fb671a66b4398035eaa28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:35:12.771Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "939f6f76fa858a085483d446a52233a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:40:12.489Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f82956c9ade8ae73535b5b0fa7ab3aa4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:45:12.555Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d508e640952ebc3a8a4467d3e64979ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:50:11.94Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e57463afe3e7fed35b379b980d48633", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T12:55:11.896Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81870cde749a32be2c76cbaac1d5f515", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:00:13.996Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fccddc12247277fffe5103c9306ec87a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:05:12.513Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "081544c4265cabbbcdac18411048fbeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:10:12.409Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44776ff1197b486ce2eab102bb69d851", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:15:12.826Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "660304ed678df33fccdfd5026cd8490d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:20:12.531Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "210f8539857e938cad641071e84652ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:25:11.947Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98836e2f858daae7b33053869b9d9bda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:30:12.786Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2889895603fdb7fe1de7a4ca8caf1ded", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:35:12.583Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "356bc6130bdf685332f1b456fb0a66bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:40:12.357Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b78efeccc0d2c3743b3b12f308c15d0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:45:12.428Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44789822c4431e52d24d5db52d437759", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:50:12.918Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb9613d00fd26216d856c8facbe06143", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:55:12.025Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b9c0a90241e29abf4c4974dea5c85ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T13:55:12.025Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d865c3794af24d09b45f5ffe75b2021", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:00:12.827Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70d14b2e5dced5f906ee3c4639e031c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:05:12.48Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc12df4afc8146ca3b2ef23f9af7d725", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:10:12.91Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "001f00ab9b27d85ca14bfee60bc15371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:15:12.777Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa92fa3f8be1103242850c61e2ce36b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:20:12.354Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9915849ae600353652196b8b63fd93f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:25:12.77Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5fd604623cd78e7eab5f73ef45f6bff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:30:12.961Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32bddbdd8a8869f9a2ec089bb63d9d6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:35:12.76Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e188e0b9212a9732bff97c798ca36393", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:40:12.884Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95416d89d29c8db78453df70a56750dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:45:12.482Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b76897041c62ed21f9778844d0f360e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:50:12.697Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32cd6a8547d9fac3d7d86cfe0dbe9b3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T14:55:12.143Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55258a3a09204914b750c21112de5242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:00:14.251Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85cb5073d372a0aec158f20fe9357799", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:05:12.151Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de992158aad869b2b17d146fe7a41529", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:10:12.957Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd3fe9b75951d012285c8e78fd8c885f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:15:13.076Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82e1279075eb1aa4c966e29d66cda370", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:20:12.244Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d8b4be851796e5e88d122d4af22c42b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:25:12.573Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a44af46c8a251bc97964f9f9b5e9433d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:30:12.629Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4bc83e0d02446e4d9f62d2d41403965", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:35:12.697Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b549a6406c0601fc392355423ec5d6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:40:13.126Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5af5b8d1cc6650688f1a8b114ba65c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:45:12.723Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6904d5c271d29f534280cb5e098401c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:50:13.092Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbdf6855361e77ea73a1b0c3aa6e9b0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T15:55:12.36Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1257a46e9e384d293eab9b89d67a8dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:00:12.284Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2874eab4286462f156df6dc384cca9a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:05:12.753Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7e0d0ce9d11e0fb8f2e3d8f6625997a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:05:12.753Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da393e85d919b2a1f2e736c5d15b9482", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:10:12.342Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a4f3abb6f65bf7222a617eccdcc8ebc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:15:12.96Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "983c231955cad6319b7397e1e27f7c35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:20:12.879Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94b5ddf5f46d0d0eadfd2fda28f0b107", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:25:12.977Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c2c3234ab71dda5b53d2ac81d42537c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:30:12.571Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f069af29a80e633843c0ba6986c8393", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:35:12.877Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a17ab769337fcf6bb331ad02bfea7f8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:40:12.421Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb18acd295cca88a0754e9b07ae2abf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:45:12.498Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e84602c2e3c67d99a011901de7dd2b95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:50:12.748Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08da4621df826b676c5ebb47c8e00f7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T16:55:12.394Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9ed309aa3ed895d175c44f8cef90035", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:00:13.032Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f31486c2e589b74f5e21ba6b3403cb01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:05:13.743Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "93cfdd7bb50586d072aa06c2b17de2a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:10:13.303Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e98f80fae1a2b2a61c9755fdc20a272", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:15:12.428Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ee1fbce2d9f189ccd8757366de8112b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:20:13.1Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1a225e29732f7257e5bceec357080c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:25:13.573Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65742ac4eee5f210c34604e9792f57ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:30:13.068Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24f10ad0771042fe41cd4baef72b4397", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:35:12.65Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86e2acc9ddeb1a6dadeed0e4ed9d12b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:40:12.622Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4be99df1601445319fb8894c1fd91b66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:45:12.615Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a59ace01ffe51c491e4e37e4d0ba60b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:50:12.946Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ed93fa61089c2074a56854e19b87792", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T17:55:12.599Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ce86fb694bf783e4a56f1e36ef5d2a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:00:13.186Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d406419055031f252e6a16d28f6a1a0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:00:13.186Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "765d0754097a40f8162c6ce1ddebbf86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:05:13.404Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9404efc663a10a795b22b6be146bd6ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:10:13.032Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "735d590274a0d21c44e843007e1c7097", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:15:12.94Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfd6fc2b3ae4206f0e9f7f59d43ab850", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:20:13.217Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "606ad7db08ef01f8e3f71366bd956148", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:25:13.006Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd17472fbd65754783e7efbb82acc4c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:30:13.154Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7e54b2af0520013fdadcef20f95cdf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:35:13.034Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec01df26942e92b3065f649aa975cef8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:40:13.212Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e208dd84591ec3316f37db37fe4eac4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:45:13.117Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a5cd330e74141182400742c21530570", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:50:13.335Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "baa8b287915382923fdd318216abf820", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T18:55:13.277Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0492f50be07b0b762f81e9a8a1a9a081", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:00:12.571Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3fdb29224bd3bb427586f86e5ab3777", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:05:12.886Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a308de69d9990b6a05219648d21c9670", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:10:13.973Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a23421d394f1dd90db7b049916980b27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:15:13.291Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53abb13254fcbd3cee95b5f92507361e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:20:13.499Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d33f88cad2023963b75f467cfccec2d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:25:12.997Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2472890e15a9c11a0d986b59cc731ffa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:30:12.825Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3db0457d254c7d4a7734ebcf2219669f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:35:12.803Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "865ab41126f22a55f47f09fba3ef2e7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:40:13.056Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "361d0968974c8d80d00726f8e3a9b613", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:45:12.8Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db9196c443d5eb1bf33b277fa33205b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:50:13.34Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4eab2a5ef69a9932b70a7839ca58fb17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T19:55:12.648Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4ff44b2a64396ed757335f2a9199e77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:00:13.11Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0291fbd4359cb4ac5f5ce8793bad25e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:05:13.517Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca43653d60d0b9b62c0c93f930dfa6cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:10:12.769Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "638d0e6270f6d15e1ed7d13db6e4ce4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:10:12.769Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a7d6b9c56b3d2cf63c04f83e55851f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:15:13.305Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef69345899f7708f7412105f1da8a1de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:20:13.224Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48818beec7ec1a13485accc3a140d939", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:25:13.617Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d15d98d3acb1fa6e252186647a8183b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:30:12.714Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2816d05f8785ddfc41166631795d4d99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:35:13.573Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d899efecd0898f3dd49e44e6c161c8e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:40:13.591Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f445617efed259d0e7a77eb3387ad615", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:45:13.419Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0579c0a7ca5a005c17a0a5d34af57121", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:50:13.478Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cc1a5e4f02d9e35fdc4a9e4d24466d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T20:55:14.769Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f12191a9f3cf0a3e7bfc82ab2b96ddc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:00:13.624Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1dd5c7c543cae99b7ef7c569831995e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:05:12.918Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e42f547f4927a0093fb3e7c500ad5c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:10:14.267Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d87fc9446413fdb61641d8acb9b99f52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:15:13.518Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4960927f39205475ac9e72cb3c94c617", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:20:13.235Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4170f18ec29da21e2ab61a0b8b8f1da4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:25:13.092Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd335189d30c3ff9d89be7769c6eddea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:30:13.201Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "956a7a15781d8f8003b9346af5371a81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:35:13.042Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bfccb01b8855ebd805164e64052c158", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:40:13.582Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2734083efde5473ac8314fdbff2005c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:45:13.712Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b68a509b6b491e892ece374ac9324594", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:50:12.869Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e025f6bd0123cc114873df47474eb82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T21:55:13.03Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b9389ec102d6204b1b8c840e9941985", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:00:13.23Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6433e908c8722179d4fde33b6a1ae4bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:05:13.73Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8935d7dd2c076c7dea230be09a3e0ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:10:13.656Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "836619b4ce8d315993833dc2482edf68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:15:13.843Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4e710d9885d32cca983851bbf02645a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:20:13.847Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "266ca3e2a8ffd29bb485deaebc738b15", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:25:13.554Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b712265487b164a2e68b72c8ab6bd45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:25:13.554Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7cdb5edb53bb4f14142e44dc582ed49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:30:13.067Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72b84403ba9bfe507470727f7dbc05e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:35:13.428Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f0f55c0450f77521eae1f732c72eeec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:40:13.083Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cebf5b575f3b9d140d20e17c3946ee9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:45:13.004Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4cab2d8ffd7ecac3a447198d3502de98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:50:13.267Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e843bdc31334a4f7122036759e61c44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T22:55:13.526Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39441c32b3bb92d56a92e7f5aefb2d4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:00:13.156Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f20664f9d0b2cee1682a76d46d6b5cde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:05:13.646Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d91264f1026aa3be75a60da4540ab1b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:10:14.957Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f278eeed876d53df1eba6d2f5797fd3b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:15:13.63Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba0b8e3e6a2b335b4a83c5e46ce15593", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:20:13.356Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "effa1a0304c76a51fdcfbd1e61295f58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:25:13.115Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e59b327b203779c220073086d06cc8f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:30:13.994Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86dfad24f37f16d9890244c65b92f2b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:35:13.926Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "758bff65ff1b617262e934429632eb90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:40:13.397Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7caf2210b0681bc518a5c05c182041df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:45:13.607Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d8260322bfbff91ebfeecc74ed32f73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:50:13.183Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42701454dfb3b384d4e49774911d7b51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-21T23:55:13.311Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9ea3ef8c8f8cc085c2fb32a295721f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:00:13.604Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bd2fc62425700732aa4c6bfbd30a470", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:05:13.254Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50c8a7b7e8079d02e8def2931726660a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:10:13.943Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19b4d8a4529614d783c21be4f80113e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:15:13.245Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "578850617e204169beee792048d75e0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:20:13.904Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afbef4b7affa2c8b421d2091c0a93ae6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:25:13.334Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1485178bf54f6de9a46e247049fa0bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:30:13.601Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97f9498e1c662189c74575e6b4175a95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:35:13.298Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8e553beff148b4ba643bf05f2a512ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:35:13.298Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a262942c5c040d3f16a16bf44e421c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:40:13.285Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7cc49bb8408f8e8a9f3ff9028fd0b15", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:45:13.138Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8dda179736fc83ecda3669caccf60c2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:50:14.074Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b0864777beaea806d13a8ea9a3d7422", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T00:55:13.907Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d048c825f976f18cb76239746ced901", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:00:14.096Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b71a3fc97c32c86d354dc43920417e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:05:13.816Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32a3117d0c500d58c237e6fddc7d45af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:10:13.586Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fe51f779d1b80ce3aeb3c08e2742472", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:15:15.06Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee365974173b810ea5562a3dedca547b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:20:13.623Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1d1b05089ca1efff45fc1ad208aff81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:25:13.534Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11bb9f63a20e8fbeb533867b9ed4ea18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:30:13.781Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efa281478286deacd8c367c965f6e9f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:35:14.083Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c89c5de16fadda2d52e698c5beced6e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:40:13.225Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f232e2d27242965d693378fa61bba1d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:45:13.552Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eeb1ddd7fcf0c0256bcd34e124d2fd72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:50:13.607Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fcd3e1ed833492f8dcb2618b5eaf3c24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T01:55:13.592Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e33bfaca23d10d8c57e5d4e4f22b38d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:00:13.853Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf42ef04dd153dc04d3b3d751fc472dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:05:14.091Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "309829f46bb25ddb6313cbb8638bca0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:10:13.621Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dba406bab8f20dcb83776d3d3ac104e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:15:13.31Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8e7385c47e7867b30fea66bd2bde04a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:20:13.67Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9139e5df75cbfa0b80c4eaf8050e294f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:25:14.179Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c9d44ab4b49033618c9e586faa15506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:30:14.212Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f24e22294637f68471ada081e8ca8814", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:35:13.995Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56ce206eed756f314210e987ed091cf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:40:13.538Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f94f4591078f8c3db7a2d3134e0bce79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:45:13.413Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ec0cf15b860bad4d119b993b3ebf029", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:50:13.741Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "848f5ff3d87bb0fdcc45377992aad237", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:50:13.741Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d656e88437336798c671bef1b7cc9b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T02:55:13.801Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "baa7273ec415dc9b442495f00bc4231a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:00:14.31Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12bb27f4706a48a09f6226f70e155062", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:05:14.223Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6479173beacebdfd114d1d03a08d7f9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:10:13.866Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9caf3f493010bda979f2855ccb1b1999", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:15:14.176Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f0a856a8b34cfb5bd8ad8b9ff94367a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:20:14.948Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97b244f6b03a2eba89775ff6036e0587", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:25:13.43Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1db9afb1471d85cb91edb86b2e85bc45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:30:14.427Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56fd2a0cab258bab2c14605737631e27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:35:13.899Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96dc4dbbd1bec58044e8009cfb8fbb54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:40:14.396Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3428050bf991380d3706c927924e2e11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:45:13.935Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e789a183705f7023b01d332f735c9b36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:50:14.346Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0fb4a22a2ca4a9f2ae4f4e62a2332f00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T03:55:13.721Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68ed068116dbc6c35265bf6dfbccea30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:00:14.007Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69002a0b5f8c39c980f0b728b32c18dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:05:13.764Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b32be516e50642aa854a4d3c200ae66a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:10:14.381Z", + "quantity": 215.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdc917e8e39130c2f181605ff6b8a30f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:15:14.295Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e03e883e5c46af9090c110c4b97abf4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:20:14.279Z", + "quantity": 224.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4386fbe53bfb3e861f91a29dc8b3f287", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:25:14.412Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4888f4a1075846e4e90f45b1eab59c0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:30:13.654Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a72bc6b92ad6281ad338bdd694c10b4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:35:14.029Z", + "quantity": 227.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f46a07f181ce191130039cde51f081bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:40:14.18Z", + "quantity": 227.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17945be332ec0bcdf3dad9c5eab81df0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:45:14.204Z", + "quantity": 226.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44e13aba551050111824023283b73299", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:50:13.65Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56fc03a47ad1e6ff34c2745a13eccbca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:55:13.73Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbdd6915b6e9eedc7729abbf6331865b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T04:55:13.73Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e88beb8d984386f5444a105fafdd6e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:00:13.642Z", + "quantity": 222.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f9c5292a33353dfedc35da5893b5e72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:05:14.201Z", + "quantity": 215.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a71df57c286b9831fc7e49fb72e8af88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:10:13.804Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d39632e9e4eda15999e436933922652", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:15:14.014Z", + "quantity": 212.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "519ffe305f232c74c110167f022a07bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:20:15.4Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fcdb6d92f55ba2cfe2393e992d4356e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:25:14.101Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b5de4ffafd3aea72ea1ada58f134cf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:30:13.803Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1d697030afec00ebc6e2406f0a6a9b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:35:14.519Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72dadbce8d2c243d999e1c6e26277196", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:40:14.255Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3742258b476daeb1514accc9974a8ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:45:13.992Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f95992ca341ac607c9632fc6931ed427", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:50:13.975Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf8575a88ed691816196e0714a838e0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T05:55:13.706Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac2c647c19d9bc3f0deeec74347440a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:00:14.141Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "849139747fa837d3d61e9c21c444b58c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:05:14.333Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef7978776c6835c387ab78e6e3cce114", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:10:14.049Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57589779ba41a9f3de14a3a579df41dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:15:14.02Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bb27aac6eaea6f0934cc061c3d98e19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:20:13.975Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4fb29117e27908ba0084c2bcbb09585", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:25:14.022Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92dd27c49cab11427cd74a1dfd08a2b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:30:14.186Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ba35d47d5eefbace1f69464df4e14e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:35:14.036Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22c0cc59ab086ce5858985666f756124", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:40:14.629Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c34df0434eeab8a66a676455b7677d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:45:14.493Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8995bfcd57faa4978813d5b3de07044", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:50:14.25Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec279aa4d6c897c56dce464654190894", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T06:55:13.979Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9c705051ca8a41dfe9991f32b839834", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:00:14.168Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b0a95b9620c54119d0952f183fbe6ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:05:14.776Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce9905f98bb4aedbfd01f6c1c995842e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:05:14.776Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75e8a15e9548c3f6d1361f05db24182a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:10:14.644Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c92ae721cc96a930d13718a9746e8b4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:15:14.209Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bef6ce1592f759f494fafaa01f06290b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:20:14.236Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7653b5ec5bda470b17f866ff1255843", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:25:16.136Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "840431fb9fa2c91e071ff90bded4a2d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:30:14.876Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4b3fa7539f7fca88f3ec548bd9fd38e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:35:14.78Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19c5056520e3e515f84c931593098989", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:40:14.778Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "983b8fa3cee0d596ae9c0f72ae6f41ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:45:14.658Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "684033ec7573d5790ada97ec3e994d0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:50:14.292Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47a89bac752c682d85fd7386dccd5c59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T07:55:14.93Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fecb83e527e766eb5d1ee6494028eb9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:00:13.965Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e46d1fb55b8d6a9637a24a4b9d43e2d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:05:14.552Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "931ad4db40f571c4d35e42db3dd9d31c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:10:14.185Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7159283bdb8e9e04a7aa8b526cf9ebf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:15:14.395Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25354a6a0491609815ef7e7aa045d7aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:20:14.304Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29fd7a7c60b4a00d2b8951c4fb16387d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:25:14.887Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19c86a45c684a26f11b99b3a9ac44745", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:30:15.022Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ef439a881eb43928a40614a14472f6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:35:14.165Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f6403b6993f95ca022ba408e311a7e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:40:14.303Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c89292fe1ee80f461ffb8975ea5af72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:45:15.042Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "331a2b0ebec014e36ed52878d966737f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:50:14.921Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c61e4146e2f307595f6e3f4924c9019", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:50:14.921Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1532e70c368437bb6e1f0327aa90c6bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T08:55:14.683Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b6a133eabae8f9adcdcb622db1e622a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:00:14.41Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a6585c5d3caff87e17eca0ec52d5770", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:05:14.649Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4249d34290f94ab26483fc2b34ab62b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:10:14.8Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e0f00bd100390b4eeb24e159bb222ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:15:14.9Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c35872b0b7ae7da73b21c4d4ff46c44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:20:14.281Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9377f5a4a5bcb0fa0516f46ee238ae20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:25:15.682Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "261fda4003579d85240017eb0df39a70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:30:14.309Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28fd296269f6c80dbb995d517ec84a7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:35:14.932Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17af412544db8ca74db6ee077b7a2868", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:40:14.871Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2aa657ccc4d429ce5187e399da5c8bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:45:14.443Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea7646aebf31c8a81f8980697b01d803", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:50:15.147Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98a013bca43daa1f4f5db19f7aa6d8c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T09:55:14.305Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bf27d946835123c0b60cf77ba3b539b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:00:14.88Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d147d0863f6bebabf9f5dcef3fcd98d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:05:14.351Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d70964f7492def7907522de9b935918c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:10:14.503Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fe17de9b26bf6d280a1d6151c6f3b64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:15:14.944Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdb67e0624f25f2a29bd3a3894e5c3d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:20:14.5Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df5b86f2875bde675f0d6325165820c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:25:15.185Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a6621d5c73e05a3ac43c0c4f7a2efe2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:30:14.401Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d09d3568227db948ece9d9ed0d820d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:35:14.968Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f89e5fbb5f485041ff451d137fc26b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:40:15.084Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bcc33a0783c5146b998250ad04c9455", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:45:15.127Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e836b08a1d6e773d38728bf73710d304", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:50:14.486Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66241952a276c1ad18523b075c035272", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:55:14.373Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ff55204ccfa9949daadbac62a9e0ccb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T10:55:14.373Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e455937ba8cfb1a7f6015192d55a3f7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:00:15.096Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32030bbe614e2d2a0d36fbfd40440c98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:05:15.134Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "846b430d02105b6df51ec2696014f8a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:10:14.949Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eab6875d7eea336d2cd3bb07af10af98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:15:14.808Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a366ebddffaac1b9210f5a7c2d5c4794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:20:15.095Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3dff41dc3673414d3bd185692ea64f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:25:15.788Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98d45b18f75c554817b9e45f7b3ee1e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:30:14.995Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ac98e19223860588d308c0d001470b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:35:15.407Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "509429191d8bb13807b8ea7789e2c817", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:40:14.85Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5e680b8c821bf7663d3299c3371bd6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:45:15.361Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a790f9236412cf0e7abd161747166311", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:50:14.79Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52faf003286f4c81b5d1c35b19f87bb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T11:55:14.809Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59faceaca5f428c154c57e24e97bd943", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:00:15.214Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a626337626ce06ae2e5201feed3cbc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:05:15.259Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8466297b3a358f45dad0036d1d8d4fa9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:10:14.561Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da2ede4a274e7ed27d8780aa86298ded", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:15:14.581Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b5f63d8ed6fb338cee6997e00862c9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:20:14.644Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8cb6443b908b9878c0940f0b501cb087", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:25:15.213Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b4aca24ead8b8a122eaa86d7eb2742d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:30:14.946Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60cb0cbc86730fb8fd593e734b23bcfd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:35:15.512Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af2747829da031a97b8280dc067711e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:40:14.743Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4da8c1f848f35cde4e3e538e99143d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:45:15.405Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d865fc2478f4387f5c7894f2e04b1ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:50:15.392Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "999c98e808f75e56d3524375c187ef5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T12:55:14.993Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "265d2be0c5a8596d04a25a188eb7179d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:00:15.055Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e109d1a6227922ccee8e80d83934a03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:00:15.055Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98301197e25dacb93ddd8ed308af2511", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:05:15.28Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5b164dce81e9fd7015379682ddb2415", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:10:14.977Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5de88675f0ac5feef9a127dca9a55989", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:15:15.511Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83667ce7e3f5fb4293fe52a2693074b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:20:15.399Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4e858584432e43e78f1531628a90539", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:25:16.002Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "802102beb00e3d704d1e4277dc055430", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:30:15.549Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddcc9cb721b27d48a096738b8e126267", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:35:14.666Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d0e1a5de5f844ef53f118988a4f00b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:40:15.636Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "295f9a31bdb2e06c47ede07a983fc434", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:45:14.765Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52c0600ad172fb8e73d9d5ba7744dab5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:50:15.618Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69b284bb7c4a889b1a3d8bcc6fff6e93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T13:55:15.675Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "326413be10f89ae2e963c4d4ca7835e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:00:15.375Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "911ec1e385c5145edc60ecdc066e9c7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:05:14.951Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71cf289351d1b0b35142eb0799093efa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:10:15.628Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "558bfad3d27e1d403a7afadac2a83888", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:15:15.639Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e4eb76923bded769be05281d92ed3ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:20:15.155Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ee6352f50948de3404073dd9d2ef46d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:25:15.657Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "189ccc5da4326e28421d1ec8596047e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:30:14.926Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e1151b0e09c2bd096fef51b8e8470ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:35:14.829Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a661b317bb3ee32810f67e91362e1c9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:40:15.044Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31629e83c6cebcf120a0163c44c069cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:45:15.306Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6410a3d19e649f657f5baccff6fda83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:50:15.539Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d2a52121c25fef002766ebd2747eb43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T14:55:15.332Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11484221f9200fa2764c5b8554384ff7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:00:15.72Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "284da1b6d56829c57789eacf7b9f594d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:05:14.946Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3417f0f6ab2f9534e660bb05c5190b81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:05:14.946Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f2ea4b8665723b82122c9add1c61dd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:10:14.996Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cab405f2b40857aa15f03905fadfc070", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:15:15.54Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcf49e5cdb3cf0c4d6c9e589eaa97732", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:20:15.255Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cde3046e6a10674799020a2b8e9bb57b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:25:16.689Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1d0623ba52c5d003f12fb4ab6842d26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:30:15.606Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83e896dc427a8bddbe4bb223aa2ce992", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:35:15.336Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0183dbde8d444bb956f2b2b2864530d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:40:15.303Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3d15f06d23aebad8f9872681a061c42", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:45:15.997Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7af9a0551751e46423206adcd00493e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:50:15.649Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eaa68b929c44dd565d3aa5e4ae02a797", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T15:55:15.259Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9360b6e296f92f3ebc7cbd655f47a1a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:00:15.674Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07fadad7bb2cf580ad0f62f55a96e9af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:05:15.242Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42aa4231c013d27fa43a57f00057edc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:10:15.179Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcc86c79154c2896a85a3b4130b8f30c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:15:15.172Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5c4bd6297843dc5a3a446a320e7b2fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:20:15.279Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdd106a5a87b29808f904c55c766b139", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:25:15.174Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0307b06ea0d0ff5b1861d64dc4947606", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:30:15.398Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4c2b574ec090eedacfafacae95d4577", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:35:15.657Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c126351584221a21b12eb323fc1e573f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:40:15.641Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46b9132096a71edbe707f868a768a334", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:45:15.232Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8332955195ce98ab2fee2688702c1279", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:50:15.309Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5beea6c163935f4bf9664e4a4778025", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T16:55:15.171Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4938478bed5187db533a5b1c00e72b9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:00:15.566Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2c0b5aba8c3699cb1987c583f8488e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:05:15.304Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc3f07220f46351d9236b3ceda0f6f24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:10:15.755Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e83d761fa2d2b967618b5450f521cc5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:15:15.172Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aac6e9ed8dc963e2424f6e260f2046ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:20:15.656Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6910c344c46083e058f39632bdc44780", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:25:15.293Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b334aec1af2a896126f2809a320458a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:30:17.948Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "083279a5c91768915c5dc0e601f8be4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:35:16.048Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb192e84c0c1e8ab58d0f856e314c2c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:40:16.639Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fb7b70a9635a4fcf6a64fc16bc18caf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:45:15.515Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "161a71ad85922d220fb6168e9afe7607", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:50:15.913Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb81524debdcd92c9221649b92a91315", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T17:55:15.322Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05343c8955ff5b976029039ea59ff7d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:00:15.738Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16f43c56e2d33ab1e0a0e645155a2617", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:05:16.006Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bda115eb48ea827cec7d9fd28f966711", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:10:16.104Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b218d5f27807442c580976c02019c898", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:15:15.488Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c18aecd5c9fc2385ba3f5352a59ee51c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:20:15.576Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ecae03966a01e7ea48143f1a4493eb30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:25:16.164Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c4d19d39673bb2cab47cfda68bddbb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:30:15.751Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95f04b36031fe6f70146e95aa3c97f54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:35:15.578Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "156cdfa84283bcd2bd83099f8d245bd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:40:15.286Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0972ed646ac07dad68f764a2d6176005", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:45:15.845Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a343c03b6bd8008cb1952388e6157748", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:50:16.102Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c1c5ef522c379d3264972697f3bb73d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T18:55:15.634Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ca1da2d4d5d8e9947327c56f16845b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:00:15.327Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ba12a1d9f659045b19866ff4251c564", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:05:16.027Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "350b0d94944f414befc2ad6c8a3397c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:10:16.01Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d749e8a073bf3e545a25211e0912303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:10:16.01Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0b95bad622a58378133f33b6b51de40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:15:15.499Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "215e0ab6d5019f063e5d57c4870ac7c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:20:16.194Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77d0fd9828460059a3c0c9383d8bc96d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:25:15.888Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6bee3c40bb391a046fb038621f81242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:30:16.067Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6a7fdf6438aeb973089a3c962e40004", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:35:17.038Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7096239fb5bfdc16c967a018a9dee7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:40:16.203Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "782ef3178f12f74ba607a93c36e4d65d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:45:15.901Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fad9e0118362c377cdcf6aa2b1ed9be3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:50:15.837Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dd1d5cd9d7f9f990d0913963833c8a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T19:55:16.301Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "965975d606a49aaafd6f3e6d4d0afbe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:00:15.468Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80aa7184a29f91ff7621f057409054a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:05:15.767Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ab03afcae1c1216a04b07b29bd51edc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:10:15.967Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9bdfc40335828376dcb702e464760e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:15:15.818Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9695829e393f36acaaa39d58ad21573", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:20:16.275Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfc9f0157ee60db30ff1cde6ed3c66c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:25:16.604Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "303569ba5faadaf4bc8b235b540902e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:30:16.013Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87777b80ba0ea26fb731d1735e08cd9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:35:16.232Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff48bf10955dcc0ee02a1bfff2ce2644", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:40:15.618Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83044e12f10a08f167cef0232731654a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:45:15.568Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "242f91e38ee635a4b997e86b1d7c65b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:50:15.908Z", + "quantity": 201.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4834bb26d33a8ae2ef7ce2efec119d89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T20:55:16.118Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71e8b58721b0db68a0730b62ff66337e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:00:16.109Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdc395c7c6032693f1b14fa2347d666a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:05:16.437Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c78c593555856ad9a2e378fd5ba19ecc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:10:15.771Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1d2fe112941bc82464215547a491db0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:10:15.771Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "409e73a3ef86271ad23d8b2e3f0b4706", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:15:16.504Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "410d08e44bf32166ab4c82633bbaf0df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:20:16.079Z", + "quantity": 215.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef614f9fc4054cf3d35e4ebf1ad4775e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:25:15.83Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83cd5c8f69856fc0ef1a559da6146303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:30:16.363Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18a58a9c5f44874a647d9cfcb906cecb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:35:16.508Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb1326ad5504640a057fcb5401ba98b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:40:17.807Z", + "quantity": 206.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbe79ec830bedb6e5938c8d724fba166", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:45:15.702Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f785fa12e1a905de8be68dfd3279143", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:50:17.193Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f4e5d1028db697c70993e20b4f5dac2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T21:55:16.04Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "957645b0b2f2e12401b55988228b7d21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:00:15.717Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b73300e87b82ccbb3b6489f26f73ecec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:05:16.544Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "278ea426aff4c989d5761cb0e98730f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:10:15.717Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10b6063012acfbacab15f547e96e19b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:15:16.504Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a6cf07971f0d57a8808369242cf0eef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:20:16.035Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "794d259b9b32a72b1705ebcf33af532c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:25:15.676Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3207154e45f5fbf8d89e103c37306d21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:30:15.659Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c031e0e7a31b93f4d6d38f78f84b296", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:35:16.054Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "675d6ac958f40297e8bcfdc97d1254cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:40:16.352Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b8bbb091d5587f9b0b6308408077906", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:45:16.873Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bda01e231ad776b08064110b31245bb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:50:17.872Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e584c347724aadc876b734243bb75705", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T22:55:16.081Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37be951e1d3bf5c37683d6c83917d067", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:00:16.193Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a84cae15be7c3b418db89cb5d127d95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:05:16.297Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76b3d095e035edcf1842aca25b46be53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:05:16.297Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7909356362d6da666c2951495d7f9373", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:10:16.863Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bd08f2cf5a1c9d24c6cd85b62cebae8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:15:15.931Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b93e6fea3c807771ee731841b87e2832", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:20:16.444Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa8d5277923ffbd2d4225c9d673abbe1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:25:16.184Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56dd81db78af25e5af6b9fb7a6004e51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:30:17.935Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fe32c8aa7c72494c2bce348e77938c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:35:17.935Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5fa59cea810ca5b15966e17f5a082c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:40:20.796Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9b45369229d1a88ec863b1297c4c9d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:45:24.441Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9bdf5fd1271bd4ad15219db3573390e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:50:24.441Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19d0ad23b95859572279a352bddd6280", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-22T23:55:24.441Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db0897707b035687e88efef495decc88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:00:24.441Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb65a610e88d7d0dd43c5a3f8d81d0e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:05:24.14Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12b9a20fe2cb59f7507ef797f585947c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:10:24.14Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eff7e85224f9915932abeda90c76d8a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:15:24.14Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67ae99cd1ea11a63aecb6f97c6d1b8c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:20:26.144Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9922b4ca3486e44b46823f549681b677", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:25:17.401Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ef0f43307fc059f7e5c3309eb7a28de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:30:17.321Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23d093e460cb9cdf020fb13ce3825938", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:35:17.321Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60234caf162bfef4d386c74753271a19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:40:16.768Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac6720345be4118e11e41c2aef42d032", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:45:16.815Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cefd7b4fa1ebc56cbf3c8df515bd629d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:50:16.364Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11af03a86b62480e12b538274adfd67a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T00:55:16.02Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20e66138c66c0584517e6caad17de19d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:00:16.937Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd2bdc341ac374b166890119ecc55f37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:05:16.999Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9356ac6948900866b4d4e7c12eed1ff5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:10:16.423Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c70c24efa90f31ecfff81f593f73837", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:15:16.205Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "131a0f8a916549bae12402ab776a0cd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:15:16.205Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5266ae707cec9300f8d006bb2353e984", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:20:16.868Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4ee0cdbef0c3d1e271b4ca01a081cc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:25:16.386Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac01eac6ecee879036571e476bf5627e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:30:18.009Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8501b422817bbe14e9d0245b5bb2cd16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:35:16.918Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92ce4e463c83af0f2e6f9dbf5da7f2ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:40:16.878Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee104fee1d0c1e6e0f2fd35ac8d15c92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:45:16.415Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3546d9e03c6abaf0fa0a4a87b85cff45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:50:16.5Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fa21193a4c3cd7e24eb927bcf65a99a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T01:55:16.803Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74a672c2c62bc5cc0018ad25af58c4c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:00:17.338Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6491ce44ed983a075cb4d2adf4676b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:05:16.66Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffef7fd1333b1b105679e836a20677b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:10:17.257Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e16245f75f8e17b476f4413040ae1ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:15:16.15Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a90d4e7d3783a82fe28b1d99e9be3080", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:20:16.755Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8c5c0c42f9cd352e93e953c520cb360", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:25:19.956Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "669b0399fd41cdcfd359ad7dc6367892", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:30:16.389Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfd72cf26ca17dd7f1545b2f98271749", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:35:17.103Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac2f333605fe2fa5a48335edc124c5f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:40:16.593Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d911fb0db1c297b1c248c642b98e2166", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:45:17.007Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d17a98e1874ef24665557eeded9f9425", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:50:16.228Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2db8d6c821b35906c50cf3303415668d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T02:55:16.741Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c313f16419ff6d8afa3c12df08546b80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:00:16.402Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d299861b0a3785f96ed7d055b0ad124b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:05:16.835Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "353487806ae7432a5c992855cbe8abde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:10:17.137Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "252ecb725ab58ee4bdae66a6e293751b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:15:17.038Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "580b03cc1476fee636996251286cee47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:20:16.212Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7bccb6d8b2598a361d454358e7ca549", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:25:16.983Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7e5362b0afbadfc7bc0651ee42cc2aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:25:16.983Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4126b671e581919128a1c470497b598", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:30:17.155Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a19259a0f0ca674e073e1e98985e94b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:35:16.546Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95ee1ea2f0c5dee1da436ac62cca112b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:40:16.719Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4c42076add240b07960b8cadef62cf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:45:17.049Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82f8d8f992083c4ffeb530465f748e9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:50:17.253Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13dcaef7ad78874aaac4a123d39537e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T03:55:16.724Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3bdc2217e1a0d457014b43826cdbce7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:00:16.618Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9ed67ef51bbad82e794eb162f17e6c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:05:17.12Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "112c0e831c17b35b4bb7a115fe27a3cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:10:16.465Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66555e3ef32a72ae07b42da55675d085", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:15:16.625Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28e4f5adfa50a5cead594299998f5329", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:20:17.283Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "323a718e9b3d84f9bc81078b2ea90a02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:25:16.406Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97f155137e9d90daaf139d576105abf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:30:18.784Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e41d6e4a9c3b96c1637868c5da6c441", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:35:16.506Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dec4be7da99688f41152e210dc725ffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:40:16.424Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb20a21d92182495429a701f46b18893", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:45:16.949Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6072a4c7acb03adaa12c9da54213b77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:50:17.379Z", + "quantity": 224.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27e97f98a8f73c52270e75a0701b9a97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T04:55:17.256Z", + "quantity": 234.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2873f455c05acaa54232aade4fdb4196", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:00:16.427Z", + "quantity": 241.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b942895d4ab0cb8a63e7dfcb6f240d66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:05:16.452Z", + "quantity": 241.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf5394a92e0f23dcf9a8ac9381c6855b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:10:16.704Z", + "quantity": 238.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "197ef40fb1e670659943176f67231d25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:15:17.245Z", + "quantity": 234.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6035c952b8eb5cbc5f5cf0d576b35225", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:15:17.245Z", + "quantity": 234.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c8a450b909eafa58a578e7ed382eee5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:20:16.705Z", + "quantity": 237.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be41ab2873c6b709ac8e46b6e1b8c748", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:25:16.479Z", + "quantity": 230.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1a330c5f855c802e997854d4025a0d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:30:16.769Z", + "quantity": 222.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9740d52c975e54a4011205a0d8ef3dda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:35:16.919Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8859764085f6e360775852bfa5e42c44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:40:16.937Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "579e54a9a785f768872a131804a879f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:45:16.937Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fcd3d6a4e0a960bc32afabfa0c52e45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:50:16.504Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e1337c01bc9d360d050dc1b591e3d9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T05:55:17.368Z", + "quantity": 221.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e36264f2990f625974bbdd24e71e5d01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:00:17.347Z", + "quantity": 222.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20435128ae41482ad47e3ddee140426e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:05:17.276Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68e853aad204e716e1f2c04d807a34d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:10:16.55Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae1f85fcd2ece2d270d1a5d72eb2ebe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:15:16.589Z", + "quantity": 198.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11824f3015d3f931fc2c6347c85c4e82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:20:17.482Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09621f8c4c3324c93f21401a0c0dcfdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:25:17.572Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38fcce00113819a347de70b16801d8a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:30:18.514Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e7f25610e72f987219153891c3e4b8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:35:17.01Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0550e44d9b5713652ad0b773d45010d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:40:17.518Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e547e6f050c26fd64568c5448b93371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:45:17.455Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc7c941dcf63d1286b0fda429e123722", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:50:17.297Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b3c17d7d30012eda2fb67a67ca9773d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T06:55:17.506Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "448f1eabd1b368f0f90c6cfe0c23d143", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:00:17.486Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed042b37da64c63473a0aa35f74e98d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:05:17.244Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92e23750f8758e360eb1c9f726e916f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:10:16.678Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2da1e909877b64ba9cbf28d2d7d64d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:15:16.684Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "93d009ffc9b56fa0c4d5e0f013be571c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:15:16.684Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57ab111f51b04f3e4c499f2d6d62c858", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:20:17.013Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ebd39a8faa0094727689e0cd2ff6cb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:25:16.958Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c06db6d01905035eb537797e08aeeb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:30:17.567Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7838dad2e748be2b82937350b2c4c145", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:35:16.769Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ba41ef1469f0263c005e63be43e11ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:40:17.445Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21bf87262625e4c0742a2f02930b1289", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:45:17.134Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5f782eaaa6474a1e665cbf5daa882ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:50:16.885Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18ce1bf7fe7e920d0e3144eb2eea5053", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T07:55:17.697Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "293ffba2c236b874dfc9c409fd8e0197", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:00:17.086Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f094a10006f3004d49500d0b3e8bb592", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:05:17.682Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e2f5080ec52ba1e7892477f61e04ab1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:10:17.493Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d3bf955cd1d66765817ad35b373e3aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:15:16.859Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2e8a0753ca7ac728b89932394142c6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:20:17.677Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8210198cd24bee350fec0f320828ba4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:25:16.846Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3460d1ddc5f0f1e6f3eb2b962b9a2180", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:30:18.121Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eabe21a9c035af959f14db34be75d971", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:35:16.98Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fcc8d7031a301bce33b50bd7923e2659", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:40:17.72Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40c0003775e6f5b9ee0abc318a49926a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:45:17.068Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a1a8cc4a76f81151bd35074723ade3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:50:17.536Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5fc508754d93284b77de0017b209bf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T08:55:17.132Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc55d841a4f168d801489bddab018267", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:00:17.221Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "969add678faf4833710f16b8b1076bd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:05:17.437Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34cf15c999e64f2c6dfe6b4d97a107b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:10:17.583Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1bf7e4c72b5182d944658e2c90c6ed3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:15:17.69Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01620f009be511330dd226ce26957a3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:20:17.36Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e44c26807b02af9c3b13ecd39dc92600", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:25:17.229Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ade151d081cbf2da69ada91ba5d60264", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:25:17.229Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "479fa3791e2c3e017e98639b3be5db7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:30:17.734Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef89bb1b9aadf8413d27def20f2e9db0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:35:17.879Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d60f79da45b31fffa38b5a744c945426", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:40:17.06Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4520d69c46cc38ea28089523d2e4898f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:45:17.591Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d447a37d979e9d356a12a1c9667036e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:50:17.946Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fc831f13ba7dc5b08c6777697063953", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T09:55:17.721Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "504f64cc510c19179e8d915d2f8723f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:00:17.743Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50c3decfdd89ab58361f95eff403f8e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:05:17.051Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c4e0eceab5c3c34d136c708db2e8c23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:10:17.806Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b46873b63b3a23f6db479e85b117b31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:15:17.682Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0794d1d1a3ad9c35cabc97bfd21c440", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:20:17.481Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8188c38622667c327634b60ca8fe191e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:25:17.696Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae1ceae5419b506ae0e19af53b0203b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:30:17.933Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99474b9cf10c42b75f99f4b1b036ba6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:35:18.876Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e572c5b9ec0fceeefffa055ff501fa97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:40:17.328Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bf8478d13d07da83de4d11a78ce4550", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:45:17.403Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b8c5aded44b2caa5a4d00d19bbfa499", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:50:17.341Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27660e8dce15f33bb53f8190bd45250c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T10:55:17.957Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a53eb802b2dd956c41193ea43ee2270", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:00:17.677Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40c788f35672d17f5f2abe54b5a326c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:05:18.014Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1992d92f26c9de8dd0230c0dc10fe369", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:10:17.424Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af26a1347f5a988eb10d27d6e49d4cb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:15:17.117Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "487d2ad3d52ddbbfbb09fe1d30682526", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:15:17.117Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6291484a4e9f53f33b4fdf6912e7d1f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:20:17.527Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b2db19f4efd50241475a818ce619391", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:25:17.929Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e48ae0b4264b0b4b22fa7fc546f275f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:30:17.188Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f45de261f1d76d45b58a1f047cc7ec19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:35:17.917Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a2d7e4ea8c3e44a93ed2f39ae6c1ecd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:40:17.659Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94f68a581e83fb21eae30fb6ce6786c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:45:17.968Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aac25332bd80feb650263225fcba4478", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:50:18.157Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1329af0e79cba28468ea0cca414ba46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T11:55:18.113Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfbc905431d6ff5612788ea7dbf59120", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:00:18.111Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db3741b3400ac9ed407ac40285d024f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:05:18.018Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bec8c313abb4ada54de223b8285394d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:10:17.215Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e84f2c19c37f5fd3ead88273c8695e94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:15:17.437Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76a04c8965ffd79b66ff537934cd01e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:20:17.823Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f994299e04b4f2680cf32e2d1d1f4df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:25:17.419Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba56bf4ccc20857e8a4c27bdab779298", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:30:18.051Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6ff65d202c11937f9f57c7a3aca0f71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:35:17.297Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60300a1a2c82a977f76fb997c2d5f714", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:40:19.308Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85153fb6a0f1d4363336f0aea41f7881", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:45:17.578Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bff6d04f739caab58da731b041cb7426", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:50:17.336Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d041d4611b860ec1d5cd4c3339fae10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T12:55:17.35Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4deca064cc2040aead35bc68e3df1725", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:00:18.268Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acf516f0ee75eddf86884ef1b08bdead", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:05:18.201Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d463fead05d7af4013d2a76e23c73557", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:10:17.82Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c318823d414a48e74e5220cceeff3ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:15:18.181Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6764902d9625c9b23e0692725521b68d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:20:17.824Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af736e4aca0737e748e63c610e033341", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:25:17.849Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "241fc20f3aa302ee7811c093b5e23a5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:25:17.849Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bdce4ade81b23c74273dd9bcbc9a687", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:30:18.174Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39632df29851246cd1a1218f0bc2cc80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:35:18.122Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c916df90c76f4c33b1168c0ed7a38dc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:40:18.281Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bda67ab7d9005500ff9098ae5c85e57d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:45:17.548Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "274ce87a8c09b2a69a1d4105ec3f43f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:50:17.824Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0edb4ca18d716a8e8c814b6e84a7a07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T13:55:18.143Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e6d63f1888ac2a37b8caaf615ff61f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:00:18.19Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53dbe0f0850ff25debeb0c4d2cfda0a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:05:17.828Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1033c40ad3f661a1caed6d27634fc0fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:10:17.777Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a2c49ee647d18504714ac12b5f04012", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:15:18.148Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6f744a0548e265e496d353d9a562229", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:20:18.117Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1ee2257e92d144e9f98bed5e32d8cf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:25:17.602Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7759c7741b0967260a57f9766f661203", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:30:18.37Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6592b823c15196e1d6d9838f9f11533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:35:17.986Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55f678124f561889392b6ecaa7866690", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:40:19.582Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ec0ede115b86b77413984bf1172462f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:45:18.373Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47d98a767fc1eb35e7ff1844a7b70a3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:50:18.04Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0567db6fbb582f6645c533243110dbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T14:55:18.083Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a6666bd2492f6c14895e0031c9053a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:00:18.449Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f4d4ed5489e49fcd4062e1b79aa770a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:05:18.319Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd900bafe61c200b7aa8d4f84fe7ba9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:10:18.232Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03662c9218d9107a3e7c59351bd8081e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:15:18.545Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a14000bf232296389ead401ba5447156", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:20:18.537Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e299ca263335bbdfcb967b221bff161d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:25:17.746Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37a99475539fa6dcd1f97f9ab8ff0d5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:30:18.449Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efaa976a19a280d006209f8a2ea076a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:35:18.444Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "deea4bc68f21e3ab430d56737cd61f35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:40:18.036Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37a143790d24318ac7de2126b7e4c48b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:40:18.036Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4908418ab0adf630f1c981ab971ad910", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:45:17.938Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7caba71e74a7689a6affe16c28df289", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:50:18.267Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edd2b698076443e09f3f78346271a1d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T15:55:18.634Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcc65f32b82ecda0b0f9a88d2f7c3940", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:00:18.209Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4eb8cc2a38777d4abb087115deb75600", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:05:18.5Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8c40baa3d05267fcb2645283daffc11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:10:18.359Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f90a012826910d0da9eba3ef217b300b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:15:17.992Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be21f994801c06b3966cdac72b2a7ed7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:20:17.982Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a29738f93cf42bb5f296af453ce3bcfc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:25:18.301Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e39bcc5cd62e49e89b9af3cd60200dad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:30:17.776Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0df8a7abcc8d37dca761aa66c06b5e3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:35:18.706Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe10ecccc2658067d44badd55d712faf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:40:19.108Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "792ef739dfb02d084a6c97968383988a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:46:26.153Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30439c6a871ac83c331c82467089ee10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:51:26.153Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "054c07997ee5c0f609aa9bfcacd7e794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T16:56:26.153Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0683912277aa3121d3e0b4d7f05112fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:01:26.153Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ff717d3c6d8a049ad4ff4af66a8832e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:06:26.153Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "086e8a817e62f0fcad5297de89950105", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:11:24.987Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a870179c79f06c0b52916505a52e205a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:11:27.987Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a20362886f76163517f20ad33636af63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:16:24.377Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07d974b35b158787c24e0905b6535b28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:21:21.284Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10c3f204df20b95b51c5e58c54dddc7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:26:21.593Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf03edb787f36afb0d2f7334a2616088", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:31:21.19Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a9cbf2c2591c28e4a759465b5dc2f01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T17:36:21.188Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e67abca7dc99e8e842e64ae71c37048b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:06:20.848Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72a9f338830b13000a2d7c108a63b8ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:11:21.455Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e2b93754a13da2087dfcc8ac9d8e84e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:16:21.012Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e4771b290c212b20be8aee6063653b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:21:21.481Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c743631a86a364d8096f96e47472a7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:26:20.638Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd06bfb4dafc4b928368ca3e7eb089c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:31:21.215Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97b7a80bb8e5e3972cea7df036074d51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:36:21.161Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a2b306d8c88c7b86c5f0a1fb32efe06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:41:21.509Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a152c1454cc4935969c00efa7de49160", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:46:21.316Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f78e8f1aae484cceb4e65f91199c8cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:51:21.185Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb7cef6283f6ef4de94bac23ef9b7c26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T18:56:21.6Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cdf2cf4678b0afcca96485cd0c008b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:01:20.809Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2f1364069b0f1a167efe570b0626480", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:06:21.017Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8cd8a95a7d77181db58400c314e62d57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:11:21.497Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "486aff5f3ad0964d3fdff2a65d6be188", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:16:21.382Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03d854ae612d44ec62aa59d80cf2d706", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:21:22.69Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c0dfdfa9195076d550bed3e827c6b5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:26:21.465Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e2b7595609882d2b04d1a7ce494d1d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:31:20.855Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6e851216b633ea708b495057980fe57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:36:20.741Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8629602fc9ef99c7a333954b3ab13d04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:41:21.164Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09c586c81abb3857c69d3c8f06485554", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:41:21.164Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54306bdaccaefd9c6c8305fa8b2ec262", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:46:20.861Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d06c97ab1b3978dbe1754fdcc8b13799", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:51:21.108Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e47681b688a25138ae444e3a7407172b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T19:56:20.848Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59727690f5a4e2e07a7fd226cfecd5de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:01:21.677Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b0d47bafcb18443a537031d317aaaea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:06:21.124Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "466c6aae0e21055a7e0114a7dc4c6353", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:11:21.572Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9074549637a548ef70f9359c4e71d3f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:16:21.167Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61587aa0032f0b9d11425d810fc6c621", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:21:20.896Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9599a6b25c50def50532996a7a98b6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:26:21.452Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "934de0463991995813171b2f5e0591f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:31:21.449Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "275f62ddd9edf499e6273e6a25f92d98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:36:21.276Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da71699601bcc72e54585e795b3e6ce1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:36:26.276Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f7a69bb08091e0b70988f70ea05b1c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:41:20.927Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faf2a7f8def40e8b17b7cc1be6ce551d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:46:20.892Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3349e1b0451f1b302a64160faf6e90e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:51:21.408Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c4de3b70fc9e6fabc8bb02f5fcc33fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T20:56:20.745Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f042c34f45affb6892e03583f675e670", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:01:20.906Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b541f6a6594c72cbcfd97662d21d622", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:06:20.847Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7737dbd7a20fd30f38506562e60331ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:11:21.618Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "203b94dbb891a3b1874203dab35ad868", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:16:21.315Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71147e2869ed6dbb2dec7dbc4c3f8de7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:21:22.019Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed75f8df6bb2e0d590b0fa46d03fe813", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:26:21.547Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1f7218c22e5fa5c32453e84fe1db941", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:31:20.856Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6013caad345a82672c0bac81e3a97855", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:36:21.116Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41c92df19b816fdbe347e2ce61860273", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:41:21.228Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e4eb65389ebc5d1e25c8491c37a188a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:41:21.228Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4241effc4d58b80b0158b4f5cc16ae50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:46:21.667Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2ff8983631cabae24727787370ce7a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:51:20.789Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd6d7423c66ca467c33ee873c5aec960", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T21:56:21.658Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f608d9f6943309feba7dd2c0e1fdffe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:01:21.62Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "677b6bde1e72ba6cb1514ee52a5c1687", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:06:21.22Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c3a1db6a8fb569c0c3ac54e208d7f25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:11:20.929Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60d9a7ac837840847ddec1225b3640ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:16:21.77Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69830a2d5e376d246eebaaf611b0c9fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:21:21.011Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7cc5b35e62cbc9c40fb6ae8fe2bf4a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:26:21.599Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55911fd0495bfd3b18522ee5d51f4b1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:31:20.86Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e346b0c0f8e1ae529ddaa445dfe9d326", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:36:21.446Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a8ca84ed6c12695173ad6e609722e04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:41:21.665Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ec4d95062b810b72d670ce14eecd177", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:46:21.312Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e580bdef94fec857339da8aa5ba10334", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:51:21.401Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75d17b00601d865d5ef5a7206c0dc638", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T22:56:21.269Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddd55413190f28f23062a5ffe4cf016d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:01:20.934Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38bc6785fbe67fd84470292869b07314", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:01:28.934Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4976bf2c36840cd127b850a627b71015", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:06:21.404Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9290efde33c7db3960863cbca62a3365", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:11:20.854Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "774ecccb5434e23608cfc1547ed078e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:16:21.484Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94a7bbe317b92db130b22e9e5b0e2e28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:21:21.491Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33f6a4d5e090a9ce6cc689a64d25d9bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:26:23.515Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c79b0d0a968fdfb33c9ae6c45d1bf0ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:31:20.912Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c89add9cba500ca0bed0c18f9f6db20d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:36:21.791Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "492ff02dff8e2607d80e787f24775710", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:41:21.412Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc9a1d1b372adde1ff86c2458f2e3496", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:46:21.872Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7dee7662efcba96d22e653095e25525a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:51:21.004Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09951fe7410e3988cc056ce7230517a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:51:21.004Z", + "quantity": 218.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "901dbbe56713a144872ef1b2c8fa77b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-23T23:56:21.825Z", + "quantity": 245.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77f08a014b2f3dfe2e96b380e03cc7ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:01:21.298Z", + "quantity": 261.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4e3859a2b1d56eae304ebb05c819c98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:06:21.796Z", + "quantity": 274.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10359bcb5f75e7d506774fcf36bf4a67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:11:21.637Z", + "quantity": 284.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04e092206426dafff20ce66d1241d367", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:16:21.569Z", + "quantity": 291.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bd645b55123cf2c79d51d22dc01a36b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:21:21.853Z", + "quantity": 298.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "995aae6ef276945d333aedbb8a711511", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:26:21.171Z", + "quantity": 301.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c384e3373052ed90fb84ce35660565f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:31:20.932Z", + "quantity": 307.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df708d655f224e67b725ca523fe2a861", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:36:21.774Z", + "quantity": 307.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5571e3ee3aa787a8e23e7aff2888d9e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:41:21.894Z", + "quantity": 306.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d17246661f67864deb81ad273381e15", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:46:21.094Z", + "quantity": 304.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "182ebf45ab9b66c8a64847f726cc9768", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:51:20.968Z", + "quantity": 291.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a4d3f388de7452060d3a0c23573ff5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:56:21.561Z", + "quantity": 270.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42399769b87206e188da25cb54b8aa11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T00:56:26.561Z", + "quantity": 255.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc13aee0243f10ed134c04ecf99fd3e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:01:21.795Z", + "quantity": 256.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f1f544a2442151e0a1ea06aaf214451", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:06:21.796Z", + "quantity": 258.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98e8593421a3c414d445e42c3c65ae6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:11:21.074Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9790b86bac0cb851731aac62527ad6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:16:21.514Z", + "quantity": 247.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "248997b7295e5ce44b4f58671f04de05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:21:22.858Z", + "quantity": 250.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18013cf77c336eda29371e189f1c40f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:26:22.858Z", + "quantity": 253.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b7d147066910540718cfd24b1ab6090", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:31:22.858Z", + "quantity": 251.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d11cb86ee8073495737a83ebd9abe61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:36:22.858Z", + "quantity": 255.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7211137c57f5577547925836c06396db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:41:22.858Z", + "quantity": 270.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7423d7d47a341e2c0b9710c2463afb2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:41:22.858Z", + "quantity": 270.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2324e4473b96cb41354d0947c4adb9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:46:21.161Z", + "quantity": 273.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c722802148ace42f9a657fd04248a661", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:51:22.082Z", + "quantity": 267.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8925ef7aaaaaba46d2d7656b8b2069e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T01:56:22.082Z", + "quantity": 250.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb7b0658afbec2c6615dc0cb379ba628", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:01:21.141Z", + "quantity": 244.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7026f8111a13df15e6e79c682b6dbde4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:06:21.62Z", + "quantity": 259.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "051225bc6a643f69bc1078bceab87f62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:11:21.521Z", + "quantity": 257.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83c2f939607de95be5ea020b5c096c4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:16:20.95Z", + "quantity": 250.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "371b811a2825b7f961539886c2465af6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:21:21.699Z", + "quantity": 246.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "449ebeae740a99e5c11d972b4b574f0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:26:21.191Z", + "quantity": 241.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b28bd89b86a4d056e0736e6379cd85f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:31:21.822Z", + "quantity": 233.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdd50f86ebd98203eb312210908730e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:36:22.192Z", + "quantity": 229.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebb14b84e5cabecae3081e755f55349e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:41:21.863Z", + "quantity": 233.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d26750fd89bb21ac3d417c9f5d77e2fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:46:21.177Z", + "quantity": 225.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04cb5a4139d19cc1511ad6fedfd26e12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:51:21.537Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bd370735568af4c570187a709579de8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T02:56:21.176Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a80205cb4c330cd96561acbd5ba2c579", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:01:21.113Z", + "quantity": 215.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb009e85603481bafce3e503da46b8b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:06:21.803Z", + "quantity": 215.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65943173656402ae369e16436f5402a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:11:21.961Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "254e9966f669254216cf075de7acd118", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:16:21.643Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c15e919642f4d8701605c0490588efeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:21:21.579Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfca98c65a084ca7af9c03f7677f7ab7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:26:21.279Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62db3bd987d863bacbf11bb126b76f46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:31:21.846Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af9b13211cda43c67c40a732bbfc4702", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:36:21.615Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a7e96f59aba75a8555de9cf45746c78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:41:21.886Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74bdafcd1194b50e9c7a093b08120362", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:41:21.886Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fc2ba1c753fb4747d79666e25e27721", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:46:23.074Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c8b054345316e644d3f9c7c4bf4601a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:51:21.864Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4f92eb36e8371c9fca4571c7d5b0ad2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T03:56:21.82Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4725844c3286343b96d5a21904fbc6e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:01:21.37Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d37e559ab3ef39505f0d3d390111f11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:06:21.37Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f059650fcdebb30c4e24317161d27b0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:11:21.37Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9e09149e1a66081b26ed03460aa6c3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:16:21.349Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cc38a182452b30da1b6d2df758e0f18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:21:22.008Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdf7f8955e0d789f0856465d3256555b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:26:21.692Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ca5253bc8dba3265cc7ef92223b27d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:31:21.784Z", + "quantity": 206.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14ac3cd766f7a76dd7237ce65136edf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:36:21.446Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c9a20625ca9c0307f5980618bf324ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:41:21.77Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b236de4255ed3917249bfc0b4cd6686b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:46:21.474Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7859570c735371f6f2a54a681c5896e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:51:22.086Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40e2f4a08a0301d891e43fd35b43a491", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T04:56:21.812Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34c084a2ef813ea4f7b37feb10b4cba2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:01:21.442Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03773703a77d991a7f6c70923ed38afd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:06:21.235Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcbd54fe2e617e50a84b07d717a52901", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:11:21.674Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "980db87f756f8d73a97e3fcd9c36dd0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:16:21.922Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "861bfe109f9b6496cc4f4617cbfa5d59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:21:22.065Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d28395c1e0663a1468e748ddb1f94832", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:26:21.474Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67705d220044cf4f3e263269fc73aab5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:31:21.855Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe9b3a19f88a667122ebce71871a2477", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:36:21.305Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a96b1c3df701e8922fa39056f389b0c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:41:21.454Z", + "quantity": 206.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23ce888683768c3b73472052c90bb15b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:46:22.483Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e91d03e368ca1639145253ed4c2078c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:51:22.04Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "979bb35f96b9be40fa3224ece908e5fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:51:22.04Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e87ed99275e485a2215566a0652c563", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T05:56:21.699Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b78e9e70e82d0ec36f2ce394efe928e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:01:21.569Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78e3d8bb243935253318bb48c29a2b8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:06:21.305Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "145868e2dc013505cdd2fd5fd1e1339f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:11:22.074Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f69526d27769f17d3af2dac1c8ae5a71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:16:22.054Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e4cd585f45678603f66f786cb99ead0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:21:22.113Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efb18c22149cd56764ca2e83adcbb26b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:26:21.201Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "106ca2aead02293abe8aeacd6a08d9dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:31:21.291Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "980cd606704c7838125c78e63a2cce71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:36:22.081Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "260520fdbf7c902d915c1f38d4d8057c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:41:21.692Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2ebb7bf866fc8f02fc572d3f05be667", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:46:22.079Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f4afb470fe50e41687cc33f2ad8c5bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:51:22.439Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe7ef40caeb5e9279bc0867c2bf85da2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T06:56:22.125Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce6993d73194153fecf39e9cab58b27e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:01:21.973Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72e8114d37ca0edb5f25114475287d9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:06:22.222Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d76e7478ba7c1d0a897f5f18b1af76a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:11:21.932Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "889a92a5e3ef8a1a745c8c1f77b1ee6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:16:21.97Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4acc614a4cf899d41f454104ded26b57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:21:21.861Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ead05b51f1fce6564853cd303d46eac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:26:22.071Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0786e8767f9848ee2aed343b6e2a281c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:31:21.289Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8dcac41c9e696390af0a382099697486", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:36:21.967Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff918abfbce1c1e098b4ecc15ee4df3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:41:21.719Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72b39cb04f148f1a1d6448adc7de600a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:46:23.213Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0954b513f1f6f5a67d883ea17924a90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:51:21.379Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19ba019ff6bbcee7f7d754b9bb8c0c83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T07:56:21.97Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85e58689f7bde5d83a690107c83bd61a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:01:21.588Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86952021d83fb9f5fa46ff6f4fc71541", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:01:21.588Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28cb3ddc46a53980ba5e2bae20e704fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:06:21.897Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc1c2c8e4ec28e57125a812c3b4a5d28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:11:21.877Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bf63c2dcfa79266008be2c2c8239358", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:16:21.464Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dfb63d123439e0115e3d6ae8de4f642", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:21:21.932Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4f4794cfc38b35dfa42850e36e1e916", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:26:21.981Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bb813809e287d1946221847fa15fbd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:31:21.889Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a7b3d0de3973b0378d62c1d51e040f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:36:21.318Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4210df61bdd3d492703c621cd90e099f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:41:22.164Z", + "quantity": 54.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "706abb5546742537bdff6b730695be68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:46:22.156Z", + "quantity": 44.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95777ac024a2d1a1610fe4a7dfafc13e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:51:22.082Z", + "quantity": 46.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bf2073be0c39a947a8cd2498acbacef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T08:56:22.223Z", + "quantity": 49.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f42acc52b5b4bee54d5c5621174d15ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:01:21.572Z", + "quantity": 48.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fcf9b60935a1758650e10e536db8dc1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:06:21.66Z", + "quantity": 49.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c8dddff3dc01b8217ab407c46be47bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:11:22.171Z", + "quantity": 48.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "171d523f10e5596b2d6a5853121aa818", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:16:21.775Z", + "quantity": 46.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe97f545cafa3862ac25e280f6892c1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:21:21.343Z", + "quantity": 42.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b84ee6970b68a0028d228c0325eeaf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:26:21.836Z", + "quantity": 43.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a09933cdc0deb8dad898cf1bc7513f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:31:22.198Z", + "quantity": 47.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d323717cdcea01200c72f17d93c6564", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:36:21.608Z", + "quantity": 53.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "062a7ea93db18bb8580b6832e964a103", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:41:21.602Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8f670689fa28f4564dc18af1f899b50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:46:22.807Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa9f47a55ce96a1686308919830caa6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:51:21.796Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a839b448c4e71bcc08d059223a33f58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T09:56:22.267Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8257615c7917a936e4831dff8e8213b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:01:22.066Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "303dce93b349c48b8b87d90788204c61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:06:21.405Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd1c0904bc69a10a3ef971b7e58ed74b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:11:21.928Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abcb2bdb349d9683d32a4eed237a208d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:16:21.978Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16906a1ee9b2ff4e70739665c744d07f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:21:21.835Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8267974c93aa7053faabe349b2441a8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:26:21.974Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d32bebea7090a68cefdf7c80e8f8c34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:31:21.891Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1f683a60c08ef1571d57c6d3db71aa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:36:22.08Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a053faabf307e66d0080ee86d2438b32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:41:21.362Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60841447a7b5bb9bf51ef3c7acaac737", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:46:22.27Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15f74737e691edd308856f80e257710a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:51:21.848Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c91ab66393f950f64128c1f46b5bd512", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T10:56:21.865Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66a45c543cdd7346b4bdbeec767c1815", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:01:21.883Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c293c50530561028b7c4b2aae66b0b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:06:21.902Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34097aa058844f6781691fe244c52c3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:11:21.772Z", + "quantity": 48.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0d244e079d8000ba96bfa5335d49f1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:16:21.481Z", + "quantity": 46.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4caec88eeabd430cb059b697221a8a64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:21:22.114Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c9593031c3d62df89f8b866a4a23459", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:26:21.522Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f48465299ac433aa259503e3286d9628", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:31:21.997Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd56c1fd2bd9ab10d1e9793ae4fca671", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:36:22.345Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a0fc62562321f07b314faf5283df572", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:41:22.212Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20bb8353b54894789fee9f439a670d5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:46:23.061Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e762861befee4d818da647554fe258dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T11:51:21.737Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "368f9ecb72b4dfd7b8991b704d009ddb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:11:21.986Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd34e761963cec43c42699dfcb23b330", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:16:22.166Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f4a7bb12f0997a5c4632a98035607b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:21:21.979Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b9ef1793f2e1c29d8e732451adc36a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:26:22.167Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "125559ae30a28c1bef1a3d7191e99206", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:31:21.735Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d25b08edd622d3191b2fcffa7f2903d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:36:21.655Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bab94b359f3311dd16e927cd93af959", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:41:22.282Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2425bb4a6ac5173b5f7d5476652514db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:46:21.714Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43c78291104a0fadce73e4cbf3801665", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:51:22.176Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e557227fc19b08de40da9aede53779bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T12:56:21.957Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3cfccb3c578d32b506836527128a406", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:01:21.725Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3141c8f7d1ca9ccbd90efeede3b3f272", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:06:22.076Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bdbbe91d0b54644acebc7f96a947f4b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:11:21.545Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3decd9ae15784becbcd2160e6be3a103", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:16:22.166Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99d405cc6eb5e49bbfc98fa2990037ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:21:21.976Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1dec4fa457c88dad2a57e11ef43b4aa1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:26:21.785Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0329466b3c50182b7aa206032e51c1aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:31:21.715Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faf29f5f957c80aeb9a97be68770704e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:36:22.475Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6307be8d3c4726f5512e4b8a340a89a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:41:21.562Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f42e1a1557edbd21326e8c2e0ac5c06d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:46:22.361Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a1fad4171dfb76415f336b454baf9ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:51:23.69Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f497d9da3ae52ecd00821978dc7138c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:56:21.749Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "866102ab710ef674eaf0d6ceb1f8fc82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T13:56:21.749Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1245db109c8c5e2601f1873525d77ee9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:01:22.218Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "099abc3eda6f716e52ca913f0a93beef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:06:22.526Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ce961ceb3fe3de88deeb0fd59a4179b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:11:22.365Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be529c9b64e3285177e4be4076b9866c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:16:22.213Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d98d284062a865f170e41fe6137166be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:21:22.081Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50af0167790085809152c7efbbd1998c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:26:21.649Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3839e96c96c109cca9a5be4b01cdeb1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:31:21.598Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26d6bbf21b4fcf624d45d3e551416f57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:36:21.676Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af4fec7ee24385ea5e9b1c297a6cd9ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:41:22.144Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4c8cb0d4dd7f8494a4475c32f824d6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:46:22.184Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62d21bcef687bc9b3f3e2b8c1c8abd6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:51:22.183Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9dd60e005cac5f63cac35c680a55c5c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T14:56:21.995Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01a58daaa39c16fb03952215bb69e3fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:01:21.542Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc2492908ae6e4b77a73c00e6ea325c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:06:21.632Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e16d3641b6554789b57b8ae801cefcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:11:22.398Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22bd2e0027d2e5a734ceb92a816e986a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:16:22.258Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e85b3fa913798d498f85585fdbd2af1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:21:22.126Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f397c6737d5f9fcdc61b0295d71c6dd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:26:22.253Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3999993bb1ea2e4af96fab7efaa90cb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:31:22.182Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50d5c9f60dabfad2132ed9806a0ac6b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:36:22.15Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7e050ef1148db4019cd368eb8e8a538", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:41:21.598Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "317becd2c5bd6da266eae806a6e413cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:46:22.316Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebfa94b2b4f47672f570482a309b0b57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:51:24.188Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47e2c6fa944430a665f725e2a3f9e420", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:51:24.188Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "409d9ee691e724edc60cccf93ba87141", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T15:56:22.296Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c25a2e6434bad6fcd75aaed60af2498", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:01:22.424Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "908886ecddef12ee5c28ec5c44f778cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:06:22.009Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bdb8c564a0ea35ea772c3b618246a5da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:06:28.009Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c7db83db893565870fb21905b0505ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:11:22.27Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a821002ce768f7df9c786f22e610fdde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:16:22.266Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a19be51f7c0583d0e3b53afcb1fb7b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:21:21.785Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9d0bf1a59fad678b7885524796f9960", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:26:22.488Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17559c6f19a0fe066a85bbc610355472", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:31:22.117Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5bbb9772cca2a84e81ee857afe819d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:36:22.492Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c85abbefa8d2f847cd84dff049d221b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:41:22.123Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "417a1aeef5bb658c4df2a5f561b0500e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:46:22.086Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fde395d03b0c762bcfe7984d240ad4a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:51:22.505Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5b162163d5e1ccd2affd5b829fbdffe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T16:56:22.363Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae90a3473f7d581190be4ad199195efb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:01:21.883Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3247ded14ec7a150b0ea3961e80ead4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:06:22.602Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27ce8dd4009e110a27726276cf65dddd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:11:22.562Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcabdff27f57ff8c371186e3f6a55c6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:16:22.751Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6230a0b0b7b16b68802dd52a8a810fa9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:21:22.344Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "238a5379fb300c48e0835be4d80771cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:26:22.526Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b7006a33358f328ab1cb2ef828fa8b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:31:22.222Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c14df96f36e00cc1158e94889e5a92e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:36:22.505Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcac115a0c621c9f807b13a7d0f1acce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:36:22.505Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1258d07fe98e2b91c493d02bc9c1a519", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:41:21.911Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c6c90d54f5f552bb8727c6fecfa664c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:46:22.167Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fd3bcef11f0b6a8c45f1c193d0f3c85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:51:22.599Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3049bc5cd33f0c21bfc97b2e9ec1a14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T17:56:25.93Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2fbcd510fb28cff2cd9f970e4b4bebd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:01:22.185Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "758d4c066a04532720e9ab79258c5d9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:06:22.297Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b67d1a85ccedfb26c82590ffab5f5ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:11:22.902Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60d3ef2b4df413543c9de59c1869cb79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:16:22.258Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0817f435e60e8a7e60b94c864197aee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:21:22.549Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff1ab5190b37780f842b3d6210f322c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:26:22.214Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2624a78aef75207a30599604f0607e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:31:21.814Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c876d067824de2a31a6f863470099a1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:36:21.998Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2f5bec8fdb354eb8796076e7933a4bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:41:21.998Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6fa5369e73097ca4b6fb132fd9dbb50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:46:22.602Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "403d2c5f3420d2771a899301b2a7b507", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:51:22.375Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0056357ee170b87f18d929d9d2f2844e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T18:56:22.003Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5b02ac33a4b0902024f2da562b497ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:01:22.162Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5d9ead221d5139fe1a56de76996530a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:06:22.651Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dea11714b1967992bd340679fb1cfad5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:11:21.849Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "617a0bcd187d2d4432005533d7b305eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:16:22.753Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faa24c2552d6cd95701dafd16b2ad8b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:21:22.301Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0469d0e5fff656392446f91f22dc600", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:26:22.207Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35cf7389a9decefb065f8ca136b95d74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:31:22.348Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "394da2884ef6edc28c11a85e3cd3dd4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:36:22.237Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cdea19c90b9bee6da75990126263117", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:41:21.777Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54aa4fd1ccaafb2f248906711c8ff63c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:46:22.657Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15341edbe01907e64deef522db16a4fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:51:22.309Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8c12fcb9e5e81b4c04988736dc838f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:51:22.309Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ff3e0958350841e8f4fc4f5ae71b9c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T19:56:24.399Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a027afb3aabba6718dc6e844336f0c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:01:22.546Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab4fdccaa44573acabbc447bcdcc6486", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:06:22.87Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b488b8c45da24a4f3cc39118fc7b70ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:11:22.001Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "206e8b748ab1313af164199d8248f573", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:16:22.509Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73d9e3480b1c073a833f0a16a3f03950", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:21:22.054Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "106a3de1e27ab3dc5606b2991f6ec8de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:26:22.012Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3cc89996c453fbd965f7d8748a53b09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:31:22.753Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc211be194af09988e4ebf958ec148a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:36:22.72Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b19e53a6f9cad991498df4d2e0acb935", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:41:21.767Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2657140171b7e2007ea8835a0d8e13b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:46:21.748Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "805c47f8b8e13ce523bfcb3b4e56c5bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:51:22.066Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fba2c3ff0d6c4ebdda4c5474e5e8904d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T20:56:22.055Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bcf51fffb40f5de8604655aef4320aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:01:22.034Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e581768836f1ab3425f2d07f66b2d45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:06:22.233Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5087c3cae69337bf658d2ec4623ca6e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:11:21.831Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "393ff1946c458d060703ad0cb9c0fb70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:16:22.242Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56409c5906b6e4bea3d7fefa22642e0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:21:22.45Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b29561e784de05c0ffb2fec84023d1a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:26:22.881Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3af8d15945b108c53f8c95c585139d30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:31:22.441Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b95c40c3b42417e841a3d8cc3d518919", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:36:22.767Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87a205cc788d8ce351c9cdfdda8ac1f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:41:21.825Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97b9a2eaa31ad48a556c1f5bea4ce70b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:41:21.825Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "090cc3e7d98d44ec6f3e8b6569fd2598", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:46:22.173Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3773bb4aa0d546312ee2452b4f3b74ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:51:22.671Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01258eac0f9da1632f497c8b0d2db765", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T21:56:22.249Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f521330fb3bd5dfee3c73065975d340", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:01:24.357Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f040cfd551736dadeacf8d45febba8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:06:22.549Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98a40743125a773b0db1e9413b6f3a1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:11:22.519Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1f60037b8633da62aa0f7a67ece395e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:16:22.596Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a74f17a5b8877a3d0ffecff8de794f3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:21:22.352Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0782015ad66958c0b4dd504faa34b3a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:26:22.157Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "248cbe61e38fb42c2287a555009370ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:31:22.005Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96d8927bae2bf0b66b85dfd2c24f1dff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:36:22.507Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d3e85404b5d946b5e79c714d1430c84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:41:22.653Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "440e538d9457d4bdde442fa32bb49c9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:46:23.371Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e234f4e43bf7feca165b1ff31eb041ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:51:23.954Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1100c4256e1d00c94eb735b1c9df7630", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T22:56:22.805Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29c4915727cf944f0368df200fe6ffe1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:01:22.622Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef6772f91c3bb8b4a28e5507c55fb824", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:06:22.301Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7d01100d8256e87d056177d990e4ca0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:11:22.23Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ad86400597c8e95865a1fec6106eac4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:16:22.252Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67a56b47e358fd58ca2af37fa011bb58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:21:22.517Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a25c912a980a56f48f201a729573fd81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:26:22.684Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "254663a2269b0906becb96d3efc8ef7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:31:22.884Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83d192ccd1bd2b9a28ea354ae0d5024d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:36:22.104Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4aa89243b1ef1914d8dbba003077f760", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:41:22.734Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e5de98bdf192c0e512570e162f33eda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:46:22.65Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de485afddd378ebab9fddf0187eb6c49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:46:22.65Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "461ce86ba8455635771614666358d389", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:51:22.581Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79b96e94848c0da135f499351983fac2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-24T23:56:22.131Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "452c9be25c4abb0b3dd770341eab6441", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:01:23.225Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19550ff299fb068c9805450ffba5babc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:06:22.757Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fb99df3371c937c82050a74089cc1e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:11:22.392Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "215f847f6c7dfe811f5190461075dc7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:16:22.609Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7a2c83d8a668fad03823a7ea2c282a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:21:22.877Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73821e5b138e8b6400e53200bd044059", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:26:22.506Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c62f9ff3734888e6054dea93be8f25f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:31:22.326Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c05d424a18f59d457c572f7ed8aa225", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:36:22.663Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "486f042c44799d0afc9779647293d9cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:41:22.158Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2edcb3b8731c2ff893f6e69d301f2bac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:46:22.745Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33090701040906e5b5e83a91ed610f47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:51:22.141Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01e3daed1ae4d92be50a238e1627a3ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T00:56:22.599Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec49b6f1b33f76f1ec4307b26cb744f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:01:22.884Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75c47fa572fffbd96a076ac87f9bc845", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:06:22.772Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9bc1a6e976e485349ad1813c5d47721", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:11:22.791Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bce0bf7d57d8d67e31d1cb903a9011c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:16:22.199Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "272474612670317a5c88894c8e8f6ead", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:21:22.51Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c63418b90bcc182dd700cce7242d542", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:26:22.35Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2cbc819bd57dc220ca3a69542de1757", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T01:31:22.806Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4c0b9ca5167055c5bc23e557f442614", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:11:22.177Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b963e6d619c1e087118bb903fc3c194", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:16:22.42Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "312affe9ca69aa3ccca4ea4b659b6e52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:21:22.501Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "180d1dc7d08e5932f1329a640f243101", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:26:22.424Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89c3201bd744da1dfed55c511c4cba2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:31:22.479Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1aafda64d95aa075d079a92a67f09c84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:36:22.094Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e58556f0c583289aed0406ca03e4023", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:41:22.78Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "563d18f3e69ee2bf3f2b771f340f404a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:46:22.78Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4751c9d6195cb350b0888d7380b487e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:51:22.569Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f408d932eb1707c97e9c7d6ba3ef475", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T02:56:22.71Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6f83fa8fd351ac24b0dbb87e47f2ce0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:01:22.772Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "875f51c151c5988edde529a85470f7be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:06:22.334Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02c7be9ba1079f1ab5c73080722e33f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:11:22.488Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edd1aa02fdd131c341209dda6235752c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:16:22.885Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c30f386a90aba73e6babd4aaabae823a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:21:22.598Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c184a8c9ab2f17d1684ca80314313f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:26:22.803Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "537d700114a803411bc4023086a1a215", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:31:22.508Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b1dc4d155c001ee2277636365adbbb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:36:22.955Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47c2f142a4ca1b8b7732bae46b59fdbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T03:41:23.71Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38628a403bf30a02d306ec8a94c9adb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:11:22.531Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ced15181b96297a68be9078f3d02c989", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:16:22.306Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e505d87e5e7856f1535e7a99c5a52cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:21:23.021Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0697b3d254aaf2f130a33f922213a9e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:26:22.316Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01c16d667d7b6ce3ef8e129c4e71cdfc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:31:22.112Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28fccc16aa6103408ea6b2d2384b7c5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:36:22.958Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c7dfb2859d9e2cb8071e4372426b64e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:41:22.632Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "572b269adc58aa154e8ff2b0c977ae85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:46:22.646Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51ade068995b8749a51de7e0e5673727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:51:22.822Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e034ff89059421edc3ff70c2bc56be4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T04:56:22.417Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e4e9197d40b7ef8f9be3f874504c231", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:01:22.833Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "920177fdff661596e08869016f4688f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:06:22.58Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61622319857eb76d21132e38452468c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:11:22.71Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b43b578a80bedb1ba42234251c00a80b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:16:22.757Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dffd7f8359d58c82a28166f0dfc443d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:21:23.003Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "530acebb3a65724c85da5e6ac39cc43e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:26:22.971Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5271079289ca170133a71df5dc9cfdf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:31:22.49Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c0cb7859854b322157ac8cc54170715", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:31:22.49Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48d66e5ebb7b35ae1e3bc814f66f9fc6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:36:22.238Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54ad5fa9ebda67d7900e705187ac5f5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:41:22.745Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05af3ca29b085d1ee975256133b587e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:46:22.576Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "477c00e1d5539380b585cf9e2fce5bc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:51:22.21Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81b57f947768f5f3ab742dd6ab0dcb26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T05:56:22.913Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "164fb0c1c2adc50832eb4992402bbe3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:01:22.83Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9b41abe9b588b5daff22f2f423c2497", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:06:24.506Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "720f788e52562aab2c14e6689963b562", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:11:23.192Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2914a684bc192e8c15ea4e9e83b26f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:16:22.602Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "921349e1099113c789a336df033c72bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:21:22.774Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee96f8ce034cdb1e49e092e0e9434cb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:26:22.932Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bdce0c265a89cb70a6934a406fa0afe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:31:22.746Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd4f23705c9505b8dd2f56f3768debda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:36:22.823Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ee2d2ef58620a968f642b33683ab193", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:41:23.168Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3582ac12a08b165222efd3411c11f8e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:46:23.031Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9346576a648f9331dcc64ae6afdbb14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:51:22.973Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b292c94d15aec261d90a0e5c21b25849", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T06:56:23.145Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88036f3a5dd14217be63e62dbbe341f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:01:22.515Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23665934a49cba6f5e378e155a66e188", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:06:22.555Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59b2b3b2713e24753fff92444fb66e37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:11:22.774Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "327b50348850fa2eb1cca0b97668fa20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:16:23.256Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06eb173a2ee1f243bfd6be6c54c0b6b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:21:23.037Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44d76a1fa8e4ecf62feb62122d426f63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:26:22.567Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52bf516a815365b1358293d1444fdfb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:26:22.567Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "094eeddc6df8de0f4b63962f06c6d1a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:31:23.168Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74e91834e8486542bac5234fbbde28a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:36:22.937Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd82edf23207a7a990b0ca1e383761e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:41:22.729Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66484ab68699e11c469e8b71612f36a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:46:22.869Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a34e2841c30d8171653b1b6ba23635b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:51:22.82Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "836bb658b8900783cad7d1159b65ddc3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T07:56:23.272Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d922459cf13b2ee828c57c68a8638fc6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:01:23.143Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b0308043a55f42ebe27c2abb5d2bb35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:06:24.273Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e266e8c5bd639288b85f4bbe891eeac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:11:22.452Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bdedca478df6c0bae467ee6f751b771e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:16:22.632Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dcd9b9217f7330d447b3181e4e01da4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:21:22.902Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b76772c3083f75bcf4fc8ecf373b0413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:26:22.654Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "986800ef81323cf1cafebefa93330978", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:31:23.145Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b16796d2ddb7f94b5ada7fcbe2daa6c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:36:23.175Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1a5c6c91563db73a9d8f34b7b7e21a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:41:23.345Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4087cdec0a9b3accd1095976bd91df16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:46:22.777Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10840f230f8fa85baa75caaf323c6a8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:51:22.944Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a47924d265c06ebe303b60af0e22d205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T08:56:23.162Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1734ed5e85b560b0a933f2a23d6c5d96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T09:01:22.964Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ee36208631b574b1560c14e41bf6604", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T09:06:23.177Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "973653f8f4d7a5b4cf935d95d14f9bec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T09:11:22.616Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0368183760a279cd907ed66cb5b29c39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T09:16:23.136Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78db25354f3c15161b4c0b0fbfb1a927", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T09:21:22.968Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06cf9ca1bcd186854e3a9ac6938aa67d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T09:26:23.257Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2626f93b5842c519cd1238e0820f4a65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:11:24.081Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7ab069d67337bf8017f611058c7de12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:16:22.897Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5051ae24e44988004d9cfd2d9b55c94d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:21:22.606Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae8ce7398f83b4f12896f0791bf8a406", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:26:22.843Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b2c90ac77c834993ed10c9d9b7a6960", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:31:23.034Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28c7a90cdb75d7503dd69534a1be028d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:36:23.121Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b6a2ee058ec04c30ffbc28ce0ee40fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:41:22.99Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54cf62c82d3fe20e14ed222d559e6838", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:46:22.617Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "779872cd07e24677c842b3baa16193ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:51:23.225Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bf2fbea100045aaa21d6141de249210", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T10:56:22.477Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "776ef3fccbc40ed9f434f6ed4a8b6c1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:01:22.674Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ccabe2273d1679239f9b0462b8c0eed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:06:22.995Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da753e001fba0690e4c93ef4c2a783f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:11:22.914Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba1404a05111c0ecf0d1d10e681e2462", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:16:23.035Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf230c409e31a1782b4b181fc3c5fc62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:21:22.764Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3eeebc8cfdedc04811a8e3f279e0715", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:26:23.025Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9dadb30486c392be406e85ab9953ad82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:31:23.094Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58ea4a8e5cacdb37e3cda7f04174b233", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:36:22.745Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad036dd9d5cc4a6814a739944433adb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:41:22.725Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb5106fdb861c528ed0e39b142fd63e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:41:22.725Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5a2d4822608c446a48357879fc949db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:46:22.566Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e349666df2b9d37de1785a23c42c39a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:51:22.494Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98feb557b2ca7fb6ee795dd36e00674d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T11:56:22.714Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34a9195b4afa201fe55f33d58d585630", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:01:22.525Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a99b1d2ac7aed99031f135439d170426", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:06:23.224Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "382a31afa2375d0b69cff9bb6c902f2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:11:24.384Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1e02e0b9bd05d716ae1f31295d9abc3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:16:23Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd27be3bdd16ba39bc7d1771b4893ca5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:21:23.231Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7338d3db941bcfbbdfe433f77f5928b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:26:22.47Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d27721619739a157be3eaed06861e01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:31:23.079Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4e1efecfa2793b08c56f4d9936ef0d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:36:22.618Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dd03fcaad884117c897ac308b246e5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:41:22.505Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4aa71491ece7329ed682b23b4531caec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:46:22.7Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed89159afbd5f9f23f5ba9e95b1adce6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:51:22.987Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa10a457719af68a13aeef274e5ba3fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T12:56:23.288Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c90a69614791bbef7fe2cb23100cd3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:01:22.564Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7dc4e1af57d32958642346092709cde4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:06:23.259Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d20463aed01ca9d93174c538c31e0b39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:11:22.617Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94a95493ea33c1b56c69ed50e5ba402a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:16:22.735Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bb81dfd6f824a857e3bcf86b60d4249", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:21:22.632Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9066a0205a6ec3af657d8f107dab69c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:26:22.939Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94e3e1994cec442b39ef8843b6571fb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:31:22.688Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d42b014d43af97611a10eaea6207df02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:31:22.688Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59299425a99d490db57a2b85dd48cae4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:36:22.884Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff5c5b7aee524738df43339b2129c35c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:41:23.021Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "deef7c8ab982b015f8e5a9a7d11854b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:46:23.19Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d00c89e08a3729570f79462503fa8b14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:51:23.259Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76127e60a786f36097096dd8cf1d4b04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T13:56:23.505Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b21be798a6963fd477992ef73294024a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:01:23.274Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "518a35a2bc03494efc2e56177b6167d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:06:23Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b5dc9a85f18139d8b0ec2da9dfb05c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:11:22.62Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91a8b80ee966312b8131c3dd03f115d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:16:24.367Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30d44b40aa6b1a8333ac4c2e9b5ea587", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:21:23.273Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6fd9038700e0b11a216eeb952c054a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:26:23.123Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f23bcc1ecc26c89ebe6e5ec9731ab06a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:31:23.309Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a8ab8bad14fbeb001ac5030acfd3cef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:36:22.824Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "787f90f10dcbc6e49012a6a7fbb1054a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:41:23.532Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "290f3cf8b6f0eb6932e59e23c73e5d07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:46:23.469Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba38cf9e9c9da26a7832c103e1e9ad13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:51:23.487Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eea82394fea2fea2fa49825e0f07c5ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T14:56:23.005Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a1b2db995743a72cf0ab6aad2628b8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:01:23.203Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf8c39d035676910b7fb60076a2d324f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:06:23.222Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a74bb8a3c9cb1a56981395db2028ced5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:11:23.026Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "619bfd0bc1da2f3e040864bbec6c38f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:16:23.304Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1d970ce9d28f8b909c97dd501b98897", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:21:23.192Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "702a5190bb94f699d72db850d8426bb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:26:23.126Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fa1369993270b4988366bb1aa0a1d39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:31:23.447Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "912b181771ff49b7bec74dc81fc4808e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:36:23.447Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cb966feb9a88b1e4179a40b80c5412e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:41:23.543Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf8fb18fcf1b0366f924cdd99d3608e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T15:46:23.232Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b2a688d6fc35135a77886f39be6cfa4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:11:23.205Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6605a28b56f552bcbcec921cceb0ca5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:16:24.776Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dd2df6ccd5de17c920af1ace22aa9ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:21:23.359Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e31416ff1b8f7b0afd229ac0689ac2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:26:22.946Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c39a0c0fae1c54d448a4525194c4ab2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:31:22.891Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57a7db8a21582bf600f956f222781888", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:36:23.217Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74af985dfc1bfc6ab3fcf998a3c01f8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:41:23.044Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "318c45ef71b0a8a2e6da4c4778259505", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:46:23.537Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78d1a651bd1c20a96ebb5da80971c2b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:51:22.934Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a654c1ce2439c644a764b4f020377167", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T16:56:22.729Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bdfa7a5c83e76f91e1390942a089e529", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:01:23.544Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52639a1f7471241ba10520f194c920c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:06:23.247Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ad5baeb94f5f709f23debef0b2e1e47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:11:23.08Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c015c9158d95bd6cf86daf17c5e6499", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:16:23.585Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba52f623ff2b763dc404645cd0467cf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:21:23.109Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7c725e51e25ff29c7de44c6819e0e47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:26:23Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f69c3745459026523d95e59e25ac4f35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:31:23.369Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0e889e30cb86e687b6368499390ee7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:36:22.857Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9041361719c119db61053eee2ff7854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:41:23.034Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bba1a2074c22afaf50b0d8744e9a8c92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:46:23.788Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d9c2ad7b6eb9aa4e0198144a363881e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:51:23.437Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "124d4c6f81d9f7b95c0f1f3eb0fc4a23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:56:23.614Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb594ea16d09bd0e07a54f7345447c65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T17:56:23.614Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7d9155771eaf088b654171ab9845443", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:01:22.74Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "025a512c91f38653d787b7fbc3f87319", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:06:23.577Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ead75f3303a8fc822f71d680b579d469", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:11:23.125Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bd2a64282d566db18e31f0e72c58e22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:16:23.308Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "401d3fcaf38b7b3342526ecf0e087284", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:21:24.757Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "640cb6a627006178e9b152b2f057f3a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:26:23.361Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc8d0caa8b0cb5a3dfb24abee09142e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:31:23.336Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80555bef9d89f12040a992ea36b07ec4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:36:23.124Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed3fdc8b73d0c2fd9213e967e304b85c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:41:22.74Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b22dc525468aa950858b20e76575c682", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:46:22.987Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4666022870e92e6985d8b9a936360d8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:51:23.396Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "906ba7a477bf4cfd22db69d20c449d8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T18:56:23.492Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e2ed5247c9302d756df320b96f6b6e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:01:23.261Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10fbb2e240b02e7fd625437864b5612f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:06:23.599Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbd7097e0c23c5669b486e5373269123", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:11:23.615Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96285d75514a82fd396f42b0cc0e6ffb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:16:23.501Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7074c1bc76298a9ea401efa557fc654a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:21:25.098Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95a2f467c029b45584432406506051d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:26:23.335Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9a924f5cb7c0565f74ce66c03644bde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:31:22.774Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d77e13f4e9e25a72f250004b6f514c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:36:23.214Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83d4b4da6673c991e61674dfeec0ee0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:41:23.121Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dff4b4be1f71d012eeeabd012e8973d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:46:23.331Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56c5269960013808b79df94ff35e2844", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:51:23.392Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fcc5eadd34fbc44b7f21db6b4e97e04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T19:56:22.775Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "644bba0319923d4e8673a01ff35c3589", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:01:23.188Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5e1df0fe7aaa678d35361cddb5a4e91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:01:23.188Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fea17bfb49ae0f4c8640b923721d20b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:06:23.319Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82d5412e8a709256bf9eb9bd3dcf55a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:11:23.244Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ecaf812e1bdc332809dcac8b405dea7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:16:23.185Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d82c84fe72df3c93ce5c53306ae0bdd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:21:23.446Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b4f61ef25ee9dd23448017f24fee284", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:26:24.027Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef95b37f87a45d45083546aafba7f182", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:31:23.529Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8689cd18ccc7076a9e55e62a727137ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:36:22.819Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dd87ca8665594b6a0ed0b1be87f614a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:41:23.084Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cbc7075f0f4fe3b0839215e81ca98c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:46:23.223Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "844b8cac71fadd9c00dced051460bcd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:51:22.862Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1f8bd52aa51c5c1d06e8e0a7ca65298", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T20:56:23.166Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28d4c98e4b036dd0c4918f51af694e17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:01:23.354Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0bc1aec78fefb644b267bce1afce116", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:06:23.501Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fa43f1c37270ec736d0be057f7289ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:11:23.316Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4cdf0d2665f25317a9afcd8b2fa16d8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:16:22.879Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2babeb9c197e677e6403cc5b3eb2a72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:21:22.876Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abb57b19d132e40f0610cc2491be2d1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:26:23.393Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc8ae5f2f93b754a5e95c13d11d606b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:31:23.129Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bf76f97fea6f984a8ae3af99919bab6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:36:22.961Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3ac8ecff477179eb6a4eaef38b3a31b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:41:22.961Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac1f18b142d83672dae6a11d96f40d6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:46:23.268Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76619444024c03e8c3206d0c8fe46fcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:51:23.556Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a0aa43e2824a7b0a67aa98eec06c263", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T21:56:23.033Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b95b6eb9523dbcb4b3422f8ce89febb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:01:22.706Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bacbeb7f649dc7b87cf7b654017d687", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:01:22.706Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "928c14afd5780a5e6290a8a955d73755", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:06:23.304Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68d0aca74a8ab07e373d6e37f7c33b9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:11:23.213Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a46c50dba15f943214a135b756d1181", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:16:23.161Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b0048bc75f9d4c97baf50fd2ecfc8e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:21:23.36Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed094f5fd2570f049b461a1c14ac004f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:26:23.416Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "979725b07215380e9bf5891e0fe9ef25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:31:24.752Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7d833ab2d7b40f81c12553bc16d576a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:36:23.202Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14bc83b3b56ca02e0d5693288cc01a48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:41:23.233Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50dd9278df40976b32040765a32acc02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:46:23.255Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac9fc6fcc98923385baad7f14fd0f792", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:51:23.179Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92ef727963bed8434a2e65e21af4ac24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T22:56:23.283Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f45f5260e52cf3475f713e0dbe61ae22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:01:23.596Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "423a01d9cd92dd1c7e3fb9ee9f88f88a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:06:23.416Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfae26905f0e34878498e6e91eb82089", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:11:22.893Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ede3677e5831df6831abf2ec7cfdfa48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:16:23.561Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95254849a2677ba3d6f7b87615d4d61d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:21:22.806Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e5bdbce83bb09ff969fc6dfd0988c9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:26:23.276Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae5cb5c3b30046be904ea886a5c7b5cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:31:23.721Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1a6162b8ab638a540cc4a17676f04f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:36:23.098Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33b6af7022388bd597bb4cfba7e9dc26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:41:23.024Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "714bfb290b2283a85a6daaecd89fa59f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:46:23.617Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e49a74fa36755a5da822ec255caa1015", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:51:23.524Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "911d2dcfb988d717689bd7c1937a7727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-25T23:56:23.265Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c9160518ec8065c7c0b9219e8342e97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:01:22.964Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9de4238fdde14504008615a0fdcc4a86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:06:22.786Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44da97cc73ef1c4b434ad51a7cf2d1bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:11:23.469Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03fdd50ab345bfa3e88d8eb85c17e321", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:16:22.906Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14657f1d7256a957e1cd961bb2fe1113", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:21:22.757Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57b7d2f7061e824fd7a63d4bc6ad0a5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:26:23.529Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de8c7744f0ad8409644353a9fd0e7db9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:31:24.733Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44b0e0fa36ff91596af0dc4e082351d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:36:23.5Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ca2e7bb782b5eae09bb76846dffc29f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:41:23.164Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "122b59a7f1258145db40d3b900afb885", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:46:23.116Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "761cf96c037b05834e44b70c8af237e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:51:22.942Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9538806b82a1969ddc357ff96f51deba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T00:56:23.237Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c226a76fc91c98f05c8e8d37f511326e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:01:22.835Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c31ff13971e6e11bf27f69bd36e6cd9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:06:23.064Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15c87cf87d59703da348c577ed793dcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:11:23.572Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2ef677791639328d6619b848f98a2bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:16:23.408Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "162f5cbe5b42bbd8b96dd64493485cf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:21:23.105Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a446b07aba58e2144b1ff8165775364e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:26:23.496Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07624d74cccf84a1b523ee9526263c6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:31:23.64Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50b5c900c70812d6e7bed99943d59c32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:36:23.104Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea3ed320547ac4c4046d27a19723e01b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:41:22.929Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b53dd66bf0b3d77b1c1eeaea50eb3568", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:46:23.35Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "581ba02116f6bae51a46a0cfb95c1ec4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:51:23.52Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8680a1c10ecbe33d294837c83005151", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T01:56:23.598Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a9b7e0138c2dfe8b351cf45dd610ae4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:01:22.866Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a34ef9ad7d2fc916f592f0ff74b642b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:01:22.866Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "821bf3a6d0e60f5cefb94622887f1b37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:06:23.165Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bc2e8e60631f5752df1c1bf665031a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:11:23.656Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "972a46fe528749e5267e7f8368c3126d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:16:22.963Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4f1b8afda5a8964bfc377197ec539d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:21:23.281Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf062b64a6051074592a6f0ff489a212", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:26:23.686Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "927df98197efd5df574dd513c9c18dc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:31:23.657Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c22e355aad282001ca1eb39c899b1a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:36:24.607Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "692f88e972821ecedf05ce78808f2cd8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:41:23.667Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c75eed9b503224cae0043246238bfee6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:46:23.136Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "879ec54eda09726753ddaf0d2564eae1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:51:23.566Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b98ee7c5f575083caf5899b09dbdb17f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T02:56:23.835Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2686d968019974ebfcbd67d18af1fbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:01:23.549Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "606d605e7f81cf376f71a63839924ee4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:06:23.767Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98cac9c47f735df115323272df87fb73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:11:23.454Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87d339b3a879a2505c1b86e25450c050", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:16:23.049Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "131fd90146789cadd20aa01931b58f29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:21:23.635Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "938096a31b196686255536b9c90af8a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:26:23.807Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e51850c65f4af60af9a3fa812b8fe31a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:31:22.96Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19d79116fb20822e93faa56551fd0e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:36:23.123Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a72b735f8353cf567f0cbcf3cb450785", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:41:23.235Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ba37da700bfd042dbd752d198796328", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:46:22.957Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f376b36fe24bf6f41dee89d1e1be6f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:51:23.601Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46593bd7590eadf53bb0b3f36b76c990", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T03:56:22.99Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc12a156ee0115d91eeb8f96108e498b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:01:23.115Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cf80c77768c4b75042adac05ad5313b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:01:23.115Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2047dd4b5bd582fca4c8b849a7065ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:06:23.656Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06bf36d5d465e78fefa9ff77b2187cb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:11:23.45Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17b127bcd888af45b31f95f7edaea3e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:16:23.301Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05c3a71ae91c92760cd28326fdb32bc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:21:23.105Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c789ea01e185bc38c301e3614dd3f58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:26:23.412Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "586eea47088341b50ee7b4ef75ea774f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:31:23.119Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9385f49d140cddb420182b9233165c5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:36:25.182Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f60be92f2add378e0d4f4274c2f62b6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:41:23.819Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05e40065918d74762684c20bd9ee1983", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:46:23.507Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7db4191b9984199e32914e4a115dda9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:51:23.733Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16fafdf075b1401337d16fce98ad602d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T04:56:23.039Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17d3321fbf72ddd27cae3a49a4615eaf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:01:23.555Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "142ccc53ad6525b64d0a25c984243c7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:06:23.349Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae76f921cbf3e0f5e888b7f3532c595f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:11:23.424Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2637d7862950d0c5462fa875ebe34352", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:16:23.932Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bef79d0f5d8aab65d6ca4b84aa1bc2cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:21:23.107Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11da1f3715b76fea0b607e100c98b4ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:26:23.294Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0d0d4aa4849925571449664ca130b00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:31:23.412Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e223701e5c40202b6f9532b55371ac07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:36:23.166Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e8b03606684e0dedc95b75633bdfa64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:41:23.57Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54431453254a82647189e7af4ee6ebe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:46:23.56Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffa3c40682381755d3776edde9856379", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:51:23.817Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dded5d8571c774aea29ebc35094535df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T05:56:23.241Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5312025e5531984f721ac296f2579d7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:01:23.293Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f086635150f6cbf48bd1fdbf0a527ed1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:06:23.804Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b54317a58ae5e759c055920b2e9909af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:11:23.419Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b080d771e3d2311f99c11b11ea1860e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:16:23.607Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df07b41ca164d4f5b1f7792d2b0c4120", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:21:24.415Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b48516bf0f44739ada6cb420864c535b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:26:24.016Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03d8cc3b43e8774fec3f992a9ad2dbf7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:31:23.883Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cc523e911cce65a0d51cc27e92ec3c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:36:27.568Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "750507b9821db6f4dc3a067360f3411d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:41:24.505Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca73be513b66b2937b0a60d321252f5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:46:23.737Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5640140d8c666924f8d3c57b9333ecb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:51:23.586Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb319354994e916f5fe10e7f900f0db3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T06:56:23.413Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd74ecc608e863d0869bbcc7c1ef3617", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:01:23.783Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "646e3ebaa65c33a2cdc39bb91786cadc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:06:23.326Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62dfa81ca4afa70fb2483af9f5c18293", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:11:24.03Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4f12f2c9603cceb0d5f8a6409967df5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:16:23.881Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52169bd295739fd9ba6abbbc34c65b45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:21:23.057Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "149849fd31a53707c4b03aff39418eb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:26:23.096Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "555e04e1d8e9e28951e0e01911ed2c84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:31:23.29Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28fecd56bdbf8dd2f55c08e45bebd774", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:36:23.233Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3af72eac392513abefe127f683a5387f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:41:23.758Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78b74b6f9d2f14b3f699e7b5000a23d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:46:23.261Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "588d346f7e4c33a7d4785f50ce5e4b5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:51:24.051Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79299bf18e190af4221ada6176eeea6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T07:56:24.262Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c836ab9c9a9a03787d936140114bcbf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:01:23.307Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13e05ce2795273499345058711efe3a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:06:24.243Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed7e6c22a3f6aacf36ca50f179b8c611", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:06:24.243Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8620ed9ba3627c28d2c7aa0ea15b0263", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:11:24.25Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3804b103a10f9f4d0d9efad4edb87720", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:16:23.304Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d111b9587ca52a22bd4239d49abbcd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:21:23.821Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00f43c9b9a6def2e996823fdff22cf33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:26:23.469Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "113f8c3b51c037805344da01d5e4cbe1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:31:23.58Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3570b96237cffe1617b675f854f02e7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:36:23.902Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac3a7f824fb918eed7ac5d179d8697a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:41:24.992Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "114346c7d30fe95fd4813fe26f280e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:46:24.07Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c0361b82d4de0190591258d9c874224", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:51:23.916Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1f91607b2f8c667f5d8982a2e57d17e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T08:56:23.725Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e003bf1c9a8e2f33b8ca49812611c43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:01:23.578Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d714522f6e6322486be362b7f534fb24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:06:23.675Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f284d6d98a4192b972af1a356a0ec41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:11:23.298Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf44fe1196dab63309574a31959b0778", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:16:23.588Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2141339c6234d30f55021432dd740f8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:21:24.117Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "014a78ec4fa498d147f2d50fb3996279", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:26:23.422Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97fb5120feb51dc41d5063c6e47da728", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:31:24.17Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "231a05841ac28701d41cb1a8215fe783", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:36:23.827Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f41b445b3bf51c643b32a912e909eb4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:41:23.946Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1c45aa74c301dee9394c009c22bf1d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:46:23.775Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4509fd98fbbb452c7673377fd4d6f16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:51:23.602Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "650bb45cb90a21ee0d54af8c3fed5d9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T09:56:24.119Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "618ffcb353da39d89089851d3f83136e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:01:23.586Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "673c9dd361f86a8b86122cb8f67cbb6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:06:23.672Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e8e5b03fcc3dc027738c8d8e060cf5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:06:23.672Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b73c95a104e2f85de2badbdd583cd084", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:11:23.545Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "001ccf2c3d2d4bc3aaa5de7626f5c506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:16:23.252Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b4dc388db77a656cebbefdf1a8e2878", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:21:23.85Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ae299ded231af88390a6afc53635775", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:26:23.973Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14c8fa3b67e071e704d716c193b9757e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:31:23.804Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db12d059e10ea8629abda33d37ee9952", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:36:23.62Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0879d82cd0623e346517360c2962b80a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:41:25.051Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "915029bd7d1210272f6de6edd2ee7754", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:46:23.925Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64db74ec4ea3facc74402346e63a6163", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:51:23.429Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1eb839229484e095d468e4c1806642e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T10:56:23.518Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bff11ce9fe009d430683ce1cf21beebb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:01:24.165Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "440069f4112e2e70ee1a8e5eb4cb0114", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:06:23.673Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d267b6f4aaa182a9e5c77b2651cbd0c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:11:23.56Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4754b9bba0a4c9f2df36d80dde46c230", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:16:24.034Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "382e0b7a6b512a3cab3534409a389fbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:21:23.322Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d54a79f5405195e94d4b1d761503290", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:26:23.912Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "564130b9df25a21d2b48b75d48d85e76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:31:24.1Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b31ba51e73aee924a0c14224794aac4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:36:23.286Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "950379048c06055713cd8275c4bf94dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:41:24.127Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "181548eecb6dc199c8209de2b8010221", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:46:23.949Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a807da03a47494bb02fe68b5f5e9d4b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:51:23.388Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26d146291ad07b2e52f6ef4d4bd3bd8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T11:56:23.772Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05b5f7f5cd11af651afafc9bdc8124b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:01:23.368Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "503f9ddc49bbb2e8b9cab98bcfd62289", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:06:23.382Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe71944c5871e4a38cc4ecbf7617a359", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:11:23.406Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1cf58eff8208322c172b9cf5b860e73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:16:24.277Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7d37b10cd490b7f3c7f9b08102f4843", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:21:24.516Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8400f836e3e09a8c620ec003d3c93919", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:21:24.516Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21423c916b2aceed368706fb86b43bff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:26:24.066Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1a8c2e2ba8338ac694679dfbfa4247c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:31:23.299Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32e3f15787dd22fc49781d7d8c1e285d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:36:23.774Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3a05a25f7d55cf93cb3ce15285753c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:41:25.399Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0665b023e4f6a9d204cacfb304ea27ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:46:23.775Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8aa14a7c5a90cae12f302598d70316f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:51:23.672Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e0be9c75d1056b36c21d548183389cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T12:56:23.658Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27748a3580de4811f33e9d7c62bb1780", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:01:24.1Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91bbaf01d4b808bec5651cb395ecf70e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:06:23.767Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e42050035eb428e1b5a9b2e866b8a55c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:11:24.121Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31633123a8fe053fca5d61402141b8f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:16:24.034Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90d3910247d8b0012099091affa1dbbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:21:23.707Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11a48b97e87e7642d9bebc9a0f82066a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:26:24.35Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3632695c1dab13ebf53f40b9268533c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:31:23.999Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "353af60cbe22e5a43b6fd0573d79e1ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:36:23.528Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a00a5c6d73272be7c70298d03c4c6d4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:41:23.844Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f02c8720ea6ea86e2e3e4d6079d9b147", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:46:24.142Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d2bb943f9e1de86e9a079d93186fb3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:51:23.853Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a04401e520af23cd920cabb5989c8a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T13:56:24.232Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edfb1bf98af5c91a16f7ddfebf21d34a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:01:23.836Z", + "quantity": 51.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f7eb83839272ee6ca7478b34a2355b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:06:23.695Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfa546d6dd7e2c54b06027f7f551a54d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:31:24.101Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8aecfd8298ec5d48615625553b7f1c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:36:23.705Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29b3952a8f7d6244e6ecdbe35d07ae12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:41:23.725Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6931403e82f7cf9c07877ab96f1318eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:46:24.731Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0788c23a0ef5a10836c5ed6a7ebc86a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:51:24.372Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "067ccbc1a7c6e8a714690e80c4e15c3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T14:56:24.219Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f24216e060b4f1a93aa58860e17634c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:01:23.581Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5dab0cde3b8b68a3b496b92956874b0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:06:23.907Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a446e572d739de71531386d902f360c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:11:24.112Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3246dbd70c4d791d3e50fe3fa02da62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:16:24.139Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46354107d868ddf2436ee479638bc810", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:21:24.221Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd52c4788fa834088809a0f1242fd4d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:26:23.989Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d311e5a6327b97fd5c2734da6391b24c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:31:24.415Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36d231d30b2599e4c7464675d55b8e5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:36:23.792Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a189218b65c123fa701acdffa343a434", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:41:24.011Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e599c6363b62a12680f726104735f63c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:46:24.113Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ff23f5913430c739c7991da43f98cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:51:24.046Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c621a02ee96d8b99b67e517d6552a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T15:56:23.666Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7512431f7eae695645490307dee725f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:01:24.111Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "340c8cb3eaba95fffb054275dccbe780", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:06:24.42Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e669acefb78aad4114a9584711a11084", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:11:24.167Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "569ff9e6d33f25e2b12961df13e15e4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:16:24.155Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61231bf327b5c7e8520a894771e23d29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:16:24.155Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2386c5fb9aef732603f309da3384ba6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:21:23.867Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa0d38f8e45ef25f21bcd6542a3dae57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:26:23.919Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e4de68bdd0e50cbc6f0fe70c2c602e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:31:23.919Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2df1a168f11fce6deaea45c3dfca4690", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:36:23.585Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e43085314ee316aaa99864c05f621e1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:41:24.104Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6b7bda4b9c6bbad8cf7a79b63f115b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:46:23.59Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e4ab125f7d2702201d9a05888bb4d6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:51:26.063Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "799aeeb6612e93c6926913b39d8a0698", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T16:56:24.321Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40e69bd871ae76b1267aa6aa332b827b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:01:24.267Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd0fa5d9e1ca40b48ea10edbf360d678", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:06:23.691Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e76db43dc50dbd0b9b48b564bafe96cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:11:24.097Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fde84243faa225f803fe49d4502ef169", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:16:24.376Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9745137b8cd03780574068780c407b03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:21:24.487Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afb3acc12aaa43bcb6fab3652214c190", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:26:23.775Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8412bb40610ea5508a827ccb16319372", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:31:24.098Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d57b65d4c076b9219174f3a4188c2d28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:36:23.683Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea8f323af63e06a98d4d9c7945c6b0a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:41:23.547Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bf73fe01ea01e5a4e6327e6150fdecd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:46:23.926Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "835fb35c409ab6d372932d3d8fbd4fae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:51:24.299Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5a946f545c9a1ac34faf8f27fd52740", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T17:56:24.373Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e43a2ce6730b7d7526781eac346d78c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:01:23.596Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f58384d2934db514d42ef872caea55f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:06:24.431Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4a5427b8f0c00de5154c4220c559024", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:11:23.704Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc7b8f88fdbc6f156b6d85ce3863ec47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:16:24.203Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa94923e8bcf8ee25b1f46cc0ba4ef81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:16:24.203Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "340c654195fe281d64a4bb8f412919f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:21:23.805Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ead22664ef9da3e07c6de0f8d9a1fda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:26:23.667Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35ed5bad0c116fcf1118b63f744a6bcf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:31:24.372Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cea731a3e7094bbb730a04a812d2a56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:36:24.071Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d2c8dc4ec8c18e622f59320ded1d77d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:41:24.512Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faed4d5c7aaebd89e825987a22b84cfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:46:23.644Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be99e82a8012b371daf86b7f6c9dd967", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:51:25.486Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "958271df8faed4b35df2c5cbae8204b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T18:56:23.868Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d99f4987e2e137115ac7eb5dbe46549", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:01:23.894Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31166a934801d0835b9d3f90a063af72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:06:24.079Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b58ac3a9fc54567054bb74f091d74631", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:11:24.312Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a9b2c73378ab2ea74441e6c2fee4826", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:16:24.489Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3246db754156a583848be01f76071c4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:21:24.515Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d95f382df3f467581dfd9f53b4e234c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:26:23.642Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "301f16c0d0d0d1d01f44c3f15b1b3a1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:31:24.102Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcdfa38972f39dad00f9dc49f8a18046", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:36:24.211Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed17099c89f31f7ad1bbce57ab7e890a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:41:24.568Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4ef7ab59a4d72899883f7fb207baac4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:46:24.184Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9695cb319b4071ae609b7a5725a67661", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:51:25.325Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7bd2f5399bbecbe888852c4fb095930", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T19:56:24.417Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00af6228e0e0503f0f6b2452534685f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:01:23.723Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ab06171c92c43251374dc349021bf0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:06:23.643Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fed0b8e9f67b14869161d1e8ef27db2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:11:24.37Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c70a56ed95e529a513f191b307e6c59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:16:23.793Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e55860b8c9b1d2fd4b22fca2822fa89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:21:23.673Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70dfa8cda81de4ed2747c135e388b622", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:26:24.613Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acc3f24ae0a5ac979230c31a005d5167", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:26:24.613Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcb4ff73507a6da43cee7d9361d299b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:31:24.385Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0018e4dcc46b8b247c717512bcd59b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:36:23.695Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07010a83bccb2a0883c14f04168789aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:41:24.041Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d4da55b068dd545edb205f039ce8fd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:46:24.531Z", + "quantity": 221.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5724e2e8fde9e1680ec912b622ac7971", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:51:25.179Z", + "quantity": 222.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "510550be744ba4b3944e6abff209ef44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T20:56:23.964Z", + "quantity": 235.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db63f6bff0c23620fbcf924b938116de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:01:24.323Z", + "quantity": 243.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6b0ec3f031a6a21e643bb583f5bf450", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:06:24.12Z", + "quantity": 249.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2067e35201773db87abdf9119f8ccc35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:11:23.965Z", + "quantity": 260.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91baa22fd5e5b74e74ea633ad4ca07fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:16:24.052Z", + "quantity": 269.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c9ebc7ce2af70bbb439b5de3cdb02d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:21:24.573Z", + "quantity": 276.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d022efe6804999ad2ec735da0912f3d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:26:24.224Z", + "quantity": 277.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b44abd512489fc98d2295ed66872e89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:31:23.723Z", + "quantity": 281.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbeb790f35c06c03be58bdfd8fff1f6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:36:24.301Z", + "quantity": 284.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b39da0a7965a15d3c82689f53c7fd4ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:41:24.058Z", + "quantity": 285.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a301ccdbe93125d8d22552af6fd65a86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:46:24.656Z", + "quantity": 292.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "734992f851b7e1c116c1945abe6a721c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:51:24.28Z", + "quantity": 309.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df26a442a8ccf92f36a8e275933364fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T21:56:24.627Z", + "quantity": 294.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acc05eddd7cddab908b11a86e5ec2343", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:01:24.078Z", + "quantity": 263.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "282d8b18767c4f4b44912194b3b10f0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:06:24.499Z", + "quantity": 251.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a17da339e72ceffe0c06d49ed3c4da70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:11:24.476Z", + "quantity": 252.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "793739a5dec42f452401e53867777143", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:16:24.31Z", + "quantity": 238.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd2f7123cc381f4739f01a98bb47ca83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:21:24.447Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c62cba6c33c836baa96224fac84898e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:26:23.748Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d70035b8660358e85947c483d0f1db27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:31:24.578Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88a7b40a90a0dfbed822a92fc19f87da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:36:24.156Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25e567b43e13b755c7c185cd57f581a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:41:24.729Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d1b1853d4148a09b433565582effcb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:46:24.812Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d82ef06fbcd72f10db2c34efe85d05aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:51:25.492Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3036b2b9e85c2efecc5837351f09d470", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T22:56:24.03Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3ec2ab8e8320620f8024f7fb009055c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:01:24.526Z", + "quantity": 220.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "029f514b8f0b5a7e4072344a461bb62b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:06:24.719Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8597994bd782b65b366bfe3d6b3102c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:11:24.211Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a2e614408627994d53013e99345fc1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:16:23.766Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12489fd5c75f060185f6f5b346a304f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:21:24.643Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfac71835c75c7030cdebbcaedd9021d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:26:24.47Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08d510b10e6ac311e606491e2b53a417", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:31:24.755Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9dc02867ce8901cf79cce1f8f13e042a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:36:24.755Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "675b575df5d5c1cee09fc68d6d444971", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:41:24.806Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7ad55ee003ff54d2f12d73a38b6e050", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:46:24.325Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8f948a15e8d34de06e652509e979b3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:51:24.073Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bebd122d46aa12117d9a5591f02093be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-26T23:56:24.135Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49a32eb301b0acb44e1ca9ad9da1026d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:01:23.776Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "beb89ea50df57c09acee0f10a5e37d59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:06:23.852Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a19bb98a55da53960a2776fef9cec51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:11:24.832Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a33be154414a638701c70c72014bb063", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:16:24.353Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bc4ce60ba8a6db482d0e05b31f042dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:21:24.174Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "509b461eba128232902fd4e41b9b71d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:26:24.285Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6349aa66b412b814d69e645bdabd305", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:31:24.551Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc16a6254583dc75bfb2c589040f47e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:36:24.456Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f956750f1e5d30298e0c789b1dd77ee6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:41:23.903Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7af29edc993078fb36ade7484e13a7ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:46:23.966Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "100d5a4f79808687a5f732dc1629bb76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:51:29.162Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a26168ce4e04a526f524c128e0f400b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T00:56:29.162Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbb40363b77334859ff9f9734dda3fa1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:01:25.805Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a49775f3bd1a9474f18031a6f7696ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:06:24.689Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bda33b2cb0e27cd914c2f3acff8fcf1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:11:23.938Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1a3c39d4cabdd6dda261f136d115ed5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:16:23.82Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2578e85145e8a8f1676664884a23818f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:21:24.165Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99d605bf2d6f84ee0efa8f5c0d33c9fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:26:24.423Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35fd328467bc263b51662412bede43c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:31:24.624Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6dd2f7b5449e78352079e133374f1f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:36:24.064Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f240c345e347d031badcd5858858616d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:41:24.664Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "157f9d7793bacbddee81204c439c12e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:46:24.792Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a28942ab7ffb9d1ab3a93730ca4fdad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:51:23.87Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6f26d52b973b7ebc6a3b43c168c6f67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T01:56:24.424Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "822eaed0eb2119e4ae23384c5dfe8059", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:01:24.6Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48745bee9c43382320b9a0d9f95751cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:06:24.213Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a309d216573f228e8200dcf95eec709", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:11:24.612Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0385bfff2762c7a2ea6e7bfa37885636", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:11:24.612Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5abfd5f2f31000ff8847917376e16894", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:16:24.612Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1342e523b6d1b52aa0abf717c9c8a3db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:21:24.198Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a34816301c0fbcce28d52d73570b7663", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:26:23.953Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb33863d7aeccfd82e2a031cc0af5338", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:31:24.021Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f12d35bb95df78a1c533747f479e708", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:36:24.373Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ca21dea210f07b615294d3030e84246", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:41:24.028Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b83740b9b3a52e26b1688e87c76800b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:46:24.813Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5c143a52d42ddd4bac761c71ee95110", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:51:24.225Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aad06510b15a8bcd4f2ca34ec3db1f0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T02:56:24.376Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38b6f154c1f437f3cf6eea849973d11b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:01:25.133Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6ae6a46858e89c1fa4ac0c89bee8a23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:06:24.749Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "498388ba1789d41f72d9052fb63d23fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:11:24.002Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce384676dbbf3d1ca9f7d2636f1f48a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:16:24.114Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ceea131af306906c957be45bde379a72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:21:24.698Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e70de5709913cd4542793bf37909515d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:26:24.698Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37bd2f110a28465b979d65b6f30ed80e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:31:24.624Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70cd0e1b0bfc13056aa594d65ea3176d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:36:24.062Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e87389c7b5458c3c9b7714a01c6b1a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:41:24.754Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eda19528813d6a774af385b3a3d1baae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:46:24.094Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86600c10df8eeda7c2b47a41bad99170", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:51:24.14Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3093e186abbf5ed0913d2315a9256394", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T03:56:24.899Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16c8205fbdae1e47a4a95a034f7423c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:01:24.538Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61cdf0b1ddd08c32bbd7bd50f0c67153", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:06:24.883Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "298310d203e338c868c9568e2b6caec1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:11:24.153Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb3ebcd4c029e18fc7f7f031d3b33866", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:11:24.153Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e25a7f6a126c9720741bc6cc197ecc4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:16:24.001Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8970b8ef06156cf997d23adac5ba6cdc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:21:24.559Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5223be3a46f67e66298bce0838411399", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:26:24.111Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3fda5fe2e3987ac90c20acc91178251", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:31:24.787Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3a111e6320952399362a044979afda1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:36:24.141Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc8327be29431d444a1cbd4bd3f790f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:41:24.406Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a337bdd30f1ade8486d5f6d98ab67fc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:46:24.349Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d55fd2e29a48331ce38c4a71e2361dff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:51:24.029Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88cda5521638cb4d241ed92907f9510b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T04:56:24.815Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14aded497535d17c240d4d1d46103774", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:01:24.579Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5fd9f041a3ff42959d0137b4ba5dfc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:06:25.614Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a107ea5466e667c4581fab32682a8e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:11:24.741Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42b7e8460539beab4a7e33c77bfd7845", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:16:24.511Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da7d94b75e7b107b7a15d707585dd1b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:21:24.448Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57c487e787377ece074a1002a8995cff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:26:24.712Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f3c6ad53ffae1260f8a26b90f25fd05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:31:24.014Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e305388593e7408861e37672d211127c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:36:24.484Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a902d04b99aadba96a6c7e1578d7d90e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:41:24.28Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d208f81ae1b8ea9744db1227283b5f49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:46:24.913Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c7d7cd6ca4eb3b966ea8144e17dc51f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:51:24.861Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faeb033e8a7642be7bf95f9a1ba07ee9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T05:56:24.632Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3673ca24d6f198624fe943466234dab1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:01:24.488Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5805d24aa714f59da9910e0fdbc7acf7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:01:24.488Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0504d6db81970db859271d317a6a5fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:06:24.896Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da3b48901eadd053744367eefae8959c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:11:24.653Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c1f2280ed60f3c5a6feff732caeb0aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:16:24.502Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "505013dcfc2510f20b0cb440610ce919", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:21:24.548Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9c587ef9c805bcf996037cc3f7a2e0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:26:24.529Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38876cd23e181e443c42b3aa9a261574", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:31:24.476Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4cad472c7d0d6c6bec2b234a363d3b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:36:24.039Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2820e91fcc695a27fa53f767e7b89d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:41:24.888Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50c679e4d73a2240f48d840563c3001e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:46:24.077Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a976cf6333d938f0c0fc048070458298", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:51:24.625Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc029c417ea771f7c3ea09498f8ddd01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T06:56:24.814Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d30cda1882c5fcd05b8aa74fd753ca5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:01:24.795Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c0c9e8d655f2fc5f138bf2ae2599e1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:06:26.135Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0613fcd91e9bc249455257f4d9ac1987", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:11:24.265Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a52c0e37b5a64f921908ee5095ee97e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:16:25.091Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "306cd4faca0d254a46cf8ba24e5f14f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:21:24.509Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13f2ac1be8d26cfedc06d3fc653196f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:26:24.063Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "859e69d6d5bcee6c07057b91e8dd872c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:31:24.224Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12f6b8a7526f40d81800c2c41360faf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:36:24.376Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ba89d753a93eff8f9647eaeb8e5634f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:41:24.727Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b12c3675af7b7ce235c04618786be376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:46:24.214Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b473621f03f594440803e40c6e78ccb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:51:24.253Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bea161ec05984e4cfc919981a368e4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:56:24.734Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3fedbefd7e18167acdc1016009ca6fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T07:56:24.734Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6950a42e30d66a2be1592219ad5cc02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:01:24.371Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8249a2cc18a14c1d3d2dbe888991ca37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:06:24.978Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c00b39f3b4eab9486b229d862c1016a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:11:25.024Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a39dde10f1d10b1918577e573f9fef2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:16:24.728Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9696a6306edbcd63a77949c4d1a88d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:21:24.705Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e4479226938ec086936082c613d86f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:26:24.878Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "049d4758c8674230d24ff4c0b0b3ccd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:31:24.745Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "652f4c243d7d7f8a9e8ec2d17fcf6d33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:36:24.538Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d562e61f12c37599cb24355d21da490c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:41:24.206Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97c5e8330ae2326936b6a5fe5b917d53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:46:24.148Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13daf4d32e965ce0640c52701beef02a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:51:24.986Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56573a4bfe73b6ab0bd1284dfff46429", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T08:56:24.17Z", + "quantity": 44.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "381a3c3881917e04359fd29c2643edae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:16:24.305Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfcadb42a1948ab3d18ce5a08eeaba72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:21:24.603Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a151a89d4cc4458ff4a905bd1bbe0981", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:26:25.029Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2221aed4c82f6491d0c13dcfce2f8e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:31:24.774Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da0ff867c14aa9250f577728093c28e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:36:24.167Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52069d3a651fcb314d4461b4439b8e3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:41:24.793Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4c264467c6bd2eb2fd5afa61db2e7f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:46:24.826Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "078937e6b60b6bd5fd91b4795d4e283c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:51:24.642Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c44aed771c54d157cd432ed1fedcd34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T09:56:25.144Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c6fa061f9a99adbf32ce74aefc8ddd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:01:24.481Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3f024cb913695baf1e2924c9e6ebe71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:06:24.51Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ceb3d6980a164a18398591efd850e62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:11:25.091Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36173213dffbb95ed31036371433bdc3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:11:25.091Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eed469d3b679a9541a489bb765e3d7b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:16:25.16Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74bb9d09cfc38e472439eef39ebfd662", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:21:24.599Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bde569c9ed97662f6cb7df3866ae6ffe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:26:24.973Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c5287000bb3db3b6d61a2c8c331c30b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:31:24.662Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8169622a62b8f6f44cb3d5ac1d9069bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:36:25.144Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a943e2f8d973a1f9fbdfa9c0bdd4692d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:41:24.205Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f68daf9ca7e105c8381a9ac775bd6b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:46:25.122Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1033d69ab811701bbf2fd45e83c6f795", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:51:24.741Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b150ff2eb0a9e6822a349752f921b6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T10:56:25.071Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95f95358b7a635a2413cac5f8329dfcf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:01:24.719Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66e92dd60bddef76114106f78b9aca1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:06:24.239Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92aba77598c3b1f50928734bfd9c5644", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:11:25.058Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be9166467fbbe779d3a097d8f78cb82a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:16:25.498Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "983c61766193c390dca9de8646f810ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:21:25.074Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eef4b7dd7be8e29f44db8473578e5db1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:26:24.831Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b353d8d06c698fa5fcba5bd4966ba44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:31:24.354Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68cf17d82dc14ccfd58cb6517a87c9c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:36:24.742Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee0c506bdf81c03c54186e5e549fe934", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:41:24.929Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9129a145b8dbb7f8c6b150ec36ac6dc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:46:24.775Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1256cde1b5bffee5e702632b2a01b7be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:51:24.485Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6952929757d0b30bee1f548c2c80bde1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T11:56:25.061Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ce8ec9e854a2b20cc4a1d76968dce0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:01:25.208Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c45324d8d9c57eb6087e953c8cde7d27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:06:25.155Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "332e3520d04f46019dfabb1aab9e3b48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:11:24.284Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b53aa7567e9bacde40f34880d2c94751", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:11:24.284Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5936bbd93cf3cc2cf84e4c55f72adb0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:16:24.559Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbbba8d7029c80d5b05144fbcc3b01da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:21:24.611Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b6debd24ca5e2ccb235bcf358bf4766", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:26:24.95Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18f3a868703d790658969db3cb8431fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:31:24.392Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6487b55da373c99c4875bd452d706b39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:36:24.998Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfd00f08bb6a4042bef4b2dfb8cdac1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:41:25.264Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f38618059f935e9c03211ce2185b506", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:46:25.032Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba4e250b990a59b3ef38ac4f01d8d3a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:51:25.531Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bec5d7c3584881bb01bf2774cde2cf76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T12:56:25.055Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb646681903298c4f1e7ea66e8854a18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:01:25.212Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9081e9f989e252eca7fc623be0242cd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:06:24.778Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8829046a7cdee084c1c52412be4ee9dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:11:24.758Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb32097404aebbe971c66960cbb4040c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:16:24.994Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a449cee7bfa31ffb84c6e97363bdc16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:21:26.114Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50ccc861e2f4a1f4b8bdd83f5b684bfc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:26:24.88Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c39fc84908112e8feab53bc9f1afcaa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:31:24.855Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6675605493cadd64f9b570ba9f52761e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:36:25.308Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08d2518bc4f5843bb7ad4f2b9ecd0e79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:41:25.767Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ebad5712e5362cf2435be5b513aa595", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:46:24.729Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e354bd60239158f25504548ccb6a99d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:51:24.339Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29fd9dfb1bb551325eb1327510727517", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T13:56:24.908Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f79f07e726dad3c68f917acdaf8cad4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:01:24.349Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0623530538f3723adacbdaa34068881", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:06:24.769Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c50202805afc8bc3e9480ef0c10be14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:06:24.769Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "542bfa57551f04deb2b88e9dc7022449", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:11:24.943Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "752384fe462b2db0fed0a97649f7566a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:16:24.561Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed4b311bfbda560da443e013634c0fc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:21:24.961Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70786f5418f7d7af80eaccc0e8fe7fa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:26:25.145Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc934b47271813c7063d2bab9971e9a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:31:25.021Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7aed80b78fd77a14765e9a8db8be9728", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:36:25.289Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67ff34ffc86897b0a6fd915c600f4edc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:41:25.316Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "644f1e7172e919b6b2e79edf993fffe3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:46:24.629Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c05e924988d9fdbe437c42cf3e6421ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:51:24.486Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a916af9dacc18bd225b35e7647330110", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T14:56:25.034Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41e39894d01207073a941b98e8d18351", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:01:25.103Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6bf18d4b444ab795cc4183099981205", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:06:25.206Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6791a5664706320b0b56afe5440eb25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:11:25.154Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a35d6fcdfc4453650579454bbb2cf3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:16:25.134Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92861249af495c7a9e58f52a17bb4ab0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:21:25.925Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1ccf1e63bca325fb810f0f7f96892a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:26:24.98Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bca44a85b5ad1bb274f2d1d274b8627", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:31:24.827Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11e31164bde5820b17ad0caaef02432a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:36:24.93Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "300e58cf00a0ae924c4cddac57543170", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:41:25.084Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4a6ba384a606d23d3879cbeebc7fff1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:46:25.171Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39daf336aa1533cefedd68b55961f98c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:51:24.479Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ac072213b40f0caffbd6e0702f7ec1a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:56:25.4Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85e2217711fc928c4234d4d13493e315", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T15:56:25.4Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b07200e8aaf3f6036852b2e7bee8fd87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:01:24.891Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65e9356102512eab9a1b260533d42f51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:06:25.073Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9131947f061a74de03ccc1fefcd634b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:11:25.174Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0abc65627f79aa4ab30fd4d5d9c68803", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:16:25.032Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "059dd306a29fe5429656d73c40bfe764", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:21:25.242Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a21e553a2cee1fc040bca44fb407a0d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:26:25.282Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd5e49ec3fe0ae3897fbcee38f7b6f99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:31:25.19Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d14cd30caa28e28294438eb4410c08d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:36:24.477Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "787758e5112928eae3750d429c861015", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:41:25.295Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7100747d82a8507477a0554d55260a17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:46:24.549Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bafd5773bf751997d87e9431b6ed3311", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:51:24.989Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96992168eb69cc15d14e2f10d0b937db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T16:56:24.702Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4552143a84635e3422ebc3820ba4610", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:01:24.795Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9323137558d9d200ae18555076b06be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:06:24.556Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43ca68b877e44f41fc700457e31380f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:11:24.933Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96fdb0aa6c065c9e7ff7006742138ea4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:16:25.137Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d792ce1c28882b03e4c57a8db8dbd3ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:21:26.135Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7054e2eaef6ac8cbff96094823ddeec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:26:25.423Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db8ac0749182a46a313445bd2f9ba1db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:31:25.072Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da1488019d0cfeaac99833f139dccd62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:36:24.693Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5d40756841c30eb3ba8845350afc162", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:41:24.784Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "188c5ed77b2238f9772cae39555f5c74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:46:25.316Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be2a0e572068529279b7d9c501420d6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:46:25.316Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46fa237ad059a9dd62ab6426b9ab3162", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:51:25.221Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5769ba1b07003b93a2ae2d14b668ec27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T17:56:24.952Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18bed0d808d5955a85e566bae9ff6294", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:01:25.211Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82efd4aca71782b4441f3fecbdca8022", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:06:25.308Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b5286765803b498aff7b771805bcd54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:11:25.229Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3241b6736df80f8263bddf909237ac1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:16:25.013Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f3730baedf1edf7a4b8ca9a9b68fbc6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:21:24.936Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b929bb36c961fead62ede7bdb92de884", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:26:25.467Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "477f841b26c828db6073d289648a21d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:31:25.555Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aad75c72913205531c80bef805b9e811", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:36:25.551Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "303c720b7706d1ed81c2e12d71973f7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:41:25.235Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2dbe5e7d5132516be4f9ee1b8e07ad24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:46:24.735Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7164a52b462e9b10e7f2559b55e13200", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:51:25.216Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2b9a9d00e4c56772b85e7585f15d133", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T18:56:25.252Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03b31e145fbf098cc70c96360d524e0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:01:24.694Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c17e4dccad11379a77b950a3f3ed9b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:06:25.009Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6945e803deb78ce91454a69a4bb5c04b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:11:25.386Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "749aa87b43643334a4779c0032faaba7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:16:25.418Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33617f646d9d92f9c06f352dfe206f30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:21:25.333Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18b00cdc5eca81422b86829c19df64d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:26:26.902Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "007f3b1bbb6b6acf41a5ec603847547a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:31:25.388Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f997e9868e72be9678e46d54d6c5e2b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:31:25.388Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edae5dee5167d71e4aa52ad5f114a9d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:36:25.569Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a6fcc05996d846bc64a808fe66ac108", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:41:25.624Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47eb1211c1a9f514075a68aa4038b46e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:46:24.656Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fec786f15d3c7656b6a7195936e1beea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:51:25.446Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "605d4de4f9ff3a9e61b5f6b01d509ebb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T19:56:25.053Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98f8bc303e8d002c27dcd31eba4c5a88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:01:25.281Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e74525e1ff3704a319bb5d85419ea1f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:06:24.851Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c64d1e4cb51dc0923b5c28c21775de91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:11:25.631Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd56eed6ded18d21e6274f65e73f86cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:16:25.044Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8eddc0ebf076f5ed47edc83a66ab69e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:21:25.062Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e56366363304b8ff4103babc11fe829", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:26:24.767Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8b8079b34b939bff86c7980635e29a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:31:25.655Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae56596b0530f17bbf49de85f9568d8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:36:25.553Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c29e9a371278789660c228dfc63542be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:41:24.964Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e7e29deffb9f27f2abfc3a126d2287f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:46:24.981Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9b8fd52fb68ea38338d3c8856fcb2ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:51:25.267Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74e1742c14286809d38c78a0a8e8c916", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T20:56:24.791Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30b8841aaf8796c7dc0afa06fd2bae44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:01:25.649Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdb001de91f51c2a1ca662c5ad428197", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:06:24.802Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "421eafc8d1444a4e9b64c1deebd109c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:11:25.275Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81a09b56908b6b3420b633c7fff4cf34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:16:25.66Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d93abcbda143a8446dee590cdad4fe1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:21:25.693Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7ff81786ba8b3520afebacf4a7e2737", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:26:25.391Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa4555e5e8631cf51818c92267be7563", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:31:26.711Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e99a0ef76e9b8777fd413c38c268981", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:36:25.677Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c7f1277880c8effb1e55639d4cc6c9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:41:25.291Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "016b130ff906cbbb164f2df6b97561b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:46:24.918Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b27e56c15369038315d6bc8817ff6b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:46:24.918Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdbb3c951a545253fdc6491eef6088fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:51:25.654Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc964efe0388e5c1432e7a297c2f6954", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T21:56:25.027Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9b0c0d7e1b3db776e724da557162b65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:01:24.826Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ee44e9162bab88fc7eb757a2c69a8d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:06:25.706Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "136097fc2c61c805b9791eb24fb0ae05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:11:25.052Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff3280ebca4c19d4d590658276a2e88f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:16:25.292Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c10376bf5b5fba9aaa6490ca755e4860", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:21:24.881Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8151f49fbdd66d901695cbbff9f83fd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:26:25.067Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "844851fed26b77fd809a82bedd0f6303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:31:24.836Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38a6e6568c54e918f58c819c30179c7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:36:25.479Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "337f6a9521f8df689df22e8e55d0812a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:41:25.739Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "538cb9cee1ee3e2a849e050875b86376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:46:25.693Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17f493afd535fb39cfab65c71b7495fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:51:25.434Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfcfee8a7c57a13e83ccb0f1ff0d0b70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T22:56:25.599Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2756af551fa9a042119b3aeac33dbd52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:01:25.122Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ce25d5f90b435f00f84b497191598d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:06:25.705Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "774e143c3db23eac4e29cea877de381c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:11:25.736Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d82ce0ff7263c5ca22517bad6775d47d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:16:25.757Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9af3d8c2ff7cfa4d305ee4296a62de1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:21:25.098Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4a174a7f606e4f469ce2eb668b3fd6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:26:25.407Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db758c621c902cffa5ad877f5f9fdff2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:31:26.918Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67ad454be7907eac3b606c4412bc699b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:31:26.918Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "572509bc350b35bbc419ea2ffba04557", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:36:24.837Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a72ad7bb434812d1333f845bc78cb5d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:41:25.589Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5ead6864a48a2f98e7fb48d5ef9f5e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:46:25.669Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bb867e88a5c679dd6d7e1b62f92da56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:51:25.773Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1746ca0de192a443b573f514f26619e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-27T23:56:25.549Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3aaa92c2ae4eac51dc3dc04db5e3c2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:01:25.574Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c5963492337095ef3808beace2d791d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:06:24.929Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "747540d457a153f37576ceba7399a376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:11:25.505Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89c995c19d3d9267cd79f192498577ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:16:25.432Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d28d0c4ea12b27fc2f1b4af6e5c38056", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:21:25.854Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eec7a9496bed185ab80321c96bc99efd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:26:24.907Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f998921e4f2ed986b4877cd298c94482", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:31:25.677Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95ed7f23c232ce956b21d703ee4c85db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:36:25.726Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e5c65b7e9915c87341c1924771d9b06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:41:24.962Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d765adda1e5fa69d8d06908bce11dc78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:46:25.606Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4791d86c871626cec7738c3e74abd488", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:51:25.305Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa00f9bc73659b829fcece99071bac0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T00:56:25.494Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed274bb6bad53a2f5825663b4c9f619b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:01:25.453Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed8e32cf4e211f250f589568a4547b64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:06:25.628Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6a4b1928b54ce24a3635017c5ad085c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:11:25.68Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "236ea6b62ea7b633b2e9a41ef6a6c6cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:16:25.077Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5183b41dba9002b99662c87e7804a8a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:21:25.168Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e066e16c3b85b1141fe2866474f93cf4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:21:25.168Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2059c8d7cd02fde9df7de5e7d8e79b57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:26:25.668Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83a399fd534e9f2fa8a196e3c7c7e90a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:31:26.542Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a0b3f52835bdca1985fde9c13dea5b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:36:25.329Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2abf5f8770ba8194c366fd21ea0e305", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:41:25.369Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca5538a338ef9d1798c329fddb2008b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:46:25.501Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "baf17c091f9e48f9793fff2428aaea5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:51:25.725Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "931b785a5aeb302f30ec0a40e23ff714", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T01:56:24.934Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09658abfc256bb3aaf69bf42a1ae77c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:01:25.759Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee69f02c6917ba6a91d9f401164a3f98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:06:24.942Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ff1ba09aec6eeaa484b85e1ea33a5cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:11:25.688Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c76473ea92f7dd237a4ba9bb1fa7f0d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:16:25.355Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e88af373da4d274cde4f01404d38339", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:21:25.476Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2762b3de7cf4870c2b964e8d2220c6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:26:25.761Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8175240889185532476e9ccaf02c1794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:31:25.737Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "159588c8d1fe4451996eb07272c50edd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:36:25.576Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d3ace0e6beed97ce1095c483cfcfbb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:41:25.261Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfab919cf72ec5890e13e69156aef294", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:46:25.967Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e200d12cee65654cb2154f12cf6c7181", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:51:25.761Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "161ccb016a61ddca2f4ebf4c59774b5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T02:56:25.201Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10224232f3c4fee19a3fd9409aca9570", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:01:25.876Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2816cf42ca26c0cccff7a7a814ce8b5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:06:25.652Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59963ffd5121b7a1baa7bd3f3fe7cd4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:11:25.619Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27b291a4414220a8f3bb53db0fdc77cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:16:25.514Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "318eaef6dfe25b320920bdb421dda0eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:21:25.514Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbf36a2201f5c32711599c1ca14a9172", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:26:25.45Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec9b2f50c8464a5058d83abadb3181d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:31:25.594Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "419594d7a1179414ebc3f941abd3c0bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:31:25.594Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acd82883255f450810fa4775a08564a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:36:26.828Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "748258504be2449c51c321f7a37a58a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:41:25.37Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19dc7231a94162905b2b64396a82e69a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:46:25.828Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e38996c87f5ae3027b0ae256f77c2c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:51:25.734Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d078e9076e52e8846ce067cd3a41902", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T03:56:25.767Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87dc81adb72b7b58658ae9ef73939077", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:01:25.743Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3945d787c9286cb5bc5cf224009ba51f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:06:25.43Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "128ac386a11cf493153e17a5075f99d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:11:25.649Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b47d969c8e448d32f1818be93adff686", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:16:25.844Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eed332a34d4e118e78c4dff433018c3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:21:25.945Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5cb8f2626a64fe1675486c009ab0f23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:26:25.307Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b00f4ebc534b6fe6044754dd38922e65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:31:25.196Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b6ab84697be2a7d7c8db31beb6ebfd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:36:25.595Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a10b22915eb825a0b526b54155da7022", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:41:25.548Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44478cde30b99c4be5c11014236c1e5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:46:25.697Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f9b69d30396f96f2f5c859b0e40d2de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:51:25.977Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fef847df7e6cd17edb22d00ac293c572", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T04:56:25.301Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68e84d1b8deb4d932040a876886dbf34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:01:25.664Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b966c699326e552cd18e69c0425566e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:06:25.766Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f5f022603924089a9acf2745e9ec2a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:11:25.826Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ea52244ec46433be226098ccd3edd7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:16:26.021Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4db52c34df7efc1fe0fe401e37f9f00b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:21:25.378Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf70c60e093056e8855bb85eed03dd50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:26:25.593Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de22550c958faaea4a1e784100a2936c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:31:25.74Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "951d494e869a7c3e142b83ff5d33e3b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:36:27.459Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45d87eb975f5b2c82f3e0fa555631828", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:36:27.459Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d629251b6ff0d3769569cce8d3319cac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:41:25.529Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffa482b822d5ff6448e631ab76541e88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:46:25.616Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea603a5bd56728ccb97049e4d252cb74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:51:25.217Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ce43a167c3183e880acb86c6be542d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T05:56:26.863Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1252536d1a0a3f24cf83cef6ae545a02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:01:25.511Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38778176a4549f8472cf977134a3a23f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:06:25.244Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d2e91fbed93719b45ba3f215165333d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:11:25.77Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a0a8dbb8ba05f694c9b0f3b8673966e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:16:26.112Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acbef0e54d7d6d42b0c65d98de8a5ff5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:21:25.529Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa8784ccabedfa6f59f1179872e17f0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:26:25.796Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b68ebb4a292119721d544103e84753bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:31:25.659Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd1700dc101d8c697be6cfdbb1c419be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:36:26.113Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe80d2f560409a65675b9ab973b33545", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:41:25.661Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc4d32222189d9f8cb1e1650c7284b53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:46:25.144Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0a01ca13de921e62bf23f7c1cc52a06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:51:25.63Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f47ce72f8fec6cb59666bd42bcff3f9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T06:56:26.027Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42cf6dbfd280313ed0f5540c62cb2974", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:01:25.409Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "626b43b917e37492e642d01124bb8987", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:06:25.415Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68468a35dbbe00fd822f5e9fd7c1b202", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:11:25.179Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c1e5d2085fde9211778bb7756819857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:16:25.465Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0cc9ddacdf5dd6beda915337b9830aae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:21:25.824Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e331aa63cf62f1ffb74285a5121c6a7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:26:25.904Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae3c2bd821add36d3e5006f3cbcdd904", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:31:25.44Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "affc9ef0fd56106712c26e7fdba9ce13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:36:25.963Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05c80e9d0ab4da51e6a51e50ca9ca531", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:41:27.398Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a14f5ebb45f1f9778097d491eafe174", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:41:27.398Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d327cc2bf6515dd5ea1b76f104ce91a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:46:25.605Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22e7ed174be578d1be3cda287ed94598", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:51:26.151Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ec73ca5d31ea5c76f9c0af8ccf0bf5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T07:56:25.735Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77ee55427b9d74216ec854fbbc73a302", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:01:25.922Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c250f3e7806109f778dd84024b51c4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:06:25.448Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "516ecf3fb89c5e389b5aef10ea6441b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:11:25.282Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c10690aded8de97c892b2c94cb7718d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:16:25.813Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90a35fde875e4f8d89d546c1de72fe25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:21:25.668Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3ab83c68367ccb7e080b89fd1d0dd54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:26:25.529Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f59f582e6b09e5c6d12799d46e17cf52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:31:25.988Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99a356c17b58d45758aa5218810ae539", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:36:25.528Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ece8caaca46cc832ee0d41a3b903189d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:41:26.049Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14b8f2559956988400900381d870bc6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:46:25.66Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26ef616736ea95e9224ee93923b6d1bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:51:25.419Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a75693c215effdc78d5481035ac1a48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T08:56:25.793Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1ab66c5560d7943887701572c355f72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:01:25.949Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a446c33bdd6abf1b3b6f5af1e5504e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:06:25.729Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee6a82591bfb2fa7ded16394e9918bec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:11:25.815Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3eb2e3cc149beaabfe7772a5cce495cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:16:25.564Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34fc50a0f27c166dcc805c774828f410", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:21:26.039Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a33950569347377dbb67286e1aa24565", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:26:26.148Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2a4373f52c239050a577275c41d5eb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:31:26Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "923efe00f405a481ced632601beaccd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:36:25.943Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "724095faa1ea909575322bf132c1d5b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:41:26.421Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d96897090e122cacc52fa51709f3c32c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:41:26.421Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4eb1e3d015028e7561a23c4d268b2b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:46:25.645Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "911efd945910cb4b3418ce6731a15731", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:51:26.168Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d84fe3ede43e7486b5b505a6ef726531", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T09:56:25.344Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96706147f4391d052599a1abcc6f94bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:01:25.852Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38b8d5b2486ac82757993a2b7710c8a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:06:26.136Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "150cb33b00f45c93c237d88d2c9a5968", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:11:25.386Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4afb2b27eafba8fe58c090c28d951fab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:16:25.525Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efa7ea5aa62284ec199381c0adba85e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:21:25.641Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ece4731034958ae56ddfc50de22c12bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:26:26.02Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78086067fde847cf457a86dcebf1ebbd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:31:25.359Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4adc84d1e4639e17293bec7b43e6c771", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:36:25.513Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09d4d1905cd28db64c3d75fc5bc3a1b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:41:25.529Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d64bc0c819925ac0d9506eb3db92b8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:46:25.895Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12354aefc1603695b5726fe29c12f9c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:51:26.258Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d17affd6260587da1d3a6fd8dc4e884", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T10:56:26.257Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "746f8033342d347a3d5e9cd521a1d85e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:01:25.7Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "381ac4cd3c9029279c24f2d33f37498d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:06:26.189Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5aed87827cb15bf169bdda36f36cc69b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:11:25.802Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee186ca0b7c5447bedd3e9988fafabdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:16:26.019Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00e7119f25d271269687f4b3d32ab8de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:21:25.671Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce7f485df70ced2b7156359c0ecda3b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:26:25.907Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee5555001718579ea5bde8515186be67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:31:26.035Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb558883c627b891244857a32cca2b5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:36:25.478Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "075d23380196cd44dda35f5a845a5bc3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:41:27.367Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "057f0224b36d3df495496e986b70247c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:46:25.67Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "166d7f7dc9d4917f0cec4ebb07671aae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:46:25.67Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "199572d5145c8c6b46d8db219a022d7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:51:25.69Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "363e58aeddf4e8ad18b1751bb842496b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T11:56:25.989Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91bc93a624c9b63da8bf342a896a5b59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:01:25.673Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "200ac394b129fb8dbec7d42c7992b091", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:06:25.761Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ad6b55db7a58477d9adf4b60e15fa53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:11:25.695Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3689a0ded6754719dde1b8a7bcc63efd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:16:26.143Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "093e0615131b1bbad8374cf24fc4ad6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:21:25.757Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f622816f00e005b782c5ff4977268bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:26:26.344Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d5aea194edafcefc5fecc8deaca1b0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:31:25.954Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6930790346fa0110f2c62aa543b9bc00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:36:26.006Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a70e8b40b9e5159663cbbd3b9a7a88aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:41:26.073Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79e3ab441bda2b3733499efe2310166a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:46:25.508Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88b567de1b41f6cd92d102f47242da8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:51:25.863Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1dded2bf49608f1a488b2ef31f4bd741", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T12:56:25.416Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99c660c52dc4817118c533e5fa71bb26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:01:26.094Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8400ed3f33e980d54d4f49882e74457", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:06:26.397Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27a4ba71eac8ef2384c8079fe30ebde1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:11:26.123Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77096f317e8613515f54de75b90e2102", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:16:25.861Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15f7350cf327077e848831d09b9ac41d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:21:26.107Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2e8cb82b19f2c66051ce14027f3b1a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:26:26.041Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84103e52021c6fe14bbacdd23fdee25d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:31:25.424Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9201138fa0c671593bf500b2c45d71ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:36:25.893Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ce67310e91a9a0e2149428fe1f47921", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:36:25.893Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00d52406a5528229cae6d1b2ba9a37f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:41:26.333Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "722499f1bec3462a40dd306abf1f7f93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:46:26.782Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af630b211dd220a61b9908f20d8198a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:51:26.178Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de63f4553464f4ca67d40716da91730a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T13:56:25.945Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e849a065f6df23b475ce4e001d288e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:01:26.027Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8806f9b59343163005842010e00327c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:06:26.314Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "589364a1a5eff9b948fc4c544ff200e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:11:25.813Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fcdf9884e659e1dff9eb42a9717c80d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:16:26.864Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d4978baa4b073c93eb95d8005797bf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:21:26.072Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bdfd70967f652d8ab10bdfea73b9a27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:26:26.426Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1fdc09fa374516ee2cc79568a2e203e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:31:25.605Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce3666f3d87c523a6cd0d155c16e1511", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:36:26.361Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca6d685f454ce468a32c0b4e5cb21230", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:41:25.655Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4129087cda8b6c649afdaabefb4ff4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:46:25.931Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4d0c53b794b311810699389864685e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:51:25.533Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d495b06bd635c61a6bcfd2a8bff1e5d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T14:56:26.378Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21f8d4b7c40178f96bb7979f014f2f55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:01:26.221Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50ef9457117473acf23047a4690c3bce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:06:26.332Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c143cbc09a6f0d2f98ee2ba51fc575b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:11:25.895Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9939bbee3453641ad19a75bbb3520d2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:16:25.531Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05ff3868abee185dd0d472191c231d51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:21:25.638Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c14a6f2996770ab2fde0e3d35c184087", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:26:25.813Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1037a325fb03de5596f4a332780bb94d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:31:26.309Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a04b6ea87f224644af10f20a3784af30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:36:26.187Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6ee7092348a94e6aa9e1b93262fa001", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:41:26.015Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77925a5b33a7a0eb085d55480a8fddfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:41:26.015Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "329b68efa0b69325dd07aab098eb52e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:46:27.043Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "658cd49650b78ebc56ec90470b97f313", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:51:26.457Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3aeff3fe7e45617e149ed888aaae4135", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T15:56:25.576Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23edd8a84b19e3bc42284c98ffbff817", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:01:25.953Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9cb05d2ad855ef30f9e6755a9855677", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:06:25.548Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29dfc46efc28460f16c3373d6f67604c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:11:26.046Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adfd47595d125cf7da9d5f720d31b754", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:16:25.653Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21186d58430698f16a3c1a5eb785e46b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:21:26.44Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a83b433073c482e87c4dd4393826d2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:26:26.209Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "542272566af82834cafa00d64286e817", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:31:26.498Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9ac22bbc143a893b903bdd9398207a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:36:25.838Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13f6689b5be10388366631b2a581629e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:41:26.269Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37516dd10801f5aa23cab508dba31040", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:46:26.23Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88bed5c6acfce81a5de39d734e848d44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:51:26.289Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bd640d6b78eceb838d0054ecf280533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T16:56:25.741Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a651f882938ac266935aa801247f70f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:01:26.287Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "657a0467c4a2e4d4434414aa4dd5e9b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:06:26.441Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3ef7825ff267bbc42bc2695905d88c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:11:26.316Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9135b9a75edb75cc4f102c0e9cda2074", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:16:26.033Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b209d5db91025b5f3ee7d30396c11515", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:21:25.856Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e086d6db4854fe73bfe7ac29c9126aa0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:26:25.85Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "249dc7e8773cee08359bb357a0a277da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:31:25.934Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87fbc8510e18dd5c72d814d23bd10c99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:36:26.495Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "124178c7aace9b5be302ba20f0f0924f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:41:26.102Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27a7693f2b89d004a1399fef24c862ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:46:26.107Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a245100d789060db0ef95ea746b72a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:46:26.107Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "102deee93268cfd89d9c0d6caf90f5de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:51:27.276Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eccc5b0c11c6604fc9048c99b0c968ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T17:56:26.401Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfe04d909a2396d54ba223ceafafb66b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:01:26.439Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6387357637488b471e65a3f6a9c5be50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:06:26.484Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f76c2223ea04e17d26aeb5f1e43d23a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:11:26.186Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a07c21843153c58f12244e9415cee67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:16:26.381Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "543647b3b48778073da53c3491907f23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:21:26.272Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6e8079ae6d073a80e460e5eecc40bb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:26:26.653Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee1b6009be031a0af2251a3211aebf1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:31:26.207Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "071193c667a7b94f5a4cb77c9039a9f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:36:26.558Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4228722eabca1b10a4138948ec88237d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:41:25.69Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a149347d16719157683433ef380cd7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:46:25.945Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1d3139f834ed24ebcd25639fb56586b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:51:25.794Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ec6673cbcc1f3043b917cf41355c0df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T18:55:55.859Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb02f29b767cb8ee0b39065b0832bd06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:00:55.859Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c64cf2ec86a6852c01fd62ed8c31895", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:05:56.856Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0385b8cfc40f161d560a5373c3e63ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:10:56.35Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a3daf6087b0b8333bbad1e7ac1bddc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:15:56.523Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44e3c02d1e27f0a368785d9df9470eb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:20:55.774Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf555dac412d9d79561b5455ead3b930", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:25:55.624Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89cf083772d393fd41eb2f9e3c28e3fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:30:55.771Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec01b4993e01c94e366933454d7a439d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:35:56.49Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18f8572d93dd3e32c97757da66266247", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:40:55.562Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49531e8c32352aa1970ed5daf57d59d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:45:55.91Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2460fb589ae155d98290d2b5e5e628e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:45:55.91Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9dc454c472c8c90d27324b0b2dc91da5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:50:58.025Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94c7d8dc97208167c753ccbc0b59a8ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T19:55:55.871Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f4ae61c7ef50bf5a7df05686602d14f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:00:55.904Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fee7754f37ab8c251d64904a3022c65c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:05:56.45Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf3b8e2fffd35c998380741c4679473b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:10:56.244Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85b11e0f7ae28b0ec72220f86bcc483b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:15:55.622Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4cbeacd3b995a3d15ada01c36cd6ac78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:20:56.45Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c5462f61074301630b349c4bf02d6a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:25:55.884Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edba6bf06d4dee8af8a36c1a0dcaad1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:30:56.316Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71298366d2699ebddd5bfb6022cbcc29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:35:56.24Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df1745a057d5c35e289547fa9cb945bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:40:55.641Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88f183d57756dfa202e48904f362a691", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:45:55.707Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ac601c9826b1a8eb42d355cc8c32d9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:50:56.241Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95841e329f2bb9dc37c182f7683a7aef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T20:55:56.248Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc1898d6b7fc52f0bff009f52f4eea81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:00:55.946Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aaafa206bb6f0a222cc50efbc462ceea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:05:55.652Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c5b26267bcaff04b6a6575e444f65e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:10:56.357Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e832724237017373f4d1b8cb7fc11b5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:15:56.533Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f451c82dad2c18fd15e6f6b211287df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:20:56.395Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "903846490cd9fcfbc19bca63b9597b06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:25:55.66Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ceb81fe02be155822e2426770ef7daf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:30:56.276Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9fb0c55beb73e2fe473f6c9c57078fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:35:56.207Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2fa0dc1ece0d01289a2433eadcb245f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:35:56.207Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06ce27176f4853c1ec8ac63b2faf5fc2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:40:56.365Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62744e275c5cb8e791b1c142335030e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:45:56.372Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa5dd1b564de271c694d1db211bbc101", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:50:57.267Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "290bf0195582799edc601f6929e0d7e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T21:55:55.915Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbe5388de73792ed0b81e75924c46837", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:00:56.052Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92f2f2e9729ff4288591f97ca535fb5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:05:56.468Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2ca983eea36eeec3f55d0ea8a710900", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:10:55.896Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be00aa4d60af69612f4b314d4947e9d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:15:56.571Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67c21b994a4c86bdb86882ae1f691648", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:20:56.309Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c25245895a51be702bc2cc07f15d2413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:25:56.262Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "106d1683e013f9cf0c4093e9701f354c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:30:56.349Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdaa8d003546f4d11e883fafa6358b7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:35:56.367Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38a268eceef8aea4c5b3e8f38eeeaee3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:40:56.522Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c43d58fc7189af6686e927fde58da87f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:45:56.535Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6695fcb0190448c7f0d5b3131a36d0ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:50:56.505Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b17e8dd3d8162171198b1a39ba9fdb1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T22:55:55.972Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9eeb47a645421f1b78de0a251a65f973", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:00:56.394Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60d1a46f7d615bde9b4a2d496b100371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:05:56.445Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88b3469b8e82a370bc94aa875e1125fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:10:56.657Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb64a66b348753888413e900f4f4e74b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:15:56.521Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdf46e7ed1c39b9293aa0ffb73ddf2f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:20:56.616Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08b2d0e4b5e5ae4345dc5e842cb275a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:25:55.815Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e513dbc95a4747b15f947ec5b16f148", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:30:56.284Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3de058a0819f2ee86b2f5e79b0536aeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:35:56.557Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e335b08fc5521dd0f38cf9ef24d5a809", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:40:56.137Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ba6b452b8a540d19abe731f5f480ded", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:40:56.137Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d34eba77a4a075cb16c4c8e7b5fedfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:45:56.652Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd9c5a3b2244a531dab4d0c5ddd85b9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:50:56.097Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b915c6016242abc36a84bd5956ad5d74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-28T23:55:57.375Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "831de7bf23f3ced2e273dc2a5e940344", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:00:56.402Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "031db7e013ead91ef2b01f58b77ae3d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:05:56.678Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "904c9d6878893631701d4f4f12bf0ebe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:10:56.416Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19eb5b08378afcfd80afbf216ac7605a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:15:56.114Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24664fada868e69bfcc089b991534a2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:20:56.556Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cb49b59b05b13f224d32c2575d69619", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:25:56.732Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5811d6abdb764081fd406a97c52bb08b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:30:56.466Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bd64a75af1b6dbf38ee673296175ae1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:35:56.645Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c71c2fc25f26817bfd8330fbe46bde18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:40:56.114Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5899aff8b9c09a8cd0b668b0d1d814e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:45:55.853Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02bd7f7faebf5b45c2843130a4aa92a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:50:56.393Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f37bdefd537aa033ba7fa18854afe142", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T00:55:56.498Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b42c7659899d707421d62b2b8415552", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:00:55.945Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a799fd2eba4864b9317ace9e30bb647d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:05:56.642Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf6cb667f68c0c935544a6d1716737c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:10:56.446Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d93f9615eda041f614c77874bdf0f0ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:15:56.433Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d4eae3656b7103ada0636d12f451915", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:20:56.005Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81fdaa566e70bb3b655a1504a3ab7ee0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:25:56.304Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41afaaf85599392a1dd95feafc182510", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:30:56.785Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c72a0b522f1274500c8f9987db96387", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:35:56.772Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7961cd4ee6ac4c002924d1535c3ae6a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:35:56.772Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16a6cfeafd91cc168c69973a0d92d631", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:40:56.551Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23f6266abacf00556767c6ed06635f4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:45:56.43Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0d442fdf7d1780354083e597b630069", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:50:56.459Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da687a3d1a6d7a760118878d0a8b2d8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T01:55:57.33Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f12151f72e736a8e8a9b4d14dbc27aed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:00:56.842Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9a3539eaff81e604ac565d702d25a31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:05:56.868Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c33b336f37aef293fb8f843bb551b885", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:10:56.813Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ab46daa811b79490374f16ec905251c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:15:56.042Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad80011d01149fd2b1d2983b4448c2ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:20:56.106Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6cc7e2700ef9bdeb7fd7350d531186a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:25:56.62Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a920d7584d50b9299dd070225b1f8abd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:30:56.667Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc8aecd672b480168fa215074d6f3f95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:35:56.233Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e21abe721372c7a3c26168d62737f239", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:40:56.661Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc16604b0a3bba76a74bda50b26bc2a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:45:56.668Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8bcd33275f110662871398220e6cf81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:50:56.198Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0dd189cdeaa4529ac518198011597ccf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:51:02.198Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4aae1df94f989846847fd9981c890717", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T02:55:56.852Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "144650d96a1a5f109625764f84cfd33a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:00:56.038Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f84500799edb2ebf12c25b722eae2ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:05:56.435Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e4af1ded32c0a5a9c722c8ae4edbd52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:10:56.636Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90be55084db4c4daf739c6e38feeb24c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:15:56.879Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db7e6c64bc14cf8780b3fb06ae94db77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:20:56.066Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e683fdb8e7eb87de3ac83ccb9febf82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:25:55.95Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5e8ffafaeec45da0803952e02b80969", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:30:56.13Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b41e2ce0118c6c2c8c40fb83bab6109", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:30:56.13Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54401884e6486f8249c72d4167f759c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:35:56.194Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a96033ad160a61a5bfcd632ebf4b5100", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:40:57.043Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c7450a00a5df2adbe32bca768e2ae3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:45:57.043Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b0d0aa8dd1dc1cc7aa1a003f287817d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:50:56.333Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ba19d4491e4371bd4e60d841439b065", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T03:55:59.02Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32d1ccbd93f6b18bee03b7b1dd8fd7c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:00:56.657Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b6c2b7d3f3648524072ef6c6156613e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:05:56.65Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b671fd4e80b8724603315780966a52e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:10:56.881Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad2155d88eb7fb761fe857b1c242d955", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:15:56.756Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8402b1a4b22e45221e65775c8223e78e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:20:56.437Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5a47b427643e2666f2e3db61d184fef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:25:56.121Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77e34d50dfb1fe1b6bda87933d2ef8e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:30:56.365Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc529794ab23889082c5fb78071f3a1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:35:56.691Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0a0ca368f7401dea97c8796fcf4241c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:40:56.74Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "451aff51169261e12abbfc5f30701318", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:45:56.259Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e055b393a752143ae91b570275dc1b27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:50:56.966Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26553a74e79490e810d1a3da1afc974b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T04:55:56.748Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67ec7872d9ac89d5a0fd46636c85f128", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:00:56.395Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "906dfc0c7283de5803ec2c05b1df7412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:05:56.616Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef6d9d484758829114fe21a319f7b050", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:10:56.628Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80b8312c24e36abf1850f97146875cac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:15:56.568Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0271146a67fe6ac16eed95d1e8f15753", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:20:56.106Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71bc1eb8757c2fa1ceb78c9c5afc95f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:25:56.936Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b989769a7bee5e2c15f25cf868aa7544", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:30:56.498Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbfd2c21874a6b05bbd6aa2ab5e90a87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:30:56.498Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6df1ffda29ce833dfce1224be2ff2920", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:35:56.9Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "638c2d5026da0e4c483a51b303350034", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:40:56.63Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "259aaf44323adbcbbb090c219205e838", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:45:56.869Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53cbf13c3e5465de2e693e7c04ebaf1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:50:56.741Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41b5ba4d0dbddb3d0c88622559285e36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T05:55:57.292Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c9f3d45648a93b7cde675756ec2ab45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:00:56.509Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d9b568833b28bc36e219c3ecb8d0e0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:05:56.114Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96675b882e0281f7c86f855b69e4e854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:10:56.67Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2b8912128d1182b7678863b2c76f279", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:15:56.66Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "060808126f48bbe38d457eb353c5f122", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:20:56.663Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3fd17b089b679f665268db4a9a000ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:25:56.256Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bfbb3eccad3c8dc11f4caac0049dcb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:30:57.005Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67ddd19a1e8e9af5cacea6f7e7894ff6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:35:56.259Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e52b8693cda3ba1f603ed434a22060cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:40:56.693Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5122494c568da0481fe078c0eed38e3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:45:56.298Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf95b27d0625461c5b34661b8c6469aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:50:56.999Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c316dea7d4a56793187de17f046f32aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T06:55:56.75Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e68714e2e5147e4c95a67dcad4b762f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:00:56.543Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97da9f01d2113d22db30da4b53e206f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:05:56.861Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21a84a20983c268948f0e2dac66c404c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:10:56.13Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3f42cf34fdfa068d983f458a1de8414", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:15:56.999Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c68d49b76ff008c56e7d02726ea1898f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:20:56.558Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce2cd6a4a6320267806e8b9c28537bf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:25:56.834Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f662867e30af1b25c70e49aa7f4e1a29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:25:56.834Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4718ce2ab202f2a99c9a6855d9fd202f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:30:56.15Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "667594ddd51840279a38e73510d84bf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:35:56.95Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "addc744bc93136bad853ffea089d30f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:40:56.647Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad3b6f64a615cff7aabd9a47946b4e99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:45:56.794Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9813bcfd228da349478e2f4e9b8e04b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:50:56.261Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "513d8cb800349a8128e398dfbe8d1e46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T07:55:57.709Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9aea11c2f44b6890c9a734ddae1e50f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:00:56.513Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "821f1a149a989e3d89855fcd53c8e921", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:05:56.921Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9188168eacf29cf3c1e5560e79851f5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:10:56.311Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c054c58ece2b1fa054667d41561555b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:15:56.297Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31b567912b1638349a534d5ba0807e8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:20:56.943Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "becb2d2d2b64bcc2910a43921cea6d3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:25:57.075Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61312e7b1a0336fea04f48bdb4cdee91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:30:56.603Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "457ea7c1367d577176cbb1b7b21cfb3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:35:57.051Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e28b8b653b37082e791f6ba3c173490", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:40:57.128Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4680ef491380e791637a8d3139f9178b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:45:56.295Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "987d278f76786e63b4b4dea69f5c5a0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:50:56.956Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f020bca9af479db28010575e28d20e27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T08:55:56.628Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a58e628d01b5fd0795ee430fe90c235a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:00:56.805Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec51c51522236e4e32de27cfea0a1db3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:05:56.913Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbbad1eadaa99f04cb7994dc3b4bd8cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:10:56.48Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89814008fa0c7c31d61fa565d0463834", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:15:56.951Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa246e957237e744f662d525a987bf10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:15:56.951Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12c918cea259d0eb1673c2c0754352f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:20:56.344Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec9e4bbfc4cd6f679e2df4a4b9c096a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:25:57.055Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "405ae5a51c73766903eb3c80e267b059", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:30:56.533Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3d4da05ebb30e175c11f6438f954b29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:35:57.171Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6d7ef879364b978444184279904f13a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:40:56.753Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "578fc5956cf7dd83e46495bbb5349f10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:45:56.583Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e54e8e6093db3ebb2afbf6323fe60641", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:50:56.676Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f91e8b7a5f5cf9a456f36498bdba8946", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T09:55:56.872Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "916126e659ed94a042847a8f7868b69e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:00:58.396Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fe99c01933bbda7c44f422c56dba204", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:05:56.217Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed9b8a5a1964b7e9c64b8a34fd874e73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:10:56.222Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f18c0fe5295091f5214c9f833fc37aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:15:57.209Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2d26ab55cc572a720b7093becf7a5a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:20:57.138Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4354f46abd62d6c91a86b35bcc2c66a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:25:56.862Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02f48a3cdadf89250ed54cc2bea6ee53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:30:57.134Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f51e6c22a7b1530f033e7455a6c5382", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:35:56.32Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c71b516fc540638b1d7ce65a71bbe07f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:40:56.509Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74dcaa613495e53281ba5e24f361ef8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:45:56.958Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e2c2638d8b32a22b84470b9853a7a5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:50:56.904Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "329cdeae66a88b94990ed78b0dd00883", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T10:55:56.763Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fd34552ec7175e8a454db240bd5754e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:00:56.744Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6ab528137062838715793f02ebc9b2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:05:56.913Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7dca7e63b3fb35e848757fc9b7d2f2dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:05:56.913Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d340a9301eec5ec58963b0443431b4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:10:56.505Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ac565ec86cca7084d925fa1e61d1baf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:15:56.54Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ecb0610e904d878169d36d65c984dc86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:20:56.388Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12da08533e4341c8be5089643512e0ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:25:57.147Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ca4cdc58b61a487741155f2e3c948f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:30:56.824Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f849e9cf81cbefdf8603b8dcc568ec83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:35:56.681Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5389c48fbc3cf60c4cb86252f5cbcd6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:40:57.082Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ca5b16b0f9e6df674ea7ffc4a7e4cbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:45:56.89Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60e769f16723dc6c33d9563f76cb0d8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:50:56.592Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a65ffd880d3a4bd8ef8b975efd655cd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T11:55:56.952Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74a034cfc78f6e45bc8148cab25f965e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:00:58.396Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54c98272109d08692ebc0152648a2ab1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:05:56.805Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b00836729b18c6ab0e28fa907eed307", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:10:56.38Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c3d18fca4d0b9d00dc711509e819f49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:15:56.95Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c23c396d832fae6c2b23fe57412bbb7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:20:57.288Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "250e483a43f8f772f34e06bbe53f09f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:25:56.357Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5aa5c41d9691fa62d9bd30cfb56b4a14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:30:56.605Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f4ef52e52e71f7035f1bc397041c737", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:35:57.083Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25dfaa2bdfece444d37f1f3a12fa6090", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:40:57.057Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1ddcdbdc599803e269bc9d691db3ab9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:45:56.799Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89d894ecd554096a56127aa2839314c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:50:57.286Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "651e608c16907fe5f037ac67b6ad1432", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T12:55:56.512Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c6973f8f6411519cdd328ab627fe7e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:00:56.969Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "411f066ceb4fd21d1b3b5991300b461b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:05:56.935Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f863a0fbfe2939b9485cae20a8dbd280", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:10:56.61Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c8a20c861fcd1bbc7c3af93e3ea5ff0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:15:57.132Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "609a14092774dc2ac78098c649d410c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:15:57.132Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d96793a816c86ae885bb5ce5ebdb0f8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:20:57.21Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69325f24e59d2d9947fa705aeb2073c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:25:57.086Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3782afa7e43750473fec87fff986af79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:30:57.099Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1013164ca35980a9485cb63497dd3a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:35:57.203Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09a277a0bb02dfd79eced44d077fd276", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:40:57.261Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3d4fae38e4b449dfa218382db51c0e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:45:56.616Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f441e730e7cd4f4c9f5b150e6108f56d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:50:56.963Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e20d9e1538ab2846c08afddebb63983", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T13:55:56.748Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6910bdc6bac131f33ccad3f677b6821", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:00:57.883Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f59cf3bf2cc7f2cb6742e1433f41a501", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:05:57.41Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e953b928c1d2ea57f1c913975d8c6016", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:10:57.115Z", + "quantity": 51.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d9c01a69db30fa673f03eee2a94ac04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:15:57.334Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "caed52b50dbbb91dbbf20d201f77127b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:20:57.364Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06182bd7eaa97c9e71cfa20ca2faeb00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:25:56.99Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e768897f3c5b6e453942dc1540dc3d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:30:56.445Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e361a25ac8e7dd501f2b3b5d914f2df1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:35:57.361Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "749ee29e384c40260d0820b88af78645", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:40:57.368Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33fd5a063605084032ba4f80d0a69a10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:45:56.764Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84fd42967d6e654dd64c8126c925a929", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:50:57.287Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d17970321de378c58aa50965d7f4b33d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T14:55:56.903Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d44ad1c00d934bc88d765469ae3e60a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:00:56.971Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b05d30581b242447d6a2c75db970e61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:05:56.924Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad316289d8ad8fc7b149df1abb8f7bf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:10:57.41Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a46798a6ccdc72b9d44c3dc3a5b9a45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:15:56.955Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a054a0de3269a334056c567550ead8ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:20:56.994Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec412d61dd004d24e083060793fa832f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:25:57.245Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e85872e0b9c764a94eb0db4ca362917", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:25:57.245Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9e6a2d61c3b5e2eeea598bd74900631", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:30:56.61Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8153d5fbaa7450fc8df087f37ff3c992", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:35:57.379Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3b174a8511458891e7f770874f4f3b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:40:56.981Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae5704c389986fe91d261f6dec3a176a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:45:57.09Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3e7f4a6b5620c9f288b988d2ba20930", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:50:57.135Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40d8edaec55cfae00dfb7a51a5a56598", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T15:55:57.181Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3444f482b5b160bfcaa01b77d6de7cad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:00:57.16Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cb221b0bace3f346b5ed6b31dad6dda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:05:58.194Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa0a27b6ef25230d5050f9ac090587c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:10:56.883Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c635060cad3f218a40b583deaf627e5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:15:57.25Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b3ff89e952edb174210d663e77a6f19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:20:57.006Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b76098358ba7622095be89d5cf762a51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:25:56.616Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb2fd58435e3f8c08de20be0851d68ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:30:56.882Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99edc5bd12e51bd4fd704019407c5beb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:35:57.374Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "004aad75444866bf2e220f2030e3d728", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:40:56.618Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f593a1574ff961af399ebc98201ff409", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:45:57.083Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c256b0ebea0425652cf4313c046c0b11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:50:57.168Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2a8850bca7817a9631ecc2c496d024b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T16:55:57.039Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efa69f9cfef97933eea16eb3119172a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:00:56.625Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7975c2862e242bb19afad6fd76d00c3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:05:57.029Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6627f9aed66bfbc0e57bcb60a564dc3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:10:57.308Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4ab96fb05ee60e3726354e2011670e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:15:57.204Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f92021a57ca72c271da3920df9083cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:20:56.742Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ac0629bd3670e47239ecd4158ead708", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:20:56.742Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9df374fce7396c93b1b91d0e6646d49a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:25:57.402Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbb2a6727fdad08d8638bcc95ae6c02c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:30:57.238Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c1d1e0450bd9ef6ee37bce8a5b90974", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:35:57.508Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82bf673e4afdb139c6f8acf88177bbe1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:40:57.448Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5d9aba01ad896f8e9daf0a8da661b51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:45:56.807Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8672239d1eaaf87def5073013fb37ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:50:56.995Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74f82ada5a66e1cc747afb65d0eae758", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T17:55:57.37Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fa8ccc70466a888283fd19a85ba7824", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:00:57.193Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2050f433762fc75e6f1321121b29dafa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:05:58.659Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8dbcc8cbf123f4c1b2c744d50a362be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:10:56.901Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83d6fd231a6ba68d89b345cfda693461", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:15:56.884Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "106b410430413ee1c8af04327ce2d380", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:20:57.336Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90fe70298a19c5232e79d62515a7bef0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:25:57.541Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a0969275b8463ca055854a16b855350", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:30:57.307Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee85aff845221c1facc5aaf4f0caafe9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:35:57.463Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43b8feb357fe3d0dbd38979bd67bd158", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:40:57.436Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a4e3ef44c6422274cb32ce8ab54bdb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:45:57.448Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbea56f362d73a2632291c92c30ab432", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:50:56.875Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50280a5aece0ee3d546744de9a37afa8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T18:55:57.415Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "361e13309dfaf673404e3a449f684ea2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:00:57.12Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8171a08384cbe5fd462ae5af4be24e7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:05:56.713Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c02e39da52a511625d2894df22eac980", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:10:56.909Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d553ad2104cbb40ff71f4359d84517e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:15:57.396Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d273ddd060abdb49f8959509ac4869a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:20:57.519Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c523b8e4ceb5d13078bd0ff7c72da71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:25:57.374Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32f0ccfe7259244519b31c3f41d3710c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:30:56.746Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7cc55517f1cf38ba098c3c1c8353cdc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:35:56.68Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4187c575d543aba9352ac4fffbe1c7d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:35:56.68Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68d970ebceff19032fe56294f6ace0e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:40:56.892Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7768c9fb4503b90caaa1b069d68afbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:45:57.147Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "624c31182364f6ed484e6430b54b1d7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:50:57.291Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17841092bd52e7d651d9c3f3cc33e694", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T19:55:57.172Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b54f7b1e35f1e2a22ba164aab0bbacde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:00:57.364Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bffa0941a411d6c2808ae5bae131b90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:05:57.286Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "267331261fbc3ddcb7ed739089637d64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:10:58.485Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce15e2f124db537055b2074759288bdf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:15:57.617Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b68f85b3f2a205f51d457ef83c805a62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:20:56.88Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31d64bfb916d0b99e89e83af6298852c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:25:57.355Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41a862977123739763af7a669de7968e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:30:56.645Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e092b00beafc913fb3baa283a41a3c52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:35:57.196Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7f6850ceff5dbecf800b496b009cb61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:40:57.633Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4de2820b60db9323f081d69943f1e735", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:45:57.512Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3056d2a2339940d25f97ea721ea52fe7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:50:57.358Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afa9a12858220fdb99dd70fca4c8f4f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T20:55:57.475Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b00a6d478d195c584cf795fcf8e2110b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:00:56.846Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c3ed033e08c50dfaf0f49f0368e0956", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:05:56.706Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ff42a249a79757e7df3fd820708cd55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:10:57.58Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "115a5602e214b2e78d57ff31d0f79b80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:15:57.381Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "458a74390b7e2806422e5a18754613f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:20:57.334Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c8f6537899c7c38e28501cdfe5d9cb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:25:57.364Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af01929952c8ab43af08570e02a79cce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:25:57.364Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2acf26859830ce71100c7038f197c4d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:30:57.619Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b55a183956b3eeea737b3ae4506b5b2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:35:57.236Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05a7255f8edfdac035fe33d25562a242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:40:57.615Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "053680b937921643d4c61bd8865d774f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:45:57.668Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fff77d8340bec83f91ffed1ae65d47f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:50:57.572Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3d42f13adcffadd8ac6f07ef569d92f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T21:55:57.572Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fade470da0671880953393f250cbb807", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:00:57.523Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75f457c925b8547a35269522278561ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:05:56.863Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0011567473e24fedbc72c14790286a94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:10:57.391Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f23d94f0815cefe6f2f1ded2eb65378d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:15:58.71Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc6f31ed4eafb3ce612a2e553e7456cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:20:57.635Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7355e9776cc8ec0a1df5edefc5754050", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:25:57.661Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b9ad2c3968e13d63961e6e4ae738278", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:30:57.665Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f5535a0697eee6d9edf17d5c9e797c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:35:57.387Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "622dbb1df30c9e63f46a2d8ae39b8b96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:40:56.887Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2b81307eac5755f78d77780ca9eccc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:45:57.228Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "845cac17605bfdc39a3147fbffec38e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:50:56.852Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4462f731812aacaec406ecb8417ca1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T22:55:57.159Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fd861e0a426fa69e54539920599da36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:00:57.36Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c7ad16b26c4147b8826d1d59e07ac0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:05:57.371Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bc9d486c441e096135ce7c29f5ca93d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:10:57.646Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e6675c0118d947645bec4eac4303d76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:15:57.719Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "523e7682aa7a841b599b29e72a707bdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:20:56.775Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17c81efdbfab8770cff87adc4be75ee9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:25:57.429Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d228d22fa3b1107576d8122f801751a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:30:57.693Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c93b42b3ee621b9a909f1c0c5291f04c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:35:57.704Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3972693fca61a70f4c7c61ceecfe7ae4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:35:57.704Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02e55b4b46874eeb0091f028e4391bfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:40:57.564Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "097f34cc7068d61ed362423baa7cf1c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:45:57.331Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4b92a7f4c3a427396bd11b001779b0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:50:56.955Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a632676d4ae601885b4ef48d4acae3c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-29T23:55:57.129Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c76188cda1b6267b8322e23877b38ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:00:57.633Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb75c63d79f6ac9b2199284314c3709f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:05:57.381Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c9daf8ea9f0f971c96f6e52197bc24a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:10:56.837Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9258d85325c8cb9aa854a374799eb22d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:15:58.928Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59ed4a16567b52eabb93356bd3f904d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:20:57.679Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45c4d916fc84e0c5156ffbe7afae1336", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:25:56.874Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03e4eff585009f406714575a64bb236b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:30:56.929Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ce67ad2d0da972b38933a9d913c74bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:35:57.59Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ef9fd4928e88b38d08557cf9b778354", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:40:57.763Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "800f8cbef88136e3905ba656a6c62bfc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:45:57.111Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05f1001dc9a6bcd24400f566d31deedd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:50:57.794Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69782cde8795cbfe3a53243d94407385", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T00:55:56.876Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "889393f57a632700f97e5ea79aa026a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:00:57.221Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d2761710c9c6b9e2770b0b1147b9c48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:05:57.532Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca3a892f8c99d7d7e1c0ef304044c48e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:10:56.957Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71cddaad939cda2e7acace3c5373b51f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:15:57.051Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae2633c3e25b283507778a998e7201f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:20:57.031Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb341c469a7c6d1abdeda3667cb2a7fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:25:57.775Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3532e9a254a4078d53808118f8d003fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:30:57.77Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f8ce77d8a8bfa40f8dd57fb6b7f216c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:35:57.65Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d21582876eebff539427211717ba273", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:40:57.799Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7245425168940dab9f5f84c0d640c29d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:40:57.799Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6abb1c8007eab03af0d43ec25c6a554b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:45:57.744Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2e92165ea00819e9e75e15434562b2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:50:56.984Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7276a184ccd25180679c1869af9353ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T01:55:57.323Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c92b7087235ca0e0a1fb7203d80cccd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:00:57.549Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "612900f1a5c689347df4b6a59db26f6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:05:57.811Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5db627219250340be53dbe44c41433aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:10:57.457Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7554e5690062f35f77fdf7e89ea989a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:15:56.958Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ca5f0c96c82a0dd42bd717e2bbcec99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:20:58.719Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cf2617a5411615f50b064a80cac5db8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:25:57.25Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dce2e394c6f28015eeca586059d2b17e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:30:56.949Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39b43da136043ad8c71068c25d7bd6b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:35:57.709Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14076459892898b86f6bef30f5b5f581", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:40:57.035Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4b84a03ac8dc2bfa614abb43b6ffb62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:45:57.599Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "378b26aa8036660bf9bfc30b20feb622", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:50:56.994Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb8a261ccce76555423195d16e83c5e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T02:55:57.582Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4befe09546e35ec0356ad41e5546db6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:00:57.612Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2f59f72ecca1f27c65ffc6589337cfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:05:57.493Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f204d1badac5ad25f15d3799cce09199", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:10:57.335Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd15041ba0115b5a67021b92828610e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:15:57.187Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b1da05aeb19269a59052e274995eb5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:20:57.453Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcd2e136b0fcbad2fc514a45b250227e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:25:57.731Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1adb62bba7a666ca880ebde9924ac519", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:30:57.478Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2040c55459884d7f4a5ca4f273594ff1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:35:57.433Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fe02144031882a0e19372fb5ffaafa6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:40:57.2Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8e25dd9afd2ac9e26840ee52c785438", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:45:57.064Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b706ab4d45dd6459e9a1b99ff6145d6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:50:57.235Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fa8eb548f83e7cfd3d3c85d02e0a762", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:55:57.414Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85d0de54715c15c9c1bb0508bae8b5b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T03:55:57.414Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b55d529e755ea9959b549931ff273fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:00:57.269Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e54c3f1418b86739ec7a5c42f4b3719c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:05:57.755Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "692e815effa7a45305ebbf6316cdf87d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:10:57.508Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e3c52206b7bc5a76cf2219036ba39b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:15:57.563Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c64867f1e8bddd701cabb32b342b6a79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:20:57.686Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9cad77b56bf2ff8ac3069d9e4e0711c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:25:59.452Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0873c0eff69b7f7e2de6aa59dd62903", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:30:57.487Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bafec2306a2fd215d943df70de51a4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:35:57.673Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "836ba56e2019489b929a4834d9fa87c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:40:57.552Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edaa7a847d87d99f362d21d693059bc2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:45:57.542Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f28e0c9a12af5fbb411e89db3415db07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:50:57.525Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e41c0e6258bf5ab48a820a1e23fbf053", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T04:55:57.505Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0de1d665d4d906e8921e2b9d91d509ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:00:57.537Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "676a177e67497104c732f517e7c871b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:05:57.694Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c783790c9e3eeed675c60e25994268c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:10:57.588Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df7a21a43425d46d6518f47cdcf9963d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:15:57.067Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a482fbae0891e5d6a9731a99971c40e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:20:57.092Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "848a4e006c0084e578a3fe0b5b74f65e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:25:57.983Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ad0039162026f58f0ee2064310e9e26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:30:57.226Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7fab09439f1b1adea8b429e951aeeadb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:35:57.477Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5143960d9b01be7dba5ab21c0d7511ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:40:57.614Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e6459467732eddcadc7152a0f6d7d60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:45:57.605Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1bae58a59ae68b8d8393c6ef41144f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:45:57.605Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98a795c5bba83df23895d5fc56bfddf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:50:57.851Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5b15945f5e100a704400f00160e6c51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T05:55:57.172Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a96aaeded92fbcf9467116f7405fa356", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T06:00:57.232Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ac5b3854c3ad9fa86a09697861086e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T06:05:57.745Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0861e159bbb255fb3d05e6ba370b01c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T06:35:57.755Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c822935655954f5e47c54585f37e3c13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T06:40:57.195Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80525b98bda82b6d55df5534eb90e233", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:05:57.627Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29e106be45740098562bdeab7755eef1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:10:57.477Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ae0179eaef44f18668c0ea6c074e48f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:15:57.873Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f41d8cf3855fdc42863de3ea88f0d667", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:20:57.688Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63d1d3103bd92922f6796fb0586ffa96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:25:57.606Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6af2990c7cdd8409857f46091276e8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:30:57.506Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f4635f0635a921d9229bfc50ba48a14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:35:57.851Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebcf8a06aa787404cc711d8a93d43f27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:40:57.757Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bdc7d7531effe22bb62a4d8f6244598", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:45:57.134Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "806f45f4ac73644ddf61b40cdf62bcfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:45:57.134Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cbdeb49ef2fddac75b1beb467906f46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:50:57.438Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b733aa376d4da7cd207add10aefeced3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T07:55:58.075Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0731f1b9d79cad32b034d22ff946ee1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:00:57.424Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5adc02247f5f5b4b012e58f44537ff4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:05:57.876Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "512937b0ff5c4691d22945556b0f8288", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:10:57.31Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c75af638a230ecc59990e5d64760912", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:15:57.755Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fab92065434decef54aa108b7ec6366", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:20:57.586Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f815ea682c729c2431cfb6f104db1874", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:25:58.006Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ad059fffcc6f46d7766a6e0a6cf8a38", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:30:58.345Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2d956b939d5c061dc7cc9a67f9f80d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:35:57.783Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d564874c36e509a115288e204c13f3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:40:58.085Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9e0f2152e87d07f28d0fb1c76a748a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:45:57.897Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d1d9497d76fd7bb8523c5820f1c08bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:50:57.3Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c4055be2d1ef286118c61c57811b1b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T08:55:57.382Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e02afdada745af7fdc48ee4c79e9211f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:00:57.572Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9010beb05cd2a16b797d517734a7e365", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:05:58.074Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f7213a86349f9aa88fb36c7c80b60c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:10:57.575Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7745608523e0348a9508a25dbfca445", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:15:57.668Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1cf6f076977fd90353d357c0b94b694", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:20:57.624Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40f408212fff03d48ceebc6249443d73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:25:57.444Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d84eaab6648c0fb37a787aff23a35366", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:30:57.512Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "126c549ead73a607ac1d9ea8091c8f23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:35:57.975Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12704e6e23a85c50b29ca47ec263704d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:40:57.283Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3b95b1d4431d220fdbef7544f0d8d67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:45:57.591Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c8714017f279f777a593800fd9f05b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:50:57.505Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a6ef14c6b45978fd309cbd7c60868d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:55:57.712Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65d0cac96c78f200b8dde25cec1900f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T09:55:57.712Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c3256c50be03843a126690b8eedfa27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:00:57.144Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8ae9ab318b4f6de84e3548f415f6247", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:05:57.739Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab1d6f874121555a5ff9140ca6ab0f88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:10:58.036Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a152eb0c4c30a902b92bc317ef0e7abc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:15:57.28Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f9eb34d582127fddeb498820b954958", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:20:57.804Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a61f07d91a2d554df7a39cdf03d61c69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:25:57.818Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec8366d6869ed0a194d2e1115e10231e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:50:57.904Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a1d729ce5609d5226ed906c223be4da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T10:55:57.257Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f75001eab144ba7012dd61bc965f16db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:20:57.913Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "891040bb3bf2e8ac36fb8a9367b57972", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:25:57.795Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a931e2a230fcc2c4779109f8fcb6cbfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:30:57.522Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b210dcdcec0c64353f9d04d093d6e355", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:36:00.811Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c369c183c9fc7979fb2c29f291fb2f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:40:58.134Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56dff269782937e2925310fb5dc7745f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:40:58.134Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d77a28c08236ee4073d436d784c7d9f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:45:58.134Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67d51978673ad563ea749a585e1a6e4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:50:58.134Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "458099fadaba81dd8a5a8877394ef497", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T11:55:58.134Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "437c2a7aa597747c7f73f4aed401b045", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:00:57.885Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b738fd0fb879926e1b2404d571080a20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:05:58.002Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60c7eb5cbe6be55e6e0177acad79e728", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:10:58.056Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "039734620a6f785d7e76f7a9cc3dc3d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:15:57.893Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bdc95291504b2c5a05773b065848dc5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:20:57.913Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f254d7bb7efe15bac1aa4773e82fab1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:25:58.153Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4f187b4db6cddea54c95db807213833", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:30:58.07Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d67dfb05ba812a961ef84d63e38ce63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:36:00.388Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0e479f74bf8b03c1df1282d45948121", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:40:57.403Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d441f2524997e5a5e51fefb12a107278", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:45:57.99Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6b09edb8dd28baddbf57ea7edd5258d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:50:57.816Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c0c7e8811e06e0b286432072cd115e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T12:55:57.497Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fddec52fc02df30418fc85108fa1875c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:00:58.096Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf83b9d7be7bf10c708ccdd776586b5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:05:58.108Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "604f543a99b5806c5b3930b51dac41fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:10:57.547Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd494ca434d6efcd91c4f7d7821d1ed1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:15:57.944Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6a56359e21fda1215715043a8d90b98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:20:58.084Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6daa0543c14b80d8602167773d67817e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:25:58.189Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e391f333c3175c6c343d2385f5529b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:30:57.457Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e83f33f3abc5337c85df5dfab950f027", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:35:57.373Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cae46e196e200e4c0681a9b8c71bc39d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:40:57.913Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d100d020f56896037829ec16106facd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:45:57.448Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f0dcc94d6224efe45af3621db2adff6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:50:58.121Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8d216285fae6c9deec756cd75cde708", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:50:58.121Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65c0b79c1ce0fac66b63b81269535ed9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T13:55:57.874Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b34830648f7770c2a7564fa1bc250d60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:00:58.293Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48c4f714e290e6f34935ff96bac284f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:05:57.77Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3eafe2b571bddab08c76901858e822d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:10:57.597Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abe3d1abbe777adb0fe202c566d0d170", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:15:58.028Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7968ac8b91539b681c8e7899e2fddd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:20:57.899Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16033f3f1be49349b7dc82836cad67c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:25:57.566Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "130941dc12478360ea1451797d35edb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:30:57.663Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c7a44ae205187f66908db44637a984c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:35:58.088Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35c444cf319dad87ae569c597b973e31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:40:59.574Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8b3fbf89da429e21daccd6240b0d03f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:45:57.956Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "904ee1c5451075e9901102e17d5e86a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:50:58.572Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6192761e9489b9efc288bf04851e887b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T14:55:58.333Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3131eca5885896b3c0354132ffdd5586", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:00:57.879Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8542aed109100eeb00e0dc931fb2e171", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:05:57.34Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0136df27d38e1d28590168ff657c869e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:10:58.345Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3de3a263514ed898c1b1a9cfdf0f9720", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:15:58.019Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f39fe68c892b84a2e9df070e8d262766", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:20:58.086Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8759de58493eb57f0d93ed69c8ee637", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:25:58.66Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "432dc86c0217be7bd9921769e9cb459d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:30:58.411Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02d836f7da0f006e77f0fbc2834db351", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:35:57.815Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfb8a3ac9ec0a9a9e6f07b94dfe770aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:40:58.207Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17415205c894637e3c687423ec46f0dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:45:57.774Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da16ee1f7b786b73eab1652e2ca8eda3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:50:58.287Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69c5778c46f62c41d6f3341b024bedf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T15:55:58.287Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89ba1e6ace4edb22e680ba5a8d692b49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:00:57.94Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82b2d6f580644f8489845481c848266e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:00:57.94Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0e5fec02aceda5f1c89a55ef0aa63e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:05:58.096Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1104491f56c6e6d23a18801f376aeb49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:10:57.494Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cbca259ec8506a7aac40c11f76c84f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:15:57.49Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3607c04a28af84b8e6bdbaac94972a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:20:58.081Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0744660e10c41b2fed3b641008f448fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:25:58.009Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f861eac2c126322fc8a8bddeafd94f99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:30:58.139Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a470323d3849eb78819ae62f79d5b31c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:35:57.354Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e46b28e1e3791f3bc1d8968292f596f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:40:57.919Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b45f367b72f75715c02e4ab08e21390", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:46:00.698Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5cc6c1f1d1f66a9e3a2dd9424933a68", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:50:58.226Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "948b51986e53b8c0e540d81ebc9308fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T16:55:57.486Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66fe52a3b2b0f0c715ff3726c5a8a26c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:00:58.047Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a47a9e6334f7d16f4871b2dc7455d55b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:05:57.389Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99b9f9a52ee255f4a4e333fe27efd3b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:10:58.368Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94dacef6df5cfdeb7ba19ffab620ab5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:15:57.973Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88c79503573719a67925533f8407edf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:20:58.144Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a6212baf83c3e67b92743abca2dc1fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:25:58.022Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "807af3e7cbc93682cc217edb86d9041a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:30:57.459Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e52e7ab3866f84290b4fe25e787daaed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:35:58.226Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e70d63d4c52bd59a135cd8617cc2ae1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:40:58.015Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4d5133194f3db9d8027fad6aca78b19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:45:58.04Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7046d4c59f0ee65cef61d7cea9ca263", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:50:57.814Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a575f6afb4216d37f583765f8311ca4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T17:55:57.753Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46780231c57056f19f97cbd9cc41286e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:00:58.516Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25838641ff1e3498287d1bdb66be80a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:05:57.84Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3276552a056a8b80b2a8e24ea291df57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:10:58.34Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33c0ff3a46753b343f853bd43c1edfd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:15:57.77Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d75274b635ce98bfea3b1f4dd930f96d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:15:57.77Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aef6c20a04b971369521f0ee1de4bc86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:20:58.407Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19e70ee2bc33a417a9cc227dded88d2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:25:58.262Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b5f8aaeea0856d03d65f55d994de06c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:30:57.561Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58a311752fa4d0a394b6c33c7fd3845a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:35:57.61Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03beeb895e6a5596affc42e26f999274", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:40:57.585Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64a9b453d2410cd4a6f5f8cd7c43373d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:45:57.616Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "426f36b67c5c535b2e76a3e5b4064c8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:50:58.848Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da3e2959f4a853345a04ee4b1536bdf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T18:55:58.277Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e2632949a57869f2e57e975813de2ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:00:58.264Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49d88a430dde304ed2ac5a8599a4e3b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:05:58.398Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77e0ec005d06e02eab404938fe749167", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:10:58.409Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "135804801940142f05839ae966dc1dfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:15:58.434Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7529eb255f8be63ad87e56853e11f3d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:20:57.494Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "210bd9b964abaf8d56b3133fda2ef933", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:25:57.926Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6ee58507b8134665196e647b3b153b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:30:57.812Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "081af32f389371599cba037121b0f557", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:35:57.64Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b08645b181cfdb91c3ad2aed3364b9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:40:58.213Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "519778a3516b77200112de706a58f6f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:45:57.484Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3644122a46d84e63c131df3c168a65b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:50:57.943Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1df403ee5a85d3fa2f14f3a9aa678315", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T19:55:58.173Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e81a40e886060078868636b8eca2529", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:00:58.021Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f5cea2f2d53bb45c8dd88be712bf232", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:05:57.898Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a07d3b2ce5ce578e1798a7dc65a2befa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:05:57.898Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "105c8ca16ac8e9cb18e8abd6c39a99d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:10:57.855Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab34e5aa6e14c6aaf4b26b817e68b016", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:15:58.054Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0b52d7bf9c84eeabf66ce5feb97d9a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:20:57.593Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b727e267fabdad04f5437fdec21734d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:25:57.878Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16ee3dc9848ad2fb66f3f85f6f6c60fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:30:58.357Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bb93306191fa7a29c266016a1db8750", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:35:58.252Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3056bbc9568f6adbf9b4f8474d97063b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:40:58.028Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26a6108c0c03792554468db5473ff971", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:45:57.858Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be45b8f83837d6058cf85f139bf6455a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:50:58.345Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f912c2eab70dcd85eea79119b6a4b3d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T20:55:59.492Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e6b40540564bc933c2ba62da7ea895b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:00:58.239Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c176064451a3290bfc712ff4597965a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:05:57.804Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99cfd924d4195d4b80f10c339e8f7d98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:10:57.708Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee42600b463da9d779e5d502baf5b698", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:15:58.315Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27f5485d1a1aa270f3f582a89d427396", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:20:58.348Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b18dc8383fadef8163af20612713f501", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:25:58.501Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "865d351ed64a5e2a688e307b46b94be4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:30:57.611Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45bb8c311465940c8904b6fad73d45c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:35:58.194Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "683955dbdaebcd8d28c933d4d6291267", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:40:58.156Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56e3de220ebc7c019b3fdf8bbaa2dee9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:45:58.106Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "330e5961c7c58d956c70c97f6fa6da2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:50:58.518Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3676ffb281b8cb4e0750d7259cc0c27e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T21:55:58.277Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40ab17ecc8a5fb9a7e3126fa838df9b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:00:57.649Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d660620293dcd1dbe344271d5aa3d152", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:05:58.176Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2223356a2d1067c75ff7a76c8c73d28c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:05:58.176Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa893aada88f782eddb64189fea3a3d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:10:57.811Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f9e5c805f1f02d3047d8c5cd810cfdc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:15:58.568Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5479ff9439b8e6bdbfebb0f29a44c97b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:20:58.301Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81aefce762dd5e2cc0d8913dc4083200", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:25:58.428Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc6b374e939ef0adfb5c5090a47d7eb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:30:58.624Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "622b6cd496717d398acaba16d1efb60f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:35:58.545Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff344e97272a14020c4a1797fda5100c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:40:58.514Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b25097ea4813da4cedd414e75b2ec0e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:45:58.563Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2de5023312d020fb9124695fc322233b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:50:58.268Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2357ae861d748ec58cb6509e81e0d2cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T22:55:58.611Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4231cde60aa19180565a9c05517a7469", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:00:59.135Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a10e701fc239c93bc8657774415fae8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:05:57.903Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7335d4b0adae14389685bed4a89bce0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:10:57.769Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86d51898098835c5be464dc9ca37b3f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:15:58.492Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a3e934178a907c550c7932a622420e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:20:58.361Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4547100c4c129cea81f7d247c9d21211", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:25:57.682Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b68ee1dff19f639c73c493a8a4dc48d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:30:58.297Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1b465aa657eb129998fc5fd9b77c50d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:35:58.063Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1203be0cab678dd6eaeace4db0e0ca2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:40:58.399Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "245ab7cfac700ac852d163674fab3054", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:45:57.946Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32530b02c26d4e7b40c78402fb3123aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:50:58.687Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a31dbee9958d884a4e33ba7da2b8795", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-30T23:55:58.001Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9919e4b7b4f73dbed277e86e76ee8fd9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:00:58.291Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5b3b7277d9890e829842fd864ab04a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:05:58.042Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad92d48a8ae31f8f9cd67e6bb6380303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:10:58.364Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cf7fabe855d82992600ba225ad93003", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:10:58.364Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fdbb4daca718e50e74d8f10d6b41c4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:15:58.345Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70de7f410a7c3a6cdf18909af237d29a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:20:58.682Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "868dd25e1012048df58486a99fc0e1b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:25:57.91Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b7b8916607014347eeabcf270ed9e55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:30:58.478Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3af1891fe541e2ee12e4ade8cc133636", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:35:58.541Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "057bf10278d998824b1f7cca9e9874a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:40:58.439Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b560e76920fefedd4c100703bf7324b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:45:58.671Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a759d1a0dc22d9a23ea2f07a6a271744", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:50:58.045Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "375e74605df88fe8845648ae1498d423", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T00:55:58.229Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abfc98d85502b81c2d20d5eb574665f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:00:59.034Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e16d294e0ad9c095e543b9b8c33a9f2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:05:58.144Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9b0b91fc96b0318fb756cf54b2dcc8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:10:57.805Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa17ee382a7a21c3d30518c54071632d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:15:58.805Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2eb942c5274b26489cb83fec748a6ed9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:20:58.706Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01809f1958f5136330e10cf5d21b9125", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:25:57.837Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "043caa09f35b061c7a9c15f5cc5bf768", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:30:58.251Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3a43aec95d21f5f53c17eaebef138e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:35:58.758Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6cf8dcbba2e82cd8d0c780e6c56e9d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:40:58.15Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b18c7ad4bcd1652967b888bf73ce53a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:45:58.628Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c66095b9cdf46750097c9e02ede960be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:50:58.605Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbbe5ce2fee5a04647c81f176247787d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T01:55:58.013Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f56b526fd5d8a1e30ed1e0ceb379d40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:00:57.864Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f95bb4863b824fd171ec45be94845d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:05:58.008Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9aa9d86a1ffa809256916253dcf24f9a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:10:58.334Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f6d9e6168aa27a778317be60f9b10d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:15:58.728Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adef53e88eed7d34c6b5ef87ef07a0f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:20:58.317Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3aa8661f558c6ec742012438628bc78c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:25:58.555Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be073c2d06adf54bd10ae48253281021", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:25:58.555Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb71c9b1bd345af0d107876c1c419446", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:30:58.218Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adafc4373366766370f832214a506044", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:35:58.724Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19a7cb31551ff2579899dd5a653c7293", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:40:58.413Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68f5f6c5eecb80bf1298608fd271a3e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:45:58.822Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55e7948418a5c28ca271ae7ccb22617d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:50:58.012Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fa4a658b343b45dc63a82d5f02dfa0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T02:55:58.72Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64f137619081b77e3ea0204181f4f8d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:00:58.059Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5219e9fad15b441001b51920ac602dd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:05:59.297Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b528dbff10de6611c0437e6766ac7fec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:10:58.486Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "636ddf6ac26efa3639579030d52ec550", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:15:58.489Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "317a3c4c01a6ac73d1c1e2b995f161ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:20:58.521Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fb35ca1b6f48f75f9cb72455fdd23f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:25:58.282Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71b26d7c2e442508df1a4a898a2db182", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:30:58.048Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25cb8c7a90fb19c7cfcd37f46d4eef44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:35:58.714Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "019efd6d0156f63cb980ee96620dca49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:40:57.998Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bb9168f67b02ee4f983181aba4cdd23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:45:58.814Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cafbd5e6a93af73c8567b13566a971ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:50:58.463Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0f3b192a8656fbfc6ca86fc5535350e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T03:55:58.275Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b4afe7cd844a831ff56452f9592f3a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:00:58.442Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7dfdc5ce40e3886b69df43b2a08d356d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:05:58.199Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0061bab27dc5b46eb5cebb8b7e8246a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:10:58.82Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d98ed4d645ec190f90b8ebf3d37294f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:15:57.929Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "515e6c8ad8d58c8d5ecbb1cf4945f22e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:20:58.29Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e7d0549a1be24d8721825567f43a576", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:25:58.529Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6591e803cba01feab7f1d84550fa058", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:25:58.529Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "549330620d2d965e5773b4e3716fbb71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:30:58.57Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "501a9ccddc963f6a834deaac4dcd052b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:35:58.398Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee6da3f324bb0da66f5f80e5d81c9938", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:40:58.314Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75133d86506597dc5af7c03a60c8d6de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:45:58.536Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d1fb207528b946307418d9df220a1f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:50:57.979Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36b98ed3b73c01bad5056857ab091075", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T04:55:58.904Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9139e6bed1bceaa6832b173b7daaf67a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:00:58.891Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c9ed7c1587ed22460dcb92fe28e01fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:05:58.807Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "066bc5819d45efaa19a8d690e188ffa4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:11:00.156Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "846ae9a814860a612680c4db9bd6804a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:15:58.052Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e10b5cba24db880a595b1a656c941db4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:20:58.297Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2dad929f73a30d67e6c4824f30ffda5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:25:58.761Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7425d9dc506d8aaae9bc1ba2039e07e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:30:58.987Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "213c2019ece4e158b652ba399b2725a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:35:58.006Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd1044090c68a9d7e5f831a4fefff288", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:40:58.276Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b228d5b58f789dfacb749b1c9abe1d70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:45:58.334Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7ad23419b414bd09494897789d1eb40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:50:58.08Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0702edf93ea9f7b3cfe93b8757201cf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T05:55:58.37Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "795410867416093d251697c86ba47ff5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:00:58.644Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1df5ac36fe5dad1fa185dc1e30907b65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:05:58.724Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c1cd5e6f348fb84e26ac0d44a3d48b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:10:58.255Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca1cd523d738add115712e66b1c54845", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:15:58.165Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8893c3d285473d99673e3fd902fb1f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:15:58.165Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59facec012cfd4b57af71315d648559b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:20:58.874Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62e627fd0294f8d83baa57359aabd6e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:25:58.423Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f93b7737206eb7f6f3512995f773e84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:30:58.402Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc6d1b8b055dd6a70fb0e1f90eb54037", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:35:59.014Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd884f92e54adbd7f10d5725c5f249eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:40:58.33Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1782a8aae89a88dcaaafad38c11b68bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:45:59.138Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f52c40894a8da2d6b2573f3e2750188", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:50:58.99Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8667dcfc76cb05474790e9321739b67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T06:55:58.589Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "285b7f78966191bfb150b822c758b7e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:00:59.082Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "909c0d4b7357730290c351bfc3dce49d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:05:58.938Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a1f2d22ef1e292acb8a164f3e17ac6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:11:00.216Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "105047ef7f4dea16eb9550a777f58e14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:15:58.787Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5b5f6c01e31c4d0ca4c798bbafc35ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:20:58.684Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abd4efcec702b59a3d706f57721d08a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:25:58.366Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bc06d297fa1782b91834c2ebb590555", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:30:58.876Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "819c088f42d37ceb46e97ee8950ad358", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:35:58.778Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ce2432c3a528eb7a3b61d1a7bd60f44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:40:58.907Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "042e57cc3db8075299f77e29b67a7bf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:45:58.698Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fc36d31798e115094cda25fc8278bd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:50:58.748Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41fb18898f3f41518d4298af11fb648c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T07:55:58.385Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8754e7b1b99fb4277d3e0e48be199b94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:00:59.075Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "066f28c2325deb86842239d2935acb5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:05:58.987Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47cb5926368748c079016cc774b5e22f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:10:58.41Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e853e1a6172b0618f773f19bab336f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:15:58.857Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c8f320eddd154d7c288de2a84c1aa47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:15:58.857Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e50d5d096a150bb0dab860e35b5471ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:20:58.698Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce2c7ee41fabb1734cc988ff7d2ad379", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:25:59.145Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a55c4893846399a9bf7a5ec63aac174d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:30:58.6Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c24e934101e92b55344c8f6f7fd378a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:35:58.81Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d2e315e8d3b18a57680fbd9db72c4a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:40:58.339Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87b11f9bfb696716796a75ffd156bed1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:45:58.827Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5af2ff7520f85a001d7b5bcce5243058", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:50:58.717Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d46ca572dca7651fba5d52d04bf4010", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T08:55:58.807Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31b5266b7ad60ed8d11b3465ce88221e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:00:58.323Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "425283533977887c8acb8b7acc86dc2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:05:59.047Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55a1a5ab78a0f45fdcd80f7e43531461", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:10:59.178Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8de93680f96349e8fe7099a5936aa302", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:15:59.999Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6699ca8f1664bacc2291e536423c61f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:20:58.672Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4b64b56bdaea966d9f0c7b3deeec5b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:25:58.324Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e98f035dbe700d5e60e1558845c11dd3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:30:58.569Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f03376dbdb5775083e5e47b7efdcbcf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:35:58.503Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bb18eb36031ebe208fbf007e081173f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:40:58.297Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "940fd55de6d14c159aacbb33a3645ae5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:45:59.175Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1de39dc941af4a877c2e01bc7d287335", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:50:59.103Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2026f1d057c77ea78b9944dc19bda57d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T09:55:58.824Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5002ef65f4b9515e2627d0ab20c4c4c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:00:58.845Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "630ccd3038c6d58390ac54a0fff555b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:05:59.173Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b994a57a86bceeb7fd9a5c3293a8024", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:10:59.029Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16b98c90cc0e30fc72803e93ee77488c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:15:59.18Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b681205c662f1e6b1f0d8e45cbd598d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:15:59.18Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd6962f20d31f4f2fa1ed99c1261111e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:20:59.356Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "778b119769a55494b128281541062d18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:25:58.766Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d80935c2e7409fe23ee4856736f61ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:30:58.818Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f63af39363851e402c130e84f4e73673", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:35:58.235Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a3896069b72dc26c652f5deb54ab0cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:40:58.891Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b0787c01e499a210a16f4699b694515", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:45:58.606Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d60466c63a26365cbc68dcd1a7eb8cf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:50:59.107Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12cace12e20b7d4615c296e07e181fe7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T10:55:58.96Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acfad2b7a319c313dca2b5003aa355e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:00:59.209Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f1893d636bd0a5b6e0e5052618f1d95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:05:59.08Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a691b562b49088edf728a7b4bd79f033", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:10:58.324Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c2d30ec71bdff906c47533c3254b3b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:16:01.152Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3112a8500aa1b4a6e9705c7a41f7e90e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:20:58.863Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "989e14627d8a044a841ab6dcbb3cca8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:25:59.095Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a2db7616c922053551e422b3be10303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:30:58.886Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24ed43267bbd8f90f63f6bf4fdefb455", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:35:59.226Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eafa3ac9967feb6b046071b20f40eff8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:40:58.67Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "795d246253e7fe3e0c04c0d8a97d56c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:45:59.165Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f8b0f88a18a914c09e469ab3dab44fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:50:58.886Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adf0a100cd90fad62481dbd9796e5eaa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T11:55:58.527Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b13df03d1c6b570ae41a385a2b1d55b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:00:58.308Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b627fbf51d333f1545ed7716be346492", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:05:59.024Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2da7004b6b4cd0ea4fc388465a252ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:10:58.812Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd239097e9876dd88822fb87307e9dd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:15:58.632Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1419597f065f37d0b00db09008b1ae4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:20:58.755Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "455b2d1ebcb98a9bfdeb994f079eb172", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:25:58.709Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a8924def7d8757868f9548869af40ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:25:58.709Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1d1314e8f4db61b9af391891c413994", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:30:59.156Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3bfe33b1132b4a2dba224821c1b76a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:35:59.084Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "574b749a7d8767d09775452a639ebf59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:40:58.88Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "306b05c03918cec9f7f83319a1674a6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:45:58.844Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c7bc35304d8666e5d3ffa331b1ccaad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:50:58.7Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2564fe4d7e6eca5eb76f05f4674ab024", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T12:55:58.597Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df5f1a1fdc8a9072ca5529e808033ed1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:00:58.315Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c80a067d8a3d691378e17e156547080", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:05:58.974Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30d769e111a81d65d42613bd36e35cb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:10:59.251Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eacfb21f440d2f81345fc41e143df970", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:15:59.746Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e7af65cfd068a8d3e15f6b0423a5334", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:20:59.073Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6257ae3035241637501f972822daceb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:25:58.537Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51fdd16ddfeea43b85620dbd153b9e4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:30:59.308Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9944a8611d0ef97e1191563ab8713545", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:35:59.075Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07edbecccabbc7a381ff8f53c10250bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:40:59.193Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32b1fc277dc62039bc2dd45312d645ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:45:58.43Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d33e8381c55e2647d75fdd10b16c9301", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:50:58.689Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7c1e28d5136e8f4afb87e8155dadbf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T13:55:59.238Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86ba26e3647ba2ca75cdda30352a6ac3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:00:59.166Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ffcab1a427a50da2e2b4af789fa9d18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:05:58.551Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bac34093c70402ef0a9000c4a217fee2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:10:58.559Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "287ffd7fee86e3711edac13433a6e16a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:10:58.559Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5acf22d331e9085c1ee4afe341dcb3df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:15:58.502Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29826bb8b14ca395118211196bea56be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:20:58.56Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f1b411a874c0000ea4546ed8925b3a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:25:59.169Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1cb713c2605db28947c78a23656cc7da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:30:58.406Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4172191cf3772cbd91aac0807cc1cc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:35:59.322Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3b80efb0bdfd087bfd35e8d1465e873", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:40:58.858Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6491d7b67a62800b4c4ac2627ef2b59d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:45:58.986Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9ef97d2875550d9b08564ce8a84e299", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:50:58.998Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6203d6c14d53905a8b952c411477a3e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T14:55:58.733Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "086e9a738d3aec0aef24ad3a184a0a74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:00:58.758Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd94da9810c33b8d53d8b44e55f59d0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:05:58.6Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b91528ed7bad63fffb7a34c2c203e2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:10:59.033Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89222da9a6e8ca9ac8ffc59a9c418580", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:15:58.497Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5710cffb717c36bc07c4a9ad7b749169", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:21:00.63Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1abd40b07de8823b83dbc3081724943", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:25:59.219Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e57cd6a51122be7a8b6514bf4a77bdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:30:58.99Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "869bb5ce1a1cadfdb3bcda32dcb50079", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:35:58.406Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4045ba224d6b1cbdd4cb0bc0319afd2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:40:58.584Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58dd41e0ba40069f84c63e1e085939f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:45:59.051Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8b8822788815a9913174ddbf1a3e00c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:50:58.503Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c35057b895664cc0d2266c1e6b3c043d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T15:55:58.528Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70c053987ce92ddbc3784711df21b27b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:00:59.011Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "330040f9620462bae46b3a2b249d11f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:05:58.478Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "982f876cbc06463be0bebcbbe06b6c4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:10:58.826Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67c9db45d9cf529e012f7d1c8bbfaba5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:10:58.826Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ad8113028d36ad8686e3ddb79987df7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:15:59.305Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67bdb2b90355faa3ab2398a65039caba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:20:58.802Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8f56b5bcfba36e18d62887be5dbb7ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:25:59.299Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bbc29af7143c7439bbde67a953dfeb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:30:59.339Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4257b97a52f3f66135d9cbb7fe3c257", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:35:59.199Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3758b1d2b5937d6886a216d9597aad7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:40:58.976Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5aa73c53e9206cacbbc0bcb5dbedeb77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:45:59.179Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc820cc0c33ceccb26dda3f2c6fdb485", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:50:58.718Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "445639a640eafe3bd7fe065de3a0c2b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T16:55:58.488Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e4d15b886c1ef279780b9d094016712", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:00:58.961Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c728016ac4c34a50b0c478dc174b8868", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:05:58.808Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7d5d89a5709edd729b797429c76261d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:10:59.27Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dae34db06af98caff287cdcae6614f7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:15:59.426Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d001296595a77090a681e6f848275cb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:21:00.339Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5abf802820dbc15ab3345750a473416d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:25:58.477Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a01065bcd0629e46140c1e0431b7f62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:30:58.568Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efa5d1d3b0709d6f7a2e5e45a66eb0fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:35:59.072Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "294db868b6a5c51b21b509c60745f519", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:40:58.988Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59abeb28560393c8e3023e8bab085b81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:45:58.804Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7f44810b29f0e579babf53896296766", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:50:59.261Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a1fb2be4591f5de4d1019b8e2de1c14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T17:55:59.404Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "534803e6da343a8df4d169810891563f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:00:59.328Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7c9e163d284cdaa542e31e75d0ff2fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:05:58.63Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9adc31c6dc401a2775bb8ccc5bdc9472", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:10:58.816Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c42256b230566fa6f7574c3bb849c2cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:15:59.429Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b7791d5a9c646ae4fedb9cd15d1403e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:20:58.962Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8116b6a0395071df8e68f45d79a6ac70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:20:58.962Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b67930ea307094ffc455750ebc3ba217", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:25:58.633Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c0b0995c1eefe3c06ade9055e3693b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:30:59.421Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67d53460c42f530d0be70964eb61a4da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:35:59.06Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc330961fbc68d6c7bc2bc7677813274", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:40:59.439Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d77496f0f8c31a626b89a27d4cf45fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:45:59.285Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5756115e8718dac434a18866bd83811", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:50:59.058Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "605be12c3d49da31439fd255db56192a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T18:55:59.248Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8147b6529584d9cfe36b38cc60aeffc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:00:58.93Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e89da220d3d1e06c6c6273c7889fe7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:05:59.29Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d77a8b04059a46eac6fbd5da28e7b74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:10:58.89Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7c868605d3a0ea2af5e32eb8f45e3f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:15:59.05Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cdcd571654f84d4ec293b13d96ff772", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:20:59.37Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18d481c36c1470f15a61b8226f97c857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:26:00.361Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "114f33368c0696c76891922a2deffd96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:30:59.092Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8b735f292f8acef27080cdb0554ee54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:35:59.064Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fa43baa1e04fde8b81ad8cb8e3f9df0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:40:59.253Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e4d61c907b173b5b573cb78f1aa8b03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:45:59.791Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9c0d1e38f1ce427acda225f6dd0e397", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:50:59.697Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d742b0558875c5dc116442d2bede5da0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T19:55:58.897Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d27da4dcfcb3daa4561e49dcab62f58c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:00:58.711Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "247380df7c54d421fe5938ff14f9b126", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:05:58.766Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63cdd4b3fe93db2f57964192cae8089f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:10:59.701Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faa4abb196d70ffbe06787301e582c93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:15:59.701Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2853c595c719b2125af9c00799340ddc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:15:59.701Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9695e8931a4b281fd7f0cd828a2cd671", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:20:59.701Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6977f6d26abede3f2078c42ef7183b0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:25:59.701Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95427a7272866ab3695c3d2f8dd86e3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:30:59.701Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f97a289c78bf4cf05a75ceb4f5494f54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:35:59.564Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38b5bec8ca4fc25a077eed91b96cc57b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:40:59.465Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea2d8c9a575007efb90af7e384c7ffa0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:45:59.395Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "263ae3d7c2b9691250f7cbfbc3ad8543", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:50:59.477Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "277d1b090fd20ac9e2e4f58339630827", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T20:55:59.104Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9002ee530444a72065c35ca6502260ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:00:58.712Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d8d956b329e7dbd4ee03bfa5b2f8cc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:05:59.491Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2651c148aa0a1806ba9092433a96ddd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:10:59.478Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3a69cabc420964ca001a28ca243b4b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:15:59.012Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d40be6cf07b11fda69ca3bd5796c4a5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:20:59.147Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6664ab0532b00538b39ae0e0095d9d95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:26:00.22Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e979f70c71c9a2ae07f237cb59e35be4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:30:59.296Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9946dab304ac8c0b5acb21ffb192d9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:35:59.066Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e23746e3b73cbb2412fdc5ca949b09d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:40:59.025Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6635c77ee1e4fb51bc9c55a436e5a134", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:45:59.696Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7d5da609ba34dbb6f3eb6c9290022ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:50:59.673Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07999c17d9f08fbe178d519d3bb5fc37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T21:55:59.333Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef9439a0ac9fe2d0c4489c5a1dfd4496", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:00:59.094Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96c5632d5ebbc4e2bcb0137ccbda8820", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:05:59.442Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b6046293f8027acfe65da7e73f1b48b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:10:59.425Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5529798ea3b309392f7500f91ff4baf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:15:59.584Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7974f149fd73850e3f81e3b8af70cc87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:15:59.584Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d76a506586fa1373543e63c879e40b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:20:59.603Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01da824346832dc2c7e447dadc9c9ca0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:25:59.33Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4855c0d0496a380cae1e3a54c61f687", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:30:59.078Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "773a9ef983a5cce8e5fd39c311d65ba1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:35:59.55Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "200ac027cbc8be7462ad6101a426c9bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:40:59.414Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfc256945dfd5ca98c57b4cf6fb40361", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:45:59.389Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85607c18a64dd1ab8ee5e94dd6e6525e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:50:59.459Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4907a82659dd5d980676e4b7c432ee2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T22:55:59.46Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5607fc8c0f45edd63d170622529a2387", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:00:59.189Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e75dfbfe2c0a7a9967ad1c51d1a638d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:05:59.763Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0d8c6bd3db6ce76b7439650bbd56397", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:10:59.856Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3e5bc778f1594d465c4837efddf914c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:15:59.117Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84ab0dedf936a0f28286302e050ddaa8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:20:59.747Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ea73dc3c2053fff9da831d5023ce40b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:25:59.751Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8138d05c7ba330505031aeacefbd9f67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:31:01.614Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49694c229eaeeca1669e8c3eac550fd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:35:59.783Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17c68d6ced2bfed03c6ad16882422d3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:40:59.107Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b481c7e20d202ea6ac68dd421cc9f78e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:45:59.388Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48a7621923bcff4878de89028323cb0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:50:59.608Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eeb58ed48f271a31b3fbd8c3ad8208ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-01-31T23:55:59.259Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bab618a97660229600c40163508dcd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:00:59.759Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e462fc1608e83ffe58c2c78512586c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:00:59.759Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4be03a4b90118abcdd03d0805f647ac5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:05:59.45Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed9e10b3c2dc69e0c77ae61bc4f19b29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:10:59.044Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "769dff86e1e8d30cdb3130d2089b54a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:15:55.636Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0dc18641b476cb41233218ad896782f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:20:55.636Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4ccea0076f83988639886c3f267946c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:25:54.82Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bbae6112a86494c8e1e84b71becea0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:30:55.407Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f7879e93b6d18fed4a12fc34c8c4dde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:35:54.816Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb8b1784a2794f13b2a50f6625d9cef6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:40:55.072Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7360865a12935682ac567a1c8a8046e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:45:55.2Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de4ad2f6f5de1406ed08480f6110be6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:50:55.588Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "530a9b34d6b901314ae624d22433bf09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T00:55:55.42Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35188665de73b4c35c6b79ee79ae0325", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:00:54.971Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ddea6aec88435aa8d363e1c69446765", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:05:55.619Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58006ac1fa9e63bc414986ef49cf2113", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:10:55.188Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21b848f286bb8c514e7a53c168f6c8b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:15:55.594Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faa7ff0cf8dbd6745195681a2104695f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:20:55.326Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "934704df71b64dfda7913f83bd375926", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:25:55.677Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "313148d102f583e41cd2248a0f185067", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:30:57.076Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b35c8d5307fb8d57474cd7685e86ccf7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:35:55.323Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7039ee965b449fbc40a81f3bfb9d2c9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:40:55.15Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c838cefdda5beb25380d23a2aa29436d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:45:54.957Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "846c933f78dfae69969c91e0dd3c96cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:50:55.313Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bd451b4501061a871ec95640036158c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:50:55.313Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e66e1a95a9291a784f84db94392dd847", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T01:55:55.223Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a1bd6aa7b4ebf6a265ab01ca00538c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:00:55.176Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "93ae1ee21cf7ac947fd39ef2b6c7bd88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:05:55.009Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df743f015b033b8ec84ffd6a81e3b60f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:10:55.55Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a60b3b6c6d924862bb1497316ed1253e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:15:55.164Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce304d219cdfb5e4e36c5a803b6659fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:20:55.317Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d540ccb40e7911c0df59293dbd02796", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:25:55.124Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8061fa1f9a97e313fedb72a9b18a0c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:30:55.286Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc68c6d79ef886e7d8a333d448115172", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:35:55.28Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cb1234026c57d25c309f364541cc814", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:40:55.632Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6193487d135036e305c6c82b96f2a22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:45:55.516Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c94856cf5c1d4b1cb91a59603649c410", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:50:55.666Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5ff0dc8489dbf4262bb46c42b5017bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T02:55:55.551Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a4c277a52d941e1814b11e6d62882aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:00:55.236Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ed030b0e9b763186baffb354c52a553", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:05:55.036Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "985eff797463e004fc540f6e0da57040", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:10:54.949Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4ee9bfa8684dc35f168477e18000209", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:15:55.401Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6aaff551ec0e9cdcd827aaaf70c51261", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:20:55.561Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f2c93ebf2d487b1f3a5bc041da3cce9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:25:55.445Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e961f6314b1ce2914facc5ebfe86829", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:30:55.447Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5aef06289edb98164b2f82c09d0e4d31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:35:56.947Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "181d64fb0deea8dc362a8122e98f8e99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:40:55.323Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc49e7af5b0d4edb8b91af26770bdd3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:45:55.323Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "097b0cda657af524ae632818c0da9c47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:50:55.271Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d14f1c4e822f64d62a987ecae316f280", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:50:55.271Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8afbfcfbf21fefd4c4264a745beb7a51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T03:55:55.187Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71654538266ec82c0664aec97b3044fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:00:55.732Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "657cb165fc2e5a3d4325856eabfe140d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:05:55.402Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe012114d8df47e20a4f02a681956c6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:10:55.277Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edcc6f491b961b0165235e4653e074df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:15:55.204Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d363b646eb4f6ad2c305e530d68b7f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:20:55.257Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9ea698cf554cfafd3fa83c06e093a0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:25:54.968Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f99feaa1ab95bb5db55f4ad93852c5d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:30:54.945Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab6f159ee0ec8d13f7272664ecc9e122", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:35:54.972Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54e789a7087432c7e939f58a72ac8280", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:40:55.252Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "534d6e2d25d473a8176e91310f3c5665", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:45:55.111Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "316caf47a0cf15df9a1e77eb57f404ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:50:55.583Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5187a51c1918524492316ed391a16beb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T04:55:55.563Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01c034f64ef4a854c9d105dba6157a88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:00:55.925Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e66ab3afe14a11036ca57d5cb9030b7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:05:55.329Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2704490b567133574e2535b115d258a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:10:55.736Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ccef0a1dc4c931b9b83c9e06a788a0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:15:55.759Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0215a2d1db6345e1bf15b49f1574a61c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:20:55.37Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c01bf0dd64bee5be3c8117079bffc455", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:25:55.661Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9c6e247de3036c547fc2dfd9561f0a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:30:55.29Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26919ab4f67a34640e88581e128f4360", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:35:57.032Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3db7d8115f27c51900bb6a5ebff4d798", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:40:55.515Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "617832b37e695d8342aab5602bfa29dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:45:55.7Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80472ddaa14cc231d82c68ebbed513bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:50:55.452Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af10f286ec3f595191eb9207afd39b06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T05:55:55.885Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12934ac63068a6c1aa80e9e6d249cbcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:00:55.7Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09c718b5e37351f558779c325ad4bd23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:00:55.7Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "990f5902b4846cbc150a313447b5bdb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:05:55.118Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4cc53f307d0c5eb29b9acb7a4576244a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:10:55.651Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d2a0fbc2ddd00657742b2726c8b0750", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:15:55.704Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8f09e432acfdca164ce03a8c84e0e7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:20:55.262Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e4cd65815a4be798ea1c38a64553cb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:25:55.673Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc620ebc38f2995118c21d15b781dd92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:30:55.644Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0886faaad72bb1db220a8592d34a4901", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:35:55.663Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0888410c4c92da12eaf22be5155cca0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:40:55.792Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfb28dc26b4f2c96f7157e501c27c018", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:45:55.861Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "906ae6e1bb79b6e53d019bee84166e17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:50:55.536Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bafd6d773742a60c8b8ec18377dc43ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T06:55:55.545Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aef50fe62d5aebf159b0f4f2527327bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:00:55.72Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ded0d42382da238cd1138919686c48ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:05:56.109Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e2ab7c1daddac2a4b7ed4843a7d6f9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:10:55.961Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa3ed088198d39044be74a9ca4c51f59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:15:55.759Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e9f591acfd53d82d35dbd5637573a91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:20:55.784Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cefcb28f268d5c5ca7c7e6ef8f4e30c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:25:55.154Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a43f262efbee21cc2fcdfc57928debeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:30:55.827Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0121f62dfa9e00db9c91f9bd2b441bed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:35:57.577Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3b1be927b9ec9330de1b3b2d0858b3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:40:55.682Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f9f68b0e800054d5cd0edf6824af0ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:45:56.055Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cc184dca44daf6c4b205f2a0a0d8443", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:45:56.055Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19dd8aefd460f0e60cdcf09b8499193f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:50:55.555Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e20e3d7a7fe34b0049401686043446f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T07:55:55.073Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0935a9cdd693e9769184862ebb12ef1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:00:55.47Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c29a3204a252f094989977191354abd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:05:55.898Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f67b3c20d5f25083824b3a84c8853cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:10:55.986Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9fd4dbc82e85ab587eac146161c56a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:15:55.468Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bd19031a0bd5c69524a189abbea4007", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:20:55.467Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b876761653493a9357f43e338d4a140b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:25:55.678Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d44355a056cf5087f397a07395a6a223", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:30:55.563Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b3b9397efedac4b91e39ab807277546", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:35:55.383Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be2c254399e059864789271571f3edf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:40:56.01Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ec41042096befb1569aae69d28dbfd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:45:55.759Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0a81e0e581c485c6176d042d4da8713", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:50:55.156Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54893898a509157918ad0572ccef95b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T08:55:55.179Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dad8a4d92db03cb395ac9464de0b28ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:00:56.01Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df74f681cb6a261a0cb28645fce5d39d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:05:55.257Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46506d30310293a20ce4568286afe933", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:10:55.656Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87f49f166e1875b8bf2404990a6612e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:15:55.578Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3308034da100ab6f4f5df1a9e0844a87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:20:55.729Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3c88590d2df2484bf58591ea6f77d5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:25:56Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "380f794f28cfc0b09bb033c4fee746c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:30:55.178Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01a19ac0bbeca4e781902a4aa8086d3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:35:56.584Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eaa9b2088903aaecbd7ef450a4068135", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:40:55.214Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d8e4aa65f07648d6e57557602d01447", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:40:55.214Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d13d773e681ef0a5ff786df408cc1266", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:45:56.272Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0123ade9d29fe7a424935e8b6beb7cc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:50:55.682Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a59a6c7da57fa1f960c6bc162533fbf0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T09:55:56.255Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1522fdec54ab11ff969796a0158141ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:00:55.531Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e263fb753354d91ae941342ec6e06fa3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:05:55.891Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c9c691a816b628bb7d6b07789a37102", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:10:55.771Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f93531d0021f812d19657ecac11acc18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:15:55.4Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4dbf46da0a007c841b244a3925cb19a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:20:55.203Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37b3afc85cdf820002ebbfa93a2173e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:25:55.24Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfda153c05ffd07062216d672385def8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:30:55.758Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fde791bd3f1dbff64d5632c97f916fb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:35:55.688Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbc34ef48c94e882bcabedc2e8beca33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:40:55.551Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f9b40293c80ed55477356eeaada187b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:45:55.411Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19cbbfc345086c9d5c389f6c1a448a11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:50:56.114Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc9d9fba03aeec17a3f11c567170d0c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T10:55:55.763Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "363f05db75c4796c8948f2ed6752bfeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:00:56.046Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6b9faa7ec31c47e366fe6d1ef99d2ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:05:55.484Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7196422c6b30a6a67a24da302d0784a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:10:55.501Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a00201dad027fbc2eca6cde7073588c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:15:55.314Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9da451d65aaff8869a74bc0f45ddd3ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:20:55.334Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17fbdd639c950d18de0998f8de5e3aeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:25:56.153Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eea564f70903be1b5788f146d975bddc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:30:55.971Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a736379ea5d9146405609b8e7561e90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:30:55.971Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be77fd85b4d4bbe6301ed6a3111fa6a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:35:56.465Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3dd81f7c19fce229c56e4674a908854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:40:55.525Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66027b0d068770d15278ffe05345c03f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:45:55.573Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37baaff1564924dd7915dbff0e758a87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:50:55.957Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bfaa60867024a3eda68647eab00b5a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T11:55:56.159Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "531ae3b9ce84b5125eb9ce0a02ba6ab0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:00:55.513Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "604664675485838cb379f3de9fdd6924", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:05:55.551Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a62ea51beedd93af22735feace37e87f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:10:55.658Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c5b1be06a1fd9ceb350121f06abce79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:15:55.397Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b04c0631c600c77685394a3bd666cda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:20:55.898Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6097b3262cd3430d95fcefba2b43df39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:25:55.929Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9f877689ed6638feabab1a416cde891", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:30:55.945Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9bbac06881016cc3bd5bef56f96d61fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:35:55.896Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab9dd2b6228cef7fbaf27472fdd5d28f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:40:56.148Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9b667dbf4458a4e21c798787cb6e8cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:45:55.92Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e243de38ebaf369923da1656fad1035e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T12:50:55.516Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "566cb8f4332f6aedb3038bf65eb8e659", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T13:10:56.029Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acae59673778df064ac77e3dd6b377e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T13:30:55.679Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e483558bee9fb946215b753ed4b2391e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T13:30:55.679Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a7e9539ff03fb042159e0539e9782be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T13:35:56.878Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f39e266aedeed401409365f4281ac8cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:05:56.072Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98e584d70fe9caf2b9500efdd60e528b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:10:56.122Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffb16ff066bb3f94e24e319d7c5127c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:15:55.743Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28a1e5cbb7d5a8f83b555ec3c141235b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:20:56.031Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e70f1e395428525b48bf48a3fdb0c28b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:25:55.875Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de8e1b9f38533c66495e7bbe2a88ef10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:30:55.702Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86ce56c257a9b1a91e9f76e051f328ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:35:56.105Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a80b2b88556173f424349c7dbe50794b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:40:56.026Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d03da11302f37838201278fa98cca5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:45:56.315Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89326e4b7925e1ad13dfa17b02fe10a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:50:55.721Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57d6ce5b9a164fa4eb16ec4bc291319f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T14:55:55.592Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acbcf839fc470179d628927d176d274a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:00:55.682Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f2a3a66dfd398a6517caafee421eb61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:05:55.5Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fea708efd0715827c93be394b31393d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:10:55.677Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcb523b09950837190c1a273ace67a45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:15:56.178Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0f71f565a4df3eb6e7f9c891d961886", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:20:56.245Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a17c3b065b05dd2e49164b5bc9f0eb4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:25:55.446Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f66369d66aa878febfac2a38020f6e62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:25:55.446Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ce45f6bf4c1d03bad1c7c59590839b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:30:55.995Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c3a49501d0bfe5faedb57611846ddd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:35:56.278Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "077241310c4dadc740c70647773ee017", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:40:57.344Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a38fc1bcded0fc8fa118bb59e1639a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:45:56.237Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d00194e3025c508c260f7c685e4baaf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:50:55.6Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4c493ec85f5bcc9f94213621c5068dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T15:55:56.004Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a644c5960a3cd290bb52f0bc7b769393", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:00:56.224Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a49e0d9aafe2005a7c6f8b7b338524c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:05:55.476Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bb2fb79ff0b3a7239ac725b41cfd4ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:10:56.122Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a456827834fe36f066d36fe99aa9ed6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:15:56.08Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c00e58366a07d60b05008bf2e67c9b8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:20:55.917Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ba96b8bd629dbbf3f24b1a9266bc0c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:25:55.455Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0f0cc2204c28bcd1b8502b911d800ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:30:55.528Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee9528d409c0f4b4ed678eb38e47d9c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:35:56.403Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8caecdea3faa4f4583b5c3e339353e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:40:55.907Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c92a6ef3fe66388f417e83f37f5b6b3b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:45:56.052Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "054a122031b8652c0230a45e518d122c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:50:56.2Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54cf6bdb14705a6eccfe9004cff7a976", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T16:55:56.188Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "600a07388c1236846b114447052b3504", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:00:56.312Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ef09ab03402e4f661e71befbed33255", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:05:56.276Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "090ee219c542c5b35783c69d9573141d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:10:55.721Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9877142166e7c459fd2602756af709e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:15:55.885Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e73ebe5ff4e500dabbb8f8151f157e9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:20:56.417Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a36349c214c368ae2908b0f76716606b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:25:56.468Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef5769fb7cf15630fe6ce0f9cfd030fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:30:55.821Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4ba2bf7cab7210b5d42fcfe40dc08d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:30:55.821Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63c65d68e01e5786220d72c7b9363bfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:35:56.245Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9718c0d513547fcb71fe15f1dd55f409", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:40:56.346Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ddf66de4ab45944f878bb9d4c5f446c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:45:57.907Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0227e82cfb3973400030cdd7edf7ddd9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:50:56.328Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad0b9d52787bf096fee6fe331bf849b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T17:55:56.078Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "462f3f0787f43e5696793dfa593d7373", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:00:56.421Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bdc25112d4e39354c2471ee959f491b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:05:55.561Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da7d3a704eb888df12fa780683e7be20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:10:55.56Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13c0fe336111357af72d34e17d2600f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:15:56.261Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23012b38f459eed058e6edab8fb78d4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:20:55.726Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87dcc92b7b42a0644f3d7b523ba5c16e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:25:56.503Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afe97f017db1e6ac4643ac534045a5ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:30:56.455Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c803c51d50fed525c32f222075e5c0df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:35:56.439Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3a4aadb43be26ed821f196a7b3f9345", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:40:56.016Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2996dfe5872bd1751a7ff4b5713afeee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:45:55.7Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e458fa7d224b2fdd6aee73559eae338f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:50:56.345Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f91569941d17c60ef8f206681dc0830", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T18:55:56.404Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a74cdb46ba9eaac419338aad63fa3c5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:00:55.805Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8faf809c22d70fc2c52fdbe14b2bcebd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:05:56.554Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a098f7ff295f2da6d86d3956f751b5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:10:55.611Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9737938c4c8b2a401095898c6598de06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:15:56.144Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33c30c85134b4b00103f9a4d2559d311", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:20:55.81Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e429264003e2e0502553c323627b3711", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:25:56.589Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca4633ab270dd2012726a0bdd7ba2742", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:30:56.091Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41ad8523ea9dfc02b080d40e2a1c9d47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:35:56.6Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ffedf9f327cfb822886dcaab3be3325", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:40:56.6Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62e8494c70b9293d8bd3ccf736dbd089", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:45:56.881Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40c4acebfa901ed980e188ea8b4221b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:45:56.881Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9906a799c1f3326f138f87ec85d6dc8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:50:55.777Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14cb7569f05ec70dc42eb708491edfde", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T19:55:56.437Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c0b3678d6ae0fd4a5ad91bb65f4238d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:00:56.161Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9acc4e1598a97837531da08572bf037", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:05:56.006Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2af37d32b3aebe99aae752728dc970af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:10:56.257Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41680aa2f4e1b61277fb403c66264d01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:15:56.367Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "957dc875302a336038458994551aeda3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:20:56.398Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "064863853ee77730a35ecdb0f300a7ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:25:55.795Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6a4a5c3e80eae4315a2524bef678123", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:30:55.887Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8b48f0a97541fd7b4d6fabc1aa93c59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:35:56.652Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e531a33654b64132850446c9075369ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:40:56.041Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50381577c066adfc852582d24660aece", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:45:56.29Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f25a0c473581c162bd3f23dcf8bdc2bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:50:56.261Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33eed19d8e25ff0e651c7af55521e3ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T20:55:56.005Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71c924c6cb1ba2f6e207c5ce733b7402", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:00:56.382Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ebfb5da124520c1fe9b4b10c0844371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:05:56.55Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "561203306d616f4bc7b53a41156f776b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:10:56.355Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19b004cea8b55031c7868003dfa90c92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:15:56.697Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "369bf94f81d2931e208e7ce51391671e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:20:56.536Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f9158ad4c515de0a3a16ae22454d0dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:25:57.001Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61b44e65e9cd7b28beb146a9e536f46c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:30:56.78Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa7946b17745d48d0fb0c49ccef34fe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:35:57.763Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "518ec826775dceffea922d9b6d4567d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:40:56.64Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca7d7ae9ac19f8d62ac4af18386b00ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:40:56.64Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62939b6895354b5a0fab1aae82db6b59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:45:57.377Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dee9cfcac93c707926b200e858a3607", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:50:56.337Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "102e85be0fb4f62ece9ea2d1cd506e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T21:55:56.117Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa1c67faf2a62d106cb8d95d89c928a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:00:56.348Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c56b013f32f5dbfaf1112138d5dc3852", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:05:56.895Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "951770969ecd416f376e81b7a08e9236", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:10:56.895Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d09687c9384a3e5f2b99749c2b60ec6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:15:56.312Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e53cf35388f298d208cf393ea53512f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:20:56.312Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "210fb7956f28463f2857e5d38fcdf789", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:25:56.663Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72e7789a72d89ca56d47badfe07d07e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:30:56.005Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff2fdfde10db3f88db28d864b94bbf6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:35:55.793Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4af678230f8799787f1b5184b8647792", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:40:55.836Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "899f877552048f2c3234355ce6693ff8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:45:56.14Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "097ec28e3c9a7d6f31245752bcaf874e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:50:56.335Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6c27ba1cc6be6fdb4287255d2d44cc5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T22:55:55.967Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b35bdb446e843bc019a2d214f080efc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:00:56.309Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3403139bb3c151fe4b1fb0c9dc69880", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:05:56.581Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee524da66a2c214be3692c21ce9cc9fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:10:56.133Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b264678bcb25e32c7b6a3a159385ca2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:15:56.259Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80aaec474b4f087c6d4b30e385e2e739", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:20:56.107Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7259ef808431da55c000945c22bbc5c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:25:56.447Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5dc6fe122a2646aa0b02e53672826a17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:30:56.543Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54804b98814e4b97c7f90d6e9b56a8a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:35:56.387Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76a70f2a7da1d818dc24dcf954818d7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:40:56.163Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6db98268594f78f4b9513a6330680ea1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:45:57.139Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88b3cdedd87a0b871d2be33d81ab78b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:50:56.265Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edc61a6a7bbf6d07602424f0cba8ef84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:55:56.007Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92700d437888b6465d871823acd40679", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-01T23:55:56.007Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "899efed1a3857ce1795ba7344fad5817", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:00:56.188Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17a75b9a616ce5e979aa779f04b0f387", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:05:56.633Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d852d8677bd6d4403ec8d5d91340b31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:10:56.199Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "057ad821b55ba32d6f23a9054811a591", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:15:56.769Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e442ebe760f6811f9f2dcfa2527eefb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:20:56.43Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fbe0ae17df8f345e5485075c4d94977", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:25:56.771Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9a94b1ab99a855f37cf66d814668367", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:30:56.562Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "157148afeef0b4cf2d21d876eb9e2f65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:35:56.009Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d634614e7a9aa5866e591eab0a50d76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:40:56.644Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85b0bc5acf7855a719ccddba2525bb4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:45:56.683Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c09325fed00dbed947be72945f540a52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:50:56.348Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8a9e9e58ac982616531d13f516efba5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T00:55:56.765Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99f983e81d728463e9504f5f7b706bcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:00:56.716Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f151c47cc0fe1ca63c020d29ec2d6da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:05:56.713Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78d06062fa82f1ff7c1fbdc6f6dca342", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:10:56.822Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6a17b1f26d37d00fcf78c67afbed491", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:15:56.011Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "012c95af4538d8e29f686aea6a3aa71f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:20:56.663Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c51cf6d69837419e5a176d2be5bb96d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:25:56.106Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e05b941cba6817e04cd0adb1c35ab191", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:30:56.564Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f087e4e0406dfc260f883f57c40084cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:35:56.801Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0478fa4717dc5f6dc10cd317ef1be39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:40:56.631Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4b89332e962c972fb199e8a4b2db022", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:45:57.319Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef03585d0df3bad67e20291e55e076a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:50:56.791Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8c3acf1766c2c797794ceab8b2552e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:55:56.772Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76b0c94482bd9df20b6098835d7cb289", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T01:55:56.772Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "471143ab9c3662ee46d55ee43cade5c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:00:56.481Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8995320a47611202ca63e46a3c6c2cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:05:56.673Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad633d7401a168f77ea786e83d3eeab5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:10:56.727Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b7a4cf7392e1da788175c3ff7a5aa3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:15:56.759Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f58c2cdd0d8c49207fe6d7a84f5a022", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:20:56.23Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1252c28565984d8dc4c195f8c8d820a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:25:57.073Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87fb191e50510f011bde77264f39cb69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:30:57.073Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "838828bc51cea74706026a0f39799f63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:35:56.305Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edeb383bb71c7c27679e97e72872c1f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:40:56.401Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "514fabdd376e51cd827a0496be476cd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:45:56.352Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b696161510dd2e6d85f35504565c53aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:50:56.778Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b86ab840966782d35ef36d1697184723", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T02:55:56.315Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7ae1af738dddd40d92d534136bdb481", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:00:56.244Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1027f17d4adde2d33e0328869b22c8b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:05:56.602Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9eb5789bd0154c0e39cbca549d0edca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:10:55.978Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e8ff8c89599845585a559bac17b0f2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:15:56.959Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d552173eb6e056aab378572146a73a57", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:20:56.198Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9110925acc213135d56c99a1aa0e0382", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:25:56.367Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21f2caafdec9e230732c781f7af668a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:30:56.258Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "134a09b92faa49f12c3d5217b587bc4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:35:56.258Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79554ac48886cdd86fe3591d6c02d116", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:40:56.524Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7d6ad3a3f1f9c9bdaf8387659c67267", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:45:58.218Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ecd471795a3db089b716b6f6a778e7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:50:56.933Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c5797d008409ffc7648f48bd9a4c2fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:55:56.461Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7c25cd74248adba2fbb35826e2e7cf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T03:55:56.461Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9237e2f8a3ed50a773b4c46d942f0c71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:00:56.759Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "234bec5d7e4ad8539b7a00c54ed99580", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:05:56.506Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "287fa0152e6f3702331366ad6bf50ba7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:10:56.554Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9682722cbf0fd68956796bc4d3cc0309", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:15:57.058Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0bc9f8dc6c49ad6c4ce983945f125b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:20:56.732Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d5a8eb78e02b022a292ed6850eb4276", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:25:56.593Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "122472528c0fc8b0cd366ef43aa1373d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:30:56.984Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94a2aa57f53f3c198cdf69b54c1ca907", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:35:56.325Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "796eb1d5d1eaae7df309385c402bcdba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:40:56.705Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5971abc615818ee96fc2d7a364705f77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:45:56.225Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed3cb88f6394057b1add404a89188c75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:50:56.292Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abd45388ed81dbc4ee5cf8f063462446", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T04:55:56.979Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b38e9e6fac672abb014759897deab007", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:00:56.823Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d29a52bc8a292ce6b341c79d7b54f465", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:05:56.742Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9e54b55c4417b73ff9539583f91380f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:10:56.212Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91dd9f5f18cc161393e911a93ad31d80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:15:56.304Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b17c2e9ed8009b8bd73910e5935802d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:20:56.888Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff7db6f70c987c51538c50a45d984e9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:25:56.111Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb5b8b4982f3e47a78cd5062d95d6cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:30:56.85Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43631381b601bbc08dd41247e366c794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:35:56.781Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e3d2a6ae9ad04f72cb02642bb49cad0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:40:56.693Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31a08c702a3f7901455f62b542a50adc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:45:58.874Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65b01b775b8e627c7dbcdaa751f0185e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:50:56.234Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a2a061a1fe28008e13bcc4fe85fd338", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:50:56.234Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f7f349b4028f4764b963052d7554242", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T05:55:56.476Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a67986de58ccaffebab0223f18f326d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:00:56.857Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4742791d85e90d26ed5cea708748c196", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:05:56.352Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58aa345226f1ccae1768e728d6418ffc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:10:56.484Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf1dc622b6e9808c484c7f7171f7ae92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:15:56.332Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00809c2dc356fe57cae36097c5af4751", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:20:56.174Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d07cbaff5a2ec1d81e174486df9cad8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:25:57.022Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52c4afb93192d43687cd3da01f830446", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:30:56.268Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44023ca8c6d5b23c6374f53ddb3a2ff8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:35:57.07Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9269219920d5c0516407919e3f47989", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:40:56.475Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bab6bb530ef3d69c4d108e99ee47c6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:45:56.767Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25a2f7ca3dc1ae6054be2643e3d3f2da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:50:56.267Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0d9edcc6892f2edcdf88514eacd67c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T06:55:56.819Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06d798894344217d751fc20d28f787b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:00:56.192Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2aa9cd912196854d1195f1351533a64a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:05:56.672Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d77167aea4aa4d965085003920344da0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:10:56.673Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfa8269e2326a978b4a9082d1f6ad494", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:15:56.392Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1190190d9b9e93aeca1ae9a76ba459ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:20:56.803Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0781b1150824aae0135b9ad9cbf3a6dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:25:56.296Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "641c260bba3346a2a61ff3aadc7443b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:30:56.623Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55dca786544e77c5dd64086ca172c282", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:35:56.352Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "647c863f6ba43c91746443b1e842ad48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:40:57.002Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6195431f5c4d325c244e86a259f1f58d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:45:57.891Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afe9802cc108ad4dddf28369eb034164", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:50:56.611Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6eb6fdb5c77eefe63d6ea2ace814a1d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T07:55:56.639Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9146c51f26d72d3e4791fde234a38fb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:00:56.837Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a49cebc15de57fb40bf24b92046f23e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:05:57.169Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4eab45ebc1e80076c5ef7e47dde97e8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:10:56.169Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e15a23d19edfd95e879645d2d062f874", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:15:56.413Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22e115b9b477acb7225dbdc31a629b7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:20:57.005Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5f909e35bf29bd787c3fcd8c5fc8129", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:25:56.903Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b12a0e4f6dc2362993581b00c28a473b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:30:57.013Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a26d9a8ecadcc0f84f8f685dadc80d00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:35:57.102Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56c364cb2f163b63d0defb9c0da19d3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T08:55:56.47Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49f54b9a2d5c00b8415001013e1b671d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:10:56.877Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a9382d315bc54e9ce61a49f04ef80cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:15:56.746Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47da4d98b2c41eec849f32ce573e421c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:20:56.445Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4745c839a872dd5f14e4d2e984b30a07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:25:56.684Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ee12eb9f783c7999bda48a4d30d17fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:30:56.904Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f60e4bdc080cb3d8a35f5c1bf757cbf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:35:57.645Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47230db30b40243dccc7ceb5b753dc1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:35:57.645Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb761c3d72bfe4bd20e0fda6cd04446c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:40:57.313Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64e1e1571c7151f4fc429b715ee861b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:45:57.099Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03aaa1d9497cebcaac8ecbe644ec482f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:50:57.918Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc32944483d82098739f5115f96f3513", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T09:55:56.235Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05b4a6514c159aea8baa682fe1edf747", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:00:56.565Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d558e5e237354f3bd1fee75ebd491a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:05:56.845Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee042d26b76ad55b5b948e20e3030847", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:10:57.22Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a27584f8b07f8407f7ffcd7547f3dc67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:15:57.18Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2a669541466757b73da605f7eb84185", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:20:56.419Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a7fa0f665b6e2f0d4f4f47f80c7350e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:25:57.147Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22f525718e5dab93c20ed13a52b5442c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:30:57.079Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "799832a1935cad182fafc15022f37838", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:35:56.379Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d650b4e1665c03927e91594ab324217e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:40:56.849Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b76587f6c12b60518097fe8ac631534e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:45:56.51Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d36557fabeed6036dc10ce0c4c12cdab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T10:45:56.51Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3aa05c0a43c24ce58aa8b8887c6b4a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T11:40:56.306Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5236e91d310e8796354e926fbc5bd2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T11:45:57.261Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3de93c86c093020dfc53aba9d93ec92e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T11:50:56.471Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1690025d49d8f6e2b2fb9a5b915a762", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T11:55:58.192Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56f78686f1d813ca361b697afd9631ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:00:56.871Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4cfc33c21607d199741d8567d80ab6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:05:56.411Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c46ae061fdbf1ae0b243e5a20793c69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:10:56.35Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b0dd935ffbe0f607943b2e072cf552b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:15:56.407Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f00d38807078c4037add1b87866abd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:20:57.027Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ed40994bac6c5e56c58daa8754b8da2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:25:57.086Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7e176bede444e4be2bc8a29fd727fb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:30:56.944Z", + "quantity": 43.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78c97199c5c8eade236f43b40a3937ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:45:56.808Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00d76c1b5e437ff830d7956c65f42d5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T12:50:56.888Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63fa38406a435c5750bfa2a26fe98a97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:00:57.168Z", + "quantity": 52.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73826d5f34f3f132ac4ef649691f789d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:05:56.999Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44ef886c97aac29cee5ac56cfcd86aef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:10:57.107Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bc00cf0288c49314ab7eb8ecf8f5344", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:15:56.907Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a08d4833e255544ed11bd122d709a56f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:20:56.926Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5412a3b7841027f00191984d97a34c9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:20:56.926Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e9c93c9b32bf3d96940889a1a2d7326", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:25:56.733Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf609e09d37ef89bc3f67e5e26e63317", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:30:56.639Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b9054667b0987ac2bc9f02cadfd1150", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:35:56.867Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11fa169d807714aa95b5067c63c9a54b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:40:56.964Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9358bac35e91bad145107b3207af2a5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:45:57.151Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68098b8e6256c949d87675c1fe241012", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:50:56.799Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9c6c3075a0eaa3ec9eb5703166cc99e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T13:55:58.38Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ca1669958ca67b483cbd8a3b5c9dc60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:00:57.357Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "438ac39d5ceff31855918c2b33f4f94e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:05:57.308Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be232646001707a9946fc3bd70fa7917", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:10:56.821Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b62e7da8971267307cf8f51339d51bcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:15:57.287Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e98c6929517a6827c59d34bcc9b308d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:20:56.492Z", + "quantity": 54.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a79a5edd96c9d0fd941752ab49ea10c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:25:57.195Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b431a543435182248bd4149cdf0c8570", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:30:57.209Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4179eca28064d6ae52ddb3adbf1b113", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:35:56.718Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b71a6a9604808bf2fbf99aed71417b78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:40:57.054Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b8371ed9df7915202ce57c231ee155d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:45:56.58Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2db37e9f33c7719e90419ed7679ab561", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:50:56.946Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64b0f05a6f8946f483751587a60bb743", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T14:55:56.538Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0cb374888093f9691e97990b13eb6bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:00:57.052Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88f15cd06ba34ce4a016db1626c839a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:05:57.001Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abc0f65c865d863360337f8ca56e8c0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:10:57.122Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2eb2aa5cfe125051112282deacb25ffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:10:57.122Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0db64ab9fda570d38ff634b14c7ba01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:15:56.639Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "494271a500628707dee3de8a9a53c2ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:20:56.58Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc4212bfa8582c282849fd8f39e58f41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:25:57.096Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c18fd69c01daf68854a36a19521b21d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:30:56.822Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f44c57b8e6db69e00455b888e0dd7eae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:35:57.021Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8f12a550d40d1075429f13318f7fde9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:40:57.487Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc7e0e50be84f11c41ab822405ebb4ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:45:57.279Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f22c9fea0261df59ae3e16722152679", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:50:56.749Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c63d5ecb7f16a05b7cf9a4f5c38103da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T15:55:56.918Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f68a16cba865c9fc1f382f7cd21cc8e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:00:58.088Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ff9df2ef2f4579f43344d7c39ed42b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:05:57.455Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adbdef36f2ecef4b6b0465348ce51519", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:10:57.027Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01e06d7ca59b8829a23ef43cd9a65413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:15:57.038Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3713d09ce34ff5c1f1a52166ed352d52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:20:56.592Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b16976760584d040450d6b18298cc4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:25:57.35Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cc54416cdb95c1fde9b8e6997cc82e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:30:57.464Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faf33ea310455fd2e1f6ffcf3fdac67f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:35:57.134Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a16b524bc3a1296763c59f1b86f8a2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:40:57.391Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e452fd2c80e27ebc08ebae7a5682a00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:45:56.581Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4da5d292221584cc6fb8c1e0e34bee20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:50:57.205Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95c1667a62fda18a5596e0ade3954eb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T16:55:56.771Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf11b4aa5c4b8958cd276fed1bf3e5c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:00:57.401Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbd233bc41abe03849fc7d18f1113d7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:05:57.182Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "603628eb4b5021fa8af4f4179f8d4037", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:10:57.515Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6322dccfd21bbd29bfc07ab13076c592", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:10:57.515Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f93f9d3f798e0d38d4da28696e4a04a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:15:57.515Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9dae8ee1e1fccf6d59ecd7a9d30e0c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:40:04.71Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "720b5b970d84a6b44dbb9d929d063e43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:45:03.882Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1e23f8e481840eba3dbb29f5b0a19b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:50:04.8Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7ed00b35bbf1c0616b4ce724e046adc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T17:55:04.352Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80a3c826e2c14f84ef6785dfac0bd5db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:00:04.869Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d311f7771c1c0b308d6aa92c65bc6a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:05:04.786Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bef8420be50801e7862ba8330412a154", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:10:04.645Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c5097b762cd5a464e417896108de3e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:15:04.814Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef1600ddb6fce2ca86401dce32918a89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:20:04.275Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9dc6579c05ca7f38a46df1d1d7b97e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:25:04.014Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66de8478a090f6514b4788211b3def88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:30:04.632Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1779e7521b43d7eb15308ddd765e20f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:35:04.933Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fc36c1f8dbe2fd0c14d66a007baf5c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:40:04.281Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b0cc74de07a86a6571511d3c9f3dbef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:45:04.351Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46149898c4609ae3e135dee9bb96f42a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:50:04.247Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4866186836fd442fd25865c192846f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:50:08.247Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eda8ce13d7705e1424599538f1158a47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T18:55:04.51Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b89f82a841f806ba64ae4a5bce1a038b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:00:04.797Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2ca85e88b6a32a181064517156ad4d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:05:05.002Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "123683e35c780895ec6a53810d9d4c2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:10:04.804Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05e1c017a5ef00852405704be850b001", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:15:04.554Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12d2b46ffc7d3e3ad14a4f220a4629da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:20:04.384Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4147392e3814510abe2b6da584277689", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:20:04.384Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44c7c5122dbf27d1bb75bd6a64d0a82c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:25:04.745Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e888d552e797830282f67aefde8e998", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:30:04.621Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dffc2d075c800a462873cd858cb1af24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:35:07.332Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f598b1c6c0bc34c0412939844bcec614", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:40:04.637Z", + "quantity": 39.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0b6c05b02dc5c434a40598bffdf1d10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:40:09.637Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ec81b18313ae1d86658b9eb4cdb7f6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:45:04.442Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "523a52b6bee5dc3f5cf3175a572422b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:50:04.928Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fcd1ad2361a364cf1ded1fd4499a982", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T19:55:04.638Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f2cf48c158ada346b51bb37c6fc3dea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:00:04.359Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a77433bf14f13114dc708a7267fadcc5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:05:04.288Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d29cfeff0d38e3329ec664e3d98e08fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:10:04.578Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f246c451a70e972a032d1d3b76bab47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:15:05.198Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4e9492ce280ced4ce4f6bbaebd3f8ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:20:05.218Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b103ffc3e29df57d7bd5c030bc85c99c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:25:04.661Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a9bf70f047534cf4fff4996bb1489bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:30:04.392Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae605066424f2915568b23d29f5e657d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:35:04.731Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfc84b261b2413219611140c529c6b98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:40:05.06Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd94f7552ed4173df1f152d39008c61b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:45:04.401Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd77bb172f131d662b48f5133fd6c3fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:50:05.194Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa5ec05b870703d544c5a59e549fa13d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T20:55:05.285Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1434ce4230c3ffc24bd17c36b6ed17c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:00:04.585Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55ed2742d2b0ebc291fd6b4866b95ded", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:05:04.606Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "019642d73d2621f2797157dedfaec919", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:10:04.687Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33703b9aa99bf1db368b197acb706cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:15:05.446Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40c3e52f7c8d12604ce28f67bc875917", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:20:05.162Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74271056f269d87adb7bbc471641e428", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:20:05.162Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d52004f7c18c9c44339c87cfe5d8fa10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:25:05.372Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "604dacc7a11ea5086f6c3c9eed5e565e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:30:05.052Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1537914bf400667beb17ae4690e07d3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:35:06.002Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a0600f2e056eb137b249aebaf483b4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:40:07.6Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98a468ec72afc69bd38a314d6320dd3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:45:04.846Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bfe4a79a4d65774ea47da5d458113ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:50:04.756Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "461c6687f667d0594c51072b228b95ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T21:55:05.227Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d87b8a0ef20083e9047f8c949dbe9df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:00:04.878Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d49628402d70b3b02dff9ca8a7e50bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:05:05.212Z", + "quantity": 238.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e4e72256a034dc6962594b004075d86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:10:05.033Z", + "quantity": 235.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ca8086e062c1ee414597c3dd3133378", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:15:05.615Z", + "quantity": 225.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eab7d82c58728e421254865f1c367f59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:20:04.633Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e87891a1fa508ee175280fc24565544", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:25:05.824Z", + "quantity": 209.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14f865057ae2be9890b4dc31175fa95d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:30:05.066Z", + "quantity": 221.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ad682c1c8682809806312f3b565fd07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:35:05.194Z", + "quantity": 233.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ae83e011760169829a0661f187e6bb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:40:05.336Z", + "quantity": 260.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1698916d8d1687da88eb6665c87e06c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:45:05.564Z", + "quantity": 293.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8576cf1581e95733f40ccd51adc9361e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:50:05.7Z", + "quantity": 277.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c218157057cc325ed2266e99d838b2e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T22:55:05.305Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce6a6b64d7e5983fd08a198aed59e634", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:05:05.052Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d51e9a117a6fcc9f2f685da76f230aed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:10:05.517Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a957c880d8686175c639bebbdc611d3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:15:04.855Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52465616fa5ecad0f5197de0ae109a0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:20:05.68Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3afbd695b6cd9fb73b04d5b5be846e5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:20:05.68Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c30aa47901147b11d8e0ad267c20d01a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:25:05.409Z", + "quantity": 235.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6aa5ad9cb1ea384c6696eaff4823c45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:30:05.697Z", + "quantity": 255.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94e1bc1c183bdba8dcb79cde1817f56e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:35:05.166Z", + "quantity": 255.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50ef9eb6534eeca0026b3b5c6923706c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:40:06.306Z", + "quantity": 255.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f2051890e74ff5c1dd037f5193e7e8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:45:05.614Z", + "quantity": 253.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62b9d689a7869597de26a122df6c0b65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:50:05.579Z", + "quantity": 271.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b13c9e75d00b5fbd125c4051526dbd39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-02T23:55:05.666Z", + "quantity": 289.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23547e28abb0082493a57ce44bfeff63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:00:05.494Z", + "quantity": 275.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "113cbb6fd9d1ecd0187a5983abe37ecd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:05:05.722Z", + "quantity": 269.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f7fa18bf89968a0b21d0f8423105fc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:10:05.353Z", + "quantity": 278.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52534e351cc61a61ab696ead0cc9686c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:15:04.971Z", + "quantity": 284.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b1c2fc65219f68d3afcf01b416afd07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:20:05.96Z", + "quantity": 284.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "011357c16f925267970493fcefdfae8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:25:05.67Z", + "quantity": 293.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1dd520da40a4cd90c5380b3d74f7c88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:30:05.47Z", + "quantity": 295.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac2f23dad79e97f5d74ea5e286fe1b7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:35:04.973Z", + "quantity": 298.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d1f6b5d1549368799ad82c8eddc5731", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:40:05.271Z", + "quantity": 280.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "837bd980e5d64ef8c4af8e29096338ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:45:05.621Z", + "quantity": 271.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef80d2b3746446d94af041af15cbfc44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:50:05.826Z", + "quantity": 274.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9f8e6805dcaef1b5e6b0a5134ed65d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T00:55:05.782Z", + "quantity": 273.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75bcd869f5629bb6a76ee08165fd81ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:00:05.632Z", + "quantity": 272.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a25e494a745a464637ec8a65fe8ba2ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:05:05.961Z", + "quantity": 263.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52eb8922a74334d42f7bf9b43c12c8d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:10:05.398Z", + "quantity": 267.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ec2b912899aa89a9cb16d1835c6a010", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:15:05.73Z", + "quantity": 239.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2fb554de3eee668fdfd2e00c521ac60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:20:05.597Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b842743999b3037bf030235e7acb7ed6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:20:05.597Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1509fcc390cb579e9b6fffc23db4e66f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:25:05.854Z", + "quantity": 249.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bb5484e98e5b93e0b51254239b63166", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:30:05.573Z", + "quantity": 262.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08c5b1de17e18596197461dec3904dee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:35:05.62Z", + "quantity": 247.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fa94bb0282b87ea7b896ff5b1ff9f1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:40:06.594Z", + "quantity": 232.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5dd4f84ad9c53df8917cac15a8bbb88f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:45:05.662Z", + "quantity": 222.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc8cda4979eae07b6a3224b9cff2c375", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:50:05.485Z", + "quantity": 215.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d72d9569e62167930ed9185391f5c28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T01:55:05.823Z", + "quantity": 231.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a48c81d7586ba4e00e4b8d5f7e5445c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:00:05.669Z", + "quantity": 216.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94e7f54197cb16e8878f5d3020bf1e35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:05:06.089Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2ae76ba15f26d5516b8aa47c5af74dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:10:05.797Z", + "quantity": 198.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4e076320418b89fbe50485214768168", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:15:05.326Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cb70aa10fc25170b0b93ff79f18b219", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:20:05.696Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3abb3f3f465045408518119853f9074", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:25:06.287Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd37aa7a3243542d610f49174cd860d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:30:05.674Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d71fb23f0f83031019ce924e470b591", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:35:06.143Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5157a2f0af3388fd8f3d1824bba79f5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:40:05.806Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a54c0208b2e9c1f26e701b2a39091fdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:40:11.806Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1bb8de60c8e0908e98f1088a5bd6e49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:45:05.889Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bdabab68722b44edcc630a7afa4c304", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:50:05.402Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "483f103307be9a2d84002b6dcb12adc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T02:55:05.592Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea40af20a3704eb3ae59f4353e2955a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:00:05.52Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6e9401d01ab6908938e63ac3eb2e6a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:05:06.369Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "050b080b0245f80ac56ab686a339ba51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:10:05.54Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27b8240180bd70125946fbd66ba00180", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:15:06.178Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81c1db9c8976935ffe5a60a29a2c6ab6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:20:05.729Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f83d4d7cd91ad71d690620cb8cb164f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:20:05.729Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "814d0dd17b7f5629aa4fa04f962ea2a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:25:05.759Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa222c17df8015c170dc3bebdd082a6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:30:06.33Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc921fa00e9110956b248a4b8a65cc8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:35:06.34Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6db71cd1e07b757561225ae2dee090b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:40:05.996Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7a0db71bdc4874ac87923772b796fe2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:45:10.529Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "889451e80652cc1bb4536e8ecdcb754e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:50:06.286Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb05dcea89cd500302e526802dc32547", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T03:55:06.563Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22fcd86834cde4b2cace0436fbcb5906", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:00:06.174Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "030e4688ad1f2ac163a1f6c07e10a500", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:05:06.115Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c252c457311cf3e0f40f03cc00872f78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:10:05.806Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "890c4d847c164813f985b628a62305b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:15:06.137Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aef0dfd4c74f68af0921668fd052113f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:20:06.419Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6345e60ecc3df2ef62c09968a5205d2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:25:05.64Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "796788b0ee02ec9bb2a34fb2a0b85ee3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:30:06.081Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8d05dc9fd55a447e31cb2666c45adfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:35:06.232Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a5974148d47a195f0083dc065561f9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:40:06.701Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75340a712746c46634287cbc8bdf96b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:45:06.283Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28386f1d2389972dd273a38712ef2195", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:50:05.974Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c160dff28731dc91ca29e34ce5ee1fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T04:55:06.666Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84e4db0419a0f4b5e27039a2c4c4a1c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:00:06.147Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05078fdcf7f74b65408695ed0b0e8ff0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:05:06.619Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4754613ecdd612aa12fd93201b8545f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:10:06.29Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d34d451b25a68a40c85bea08c3ee92e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:15:06.252Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3a02a481ab95d3be4fb1fc61db42a71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:20:05.952Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fea65c975b95b56c9e996923dd4638f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:25:06.263Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff31cb333d0081b7e22e6a84e2d2f632", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:30:05.894Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "495057d9b918840f5f79e28dfd261f90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:30:05.894Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3675d45836f095a230eba449dba156d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:35:06.406Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d01583330ad3b629505bb4505f70b231", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:40:06.703Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7d8d7a09c5ba7ffc8f8f406aa16f690", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:45:07.447Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdc276ab7e224ea3b42082c9c6b8175d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:50:05.952Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a80d67a1da29dcdc2183016d0aabafc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T05:55:06.831Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "790cc2a949cf163b6ee1ad1eead17dab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:00:06.754Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c42f9126c2f454479bced77bb6b17dec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:05:06.284Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48b65be315cdf50d3ccb92b9314791ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:10:06.36Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc5a46501fd45ef406466e21f1009da5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:15:06.411Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b4fe00e2a64caaa29ce322952470693", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:20:06.521Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "979469b2578613810ef83848e009ae04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:25:06.152Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b82b08816ec66578ef03998305229b2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:30:06.53Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18da014650a6df300e9da29a03c87bfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:35:06.549Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19e07729123e54907374acde233b47d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:40:06.636Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5585f9f447dee438493da0791ab651b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:45:06.376Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ed3ec10fad19b6a90de4121ad5ca66f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:50:06.486Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39aeee1d4f45c1d869ee43e63c7757e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T06:55:06.587Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56c078ce41435d4c42dc06247702e56c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:00:06.776Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8898768ff6b542d57d5b150fa301742", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:05:06.968Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9fa4ced7f4b069a6a79235109354b20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:10:06.909Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d2b99a9f8a18037d7b2c8189558fb3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:15:06.298Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85bdb0e2d3b37ec189fcf1450290a5b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:20:07.019Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c455501835f26fe2872db4e94e8611e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:25:06.897Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f263d658add452c6e25052f1ce7ddc12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:30:06.364Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef28e8891fd8666178043afd03f14384", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:35:07.292Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5514c3669bc15bf48c5b193d9cca92ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:40:06.491Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24d28711f2e98be8accec5ba1f029c7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:40:06.491Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47b2bc539d13eef7b94b025e9a999695", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:45:06.399Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "931640efb8635f45e71ea71427c9706d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:50:08.338Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "995cf66dc9be73f423c7ecfdb0dca00e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T07:55:06.962Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5abdbd81bf2aa080bac7ea4c1d504425", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:00:06.97Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa708fea86d1376b5581e9fce32c0bc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:05:06.591Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ed62b8f4061f0ba7305b873796cd708", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:10:07.154Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "997fe8a9f87865953084f7520e5746ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:15:06.614Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca6287214e96eb665142305f8f0ec3e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:20:06.526Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0fa45491cc1176181bd9b645ac33ebe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:25:07.143Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d07e9154e39ce149265bef86ac5df9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:30:06.992Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc149f981f78b63900b2067a921d7c07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:35:06.357Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52179dae70d7cca17e144004e4892c74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:40:06.564Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e285b8ee344b7400d762bb62b2dae2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:45:07.145Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "855fec9fe3d5653b767cbe03aac9e253", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:50:07.051Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0177e1b045dec3c627901246e102b2ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T08:55:07.038Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3c54a9e72f640f7d921d80020abddf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:00:06.516Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b7d687270cfbe3bb64918e01b403b31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:05:06.95Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2197182b64bebd12e0154ff341f771f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:10:06.435Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d20d41f7cf842d74812af5999515bcd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:15:07.033Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b7fbc5a54a96caa5090bc62f7f42b26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:20:06.892Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ded9faed4ee88a95181ccf7e578a75f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:25:06.447Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c163a20c0d5326360e46f82dadf66495", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:30:06.914Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6523521406bfb9423a12dcce5555c43b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:35:07.351Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d01a4725841fe051c0a5e18c0bffac51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:40:06.672Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "335c4fc51544f0bc2238b93d95b176dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:45:07.087Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ecc2f9ada8d6a1b52edab5f47f159f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:50:06.804Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16e08089675f4dd12aba68af0051b619", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:50:06.804Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1d22334dfb3e7db839497ce29d31107", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T09:55:08.474Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e023661d847238567b95bb08697c2af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:00:06.977Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac45d151ba402a7056355f5256eaa69d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:05:07.403Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1482211da92455c41a756625540b2ea4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:10:07.233Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6ba9c0df5ba42a6014731ae11fdb711", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:15:06.636Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "580822c307e69dadd9d5dda9ea54257c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:20:06.915Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "957b6b8e19bcf28eca6202f901ef6391", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:25:07.544Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "958eab535849d06fe5cd4064daf09993", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:30:07.463Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be7f90fe4e253c59e514d97b4ec1781a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:35:07.091Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0322704255015ff99837ecb156ed8d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:40:07.021Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd3cfda2b867d001d2eb197ef148bdf4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:45:06.799Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cb42390c1063ca26dd9921269607125", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:50:07.612Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb294ac9d716b6b4089c81b26a0a0a35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T10:55:06.97Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0a17e61984532ecce635d84ba19463c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:00:07.238Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95085dcf93a7a53dfab3c02ce26f4a8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:05:07.705Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "784c217e11a78617f7073c85beac8ba1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:10:07.271Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adb716e853d77319f690ad8e84626cd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:15:07.37Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8aaee9a0b9ebf5650800df63c2f2328", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:20:07.159Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7294f127dc9e0b5bfc0e3075862155f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:25:06.86Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c96db94fc2d447ac954b7eca339b6a80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:30:07.716Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4217ae001f45f441cc7e9eb384ecf682", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:35:06.854Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1cc834822f9ee9177a385a2ed2f95f5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:40:07.165Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fbe90bd545bc64a37abe68ceab88806", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:45:07.477Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38a49a3d8e87677587e1cc6603bde4aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:50:07.244Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0bae1ebcd1185188fc8299c2dc83b7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:50:07.244Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fa324a254f71d79ea8aaebdaff7f9cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T11:55:07.165Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e77aaee2ef283b9173ea97f635285c11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:00:08.452Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ebbb270ad06655d71c7b4ee4e4cefcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:05:07.357Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ac70642d6f6a67d9a4291b09234a4ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:10:06.953Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14019338bf346e13afadd6738fc75a79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:15:07.511Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7612e3814ac3f78545afc0d32ccdbf77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:20:07.555Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd5c8628a3f889d964368101caf34016", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:25:07.612Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "013d63e3a7507165b381ef8bf8bd06a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:30:07.38Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "798c539e3fbe7955aa53ddf8742b94be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:35:07.729Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ebe093a3ec6d4392e4e7cb396d7d651", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:40:07.796Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2668a95382f5ef4e469bda4164d39fc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:45:07.054Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "204ee80c6ae6a294cc2340eb39cc55fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:50:07.482Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acfe76d14b095313d2f3c751d9334fb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T12:55:07.75Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9cec5b989eb9660d5738baebec94db7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:00:07.375Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "128589a00dca6670a1d953230ea2a11b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:05:08.141Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8198436e8fafa10bd5da09c1696c2738", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:10:07.408Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7245e5c0399c06fe5a7e03aff3c6c297", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:15:08.014Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d9cfd525873f8e57cd4fb1c95bb508b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:20:07.968Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac75047d34595304b2581fb48e2728bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:25:07.372Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "346cb9e4e78c2abcfd398c0991906505", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:30:07.222Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cbc9c0013434669212d3cbfed79bcfd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:35:07.259Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cf097916a9b4338c9bbcbcc1c39b0c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:40:07.911Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4631a6b8b6fdf2299951a0eb8b70cd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:40:07.911Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d05c21dcfd7d2e522348de967350fe1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:45:07.691Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cc6590f6fe3858131f2f816ff5534fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:50:07.813Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a47004e9f47c27a6705d89fded1db760", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T13:55:08.113Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b05054c1c795816b7fcf4eb4f8037119", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:00:09.238Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04dd9fe4071f3c692db2c6addb6212f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:05:07.479Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f1691d4e9b51e24fbe7469b1d1535e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:10:07.244Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d994b1ddf1a6149a23c03dc68e74f854", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:15:08.175Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5432ac313aedb9a9e691cdf6d39f8ef9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:20:07.995Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d1de6b7b5b1f0bfa9ef35e2cea69809", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:20:15.995Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "861317154f394fd01aa49e1cf546aa3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:25:07.406Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5dbb611fd3650b50411dfb987de2f1ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:30:08.222Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f015915802262e550c525270a3aed73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:35:08.269Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5263203e23fd84d061bacff373c80328", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:40:07.935Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8d0c13390dc4141a64431ad482f96f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:45:08.033Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2f3e77090b09e62e93e1243247f3e3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:50:08.069Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60ddefe49f68d608c5afc9a355d686d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T14:55:08.119Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba0000e84edb73ac42202f3cdcf2bf62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:00:08.259Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f6886bf4223a266effef34ef841c1a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:05:07.531Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "842f2b2aaa7f5464167ac2b2ac126512", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:10:07.626Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27c797f776aa1b84b2cffd63f543aeb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:15:08.287Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ede8a76dd354f4e57e26ee76a2d3185f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:20:07.487Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49baeea255d306442ac96dc18d71cb09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:25:08.372Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13b8b839c9e616c478893671e1ee16fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:30:07.631Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c983cb411729ab0c1ba1d42811d0ec1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:30:07.631Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "467d5932291128fe58bc4c3b8f39c8eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:35:07.495Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab87d59c8a42f1f74d5b0600a75446e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:40:08.423Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8943b2a75e53bea7b9a9608a8b60ca7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:45:08.299Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2e83e91bd94a9ec7749353213398be6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:50:08.142Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "747c27ecebb53ea4d18e6e4c6690f1ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T15:55:07.909Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6afb33b8d94ece8ec1ed3f5ae8ecedcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:00:08.935Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e37c63913f32ad11aae31feb0e8158d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:05:08.257Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33df1f3355ef92133fb5ab85276826d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:10:08.624Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30889471efed168c8a83628b6bbf0416", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:15:08.53Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44d395da9f0f20ec24566259cb19a9d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:20:08.068Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "accd9a30494632257c1c169401081e5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:25:08.296Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec39f5fdfffbe378aece5c4c36f369a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:30:08.516Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "256780f9e57d5f9c4f712a284e03ace8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:35:08.588Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a68141641e69ae8fd4273f268784bcf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:40:08.657Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07d3be1cf7b8e4e4638dc7215cc04412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:45:08.25Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc5ee86dfc4e950a47f19388280230e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:50:08.381Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21b9918881eaca3f263bd29f76f775c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T16:55:08.448Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f622f007e76849756af136d631695540", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:00:08.401Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b868b8386b39846f61f68380daba0202", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:05:08.485Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a695218f84adce123bc3e30509223a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:10:08.414Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4f865d67c28f2e81390387d0feacb66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:15:07.962Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be4328578cadedce87ac14621cfd94af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:20:08.334Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bd4eaff1f3226caf3dad07b86c42b96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:25:08.725Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c75bf170d802cef13370f3e9073445b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:25:08.725Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5276b74d6e3181212da840e4100753c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:30:08.153Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d3e98c4aaf443876d1aed24abebd019", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:35:08.054Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11ad2433e1fd9dab5962e436adc1c227", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:40:08.052Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11ca0063438e42bba4c3886d6d3a2c7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:45:07.875Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6261a57effddf102b8e6ad0ac72c61fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:50:08.351Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbb1114fbb9ce66690ebf4b72427006f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T17:55:07.992Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f416d80074c7f255f05a76b3b733da25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:00:09.442Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3117fe5eb00775c71883cb3a64f89eb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:05:08.833Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "573a785e726840ad7e1f3d4e8e8e7c7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:10:08.267Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fa4d7edcbd0a7d06215fab25234e14c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:15:08.087Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "247e367fa21c5a0202810a5422d06049", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:20:08.33Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8303f2353ea23468d79bf3d00b003e38", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:25:07.981Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3455f19d4d278db94f3972ec272c678e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:30:08.323Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e505e6f31a13dbd6da9f0dbbbfb6de7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:35:08.464Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf14672a321b65b8f9cf0ee699947eb0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:40:08.224Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98720a5efc094b983f1a0085a71f7865", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:45:08.613Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3619abecd9ce1161721ffbceeae6dcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:50:08.574Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1255011dadae2a25e3c548f91bc0de9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T18:55:08.317Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cd708d7855f3c7c9e3a801c3c49eb94", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:00:08.217Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f38452672a5e99fc92b3a1093724dbc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:05:08.945Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87ea545bbbe1b1e71ac955d457c71f9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:10:08.536Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07314f51cfa7196a64ebc67ae521d3c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:15:08.487Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f080e6bcf88b672bf52d773ba2c55626", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:20:08.676Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09e7e6ef5bd4d1c8dec94aad67e7eabd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:25:08.545Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "caf7197b02110be6b34da9ca2dba5b67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:30:08.723Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb7a9655b055a73888fead109f364c1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:30:08.723Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b1a45dccdbb3b89bd75ebdf35bcc9b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:35:08.889Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bab85d286d924d63cab416ac92699576", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:40:08.499Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97510b0a40b96c6261a48ddfd0776e26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:45:09.087Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fdc3b5a3a56119408858515fbae59a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:50:08.808Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae22c925308fda5b98115a83000367d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T19:55:09.129Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a89127b7a8998d71c6228ca03d3d621", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:00:08.936Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0199e3d7ba2bf327390dd3ab5dc79679", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:05:09.398Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2cac61ddbb513ecc122eddfcd56c727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:10:08.31Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17d88728332646e4a015cb8f7834c901", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:15:08.909Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "956e3d282012c22c272dc78c98e9df2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:20:08.489Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07a737bae0c95324184740616e108cfd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:25:09.059Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "566b8b1ed52e906c612bd4f2ec0762d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:30:08.696Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f4e5c5a7f336fe4c9503991c0ec364c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:35:08.981Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4f71fc258efee87aea7558e43af4fcf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:40:09.082Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6644281279ba91bcc69d48964605fbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:45:08.419Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d57dac1e8a79871eced2068313a94f06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:50:08.39Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a0cf5de70fec0f2541690def0ec8aac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T20:55:08.711Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56596143ca1bd7de8e8303f2dc1d0b71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:00:08.604Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b89a608db05e578819e728a85153567", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:05:08.994Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9dfed51a0091dd1d38f6573646a31af1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:10:08.784Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab68acabd112fb698294744843c31cbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:15:08.448Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8370f7b40a67ac530fd9dd83fbac142", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:15:08.448Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64e14c0a56cea93794bc0548c85e49e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:20:09.314Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eaadaece4c31f72903069e958ded932e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:25:09.731Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87a474f807500eaa189e89f25fd17521", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:30:09.566Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "910c87ba817a1f58a2ec54b1b5e6fbe6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:35:09.566Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0fbde33c042f8dc77127557c2a4a25a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:40:08.9Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fa1013fa1a911f48a5eb92dd96575e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:45:08.9Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d00d7536002175075606b9949ca31fd8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:50:08.9Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e5ae1d471f27230eedeafb53c9f4353", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T21:55:09.36Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b70fa617b2d7cfcbc63bfe106795ece", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:00:08.979Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "313148a01b91e1ebf313bf38c2e93579", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:05:09.438Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "702ce34d1a315618ad444f87ef48375f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:10:10.797Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfbee919725221f7a629896f6ea60928", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:15:09.505Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6908ff0fa3db31f78bf222fc94b4df2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:20:09.297Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5149ddc23e8584fcc88dcc6676e3e056", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:25:09.28Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae74f8849480ec1ee57d2b921f9b6723", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:30:09.161Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcc09fe5ea83a3f171762fb17a49fdbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:35:09.584Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "143870bdb13666a613cdfe061fddde8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:40:09.117Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb16124c11e3f2d5e0255ee4ee84a580", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:45:09.056Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5943be63b3c7514078cc372bb63aeb52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:50:08.977Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ab5d579b5c8c6fe1ba4ef38934658d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T22:55:09.605Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "985974dcdaeeb3a6c8afa28ceff73926", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:00:09.746Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49333b7bd4630f0deea04f684938bad9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:05:09.51Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4213f8cdca7ae71059f7636b23e8e11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:10:09.51Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3be7d358f94e7eebacef596e8a805770", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:15:08.943Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7abcd2f34d4d2a9e08902b874a23f5fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:15:08.943Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28b565d5c544cd1e0434fcb7d731d8d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:20:08.845Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42486e348188588a5abfee2d33f33f17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:25:09.716Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7053bcd606e73ccf49a858a38ea1a1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:30:09.071Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c92eff2472e35ed0c8633eab0843cd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:35:09.587Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc9e1764a09cd0866fcd36931527a23d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:40:09.379Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bb1291ada90fe348f847bfc657481cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:45:09.511Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ca40b2eec72ecfef704408cbbfd3d26", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:50:08.824Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b496398012bc95849cb20b7986064684", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-03T23:55:09.964Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ca7270273573d10151de78e8b607d3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:00:09.044Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ea257e191ebea21d5b2e6bf112c325f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:05:09.177Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ebda58155633b9b921b31806901dbf2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:10:10.947Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2efcb688cdd4d6dc6373b53f945356e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:15:09.796Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca726f6b375c12d907df11da742c923d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:20:09.105Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0018c43879e6e4064ce8b4d8b05c7bf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:25:09.651Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b76be3c71d84c26209c60a1f4c379b37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:30:09.689Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6382445736d5ba8c6fe4cca88e21ce60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:35:09.641Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bea1c562779698ac6cabd8fc007921f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:40:09.529Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8c2f8d9f805f05a2aca23ae328ca6e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:45:09.421Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e931835c4a98d6d8d37cb665e58aa89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:50:09.712Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3f76bbd3b37635035a2619ad7ff7d98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T00:55:09.252Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09f73574194016c295c5bf2978ca44fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:00:09.406Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a3939e28372be93c787d297be329c14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:05:09.617Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "044c1214b6fc5f81f600cc34b2b98326", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:10:09.882Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca9d0ad1e6971161e78e0fe7fcd4551f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:15:09.621Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "750ae472837bc3864837289793c4dece", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:20:09.695Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "daf6e8a9a4688827044630a960a62b73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:25:09.359Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "559b25786066df081b4bd02c1545c026", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:30:10.07Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e30f27d4343d9ca8eb243bd8d62aaaec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:30:10.07Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "401416752d03048c02ba3ac1f44abede", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:35:10.085Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a93932728340fb9c0d948330fb8e8dd9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:40:09.496Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "457f753c4a1e2d6baaa41c183e6d59c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:45:09.551Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "720a5170fdd6615b5111f1638b1d4a1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:50:10.22Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a52a4e18d4685fdaa2767ae9024f5b14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T01:55:09.823Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa16da8b713ceb70865f6d28e850ddc2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:00:09.716Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71fd0562997a29096db604987d03176a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:05:09.976Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8990196e68f73457ba5e592d08bdd81c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:10:10.811Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ad34d80d86b630b0ca4a42df136cf5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:15:09.434Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a925b820e305d0ea9f37dd985714d6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:20:09.674Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ef2bc481302c91f59a2e3945b0c5fc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:25:10.036Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a84dde3da9fdbbaa365911210e0de25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:30:09.557Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "697e8b46a7cd76d8a6ee05d768bc211e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:35:09.533Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49126f768d07e71a3e84384d529727cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:40:09.645Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc00004858fdfeb06dcf6920ee68fb85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:45:10.236Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1373766ae658bf9dab67ca45cfb13879", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:50:10.185Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33a49fe95ac955717082ecd53e11ff52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T02:55:09.785Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f2899ea72a9f7d75609677015211105", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:00:10.293Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28b10837f7e85e68e32bf8929a85e799", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:05:09.688Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e48ffba1130283d6667c668afcfd44d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:10:09.82Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99c94f5a571876db3ebfa92ba9415667", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:15:10.513Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59c959344481a0644e8314edcd97e379", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:20:09.501Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aadcd0ed8e9e38de641b61b08a37579b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:25:10.07Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70869b6d3f540240e63529cfd9e6e6f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:30:10.53Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61c5757c0fcb618cd4775d2b7ce6dc51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:30:10.53Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe07a29a90d19db878acf8a162dd250d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:35:10.08Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f911a057039345d70b27ae51e53a9c8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:40:10.029Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d59c85a0dc03fa9ffcac349659e73b17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:45:09.598Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "351f77f0f32a7c0850711fd998d690bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:50:10.425Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "161dc832c4426965cd81aee055f2bbb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T03:55:10.425Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8346d00e078deab41276c3c4f7b079d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:00:09.683Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec7a482777b16454f5edb5229499756e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:05:10.275Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f383815d34ab48aec0e00a81ed03f08", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:10:10.109Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "091b076a421ed5258a7bf76db789394b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:15:11.471Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a241e87a96899fbcc183d2cfb5e456c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:20:10.031Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29f02d71bf53a5561f43307f03efab1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:25:10.524Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2865d9f1000bfb81e787089671747a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:30:10.435Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a86c5935ff3444de36fcba3d3377981e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:35:10.464Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6d3cbd40cd3bd3c885d2ed02ea40e548", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:40:10.173Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31d2f13d14d6f737248def3da5f39f84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:45:09.693Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddafdea483e261fc53a0c9e00d43f2bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:50:10.115Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b86503472d83b7771511077f7c2c5e02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T04:55:09.907Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c2dd485beba7fbd10f680c44d50ffb8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:00:10.51Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78f0e6501c3995b6fc011ca9c7f08b01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:05:10.146Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e171319f2264b5a2e307a13f1f44f1fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:10:09.907Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48cf4c9fa3b1f28f5bfda161a792fe72", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:15:09.787Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "121391a67220f3606cf79d3ad47cbcd9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:20:10.389Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10dddf76a4eb198f024f8f36ba37d100", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:25:10.77Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1742c99e955721bbb269a8f4780112e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:30:10.55Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "755ddb032860dc1476c3c21deaae15b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:30:10.55Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e4869d7cd1821b21c9cc86b558ff1d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:35:10.457Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dba0cdac6d2f06ca71fa6f48d645f78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:40:09.904Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0f91d2dfa7508d9d1fd67713f7b60c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:45:09.868Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ee3e825c07972059923fb9dcfa8faf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:50:09.917Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df183724e8901b730ba8a301fb56a4da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T05:55:10.389Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04c377e22a7ff573ccc73a4ba939acd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:00:10.195Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "705e7b65c248f9eac6ba0d76a649277b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:05:10.796Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d399129f612cfc63ba4aff93e59b953", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:10:10.124Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb4cadea2d720ba916e98556186e1231", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:15:11.55Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2adc016cc1c40adccf270038145ffd24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:20:10.592Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5592b852e19e1fc3454022f0c42d1685", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:25:10.576Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9a9404b5c084b0189c5936f705dcabb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:30:10.698Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "006ef1207a1bee0b9b3045e4b1c338a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:35:10.378Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "147a4bfc3ad31d43d7aca614fd299673", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:40:10.719Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe221c97d17fd079c0bd2a6b99707458", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:45:10.591Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0cf9c4e54a29d0bd3d49648947eca1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:50:10.992Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41525f10dd0461debf7e8a7a011e1247", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T06:55:10.994Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd1e88bf9959bf25db0285e6a26bf566", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:00:10.742Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61d2f6fe5d679f5cb0297ad2f63470cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:05:10.431Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "023de22a155a36437ec83bb11573a8ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:10:10.529Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a25fdd047258a7493bbbcfb469d95442", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:15:10.149Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2504bb8448cc215d0b663df233421cbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:20:11.02Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d2ad11154774eff5c5d30bc090fb629", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:20:11.02Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a138adda327d67b4f73d906500709a99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:25:10.659Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e9b8de5550140ddaabfe9c610254ad2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:30:10.759Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e301a3f148f8487aebb138cb5080a0be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:35:10.168Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "617bf1570e02f70aa8d2f6c3da6f1c5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:40:10.538Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b01cbeff02d90f943afd9aa4e0a99f00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:45:10.517Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11fa5ee511db0cb6362a9615695f2e85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:50:10.491Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c6498185d8b4283c0fa005679b47b92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T07:55:11.459Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9cad7aa22d67b9fcb1c3e13f1fa7b8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:00:10.949Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d57a0d0066a49a2f39d030c844f84c1b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:05:10.691Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfa72dd466ba4379be9510f08b6cf0c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:10:10.733Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "392d308405e94d84a3162c59f7fe9fc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:15:12.025Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "648fa001d6db800b87bde8fac25faab7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:20:10.503Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "881542c12e4bb1c43689a66603f503c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:25:10.472Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cbbf0ccc59ee24962937acdf726ca6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:30:10.464Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2db8f5a65f51a4de7891be766976642", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:35:10.623Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fff2403304e921b4c86e022007b167c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:40:10.474Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c25fbfa7d890d00c161caa51a496cb31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:45:11.563Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34b861d005e5e3d3eecc352ef75ae811", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:50:11.281Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "634da2153e278169dffd12396b694412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T08:55:11.024Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ceb1ac6ef1a49aedac7e68bda1b45813", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:00:11.284Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "396d9639ccce4d80de89cafa712e6ba4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:05:11.306Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68683e3146d8a0a0dad5d0687b547dec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:10:11.02Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff63fe54cfd8faff81dc86ebbaf65454", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:15:10.909Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65e5cb09287d517da511751ce37663e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:20:11.101Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0fc5c6425797956b1e41391a448530f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:25:10.881Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09693b7a228a5f309d3e41076db5598d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:30:10.519Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a490e55076e2896a2a138d21dd7cfbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:30:10.519Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6a307a27f2d1a0b0f799342e4ec7f29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:35:10.948Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6988b0b4f01f5cf91ad7c806d9e81540", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:40:11.02Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a92e0469de8c1f161822e7cc799274c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:45:10.91Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca52dd46b52e9f85047061779f24776a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:50:11.35Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "135a256b16db7bc1dc0ab5223aed0b81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T09:55:11.312Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4241277b3bdf381f14f1bdfdcca7e43f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:00:11.794Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7558378a80c68bedc4f4754afbbc4fb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:05:11.062Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f18a356060938c7a7a3b93502c4c6c6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:10:10.663Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3133e2b9f9ed9bf85dbe080db8b9daf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:15:12.396Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2117c8cf119705748c44ce57d0ee16b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:20:10.998Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4e940007dcc7bbde451ca5483dbfedd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:25:10.729Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d7ad4abd669acf0b9f987d29f476517", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:30:10.941Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7dcc064a1130033c472164b5013c0c12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:35:11.144Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba8844590ff416b68d5eefecdb894ac0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:40:11.395Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c673614c448b3db5908151dc9b5725ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:45:11.588Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e496258555091de0906f74e119d0d251", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:50:11.067Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee6e47b6eb0e51db286ccd8503b79f9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T10:55:11.428Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4138e92ad19b50d1320bbf180c45d23f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:00:11.487Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca59a3b80ca57f511f53fa2b77a63c39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:05:11.325Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f837e857e71471ddbe16de1ea4bc13f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:10:10.894Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ecaa5d16e0d5a4904d932785bf5fd02b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:15:10.836Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b74760ddf295cb255a206ba251f64df4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:20:11.226Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "809befe8181c7b705c4ec6530dba72eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:25:11.179Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fcdc537767ab863150f0e8f791de50d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:25:11.179Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69f2d946016a73d4b10e54eb93c1c628", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:30:11.469Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a214a041bf38dba47bb882cc90e46b0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:35:11.17Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "042703c8e13c8e08048110a2635fcc96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:40:11.023Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85aee98fb758b9fbb33de8a82197cc01", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:45:11.525Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e842ecfa32b35234b8eeaec823262d0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:50:11.615Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5110af4559817eb284e4e97dc61be61d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T11:55:11.255Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94ed548c4c76928deadce3c8e5c92c7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:00:11.621Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4574fcd1b238ae9fe92041611926095f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:05:11.473Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "052b1e9962b653b77303e012477fc56a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:10:12.302Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb54f0ac076c0a72778af9a0b064fba0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:15:17.383Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e84fca4fa44c2570b1a6b29c8f778be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:20:12.449Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "104d09291d6373011793872e660dc926", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:25:11.138Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43b322a9650bd4f0587d6cfe49f0fb59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:30:11.669Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34686e3d434bd976236a4d8f52ae6f7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:35:11.05Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c6ab5bfccad8bec5c10c60dec1d3657", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:40:11.771Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdac37952a7b51f54261b5f935e8e882", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:45:12.011Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98dbd1c7b2e108567cd8117cd8722fbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:50:11.701Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d01d7e67cacff9c9bb0e67db0afa3be8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T12:55:11.782Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5720485f4190b17c287cf01261c200ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:00:11.815Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9813405e78711d73eba03a6b44ffc65c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:05:11.923Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c09a82618a8e25cbdf17a4952ecd7e06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:10:11.454Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8117895e7275062c4c44f16044d4516", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:15:11.652Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b68662acb3d4748f9656496e0c5fb3a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:20:11.23Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c92e17aa1f3227154cdc56f3c38ff22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:25:11.858Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "417ffe65fa6986b127341d3511711725", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:30:11.117Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c5153df0a5d3df5383c2a9573c4cc6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:35:11.694Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3fb5d58b6ff8b1bf398ff70fb1e8734", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:40:11.845Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8dbbb0d013237e011f59b306a7205140", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:40:11.845Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "957af212fcf0a166023d0cd760f8cdd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:45:12.173Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "199bfb017c06264ce0a5836883657b84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:50:11.276Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4878c2835accec515d3619cb9d9d3805", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T13:55:11.763Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0aeb42509381ba0fc2a159df03f46449", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:00:11.927Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c807a5a8981cd01b145bc4779dbb2d6f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:05:12.183Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "393749bace4595741e101bf424218e5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:10:12.373Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e477e1283b35d1ab91e0938210815efe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:15:11.432Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08f7357333b0e539411edd30bc1a61a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:20:11.342Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dcc53edeba11e7729932f8d70b175d18", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:25:13.156Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d326891e20aea525ee9872749b880a87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:30:12.244Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69e4887e9630ca65c1baa5f4b50e8bb3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:35:11.92Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "041a35920c8698e7ae07d6e99b4f9e0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:40:11.834Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af96384e9e1e451324ace6e1bef2d0b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:45:12.091Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65b560aae942e47243e14c4420f69d87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:50:11.603Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b909c261c2e242d7ccc3da36931a0750", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T14:55:11.658Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9dca5a82094d20379c722c5d0ad40af1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:00:11.931Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce279c1a826d74f1394d9c28651df74a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:05:12.304Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fbb24b90d97dc52fa17b8156015051e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:10:12.249Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6750eda2a1b59da1099acda9e5605b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:15:11.803Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59b161965af571d768ac772e684683b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:20:12.337Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b5aaeef4f6bf9861b79eb6c7d3e3ee6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:25:11.607Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bac76687186ea40f1d0ebbffc6b7e666", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:30:11.942Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87619180080e9a71ef106576a37a13fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:35:11.893Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df213942df48249b3fe8e1f6d6bcc2e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:40:11.55Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f463e3e08f95b20eaf4257b28385a0ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:40:11.55Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ef063858334a6e5ac2be515a10b0d4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:45:12.042Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30d9200bc66ba138e439d6828f1f0d8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:50:11.857Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f25247d8283502063d43046699d53c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T15:55:12.29Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2e294a64d47a23dd68d8300baa7e897", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:00:11.886Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b609e03359510fec87e7de68332a3f1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:05:12.859Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60b589c1b69bfa5e07df33318b9410ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:10:12.552Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22d2f265ad0eacaa2b5002313f4b98eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:15:11.881Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67a2b0f621a150ef3df0c8ad72eae177", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:20:12.311Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e71b23d03f6bd3f2d1fd1ecbdea3cda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:25:15.435Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "705d6d604b252d752ed4399d97a15891", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:30:11.908Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cba3956013f492e9aeaafae05f7905c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:35:12.387Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ccc6c20dd9d328b6f01e56c9a2610148", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:40:12.214Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4214fbf633d37c35e3a6a1e80319cef3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:45:12.042Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2604288c0efb36eb1bd520282bea85e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:50:12.014Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9532c464e3b2b5aca5101161a8d47342", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T16:55:12.035Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc1d4f10e0ce2299c78b02779cb2b2b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:00:12.648Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c881d192bc7219149b10d942091f7d7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:05:11.893Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94d86920e86cadc50ebeca5abcfebbe0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:10:11.593Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab5d5dd20524afcc973e9930e67ae2fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:15:12.078Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "addb74b8b47d3458b3384432e6def8e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:20:11.581Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d0957ffbb559a11daf7c45578bf7c7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:25:12.2Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "509ca49673f6804a5dca5d431d743a16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:30:12.38Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83a73ad6fd8b9f2abe9ce0bf570519de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:35:12.15Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65063f1368ca14759b941cb8167140d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:40:11.693Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4983a25fb125f12a9f66f397d0187f4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:45:11.872Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb9c2a1ebe2c34c4ca391659eb51d5ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:50:12.461Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8c57ffa8f866db3482ba0ac9ea407b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:55:11.798Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a98269c08cf6f8ec1b7aed966ceda6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T17:55:11.798Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94d8aa1a9b8a2f55d156be2708c4fe81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:00:12.204Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba2cc25a4ad881075912ca186339c69a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:05:12.604Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b756cb2eb8a27c9c10c640b96bd029ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:10:12.459Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "104c57922fc21768732f9fa9654f01d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:15:12.289Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7720ae97a47296091de7d30ad074eb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:20:12.453Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83d411014e5850d4413a6fd78c454b07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:25:12.636Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce1b9ba44bc53bde67f5307efa9e773f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:30:14.792Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "552e00a4b31896498b6a56afbbad9c32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:35:12.708Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b37c30f8f0583f20630df9a4541a81d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:40:12.333Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1bd088049ecf4ba3eb5170a6cc68f24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:45:11.847Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03a8d9235fcb05fe727d44cf0992414a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:50:12.284Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11451437c706ed0438d23d0b220bee2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T18:55:12.534Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "351c137459c36ab3c421f56bdeba9b5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:00:11.947Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf0b4ff188d772701693f7349a8619c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:05:12.171Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "052f04d9c61cecacb03e620b0aafe3d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:10:12.859Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1645869ee29a6e12be04f78f26544b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:15:12.427Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e76a9a8280ed2d347d997741d3729bb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:20:12.697Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "402b682698e3a5c92de8672d476ce61c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:25:12.148Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eee4c14c2ba05e9b555eaf3a28d883bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:30:12.554Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4a6f5c25eea7d190afe4637934883eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:35:12.16Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34984b8904a98fb0fc9f5370f86881d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:40:12.903Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "603df202c7c90d5ca73f12c8287057af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:45:12.87Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "826a0fb46ee003a5909c7a64230bb702", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:50:12.563Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc90a891def5bb751f2dbb0310823d14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T19:55:12.821Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41a5f19fa81d96751c26681502f208fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:00:12.473Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a17f8a3504d0268341feaa806e226ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:05:12.827Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31bfadf45bc0d44e7f5710d61ede939d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:05:12.827Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f12f814ecaec79a9a2f72f97a63fd3c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:10:12.564Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b18f116b577afbe4fc3c33c93dcbaad4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:15:13.074Z", + "quantity": 190.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c01446312ec07085063104760d08f64", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:20:12.066Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc194b24e825ccfa8fba925663dafd40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:25:12.686Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5aded6f8608b0fdcf88c35281e6bd55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:30:12.873Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed527c299c27aab99a96ab97695ff14c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:35:13.377Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e93bff4aecec870b824caaa826a8cd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:40:12.752Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "963e30ec1226f8fece51378804fcce5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:45:12.968Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f38a387168282b9ec0b1304759b7caf7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:50:13.138Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0201cc414e7e5c4770741c1c46495fd0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T20:55:13.178Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d247be8ee6d14b69b8a58db8b3854db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:00:13.009Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b986b52a9ea9900c1034803f297852d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:05:12.929Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db0e7d4390f4778f2752aedd40278b7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:10:12.971Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "769a228854979451a607fc12552d315b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:15:12.969Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "077789d218ec4bb6d92811bbe8e18977", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:20:12.803Z", + "quantity": 211.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ae6b596fb92241449360a2362ec3e0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:25:12.404Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1fa2769fb070e97b71e94738d5c0692", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:30:13.274Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbc5387a611391fedbd44352e221ef86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:35:13.275Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bc380a27cdfed482affda332756968d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:40:13.03Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f51ec6f375286eff87974692d9b6f5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:45:12.702Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bec1ab4a22b8d2b5b9c803a6c91804ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:50:13.172Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edec98c82659f1e93a9c45d43c2e3b48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T21:55:12.666Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "719d8e7ccbfb460262b7826244d0228f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:00:12.712Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf75501ca984c2c7481c471925d9ffe5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:05:12.861Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c24129a96cb871cc65841a6cbdf0e11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:10:12.701Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a50ea5fa73cceec081e4ba4ccd362b44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:10:12.701Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74c5345a2687ce9a836d18c4a3cec744", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:15:12.592Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "005641de0f7dd6a6f43fd1d777940a45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:20:12.862Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aba763dcdb03856234de23ac4f10de52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:25:12.793Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf7926fa201d3fc21586db4b70aa05e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:30:12.789Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4705ce602add1b084b6b83b31182329", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:35:15.816Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "948471a566573e944bde80abfd37106e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:40:12.955Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eabe4d82224e8ed726a60c276fadf533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:45:12.714Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "879fce55997f29f28279382ce6215bab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:50:13.152Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a56efc82e13f35088c13267a5e50fcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T22:55:13.443Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a587926aa267052245088432db11ee4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:00:12.693Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b43a5f6f66561b4b8d56112a804beac0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:05:12.653Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d5822687465d22a8f71623e5c440154", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:10:13.569Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd5a5c69ec77e74bc31541d42a463f10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:15:12.742Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f7390f91909547e7cb921e233810513", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:20:13.973Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15b9cca14e01e6c4f2a36fc2b3a6f599", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:25:13.427Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f581bb49da15516d603009c2f2e5b9f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:30:13.606Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d86eeaf56971315820a1cb9612f11c3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:35:13.904Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eab7180150b0a2636f365ebb7fec3113", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:40:12.868Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c954d5757a872ae1cebe1a83358d665", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:45:13.752Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16c5d8d1a06df187579b3a10198a0050", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:50:13.426Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc4cf1f11318739747344393d81b5146", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-04T23:55:13.485Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9eb02d46048a74549b4c205bc866ab2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:00:13.716Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf5b85f5cb89808d03379b2ee60603dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:05:13.428Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "607860b3b12dc2f9107f455fc3223c8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:10:13.609Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0aed6e06ad0206f070d85d378d1f49a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:15:13.432Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b267533518e6c3264b0850c2aa955cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:15:13.432Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d46c7ad732db51b5fc692976286f83fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:20:13.581Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed88fe1e2494a7eb215d9debe071e48b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:25:13.342Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bcf980d4f5e1ef90da25c9b35591e7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:30:13.248Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "904411f0de28d7dc0ad2e53f382099ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:35:13.48Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5239f5bc4e7ff5610a57bc9990d5effb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:40:14.669Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb7a6ee7d5d3434b0cc59d906cb45b05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:45:13.44Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d90a5e5aec8a97a3de7a580eae96fa97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:50:13.141Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc2efe89407a90da6955fdf8a8afa761", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T00:55:13.195Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8add07b808ef9fd0d36850488200eded", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:00:13.491Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb140f5cd0b93ae0f8148d25c1ca3e1e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:05:13.104Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0425e1ff20339ce2fa2fb2d35c80e81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:10:13.891Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b01c9f7e359438fea26cf956a54d03d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:15:13.591Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6de552dc1400c31530168f49dd7ffe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:20:13.13Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d75091f5ebba51751446d4568db2835", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:25:13.365Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ad0eda65ef30b333670f2b854a6215c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:30:13.31Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8048bf64c620b5e2e088b0d313b32b49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:35:13.105Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b814c970e65426647f701623e4a7fa0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:40:13.897Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "140d3f3a8b5e88dac84853b63d0f886f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:45:13.099Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "859a6d29c85c0a16a8644adeb1cca84e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:50:13.609Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cb23cead8cb02035832776119f6072e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T01:55:13.654Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86abc89ed3f34901242b6c7250d08303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T02:00:13.898Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f52984dd1d6a878c3f94da71d16e3785", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T02:05:13.554Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "903e1ac11695ac36c1329ae32a55cc29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T02:10:13.664Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73320294d35f7e053abc236553f68ce7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T02:15:13.09Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9edbf6e30892d3748d6d585e9e9d09c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:05:13.755Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b53cdbb0a56c87e842771e25a5e5c0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:10:13.37Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa7b6ded88c1246ed941e9dd50d8f0ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:15:14.132Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8885957dbf572a2a780a7c71977914b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:20:13.756Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5fb40653100df63d2d2c3e7f3702209", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:25:13.984Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b23f9b55bf4af321432104b0447dd88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:30:13.864Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a02f886a3d468d083c618d6b14beef6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:35:13.708Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf13e2c001f5686173dd75bc220b4533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:40:14.258Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21eac68158ff2a2c7ec059ce78117e2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:45:13.971Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0cd03ea4d5ce1842eb0434e7fbe9401b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:50:13.494Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "267df21136fd4841e358adfbb7972788", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T03:55:14.126Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce5cfeab8042269496b0e535390fa720", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:00:14.357Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "317e54e17478c8060ab3046cc30a3fb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:05:13.597Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d6b4fb8f1d652d9c01d69b31d147d0c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:10:14.417Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38153b93b9cb5f0b9a132e311020c56e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:10:14.417Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a64b8da37cf4c9753c0a0aac44bcd9f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:15:14.116Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16d38db99e52becfc84bfe87a23fc664", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:20:14.258Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cff04226e6a11786f7f2a87f578e7817", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:25:13.978Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b08d65f1a51114b3353e69c29a1f35a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:30:14.194Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32510b0327e83cf1aaa3b1e9f2e5723e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:35:14.012Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9300811f2a4078c5bc1acf7a28d6db6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:40:13.795Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1351e8fe9033ed52b29568290fbfd390", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:45:14.88Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d07a48ebf171ee4cecb99db24436deb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:50:14.431Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7557fa0286020e78225164d78135a3fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T04:55:14.382Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf2ef5141b1705268eefe75a8cca610b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:00:14.212Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab7b9d5feb8a21968deab99791c1c75e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:05:14.441Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b310b01ab6233b94a47989093b1fdd07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:10:14.402Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1800204b5879e833dde7dea0dbed4314", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:15:14.127Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a8ec0f8cadf9dd8e44d83d6609955d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:20:14.462Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f4c7be9376900d1a21daa92ee0cd078", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:25:14.096Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e2621f59eb1a1453ab1f830ebffb855", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:30:13.649Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f8a9ec3bef2737e996f6230b483108a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:35:14.631Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "311ae1e19602e2d2219f01d3637929be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:40:14.422Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37a772c1c4f041f7f38096994a4c5d24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:45:14.444Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b910e678a748463d0e05d8a9e9886b34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:50:14.573Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2caba2b6ef52985d9b3b9be9927a24e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T05:55:14.251Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b0ca23c201ba7f37beca4f48f48fb56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:00:14.725Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08cbb11fd3ecb11077b96b6def1480b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:05:14.599Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc5d14ce2b8f969548f5e60a23fc3311", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:05:14.599Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ac97ccb632615f539e0bd1fcef45924", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:10:14.721Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05c60608192f7c26ba5abb8ce7bc1165", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:15:14.532Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a46b12840f421ad51e9c81fc64d8309c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:20:14.593Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8a4afff93d0729c1dbb5d0b12ecb8305", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:25:13.865Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f9f8e75ce8c548814b818025e920bd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:30:13.813Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "441bfb206449f023584b7ad5864f55c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:35:14.661Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94f1ce668b07134450909d134dd06e0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:40:14.492Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9cd2d42373a3face697f78a2f9757ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:45:15.59Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd057f582ae92a9d623a66295d87aac8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:50:14.576Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43a30911a98d1dd19c73e297c1ecc112", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T06:55:14.267Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07f96a10b26ba0ac22f20c5348a575fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:00:14.416Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0588dc39989676a8a382d60a714a3497", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:05:14.446Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cb03e5588f268e06d36d99b7f2a1db1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:10:14.796Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b093f56baa3536c8c9e6fe0f48ca9882", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:15:14.516Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46f124fcad51032d899a638bb8124ab2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:20:14.106Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bb6964322da553d8aabf58485e8ace3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:25:14.788Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06d0cdd3dcac10387e06f823efcf794e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:30:14.587Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9359358cd7441012e4b314eb6ca33b44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:35:14.667Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4960a125a29d2c5e055ed93a8c36db1a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:40:14.628Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b86af7529a4c347a9e7a6f0f5b78d7d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:45:14.768Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8281d6cd86ecea19df8877aebd813fe5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:50:14.698Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7298d3410ca9686b113d1779d6664081", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:50:14.698Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eac4974e648e084d248be7be72a5c01c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T07:55:14.55Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04b18154893b980d7d11349162e8cb04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:00:15.022Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2be01ab045a012fa0865eb75a59a5c19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:05:17.119Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee412840dda85f1ad9e06ec789101b75", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:10:15.05Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aff890f91ed83b400fa0be108dff140f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:15:14.611Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50e0429042f939a782054c30f67bf622", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:20:14.331Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "844c912948c428e714c7189d8675b600", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:25:14.17Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dfe78d9534900486cf5aa50c1eab956", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:30:15.059Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9b4eeda2ef41f056361dffb631997ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:35:14.184Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f852a890bbc2c75f323a6c958c9c1bdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:40:14.465Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6565627b4fedb37b9ccf7c9d25f9ff0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:45:17.776Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d48e808637856cf5eb959871e9d2694f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:50:14.483Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "545767dcd41216dda7f40446d3a19e88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T08:55:15.012Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1763cb01d463871ce1b31467e04d3761", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:00:14.364Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d14e8f388e9f72b3fc4fef4cfba84e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:05:14.723Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b15e3dc17c8ffa446d64dd4c4a92839", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:10:14.836Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6d5118f3403f200067310f3269bd138", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:15:15.067Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf43802e6ad654461cb8092ba7e688be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:20:14.591Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "131aa55bcf60aa2287741149cbd94bcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:25:14.723Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "556e644122ee38e337828968144da7ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:30:15.155Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af7b64e93aa0b6c14dfac90a54e4549e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:35:14.874Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "590ba93bebb108e111808fb8fa22aa6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:40:15.194Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7646fe7e3debaa71c8bf9ffdc7ce1303", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:45:14.897Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e80b39af793ccbfc59633580e3c967d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:50:14.894Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30bd9b638cbca508d77e1ef11b73e22a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:50:14.894Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ad7c0f954b1cd0129e65804b0f59a2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T09:55:15.093Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c0c41052fa081881836d60647047b77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:00:14.745Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65a89cb1e7dfc7af4b28538b7910534b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:05:14.434Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b26ed8ea9e720b66dd83ddc4e229c09e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:10:14.857Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "688c249bc3662675bb0a4db1860a0d40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:15:15.367Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77a55c79f09410fabf4a1051d8ad661e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:20:14.591Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89c1ac53c0faec7f02f24bdcf7986398", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:25:15.093Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f10e62b63fe37e21af0a8b99285ed19f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:30:15.106Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73aa32a5d7acfd9ea415418917683624", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:35:14.752Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5edbfb17a2ede5cf792126e8e11b807", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:40:15.076Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f65cce3730c69e4a98d3dc749832fd0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:45:14.704Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a074bebf9e575ed308074021068b7214", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:50:16.461Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ec487e9a70c290fb9f1f050ccda5860", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T10:55:15.443Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e10cd4266c4d3ccaf1863cbd5eeafa97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:00:15.477Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc84e1528c3767a2559a5c2ebc5981f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:05:15.274Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f482bf37bdb058e18c593fe59dfe3c50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:10:14.948Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9da12a6bf2ff5dfa1896764a1685e794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:15:15.097Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f06ed3801235e0b525f4648d3c48f9ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:20:15.642Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a94d1bc30725a2016b0c0368b9d4bcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:25:15.263Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63ba0112359d22fbaeee42f93d10240f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:30:15.112Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9896ee266ce62871c72045b7dac6f13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:35:14.705Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afd387c37b497ec1f4fa18f64997ec33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:40:15.429Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25bdc5c42e672c5b9ddd7d2232694811", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:45:15.328Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b23d0770865e174d3490bc996880548", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:50:15.191Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12521630e3b2da3e0cb0bc99b78e8ffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:50:15.191Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf124f42759b1b21d7c993b6bab0f1c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T11:55:15.181Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eaaf292e51c8702a5065b53c12de83e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:00:15.824Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6958df84e9a8374153be82a9d3af5b02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:05:14.928Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d36af22bdc09c8600bce2254e47f9550", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:10:15.38Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9752d889c7d17582d627495539a8178", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:15:15.545Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b57b58eef105a4a4202834227a9b317", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:20:14.976Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c921bfe908fb407851080a4ab7aed5bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:25:15.467Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23b4e467265b17f3d7c9420a75bcb4ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:30:14.825Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d90b52272fa5516d3743fc9b0cb84b5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:35:15.768Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0e7c1216d4fe63b6c227fbd6a690ef0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:40:15.367Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e322f3390c7587a0bcdc8b6af96613d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:45:14.992Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56fa068714abcc86eacf352171d904f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:50:16.004Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09425bde3e0095144d10bc02b8ebdf47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T12:55:15.845Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8767371cf5860b253b557f9666b8e775", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:00:15.862Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d66bd854d34cd4b31455b43eec2a42fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:05:15.235Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c93f9fde4c8e5282c011d7b10564fa4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:10:15.016Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76d92708bdd3a39c20dc7939adfbe081", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:15:15.006Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e74a40203eb6619b4273a7daffb157be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:20:15.289Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3573eb007ec92a77c225866dac4c8d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:25:15.866Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7899c5d18033c5d65d726c6171fb4d88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:30:15.447Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80dedf72bf13813039902dd1e2c516e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:35:15.665Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33d8869fb905a9213133a3b939f5fa98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:40:15.676Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1e4bdeb2c737ec27ba4001b4116e753", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:45:15.905Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "009c2cc41ae937263fe5eb9f128a0238", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:50:15.909Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0ad163990d2db6e304e1f59fb97697d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T13:55:15.741Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22ba8f8e23e1bb85c0b9e1fad1fa6d3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:00:15.832Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9911da94a5d6d14a070354a28f9c92d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:00:15.832Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2619d9b766f38b338cdabb887dbf0795", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:05:15.94Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b43a58030c473600d98984213fdae83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:10:15.351Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aaf5b6a50a50d46bbbce2057e8f03d08", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:15:15.633Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd6bf614ea3583b869398b2540f4cc0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:20:15.513Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73bfd345ae3ea19c4756f4b5ae83f923", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:25:15.806Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca765d1a5f3bcfc91bd25ebcddb40bce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:30:15.3Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de7cffbde23b7b7af4413974279e27ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:35:15.481Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88d7a103e6cc91bcac5bc32d4256446f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:40:15.962Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7268334bcdb925aa591f430ace30344b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:45:16.005Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a9a90375e6654499526eaf8000d704a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:50:17.213Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc56bb6f1f7fbd58e2bd42cb8e4103dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T14:55:15.704Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b246b0f748f70c9c5349a1b3efbbf1ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:00:15.886Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7fd0ead8fad34181c3102b37d8817659", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:05:15.311Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa2040a4551ad2ec2d0453b73815a830", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:10:15.579Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "505e79f56934592c29829a2e91e94f76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:15:15.913Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b680147f949fa1fd30c93d89ae9e8988", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:20:15.961Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e1e871f69aef149155633e2a778b771", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:25:15.471Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c202e36bf5f95bd22e0a24f510eac509", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:30:15.937Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1123967142bdb5982550af1fcd0b311f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:35:16.327Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89295b47b3778c8cf1c42d605eba3359", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:40:15.364Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd1b562c235242deb782b4767fdf7304", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:45:15.966Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "344ddab303442116cc64d1393055cb29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:50:15.759Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9ee05568f09b677f07a8a7e357e276f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:50:15.759Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb400c47945b1293d6f233721a80d24b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T15:55:16.124Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd45f5d371e444ed4d2e60f6464b6d8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:00:16.319Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04a254abf80089c27f73759f11f2fd03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:05:15.816Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65b8391d82e3b86aa3ebd04eef3de8fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:10:16.145Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "868434ac2b35c0107ac9d48eebf6eb2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:15:16.27Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00d1c983040f60dee9d514247cf23e92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:20:16.003Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f364ad8ac6c55bc3cd6cf918550423c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:25:16.262Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0eccc1fc3cf837bb7e895284f6336ebe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:30:16.239Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c953ddc8ed2ef98ace5d8cb2f84aa92b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:35:15.705Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4cf74102d8df58107f3b328b23339e11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:40:15.822Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47a42dc371379a50a339f6dce4d67dd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:45:16.131Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a1125ec559935471e1d74639d319f16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:50:17.298Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "328374cd3e8196e48b4db50511a9645b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T16:55:15.688Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5f9d361c6a45e4768f737c42ea18a8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:00:16.359Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c2ac200d4d033a43276bae15e572d2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:05:16.236Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e35cad4236694174d16080a61f2415ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:10:16.261Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "604ce85bef7d823959be0253532b23b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:15:17.047Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b5487c1bd1c90dee302fdbda7cabf3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:20:17.047Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba664216aee5960d4676a1579e16c285", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:25:16.482Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bfaf3bedfd46702d75ecb11ea82ffcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:30:16.593Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c3dbeb9170909b4aa7a2425e4096272", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:35:16.432Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31614fa04651ac1927c1e552d484de0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:40:16.624Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e27d9af85b17ed76e6fc524a5f4e060d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:45:15.877Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45aeb763ee1e82b2a33a67055866105f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:50:16.47Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c33cb58da46a2f2f532d311df770fd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T17:55:16.737Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e54af55105557e28af41eaa2f9d61ec6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:00:16.267Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bdb62464ab0b58032e84fc562bc9bd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:00:16.267Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdb15ae17c4370f2440efbad33e16708", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:05:16.532Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6eade5f452a951d946c447a918d6bf3b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:10:16.614Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81228dd7b1d586f02350ce997f6860ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:15:16.79Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2caf659242aec5275617b1a26b62b05e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:20:16.526Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67a3742c6df9ea3cb3fab2f7b78a2abd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:25:16.668Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc36e85bc29c4337ac4ec0c596a4e027", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:30:15.934Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "050cb59d51207637398975bb58465a45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:35:16.548Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af758875c0214c3b8cd28967135a66aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:40:16.559Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2408e106d7e7bd1ef428e6c73f441dc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:45:16.671Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12581d1bcb4083d8b57f7dc865e0f4ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:50:16.791Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c23defb78eda9146ba8b870514804740", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T18:55:18.13Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de462a375ef8ea298ddcfebe6688f573", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:00:16.17Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5834ad85e4ed5cf725a6c3be4ed214c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:05:16.544Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11c7420f9b729511bb90ed8019746167", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:10:16.27Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69b83fb85ab21325025bd0dc29aed37a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:15:15.978Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c69467b894dba3a92c48516d1b3069c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:20:15.979Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b59a885ed4600e3841376decda3fc0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:25:16.878Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bbbcf020d41f6051388119373dc3280", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:30:16.42Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5e1be0e67ddaa853046eb327708f2f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:35:16.836Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a55c9121a9c324e339255532c4121ade", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:40:16.51Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d16708d726c22c2b6c8a3b1e8a910e03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:45:16.726Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f75427b77ba238b362ddb76c79ae2fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:50:17.098Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b19a061a02622f102b7e85e8c82b528", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T19:55:16.893Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e97dd0124daef42e1ab891698f08763", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:00:17.009Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52d83937d5d487e81d8512093caa154b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:05:16.628Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed01ffed00f6672f0f60d624ca49961a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:10:16.723Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e91ada8756fbd520310d12189783cbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:15:16.791Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "433f3eaa1ff29045e2ad670bd449c855", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:15:16.791Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a78dafcbcded7efd61d1be5558a81784", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:20:16.343Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "098b4fbce6db9400845d248373205ff0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:25:16.823Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7226d4e01ae55f666ce812dad4c72bd4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:30:16.532Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c069c3c0c32f844df3b110fc15b510f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:35:16.455Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98cf379f663cdd403af8a3491ffd8e70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:40:16.655Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f84d9988a05416f6a4c6cfaeb4619d76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:45:16.639Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0428f9a849a60c3df1e80f3ca4b84d00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:50:16.598Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "179faebdf01f01caf756cc0cc652f037", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T20:55:17.053Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dafd10213539cf2d106979043582e320", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:00:20.291Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d94e14c33bd1541fe65741486d4f4a6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:05:16.531Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cac338f5f839ffcf016bab91bb1b18f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:10:16.848Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91299abe86e08c82143f9ae7cda237a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:15:17.357Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be8fa4b23e62e8fb756dbf8239f59abb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:20:16.532Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2ebb86556c7d3bcbd41f2e0ee93e845", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:25:17.048Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a06d0cd2dffc15d3a0847a7317189dfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:30:17.08Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a6870ef709bf5fe0694a8baed425abf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:35:17.304Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fbabafb0365fcbe84b4ef2506cc6067", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:40:16.668Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2efe5afffdff1adbc87ef4cecf1d5932", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:45:17.241Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52180d8615c188e5657f8cbaa95fc176", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:50:17.161Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d6162b8f97e070d71982c7a408ad43e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T21:55:17.26Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85be602e3f8fa2951cf2e12acde9d6d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:00:17.013Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8954acda2daaa475e1b5b7eae1d75438", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:05:17.245Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ca92263ab1e629ab2251549ceff45c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:10:17.284Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de6f14db5288daac94bd5d1258037b22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:15:17.055Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f309d9a97f25405b8219630a031ac41a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:15:17.055Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd2a5fce34032de50b5372b11f1f13de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:20:16.963Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a44a9b773adecde9e88f2bdb7ff7fa3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:25:16.877Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03d16115969f6d47968c638c30d7049b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:30:17.559Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5a8ec46097d3037465f0bce7b90643a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:35:16.917Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4813aafdb0f9dacf50aec143bc69a40b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:40:17.059Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb64101e0b8a6bc5cca305e9a362fdbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:45:16.77Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5db25f1dc04ffa0a1b9827ff52dd30d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:50:17.193Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61a6dfbb0d3af009b963567bf7ce6250", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T22:55:16.855Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2786b037f5a0c91301725c695acf792", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:00:18.575Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7e798198b9d43bcc2514ba969350e02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:05:17.422Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a84f8b87b014c6d12cef20869719e8b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:10:17.178Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd746fccfc4581b5a33c43955d682b22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:15:16.636Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b86718710630498ec881f7591bf7806", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:20:17.536Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c9fdffe5d29266c9a46bf759f295dda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:25:17.386Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b439791529731dba47baeffa86db0f2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:30:16.729Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "898c88c9d224af3e25bd9ebff0be2cdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:35:17.155Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7efbac308ef487a2ca9a5db4438e739", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:40:17.432Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "393ee3335cc68d9154dd22829dffc930", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:45:17.487Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba6ee350db2a4fe3341ed0690ca7d5da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:50:18.867Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74421ac4a9611a6805099f14d0c452fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-05T23:55:17.407Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd31adb2bd7c0c61e341bdda583fd5ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:00:18.959Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "960db81c6d69b102d6b6e9712ee34a0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:05:17.686Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cae09b6aefeb6b1bff649208ddb2cfbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:05:17.686Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d418a4ad73e343855e7d32196ce0133", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:10:17.563Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7d3491b5f4f96ab0972d3b402501149", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:15:17.07Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf7aa279fa1c697feeca4999fa5e82c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:20:17.148Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "632f05d8f9ef33f7ec4010e1bb88ed6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:25:17.51Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56379df74f1da929cad928b73aeffa38", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:30:17.923Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8746eef86ea19d4d6bfbb17409b13929", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:35:17.248Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a5d72ce0735fafa0aea0d2d5a1b58d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:40:16.887Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "726ba283d2f893aa255c65dbc1d16bcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:45:17.422Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2a4a3f37088e868bcce3aa1394eaf78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:50:16.983Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2ea700bc2355962fb9f6c2561887433", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T00:55:17.711Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d80b774c0266374c3029845ef517109", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:00:17.481Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49d9d892a12aa0a7990c91484e92c1d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:05:18.953Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9770282ceefd19e74762f5510c42cf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:10:17.486Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6942fdbd7ea8e581a5520dc65805e726", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:15:17.219Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b962befee63c263dbae13d4d3678fba7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:20:17.711Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "556a128a157d84b8b24e5c888fbde777", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:25:17.482Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5eaeca8eb6d5a3ff727542830fb099b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:30:17.349Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59b0d7fac7ff0542d2d867aa5c67b324", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:35:17.552Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "218ca7d6cfe2c74657ba23ac6c2c220f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:40:17.861Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86399ddd407106d60c3a43d605b5a081", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:45:17.801Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a46a19c82959e2229c3ccd068603f4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:50:17.616Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b8bb5df3ca2a8c44480654dd0180cbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:55:17.736Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59960f616f295ae815143807c1284ef5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T01:55:17.736Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a74b5d5ec3491205d8e9711554d4507", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:00:17.44Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c1dd798f0fd6b63fe8965503ae37e2c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:05:18.013Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "178aec945ddb059979609587ba3e39f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:10:17.467Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edf5f1072cc390b40dc0eccc264bb42c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:15:17.68Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b13ddd2b1737b671263441b86997a704", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:20:17.832Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57180cdb46076402a0c1240baa68ac92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:25:17.912Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f2103b21a0720fd73476101f0a99955", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:30:18.04Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b2956314d9cd2f59b2ce0fe2d43523c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:35:17.92Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91dce8ac015eed8922632a6ddfe85604", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:40:17.504Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1dfc4712b228870a87704870a1fe8294", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:45:17.774Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79ad18ebbe97dc12dfac72ba6122c41f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:50:17.361Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "087bc82757dab5c074d0af76ef3e5d32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T02:55:17.623Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64dd60f2850153f3f55892c67413ca3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:00:18.313Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "944fa2c5e67ea527b13447ad515121dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:05:17.925Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46e74f605a7eafffc69f63a4c9d5bc46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:10:19.616Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "457fe3e56c1df3dfe0b34918b7e2c3b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:15:18.306Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b4075a7583fbe403e93aaeec3771665", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:20:17.368Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46255b3ca53a8db6c2516122b30ce931", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:25:18.196Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "177d719c322c3e33d3a9ac1fa9038d07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:30:17.523Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77c88704df1d855295178aa6e3f49209", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:35:17.693Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11d1780c506ece58f0a564a0abe1f39b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:40:18.108Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc0c7703ee50a8bc16616252685296a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:45:18.255Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fac723139c06ca1278e9fcaceeab499", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:50:17.696Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f82950bb88962fd9c34906809cfd451d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T03:55:17.739Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "124162e59ed33f47a675624a70074753", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:00:17.827Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea0f3312b26c02576a54a7bd59d64262", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:05:18.451Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "664ea8e7750a4ba9bdbffababfe03986", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:05:18.451Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e1182fe9f7cf2a118aec2f43643bc267", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:10:17.542Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6330b207c1436418b9916b3bbd310fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:15:18.355Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d042ccd348ee279946c2bfaa3fdcc134", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:20:18.236Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aedafed5aed94a114c303e4645df3a79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:25:18.07Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e18a0a6d2d9d4f03d898c2723cd22af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:30:17.619Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d877ed73ba032e82b74b0a08892d0db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:35:18.376Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f072f3d223004ff5e8a3dd8be42dd09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:40:18.523Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "378f28fc83b511b3951aaa1d514a8830", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:45:17.622Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ea5690e0444c10cd53db5cde06b9cf8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:50:17.637Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8178a1220cd2185c3820fd13372ace8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T04:55:18.224Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0989dc7c625e2a159df86607ed7be4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:00:17.696Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3368bbca148f68d93c6a5fb62277196", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:05:18.364Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf0f52a0672f7fca5b67c3dcb26ac422", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:10:18.424Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e39f04583514fb3182b871266edf22a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:15:19.712Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9324653741a4199bda02e815d7088db1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:20:18.293Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d11752df8c5292a5f1255716f14b1b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:25:18.31Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb9ced9d76b26fab5d619ae1d832e427", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:30:18.3Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf6124490cdea6401be99d0f76466f46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:35:17.915Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7a23d81e70fb16ce6ab6c5f8463fe4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:40:17.821Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e76b378bac175726cb7c8361d920f47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:45:18.454Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d52e6f917561781bddd64fed84618372", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:50:18.09Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "714101aee480052e3234cf29ef01c3e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T05:55:18.25Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7004386b51b02722987684e71ea52cac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:00:18.638Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "559d77e4a09afab67a301c74635476d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:05:18.511Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cb7b59659d86fcd7e12f2603f5cb531", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:05:18.511Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09cfc55a269aa6b9a08e6f455507b4d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:10:17.838Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "08a8f8dd5b398d13cf19b6c138a2972b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:15:17.855Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ead07ba38016f6347976cbd2d32db794", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:20:18.127Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "929681be8f039f159a76ce23dcf3541a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:25:18.511Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8180109a4304d3efecc969139ea3fe4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:30:18.643Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c49f9222f0b9e671e8b9fff5b3373458", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:35:18.027Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5b0b6bbcb74c5eb6bc704355dd37a8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:40:18.477Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cc60197d44cfecaeddab6992209e1d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:45:18.703Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90e009174f88788adc9b423237eeed7b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:50:17.996Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bc6609e3cc63b7a1230467fa395bc23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T06:55:18.565Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a41cf0672bf0f0439e9dd830182ea197", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:00:18.45Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c93bdab95e1f183baa3349ee3f5691ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:05:18.574Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2d32b7e274404d436dec4aee60c88b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:10:18.497Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6605e24451f4525e3ea0da2566591fa5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:15:20.036Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38d82bb020d44a7b4018460cb4d51060", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:20:18.022Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7bd8fad4818dcb60a4177171e82a726", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:25:18.644Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da58cd6f41cb979e80072b7625a1570f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:30:18.962Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "635b751772375dcb1ea90a36a56f365d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:35:18.161Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad1a709101dc2f29c49661766725a937", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:40:18.748Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "854a095a77644c9c919fc4e112f719ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:45:18.656Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40834b0703c2eadaaa5226950d7be9f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:50:18.21Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "672236cb7e88ed0c4d09a9104f9b0c31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T07:55:18.844Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71c40d60d805833d4a2dfde38c586432", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:00:18.637Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8eb26b46f10d9ebd97fbd641fff4c5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:05:18.718Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dae585caaf618a84069f155c44b04f46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:10:18.905Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9058c492d60b36427c0a7ae218732d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:15:18.955Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5b0e4441c229b7fae66bdc686046ef1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:20:18.918Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c62ff36bf722df2dc54c07c642598531", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:25:18.41Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92b2360e9a31cca4474135bba9ce9c9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:30:18.808Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72639d5beb16add5c2bd0096201555b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:35:18.75Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "322571e1a28323e29b8db26129c0201e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:40:18.916Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f6bdc28c484e92442db6eb64ce3373f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:45:18.807Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c9fba8c58fd043c9072f807b85fc158", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:50:19.177Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "054562d7ad855fa7dce45dadfd69138d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T08:55:18.818Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c4a1122d716b72780732ef086b73071", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:00:18.296Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a5da160ef56bdae30672e24a1d3bc9d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:05:18.89Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c5775c29bb7c0a5e89cd5df7358335e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:10:19.232Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffc8e0ed43f74ae9b016f39c75a34ba7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:15:18.602Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7dbba0da99c06be7fb394f09d450f680", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:20:21.353Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dd87a99cf1d9e34fe6e29b678b1bcee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:25:18.885Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24c237ce60a4853a083587c7d02ce4d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:30:19.31Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "152b42f6bd799433686a63945e4e8a04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:35:19.336Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25377412789318169ad98b5795f55d0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:40:19.04Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bedb101e5d414fa1ebd7585fc14b2367", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:45:18.742Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95a5f67c5c5b1ee65a77125d5571c0e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:50:18.498Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2b6f08f167073c8666d64f1dad64cbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T09:55:18.597Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46407f1762fb94dab2a300ff673929b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:00:18.856Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1302b6a38f33901ee7ec3e2c4278d318", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:05:18.52Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9bfc27401e243a0a41bb55efa67b568", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:10:19.314Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ce404854c1abfc9f8ad600455f82578", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:15:19.288Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce4d0f33c2e3583344dbb2f0dd8cafa2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:15:19.288Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d26efb7ec4ac6f6d0a6f6120c3ccd1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:20:19.449Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de1a12be2403a40cbcb0d81f65eedbd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:25:18.546Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a15e678071d5752c2de8753bd250536", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:30:19.214Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d203a7ad0de085afef0283e88cafafa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:35:19.244Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2d7331923fb5dd5c069aafa5b7c2376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:40:19.331Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "365611ac44fc3e4a6381601daa462c66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:45:19.561Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbfbd2c8488b92a45a75fdfb33d24dc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:50:19.047Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40d2115df2931745c0dffc5b7cb1261d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T10:55:18.957Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0025f675b5bfcfd10b178cbd4a198252", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:00:19.576Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ef166ba1677af21813e497a9bb1be43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:05:19.397Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84c3a389e5e1c9f26114018d2b678503", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:10:19.43Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a795a5bab4a84bfabc84a96b62ef73d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:15:19.38Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f88c6c1314050c15db287eafe3a9efc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:20:18.927Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45e20fdbf9ce5b095018764f372c3c21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:25:20.83Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e28dd6e8c833181924c61a9dfe8c0581", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:30:18.761Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b0aedbaac85cbaed0f0e58d4ca82a770", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:35:18.889Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a6c850e3bf1c770e5fc4c81f7366705", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:40:19.016Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "096e7a629ead3b423ed60b95cf2b3efc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:45:18.992Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bd28dfcfabebd20d6ccd1271c5973af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:50:19.351Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "475c62724111686c55b511c0c3401495", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T11:55:19.043Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4db8cce196aabff0e47b430bb1a0ef9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:00:19.257Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5716bc29b7c36d76bb6660cb0279074e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:00:19.257Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "868716bf378b798f6e4271f81deb29ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:05:19.249Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35d334a49a8602918cd92afb181564fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:10:19.267Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7896ff8032c812e15ecf4cadcd0ccea2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:15:19.057Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18ee39a0707ce7beaad4cbff91cfb857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:20:19.636Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "992c95b4af1247db50e92fd071e015e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:25:19.668Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebcae8e1c64c66120bd2df9a3e86c69c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:30:19.675Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb1ef026a868aab30ee4f4de1862a813", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:35:19.186Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4acf1c13339d78721ba26a239cba37ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:40:19.823Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13c130e69fbacdc76acd0f6588c61ddc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:45:19.478Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96de1fbd70934bbfcdd9b83ff0b1c74f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:50:19.635Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "381829a35b1163b2c288e6cd2aba5412", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T12:55:19.625Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be3113315c36ff09d62c5df1a3af78a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:00:19.049Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "291150d2f0b1d4f7d748484b2c14c36c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:05:19.042Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adba33524cbba07b4d2ec857bcb4ae14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:10:19.287Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "717cbf2b905e5da33a92f612bc32a8e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:15:19.89Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04a0734da01bf33c2048dab65bfeaef0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:20:19.701Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33739f1124912778931222b9ced6068d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:25:20.981Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3375859f8bbd0c48c89759445ff0b4fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:30:19.799Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "068360df298201932be0531b2a361df9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:35:19.216Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c629b8c03f6f3135acbcdd7644a40748", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:40:19.955Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "332debebc44e3fc8247c45c498ca920b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:45:20.029Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "589ad28490f77ea191be29d4eff06ee5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:50:19.661Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45a1e6daee0645f735480fc7740ac65b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T13:55:19.104Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27c466c828ac45bc22f5e144aec36592", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:00:19.466Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8818919b746e20d96f4c3801479cfc28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:05:20.099Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae535b15343d92284bc378f2bfb9c89c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:10:19.157Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d0fedb5bef7ab594b1dd43e86140714", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:15:19.797Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bcbff4fff93ebee2418fac98ceb66749", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:20:19.2Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "698f46086ecd9ea5d5508cc6eb79cf16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:25:19.793Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8486469f989b75fab2fa5e04c0a78a85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:30:19.285Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2dabaad3f22804680702ed9fa3c61ec1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:35:20.021Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e0002ab7ec487b5f7903f7b9f9a4bdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:40:20.052Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d7eb195b0720e19cfc16a719061ed10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:45:19.987Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33aeb95644b534d2045c7e192ff2f048", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:50:19.335Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b83a3ae0d4d8b68a1969a3295771f485", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T14:55:19.403Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e057c03e0f9243c440b245f4abb5cf59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:00:19.997Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bbfcbd5a80dba1d2bca8d2f000a4fc24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:05:19.516Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ef8d569d04f2853b8b27f532ed53321", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:10:20.191Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fac6a897e237548c747399d87db778fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:15:19.6Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1675dbeeeac96d0a079be281cdec6b07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:20:19.39Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "486a030b2676b2d77e57ae571e969f5c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:25:22.277Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbc964c27d3e34b03b57ce8c1ef0a946", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:30:19.436Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc11a93a77285221e9268e9c05fbc2ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:35:19.633Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e8b604366f00e8ce449bef273a7b670", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:40:19.517Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb9c4488e4ff2e5477fa8c5246ccaca0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:45:19.528Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00491b9f0654a3bca469260bd30ec2a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:50:20.006Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7418a8375abe94f8115ab084be6b9c7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T15:55:19.952Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6af3ecd7f3dfb7a4d7ac39518c039ad2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:00:19.46Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed6c4e233e50e8687b51f5175e54c53e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:05:20.01Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e74022e0cd198f6a530ac28f63889b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:10:20.419Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e6167d15d4923328ff0cc5cab5b5630", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:15:19.934Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37d40a247579f77eceddd0d7ea0210f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:15:19.934Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f51a921b734f23685d90e2b4bd2cdbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:20:19.899Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f918b7779cd141d58580a6a2443ef85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:25:20.379Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed6977e8d69c42989f750b4be63efc88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:30:19.612Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5d56d80cb3e711e373df093a4fc72c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:35:20.37Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9d0cc5f93939dcfeee41d2a6d40da3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:40:20.267Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e644fe2f365a858b49950e7a0a8a40e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:45:20.272Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c23445793585c098d781bf864869aa37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:50:19.67Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "237b21f438eaa876e0ed28f5f2af8889", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T16:55:20.501Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6e78c1ddd4e73019754630e8712c554", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:00:19.659Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc997b1c5689711d7e4b5e77593b714c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:05:20.415Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6def508dc0c244f01e1ed1c358719b55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:10:20.036Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cea9dec6ae6214f4d5a09f3dbe002e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:15:20.188Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17324413eea83f77fd2c443f3e23f151", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:20:19.777Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "555442052b1532d34793bfbaee3de84c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:25:21.097Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44b773324e79f336509e24c2c18b295c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:30:20.246Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d8a039be562278e6173a9e6461163aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:35:20.684Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2673a223a31f5170319bf1403b824d28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:40:20.466Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c8222f1375aa8047923159aa83d9e03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:45:20.466Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bca05947ae9111984a9a132476ca961", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:50:20.095Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4e3466bd3f7a63ffd8df93949580145", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T17:55:20.614Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd6d646b4f803399f06b42f56baada62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:00:20.379Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f259da3e437acc610ba0d2feb4e5397", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:05:19.945Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f83d37d48e28d8e1d7e464f0b8adfb3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:05:19.945Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92916e5fbec30779269f3ecbb44f713c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:10:19.884Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "caa8a3b6ffba775b97b60afed9cfaf59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:15:20.155Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd788c4916f0f7c0cf4d6ee62bd32cbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:20:19.895Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13c37ea12c516d5e59c22da45b2ec4bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:25:20.037Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "afb6d93476fe123b0fb714a2720cb292", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:30:20.324Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2ad4254020cc04397e0fe9adfa7be22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:35:20.187Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "596b47687865f578b4f16ca039c6b30d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:40:20.104Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce1ef1f83b47e06140fa8c2878dfd4b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:45:20.507Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb2b715ff0d692d84615f39b4e01cdc5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:50:20.777Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d45418775f111472dbb278dc9e86ded4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T18:55:20.215Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f32fc773a294ff6d8e6f07b18ce2bfa2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:00:20.187Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4639ae9ad389eb7b2d890b980bed8cc2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:05:19.988Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0234c6dc1557be85814905850156eae5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:10:20.757Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "818e437e3d950fef549bf0688a477aa7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:15:20.825Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62a6bfde8a5b4461cd34e91de8fe1a58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:20:20.382Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efd0a5c290a1e8a3902d3766ef4a4dc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:25:22.194Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be1f917b192a8aabfe5d2edb8642c031", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:30:20.047Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "225ce595e6713a28b3c19d8212327208", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:35:20.799Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28e8501e855467ae9a0cb1645de38317", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:40:20.296Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e5aa891f28ba4f9a9a771ba172f918f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:45:20.852Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41778cbd6b9038cb07de4c94ca07abfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:50:20.22Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a98d10a38bd794f6b4662aa74772ebc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T19:55:20.739Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97319e4efe4bed8c2f856fdf8fbc8dfb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:00:20.322Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1785b6ab0e3c19b0469225df9b0e62eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:00:20.322Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10831698270b54f79ac025133e464a70", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:05:20.621Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3064040e2b0a109879cd77e09daeb45f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:10:20.376Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85a0edaa63764341d07459a873deca00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:15:20.438Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e8e08b778e4859e1976dd2bc7bb417d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:20:20.669Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45a2fd3691b279021c6946b7f3d439ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:25:20.385Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "931bf07cd2451a683b8b0e1183763338", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:30:20.62Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8edff1716abc2a99d9e4b498c3aef713", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:35:21.085Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ca09d0e7c2a933c65f99f51c8cd504b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:40:20.821Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ceb6a16744db4a9a28881dea4112414", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:45:20.93Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df987e3045dde17bd83af2c85a4efd3a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:50:21.158Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e067aaf98594bb4f7474ce68d883b10a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T20:55:20.696Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e0efee28749549a0684786379b70947", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:00:20.647Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f49d996c1391e718598440d96eb6ce59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:05:20.343Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "700a7f7653ed1432d4bc2fbcb9f767c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:10:21.058Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5983fae4e2a5c6d0f864ca44f499da12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:15:20.917Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67c071458dbc4c98bc796b65df63c4dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:20:21.312Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1346a4adee6f39427a2cc8cfaf6c9de2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:25:21.89Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03272e565901d3a82f7176f4a390f02a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:30:20.4Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c511d2b4a8dcb018f6b2084f7edee78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:35:20.642Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09e5a7dbe970440d0cd8dc2039337310", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:40:21.108Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "546af7df1ee9e378b3c8cd00d647a2dc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:45:20.916Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb730aa306bcfcbb7f8df31d354b35bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:50:21.187Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70bec329888dfb0a6b6b0bba075e84c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T21:55:21.547Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17dc87c02cb3486e71359b8c40f5c1e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:00:21.341Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28e0e98a9f3d124923e71bee987d1860", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:00:21.341Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12158bbdc33b2ec587f1e9ac9b92ce34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:05:20.797Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b090502f235a509d7363ec607543c3da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:10:21.24Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a26987732c89ba57e823416f0714fb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:15:20.55Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "075df8f04697e9c97c8724475861293e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:20:20.503Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7f98bea80415737e81cd850c4fcdf99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:25:21.354Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "487b05df2b2a0ea658f85928351aa97f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:30:21.077Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c28c5eb314eef7f3bcab1e6aac1eebe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:35:20.585Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ccb03f80ae80087a872863dc0225f7e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:40:20.807Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a4095b09b6eac4032ad2d253adfe166", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:45:21.201Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fa7e0388cb306f19b1e6f8b6e0956c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:50:21.164Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3681a63ccbfd07a1450bef1ed93c0ff6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T22:55:21.105Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e51df8f819139826fade345133069a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:00:21.182Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf27baf1439cf85e864c5cf6e310a0d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:05:21.38Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e565e654eefca73d48c89e6fbbc915e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:10:21.155Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b0776c771f3e3ab03860b98a8e7f5af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:15:21.201Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3b3943cb1bd07ab7a9a8f7d5a157d56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:20:21.571Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b9391854d08f97f886536ce132f5bef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:25:22.838Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a505caa9c425bd98ed91336a85ba697f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:30:22.838Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e76175033eff6cc5660e0425ea28face", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:35:21.445Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2c48e5b0602ad7c2bb91d4a2083d633", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:40:21.231Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9b0b93fba0c46f211d673e7a317ec46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:45:21.433Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41eb9afde37cebd7b1e12395fdb50934", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:50:21.131Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99a43cf1f90e6ea81aa04cbfccf8581c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:50:21.131Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25d0333b75bc1398b20bbab736b8e169", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-06T23:55:21.729Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "461d7c7830f3f7219395c72f4eb146b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:00:21.022Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dad0dd0a9f3a123514520577ed65e0f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:05:21.47Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e848176d4957af5a639c2d1e98ff8c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:10:21.206Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5db14210b03b4dfe624643e6e25b6ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:15:21.565Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3aa0e4f77eec8551126570de44cb3e47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:20:20.949Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b6e2055c6d82ef5a310ec656f1a1ce1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:25:21.147Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebc7439f6a13c17c7484e8f0deeee63c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:30:21.364Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4be119f8018244dca1fc3b1010b211d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:35:21.438Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd2e50b062a911276e597b1675bfbbbd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:40:21.715Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9ddbc307b1d8f7bf2c82692e2bb138b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:45:21.243Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27721cddeb1087c78517053c6a513cf5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:50:21.662Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40357f654a53b3049457e6c1e7d32348", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T00:55:21.169Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "075d7424c7a6885000aa8e5d9187ed92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:00:21.686Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e8b313744794a9a8e55523d2ebb4213", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:05:21.199Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c0aef278c6d09190587439ecdb867bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:10:21.128Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7d5fef5850616d566cf2269a75e81a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:15:21.587Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dbb154aa7ff2a5ac6cf00cf6cb3f8c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:20:21.544Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be0e30643771c7361bfd6946fc2b76c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:25:21.51Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c74ad39ad4580e84758f1c63529f3279", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:30:23.095Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02fe290be8f54d1d3496807956005c61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:35:21.233Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45f292342b817cca5ab0f469688842ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:40:21.186Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3f304194e07dc8437b7f469606ed3b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:40:21.186Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd65641e1041f53a546c6273e91b43c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:45:21.246Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc6edc78a39fc2e9d558fd28cd50a385", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:50:21.861Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2101082a239f43e3e5f294b66fc7852b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T01:55:21.788Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bffef9995c57b27fadb01b797a12f4de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:00:21.355Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc89d20f3e46b07fa2592c0781b4b71c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:05:21.124Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fecf2537cd156b233bdb70001e621db1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:10:21.685Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac1e715bec101acb7e9320ef6bd91f9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:15:21.586Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "beb3113034c309443788bc9d96512339", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:20:22.061Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5c1734e8b5dfd6cde38f9f1900fdfa80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:25:22.049Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d08cce354eeb4da1ee053aed8ed059d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:30:21.548Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "152115c4f2e9cb57d189783a641ae6a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:35:21.582Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "688ef1ff913fb24404bbcc7f82299dbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:40:22.185Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7041c3d4ced6f26c351f217f2ced71fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:45:21.668Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "214852ad9197b013d199762d70daca69", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:50:21.673Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02d237a5cb51d657fe218815280578f1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T02:55:21.455Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a592711aacecf1f952e67e5e3f70a1b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:00:21.392Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8886abbbfcfacc381d7e3283759e903c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:05:21.632Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e755e7a4b36a5010c1d6e6962d33149", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:10:21.433Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0aec88e604164cb58cff0a18846d3bee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:15:21.554Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efa1eb409f5d8c48b5750c2061fa73e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:20:21.659Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5879d43372517d20148a4cf28a8d9a8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:25:21.763Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fad682f883204c0a1ae992c07d3b4091", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:30:22.872Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4683a84a7b4f187a6a4e05d11d2e3ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:30:22.872Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4c84d48315811ef0c87f8d4aeec3fb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:35:21.431Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15624e310ea529c64f2f83e4beb52065", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:40:21.432Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2bc6e815b0ea44a26cbad3680b0d3ee9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:45:22.393Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "592204296e9e5adff217085111021ffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:50:22.06Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "592ae799e5f4ee7045dac6caff201b1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T03:55:21.805Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eea6bba22969cf8f905f0b0c8998fd8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:00:22.135Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f1880a1d42293be1ca950e1526f7c4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:05:22.164Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8784019246ed591f7de6f10b7917aaa6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:10:22.25Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d585c9bf74a43607b62d176e087a018", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:15:21.861Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b57726fdfec840e146b0a8fb8f00c3d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:20:22.401Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3ba06e9520f471b018b2271044b2db6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:25:22.73Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c91eb62474e3a19080df10472c2c4b1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:30:23.315Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bd3cc2f264791158e696db4c22a1178", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:35:22.627Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7a9ad1a3b518b83ca546e471884dd52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:40:21.94Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa78caa5905e245be3673146c958d36c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:45:21.725Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f93a4293ec0297cf81c6b9b807833228", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:50:22.62Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94da88032e974798c6707d24c3fb8bfe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T04:55:21.929Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aba170eb1e889c3da6d3f8e13f63e37c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:00:22.272Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de8860b29fb3c30e0c9c417c360c0262", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:05:22.517Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bda0e05655791773fa142b3cb940f44c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:10:22.353Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5afc0c4913535e9e8035b07381d336fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:15:30.77Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4ceaca4d15eed895788c06d93353a1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:20:30.77Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7fb4d970485ff9e4bf7e9fff9d1368e9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:25:30.77Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5014afbb2472a38ac9aaf06b243dd498", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:25:30.77Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53099a88bd8e1f76cf90d808522c5d17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:30:30.77Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c93b09d98b7928e2bbac4f6b0f9b8f5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:35:29.954Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15364ed23909cd7ae6f68081076363bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:40:27.272Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f865e0be30d017df4e1684e96e66f89d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:45:27.124Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81fdeedfd50b60935ca87dfae12253f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:50:27.553Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cacba27473f5682c1c5b74b7ee1a3a16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T05:55:25.924Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b05f3f1911171b6a4fe943402803a23e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:00:29.744Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8dba373ad2a3179b5b23f0fbf3d886e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:05:28.591Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e64e1347ee1ce65050e85e14ebca980", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:10:29.572Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a74982af33e42f45bd65ad68f239f0ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:15:24.41Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29d23591e42b1a969aebef2f49a314fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:20:22.836Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd60bb4e366622b07835efa18cd6329d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:25:22.252Z", + "quantity": 169.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a9aa62417efc31db4e8a97a1bbfaa35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:30:22.21Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36823fc805c59c8f735a2a348ae00f6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:35:22.91Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5becfb8f588919fce84709f4083742af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:40:22.68Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0cd9e736773be9b823c9c0a4b038010", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:45:22.227Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2d61d0ba3509da4d41b2ede3f3f1c33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:50:22.15Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3fec2af69595f5405cf5d00787830c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T06:55:22.288Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fed99a26d874eade70db6f1858e18810", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:00:22.908Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "764fb14f98c8421273bc38aeded0c088", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:05:22.958Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2622cfc44a6495a99cbc0c25924db46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:10:22.793Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a34d38f297eb965219f5e0d99259f1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:15:22.72Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0538d4a201a22bd12db49b6884eb283", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:20:22.132Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8de0fc5140749135a06fc3d6fa63e86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:25:22.312Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f605b878213613381375e38b3a647bbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:30:22.622Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "500cf18e74032201cb97059a2fca1385", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:35:22.575Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f5322990acbb04558aa1201bcf648f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:40:22.517Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21d984ddd47978f4580d49d3e2baf398", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:40:22.517Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5a811497e6967754f19cb77fa6244b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:45:22.245Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5caf08b776dd23668e13282dd8c055c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:50:22.251Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e90d11531d45b438b27892ee66d6c46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T07:55:24.661Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64147a0529823e64d7d774bea010f2cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:00:24.661Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c41b8d6887f207685c2b5a9a12dca277", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:05:23.339Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "559bf7e11f7876c6869b9b1d85a84a4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:10:22.418Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b0e92048f13d27f25b394a488e885b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:15:25.129Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5112c968f6d5e770bb16c98c475b10c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:20:22.797Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c85a5cb92bae87b35ee786ffa7be8e05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:25:22.478Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce4d92d1d8125b5f33d2b8a0adc89956", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:30:22.339Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "710ee6eb8a3c8ef9168001fc847244b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:35:22.295Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d917ca83a726f526fe2c1a719c34de96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:40:22.515Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f5e9ce850117204265f0cbd0f9c8e48", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:45:22.497Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7e27be718f50137c99deab9fa98a7a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:50:23.219Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c96d27b630887ab503927193fb5657d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T08:55:22.939Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cbaebea90c3ef8099694178664ed83a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:00:22.8Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f28ce5a0f5a6b2e55ee4fc2fa6fe137", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:05:22.786Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2fca1e32156f431119dd7749e2585e92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:10:22.653Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3dc716e3f80e6940a08789fa78f5bf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:15:23.271Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e18dd8cfec87ca84ff36656f50eadfcf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:20:23.23Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24d0d9276b45d15671753247b782dd90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:25:22.538Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdd2416bc92fede962f88b1ba41eef56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:30:22.526Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bde08fc58ffc55b93960b5af7a11aef8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:30:22.526Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4b0e3a089da254a8ddc3ed1fe9f33b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:35:23.19Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be489609b96cdf4c55d5031008f2ecc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:40:22.404Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd284cb8f2893a478bf823fabe9cd5a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:45:22.908Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d3ebc32a4b6f5cb4f8de12c13a517c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:50:23.327Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ae1f0400a9b0f069638c0398006744d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T09:55:22.741Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd4e825f2c25dda0661cfd9690f4d4ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:00:23.239Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d474024811144501199af88dd4352d84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:05:22.994Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3910862090a8e77e4887b538548a078b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:10:22.833Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff033e32397f5a89fa67f043dbbcb518", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:15:23.746Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa7f92fef4289e9d8be6b75fc5f003f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:20:22.567Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aea99f9d26a32b826e8be3385f35601d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:25:22.614Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fac85e33886bf47cd2a677becae29e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:30:23.042Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72fa9fc39d76ce2399f642287c8de48b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:35:23.341Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28e5fecb1e9fea80d77b26c4e9f04c93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:40:23.266Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1814501b9bf3ed7c4661696c48eaf461", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:45:23.419Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4db7d9e1efeb74646d2ca928f617294", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:50:23.067Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b938aa2c903e85988ef2f586db1e567", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T10:55:22.636Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91bb1b5b757d2f9d0f2294d23ff44dba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:00:23.196Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc7f9bc9ef708df9a38c2f0aa8aac14b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:05:23.419Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78d9efc42452d4f9c7b6e47c754eefa1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:10:23.497Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fba121cebf88dcb0fceb579afb42c42", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:15:22.876Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07c92b8668323a588c1aaaaeb9472401", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:20:23.228Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e885d4ff23c61cae9009e1315427826", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:25:22.734Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77a4bf8f6079a702ac7c7307a2c01284", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:30:23.164Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d5963053352ade504af8bcb89ca07028", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:30:23.164Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c467e2c63d231d49e7a3f0053971eaa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:35:23.736Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fdceb01b099540892ca5268b87a5595", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:40:23.475Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "023c271578b9a741281adef40e802436", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:45:23.468Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2953594738b6c91cefd1db5a2b7dd571", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:50:23.53Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e2904d2246014d7ff0dd4fa51097f39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T11:55:23.32Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc17800233f5c7c21353aef1912070de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:00:23.07Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6d1565533b0a68bd2e985cdbaa252c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:05:23.726Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f49cbfcb8679a21bbc820566c3ee525", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:10:23.248Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa66aaccad75ff5d2fb3c8b17b168a25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:15:23.567Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c86504903576e350c29a673003b9a558", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:20:25.021Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bdf16cf25f568f043edd0456b410191", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:25:23.439Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29c47a7c327b78f63ac15dc3367455b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:30:23.779Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a14ee055df5a68a74b005fec4f26547c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:35:23.722Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cc9a783cde1b3f88a6df7aec72ac129", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:40:23.911Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "630348bb5fee48c1c19f6c5df8b85793", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:45:23.467Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9477bd7abb7e7b501d4d1ab6dd68e09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:50:23.828Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "718c7d267c22f5e9b5b7f630cc26c91e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T12:55:23.59Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3cadb64ca204eb7af79e721ab2dc9a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:00:23.978Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0db056f849f10361a2176367ccee524", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:05:23.94Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4eda57f253332d06b8f19a3ea3fea2f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:10:23.089Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bde9d9168d936f897c0207d8b05442f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:15:23.421Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4be40697ec733c45ce613895cae8f90d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:20:23.208Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e9c7729085d3659c8cd5e9dd3a2a32c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:25:23.977Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5274047ba3d5d177f77cea647bdcdf66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:30:23.576Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a1af3845f9665c5cd2a8073f9843cd1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:30:23.576Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1782996f02a0da47770b8a8cebbce6d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:35:23.426Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5db8e8d604a5f342d9d57653cc3be492", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:40:23.744Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aaa908c675f0f99a062dc9e2a7208d71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:45:23.766Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc85b6b518ada33c5965a826506c8b81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:50:23.653Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cdaba529de2c2eba3550cbb9f030c98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T13:55:23.686Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96cc0933d3a4dc64744c6e1533933533", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:00:23.998Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd96af13dc102966dc5dfa48a1c1f81d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:05:23.683Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dc1648639fe2e68588c40aaeee40be25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:10:23.502Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43637601270148f773a688f0781e31b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:15:23.265Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "054a89f28083d61968ebc9dcd65fe5d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:20:25.424Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3caafa4c9a287c6192e6adb3cf9fcbbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:25:23.742Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25b12177af28fc146ad61060a7a47872", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:30:23.859Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b124d179caa596a1310d7ececa13514c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:35:23.949Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c25bd90fa2cab60175a459d0e025516a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:40:23.652Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f964a15a4037bac43239469d8617f968", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:45:23.744Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac2c4a65f77bd4a4bbb20296bc3b0c9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:50:23.744Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c85882a5e0b0c1c14068acd75786192", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T14:55:24.064Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea6a8b995a7baad67fce71fc2aa5f826", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:00:23.726Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "93ae1ccf4747c5f8a3199b0dc585adf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:05:24.16Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffe30999634305fe6ae7a69084ba409e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:10:23.841Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1cfea2fea21f5762f070723dad4beb5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:15:24.12Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d9a02fe5581f17b261f4ffb0897e125", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:20:24.993Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60afea76b3826b18423e825858fa3491", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:25:23.384Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb4b82da787e3600ef6673eb462f05a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:30:24.024Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64b8a18c29aa32ac32ff3b6f0e23376c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:35:23.663Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1909caad1c6b30c442000622e5ead853", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:40:24.312Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "640ac02e1c399ddda7172c3069e418c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:40:24.312Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c20ce36d6de668a36173028c2d8f2d7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:45:23.706Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de71135d9056b1e96796770121a85600", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:50:23.859Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33e8d1afa108c6be8ed79a74d7c20ad7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T15:55:24.418Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1993d554b93333ec59591bacd6da1068", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:00:24.19Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c4d8c5d9aa2e00ebc8a0e3df22bc827", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:05:24.38Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "840d284346ded7960e105f428b817bdf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:10:23.913Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20a576a688001ede68316736275ce9a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:15:23.83Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad7675d3d9fb2d535267a852ca52c7e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:20:25.25Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c5d04f3420d6272acbc03377a01d124", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:25:24.054Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c422f69f6d8e7b4506466d8772bc74e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:30:24.348Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9ae08e966d8a179ff8a830096f59b25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:35:23.708Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4ba443b6df9ee6dc42c8fa62634c4e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:40:23.805Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8cfe43c1cc55c0848420748a1f205739", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:45:24.558Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6fc327ba82c749f448a49953326353c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:50:24.423Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "444b37a869e32fd660f387b3e4292578", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T16:55:23.726Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4523f95abd8c5ba767a2436d8a19dbe8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:00:23.754Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b56ff9936c8a41984272187677aac729", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:05:24.444Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c87e12308ab7cfcd0a1c226068dd63a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:10:24.381Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c3a5d3770033441ac33797654949390", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:15:24.192Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61999c0e81553df7a924ad87919e931c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:20:23.941Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f25723c48a486c8708624c63477949b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:25:24.18Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19fb11b0b7560e81bce4900917a4a3cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:30:24.152Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "183738da3562949ab95bb4de6e769827", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:35:23.727Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ccbe266c924eb2f48108376f46987eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:40:24.346Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eddbff3d623521e73cf0222b2cda4bce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:45:24.686Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ab312924ef008bb93bfe4fa9c34a87f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:50:24.828Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce27340ace202549fc41e5c85a5f3095", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:55:24.828Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9805a09cd952790b3bce30f2fdbb184", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T17:55:24.828Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7fa32801a8e4425b8e07c5dad63550f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:00:24.378Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a97bcd6ed5648d87be263c3bf416e1b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:05:24.663Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b30e09146d9b32ad8f943f1f4789761", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:10:23.957Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b33c918102ac51d9cdb32a640a9ffce2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:15:24.654Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6ce3a892b1085980b66c5a451e1644a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:20:24.473Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79ab064b2352d547f842ec34c05432f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:25:26.417Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b328d564a9ddb1729cdbc293366b2a6a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:30:24.296Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d929a39aae34dfd6dbe387d3c48bc119", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:35:24.657Z", + "quantity": 212.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cb87f11f077162cb27fcf14ae384ea5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:40:24.435Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fda4d80bc3b18f70b1bac5f88b209eb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:45:24.504Z", + "quantity": 222.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0aab224e9c072f1f54132be19430a0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:50:24.296Z", + "quantity": 223.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebec95a6bc4c4943d99287d0adad5c8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T18:55:24.845Z", + "quantity": 254.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55860b7b7c7c09fca51bca1eaa707880", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:00:24.524Z", + "quantity": 271.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e549f48c84cb0acdd06808a62b03ca1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:05:24.313Z", + "quantity": 272.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "934a4e42b62c547d6ab207d208a7d07f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:10:24.876Z", + "quantity": 271.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98a9ddbc9e6c8e1d29d80079e6f24b3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:15:24.876Z", + "quantity": 258.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6add0130fb7194d41102269c8a0c7b6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:20:25.003Z", + "quantity": 259.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c29e0ce3e41cdec905156899e99de2f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:25:24.234Z", + "quantity": 250.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "911256a9e1111e24a3f6c96df01aae80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:30:24.934Z", + "quantity": 247.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37f8014eff2ce56c4f5afe96da89fdca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:35:24.129Z", + "quantity": 246.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1fdc43ddeebd4ffed1f0be085462e487", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:40:24.499Z", + "quantity": 246.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37cef76670e835bc7b63adbb9d129e5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:45:24.691Z", + "quantity": 246.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca676386ae90a132c4c9e5f21f85cd7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:45:24.691Z", + "quantity": 246.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cce5744d61af86c8c85470d061dc8df7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:50:24.812Z", + "quantity": 244.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a30f822dfa1c3896c13a02ae9d4bc555", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T19:55:24.757Z", + "quantity": 243.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d20ea21b1a368f694fafd06d13e52821", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:00:24.822Z", + "quantity": 240.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "144278a7ae6f280778f8400db3264d66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:05:24.72Z", + "quantity": 236.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81f28a6246f1af9b815153b94e619961", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:10:24.631Z", + "quantity": 227.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "061f1fd320607dac51c82b8bea7b822c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:15:24.848Z", + "quantity": 226.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45183c50f4faee1249b4f08cf51070b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:20:24.889Z", + "quantity": 221.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50f3b4b7084083f4aaae22b4341e41d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:25:26.61Z", + "quantity": 219.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1d1f92e112e1626ffab77fc3614f4701", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:30:24.869Z", + "quantity": 217.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac3d1460385300dea39ff57073c3d502", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:35:24.76Z", + "quantity": 214.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa0ac18b8f73cb3e3f04f1daa5db64a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:40:24.87Z", + "quantity": 213.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e0616daef8704ce742f1a4fd657fffd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:45:24.754Z", + "quantity": 210.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24704faa725ebd9427dac8270fef5258", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:50:24.82Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f0944479f2daeedcb0e4da89d8584cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T20:55:25.109Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ab88fed7a307bb474bfc20a99840a3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:00:24.986Z", + "quantity": 208.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e14ced81dd32822456ae32741d18ff2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:05:24.809Z", + "quantity": 207.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3384df4480f9530ce0a4f7e302582d14", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:10:24.407Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc0fb5218830198e127ea3dcc87843ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:15:25.332Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9f46c9491e413998fc74efd4c62ffac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:20:24.357Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80722b4315dd0badda8e6da8e2863a98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:25:25.485Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aabfc659a2ba29917d793437ba26eae5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:30:24.5Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1db1f193fa958ddf5efa64c6c8ec6f3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:35:25.792Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56420270b06552880243cb34c7115325", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:35:25.792Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec471de4d9e0f18e548ce70b62f444e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:40:24.5Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80372f8631852dbcd1962a05a7976c4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:45:25.145Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7daf95123775aa4c1f332b9e54ebd2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:50:25.364Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "737673c288b8b13c8e0866b545becebb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T21:55:24.874Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6402c6cb3c7fe542d12ae68b04cf52f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:00:24.796Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37562cc657a96833f37aa31041c33fbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:05:25.387Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ab318a62ef08a050069068a141a02a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:10:24.987Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "897a79eea519381d309002dcc33a7692", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:15:25.767Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03d819eeab5aec149fc0c7b7177c7643", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:20:25.567Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "979151b47c70a98b244a1660d1e7c4ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:25:30.06Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bbc2b51dcdc7e2f322436a625f3c666", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:30:25.518Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0498e877aa2137b9e8d765edbb56a089", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:35:25.989Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eaf396d7d30d82ada1b4ac5055bdb454", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:40:25.021Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1cb9cdbdd3c77474ae3ac42eb80377a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:45:25.498Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "be95ce2902edcb947d31b27028c48190", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:50:24.794Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8795599c8d5b7fea78cc8a7bf59aadb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T22:55:24.755Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "927a3b8f8764e3d3567208821e3cf2b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:00:25.231Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8a4d85e2007cbd74f81d8a2e7e7211f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:05:25.425Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "484d27e238fee1342e4459d692be8df6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:10:24.652Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fa0960deba5dfd7cb277315037bfef9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:15:25.138Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fea09e0a3975ceb71175ea947d50a4e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:20:25.093Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e59ae8e153e642649ad34030f58d956", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:25:25.304Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6501c11c7794e465bc96483f1ca2133", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:30:25.438Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c94ebc0b1d8cdd9790bcc2569b69efc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:35:25.558Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2cd579de763f80bd3b00ceac0445328", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:35:25.558Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee3d2b85f5c3114c95d90103d98ef2b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:40:25.605Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f77c378a0ef03053d6286a8b41c31e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:45:25.216Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e330ac34509d4a8056bd0d4ae473521", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:50:25.188Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "051eaebd88d5a03853858776fb228c3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-07T23:55:25.378Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51653f4bbfc1e51f65ae7243fcd7ee4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:00:25.056Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47d446fdaa839150890d5e2585e2e7c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:05:25.153Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "566b88a8e71d4723d2e33c579468f6ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:10:25.685Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bf96ed79b78a6e72ff02303d2ce57f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:15:25.67Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a13b6d1e2119425b43c65c542c671b53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:20:25.374Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88e714d7e849170a5b281597e9fe7fd3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:25:26.949Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9622e82f57b7c3303a4f0cabd86f5991", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:30:25.279Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ca7948207a12a52cd27dcca47156176", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:35:25.774Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58ddbd4e9c8ecf24e882039962b7d5ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:40:25.104Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9af0450829dd71f7976bd1a72b2d5e56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:45:25.592Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51ef735356546b499a6a78a7c4b4a757", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:50:25.748Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ee6fb545cf2c73afdfa63d569f7f4f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T00:55:25.287Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3534e92422152bd2c6219d5ba9dce98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:00:25.66Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6f91067dababfe508c147e189c4609e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:05:25.836Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43ac4e3b8c13c57a2986a8caf225e278", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:10:25.791Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8ca5122f3f40fe982a25692f1649f25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:15:25.846Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2970ad3629602cef87340af04be0ab35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:20:25.15Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "784b4d926d344dc65725697adf3195ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:20:25.15Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3bae8719d4b4ac672f130bd754376c2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:25:25.419Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd0b223e8d4ba3cc6e186b8480051999", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:30:25.934Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64cf3ba786d68770a830e0e009ae27f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:35:25.356Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f61f041f8738614763b795803c56d59b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:40:25.564Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7be0aabc5f42e53b2e7a821ee2877100", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:45:25.486Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42192c703dc665b425f5035f0f7bf14e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:50:25.905Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3604d95d9d28f997e0c8444557330df7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T01:55:25.9Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4a5fd2023c9bb11409ebdb28960f89c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:00:25.235Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e5c443fb69853ede5144c9e22b2bf295", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:05:25.334Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2aa1464e4f6867ebb271ac13f817d57b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:10:26.104Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d449871753455028a05e2cfec44819fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:15:25.93Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fd418a36067c1a51b11dfdf025d32c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:20:25.819Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8bfea1963d1c22ec2fe152978d831ef7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:25:27.3Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0deec7ddbee735dafefdcc0e14d941aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:30:25.235Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0abc52ff9922a204db637eb836ee1707", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:35:26.111Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95d059c16552ab5f2e49dcb1e40580c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:40:26.218Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a1a91050bd4b7c4cda94d18f636959e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:45:25.862Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd373896ae37f13504226bca21a526c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:50:25.428Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a40f3071a77c9706a7ac6b67c2538f4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T02:55:25.469Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "062061584f778ae5dfaf3652fefb484d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:00:25.976Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a42366fd96c008233ab137099f35d49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:05:25.844Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa5cd3363e7666aaad7c62b0419fba6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:10:25.858Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "339e5a46a4b51d9eef2056f61154b663", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:15:25.514Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6325a9c06138dc4b5b4375a047fbbbc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:20:26.081Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b495e464a728c461582ad89f96365f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:25:25.939Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f6dce38aa4366fa8a6d0d1d2c8e5a38", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:30:25.985Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a878cbff24b559a31c3f279d06b9afaf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:35:26.049Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8cac1a0a36dec9a91d9fb8230d5d1c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:35:26.049Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b951bd6cea9b7965cf84f017eb8fb58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:40:25.978Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a097b5c05355014406dda33adf9d3b88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:45:26.065Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "592d812df45d7cc895525f5f68bd8d41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:50:26.19Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e0c647530c58e3639bcd6b54e5872a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T03:55:26.218Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2366abfda4002d0d44e603e0068f6c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:00:26.176Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10eb096fae964342021cbce8b72fde6c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:05:26.004Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d27fc9ca637d6499c436c6e641aa664", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:10:25.526Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e675bddf9b041273057822916725c262", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:15:26.19Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99ff287f49503077dc3151b838e3d83a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:20:25.8Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c9bab99f05a2cd5a7db3d9341a22991", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:25:30.868Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9637f16e917c4dd25b3d2fb93c91fba2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:30:26.941Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e04434abdb4c19dee41b0355df520b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:35:26.11Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eef9b3a744c5700aa7497f66173e4991", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:40:26.426Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69de67d421e0ab5a07236e4edf945371", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:45:26.055Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c16b746e1966077605ca1c1afdcd450d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:50:26.465Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faba4dc92bf0badd1d99d59eb6611e05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T04:55:26.444Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "574809f8f2ed803e6c557e34e6e75000", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:00:26.18Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "10a9306b7505052ff5716d2a6365eb56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:05:26.007Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8936677d50d20d3663a160e9fd062e56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:10:26.124Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7fe5e9e25c07cd783ada3548c360021a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:15:26.336Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7c79a6d64b4a953be8b219b2543797d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:20:25.787Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c90b1683062a4914e4bfd23c24024159", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:25:25.95Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee3a73fd6e74a33ae6d740e3ee73b1b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:30:26.094Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a465045e9df8f2626463c44215b03e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:35:25.785Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3923c5a6ad732ccde75bc2d7ae679eb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:40:26.691Z", + "quantity": 82.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "325edd215b83566a70946b7454a8a99e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:45:26.39Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a57b6ad18dd3b3982cbf633d52882c35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:45:26.39Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a9a368b1144168abdfd11cd2910bc03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:50:26.652Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4604cc7dc830d233d8a978dcb413a3ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T05:55:26.504Z", + "quantity": 72.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4be9b2ae4fbd4d0e6c2c9937102a0cf7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:00:26.052Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59ed18c74705742bd2156b36605bb438", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:05:26.746Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52db94d55428bca48b77953667e75eeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:10:26.492Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "118d4b02864830ba9912fa4cb1f35f8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:15:26.627Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b4e4d69c5a40eff32917f13d121f18b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:20:26.18Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58ef5aa78d1a0a5ee9f24f68ce50845a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:25:26.18Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d29683ecf54b205b02c96fc2af9d3309", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:30:33.96Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b5808eee34a2069e637f73f4a914675", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:35:26.65Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57e77508b5b9ddcb670ec13c2ca97386", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:40:26.19Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b405fa77934b34f514b7b3405b2a646", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:45:26.695Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "810ef70a5f8692e4a3030f43c9b0c64f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:50:26.075Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c51a7c1b0a36164afc7f089418f3174e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T06:55:26.349Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd2f619bc1561b510cbebbde970d7af8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:00:26.15Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d01e580e7c339de80693d23c6c0b81b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:05:26.126Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d31945cfcdbcd615ed76c7d5b4a8ca62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:10:25.971Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a75132bc8d515691b185c99d0993cab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:15:26.478Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77f6ced3e5695afdc28b4607b864ab4f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:20:26.2Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3541aa21346a626df220ca92744263ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:25:26.197Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26dc2c309dc1fa8c2fe472440f29562a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:30:26.199Z", + "quantity": 60.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "949875872ebb71361d9063f64bcd3b35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:35:26.746Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bf9a359a892b3aa42b760f3a8476c8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:40:26.701Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a406a08d08ed3f5e0a2463214b2dac5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:45:26.831Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44b2dfd8090ab570badb53d2145cc99b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:50:26.902Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5acfc24e9da796abccbac97aa7136ede", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:50:26.902Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2b509ebc333ae246d84744321df9430", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T07:55:26.908Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71137a0a9613a7d4ffed6b057cd1c988", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:00:26.395Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b1bb31f0e25397036bee3740704a030", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:05:26.944Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6ff478656e675dd8a22c935b9af4471", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:10:27.005Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56ad6b7e0bece101482311ca507ab42d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:15:26.785Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b1ca72e4055e149ae5592bc69e96330", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:20:26.773Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c079af97f6ef5cad984932cc51a62638", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:25:26.301Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c11887558c42d584fb575b6f0142bcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:30:26.509Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14488f111f570a7e3f3e3b59b2531c36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:35:28.363Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ccdd747e18a17a85687eac64afed846", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:40:26.741Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fb7a2944d71f1e64752178709c9758c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:45:26.95Z", + "quantity": 62.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "526f58d3c414e41ffe9c499eadf66a47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:50:26.659Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a4e5f5b02d80662457442bd1ba26bc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T08:55:26.627Z", + "quantity": 56.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9f8d576eefb4e1b6db88169671b38f3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:00:26.99Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ec29726c9b62bd15bb84cf0d101b868", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:05:26.313Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d52994aea6913dee995eeb28222c7ec1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:10:26.785Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b506799708f655fda48e6403093d4bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:15:27.247Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "07fadef3ef389c781c09fcfe44a781ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:20:26.583Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "212c78f465b022d3e83f5c84817e437f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:25:26.374Z", + "quantity": 57.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa99fbdc8992b62c8c6d7f3222baa1fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:30:26.351Z", + "quantity": 58.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dda7252119dd9507930bce87ad730aaf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:35:26.861Z", + "quantity": 59.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19526a098b75cc904cced1d6eeebf9e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:40:26.942Z", + "quantity": 61.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22967d2253801f5e47613084b9c2dc93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:45:26.912Z", + "quantity": 67.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d79fa48a9e24c007ee577cf55961f73a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:50:26.719Z", + "quantity": 71.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba424f9a3ec98d407ba86ccb827b7338", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T09:55:27.051Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06069321f60363ab0f20b7df7be04a8e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:00:26.538Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c9cf240a9e6328dd838c455b937e7a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:05:26.847Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "419fe96e8e4ecbf4ab45fe1fc262d06e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:10:26.497Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25afb753d9c53fa234c51011e95027ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:15:26.489Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4113f2c9013c2e2359dab0b92a29c06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:20:27.337Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee12d649cc969085e811b854ea7e6878", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:25:27.445Z", + "quantity": 64.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc068ffe76c1328425814d0ef96b642b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:30:27.346Z", + "quantity": 63.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6f3b2d86366248de8e90ec8f350719d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:35:28.808Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67efbf98bf5d5ef57f13e0732a83c2a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:40:27.297Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6fb29a35f8e2ae22f707f84a223fc50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:45:26.921Z", + "quantity": 65.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "58e32dd6eb4d33e3c5e33adcfe8fae7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:50:26.866Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0fb282d158c4aef6f925eac78617bc24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T10:55:27.438Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55ecfeb37d761910fc5d8961995735d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:00:26.644Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "549ce8cf4f630bbc50a326a45944f22f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:05:27.373Z", + "quantity": 73.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c9861914501725db585e4f7a5ed3687", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:10:27.003Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15723c7d5a13b7b87ccebeabd9eeeadd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:15:27.102Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf1ed7b4bc2a2a6425487c36cabe1bcd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:20:27.363Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8dfd7385c24efb52953d7ed88fbeabb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:25:26.999Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e79267b19e4db3f74e45c3d06cfe8a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:30:26.88Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd6d8232a0bf6cb01b2d47daf71ce9cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:30:26.88Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca15889d6cdae8c0b0aef872ef2c496f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:35:26.992Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0da83542cc3c193f82a69f5c75fae4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:40:27.41Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b279c8a9839f6fc5d7873bdebd650964", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:45:26.783Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e42fafbce13988a37435e9f66d64c4ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:50:27.352Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "384c0290409a29ce894420b251a899a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T11:55:27.023Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1a10c431d17a07cdb4a71971551dbd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:00:27.074Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16b8461581e64c44724129e8e22dc626", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:05:28.032Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5042034b57f669f261b7359b5fe5e8b7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:10:27.523Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f141e403ac44e3dfe774dde11f7643ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:15:27.563Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02019abd4800f4463a0189392b98ca05", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:20:27.578Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb0860ed0540e6af1dd818763987ed89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:25:27.406Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "450ff4369bdb92582b23eeec73e76dbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:30:27.371Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1ddaeb9d91dee2784af745025cc4a3b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:35:27.291Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "509aacdfae2058ce08fffcce96453ac0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:40:30.38Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f599d8fffa9bb1fbe3c59c0bead47c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:45:27.012Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba5f887e5425d40aeced690270adedac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:50:27.688Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4604d15f216cc575523a9e8ee2544d46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T12:55:27.758Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84eda9b3aa98f3260ad4191baa6e6023", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:00:27.685Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55e8d2de545999008a4d652b8d56e3e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:05:27.715Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfffa066bc7d236ddc71d54ac1719828", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:10:27.074Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2609bed0e424947866d9813e44365106", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:15:27.053Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "323d99b96fd00c879d641f2998914833", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:20:27.814Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edaa5cbecf2054d91ae369575a74d149", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:25:27.754Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "825e3ca6a2712d8060c12a55bf1f5f17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:30:27.511Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d498dc746a4d86a6d948f009b40e1f71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:35:27.202Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9e331e38ef3b024f95e9abe40f8532d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:35:27.202Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6797748abcafd7dca8150984c43c974", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:40:27.648Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0364b68437fb8f3be3dea795388d6af0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:45:27.879Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f3c53659dc98d023ae34cb2705f4c17", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:50:27.156Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f1bb05b1fdd83b45efc228ae966a505", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T13:55:27.947Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de6c519fdba0b2e8d561fc3b425d6350", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:00:27.455Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a04aaca25a8ce357da963ce3d687bd99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:05:27.591Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88a8243c6bafdba2e606da071ae040b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:10:27.771Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83da386a5ab67c4d5d59cdf5b1ec488c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:15:27.893Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f9964e7c3bb06d70d7330068ed7ff21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:20:27.67Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f30c9661b072d8646abd41be0f6ae8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:25:27.87Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9cb8a807c51843a6662a212a0f4255e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:30:27.503Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff57fe88b83780bff957d6226c8a1620", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:35:28.248Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12afebde2bd66efd32ee34615960dee8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:40:27.445Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1eedd309e7ade8773f7d3fc36ac33824", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:45:28.636Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cc33c80528509afe6aebf908ddd9b51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:50:27.314Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e433e55240b0bd589d6582384f15028", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T14:55:27.842Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "06f7a03d3d31b99e502277c30e85d772", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:00:27.97Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cae4c5b8503b7de00fc7ceac4f4b84ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:05:28.048Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7df464f032c573a4717fb45fa7bcbc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:10:27.967Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "336d02b166bd6d39231c4ddabf83dd59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:15:28.066Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38d9fd846cd1925b83040f6de12733f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:20:27.62Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2219b148a38346f90f18b319373f3c77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:25:27.653Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6bc318001c35b53caf19b70b8542ece", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:25:27.653Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57a4b8464e2bb70483015d86cf9d9e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:30:27.713Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71b8a6eb03004201fb3147b2e426d5de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:35:27.714Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d4d3c95379ede74ab2a6f32b8620e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:40:28.254Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24c911e615943608a448ad6e815a22a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:45:27.75Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "296ac210faea313223ac3c9e0952f499", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:50:27.837Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43cd791d7220c345b7f5192b21b0c639", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T15:55:27.827Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "03578741f1dc36180ba94192cc5401fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:00:28.198Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80f2eed6991f191f2da0484a14021589", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:05:28.437Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7235e0f97c12a33c508869f1b575b335", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:10:27.635Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62f690ddd7eefce2d8ed22fc952a4d12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:15:28.123Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8878e1d41f094836211848da672c1d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:20:28.398Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "132a0c53bead951bf70d70fc5e9e4386", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:25:28.376Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f3db46695560bee3ccb3388909e07b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:30:27.707Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55961f655dfccc11c244a039651f67c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:35:28.196Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b58aa15bbd303fb508fea29279660c52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:40:28.615Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c62d919d919e813cde1f12e4b97ce6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:45:28.537Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "739b7d09b71fdc4b767495a3afac0996", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:50:30.262Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a2cc849dd549c89a3e7790ac927aa20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T16:55:28.141Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef7fd9a647a44baca2acc48fdb1241ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:00:28.233Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7329d1596e73cb001984e172e26be7bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:05:27.956Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1481150e67f693be5a75eee107e14523", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:10:27.622Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4bea81d81cbb55ac6509bd62682e5731", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:15:28.161Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dcf83b92310a68926a1669f5723fb8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:20:28.259Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2aba83cc09db06478c5f8a6636dd77a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:25:27.92Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae9660019b385fb7052d799016c7ec7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:30:28.219Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38c737879a96b75817e66dceb4b55f4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:30:28.219Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "822bbdb02751d86ddb21b17bec2289e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:35:27.858Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de6b1b8feb5d25ca3cdc32cba76f609c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:40:28.139Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adc64adc884648947aa981cfe2cd5392", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:45:28.242Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4113ef6808487db7fcbdf384167dba36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:50:28.6Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ec776dc9bc59a9644a99dada5df5f1a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T17:55:27.953Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7aef7363422700f7eb8c9f4f9eff8898", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:00:28.398Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00eff0f673017b009ec1e1527354515f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:05:27.978Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6bfd27b9bd0edae373b936aaccc4479", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:10:28.665Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a14b27f7986f38d40eecc7b4a26a684f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:15:28.653Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "301c4973a40020deadc55325a6fd408a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:20:28.182Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7728830bdf4fc82fa7cf8588553d7b90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:25:28.244Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0db45214112a21d37e6b2c07d2deab4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:30:28.314Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5822246ad29f7442ce8e1d71b94c2e1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:35:28.35Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e0e987bbf96c391397e05c55eb7e223", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:40:28.815Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb4e3d82cc581154485a06133e6546ff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:45:27.972Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76610ef7509903c910f10f38e23dcc0b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:50:29.616Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33d20ecfc82d5a6b11c7282e613fe52a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T18:55:28.506Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53978b9b01ea5ca10e192306cd27241f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:00:28.487Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4309b056d3e55c5f0d9208b28bd3f041", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:05:27.956Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bc5150e50dc6fbae15a845944f851ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:10:28.805Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2145205516926393d8c5e7d6b41aaaac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:15:28.049Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b3980701cae2f32aa4b5e0679a89b6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:20:28.985Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "338cc3543504f2179b4253b6417850b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:25:28.742Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adcdf40e160033a0ed3053e48137182e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:30:28.135Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ff97561dcebc8472d4173620a1c2d89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:35:28.875Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19ffa2cb43b23fc1c47549ac5cc7364c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:40:28.726Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e837850b98f756048d47bb6484c4a39f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:45:28.096Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "249baa2965b824055dde94351eb687f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:45:28.096Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b9b949c11b38ef2a50edc107110de73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:50:28.921Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fff70dd10621f9d08e24a71d6a759fdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T19:55:28.503Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59d3e671cacf117dae2a13369950930b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:00:28.884Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27bb7797b050d36d0deafe09a84e78eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:05:28.856Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "225f81da6ebdd3c445138e41e5a79c65", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:10:28.482Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "487ab40940296da6f1a98a6f14a19448", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:15:28.697Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59a1e2033397b243460b84c208622f84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:20:28.866Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8de155a6d61ffdaa1624490c36af2cf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:25:28.155Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8cb4207e3cfc170051d7058eba395edf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:30:28.338Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d6ae0aa644e36beb8a7b3dc904d25e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:35:28.959Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b01ae6399819024ad30871bdcd7b5ac7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:40:28.873Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c36abe27d70726730c2f815a117cdef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:45:28.887Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d3b131af01b1d422652407177190e79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:50:29.842Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20751112a3b9aff82e04fd070a546558", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T20:55:28.929Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "efc87b986c7b96dc9f8593ddf6aa13e0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:00:28.553Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc7c431faea538c501f41d3ad353c25e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:05:28.874Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91406b0925c9c5b529dfe1c767687a53", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:10:28.563Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ece25419f479d87d1574dfea45edbf63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:15:29.181Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1267724c3a0121344853848af64c72c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:20:28.462Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f0be31c83a6488fa93a2dc121421a1d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:25:28.462Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "deea2bf42e699bcb33b747cf07c67526", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:30:28.372Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c02d27303c2489f6c2fb03b467bcc4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:35:28.962Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91e5871e9b788eef1eb735fae43e3cd8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:40:29.26Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "832e4023c24e638be4e3d4c59bcf9c79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:45:28.51Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "11a5dd361c669b4cc136e905c8fdd0cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:50:28.933Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bdd37b7e43f9302c5fd2154e80b24f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:55:28.544Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f910b34d1bb009064f6fb3986dd1c444", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T21:55:28.544Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f539049838afac03f6b85968c836f78c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:00:29.808Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "945f7bc55dd36c9dd4efc2338adb8240", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:05:28.833Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ccb82e0f87f6bcb8ba937341e1b9caee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:10:28.981Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38d6a15357d4a4c5a22d32b855ba33de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:15:29.236Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "587feb7d18612e66db02f5a48ee45de5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:20:29.325Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72d731513fac10b7114567ae2ce651d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:25:29.415Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5899cdc53b969090342f0bfe4334e61a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:30:29.279Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94602696a9b2f032ddc2f5ac6911276a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:35:29.377Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e73610dc7f964b24f2b4cdb3b0535237", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:40:28.908Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6857caaffd61b6d7edd2cbef22be1d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:45:29.377Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32dc1f80dbbe9066cf7d7b72c12e4570", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:50:28.686Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13f6edf4e9cf5b4c4dff85394d4f252e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T22:55:29.871Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d017e00366793c5ca3ef82ea130d6846", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:00:29.519Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbce6fadc22af8c45638fe26d058087a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:05:29.217Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "651ad19c85e02ca30cd8c3f2909f35d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:10:28.997Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f6cca6e219e85959c2faa2ae0e7c4e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:15:28.693Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9165d6c20df08fb4f165380834ed6931", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:20:29.261Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f53fb6b83659037f48974cf387e9569f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:25:29.41Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b179be86a355e65a2f28c09ab41b196b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:30:28.931Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7948149ff418db5d58626e293a2cf4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:35:29.422Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c594bbcd16d81c4d5db0f20bef5e505", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:40:29.149Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c3f7a71b48324e9ec9a55b944ee6d3d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:45:29.113Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8226c4080c7ea57bc8e9afa762bc529e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:50:29.331Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e35dd3d1abefdcaf52f482a686bd256", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-08T23:55:29.67Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "02d947a4f7d27f9eb4ff37f96ecb02d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:00:29.472Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36abf0f0d9e17bc4c8703e1cb61fd7a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:00:29.472Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cd95ac76d2f8cb27c5c933c9bf83123", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:05:29.44Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92572d3d2d871eee4c4186c16d119dc6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:10:28.86Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae5fb4bb6b2dfe1b184b2d86635e288e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:15:29.218Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e141cff706d7a6c9112656ca3a32f9cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:20:29.184Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65ebaf95aff49934c6e68723f75e4376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:25:29.274Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b054d1e1edb0c424bcde0105c2070f3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:30:28.945Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8b5e8777e9e2024cc60bf61f7f5e3da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:35:29.903Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6988c525bd98254d3259e435016e7c7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:40:29.673Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db4620659d35ae0aa09ac1a27e972066", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:45:29.218Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75222667db7a7ce8e17b6917b33fa1a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:50:30.626Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80d1833c633133c46dda04ebb3ff1c3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T00:55:30.626Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "838eb9bacda399ab37971479920a2f0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:00:29.822Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "123a9d3b1e75244c923f133ef772567a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:05:29.911Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ce5f106865924daac06e9b537ce3652", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:10:29.666Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e421a25c4005df0a6d0e078ffb98c54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:15:30.043Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c981e80b82f45ca3222bac36e699d3a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:20:29.659Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0dc8ae462fde0d05ebacc8a65b3218d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:25:29.483Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5faacb44fb3f0463b761c345cdbfebcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:30:29.739Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21f5de944c1220221cc23315e74037dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:35:29.98Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64f47d6aa83d2f290c256eb1206f2fe8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:40:29.29Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d50a62c33f89cd91dba1b953bf491b58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:45:29.754Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d62f3d188a6fa700dd5fc039165fee7d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:50:29.528Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de788204dc6b17cf1e903450efd18438", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T01:55:30Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e7855d4a47e37fbc3000992ab3f3a82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:00:29.462Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "803298958b948c7992febb2f1136570a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:05:29.433Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d415c8085bd579fb697ef86ec0533b52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:10:29.459Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6102bb5a9bd6123bcc034a7490eb6a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:15:29.731Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3ba58bef2ecc6d6d182697e5813e05d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:20:30.31Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8b924c25d7ff7c1ad8c9e567aa6dec0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:25:29.511Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "38c8e98c4d079f9c9230c3c2d3f5c229", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:30:29.931Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba579827476d2996b14d14219908ea30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:35:29.511Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40e7883877ef2f5b1784ae8ecdb77220", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:40:29.574Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51b332c07a95fc12aa4422ce462a3c56", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:45:29.574Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5d1ae55db08b0c70037d294b57b16b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:50:29.579Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d195cc0c858ec393c5c7b776d1b3d528", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T02:55:30.101Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d90e3a4180f9861cced0aad54b578c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:00:31.941Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab6b4a0ca4dac47a468496a561662284", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:05:29.84Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec4da4610f8d80ba56630a938e02761a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:10:29.415Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af1b5169ccd85c671ededfdd801e09eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:15:29.871Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b8376d5d4d0371d0cae5f39a1be5ef7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:20:29.705Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "039827eec6612272913f12a3dbc45a97", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:25:29.513Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "769695669f4c21461c2dc0a63c655356", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:30:29.713Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da1205efcd47a7f0c7373d87c17a0053", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:35:30.202Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1de5944f3f4e026fd9e21ede66487e32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:40:30.045Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c3bd8ee1c492a55d8730af7cce4aa06a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:45:30.203Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23b59599cfc6eb48c433285c1ca6a179", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:50:29.905Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98850f0b92bb0cbf6a5b5235065fc889", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:50:29.905Z", + "quantity": 184.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "326cf438542ad76de93997a7fbd3c315", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T03:55:29.82Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2ab17d5f2678d99eba7016b558cd9fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:00:30.488Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65a88b8bee91769df490441c90446763", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:05:30.266Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83e825de1c1f763a88dc794616a2b1ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:10:29.836Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd8c3617d68c394e00e8796a32658a00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:15:29.597Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "853aedd515970c9a51d3652c90b7a2f8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:20:30.271Z", + "quantity": 196.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ade90bd8aa8741923987f0afb750edc2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:25:30.349Z", + "quantity": 192.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "54ae22bfd9000b26610135ed44cfbfb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:30:29.943Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e1d3765cbc8e558127326df3c15fe1a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:35:30.122Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8938a5551e223e3822047be10d25623e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:40:30.461Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e7537add8782531e9c69d99438e8fc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:45:30.07Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d48084d1e323fcb28094e28f43a99ccb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:50:30.44Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7e8e8adc8182466dd49f22a3312a327", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T04:55:30.298Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05de98e1b24ea45c0cffe21fbf434bdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:00:31.196Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0a43955e4d8b4f9303735c5f2f876a6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:05:30.354Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a2eec1ac03481d3d128308f7b6d68cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:10:29.917Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2f7b6bdbe49f5dc65b4e466966a743f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:15:30.138Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89571c008864e826faa81b7d59d82977", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:20:29.773Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14be1f8d37f300932d68602bfdf2cfa6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:25:30.135Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88229a214b23d9a1615cb467081d2bf6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:30:29.758Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3eee3365a9f5291ab24e9e54717f7e4a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:35:30.525Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47bce690d10647e5d8e454df6ac4d306", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:40:30.338Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a35cae4da1045377c73f3e4b4012a219", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:45:29.837Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eec9e26ca71b8a6cb161235812699ea3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:50:29.93Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4aeca0d40fe8f7b3fe05f3d74f8dc4d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:55:30.139Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bdd0a192dfdd3eb5ea32fbeb9b6a62d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T05:55:30.139Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "865d14501fb783a53aee26051b08e8d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:00:30.623Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95ed688d1351cfed5587fae38c8590bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:05:30.577Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53cbcb29cc55e93949bc3af2129bb8ea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:10:30.782Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e92d0767544081a1d5b7add5cb9afac5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:15:30.563Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6808521de752b2efe20a395f415a3e30", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:20:30.387Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d71709dfdaebccc4d61ba49bd4714e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:25:30.403Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e9e491030e7d49111fa143fe318c7ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:30:30.07Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "517c5d0293e0fb0edb530f5240f6a3fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:35:30.481Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72ac24d1898949c88358cf0858eb6321", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:40:30.921Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61ed76e64c75a563fed4f0988cfe9e0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:45:30.01Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27efd9a7601622d2d7c6ec2968366f4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:50:30.971Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c2f8e078887dd9e69fc1a6b0f95e579", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T06:55:30.619Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "326bd2ac199f2da094bf823d87d03dcb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:00:31.318Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca82970ff81419946c1a2d12a158aad1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:05:30.298Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "202c45dc5275738503d8f736e702b7e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:10:30.978Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2128dd0ac4ecedecc2abbe4d7f896ea4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:15:30.467Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1055d421878277cdd999d2899e88ea04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:20:31.066Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a23f90028b03f84f2d8110b2c730200", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:25:31.958Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a99d067314c36d1f5a672e4592b9a957", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:30:30.13Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d21c4211ec80eed2de6eaa0f2a3a0c0d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:35:30.91Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d61f4fd40994bc1b51c184088bd8db5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:40:30.77Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6ade0702bef6cbecbe4fb7521b3ff33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:45:30.602Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2913f4a810bba79c0dce878dac9039f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:50:30.99Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23aef734e765bca92a427506166bc216", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:55:30.977Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b31de2ee2f411c86ecae775dda95215", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T07:55:30.977Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c83fa2f9e855b9df2956f76dedc91bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:00:30.997Z", + "quantity": 148.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dfabe67b14d6c0a22d10ddbaea8ae7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:05:30.813Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f5375e2c633f031bda08da40fb603de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:10:31.107Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c694ca933883dc2bf2c5e3c2d6dd22a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:15:30.697Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36c32a530b4edaea61ce8a5105c3c6c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:20:30.403Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "22a13cffded320e13f29e9b8f7255f9b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:25:31Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "944c9c162a4d5afb31e2a1e3c57b8067", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:30:30.446Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "88a304fd70510d576313bc52e7606703", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:35:30.908Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfcdc8a3a6f653978503bdfb7769ab81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:40:30.385Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b620100519319977f97d2b646a172919", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:45:30.77Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e6b7c12430ef0802ab2fe8d8915e628", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:50:30.972Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a4862547bd8ea5a49fa729443dcd499", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T08:55:31.308Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "411067f6b6939752c71b06f37bc17256", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:00:30.722Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff915cbf6a1a7e627bea758b220c5d60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:05:31.813Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74126e2a287f78a364eeb182ce5da1cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:10:30.547Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eee042bd81e25e171d97e22ddbc21fe3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:15:31.038Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4e8ce3b5add12960883ada3962ac3c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:20:31.198Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9782fe51f0e135a35768ce7dbfb53214", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:25:30.887Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e04945da0bf41528b76a105f2cba38c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:30:31.288Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73a5f4e83fc69b993b9d88146bd2c019", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:35:31.05Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00bc875d1e067d1743729a1723e2a885", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:40:31.215Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b80885773b5447f6b09e5b0989f5067b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:45:31.055Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "972ec708a9bcc547809cb8aab1b2fa1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:50:30.659Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52ac85c5aae99c21e31ea41b6c820096", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T09:55:31.299Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9060b32873b2932a20d9520e981e17ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:00:30.872Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fce0368b9a777e78ae895b71432cd6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:05:30.893Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e16faf607f8304958c61008174014a90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:05:30.893Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd56887a5d5b6fb8a003fce589d34660", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:10:30.97Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d47c3fef310e06e4952df21d8b1a6343", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:15:31.01Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c09a1d9953e8019ff5fb99b3993c923b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:20:30.718Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1469f2fa77bc5e8c5bb4befeb3ce8984", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:25:31.226Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44bea074ef2600967841ac849913c142", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:30:31.537Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb1dba19477bd70df89df43f9cab8394", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:35:30.663Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d97d854de21abceb1cd5089cbe47ae79", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:40:30.692Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1b6980a6a6353d865818af2c14fbd23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:45:30.865Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "141e1473ad568fccb54a35c6b3d9469f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:50:31.284Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c1021c25de61e5f8e8c8bf463dcec09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T10:55:31.442Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31193b30fe07102d840ec59bac00b8bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:00:31.535Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0db805f23c254720a360afc29df8e73", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:05:30.897Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0c5f4776eff26177815928989e2367d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:10:33.196Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e2f82834d2dab60123d1b1f559581cb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:15:31.267Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "206c860a35345ba98733bdb406e70f35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:20:31.077Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe0c2d052f1d4e1b280c58c5b3176130", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:25:31.356Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df957d849e3984b00e2ebd0946fad0bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:30:31.357Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0265343cad561d68586c2c6ae2fabc9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:35:31.696Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ebf1a33b4477113f1f11dac9ff07928", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:40:30.967Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59a6186292e99e79fa070381d357569f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:45:31.562Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48a3bd33693ccd7c3d0660983d9d65b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:50:30.948Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff55a83991db19e6878077a11e52d7fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:50:30.948Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a52f0bf0600b120f724781f1ddcc612e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T11:55:31.647Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e527a4cef6cf06c79c772c9c1f947fdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:00:31.541Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9e4178bcd42a76e0670d140154ab248", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:05:30.876Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aec4d35013644354f70d1cc69a4613b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:10:31.427Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b99303faa50217fc90315071491eb341", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:15:31.628Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cd7b65661f96d8ee3177b66e427851ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:20:31.535Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a26b3ff7696abc39f34691fd3ddcdb2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:25:31.837Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87c0bc9da71329c650fb86cabefcf880", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:30:31.396Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfb4cde8829f6e61bb07b3e4705a50cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:35:31.012Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "472261525885e074b69a84e3637a9d51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:40:31.607Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50c5b9daa2aa68e079fde23abd9f5361", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:45:31.514Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b60f12f4e9064d56104a714ba191924d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:50:31.145Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff41a304b15c1ef606179f64a7c5ebe6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T12:55:31.675Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1759d894023c1bd4bf4ca032aecbc2da", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:00:31.933Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3684dc7ba2a3142e62f3f74540f49ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:05:31.533Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b4bfe89853f66365f806dc32ce02228", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:10:33.627Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da160b143490d0a4f74ffe269b67c9af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:15:32.018Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "458e3f8274f757c4fd1c86b1ec918f32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:20:31.708Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28bdcb7f66f843cbb611c1157a6a58b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:25:31.427Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a1c023c0bf97baa81f022d276ce6b320", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:30:31.31Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b9f970454b3a2fd4ccf4cdc981f553e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:35:32.12Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19723dbb4424897f143fc396032df380", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:40:32.075Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edf976adacee696d69fe3bceed4fec1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:45:31.638Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b41fb390059efb3b2a9b17567d867fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:50:31.175Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8828246b5e814e411fd19041c37c48d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T13:55:32.104Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0923cf617e277a22c14bc74ccb3eec3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:00:31.217Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8de723cdb2c7ffcb4a2a272e671c76d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:05:31.514Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "354c53d7c013d0f68c55bf14fbea6faa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:10:31.216Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69059948581fc6c31110ba5e8291689f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:15:31.754Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "358c4f2f381d51e166d632cd8727d5a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:20:31.856Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe6be53b7b752f595fd9aa0f0c7637e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:25:31.795Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ac74a60b9881adab599d798c56fe38e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:30:31.986Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23700277ea70e088a28dfe5a6c52e917", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:35:31.949Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "05647e0f9a5da9fa3f36cf2dc29ad376", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:40:32.276Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5efe8a69adeafe1c5dd35a7014c089cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:45:31.854Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af3d8850c3b610be105526e3bf30f89b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:50:31.956Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e971bf33c094ca7b052f17631e840ab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T14:55:31.626Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db2e8383cb3495f747c7510ddea856e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:00:32.082Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1aa77b8f1c9e0b2e4ebd47cff93948a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:05:32.139Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e28b86d4926a0472f92e6b853fc27605", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:10:33.339Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fbe25db2557a44eebd9f59acb08afc9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:15:32.174Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99f77a445d9ca1e8fc010034bb4bdb50", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:20:32.408Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfad41cf07b73276cc1e2fa52771c0b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:25:31.865Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf9cc16aebf5aff5c6a5d5da9f14a913", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:30:32.126Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09a67b016498e5c18e4138cb89b2b345", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:35:31.584Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e57640a883b843e59862e8e581273035", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:40:31.412Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c2baf770b93171d83c79f078c3f960f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:45:31.941Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f702d9396a0b486e2f25db37740e129", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:50:32.012Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f11c02c012182be3dc281270ee98bca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T15:55:32.051Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ecf38b7da5fdf597f027d0939056edf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:00:32.369Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd90876291d2cce668e4264bf0288ceb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:00:32.369Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1886b4b05ae2c40d164a67efe8f4c0f2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:05:32.096Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3cd1655103880a7b50e15efe0be5370", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:10:32.203Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf5b3003b29fd72d51300b9548ae0325", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:15:32.321Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7682f52250197401753860c6c6df7597", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:20:31.622Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af6ef36b778ae6840a9af9f67a93d642", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:25:32.223Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b4505676041f61b2a4c155f14f4d9d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:30:32.221Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc37319e2113a7fbc140ec324f6f56af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:35:32.373Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f31456d5e9aeadee380562ab828fa71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:40:31.76Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d122d56584406f87097e3590e7619aa9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:45:32.259Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fa13e60bee9595246c93e883e95cd27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:50:32.34Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d76bedba9394c5c2584adda28fbc5026", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T16:55:32.085Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2957a6b42d91ad68884bcc62c22cea16", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:00:31.819Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe12e83c87e513b84e2776066c74985f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:05:32.538Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "75c4abd7490b7c265de51dd4a6243e2d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:10:32.42Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2763ae2861afdd9568af3d6b75280114", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:15:34.119Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "543d6904b3615851c31b96f17c650ccb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:20:32.64Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "af163b2596beccc5f8e150c797b59608", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:25:32.641Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f3f227d8922c52b73268ad8689aee9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:30:31.793Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d31312793d806199b123a79861d5e42f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:35:31.864Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24ec5b552e9ce8cf58c2e3e172b2602a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:40:32.61Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e89420443d246e2ba75192421d02e76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:45:32.288Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "47da70d888de16a74fa519cb287dbf07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:50:32.138Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0d053084c63429defe8298f37f6d780", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T17:55:32.144Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7a61033f140bfe27a2ea627efe2a264", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:00:32.235Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "355b1c6989e382b7585634a89de7b102", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:05:31.836Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c03a2e44fb5bdf3e2e53d1b20e083621", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:10:32.396Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3df47e15b7ff82a543ea7922ff514d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:15:32.524Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48316ca018fbc87c7e23af2e9475aecc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:15:32.524Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf4bf3c1c4d8e3cc7305947d8c26030f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:20:32.613Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a7dace58b01a048ee7128799d6002d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:25:32.511Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ed90744f5d52e21bb59d01794398fa67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:30:32.684Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "251cdbff024267ad702a330ecc490ab9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:35:32.069Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a424fa6290936a5bd863849fa6534cc6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:40:32.893Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0cb0dac38474afe7c2ed855d83d95871", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:45:32.53Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5aceac30e4b31fd4ae91eb409925d0eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:50:32.685Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86637c14629c03f291751f4e518a4d84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T18:55:32.622Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27db0274d4ddf813ce8743060dc43fae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:00:31.992Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c31a3e6542441e149a46c1bc67c6a1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:05:32.769Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa5769c2470a1b3e015874391d17a843", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:10:32.113Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62b7bc1e5179ceed288211b3ea0f5cb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:15:34.2Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50b186a8a41c90105690b67c86cce158", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:20:32.811Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bfa4798c5c15c8c447e8eab3535e81df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:25:32.639Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e33cc4a5126c2232f698fb8635cacab6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:30:32.616Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4a834ba9acc49bddcceac53515fb219", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:35:32.705Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a17f99d03d736ab2c2597cb1a0203bf7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:40:32.543Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "667625c6e89da6e50fad1231a33df6e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:45:32.301Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d96e2e363e7d85e0d77e8d5641ffe0cf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:50:32.919Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "841be4fa1f959bed7438143bd6ebcddb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T19:55:32.513Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f0756d2aba818a6efe3c583ad42a080", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:00:33.057Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce66c8068f80491a3c7395834c6bf079", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:00:33.057Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb3676753ef87d49ae870560f0f8bcdb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:05:32.714Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51f67681f323cf018b05329bb51a1472", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:10:32.7Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7f86305172adef089fca423c0b3b614", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:15:32.92Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18f3ea3008990e80226d0c8e91fce450", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:20:33.028Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab5334b9f7fb7f009b18c02310a16259", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:25:33.016Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "676376c92f33e0ee46f4adda28404aac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:30:32.451Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a8ee957d71bc809efb8047234a7a32be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:35:33.051Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e6c588a74f18b0aa4f053681199d1b4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:40:32.781Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "040b06ac8aba30002a44b87c31a4efb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:45:32.662Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "267c8736fef506bda4ba9f9a52d11a6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:50:32.87Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e26f17106b0710843440bc480af011fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T20:55:33.336Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f9b9f3590264dd501245a12db90e00d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:00:33.123Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1450897024ecf0d4d9cbe0acddd8f49f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:05:33.162Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d42806c758c42c91100d14d2d56ccd1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:10:33.051Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "288eab3e23eb4eca9222949986311627", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:15:33.117Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6310e9b401f2452e0b4e4eedde88df46", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:20:34.2Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c046f34a0debfe298d724fc93f14da24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:25:33.082Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "40a29c2dd8f4a29c25b21fa721c980e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:30:33.237Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78238ebd8a40a2d7410a0867ba1830d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:35:33.156Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "219b062e5a6d11341f8c0583c43b966f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:40:33.128Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3cf978807c711bac377216d458f2a2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:45:32.944Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c2bebe6720e7054a9faf750adba7988", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:50:32.662Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8067ac1ce0461bccdfa84f84f2eeedae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T21:55:32.96Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cea354835b16753e8b16ec8e6d3e0672", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:00:32.719Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc30503722d985fcf4d7301e62e5de00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:05:32.657Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "670cc1e504898eb4179a0f805f9e07ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:10:33.177Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "df7565ec5ab90e6932b0ee90baf6bb2c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:10:33.177Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a4c7e703aae348377d408a41e24310d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:15:32.633Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc67475db468cf5fd307e9a9f19e9ea3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:20:33.204Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85466116beb0ea10993744bd4ba69340", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:25:33.267Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b258b60e7769fb2d635ff4fb0c650a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:30:33.115Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48d45e6098d4d365ba1198719f05f7bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:35:32.926Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bb899cdfe2ad3660a00bcbb3cc12cb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:40:33.366Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e58fa01dc1a06c6e728426f74d526956", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:45:33.105Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd9f3de5ff7276f1fac3e79468dc7505", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:50:33.305Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a416c5688d4939ab74b59bbf512c650a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T22:55:33.43Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a0fa735df0c1f4786010a5e828550db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:00:33.222Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6d3af950b48d4b8dcdf10672a9fe6c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:05:33.539Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5a8a055a1e14615eb9ede7b508c29cec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:10:35.416Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d306e70add4ddfc62e957bd9ed96bbe6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:15:35.416Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3d6ab26816e43fbcb698f777d0b7464", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:20:35.416Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25462a4e690d0097ca9d391f56025dfc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:25:34.583Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9eef06b5ed23b27577f9dea12a1087c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:30:33.6Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "786768ad6c9ba17a9192ebdc97623424", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:35:33.756Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "078755b7cbf47973de08685f6edae19a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:40:33.233Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3db0bb46ee8fd13f2dec44640878fb9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:45:33.696Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f74b4642b64b0d9041ef5546580bfc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:50:33.383Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7e898a3693c7bfd4fe59b3a58c658625", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-09T23:55:33.667Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59399865665ac813d7364bef4035079e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:00:33.721Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fbd2e90d654c358d347ded45186a8650", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:05:33.57Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e56f8ef0976e477854291a19b813fc09", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:10:33.755Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa9098f5a57b898285351ef81ac7f92c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:15:33.089Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a428aba7453a6ec3408ad63d98566e39", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:20:33.783Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4411fb599947faa1f396b7f1ea60891", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:25:33.532Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "160013cd9ee2809ab6d3674971eaa727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:30:33.257Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc8da83147b1323dca7d10ea4f17d3b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:35:33.013Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7a990584d4c3351c9d6751369bcf89d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:40:33.147Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3dd90391cdd916db725ef84639d1fe78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:45:33.273Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b60317c7fd057fbb4eb2b45537325b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:50:33.678Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "706b696a3acd4f2b1e8b16fdd0c6c14b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T00:55:33.905Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27f717c6e7cfdeeff96aa9871de36618", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:00:33.621Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ad42d54bdc89ee42d1042f1d3470860", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:05:33.581Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e95e5aae0cf55ee8ca4a236365ee26a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:10:33.665Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e39e5fbd310257c5a89bbd6e6fc8c3b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:15:33.331Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68f7d4e74b1387fa7794b5e838b763d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:20:33.346Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f844690f8f5ec8ae9771de3d668a6a3e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:25:35.614Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d42aa9083dce8df22580c771c66d307b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:30:33.294Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d09b11efb514f98df20fa16eca780057", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:35:34.135Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbc2dbe6afac86664b4661ef6e35e2d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:40:34.17Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "499d0b5b7124bf7c9b0073c7cec00e32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:45:33.338Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52cd007f71095a5297cb828909808ae1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:50:33.189Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b970d5eb978f4e1ef68fdfc178c23135", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T01:55:33.77Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f52934df3a604f88037fcc4c190592e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:00:33.821Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95aa2cc7b69a031807a31aebca75d599", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:05:33.228Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60c3db60b5004a9ce36807b4ce52ce27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:10:33.822Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "905339f35e96527ef0cbb9a2d37e5dbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:15:34.058Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bca82937ab291586fac77c1e4cb9d727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:15:34.058Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c3dd3547cb5235f065f35261badd610", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:20:33.699Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65d08328e95099371b06498c4fc54a11", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:25:33.852Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90b9e48bf8b72c201205d0a03ef5f0c7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:30:33.297Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c61e9f8e6f8d97bec0d6a184a5c9adff", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:35:34.124Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "519bccbb017c90e68a68ddea9505f91b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:40:33.519Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "30718631cb32b1135b88349ca98c2307", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:45:33.841Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dce02c8dd46c10ae5a0dba84d7b98740", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:50:33.974Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "772c4aab2dc4bfc6c6df42eeb5f84e55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T02:55:34.165Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "33044931b8ffab54b8f71c81679e0016", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:00:34.305Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e64f69ec852d9845f583fe1e76ebb83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:05:34.346Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "770dd2ef4a7a8dae85d69a18a715dd80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:10:33.917Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9d577e04c1a3e28b2fd73f0aa4550cb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:15:34.126Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c3a362433ac8a9c1a481648e03842b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:20:33.983Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46163d441ccc33a8a04dc2b805853e83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:25:34.164Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "312bcdd32859f7f1fec322cb05c0017d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:30:35.509Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b77026fcd9893f30e8c4067b49d3c0b0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:35:34.459Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c5b094a0a1cac0cb777951d649543c1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:40:34.068Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "44a0dce5222c081d024491b7c9de5103", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:45:33.795Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bbfdfa4ffea91c5ef464c4753d7fdf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:50:34.081Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b70e604ceda18d12f17a91abc346ad0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T03:55:34.15Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a06eab445777f5c76601c583fa451296", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:00:34.158Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4c6ea61cbb0a180d5bcd5201e23db06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:05:33.646Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7a7d515a9e01096e271a32eb9f944d23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:10:33.855Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "996903ad164303da866095579e00a3e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:10:33.855Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3fcb7a41adb4f4934046c0df1517c1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:15:34.331Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e9607321d3ecc0f46e5928ab143db38d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:20:33.973Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a3c925f0a895bc681fa381131cc61aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:25:34.092Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "73f07d702b5103b448201cba1c34b8ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:30:33.648Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4e5242770f01700bcc599638bac24a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:35:34.091Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff4cb4bb7d53bbbf36173bfc32a7daef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:40:34.014Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa7645f81455f8f2f00c367020c4426c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:45:34.24Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26570f054d64d51f933c0eb669dbcd4c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:50:34.191Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7d78e8ab43bc403a3595e4550a51b82", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T04:55:34.326Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f60607575e23897c4001b05b623117f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:00:34.481Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14b9191944ca48d5949ce119e2fce88e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:05:34.641Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6aaef764aa85ef45243435dd91ad3c2a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:10:34.012Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2413f463b665a1e5a85ce137d115bf59", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:15:34.551Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "504e1445c7d607b7ef1c40f6584a1916", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:20:34.548Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1f374c1c902871d482b5d6ac56b6d852", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:25:34.522Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "96d62255584a7abf98fb634db02e5c71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:30:35.479Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ad9ff141cb2f80efa1396b867bb1b1d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:35:33.879Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "360ce0e001699f9b81112cd3848d6eb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:40:33.879Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "403c00ca1143ae5f6a0139d7a5cdf4df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:45:34.016Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32e9bf375c2ac9ad4bd30445a29c18bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:50:34.675Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95a678c191c0acf885291bc7cbeb9d3c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T05:55:34.486Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e741b9ffc8871fc482cc7b35ab0cdeb1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:00:33.93Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1bfc7b73b56caed7bb6073b52b53856c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:05:34.419Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63beecbe929c11759c208c5660f045e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:10:34.559Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e4d0b7d8e1574006a11672597b3665a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:15:34.569Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6f5f116db5f011d39d9700b4d2e6140", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:20:34.377Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cde4a1379c89cbbb61bc5696756628f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:20:34.377Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6deebab90d564d9ef6a085022810929f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:25:34.613Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53fe832cacf62d71231416d60932ef49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:30:34.221Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f1b93b68f3dbadd6e69436fd8b787b93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:35:34.422Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4bbf9ca302ccbe664cf4b785f16028a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:40:34.765Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a7e12504f23d0c8200b99d3c8095a01a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:45:34.568Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46d42eebf8a3b844a8b9278e073d668f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:50:34.456Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67e76bf51fc5469e318b83764c86ff9e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T06:55:35.014Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fd040c6c7f2bea1be334009b9871e0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:00:34.481Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ad5f2c95b4f30f39b28910885d02f62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:05:34.652Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b476d72c6a48613ac96f2675a35a1110", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:10:34.18Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ab1d558e1062f411ad2c2e17cc9af23", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:15:34.716Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "888f781ed800ed213a3355a9b9358727", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:20:34.587Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91acbf7bf2fc2deece003af768be0586", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:25:34.892Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b818b64c670134daa21db0bbbf693359", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:30:34.987Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18ed8182849aab1992b26660898a7560", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:35:35.479Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "831d2a605265c0c94573a20d87282972", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:40:34.589Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00df9162d595f6a5b6c02799a363286c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:45:34.915Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94769b6fdac2cb6bcc5d8c909619756b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:50:34.916Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "630387316f8e197934c04e23d826c4c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T07:55:34.247Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55ce6223586db40ff7f1911c71864e76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:00:34.803Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0f91f0cc5e10641095a2411ac2735076", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:05:34.249Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "358a6668352b4822a9a2caf0fa71ef1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:10:34.271Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a988d93e332042958162fedad7f02712", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:15:34.497Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6228249e3e11382238d753d810d2e07f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:15:34.497Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f87e8e3e34dfd1c73befecc28322ca2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:20:35.146Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27e6a13e91359cda9514eb315f9c16b5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:25:35.1Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f69bd5f33d1977c2335cce00beab5c36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:30:34.997Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a50bf6f79c1174d3cbf87a5d93c2be3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:35:35.095Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d700d2b75cd554e9d2bc007e8a6a94d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:40:34.857Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e635768594c7c7ca99b5bc622f1f134", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:45:35.054Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "733074c92afd8e5b9b91a29935b4f1b4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:50:35.216Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad22c5a6ea20d5f6d9cba757f73b4ba3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T08:55:34.953Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9c5f7fc6e43541b6c76d7eac7acf7923", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:00:35.14Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d026a9e4ae25c8f090e435a14106a7ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:05:34.412Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eebc810e33c496d8315b2c3c0dc1760f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:10:35.221Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a0b2292e32566f311ca33c63a5e7658", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:15:35.295Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "395634f8e31b06cdf15711bd12ad5da9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:20:34.629Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cee7990ec9cb379053fe5ea20eaa9f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:25:35.368Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad64a9925c2b92164a4f7399e4d17e34", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:30:34.646Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea6beb7ea629af1f43df446e85386d80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:35:35.361Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0340ff1038a009549f9bf5073a961f67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:40:36.123Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2f9cea45aa71269ac4be55c419c2fa1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:45:34.792Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bded2a69caa70c35babaffb6e778aafa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:50:34.938Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27e0eaae2e3f3badd0af47b60ed462be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T09:55:34.897Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2a45e3322ca465c3feba5f6585d7e71a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:00:34.76Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cc88cc3a2bc51bc56cef7f4fe23f5d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:05:35.359Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f851fb3f5503c131b90f6606a5b457a1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:10:34.684Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a05a1aaecdb72ffcadc8f2d03e227475", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:15:34.898Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8f3f261c9a5b5a1f4a28a4be233ad339", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:20:35.378Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bfd635f5edff1b9c7f999631681811d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:20:35.378Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "068b79490fd430bea257541972246a52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:25:35.387Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77f1477ea677bf2c8b3ad2cce7fd95d1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:30:35.226Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4abd327367b92eefc96dbc0dfa8356c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:35:34.827Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc7089b567edfffe8177969e64d10566", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:40:34.884Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba5974382e7aae2e6c74b9d70a47beb7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:45:35.423Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "17bccdf6e042734dd20a971f563d89cd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:50:35.294Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4dd6c39f0a0c38e292ef0f10ea64061a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T10:55:35.203Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "994725be98dadf475fccc90b5d666731", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:00:35.268Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d437632f5fdba3f9610c3ac787ebcfcc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:05:35.251Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "027626842f9f6f1ffeacda3a6e1f5b5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:10:35.329Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7b1a0f102b7ca89b48c2da4b810da4e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:15:34.895Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f4a14ee5d8665bb799faa38a8a06370d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:20:35.2Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ead745ac19f7580bf1177879451d096", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:25:35.617Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c68d83b4d80edd99ae5ca587a6ddc67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:30:34.875Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00641b23503f261235a4fcad589b9a5d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:35:34.987Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9bfa0b89f71abe206fdb14d061b0f5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:40:36.686Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3cda6737f05f4f242d5f6e28f7f87b4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:45:35.573Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c0401f346d6cfa85b253cb0b0f80a63", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:50:35.724Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a157d7728f207672dfd5490419819af", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T11:55:35.586Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9a51e4427020332c59122fd26387099", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:00:35.736Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5dd53d86efaa27af24f265759db4f41", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:05:35.002Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f530617ddb66474ebc2c446869e11fb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:10:35.509Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f4cfc01cecc96d8e561d0e0a1c034ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:15:35.261Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52321deb154f57afafe44e382369fb83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:20:35.112Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "91f6061e7a8940dad3dc6722dd3bcb1f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:25:35.19Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1688d20070fd74730b1fd9f52f1eabc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:30:35.242Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3c2e3057c1464da274da8b5a82279c87", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:30:35.242Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d2714a2bf08644e2a85a5de5ac4acc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:35:34.948Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f6267e34f3af20567e8458c91615818", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:40:35.857Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffa99ef5adbbdefa404992ec5718cd51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:45:35.537Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba52bc8f8475e3a701a2eb070c911a4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:50:35.567Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c59231f69383bf23cc52c0fc235d12e3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T12:55:35.744Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6ecee57706a7d4eea4ed1ced8c816ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:00:35.942Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e40b0bf40cba8e68b5f93c051200492", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:05:35.233Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "725006acd7071b5c8e009e010a47c43f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:10:35.842Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3d0e7867208981659159fb7daaf54135", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:15:35.721Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f62eb8e5f01e247c5c359206a459ac5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:20:35.327Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ec8c9d659fcee15851c9a5a342fc2ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:25:35.679Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9f47cc3cdbf6ed9830d18401476fa99", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:30:35.771Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18134c6ae916647f1cc0c7d305fe0e84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:35:35.752Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7aae6e5a0e18deeb36dac771b6b12b5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:40:35.729Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b6093d7a1ae8c4cb4eae1f9b2ec07f74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:45:36.557Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25e615d0e148c7756ebe1222ebfe0285", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:50:36.055Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62207a32a3fe257fe94571d2b706d7e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T13:55:36.077Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa0f25efe4f5f5dc955df102b2d6a070", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:00:35.974Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a82e20a031801de615238f249a95e7c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:05:36.011Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f6e11eda5ec36c514d65520591316ee7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:10:35.869Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "50133a9175a62ec8a3ea8928b597c9ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:15:36.132Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0d1e7a9662b80280a0a6ec5c8b545d4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:20:35.834Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f97dd837bd6b94fb029a3f31b0a66573", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:25:36.166Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7f72c7be8aa2eb139b7ad2924fbf1782", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:30:36.141Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "36d8980cd968145ba25cfee2a55fa30e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:30:36.141Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7749104148f19031913b314d30642e61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:35:35.957Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ca928300137b3d179f41e6f2de846b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:40:35.443Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7894d93589cc0c2effcb65cf64b7c3b6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:45:35.488Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95ad6c42eba6f54152f06b657dce9815", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:50:36.109Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e176712224164dc5651d18ce10df3611", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T14:55:35.962Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ffe6035e6163931e7bc7dfba2f1bf19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:00:35.873Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4faafffa586843e17f7744a32e81175b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:05:36.097Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e96a41a95a93873e3de38439b31de3d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:10:35.928Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d509d77e777f8b942ec4f038c6288c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:15:35.476Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e7e7fe6d160e2097f20d5ff15d7f10e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:20:36.41Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7b6e238dcd1e77eb148ed15e1ccf498", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:25:36.12Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "babec8040f0da58726eaa77fa36dfa10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:30:35.802Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "872d37778e212f41d5aa5ab0e56cc20b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:35:35.562Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a40d34741ff1c8786de272fca1d45703", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:40:36.302Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0becdb329a32b90e11db48730003b48e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:45:39.95Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "18bb4785bd8c4f2e12b826ec47a66679", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:50:35.753Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d0f6022972b24852638822d44105a13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T15:55:35.744Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cc206fc8bf97990285cdc93b94ee3873", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:00:36.244Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a0043ed2ad3cdd98e628f4053f2f2a3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:05:35.555Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41baa5a46435a19709312556ffbb69e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:10:35.655Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ef53a8e40136a1929fa1ccf87ddd4ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:15:36.589Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "48739c9d2a68cbb4eaae735eac972ff2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:20:36.245Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e00fac489b6b34461df231d7da0b23c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:25:36.277Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46b976f613eeeb8237dfce0118c93507", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:30:36.094Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "31f985c5431a9c60a1467c7e0367222c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:30:36.094Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "34b0053b1326f2d7e71265a00a387310", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:35:36.327Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "650b1084945ec929ecff21223b798379", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:40:36.358Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95764f1b4a59f5df913c67a6d13f2479", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:45:35.739Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cdf0bad7c8f3ce7af83b71b09e1a0d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:50:35.747Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66666aab6eec609f9e0fc0822841f994", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T16:55:35.811Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e115b47169b40b36a82a1411a919c40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:00:36.617Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04f3a50d0ee4d8ab5c1639f1ad91851a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:05:36.617Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7bb6b7f2a411c61280f3667510a4a421", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:10:36.168Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3538bd9c69c1b9a7e26f228548348d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:15:36.098Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4113b1d51dc240cb6a0d2142a19fca1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:20:36.559Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9e879a8d848cf4361680f2fdc91347b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:25:36.505Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f3afa4354e16c8dffe4bb9aef43b78fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:30:36.602Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "728c478b521a176f6d9dbb93c0b21271", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:35:36.444Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c9764d33ee700b1b94ebbf578199db2f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:40:36.671Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa1ed46101555ed652429b921db0c601", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:45:35.956Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b74b4801696b3b9aa64bbb93c41fc5f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:50:37.945Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89047a7c3d47af2cdeab60ab76a0499b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T17:55:36.145Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba89778a892435112e5efed6bc342bbf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:00:36.448Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89e195fa31d8e33ed79a9a97e473032c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:05:35.898Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c254068928e52375161a45dbd55b7d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:10:36Z", + "quantity": 171.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ba75e0fb65a52992e53d238521492a4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:15:36.548Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f16eaf2afe163da096595ffa8dc8cd7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:20:36.781Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c811a31abd2d1a457c448975d968c754", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:25:36.592Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "465d045e110bd0db1a106347dbcc25e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:30:36.856Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cf02bc7fc48fcf8e0c51dd245251e32", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:30:36.856Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b6c4c310b1c288b9d7657faff3cdbb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:35:36.465Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3b960d43bbab8ee098959bb47b00a47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:40:36.125Z", + "quantity": 157.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68d385219d91028243be7a6f07671a76", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:45:36.516Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "530a3b29e0436e3fc3e94df720cd6a0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:50:36.9Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b59e45ce598729f1ce18e106f5abccc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T18:55:36.745Z", + "quantity": 142.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1eea70d2bc63702aa6e29ffd5168027a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:00:36.602Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd7c55725cef0ca4c1c45136e58277ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:05:36.62Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c6ae1e92f835a49d9762c9d19e82d7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:10:36.312Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2286b1e9b8e01263628bb8137407b54b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:15:36.344Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57e94625505ed8522c88e711624234d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:20:36.893Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "792f9a71374c88eedbbbe062e85ea48e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:25:36.636Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f558b41f752cb16bea5d6c3d4df21728", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:30:36.363Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e777f95b51323bb804f9263ad0a44c9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:35:36.231Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dd05679b4861ed2a1dbcd7c8afa372f5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:40:36.949Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7c2145ae602cdeeb773f34744ef912fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:50:33.41Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "348ea9e94d5fb78ed366185b8789b282", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T19:55:32.177Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a0a1fafaaa03df8291f92999645e5dbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:00:31.761Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a67c6e392e1aec1cad46f33e1430749d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:05:32.228Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41d599884720bd7a4cfd867869aacb08", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:05:32.228Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1464cf5f209444d2f7af997453b0e84", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:10:32.416Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e51bf9fa9ff758d1040a2a260cedfd62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:15:32.439Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c71c06ee40e3267a34f7575617c2bae8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:20:32.548Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b4682b0084d8e04202c83b8439a34bc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:25:32.026Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70b4b7a4d7a575b58582b36c908f614e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:30:31.982Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27357bca10e877b8d58dc732c917e74f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:35:31.763Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04c4f3605207ad6a4ef7c56ee918427d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:40:32.435Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d00b11504140eafb4495f8675ae1e22", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:45:32.284Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ac1432ce83835f5784d8465cd13f1ede", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:50:32.89Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0761ab938e76001cc49d26fb8ed0202d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T20:55:31.794Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1a31f35f9cf02e61d556796177c86a92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:00:32.72Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86de4388be10aa0484d18f0792fc8d8a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:05:31.933Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ac21f31c9ca7b538eb888be941d5583", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:10:32.203Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69b2b0ade79f7ee585cc486a8d04cb10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:15:32.009Z", + "quantity": 87.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39da802f14ae179bc16150bfbd95e5ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:20:32.065Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d460567c751c3d5c1bbbaafe9546c90", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:25:23.793Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "01223378e5d31af028ae3a45096b81d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:30:23.904Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c39570ac8a388a99af0c79a4d8c7f07c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:35:24.194Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d86e1dae6523ad409a1167f586130f02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:40:24.285Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "507d634b82f8df75da49771fe59d5ccd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:45:24.112Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c5d7d104ef95bf501b5f10d471b248a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:50:24.528Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52571062dc0f3f96cb208480704773e4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T21:55:25.533Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c9775a28f49adf51b072dff5038551c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:00:23.869Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2782b1148d55b30cbe29c828406fbc10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:05:23.848Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32d694396036cb4489dedea34e16c382", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:10:24.468Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8ec7ab056deb23adcb5ed589168ee339", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:15:24.331Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9b3e50ebcaf36a0b7745626d014b7ab4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:20:24.035Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "170a6d75eaceae465a6c396f3497d230", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:20:24.035Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "684524ac09991b21370cb0f82d269fef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:25:24.091Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f582e1dc1cc23b3fdbac00ea6b7706c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:30:24.402Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "124a759cff22e0100f1a7fa50d66486c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:35:24.192Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbc0166b24b238914fcc0375b6e30fc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:40:24.324Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8035a3d5deeb3b60ae48933da5781097", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:45:23.88Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e7cbaf61a9229764ce9990390c6f5b9c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:50:24.378Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89dc2842e781fdd6a07e45eb36d73286", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T22:55:24.608Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5a21699f820cabfddf792fbd118be80", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:00:24.623Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70d1e6f547fcffa4947821e8c0a163ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:05:24.573Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84a5a38c17d936817dcb61d5cb95213e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:10:24.625Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fe46906d93a3a12b6255e3d6c80c116", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:15:24.385Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d8ec4882e017e0655607464f2574226c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:20:24.478Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51622954f297762dccb66a3aa816e94a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:25:24.148Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5286aefef57fa4b664c3cb6865ff54a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:30:25.155Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "45494a21b716269195301e0995161bd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:35:24.841Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "20ab14dd204cf35f7d02d253f4d3e779", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:40:23.964Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b2484c6df3325deef0fc705b16def48f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:45:24.586Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ed3d2aa248617b4bdd144014289a9b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:50:24.534Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb702c51e0226257cabc134dfc377d86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-10T23:55:24.044Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59dd433f04b908b97ca25496597ce60d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:00:26.403Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "199b2796c78fbb3fc856a9881c25db86", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:05:24.301Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89e954dc3667366b98d638e129972f1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:10:24.065Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00f2198cbf24de5f27b7c12c2fae5cf3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:15:24.199Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cff9aa6fb92342a2f804442144211511", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:15:24.199Z", + "quantity": 75.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c989528a8912b0890d451ab57270557", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:20:25.054Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6761fb611ee9e1da1b78bdb86bf069a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:25:24.776Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fac0fb335cc40c56b3d337c81cd33413", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:30:24.059Z", + "quantity": 77.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9e367c921a897ba6d884ba0a100c5291", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:35:24.842Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "073e6aa096899deaf061adde7c2e0250", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:40:24.097Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "887204727a5b67647111a314edb84821", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:45:24.735Z", + "quantity": 78.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "43cfa880363f60d547f1f12ed77e44f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:50:24.682Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f9df93ee34ba6945186c5fc85306f3bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T00:55:24.411Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9932f0d265e26d147dfd884ee0e4efca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:00:24.307Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c06e945ff05ea615c1583f5fac3f1fdd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:05:24.818Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "884f2e442288b7b93fd68cc7e01e794b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:10:24.945Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8efb898231077f07e664ed1105d60bc2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:15:24.783Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "65a2af6a6feaca070c34b2c34a816eeb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:20:24.321Z", + "quantity": 80.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4402e07aa7ecda41db508c011eb65033", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:25:25.283Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ae97cf6e45b0698192c489ae4e03605c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:30:24.883Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ac6eb7c029fd119b341508d4ee9d268", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:35:24.364Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "acb2f374902bbb04e0c4f8a7b2d6cc8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:40:24.843Z", + "quantity": 68.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d1503653ccde8cfb8dc1ee5a3f24989", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:45:24.707Z", + "quantity": 69.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e19af098bea1cc697adb1a987b788bf1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:50:24.766Z", + "quantity": 79.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21c369d02623b3fa4a5ef56391690292", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T01:55:24.642Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "375b43363dabbf8c5b329f49eecaf77b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:00:25.49Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62b1b789f225cd0024c49f3e70b76516", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:00:25.49Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfd9743fcfc11631ae271c84e77e39ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:05:24.446Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "13cc961c1ef595a6de6f7afa4322f025", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:10:24.335Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5f6d442f34f9ee42540fcb70e3a8d561", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:15:24.849Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "829491e20a454b3004f3bed4d7381074", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:20:24.481Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "876cd227a49f5be34d0f6ee0b556d054", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:25:24.66Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d541834f1f184e0b892b580406471663", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:30:25.443Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4509d7d93306d13c940435c587682336", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:35:24.99Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "823956fce086db46371c78204fa229d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:40:24.961Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "905bfc1981bbec6fe3b03ff09d667ea8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:45:25.471Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddb5eb4fab501d76b8d138df1fd3ca02", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:50:24.728Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e6002903192e7f78ff5ecd7bfb238db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T02:55:24.919Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6e2f0aac614d3a6b5963960c4924aedc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:00:25.327Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6f0bb01c4ad4add19d2cbab058b7be5e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:05:24.616Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "780129f3517ce1c03e415f95ce0a8eae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:10:24.529Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "976102d26a6dcd04fb47689f39578dc0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:15:25.431Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e72d3ddf805788b3519b9c325d19a2ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:20:24.542Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "faae9696351ecd789756ac37a403d7c1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:25:25.161Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7252fc12968aee3805741c2c431430cc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:30:24.936Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c95886e85c4e73fe37f1e807860c856", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:35:25.174Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "86ead9b6ea609df742c6f1d610b5562b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:40:24.903Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "63a59f296c28ede7392bd9c79c74eba0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:45:25.107Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5fdd4950d2c1de54a559824aa282a173", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:45:25.107Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6cd1a43401e7ab260efcb3c0701572b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:50:25.485Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4edc1cc0beac2c53e8d151941bc5512", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T03:55:24.935Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fa9ed8fe40df3ecefbf69784bf148d35", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:00:25.558Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cd2de5b0d988b219c2775fb2f0f9a13", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:05:26.309Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bda63a1eaa48851c1c4dee3097c8e98", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:10:25.146Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23cb72bdf8e1b4222191240d48057ab5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:15:25.017Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "61e7dea44aa51ed36a5d8b16c471d1c0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:20:24.935Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8d6ec9ea1ac2599ac26495bbf78314c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:25:25.541Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb5f2ad5733c3ad4eeb472866b9ec145", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:30:25.174Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "98e0b65a235e21d3ce349b0561047eca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:35:24.807Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0e90e3908f83acc671bec0436b68e88a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:40:24.956Z", + "quantity": 140.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1e7bf3b8de73298a6a554377ed52aca3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:45:25.632Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1003273fe61b592e44c3d63362c7156d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:50:25.595Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76af86514c16c7ee58396b6d95009a89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T04:55:25.574Z", + "quantity": 135.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b9bed1dc1e02ffbcd85e759c2a6c0f25", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:00:24.946Z", + "quantity": 133.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "525ad33f7c4743efb32b0a5d1639c969", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:05:25.516Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9733892c7fa2a55d2e256fb0b653f9df", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:10:25.365Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2ec3d47f2fa43b69856f7756ad9cb6d6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:15:25.239Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b3c2b710cf37f5c18a64adb1915c39ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:20:25.608Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7077b648f10da508a975d70187e94841", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:25:25.109Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21890a6ed1d9882c2275b412d0d397d2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:30:25.707Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "598890282b910eda1ac7eba59e6427a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:35:24.941Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b66fc007f38aa5c6ed33a52027cd7142", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:40:24.855Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56eee4dce92619d62d0fd2d1b2043569", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:40:24.855Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef21d76a158e312d8bb2ed2f2f947600", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:45:25.133Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "831f106b2923f086442233146bfccdbc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:50:24.969Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f2038d9b47f60f2c84fdd6e12531b0be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T05:55:25.468Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "da76a24efe8a459583d86194da781319", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:00:25.543Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "130222e221c22ffaa39d3d833923656d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:05:25.187Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7ca31829079499b1f96a88f130084068", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:10:28.316Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bad5a8da053ffb7a9f42618f2e0d0d62", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:15:25.268Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "71cae89fffca93f6df53971066462231", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:20:25.279Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5edb4ddc17e54a0e5e48440b168bbea1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:25:25.751Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a13f94acdfdb94c686453232325e8d66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:30:25.218Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c8df53e83495f9dab6a75a2ab114fc29", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:35:25.804Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94c58bf19a7092157f38549b01f63786", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:40:25.774Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "db47bb3774d2bf681b324665152fc245", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:45:25.976Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d89dcd0c68c2e726546930221b37c2d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:50:25.185Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "742b96380d95470ed37cb7fcc06197be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T06:55:25.736Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04126b80906dda0d1d176d9f10be17ca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:00:26.063Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b5845ab81520ad365e03f80c55259be3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:05:25.656Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "622bec80e5f3d0408d34fdcee90dd153", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:10:25.804Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fed10d3696aed687702681e193ee6592", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:15:25.7Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2604632641d46a3b3bea143a819e3116", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:20:25.87Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "010bce4791830a44b63f6f1aafafbf60", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:25:25.534Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c08d14ab89fc8c45a490f68708269a8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:30:25.748Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4ff76c7186d8dd45c51d043dd25ea91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:35:25.361Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c5c15be87101af725af78f4f417c920", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:40:26.07Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e36be9aab4c14c02528b02a3cf84dfef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:45:25.367Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cec96951c0e6f4b39589f0c9021b3cd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:50:25.97Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bdf17935e8fd577e57724cb570c3d2a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:50:25.97Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ec6513d2e5eb369efa3c8594073569c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T07:55:26.179Z", + "quantity": 86.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35278e3d216e7b1a6dd5ed4b730a5168", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:00:26.22Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "038fff91a7b8461636b4ac28842147c5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:05:25.732Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1aa4b1e8494801c7e851b6369c3f8dd8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:10:26.487Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e30eb17074681f5705b9d44301c765f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:15:26.012Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64072c975baf77631ec5b5d75c875bc7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:20:25.585Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3487dc17135aa5ab6941924fd10aeb89", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:25:25.877Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f96d438bb01c3cb2af3f93e9ab185a4d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:30:25.829Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "12bb59bb35d535f8eeafb17a42746ebe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:35:25.974Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de2f90a34f051d91163efcfe68665d96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:40:26.057Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2baf1b6ee50324ce879a7b66a2c301fd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:45:26.115Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd0d9271e51959bb2e79c9afa5949f2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:50:26.3Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f5dd4a608239a523f413ffe83532f0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T08:55:25.866Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fb8bb29c75573aa3289dd4d399534e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:00:25.604Z", + "quantity": 93.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ace55f7c3834d41ef0b9f8d9a1317904", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:05:25.885Z", + "quantity": 92.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "436c65466debc3a8f5a682687b691026", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:10:26.383Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "78de613a619da39b64a87fd17a1f5217", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:15:26.299Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a22a007557c67a5028b1c0ad13723250", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:20:25.708Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0981cb39668935b14f457e1b9851456f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:25:25.564Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "62ba63117144168966c99dfd7c3e913b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:30:26.205Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "963ac477bb4bf4b239a7499f10649693", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:35:26.124Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7cace797448e17781a334bb33eb57809", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:35:26.124Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc0694f19509779efc5fa7427f04d120", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:40:26.298Z", + "quantity": 88.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82c32ed0fe4765953a112ddd4056145f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:45:26.136Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edd1edcd32adb882ba24d43cf994547a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:50:25.668Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0c18317141408e70ae7b4def6caecdf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T09:55:26.328Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "583f067d579ede22c4441b2bed364766", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:00:26.391Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32514c2994c2608304f72f03c4546ad8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:05:26.416Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dadec59a424e8ff93452620a6bb634a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:10:27.205Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3262d8f3c93b5a94935e79c87d5389d5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:15:25.841Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "004e5122abad4ca7be217e8ce444cc55", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:20:26.323Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdf6cfea8270c83e26aa06eb2dec7926", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:25:26.482Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5eb19e5afe0c9493e123d6b68d9fc366", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:30:25.973Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bb9e7ed519c0c9778cf0e8854ca2c830", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:35:26.342Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f41815be73840cbabc621d1b444dc452", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:40:26.443Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ef546346dce19c5812456a38b40c040", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:45:25.964Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b82b6353c5b59c2663283d46479ceb71", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:50:26.718Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "97ffc5fe59a68246b7c69fc9f68c8062", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T10:55:26.637Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9fb1cf14f354b0cee841ab0661c7a67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:00:26.728Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16f2c2b5e319ceb1a26251b18843cbda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:05:26.121Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b1f55c485dc638a624ce850e41e21d67", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:10:26.44Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7759e221925772160742f24ebf6d7f49", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:15:26.068Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "53128cde3c5bd8a435cd2bb57b12a16d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:20:26.647Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "56b1442a735ff2d91701438dd5380a96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:25:26.169Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0dc2dca6e812622133f6c1c7239e7a61", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:30:26.15Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "242b2e65db687cbcb4e0bec55ebbbb33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:35:26.688Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "15e237fcff189b326595e5811cf6e961", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:35:26.688Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "172e0df4ca0675cb97430f57aec89885", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:40:26.057Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8663c70ffe11e856f2adfb62f87178bb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:45:26.204Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "feb8f504ddf40dbe4e3a3a641371901a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:50:25.99Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9fc439c2c6294c6f2367c4bb1425bd88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T11:55:25.969Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "588b719c6f57858aeb8ed9844961d1c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:00:26.578Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "46decea05da35c19304a94e49fabc905", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:05:26.961Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87aa86aadef1c21ae6aeeef929d6f143", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:10:27.27Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81c29723c76df55de64f6f5fdd50089c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:15:26.712Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca816c4711ae03251161efb3b8cf8f12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:20:26.823Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "00d248e58b2ba7e0a83e446b0a758150", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:25:26.671Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5200be5f94c01576af634e8de096812e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:30:26.178Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "16ec29fc719552b4fa77e9bdbebc48eb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:35:26.409Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "42c89fc718c3c3b0a2be65f51134122c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:40:26.457Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c6fbfad980250b47e0969ad1fac34a88", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:45:26.156Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c57a0f0e2e7f1258139591a340b551f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:50:26.506Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ee3efdc2cc963e9415c783c08d31206", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T12:55:26.766Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbf45f777d3f837e34209651367aa76a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:00:26.884Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d19c74e8290d1c457b42b54ba9514b78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:05:26.539Z", + "quantity": 100.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e0dacda47083ef19aac312b838ec1b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:10:26.345Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1efdeb258709c51bbe723b9eae982758", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:15:27.129Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "841a17829debdb8e668f21c7f11fcade", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:20:27.056Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e0192d0dc262a7421db81f1a41df9878", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:25:27.148Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b976791ff75480620bc88ab6dbeef07e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:30:27.118Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92aab3c5e8c885d8040ea722cbe0900f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:35:27.023Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d7f07f4684c89fadc96bf21107ab92c3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:40:26.414Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3b5f652215e774c17b86b0fa81fcede", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:45:26.443Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1531db7fa5b9bd7a585b60d568a4a5db", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:45:26.443Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fea55917db3c6608650e9e342e071864", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:50:26.544Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e2df4c1d397d8b606f1a896b459fc54d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T13:55:26.964Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8287c928cdab8324ae1fba2543f25786", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:00:26.345Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f324d56beafd777974050375e9b703a7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:05:26.822Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a89293296b4f81197848b4088b7f6504", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:10:26.9Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d50e38a05f8e036790644c4b240df681", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:15:28.993Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "741be65107571b956d3706e9277d5d31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:20:27.191Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b8e277e91a7856f3386fa0bdbb5edc4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:25:27.151Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c02c7a00fcb3c9dfca220c525f18668", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:30:27.301Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2e41eb9ba997f9369c015576aa5944e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:35:26.527Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "760e829c99ba8893070fc896d51c8d31", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:40:26.733Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "378e2041d2d7e3dbaa051be49d2a19e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:45:26.921Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aa2f30b5e4bda2c8c23027231cb5ecf4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:50:26.602Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ba000b6eb56ce3d5c08ebb8620ee904c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T14:55:26.59Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a99dbbc8efd07fde7f67b98b824eeec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:00:27.185Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "757fb4fdc1b4b928f0ce2d9887b6206b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:05:27.163Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "044c8e48e83ff8f607bf7506959a6b3f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:10:27.407Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "28d1290ac5c595581fe10a4486660630", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:15:26.876Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2dfcf887e205b0b2da2b46cf6c2f0fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:20:27.225Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c251a587e5ba8c62efb00a4701fdb588", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:25:26.613Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0402d03033b6bbdb165ef3a014f5b12", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:30:26.536Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3ce96292ceaa0e2f7bcb1f120a0b4c93", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:35:27.428Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41abe9af81acf2280b926dafe83b94ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:40:26.879Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad46a22d16b431f3960480c40e622162", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:45:27.037Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b518e870676bf7d14936c0e60991701", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:45:27.037Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef4e3b04ed89abdfdb433695b7a6da9d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:50:27.147Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4506a95c9666c6e443c0601e91b1b7e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T15:55:26.824Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "80976ec8f80e6dbc576c72a69d414183", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:00:27.09Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76d88bc1d38e235cf6355e2aea08c5d3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:05:26.833Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b3e4cb3c3415f2fe3a7e42160d39ceb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:10:27.412Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3b510f155803fa418402bc63955eecef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:15:27.343Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b76306df9eae32eacc0bae21c864346", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:20:28.29Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "293635a7bde79368987260d3dd2d3285", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:25:27.449Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c77ef6bb890d117ab534ed930d3d22ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:30:27.285Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "abb9d34580e3b5f62266ba789656765f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:35:27.262Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f8ac8f07bb033b99260727994b722549", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:40:26.853Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "72601d321932ae100888f52179f3a2b9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:45:27.018Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "de6ecaec375ca3b31e8018f56029da81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:50:26.846Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4d7b53695b94d2acf43dd69c543e4f00", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T16:55:26.991Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "100a3b574b583f7ce5c2c94898af9756", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:00:27.707Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "59995c8effd1dee8761ca5561281cd03", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:05:27.801Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "820fe90cc498daffab32f08650569c81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:10:27.509Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "900611aeee4fc66ef62d76f8efe2051c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:15:27.486Z", + "quantity": 118.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8fdac87329591e4cafde66050076e2dd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:20:27.69Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "347355d19c6de580844c2f39e52a1d8f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:25:27.637Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb53f28f02afbd8df4be37f1f4f59a85", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:30:26.814Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ced95fcabeae869ee71a73f6e428a207", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:35:27.633Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "29dc4015605287066f93c847a8af947c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:40:27.172Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0651ca21469463abb8876ee4f13f761a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:45:27.072Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1f6225e48d205dca4d2098b20307de8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:50:27.74Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b4f7c2384da6cebc50cd8a1174b9f74", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:50:27.74Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14f5be0d5fb30891974f1abbe18a30f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T17:55:27.38Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5e6614d36758508af6ed477736f482a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:00:27.697Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4edcbc513994d537b2668c90e682011", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:05:27.542Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a06a80ce9a6afc662ddab48111c8262b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:10:27.072Z", + "quantity": 132.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52fd0d37069d08b0ff678c29d85b5295", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:15:27.828Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "edaffed59257a62be3394e59069f2362", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:20:28.261Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d896e0c91b2a8aaf46f8f054b67b8831", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:25:27.173Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d45c3b5b45bbdb99c97282ad2e4fd79b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:30:27.626Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bf9a0e13c12fad11a716326e0ab920e6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:35:27.476Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14872e4fd10bc0068e9e1307777679ba", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:40:27.476Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2694476a8f5410407b7def5df4b24a44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:45:27.596Z", + "quantity": 168.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32a1376fc177429afef24eff7b19895e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:50:27.105Z", + "quantity": 175.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "529e3217e97a712736c8e0c0ef8a5ec9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T18:55:27.337Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "131fbcf3f958e3cf52b154dbf6ac5bdf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:00:27.822Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "52749db308562238752439820bc122ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:05:27.897Z", + "quantity": 166.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cbec97e6ad44dfe6a2491dc4bc3f692a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:10:27.367Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "168a006657254fe8ad38781481590dbe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:15:27.67Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9277de39a975589999a071f96183a1c8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:20:27.356Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0af87208434544d9e607f85d29672e5a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:25:27.246Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0b86cfef24aebdbda0b1e46c9b61930f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:30:28.112Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fed836afd288cdac0e0ee24312c0a66d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:35:27.872Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2885bcd46599745759e3a5d587121e40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:40:27.937Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "79545d4789593769a5e5a9247685f00d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:45:27.999Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f062a126e1411787940c1c8777d9462e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:45:27.999Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2d5261d2cb4051e644711670fa76280c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:50:28.196Z", + "quantity": 145.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f07294480cfed31f6a6b5b0e302723ce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T19:55:27.377Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6e7ed55552e787fca79cb4ea21dc341", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:00:27.748Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e42eb6f8d5455a59b509961840ac3f20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:05:27.932Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85b78cc913feef5940efe977c6098aab", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:10:27.301Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bde9279758f49d22b099d73782f89dc1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:15:27.594Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a4c2a3ff299599b007de9a81160b0fc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:20:27.932Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6fcd945b8b1bf588c8e7450c457f8274", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:25:29.546Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a268664f55bcd2860fc912c0f3a1d51b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:30:27.449Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "279f0379af621d2331440eeeb3d2b9b2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:35:27.977Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dfe8dc294d2d09bdfa84cb53c12592bd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:40:28.044Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ebfba5b39b5b19048bd4b1f22ccd5e0a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:45:27.562Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c874bd5c5dfa73f8f006bd0c59ac24d9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:50:27.893Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7569c54e1c3484e7a2cb5e4210292044", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T20:55:27.811Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "166fec094304acde98392278d05a7000", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:00:28.128Z", + "quantity": 198.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e4ae7676eee5addfcadbe248ed2eb5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:05:28.366Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "718c7a314d446e668707bcf068f86014", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:10:28.246Z", + "quantity": 193.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce04b31fb85537b6959cd446814bcdd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:15:28.286Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "598561d9fc79ac5b68b47a93b829a216", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:20:28.105Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7262fa6c3778322c65d44d2c3e229976", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:25:28.054Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "562a89c3b20a1463278bbedae0618565", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:30:27.638Z", + "quantity": 172.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1000369c080972cde25e27591fc97707", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:35:28.206Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b057947d42dd5d5f30b13745c6a1110", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:35:28.206Z", + "quantity": 170.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eb65a122d7dc95f67c223bdd4a2b390b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:40:27.716Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4b4c227bed10a4b404d1f9315068789f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:45:28.42Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "76cf4662ed81ef77f2de0cf111a0f022", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:50:28.571Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ce6c863fd7408a77bebcc29f5344bce0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T21:55:28.553Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c379aafce18c76fc988cb4cf0fda236", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:00:27.615Z", + "quantity": 149.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f85cd84b5bd4076a041f8f054de726a0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:05:27.648Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "641676e4928fc67df4a40788ffe5c8b3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:10:28.648Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a2246d2032e0a35104b5c510f979729", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:15:28.648Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "439290b86ede400f5ef1beb879e89bd2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:20:28.648Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8460e6b1cab5d0c61490c938ea74bc7f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:25:30.926Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ff31cb72bb6b3e21532c63b7c53d5971", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:30:27.788Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cdeac6e59ff290cc800a34b6f9a227a9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:35:28.467Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9cb485e30953b0f1d26fbad934a31860", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:40:27.848Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c47a4ba87e504ffe1c2073e4f8e5254e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:45:28.697Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bc0ffd6c02ec1be2368e437b9a81e95", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:50:27.831Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ddbee7801b4cf9759928a6e984cf227c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T22:55:27.791Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fb66f194076405cb5d6494bbcdc1fca2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:00:28.48Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fe587136ee03a1de5ff9410d5d62bedb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:05:28.13Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68562731bc15a1a5102385d440261b91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:10:27.958Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6bf84d852d115b838e9dd682c4e39589", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:15:28.155Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5ec2fd299801a430b6e6ffbc42a0d517", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:20:28.345Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab1f8492db2293334b1d086e7eb89933", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:25:28.484Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3fe9ab2dd7d3305b3e2faf9a2d16973f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:30:28.435Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4f7f7aa319669d1b066739d2ad3fbe6d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:35:27.984Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c43ca2e02441e863f88db5cd4cf933a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:40:28.587Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "954eb4e3c8fdb0e87956157f9a4ea95e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:40:28.587Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c013e89c6cff7accae6f5e8e1acdbab9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:45:28.587Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4c1f69847fcbf08b2036fa7bc8660e2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:50:28.05Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c2845c16a55e68f5f30dc9fe2454206", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-11T23:55:28.031Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c7fe91df61c3c40142a99c33c3769d7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:00:28.933Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ab3bda1b6c88d2269b0706cffef6818b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:05:28.462Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d1e3bce5c958227578405da555234856", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:10:27.985Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "667bd7e3ff0b57cc1114b36576e90475", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:15:28.622Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4c19e986314832c2055b44fa2d858e0f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:20:28.075Z", + "quantity": 97.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "eac2084148ba16dad44b742ffaf45ebe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:25:28.928Z", + "quantity": 99.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "19ed34ab20352036628070ca15c8f908", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:30:30.025Z", + "quantity": 95.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c2071fb890629f2f1058ae19fe6f7d51", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:35:28.969Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8095b58d285fa05941af91df5d5e1ea9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:40:28.308Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f43f470df2b8427c488f2acb3964c405", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:45:28.31Z", + "quantity": 89.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cf96ab71505c2a055650983bccfd2fea", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:50:28.98Z", + "quantity": 91.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a48478d61140a5adb0e406f7f90c182b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T00:55:28.31Z", + "quantity": 90.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "382b1e07bb5f3c19ad89f3acbbd4a882", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:00:29.093Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3daff160ff24a58fd0e36be9161fbe7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:05:28.386Z", + "quantity": 98.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad8e6e8f4eea5d02237e6357fa909ceb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:10:28.383Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83f5141234fb56f8173a2280d2d5e80f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:15:28.215Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d226c6b1b7f11d0aa200f97f624e0b54", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:20:28.746Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "993fa976b4af766d11f246d655024e1c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:25:28.66Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "69df85452803bee68db3be8bb0b4cb44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:30:28.884Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ad81f4c3cfd5da195978f5bb73869381", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:35:28.364Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "132178ff4497c949a9b195e83efc7145", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:35:28.364Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35821eb7dd35de13ce4184420b55823d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:40:29.072Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "adfa0a7450751cdfd22540540077ccda", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:45:29.127Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e3c293a61a74cd8be63f32d48b749d58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:50:29.079Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "541b405c4547891bebab8ebc76928e8d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T01:55:28.64Z", + "quantity": 112.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc47e825458eaf2e04e67cef36eda83a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:00:29.307Z", + "quantity": 104.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b875f520fdc70c15ff25ff805077a20", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:05:29.142Z", + "quantity": 96.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "32f6dffbea3e90083608b95e70488544", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:10:28.684Z", + "quantity": 81.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e875941ed230ff58305212176f042239", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:15:28.726Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b66c74561d7763b8abbedf01bdeda5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:20:28.416Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5424d210ac7aad1b0f4243fe15d17183", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:25:28.867Z", + "quantity": 74.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "64c72ce955ad210c131fe04ff73df3f6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:30:29.166Z", + "quantity": 70.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "81ea5c2153927c6603e2707c6812f398", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:35:30.787Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e84632022c7e1acffb328e958de96f28", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:40:29.864Z", + "quantity": 66.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8eeadb582dcfb88bd026338a8c75bb21", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:45:29.043Z", + "quantity": 76.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f140b046bdd26a60f9f24bd49379bfe3", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:50:28.658Z", + "quantity": 84.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c014a15125a3a3e351a168c9b11779fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T02:55:28.67Z", + "quantity": 102.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "269a7b55053e79bb590819681e9bcc40", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:00:28.994Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "159e4730e60c079b4b34edb53961794e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:05:29.107Z", + "quantity": 143.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "70304bdbd42bf7ec62cf972cefaf73ec", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:10:29.281Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8e0a74ceb24ad9bf51094b5bad3533a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:15:29.005Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a4e3148222a56e47d7fd8874b67c368e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:20:29.435Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55598e570750f8e76045ebda54c5ddaa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:20:29.435Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b86907f15f0b74f0f749ab980094e2b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:25:29.139Z", + "quantity": 160.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "04679b9730f68b4ea99be6d7447a89f7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:30:28.642Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "831f251d798aa8e0dfa9936a51a08426", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:35:29.333Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8b766a7a869076acb60de660811c8be4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:40:28.993Z", + "quantity": 159.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea869ddd293b7d45dfbbaff27a50a857", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:45:29.567Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a9975dcdb10765734d07453cd956f1ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:50:29.022Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83435486e62575d0cd936caff0fbd98d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T03:55:29.223Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ac7047bc02be89a1758f1b52e52e2d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:00:29.29Z", + "quantity": 137.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "74a7ed5e497cca0c2827caafd4dcd698", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:05:29.521Z", + "quantity": 146.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "372f00efcddbdf281bcad536e1dc51a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:10:29.325Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a1643a43254e7b11016ad07dc07c95f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:15:28.968Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a265173928f1680d2bf7486357678a47", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:20:28.699Z", + "quantity": 173.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c7d9066ecc1e465d17bb0ea81a28bf04", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:25:28.818Z", + "quantity": 179.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b50f12c70dccf97c1b8f3f4b5089190", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:30:29.226Z", + "quantity": 177.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "68b430b5a5b2ed26671883b44f0026a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:35:29.487Z", + "quantity": 178.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3bba16b73346557931932f944da7fd7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:40:30.565Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee8c1115b13b9578393de831682df107", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:45:29.172Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4c5a37c4b9c0d5eadcefd32f2da567d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:50:28.809Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "24605e562793b1c01f71c72704e3d0c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T04:55:29.436Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "87e352211ec5b280f1372e2b5211f6b1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:00:29.021Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0db35fc7a920ce44517bf7fee633cdd5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:05:29.398Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6ad841154162745464f38bb824f3efaa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:10:29.546Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37e689adf3baa6e01943b87babf8e8bf", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:15:29.694Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4091f6cc286751dea9adc35b79f7ee91", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:15:29.694Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3a3a8eb965d94c5a8377241b8b7d2a43", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:20:29.675Z", + "quantity": 204.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1c860436a8d5fe67434fd12bae7f2d5b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:25:29.755Z", + "quantity": 203.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8c54dfc91c66b79b8cd2bf0e9508362c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:30:29.094Z", + "quantity": 205.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ef8ff431c543ca6c8d453828831082c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:35:28.944Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2b4e7b36fe3c1fcc4cd25989f6a25271", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:40:29.217Z", + "quantity": 195.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "744b2162b2b74d79880a7eed961ef102", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:45:29.483Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a3f36fba6d54fefe12dbcf66d8ce5efd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:50:29.332Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f03ddcdd614f1592a3a98e088cebde9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T05:55:29.462Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95e066cbb431f53904a7ddad9ac61240", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:00:29.444Z", + "quantity": 191.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b7fb3a8cac2c50d41b190b5c959162fe", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:05:29.591Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "426d910d10838906c2d5aeba76c70b0e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:10:29.65Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e87eb12b07bdce2417028f207b5fa93c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:15:29.725Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4fb75637e2d66653be6e914472f8b99c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:20:29.447Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "142f0d8df782963e8b71d334e4ea256d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:25:29.085Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "84ff180583e4c61a9abfb69073f2aa92", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:30:29.367Z", + "quantity": 182.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6a14ed57622c2c8ca307786fca8de05e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:35:29.125Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c130dc3e2020683967e6cc216d35233f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:40:29.964Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cb17c29fc8c796fac6cdfdb515a1d508", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:45:31.051Z", + "quantity": 199.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d5dd2a4471f13a1ea135acbcabbe2ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:50:29.196Z", + "quantity": 202.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "010f5ae6464ebff369f7f4966c777e27", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T06:55:29.468Z", + "quantity": 206.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc49b068d0560b727f643f1f3ccd3c78", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:00:29.319Z", + "quantity": 200.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "85a4034f2146d2e622c6c44571a0cbb6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:05:29.324Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc5eaf140d0bf9bd5d66cde87537e251", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:10:29.429Z", + "quantity": 197.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "66b3cac67a0c992a82e7c73b9907681b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:15:30.092Z", + "quantity": 194.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "201c65f1d540f21ad3a795c2eef51036", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:20:29.249Z", + "quantity": 188.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5bf422828741972d9b8b46d93dc99458", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:25:29.391Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd5fea8bab033184692489a6e7872c37", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:25:29.391Z", + "quantity": 189.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c52a6c24ebe0507113cf992184007c19", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:30:30.088Z", + "quantity": 187.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a6913ffd61ee33d6f54b01b463f4a2f0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:35:29.448Z", + "quantity": 186.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c22e70b759e4293c1affc680175a69f9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:40:29.932Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cfaa07f693b38c6486693f41c0cd9e45", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:45:29.679Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "60bded9a002dc19624dda2c00e9dc98c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:50:30.117Z", + "quantity": 185.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "35766f38a0d9ef8a0e640e2bbd9798ac", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T07:55:30.149Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "009c5586abb5ab4bab00309b8d524111", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:00:29.392Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c0dd8f96cda5143860e4380f1b1ee36e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:05:30.05Z", + "quantity": 183.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4e6f4dad95933ba1cfae5a4282667940", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:10:29.379Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5580928c3256a924f7ee7055d07bef7c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:15:29.386Z", + "quantity": 181.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d348f14bdbc54c0284e7dd5e1ef6d949", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:20:29.926Z", + "quantity": 180.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6c0b81fec734000a7dbc9ed96598ca81", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:25:29.996Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "14bb63fed83d07e8085e0acbf2615276", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:30:29.752Z", + "quantity": 176.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b895b4b146409a2f0c97bbb72df6d83", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:35:30.109Z", + "quantity": 174.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc8cf0443457d4ecdb95336518f09a6b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:40:29.429Z", + "quantity": 167.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d2ff5a96ca8ce7951329a3b7b9c4e281", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:45:30.145Z", + "quantity": 165.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fdbf4aa48820df1fc45b2b7eab021b66", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:50:31.17Z", + "quantity": 164.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "23bedae4de3dbe8007e437aeeca221a2", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T08:55:30.067Z", + "quantity": 163.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "39b586a71b23aee49404ce0bab8ff967", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:00:30.096Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d6845121381dc087259ff8538ed3e585", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:05:29.939Z", + "quantity": 161.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "513be09c09609a2b10cb3f9402f3ab08", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:10:30.436Z", + "quantity": 162.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dafa97118950fdb15696538d8f9e928a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:15:30.338Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "27ffcd61f3810504dd9594c1bd1eb0e1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:20:29.901Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6671814d209136e67a6e0953add95e24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:20:29.901Z", + "quantity": 156.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d9f3c94a00b5009d76830f3f9555f13d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:25:30.323Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77bdf3b0f2027b8f327d11fe4be0127a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:30:29.71Z", + "quantity": 154.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a2fbed54fb89417b57dbc2177de3cc6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:35:30.057Z", + "quantity": 158.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "a570f8d3b2b4623e1d8fb7469e8b3d06", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:40:30.003Z", + "quantity": 151.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "83f3f33a361fb739a48eedc705407bf4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:45:30.335Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7b04fe686e2b51eae0469c89558e7cf9", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:50:30.557Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9f470af0e287a3063132ed128714bb33", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T09:55:30.365Z", + "quantity": 152.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "57537931949b0d9415caa93bcab6d729", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:00:29.684Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6190c49f9277f6f37009f2e877c7edb5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:05:30.191Z", + "quantity": 153.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d4f85309af59d2745946e8d04248cfbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:10:30.252Z", + "quantity": 155.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "aeee153e92446514b19a3c212dabda77", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:15:30.364Z", + "quantity": 150.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "692f323f68a5d5738f873048ed93c7bc", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:20:30.115Z", + "quantity": 147.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ffc271e3d9c8293e369607a94bd4f4ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:25:30.126Z", + "quantity": 144.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9ae3568b70b8164fca83cc89cb4646ee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:30:30.085Z", + "quantity": 141.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc9be5d97f34973de6955bae4283727e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:35:29.893Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7248e5a35c79f14e39d2f68589466577", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:40:30.403Z", + "quantity": 138.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41d1800863f4cb5fa0ac5334e21a5d10", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:45:30.538Z", + "quantity": 130.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "90234f9e5089218b7a0a67f8f973f587", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:50:31.639Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "49ccca97b6eb9eb23467d090cb7dc6c6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T10:55:30.525Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3f9399e4780f25c5afd56d5ebfba4891", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:00:30.22Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ee0b2c4fa6d25513b9df06eafe657d6e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:05:30.244Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2621f389b1fac0c3020d0eb9cd92e674", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:10:30.564Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99713881e6246bcc54ec35d1ad8b13ad", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:10:30.564Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "7d116327458352325f4b5afb636c859b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:15:29.955Z", + "quantity": 127.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "09a39f21af44e82d0d71dd425ca9999f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:20:30.493Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ae99476d2530f84ddf3be917c3e3489", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:25:30.118Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fc2482d4f63e8567ff76bf0672c3c0fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:30:30.407Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "37771b00e01250a311bfc075c33b4d44", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:35:29.982Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1ccad2a457b5bcf90a5193019535c4a5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:40:30.583Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "21139e8e321bfe71ff62e1ce7eef987d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:45:30.472Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc1268fbd9f7a894c225c6fdb6a915ae", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:50:30.219Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "435c4d5d44c828c3f132f1aced80076d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T11:55:30.708Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e4fc83c51da0d787c09419fcc9d997fa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:00:29.987Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4ff304934e909e83418cc276c4394601", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:05:30.755Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8872e4c442a3cd22c574f5d8e5baadbb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:10:30.825Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d3a9a4bc6d2e1fe915b46aef57e78bee", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:15:30.89Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0bbbc1429b7efa7d0c654305a5ab6d2e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:20:30.409Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "793591feb80f9076dd057cad1312aa24", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:25:30.978Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5db1970d4097f3e6c8825ff271711490", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:30:30.623Z", + "quantity": 128.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "205ee2242ff97a7257bd5bf857d76886", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:35:30.6Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ea0564a65aa45fc46ed6b0c0428ed581", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:40:30.931Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4160275f32e1bfd23a72ebac11731d07", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:45:30.726Z", + "quantity": 123.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "9a8c7cbec46180934c0bdfc195b27fca", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:50:30.624Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "92527048d6b9aee6c1c1b66ceffbda7a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T12:55:32.144Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5b94020c0028ab966abd7c18efecb34c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:00:30.57Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "89fe62161efaa96dfe87db8ccb4ac059", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:05:31.078Z", + "quantity": 114.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2cf425752e08c5113d3c5ff242881bfa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:10:30.309Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "8074fe3be20494f10dc76c1fac002c8c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:15:30.537Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d47407b677080f51d39aaea03f806fce", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:20:31.135Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6dd6e17465da30f0ff13c5029bbafc8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:20:31.135Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "505ce071c0cbc0f854a4b2f97eb9a604", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:25:30.176Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fd9e4ff6780c1f612b88906f76643b96", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:30:31.086Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bc42d287eac1ed0307eba23c35cf05d4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:35:30.785Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "036306f1a8262f8286d6254441eae618", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:40:31.154Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "95e68fa1515fea52fe11056870011cd6", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:45:30.69Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0ba71cbd0baccbe3604288096d494d7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:50:31.188Z", + "quantity": 119.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f35391f4f0a0cb511713b358a4f2e9de", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T13:55:31.159Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "2c5f89242dfbccbfc41e689b1613b270", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:00:30.47Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "b8a4bddbf41e58a73157793a2e368ecd", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:05:30.671Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d0f45cec18d7f7dafe83d563b9f22221", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:10:31.048Z", + "quantity": 109.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "99e738c2dfa1b1a74a2298836fe28739", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:15:30.568Z", + "quantity": 107.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbd811d93d8d1800349644cf43342fc8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:20:31.157Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c4db2c16e9afbc24b13b9c94fcb1b182", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:25:30.785Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5cbb0eb2b16264d7b48ac25dc42c18ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:30:31.082Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "955ad09ecd6a2a9248b6461c214d12aa", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:35:31.12Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "384c4e324e13063cda236c2da71014b8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:40:30.882Z", + "quantity": 106.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "41e944b4206f0dee8d9e4afc52f57e8b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:45:30.933Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51b7713b9321868b65f3e4efd7155ce1", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:50:31.133Z", + "quantity": 108.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "bd4c129d11c3f5c7965625e65d58a679", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T14:55:32.684Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "e31368cca3a4b642c7449f62ff4d8a4b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:00:30.678Z", + "quantity": 111.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "4a9958dc56283da0ccdf86f46c2ec69d", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:05:30.97Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "ca41bce0ca13ae02f4f0a40f7f1f06c4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:10:31.388Z", + "quantity": 116.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "148bba6a11c12a745934fb5dd1e3ed58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:15:31.187Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "824aaca88bde645c7ab8ddaa87ad9318", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:20:31.187Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "cec62a84283b780682fd511e85554655", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:20:31.187Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "c78f8cac29b546f8186b74f81d589263", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:25:30.536Z", + "quantity": 120.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "77e062b460fd47d7098b4de469eea94c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:30:31.174Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5d7fd0d38d247eedb303a9e1cc8e857f", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:35:31.253Z", + "quantity": 115.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "1b088be11fa864f1bf4d3fe7ace1f664", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:40:30.56Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0c2384ee9a4f0f29b07cb3886093e2d0", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:45:30.831Z", + "quantity": 103.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "d23ecb290425ae4b4666f8429ccaf751", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:50:31.246Z", + "quantity": 117.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "fcc3e8b930c443ce167f52c925d376e7", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T15:55:31.453Z", + "quantity": 125.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e8aad818ceb1405fced895029ba506b", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:00:31.166Z", + "quantity": 124.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "82c318098a76ae014d64af65b54adfb4", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:05:31.159Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "366445c05ae43ad3d65bea0242b1aa58", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:10:31.366Z", + "quantity": 122.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "55d571be1a399408acc9a1f3bd1eb791", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:15:30.988Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f428069886ec8df6680642af48dca55e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:20:31.059Z", + "quantity": 131.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "dbc333d3958d25c89a1e6de1de55fc7e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:25:31.31Z", + "quantity": 113.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "26e7059a12d04451e4292a15b45dc9be", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:30:30.728Z", + "quantity": 110.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3e63ace23a5fd34995f13f20e6cb1ebb", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:35:31.113Z", + "quantity": 121.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "67ffc6706adade17c9ce5de074d227e5", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:40:31.544Z", + "quantity": 126.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "649772e4d63d327b8a9ab7089807c59c", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:45:31.541Z", + "quantity": 134.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f5284c77f320982edf88be9762f732e8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:50:30.968Z", + "quantity": 136.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "25d38ed918c12674b976440a059a9a36", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T16:55:32.179Z", + "quantity": 139.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "daaed1d45a32a01bc2bef3c2adbd97d8", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:00:31.258Z", + "quantity": 129.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "f7e6f1de7b21614d119559dcb0e9999a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:05:31.103Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "5114ea1d293a0e99e5069ceedb60c420", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:10:31.229Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "51696a0f3b8e97d66c33232f5b27f433", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:15:31.506Z", + "quantity": 83.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "6b5f6ac273b0f5777d5aff964253e1ed", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:20:31.731Z", + "quantity": 85.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "0a881d4399632a570ef55f00f1a5ca52", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:25:31.145Z", + "quantity": 94.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "94bf992fbdac098cf64bb50d55f4f25a", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:30:30.874Z", + "quantity": 101.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "3bb9b36847d32fa115bef3b35b77627e", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + }, + { + "startDate": "2026-02-12T17:35:31.08Z", + "quantity": 105.0, + "provenanceIdentifier": "com.tidepool.import", + "syncIdentifier": "675833d8baabd651a352372edcdc03ef", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + } +] \ No newline at end of file diff --git a/Loop/Resources/LoopInsights/TestData/tidepool_therapy_settings.json b/Loop/Resources/LoopInsights/TestData/tidepool_therapy_settings.json new file mode 100644 index 0000000000..50ede3c012 --- /dev/null +++ b/Loop/Resources/LoopInsights/TestData/tidepool_therapy_settings.json @@ -0,0 +1,44 @@ +{ + "basalRateSchedule": [ + { + "startTime": 0.0, + "value": 0.8 + }, + { + "startTime": 25200.0, + "value": 1.1 + }, + { + "startTime": 28800.0, + "value": 0.8 + }, + { + "startTime": 39600.0, + "value": 1 + }, + { + "startTime": 50400.0, + "value": 0.9 + }, + { + "startTime": 61200.0, + "value": 1.1 + }, + { + "startTime": 77400.0, + "value": 0.8 + } + ], + "carbRatioSchedule": [ + { + "startTime": 0.0, + "value": 4.5 + } + ], + "insulinSensitivitySchedule": [ + { + "startTime": 0.0, + "value": 30.0 + } + ] +} \ No newline at end of file diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift new file mode 100644 index 0000000000..1fce8f90f8 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -0,0 +1,263 @@ +// +// LoopInsights_AIAnalysis.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +/// Builds structured prompts from aggregated data and current therapy settings, +/// sends them to the AI provider via AIServiceAdapter, and parses the structured +/// suggestions returned. +/// +/// The "one thing at a time" guided tuning flow is enforced here: +/// CR first → verify improvement → ISF next → verify → Basal last. +final class LoopInsights_AIAnalysis { + + private let serviceAdapter: LoopInsights_AIServiceAdapter + + init(serviceAdapter: LoopInsights_AIServiceAdapter = .shared) { + self.serviceAdapter = serviceAdapter + } + + // MARK: - Public API + + /// Perform AI analysis for a specific setting type + func analyze( + settingType: LoopInsightsSettingType, + currentSettings: LoopInsightsTherapySnapshot, + stats: LoopInsightsAggregatedStats + ) async throws -> LoopInsightsAnalysisResponse { + let systemPrompt = buildSystemPrompt() + let userPrompt = buildUserPrompt(settingType: settingType, settings: currentSettings, stats: stats) + + let rawResponse = try await serviceAdapter.sendPrompt(systemPrompt, userPrompt: userPrompt) + + return try parseResponse(rawResponse: rawResponse, settingType: settingType, period: stats.period) + } + + // MARK: - System Prompt + + private func buildSystemPrompt() -> String { + let personality = LoopInsights_FeatureFlags.aiPersonality + return """ + You are LoopInsights, an AI therapy settings advisor for people using insulin pump therapy \ + with automated insulin delivery (AID) systems. Your role is to analyze glucose, insulin, and \ + carbohydrate data to suggest therapy setting adjustments that improve Time in Range (TIR). + + \(personality.promptInstruction) + + CRITICAL SAFETY RULES: + 1. Never suggest changes larger than 20% from current values in a single adjustment. + 2. Always suggest conservative changes — it's better to under-adjust than over-adjust. + 3. Focus on one setting type at a time (Carb Ratio OR Insulin Sensitivity OR Basal Rate). + 4. Consider time-of-day patterns — different hours may need different adjustments. + 5. Flag any concerning patterns (frequent lows, extreme highs) prominently. + 6. Your suggestions are advisory only — the user makes the final decision. + + TUNING ORDER (one at a time): + 1. Carb Ratio (CR) — adjust first, as incorrect CR causes the most post-meal variability + 2. Insulin Sensitivity Factor (ISF) — adjust second, affects correction doses + 3. Basal Rate (BR) — adjust last, as basal changes affect the entire 24-hour profile + + RESPONSE FORMAT: + You MUST respond with valid JSON in this exact structure: + { + "suggestions": [ + { + "time_blocks": [ + { + "start_seconds": 0, + "end_seconds": 21600, + "current_value": 10.0, + "proposed_value": 11.0 + } + ], + "reasoning": "Explanation of why this change is recommended", + "confidence": "low|medium|high" + } + ], + "overall_assessment": "Brief summary of the analysis findings", + "next_recommended_focus": "carb_ratio|insulin_sensitivity|basal_rate|null" + } + + Time blocks use seconds since midnight (0 = 12:00 AM, 21600 = 6:00 AM, 43200 = 12:00 PM, etc.) + Only suggest changes for time blocks where adjustment is warranted. If a time block is fine, omit it. + """ + } + + // MARK: - User Prompt + + private func buildUserPrompt( + settingType: LoopInsightsSettingType, + settings: LoopInsightsTherapySnapshot, + stats: LoopInsightsAggregatedStats + ) -> String { + var prompt = "Analyze my \(settingType.displayName) settings and suggest adjustments.\n\n" + + // Current settings + prompt += "## Current \(settingType.displayName) Schedule\n" + let items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] + let unit: String + + switch settingType { + case .carbRatio: + items = settings.carbRatioItems + unit = "g/U" + case .insulinSensitivity: + items = settings.insulinSensitivityItems + unit = "mg/dL per U" + case .basalRate: + items = settings.basalRateItems + unit = "U/hr" + } + + for item in items { + let timeStr = formatTime(item.startTime) + prompt += "- \(timeStr): \(String(format: "%.1f", item.value)) \(unit)\n" + } + + // Glucose stats + prompt += "\n## Glucose Statistics (\(stats.period.displayName))\n" + prompt += "- Average Glucose: \(String(format: "%.0f", stats.glucoseStats.averageGlucose)) mg/dL\n" + prompt += "- Standard Deviation: \(String(format: "%.0f", stats.glucoseStats.standardDeviation)) mg/dL\n" + prompt += "- Coefficient of Variation: \(String(format: "%.1f", stats.glucoseStats.coefficientOfVariation))%\n" + prompt += "- Time in Range (70-180): \(String(format: "%.1f", stats.glucoseStats.timeInRange))%\n" + prompt += "- Time Below Range (<70): \(String(format: "%.1f", stats.glucoseStats.timeBelowRange))%\n" + prompt += "- Time Above Range (>180): \(String(format: "%.1f", stats.glucoseStats.timeAboveRange))%\n" + prompt += "- GMI (est. A1C): \(String(format: "%.1f", stats.glucoseStats.gmi))%\n" + prompt += "- Sample Count: \(stats.glucoseStats.sampleCount)\n" + + // Hourly glucose pattern + prompt += "\n### Hourly Average Glucose\n" + for hour in 0..<24 { + if let avg = stats.glucoseStats.hourlyAverages[hour] { + prompt += "- \(String(format: "%02d", hour)):00: \(String(format: "%.0f", avg)) mg/dL\n" + } + } + + // Insulin stats + prompt += "\n## Insulin Statistics\n" + prompt += "- Total Daily Dose: \(String(format: "%.1f", stats.insulinStats.totalDailyDose)) U/day\n" + prompt += "- Basal: \(String(format: "%.0f", stats.insulinStats.basalPercentage))% / Bolus: \(String(format: "%.0f", stats.insulinStats.bolusPercentage))%\n" + prompt += "- Correction Boluses: \(stats.insulinStats.correctionBolusCount) in period\n" + + // Carb stats + prompt += "\n## Carbohydrate Statistics\n" + prompt += "- Average Daily Carbs: \(String(format: "%.0f", stats.carbStats.averageDailyCarbs)) g/day\n" + prompt += "- Meals Logged: \(stats.carbStats.mealCount)\n" + prompt += "- Average Carbs per Meal: \(String(format: "%.0f", stats.carbStats.averageCarbsPerMeal)) g\n" + + prompt += "\nPlease analyze this data and suggest adjustments to my \(settingType.displayName) settings. " + prompt += "Respond with JSON only, no markdown formatting." + + return prompt + } + + // MARK: - Response Parsing + + private func parseResponse(rawResponse: String, settingType: LoopInsightsSettingType, period: LoopInsightsAnalysisPeriod) throws -> LoopInsightsAnalysisResponse { + // Extract JSON from the response (AI might wrap it in markdown code blocks) + let jsonString = extractJSON(from: rawResponse) + + guard let data = jsonString.data(using: .utf8) else { + throw LoopInsightsError.parseError("Unable to convert response to data") + } + + guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { + throw LoopInsightsError.parseError("Response is not valid JSON: \(rawResponse.prefix(200))") + } + + // Parse suggestions + guard let suggestionsArray = json["suggestions"] as? [[String: Any]] else { + throw LoopInsightsError.parseError("Missing 'suggestions' array in response") + } + + var suggestions: [LoopInsightsSuggestion] = [] + + for suggestionJSON in suggestionsArray { + guard let timeBlocksArray = suggestionJSON["time_blocks"] as? [[String: Any]], + let reasoning = suggestionJSON["reasoning"] as? String, + let confidenceRaw = suggestionJSON["confidence"] as? String, + let confidence = LoopInsightsConfidence(rawValue: confidenceRaw) else { + continue + } + + let timeBlocks = timeBlocksArray.compactMap { block -> LoopInsightsTimeBlock? in + guard let startSeconds = block["start_seconds"] as? Double, + let endSeconds = block["end_seconds"] as? Double, + let currentValue = block["current_value"] as? Double, + let proposedValue = block["proposed_value"] as? Double else { + return nil + } + return LoopInsightsTimeBlock( + startTime: startSeconds, + endTime: endSeconds, + currentValue: currentValue, + proposedValue: proposedValue + ) + } + + guard !timeBlocks.isEmpty else { continue } + + let suggestion = LoopInsightsSuggestion( + id: UUID(), + settingType: settingType, + timeBlocks: timeBlocks, + reasoning: reasoning, + confidence: confidence, + analysisPeriod: period, + createdAt: Date() + ) + suggestions.append(suggestion) + } + + let overallAssessment = json["overall_assessment"] as? String ?? "Analysis complete." + + var nextFocus: LoopInsightsSettingType? = nil + if let nextRaw = json["next_recommended_focus"] as? String { + nextFocus = LoopInsightsSettingType(rawValue: nextRaw) + } + + return LoopInsightsAnalysisResponse( + suggestions: suggestions, + overallAssessment: overallAssessment, + nextRecommendedFocus: nextFocus, + rawResponse: rawResponse + ) + } + + // MARK: - Helpers + + private func extractJSON(from text: String) -> String { + // Try to find JSON block in markdown code fences + if let jsonRange = text.range(of: "```json\n"), + let endRange = text.range(of: "\n```", range: jsonRange.upperBound.. String { + let hours = Int(seconds) / 3600 + let minutes = (Int(seconds) % 3600) / 60 + let period = hours >= 12 ? "PM" : "AM" + let displayHour = hours == 0 ? 12 : (hours > 12 ? hours - 12 : hours) + return String(format: "%d:%02d %@", displayHour, minutes, period) + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_AIServiceAdapter.swift b/Loop/Services/LoopInsights/LoopInsights_AIServiceAdapter.swift new file mode 100644 index 0000000000..d2371d4789 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_AIServiceAdapter.swift @@ -0,0 +1,253 @@ +// +// LoopInsights_AIServiceAdapter.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +/// Provider-agnostic HTTP client for LoopInsights AI analysis. +/// +/// Supports any OpenAI-compatible endpoint (OpenAI, Azure, Groq, Together, Ollama, etc.), +/// Anthropic Messages API, and Google Generative AI (Gemini). The request format, auth headers, +/// and endpoint path are all derived from the user's `LoopInsightsAIProviderConfiguration`. +final class LoopInsights_AIServiceAdapter { + + static let shared = LoopInsights_AIServiceAdapter() + + private let session: URLSession + + private init() { + let config = URLSessionConfiguration.default + config.timeoutIntervalForRequest = 60 + config.timeoutIntervalForResource = 120 + self.session = URLSession(configuration: config) + } + + // MARK: - Public API + + /// Send a prompt to the configured AI provider and return the text response. + func sendPrompt(_ systemPrompt: String, userPrompt: String) async throws -> String { + let config = LoopInsights_FeatureFlags.aiConfiguration.withKeychainAPIKey() + + guard !config.apiKey.isEmpty else { + throw LoopInsightsError.noAPIKeyConfigured + } + + let request = try buildRequest(config: config, systemPrompt: systemPrompt, userPrompt: userPrompt) + + let (data, response) = try await session.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw LoopInsightsError.networkError(URLError(.badServerResponse)) + } + + guard httpResponse.statusCode == 200 else { + let errorBody = String(data: data, encoding: .utf8) ?? "Unknown error" + throw LoopInsightsError.aiProviderError("HTTP \(httpResponse.statusCode): \(errorBody)") + } + + return try extractTextFromResponse(data: data, config: config) + } + + /// Test connectivity with the configured provider. Returns true if reachable. + func testConnection() async throws -> Bool { + let config = LoopInsights_FeatureFlags.aiConfiguration.withKeychainAPIKey() + + guard !config.apiKey.isEmpty else { + throw LoopInsightsError.noAPIKeyConfigured + } + + // Use minimal tokens to minimize cost + var testConfig = config + testConfig.maxTokens = 10 + + let request = try buildRequest(config: testConfig, systemPrompt: "You are a test.", userPrompt: "Reply with exactly: OK") + + let (data, response) = try await session.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw LoopInsightsError.networkError(URLError(.badServerResponse)) + } + + switch httpResponse.statusCode { + case 200...299: + return true + case 401: + throw LoopInsightsError.aiProviderError("Invalid API key (HTTP 401)") + case 402, 429: + // Key is valid, but billing or rate-limited + return true + case 403: + throw LoopInsightsError.aiProviderError("Access denied — check API key permissions (HTTP 403)") + case 404: + throw LoopInsightsError.aiProviderError("Endpoint not found — check Base URL (HTTP 404)") + default: + let errorBody = String(data: data, encoding: .utf8) ?? "Unknown error" + throw LoopInsightsError.aiProviderError("HTTP \(httpResponse.statusCode): \(errorBody)") + } + } + + // MARK: - Request Building + + private func buildRequest( + config: LoopInsightsAIProviderConfiguration, + systemPrompt: String, + userPrompt: String + ) throws -> URLRequest { + let url = try buildURL(config: config) + + var request = URLRequest(url: url) + request.httpMethod = "POST" + request.setValue("application/json", forHTTPHeaderField: "Content-Type") + + // Auth header + let keyValue = config.apiKeyPrefix + config.apiKey + request.setValue(keyValue, forHTTPHeaderField: config.apiKeyHeader) + + // Organization ID (OpenAI / Azure) + if let orgID = config.organizationID, !orgID.isEmpty { + request.setValue(orgID, forHTTPHeaderField: "OpenAI-Organization") + } + + // Format-specific extra headers + if config.requestFormat == .anthropicMessages { + request.setValue("2023-06-01", forHTTPHeaderField: "anthropic-version") + } + + // Build body based on request format + let body: Data + switch config.requestFormat { + case .openAICompatible: + body = try buildOpenAIBody(config: config, systemPrompt: systemPrompt, userPrompt: userPrompt) + case .anthropicMessages: + body = try buildAnthropicBody(config: config, systemPrompt: systemPrompt, userPrompt: userPrompt) + case .googleGenerativeAI: + body = try buildGoogleBody(config: config, systemPrompt: systemPrompt, userPrompt: userPrompt) + } + + request.httpBody = body + return request + } + + private func buildURL(config: LoopInsightsAIProviderConfiguration) throws -> URL { + let base = config.baseURL.trimmingCharacters(in: CharacterSet(charactersIn: "/ ")) + var endpoint = config.endpointPath + + // Substitute {MODEL} in endpoint (used by Google Gemini) + endpoint = endpoint.replacingOccurrences(of: "{MODEL}", with: config.model) + + // Ensure endpoint starts with / + if !endpoint.hasPrefix("/") { + endpoint = "/" + endpoint + } + + // Azure: append api-version if present + var urlString = base + endpoint + if let apiVersion = config.apiVersion, !apiVersion.isEmpty, !urlString.contains("api-version") { + let separator = urlString.contains("?") ? "&" : "?" + urlString += "\(separator)api-version=\(apiVersion)" + } + + // Google Gemini: append API key as query param + if config.requestFormat == .googleGenerativeAI { + let separator = urlString.contains("?") ? "&" : "?" + urlString += "\(separator)key=\(config.apiKey)" + } + + guard let url = URL(string: urlString) else { + throw LoopInsightsError.aiProviderError("Invalid URL: \(urlString)") + } + return url + } + + // MARK: - Format-Specific Body Builders + + private func buildOpenAIBody( + config: LoopInsightsAIProviderConfiguration, + systemPrompt: String, + userPrompt: String + ) throws -> Data { + let body: [String: Any] = [ + "model": config.model, + "messages": [ + ["role": "system", "content": systemPrompt], + ["role": "user", "content": userPrompt] + ], + "temperature": config.temperature, + "max_tokens": config.maxTokens + ] + return try JSONSerialization.data(withJSONObject: body) + } + + private func buildAnthropicBody( + config: LoopInsightsAIProviderConfiguration, + systemPrompt: String, + userPrompt: String + ) throws -> Data { + let body: [String: Any] = [ + "model": config.model, + "system": systemPrompt, + "messages": [ + ["role": "user", "content": userPrompt] + ], + "temperature": config.temperature, + "max_tokens": config.maxTokens + ] + return try JSONSerialization.data(withJSONObject: body) + } + + private func buildGoogleBody( + config: LoopInsightsAIProviderConfiguration, + systemPrompt: String, + userPrompt: String + ) throws -> Data { + let body: [String: Any] = [ + "system_instruction": [ + "parts": [["text": systemPrompt]] + ], + "contents": [ + [ + "role": "user", + "parts": [["text": userPrompt]] + ] + ], + "generationConfig": [ + "temperature": config.temperature, + "maxOutputTokens": config.maxTokens + ] + ] + return try JSONSerialization.data(withJSONObject: body) + } + + // MARK: - Response Parsing + + /// Extract text content from the AI response using the format's key path. + private func extractTextFromResponse(data: Data, config: LoopInsightsAIProviderConfiguration) throws -> String { + guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { + throw LoopInsightsError.parseError("Response is not valid JSON") + } + + let keyPath = config.requestFormat.defaultResponseKeyPath + let components = keyPath.split(separator: ".").map(String.init) + + var current: Any = json + for component in components { + if let index = Int(component), let array = current as? [Any], index < array.count { + current = array[index] + } else if let dict = current as? [String: Any], let value = dict[component] { + current = value + } else { + throw LoopInsightsError.parseError("Unable to extract content at key path '\(keyPath)' from response") + } + } + + guard let text = current as? String else { + throw LoopInsightsError.parseError("Value at key path '\(keyPath)' is not a string") + } + + return text + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift new file mode 100644 index 0000000000..0c494fcbd4 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -0,0 +1,222 @@ +// +// LoopInsights_DataAggregator.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +/// Protocol for providing data store access to the aggregator. +/// Decouples LoopInsights from concrete store implementations. +protocol LoopInsightsDataProviderProtocol: AnyObject { + func getGlucoseSamples(start: Date, end: Date) async throws -> [StoredGlucoseSample] + func getCarbEntries(start: Date, end: Date) async throws -> [StoredCarbEntry] + func getNormalizedDoseEntries(start: Date, end: Date) async throws -> [DoseEntry] + func getLatestStoredSettings() -> StoredSettings +} + +/// Reads from Loop's existing data stores (GlucoseStore, DoseStore, CarbStore) +/// and computes aggregated statistics for AI analysis. +/// +/// This class is read-only — it never writes to any Loop data store. +final class LoopInsights_DataAggregator { + + private weak var dataProvider: LoopInsightsDataProviderProtocol? + + init(dataProvider: LoopInsightsDataProviderProtocol) { + self.dataProvider = dataProvider + } + + // MARK: - Public API + + /// Aggregate all data for the specified analysis period + func aggregateData(period: LoopInsightsAnalysisPeriod) async throws -> LoopInsightsAggregatedStats { + guard let dataProvider = dataProvider else { + throw LoopInsightsError.insufficientData("Data provider not available") + } + + let endDate = Date() + let startDate = endDate.addingTimeInterval(-period.timeInterval) + + async let glucoseStats = computeGlucoseStats(provider: dataProvider, start: startDate, end: endDate) + async let insulinStats = computeInsulinStats(provider: dataProvider, start: startDate, end: endDate) + async let carbStats = computeCarbStats(provider: dataProvider, start: startDate, end: endDate) + + return LoopInsightsAggregatedStats( + period: period, + glucoseStats: try await glucoseStats, + insulinStats: try await insulinStats, + carbStats: try await carbStats, + generatedAt: Date() + ) + } + + /// Capture a snapshot of current therapy settings + func captureTherapySnapshot() throws -> LoopInsightsTherapySnapshot { + guard let dataProvider = dataProvider else { + throw LoopInsightsError.insufficientData("Data provider not available") + } + + let settings = dataProvider.getLatestStoredSettings() + + let basalItems = settings.basalRateSchedule?.items.map { + LoopInsightsTherapySnapshot.LoopInsightsScheduleItem(startTime: $0.startTime, value: $0.value) + } ?? [] + + let isfItems = settings.insulinSensitivitySchedule?.items.map { + LoopInsightsTherapySnapshot.LoopInsightsScheduleItem(startTime: $0.startTime, value: $0.value) + } ?? [] + + let crItems = settings.carbRatioSchedule?.items.map { + LoopInsightsTherapySnapshot.LoopInsightsScheduleItem(startTime: $0.startTime, value: $0.value) + } ?? [] + + return LoopInsightsTherapySnapshot( + basalRateItems: basalItems, + insulinSensitivityItems: isfItems, + carbRatioItems: crItems, + capturedAt: Date() + ) + } + + // MARK: - Glucose Stats + + private func computeGlucoseStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.GlucoseStats { + let samples = try await provider.getGlucoseSamples(start: start, end: end) + + guard !samples.isEmpty else { + throw LoopInsightsError.insufficientData("No glucose data available for the selected period") + } + + let glucoseValues = samples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } + let count = Double(glucoseValues.count) + + let average = glucoseValues.reduce(0, +) / count + + let variance = glucoseValues.reduce(0) { $0 + pow($1 - average, 2) } / count + let stdDev = sqrt(variance) + + let cv = (stdDev / average) * 100 + + // Time in range calculations (70-180 mg/dL standard range) + let inRange = glucoseValues.filter { $0 >= 70 && $0 <= 180 } + let belowRange = glucoseValues.filter { $0 < 70 } + let aboveRange = glucoseValues.filter { $0 > 180 } + + let tir = (Double(inRange.count) / count) * 100 + let tbr = (Double(belowRange.count) / count) * 100 + let tar = (Double(aboveRange.count) / count) * 100 + + // GMI (Glucose Management Indicator) = 3.31 + 0.02392 × mean glucose (mg/dL) + let gmi = 3.31 + (0.02392 * average) + + // Hourly averages + var hourlyBuckets: [Int: [Double]] = [:] + let calendar = Calendar.current + for sample in samples { + let hour = calendar.component(.hour, from: sample.startDate) + hourlyBuckets[hour, default: []].append(sample.quantity.doubleValue(for: .milligramsPerDeciliter)) + } + let hourlyAverages = hourlyBuckets.mapValues { values in + values.reduce(0, +) / Double(values.count) + } + + return LoopInsightsAggregatedStats.GlucoseStats( + averageGlucose: average, + standardDeviation: stdDev, + coefficientOfVariation: cv, + timeInRange: tir, + timeBelowRange: tbr, + timeAboveRange: tar, + gmi: gmi, + sampleCount: glucoseValues.count, + hourlyAverages: hourlyAverages + ) + } + + // MARK: - Insulin Stats + + private func computeInsulinStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.InsulinStats { + let doses = try await provider.getNormalizedDoseEntries(start: start, end: end) + + let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) + + var totalBasal: Double = 0 + var totalBolus: Double = 0 + var hourlyBasalBuckets: [Int: [Double]] = [:] + var correctionCount = 0 + let calendar = Calendar.current + + for dose in doses { + let units = dose.deliveredUnits ?? dose.programmedUnits + + switch dose.type { + case .basal, .tempBasal, .suspend: + totalBasal += units + let hour = calendar.component(.hour, from: dose.startDate) + // Approximate hourly rate from the dose + let durationHours = max(dose.endDate.timeIntervalSince(dose.startDate) / 3600, 0.001) + let rate = units / durationHours + hourlyBasalBuckets[hour, default: []].append(rate) + case .bolus: + totalBolus += units + // A bolus without a carb entry nearby is likely a correction + // This is a simplified heuristic + if dose.isMutable == false { + correctionCount += 1 + } + default: + break + } + } + + let totalInsulin = totalBasal + totalBolus + let tdd = totalInsulin / dayCount + + let basalPercent = totalInsulin > 0 ? (totalBasal / totalInsulin) * 100 : 50 + let bolusPercent = totalInsulin > 0 ? (totalBolus / totalInsulin) * 100 : 50 + + let hourlyBasalAverages = hourlyBasalBuckets.mapValues { values in + values.reduce(0, +) / Double(values.count) + } + + return LoopInsightsAggregatedStats.InsulinStats( + totalDailyDose: tdd, + basalPercentage: basalPercent, + bolusPercentage: bolusPercent, + hourlyBasalAverages: hourlyBasalAverages, + correctionBolusCount: correctionCount + ) + } + + // MARK: - Carb Stats + + private func computeCarbStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.CarbStats { + let entries = try await provider.getCarbEntries(start: start, end: end) + + let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) + let totalCarbs = entries.reduce(0.0) { $0 + $1.quantity.doubleValue(for: .gram()) } + let avgDaily = totalCarbs / dayCount + let mealCount = entries.count + let avgPerMeal = mealCount > 0 ? totalCarbs / Double(mealCount) : 0 + + // Hourly meal frequency + var hourlyFrequency: [Int: Int] = [:] + let calendar = Calendar.current + for entry in entries { + let hour = calendar.component(.hour, from: entry.startDate) + hourlyFrequency[hour, default: 0] += 1 + } + + return LoopInsightsAggregatedStats.CarbStats( + averageDailyCarbs: avgDaily, + mealCount: mealCount, + averageCarbsPerMeal: avgPerMeal, + hourlyMealFrequency: hourlyFrequency + ) + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_SecureStorage.swift b/Loop/Services/LoopInsights/LoopInsights_SecureStorage.swift new file mode 100644 index 0000000000..95d0ab86a8 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_SecureStorage.swift @@ -0,0 +1,79 @@ +// +// LoopInsights_SecureStorage.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import Security + +/// Keychain wrapper for storing AI API keys securely. +/// Shares the same Keychain entry as FoodFinder so users only configure once. +struct LoopInsights_SecureStorage { + + // Uses the same key name as FoodFinder for shared API key access + private static let apiKeyService = "com.loopkit.Loop.AIServiceAPIKey" + private static let apiKeyAccount = "ai_api_key" + + // MARK: - API Key + + static func saveAPIKey(_ key: String) throws { + let data = Data(key.utf8) + + // Delete existing key first + let deleteQuery: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: apiKeyService, + kSecAttrAccount as String: apiKeyAccount + ] + SecItemDelete(deleteQuery as CFDictionary) + + // Add new key + let addQuery: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: apiKeyService, + kSecAttrAccount as String: apiKeyAccount, + kSecValueData as String: data, + kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlockedThisDeviceOnly + ] + + let status = SecItemAdd(addQuery as CFDictionary, nil) + guard status == errSecSuccess else { + throw LoopInsightsError.keychainError("Failed to save API key: \(status)") + } + } + + static func loadAPIKey() -> String? { + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: apiKeyService, + kSecAttrAccount as String: apiKeyAccount, + kSecReturnData as String: true, + kSecMatchLimit as String: kSecMatchLimitOne + ] + + var result: AnyObject? + let status = SecItemCopyMatching(query as CFDictionary, &result) + + guard status == errSecSuccess, let data = result as? Data else { + return nil + } + + return String(data: data, encoding: .utf8) + } + + static func deleteAPIKey() { + let query: [String: Any] = [ + kSecClass as String: kSecClassGenericPassword, + kSecAttrService as String: apiKeyService, + kSecAttrAccount as String: apiKeyAccount + ] + SecItemDelete(query as CFDictionary) + } + + static var hasAPIKey: Bool { + return loadAPIKey() != nil + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift new file mode 100644 index 0000000000..9c0781cf57 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift @@ -0,0 +1,127 @@ +// +// LoopInsights_SuggestionStore.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +/// Persists suggestion history to UserDefaults as JSON. +/// All suggestions (pending, applied, dismissed, auto-applied) are stored here +/// so users can review their full history of AI recommendations. +final class LoopInsights_SuggestionStore: ObservableObject { + + static let shared = LoopInsights_SuggestionStore() + + private static let storageKey = "LoopInsights_SuggestionHistory" + private let defaults = UserDefaults.standard + private let encoder = JSONEncoder() + private let decoder = JSONDecoder() + + @Published private(set) var records: [LoopInsightsSuggestionRecord] = [] + + private init() { + loadRecords() + } + + // MARK: - Read + + /// All records sorted by creation date (newest first) + var allRecords: [LoopInsightsSuggestionRecord] { + return records.sorted { $0.createdAt > $1.createdAt } + } + + /// Only pending (unresolved) records + var pendingRecords: [LoopInsightsSuggestionRecord] { + return records.filter { $0.status == .pending }.sorted { $0.createdAt > $1.createdAt } + } + + /// Only resolved records (applied, dismissed, auto-applied) + var resolvedRecords: [LoopInsightsSuggestionRecord] { + return records.filter { $0.status.isResolved }.sorted { $0.createdAt > $1.createdAt } + } + + /// Find a record by ID + func record(withID id: UUID) -> LoopInsightsSuggestionRecord? { + return records.first { $0.id == id } + } + + // MARK: - Write + + /// Add a new suggestion as a pending record + func addSuggestion(_ suggestion: LoopInsightsSuggestion) -> LoopInsightsSuggestionRecord { + let record = LoopInsightsSuggestionRecord(suggestion: suggestion) + records.append(record) + saveRecords() + return record + } + + /// Add multiple suggestions as pending records + func addSuggestions(_ suggestions: [LoopInsightsSuggestion]) -> [LoopInsightsSuggestionRecord] { + let newRecords = suggestions.map { LoopInsightsSuggestionRecord(suggestion: $0) } + records.append(contentsOf: newRecords) + saveRecords() + return newRecords + } + + /// Mark a record as applied + func markApplied(recordID: UUID, mode: LoopInsightsApplyMode, snapshotBefore: LoopInsightsTherapySnapshot?, snapshotAfter: LoopInsightsTherapySnapshot?) { + guard let index = records.firstIndex(where: { $0.id == recordID }) else { return } + records[index].markApplied(mode: mode, snapshotBefore: snapshotBefore, snapshotAfter: snapshotAfter) + saveRecords() + } + + /// Mark a record as dismissed + func markDismissed(recordID: UUID) { + guard let index = records.firstIndex(where: { $0.id == recordID }) else { return } + records[index].markDismissed() + saveRecords() + } + + /// Dismiss all pending records + func dismissAllPending() { + for index in records.indices where records[index].status == .pending { + records[index].markDismissed() + } + saveRecords() + } + + /// Delete a specific record + func deleteRecord(withID id: UUID) { + records.removeAll { $0.id == id } + saveRecords() + } + + /// Clear all history + func clearAllHistory() { + records.removeAll() + saveRecords() + } + + // MARK: - Persistence + + private func loadRecords() { + guard let data = defaults.data(forKey: Self.storageKey) else { + records = [] + return + } + + do { + records = try decoder.decode([LoopInsightsSuggestionRecord].self, from: data) + } catch { + print("[LoopInsights] Failed to decode suggestion history: \(error)") + records = [] + } + } + + private func saveRecords() { + do { + let data = try encoder.encode(records) + defaults.set(data, forKey: Self.storageKey) + } catch { + print("[LoopInsights] Failed to encode suggestion history: \(error)") + } + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift new file mode 100644 index 0000000000..e3e8086e35 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift @@ -0,0 +1,289 @@ +// +// LoopInsights_TestDataProvider.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +/// Loads JSON fixture files (generated by pull_tidepool_data.py) and provides them +/// to LoopInsights as if they came from the real Loop data stores. +/// +/// File lookup order: +/// 1. App's Documents/LoopInsights/ directory (user-provided, no rebuild needed) +/// 2. App bundle Resources/LoopInsights/TestData/ (developer-bundled) +/// +/// Expected fixture filenames: +/// - tidepool_glucose_samples.json +/// - tidepool_dose_entries.json +/// - tidepool_carb_entries.json +/// - tidepool_therapy_settings.json (optional) +final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { + + // MARK: - Cached Data + + private var glucoseSamples: [StoredGlucoseSample] = [] + private var carbEntries: [StoredCarbEntry] = [] + private var doseEntries: [DoseEntry] = [] + private var storedSettings: StoredSettings = StoredSettings() + + private var isLoaded = false + + // MARK: - File Names + + private enum FixtureFile { + static let glucose = "tidepool_glucose_samples.json" + static let doses = "tidepool_dose_entries.json" + static let carbs = "tidepool_carb_entries.json" + static let settings = "tidepool_therapy_settings.json" + } + + // MARK: - Initialization + + init() { + loadFixtures() + } + + // MARK: - Data Availability + + /// Returns true if any test data fixtures were found and loaded. + var hasTestData: Bool { + return !glucoseSamples.isEmpty || !doseEntries.isEmpty || !carbEntries.isEmpty + } + + /// Summary of loaded fixture data. + var dataSummary: String { + return "Glucose: \(glucoseSamples.count), Doses: \(doseEntries.count), Carbs: \(carbEntries.count)" + } + + /// Date range of the loaded data (nil if empty). + var dateRange: (start: Date, end: Date)? { + var allDates: [Date] = [] + allDates.append(contentsOf: glucoseSamples.map { $0.startDate }) + allDates.append(contentsOf: doseEntries.map { $0.startDate }) + allDates.append(contentsOf: carbEntries.map { $0.startDate }) + + guard let earliest = allDates.min(), let latest = allDates.max() else { + return nil + } + return (earliest, latest) + } + + // MARK: - LoopInsightsDataProviderProtocol + + func getGlucoseSamples(start: Date, end: Date) async throws -> [StoredGlucoseSample] { + return glucoseSamples.filter { $0.startDate >= start && $0.startDate <= end } + } + + func getCarbEntries(start: Date, end: Date) async throws -> [StoredCarbEntry] { + return carbEntries.filter { $0.startDate >= start && $0.startDate <= end } + } + + func getNormalizedDoseEntries(start: Date, end: Date) async throws -> [DoseEntry] { + return doseEntries.filter { $0.startDate >= start && $0.startDate <= end } + } + + func getLatestStoredSettings() -> StoredSettings { + return storedSettings + } + + // MARK: - Static Helpers + + /// Check if test data fixtures exist in any search location. + static var fixturesAvailable: Bool { + return resolveFixturePath(for: FixtureFile.glucose) != nil || + resolveFixturePath(for: FixtureFile.doses) != nil || + resolveFixturePath(for: FixtureFile.carbs) != nil + } + + /// Returns the Documents/LoopInsights/ directory path (creates it if needed). + static var documentsDirectory: URL { + let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! + let dir = docs.appendingPathComponent("LoopInsights", isDirectory: true) + try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + return dir + } + + // MARK: - Private Loading + + private func loadFixtures() { + guard !isLoaded else { return } + isLoaded = true + + let decoder = JSONDecoder() + decoder.dateDecodingStrategy = .custom { decoder in + let container = try decoder.singleValueContainer() + let dateString = try container.decode(String.self) + if let date = Self.iso8601Formatter.date(from: dateString) { + return date + } + if let date = Self.iso8601FractionalFormatter.date(from: dateString) { + return date + } + throw DecodingError.dataCorruptedError(in: container, debugDescription: "Cannot parse date: \(dateString)") + } + + // Load glucose samples + if let data = Self.loadFixtureData(for: FixtureFile.glucose) { + do { + glucoseSamples = try decoder.decode([StoredGlucoseSample].self, from: data) + print("[LoopInsights TestData] Loaded \(glucoseSamples.count) glucose samples") + } catch { + print("[LoopInsights TestData] Failed to decode glucose: \(error)") + } + } + + // Load dose entries (pre-process to strip scheduledBasalRate fields that crash HKUnit) + if let data = Self.loadFixtureData(for: FixtureFile.doses) { + let sanitizedData = Self.sanitizeDoseJSON(data) + do { + doseEntries = try decoder.decode([DoseEntry].self, from: sanitizedData) + print("[LoopInsights TestData] Loaded \(doseEntries.count) dose entries") + } catch { + print("[LoopInsights TestData] Failed to decode doses: \(error)") + } + } + + // Load carb entries + if let data = Self.loadFixtureData(for: FixtureFile.carbs) { + do { + carbEntries = try decoder.decode([StoredCarbEntry].self, from: data) + print("[LoopInsights TestData] Loaded \(carbEntries.count) carb entries") + } catch { + print("[LoopInsights TestData] Failed to decode carbs: \(error)") + } + } + + // Load therapy settings (optional — builds StoredSettings from Tidepool schedule data) + if let data = Self.loadFixtureData(for: FixtureFile.settings) { + loadTherapySettings(data: data) + } + } + + /// Parse the Tidepool therapy settings JSON and construct a StoredSettings instance. + private func loadTherapySettings(data: Data) { + guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { + print("[LoopInsights TestData] Failed to parse therapy settings JSON") + return + } + + var basalSchedule: BasalRateSchedule? + var isfSchedule: InsulinSensitivitySchedule? + var crSchedule: CarbRatioSchedule? + + // Basal rate schedule + if let items = json["basalRateSchedule"] as? [[String: Any]] { + let dailyItems = items.compactMap { item -> RepeatingScheduleValue? in + guard let startTime = item["startTime"] as? Double, + let value = item["value"] as? Double else { return nil } + return RepeatingScheduleValue(startTime: startTime, value: value) + } + if !dailyItems.isEmpty { + basalSchedule = DailyValueSchedule(dailyItems: dailyItems) + } + } + + // Insulin sensitivity schedule (mg/dL) + if let items = json["insulinSensitivitySchedule"] as? [[String: Any]] { + let dailyItems = items.compactMap { item -> RepeatingScheduleValue? in + guard let startTime = item["startTime"] as? Double, + let value = item["value"] as? Double else { return nil } + return RepeatingScheduleValue(startTime: startTime, value: value) + } + if !dailyItems.isEmpty { + isfSchedule = DailyQuantitySchedule(unit: .milligramsPerDeciliter, dailyItems: dailyItems) + } + } + + // Carb ratio schedule (g/U) + if let items = json["carbRatioSchedule"] as? [[String: Any]] { + let dailyItems = items.compactMap { item -> RepeatingScheduleValue? in + guard let startTime = item["startTime"] as? Double, + let value = item["value"] as? Double else { return nil } + return RepeatingScheduleValue(startTime: startTime, value: value) + } + if !dailyItems.isEmpty { + crSchedule = DailyQuantitySchedule(unit: .gram(), dailyItems: dailyItems) + } + } + + storedSettings = StoredSettings( + dosingEnabled: true, + basalRateSchedule: basalSchedule, + insulinSensitivitySchedule: isfSchedule, + carbRatioSchedule: crSchedule + ) + print("[LoopInsights TestData] Loaded therapy settings (basal: \(basalSchedule?.items.count ?? 0), ISF: \(isfSchedule?.items.count ?? 0), CR: \(crSchedule?.items.count ?? 0))") + } + + // MARK: - Dose JSON Sanitization + + /// Remove scheduledBasalRate/scheduledBasalRateUnit from dose JSON to prevent + /// HKUnit(from:) NSException crashes with non-standard unit strings. + /// LoopInsights only needs type, startDate, endDate, value, unit, deliveredUnits, automatic. + private static func sanitizeDoseJSON(_ data: Data) -> Data { + guard var jsonArray = try? JSONSerialization.jsonObject(with: data) as? [[String: Any]] else { + return data + } + for i in jsonArray.indices { + jsonArray[i].removeValue(forKey: "scheduledBasalRate") + jsonArray[i].removeValue(forKey: "scheduledBasalRateUnit") + } + return (try? JSONSerialization.data(withJSONObject: jsonArray)) ?? data + } + + // MARK: - File Resolution + + /// Find the path to a fixture file, checking Documents first, then bundle. + private static func resolveFixturePath(for filename: String) -> URL? { + // 1. Check Documents/LoopInsights/ + let docsPath = documentsDirectory.appendingPathComponent(filename) + if FileManager.default.fileExists(atPath: docsPath.path) { + return docsPath + } + + // 2. Check app bundle + let name = (filename as NSString).deletingPathExtension + let ext = (filename as NSString).pathExtension + if let bundlePath = Bundle.main.url(forResource: name, withExtension: ext, subdirectory: "LoopInsights/TestData") { + return bundlePath + } + + // 3. Check bundle root (flat resources) + if let bundlePath = Bundle.main.url(forResource: name, withExtension: ext) { + return bundlePath + } + + return nil + } + + /// Load raw Data from a fixture file. + private static func loadFixtureData(for filename: String) -> Data? { + guard let url = resolveFixturePath(for: filename) else { + print("[LoopInsights TestData] Fixture not found: \(filename)") + return nil + } + print("[LoopInsights TestData] Loading: \(url.lastPathComponent) from \(url.deletingLastPathComponent().lastPathComponent)/") + return try? Data(contentsOf: url) + } + + // MARK: - Date Formatters + + /// ISO 8601 without fractional seconds: "2026-02-10T12:00:00Z" + private static let iso8601Formatter: ISO8601DateFormatter = { + let f = ISO8601DateFormatter() + f.formatOptions = [.withInternetDateTime] + return f + }() + + /// ISO 8601 with fractional seconds: "2026-02-10T12:00:00.000Z" + private static let iso8601FractionalFormatter: ISO8601DateFormatter = { + let f = ISO8601DateFormatter() + f.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + return f + }() +} diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift new file mode 100644 index 0000000000..b3da107c5a --- /dev/null +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -0,0 +1,407 @@ +// +// LoopInsights_DashboardViewModel.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import Combine +import LoopKit + +/// Main view model for the LoopInsights Dashboard. Orchestrates data aggregation, +/// AI analysis, and suggestion state management. +/// +/// Owned by DashboardView. Calls Coordinator services for data access and AI analysis. +final class LoopInsights_DashboardViewModel: ObservableObject { + + // MARK: - Published State + + /// Current analysis state + @Published var isAnalyzing = false + @Published var analysisError: LoopInsightsError? + @Published var lastAnalysisDate: Date? + + /// Current therapy snapshot + @Published var currentSnapshot: LoopInsightsTherapySnapshot? + + /// AI analysis results + @Published var analysisResponse: LoopInsightsAnalysisResponse? + @Published var overallAssessment: String? + + /// Suggestion records (pending) + @Published var pendingSuggestions: [LoopInsightsSuggestionRecord] = [] + + /// Selected setting type for analysis focus + @Published var focusSettingType: LoopInsightsSettingType = .carbRatio + + /// Analysis period + @Published var analysisPeriod: LoopInsightsAnalysisPeriod + + /// Apply mode confirmation state + @Published var showingApplyConfirmation = false + @Published var recordToApply: LoopInsightsSuggestionRecord? + + /// Aggregated stats (for display) + @Published var aggregatedStats: LoopInsightsAggregatedStats? + + /// Setting types that have been analyzed — used to show green "OK" status + /// for settings that were reviewed and found to need no changes + @Published var analyzedSettingTypes: Set = [] + + /// Detected glucose/insulin patterns from aggregated data + @Published var detectedPatterns: [LoopInsightsDetectedPattern] = [] + + // MARK: - Dependencies + + private let coordinator: LoopInsights_Coordinator + private var cancellables = Set() + + /// Expose suggestion store for views that need direct access + var suggestionStore: LoopInsights_SuggestionStore { + coordinator.suggestionStore + } + + // MARK: - Initialization + + init(coordinator: LoopInsights_Coordinator) { + self.coordinator = coordinator + self.analysisPeriod = LoopInsights_FeatureFlags.analysisPeriod + + // Observe suggestion store changes + coordinator.suggestionStore.$records + .map { records in records.filter { $0.status == .pending }.sorted { $0.createdAt > $1.createdAt } } + .receive(on: DispatchQueue.main) + .assign(to: &$pendingSuggestions) + + // Load initial snapshot + loadCurrentSettings() + } + + // MARK: - Actions + + /// Load current therapy settings snapshot + func loadCurrentSettings() { + do { + currentSnapshot = try coordinator.captureCurrentSnapshot() + } catch { + print("[LoopInsights] Failed to capture therapy snapshot: \(error)") + } + } + + /// Run AI analysis for the focused setting type + func runAnalysis() { + guard !isAnalyzing else { return } + + isAnalyzing = true + analysisError = nil + + Task { @MainActor in + do { + // Aggregate data + let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) + self.aggregatedStats = stats + + // Detect patterns from aggregated stats + self.detectedPatterns = Self.detectPatterns(from: stats) + + // Capture current settings + let snapshot = try coordinator.captureCurrentSnapshot() + self.currentSnapshot = snapshot + + // Run AI analysis + let response = try await coordinator.aiAnalysis.analyze( + settingType: focusSettingType, + currentSettings: snapshot, + stats: stats + ) + + self.analysisResponse = response + self.overallAssessment = response.overallAssessment + self.lastAnalysisDate = Date() + + // Track that this setting type has been analyzed + self.analyzedSettingTypes.insert(focusSettingType) + + // Dismiss any existing pending suggestions for this setting type + for record in pendingSuggestions where record.suggestion.settingType == focusSettingType { + coordinator.suggestionStore.markDismissed(recordID: record.id) + } + + // Add new suggestions as pending records + let _ = coordinator.suggestionStore.addSuggestions(response.suggestions) + + // If next focus is recommended, update + if let nextFocus = response.nextRecommendedFocus { + self.focusSettingType = nextFocus + } + + // Auto-apply if developer mode + auto-apply enabled + if LoopInsights_FeatureFlags.developerModeEnabled && + LoopInsights_FeatureFlags.applyMode == .autoApply { + for suggestion in response.suggestions where suggestion.confidence >= .high { + await autoApplySuggestion(suggestion) + } + } + + self.isAnalyzing = false + + } catch let error as LoopInsightsError { + self.analysisError = error + self.isAnalyzing = false + } catch { + self.analysisError = .aiProviderError(error.localizedDescription) + self.isAnalyzing = false + } + } + } + + /// Apply a suggestion based on the current apply mode + func applySuggestion(_ record: LoopInsightsSuggestionRecord) { + let mode = LoopInsights_FeatureFlags.applyMode + + switch mode { + case .manual: + // Just mark as applied — user navigates to Therapy Settings manually + let snapshotBefore = try? coordinator.captureCurrentSnapshot() + coordinator.suggestionStore.markApplied( + recordID: record.id, + mode: .manual, + snapshotBefore: snapshotBefore, + snapshotAfter: nil + ) + + case .oneTap: + // Show confirmation dialog first + recordToApply = record + showingApplyConfirmation = true + + case .preFill: + // Navigate to editor with pre-filled values + // For Phase 1, fall back to one-tap behavior with confirmation + recordToApply = record + showingApplyConfirmation = true + + case .autoApply: + // This path is only available in developer mode + Task { @MainActor in + await autoApplySuggestion(record.suggestion) + } + } + } + + /// Confirm one-tap apply after user accepts disclaimer + func confirmApply() { + guard let record = recordToApply else { return } + + let snapshotBefore = try? coordinator.captureCurrentSnapshot() + + // TODO: Phase 1 — implement actual settings write via SettingsManager + // For now, mark as applied and log + coordinator.suggestionStore.markApplied( + recordID: record.id, + mode: LoopInsights_FeatureFlags.applyMode, + snapshotBefore: snapshotBefore, + snapshotAfter: nil + ) + + recordToApply = nil + showingApplyConfirmation = false + loadCurrentSettings() + } + + /// Cancel apply confirmation + func cancelApply() { + recordToApply = nil + showingApplyConfirmation = false + } + + /// Dismiss a suggestion + func dismissSuggestion(_ record: LoopInsightsSuggestionRecord) { + coordinator.suggestionStore.markDismissed(recordID: record.id) + } + + /// Dismiss all pending suggestions + func dismissAllPending() { + coordinator.suggestionStore.dismissAllPending() + } + + /// Returns the analysis status for a setting type (used for color indicators) + func settingStatus(_ type: LoopInsightsSettingType) -> LoopInsightsSettingStatus { + let hasPending = pendingSuggestions.contains { $0.suggestion.settingType == type } + if hasPending { + return .hasSuggestions + } else if analyzedSettingTypes.contains(type) { + return .analyzedOK + } + return .notAnalyzed + } + + /// Update analysis period and persist to settings + func updateAnalysisPeriod(_ period: LoopInsightsAnalysisPeriod) { + analysisPeriod = period + LoopInsights_FeatureFlags.analysisPeriod = period + } + + // MARK: - Private + + private func autoApplySuggestion(_ suggestion: LoopInsightsSuggestion) async { + let snapshotBefore = try? coordinator.captureCurrentSnapshot() + + // TODO: Implement actual settings write + // For now, just log the auto-apply intent + print("[LoopInsights] Auto-applying suggestion: \(suggestion.summaryDescription)") + + if let record = coordinator.suggestionStore.pendingRecords.first(where: { $0.suggestion.id == suggestion.id }) { + coordinator.suggestionStore.markApplied( + recordID: record.id, + mode: .autoApply, + snapshotBefore: snapshotBefore, + snapshotAfter: nil + ) + } + } + + // MARK: - Pattern Detection + + /// Detect glucose/insulin patterns from aggregated statistics. + /// Returns patterns sorted by severity (high first). + static func detectPatterns(from stats: LoopInsightsAggregatedStats) -> [LoopInsightsDetectedPattern] { + var patterns: [LoopInsightsDetectedPattern] = [] + let g = stats.glucoseStats + let period = stats.period + + // Overnight lows: average glucose during hours 0-5 below 80 mg/dL + let overnightHours = (0...5) + let overnightAvgs = overnightHours.compactMap { g.hourlyAverages[$0] } + if !overnightAvgs.isEmpty { + let overnightAvg = overnightAvgs.reduce(0, +) / Double(overnightAvgs.count) + if overnightAvg < 70 { + patterns.append(LoopInsightsDetectedPattern( + type: .overnightLows, + detail: String(format: NSLocalizedString("Average overnight glucose %.0f mg/dL in %@", comment: "LoopInsights pattern detail: overnight lows"), overnightAvg, period.displayName), + severity: .high + )) + } else if overnightAvg < 80 { + patterns.append(LoopInsightsDetectedPattern( + type: .overnightLows, + detail: String(format: NSLocalizedString("Average overnight glucose %.0f mg/dL in %@", comment: "LoopInsights pattern detail: overnight lows moderate"), overnightAvg, period.displayName), + severity: .medium + )) + } + } + + // Frequent lows: time below range > 4% (ADA target < 4%) + if g.timeBelowRange > 8 { + patterns.append(LoopInsightsDetectedPattern( + type: .frequentLows, + detail: String(format: NSLocalizedString("%.1f%% time below range in %@", comment: "LoopInsights pattern detail: frequent lows"), g.timeBelowRange, period.displayName), + severity: .high + )) + } else if g.timeBelowRange > 4 { + patterns.append(LoopInsightsDetectedPattern( + type: .frequentLows, + detail: String(format: NSLocalizedString("%.1f%% time below range in %@", comment: "LoopInsights pattern detail: frequent lows moderate"), g.timeBelowRange, period.displayName), + severity: .medium + )) + } + + // Overnight highs: average glucose during hours 0-5 above 180 mg/dL + if !overnightAvgs.isEmpty { + let overnightAvg = overnightAvgs.reduce(0, +) / Double(overnightAvgs.count) + if overnightAvg > 200 { + patterns.append(LoopInsightsDetectedPattern( + type: .overnightHighs, + detail: String(format: NSLocalizedString("Average overnight glucose %.0f mg/dL in %@", comment: "LoopInsights pattern detail: overnight highs"), overnightAvg, period.displayName), + severity: .high + )) + } else if overnightAvg > 180 { + patterns.append(LoopInsightsDetectedPattern( + type: .overnightHighs, + detail: String(format: NSLocalizedString("Average overnight glucose %.0f mg/dL in %@", comment: "LoopInsights pattern detail: overnight highs moderate"), overnightAvg, period.displayName), + severity: .medium + )) + } + } + + // Dawn phenomenon: glucose rises > 30 mg/dL between hours 3-7 + let dawnStart = g.hourlyAverages[3] ?? g.hourlyAverages[4] + let dawnPeak = g.hourlyAverages[7] ?? g.hourlyAverages[6] + if let start = dawnStart, let peak = dawnPeak { + let rise = peak - start + if rise > 40 { + patterns.append(LoopInsightsDetectedPattern( + type: .dawnPhenomenon, + detail: String(format: NSLocalizedString("Average rise of %.0f mg/dL between 3 AM–7 AM", comment: "LoopInsights pattern detail: dawn phenomenon"), rise), + severity: .high + )) + } else if rise > 20 { + patterns.append(LoopInsightsDetectedPattern( + type: .dawnPhenomenon, + detail: String(format: NSLocalizedString("Average rise of %.0f mg/dL between 3 AM–7 AM", comment: "LoopInsights pattern detail: dawn phenomenon moderate"), rise), + severity: .medium + )) + } + } + + // Post-meal spikes: high glucose during common meal hours relative to pre-meal + // Compare hours 7-8 (breakfast) vs 6, hours 12-13 (lunch) vs 11, hours 18-19 (dinner) vs 17 + var spikeCount = 0 + let mealWindows: [(pre: Int, post: Int)] = [(6, 8), (11, 13), (17, 19)] + for window in mealWindows { + if let pre = g.hourlyAverages[window.pre], let post = g.hourlyAverages[window.post] { + if post - pre > 50 { spikeCount += 1 } + } + } + if spikeCount >= 2 { + patterns.append(LoopInsightsDetectedPattern( + type: .postMealSpikes, + detail: String(format: NSLocalizedString("Post-meal glucose spikes detected at %d of 3 meal windows", comment: "LoopInsights pattern detail: post-meal spikes"), spikeCount), + severity: spikeCount >= 3 ? .high : .medium + )) + } + + // High variability: CV > 36% (ADA target < 36%) + if g.coefficientOfVariation > 45 { + patterns.append(LoopInsightsDetectedPattern( + type: .highVariability, + detail: String(format: NSLocalizedString("Coefficient of variation %.1f%% (target <36%%)", comment: "LoopInsights pattern detail: high variability"), g.coefficientOfVariation), + severity: .high + )) + } else if g.coefficientOfVariation > 36 { + patterns.append(LoopInsightsDetectedPattern( + type: .highVariability, + detail: String(format: NSLocalizedString("Coefficient of variation %.1f%% (target <36%%)", comment: "LoopInsights pattern detail: high variability moderate"), g.coefficientOfVariation), + severity: .medium + )) + } + + // Consistent highs: time above range > 25% (ADA target < 25%) + if g.timeAboveRange > 40 { + patterns.append(LoopInsightsDetectedPattern( + type: .consistentHighs, + detail: String(format: NSLocalizedString("%.1f%% time above range in %@", comment: "LoopInsights pattern detail: consistent highs"), g.timeAboveRange, period.displayName), + severity: .high + )) + } else if g.timeAboveRange > 25 { + patterns.append(LoopInsightsDetectedPattern( + type: .consistentHighs, + detail: String(format: NSLocalizedString("%.1f%% time above range in %@", comment: "LoopInsights pattern detail: consistent highs moderate"), g.timeAboveRange, period.displayName), + severity: .medium + )) + } + + // Consistent lows: time below range with low average + if g.averageGlucose < 100 && g.timeBelowRange > 2 { + patterns.append(LoopInsightsDetectedPattern( + type: .consistentLows, + detail: String(format: NSLocalizedString("Average glucose %.0f mg/dL with %.1f%% below range", comment: "LoopInsights pattern detail: consistent lows"), g.averageGlucose, g.timeBelowRange), + severity: g.averageGlucose < 90 ? .high : .medium + )) + } + + // Sort: high severity first + return patterns.sorted { $0.severity > $1.severity } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift new file mode 100644 index 0000000000..00724f7123 --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -0,0 +1,478 @@ +// +// LoopInsights_DashboardView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKit + +/// Primary entry-point view for LoopInsights. Displays current therapy settings +/// summary, AI suggestion cards, analysis trigger, and navigation to history. +/// +/// NOTE: This view uses a plain `var` for the viewModel rather than @ObservedObject. +/// The parent view (wrapper/container) is responsible for observing the viewModel's +/// objectWillChange and triggering re-renders. This avoids a silent SwiftUI crash +/// that occurs when @ObservedObject subscribes to the ViewModel's publisher +/// during the sheet presentation rendering cycle. +struct LoopInsights_DashboardView: View { + + var viewModel: LoopInsights_DashboardViewModel + /// Changed by the parent container on every ViewModel objectWillChange, + /// forcing SwiftUI to re-evaluate this view's body. + var renderTrigger: Int = 0 + + @State private var showingHistory = false + @State private var selectedRecord: LoopInsightsSuggestionRecord? + @State private var developerTapCount = 0 + + // Manual Bindings — required because viewModel is not @ObservedObject + private var analysisPeriodBinding: Binding { + Binding( + get: { viewModel.analysisPeriod }, + set: { viewModel.updateAnalysisPeriod($0) } + ) + } + + private var showingApplyConfirmationBinding: Binding { + Binding( + get: { viewModel.showingApplyConfirmation }, + set: { viewModel.showingApplyConfirmation = $0 } + ) + } + + var body: some View { + List { + headerSection + currentSettingsSection + analysisSection + if !viewModel.detectedPatterns.isEmpty { + detectedPatternsSection + } + if viewModel.overallAssessment != nil { + assessmentSection + } + if !viewModel.pendingSuggestions.isEmpty { + pendingSuggestionsSection + } + navigationSection + } + .navigationTitle(NSLocalizedString("LoopInsights", comment: "LoopInsights dashboard title")) + .sheet(item: $selectedRecord) { record in + NavigationView { + LoopInsights_SuggestionDetailView( + record: record, + onApply: { viewModel.applySuggestion(record) }, + onDismiss: { viewModel.dismissSuggestion(record) } + ) + } + } + .sheet(isPresented: $showingHistory) { + NavigationView { + LoopInsights_SuggestionHistoryView(store: viewModel.suggestionStore) + } + } + .alert( + NSLocalizedString("Apply Suggestion", comment: "LoopInsights apply confirmation title"), + isPresented: showingApplyConfirmationBinding + ) { + Button(NSLocalizedString("Apply", comment: "LoopInsights apply button"), role: .destructive) { + viewModel.confirmApply() + } + Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) { + viewModel.cancelApply() + } + } message: { + Text(NSLocalizedString( + "This will modify your therapy settings. You are responsible for reviewing and verifying all changes. AI suggestions are advisory and may not be appropriate for your situation. Consult your healthcare provider for significant therapy adjustments.", + comment: "LoopInsights apply disclaimer" + )) + } + } + + // MARK: - Header + + private var headerSection: some View { + Section { + VStack(alignment: .leading, spacing: 4) { + HStack { + Image(systemName: "brain.head.profile") + .font(.title2) + .foregroundColor(.accentColor) + Text(NSLocalizedString("LoopInsights", comment: "LoopInsights header")) + .font(.title2) + .fontWeight(.bold) + } + .onLongPressGesture(minimumDuration: 1) { + handleDeveloperTap() + } + + Text(NSLocalizedString("LoopInsights analyzes your glucose, insulin, and carb data to suggest adjustments to your Basal Rates, Carb Ratios, and Insulin Sensitivity factors. Tap one of the settings, choose a lookback period, and tap Analyze to get AI-generated suggestions. All changes require your review and approval.", comment: "LoopInsights subtitle")) + .font(.subheadline) + .foregroundColor(.secondary) + + if let lastDate = viewModel.lastAnalysisDate { + Text(String(format: NSLocalizedString("Last analysis: %@", comment: "LoopInsights last analysis date"), Self.dateFormatter.string(from: lastDate))) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + + // MARK: - Current Settings + + private var currentSettingsSection: some View { + Section(header: Text(NSLocalizedString("Pick from your Current Therapy Settings", comment: "LoopInsights current settings header"))) { + if let snapshot = viewModel.currentSnapshot { + settingRow( + type: .carbRatio, + items: snapshot.carbRatioItems, + unit: "g/U" + ) + settingRow( + type: .insulinSensitivity, + items: snapshot.insulinSensitivityItems, + unit: "mg/dL/U" + ) + settingRow( + type: .basalRate, + items: snapshot.basalRateItems, + unit: "U/hr" + ) + HStack(spacing: 16) { + legendDot(color: .gray, label: NSLocalizedString("Not analyzed", comment: "LoopInsights legend: not analyzed")) + legendDot(color: .green, label: NSLocalizedString("No changes", comment: "LoopInsights legend: OK")) + legendDot(color: .purple, label: NSLocalizedString("Review", comment: "LoopInsights legend: review")) + } + .font(.caption2) + .foregroundColor(.secondary) + } else { + Text(NSLocalizedString("Loading therapy settings...", comment: "LoopInsights loading settings")) + .foregroundColor(.secondary) + } + } + } + + private func settingRow(type: LoopInsightsSettingType, items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem], unit: String) -> some View { + let status = viewModel.settingStatus(type) + return HStack { + // Status indicator dot + Circle() + .fill(settingStatusColor(status)) + .frame(width: 8, height: 8) + Image(systemName: type.systemImage) + .foregroundColor(.accentColor) + .frame(width: 24) + VStack(alignment: .leading) { + Text(type.displayName) + .font(.subheadline) + .fontWeight(.medium) + if items.count == 1 { + Text("\(String(format: "%.1f", items[0].value)) \(unit)") + .font(.caption) + .foregroundColor(.secondary) + } else { + Text(String(format: NSLocalizedString("%d time blocks", comment: "LoopInsights time block count"), items.count)) + .font(.caption) + .foregroundColor(.secondary) + } + } + Spacer() + if viewModel.focusSettingType == type { + Image(systemName: "target") + .foregroundColor(.accentColor) + .font(.caption) + } + } + .contentShape(Rectangle()) + .onTapGesture { + viewModel.focusSettingType = type + } + } + + // MARK: - Analysis + + private var analysisSection: some View { + Section { + // Period picker + Picker(NSLocalizedString("Analysis Period", comment: "LoopInsights period picker label"), selection: analysisPeriodBinding) { + ForEach(LoopInsightsAnalysisPeriod.allCases) { period in + Text(period.displayName).tag(period) + } + } + + // Analyze button + Button(action: { viewModel.runAnalysis() }) { + HStack { + Spacer() + if viewModel.isAnalyzing { + ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .tint(.white) + .padding(.trailing, 8) + Text(NSLocalizedString("Analyzing...", comment: "LoopInsights analyzing")) + } else { + Image(systemName: "sparkles") + Text(String(format: NSLocalizedString("Analyze %@", comment: "LoopInsights analyze button"), viewModel.focusSettingType.abbreviation)) + } + Spacer() + } + .font(.body.weight(.medium)) + .foregroundColor(.white) + .padding(.vertical, 10) + .background( + (viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) + ? Color(red: 0.2, green: 0.6, blue: 0.2) + : Color.green + ) + .cornerRadius(10) + } + .buttonStyle(.plain) + .disabled(viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) + + if !LoopInsights_SecureStorage.hasAPIKey { + Text(NSLocalizedString("Configure your AI API key in LoopInsights Settings to begin analysis.", comment: "LoopInsights no API key message")) + .font(.caption) + .foregroundColor(.orange) + } + + if let error = viewModel.analysisError { + Text(error.localizedDescription) + .font(.caption) + .foregroundColor(.red) + } + } + } + + // MARK: - Pending Suggestions + + private var pendingSuggestionsSection: some View { + Section(header: HStack { + Text(NSLocalizedString("Suggestions for Fine Tuning", comment: "LoopInsights suggestions header")) + Spacer() + Button(NSLocalizedString("Dismiss All", comment: "LoopInsights dismiss all button")) { + viewModel.dismissAllPending() + } + .font(.caption) + }) { + ForEach(viewModel.pendingSuggestions) { record in + suggestionCard(record) + } + HStack(spacing: 16) { + Text(NSLocalizedString("Confidence Level:", comment: "LoopInsights confidence legend label")) + legendDot(color: .blue, label: NSLocalizedString("High", comment: "LoopInsights legend: high")) + legendDot(color: .orange, label: NSLocalizedString("Medium", comment: "LoopInsights legend: medium")) + legendDot(color: .yellow, label: NSLocalizedString("Low", comment: "LoopInsights legend: low")) + } + .font(.caption2) + .foregroundColor(.secondary) + } + } + + private func suggestionCard(_ record: LoopInsightsSuggestionRecord) -> some View { + Button(action: { selectedRecord = record }) { + VStack(alignment: .leading, spacing: 6) { + HStack { + Image(systemName: record.suggestion.settingType.systemImage) + .foregroundColor(.accentColor) + Text(record.suggestion.summaryDescription) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.primary) + Spacer() + confidenceBadge(record.suggestion.confidence) + } + + // Show time blocks summary + ForEach(record.suggestion.timeBlocks) { block in + HStack { + Text(block.timeRangeFormatted) + .font(.caption) + .foregroundColor(.secondary) + Spacer() + Text("\(String(format: "%.1f", block.currentValue)) → \(String(format: "%.1f", block.proposedValue))") + .font(.caption) + .fontWeight(.medium) + .foregroundColor(block.proposedValue > block.currentValue ? .orange : .blue) + Text("(\(String(format: "%+.0f", block.changePercent))%)") + .font(.caption2) + .foregroundColor(.secondary) + } + } + + // Quick action buttons + HStack { + Button(action: { viewModel.applySuggestion(record) }) { + Label(NSLocalizedString("Apply", comment: "LoopInsights apply"), systemImage: "checkmark.circle") + .font(.caption) + } + .buttonStyle(.borderedProminent) + .controlSize(.small) + + Button(action: { viewModel.dismissSuggestion(record) }) { + Label(NSLocalizedString("Dismiss", comment: "LoopInsights dismiss"), systemImage: "xmark.circle") + .font(.caption) + } + .buttonStyle(.bordered) + .controlSize(.small) + + Spacer() + + Button(action: { selectedRecord = record }) { + Text(NSLocalizedString("Reasoning", comment: "LoopInsight's detailed reasoning")) + .font(.caption) + } + .controlSize(.small) + } + .padding(.top, 2) + } + .padding(.vertical, 4) + } + .buttonStyle(.plain) + } + + private func confidenceBadge(_ confidence: LoopInsightsConfidence) -> some View { + Text(confidence.displayName) + .font(.caption2) + .fontWeight(.medium) + .padding(.horizontal, 6) + .padding(.vertical, 2) + .background(confidenceColor(confidence).opacity(0.2)) + .foregroundColor(confidenceColor(confidence)) + .cornerRadius(4) + } + + private func confidenceColor(_ confidence: LoopInsightsConfidence) -> Color { + switch confidence { + case .low: return .yellow + case .medium: return .orange + case .high: return .blue + } + } + + private func settingStatusColor(_ status: LoopInsightsSettingStatus) -> Color { + switch status { + case .notAnalyzed: return .gray + case .analyzedOK: return .green + case .hasSuggestions: return .purple + } + } + + private func legendDot(color: Color, label: String) -> some View { + HStack(spacing: 4) { + Circle() + .fill(color) + .frame(width: 8, height: 8) + Text(label) + } + } + + // MARK: - Detected Patterns + + private var detectedPatternsSection: some View { + Section(header: HStack { + Image(systemName: "waveform.path.ecg") + Text(NSLocalizedString("Detected Patterns", comment: "LoopInsights detected patterns header")) + }) { + ForEach(viewModel.detectedPatterns) { pattern in + HStack(alignment: .top, spacing: 10) { + Image(systemName: pattern.type.systemImage) + .foregroundColor(.accentColor) + .frame(width: 20) + VStack(alignment: .leading, spacing: 2) { + Text(pattern.type.displayName) + .font(.subheadline) + .fontWeight(.medium) + Text(pattern.detail) + .font(.caption) + .foregroundColor(.secondary) + } + Spacer() + confidenceBadge(pattern.severity) + } + .padding(.vertical, 2) + } + } + } + + // MARK: - Assessment + + private var assessmentSection: some View { + Section(header: Text(NSLocalizedString("AI Assessment", comment: "LoopInsights assessment header"))) { + if let assessment = viewModel.overallAssessment { + Text(assessment) + .font(.subheadline) + .foregroundColor(.secondary) + } + + if let stats = viewModel.aggregatedStats { + statsRow(label: NSLocalizedString("Time in Range", comment: "LoopInsights TIR label"), + value: String(format: "%.1f%%", stats.glucoseStats.timeInRange)) + statsRow(label: NSLocalizedString("Average Glucose", comment: "LoopInsights avg glucose label"), + value: String(format: "%.0f mg/dL", stats.glucoseStats.averageGlucose)) + statsRow(label: NSLocalizedString("GMI (est. A1C)", comment: "LoopInsights GMI label"), + value: String(format: "%.1f%%", stats.glucoseStats.gmi)) + statsRow(label: NSLocalizedString("Total Daily Dose", comment: "LoopInsights TDD label"), + value: String(format: "%.1f U/day", stats.insulinStats.totalDailyDose)) + statsRow(label: NSLocalizedString("CV", comment: "LoopInsights CV label"), + value: String(format: "%.1f%%", stats.glucoseStats.coefficientOfVariation)) + } + } + } + + private func statsRow(label: String, value: String) -> some View { + HStack { + Text(label) + .font(.caption) + .foregroundColor(.secondary) + Spacer() + Text(value) + .font(.caption) + .fontWeight(.medium) + } + } + + // MARK: - Navigation + + private var navigationSection: some View { + Section { + Button(action: { showingHistory = true }) { + HStack { + Image(systemName: "clock.arrow.circlepath") + Text(NSLocalizedString("Suggestion History", comment: "LoopInsights history button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + } + + // MARK: - Developer Mode + + private func handleDeveloperTap() { + developerTapCount += 1 + if developerTapCount >= LoopInsights_FeatureFlags.developerUnlockThreshold { + LoopInsights_FeatureFlags.developerModeEnabled.toggle() + developerTapCount = 0 + // Haptic feedback + let generator = UINotificationFeedbackGenerator() + generator.notificationOccurred(LoopInsights_FeatureFlags.developerModeEnabled ? .success : .warning) + } + } + + // MARK: - Formatters + + private static let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .short + return formatter + }() +} + diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift new file mode 100644 index 0000000000..36ee889535 --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -0,0 +1,942 @@ +// +// LoopInsights_SettingsView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import Combine + +/// LoopInsights settings and configuration view. +/// Accessible from Loop's main SettingsView via NavigationLink. +struct LoopInsights_SettingsView: View { + + @Environment(\.openURL) var openURL + + @State private var isEnabled = LoopInsights_FeatureFlags.isEnabled + @State private var selectedPeriod = LoopInsights_FeatureFlags.analysisPeriod + @State private var selectedApplyMode = LoopInsights_FeatureFlags.applyMode + @State private var selectedPersonality = LoopInsights_FeatureFlags.aiPersonality + + // AI Configuration + @State private var baseURL: String + @State private var model: String + @State private var apiKeyText = "" + @State private var showAPIKey = false + @State private var detectedFormat: LoopInsightsRequestFormat + + // Advanced settings + @State private var showAdvanced = false + @State private var endpointPath: String + @State private var apiVersion: String + @State private var organizationID: String + @State private var formatOverride: LoopInsightsRequestFormat? + + // Test connection + @State private var isTesting = false + @State private var testResult: TestResult? + + // Data + @State private var showingClearHistory = false + + // Developer mode unlock + @State private var developerTapCount = 0 + @State private var showDeveloperUnlocked = false + + // Test data (developer mode) + @State private var useTestData = LoopInsights_FeatureFlags.useTestData + @State private var testDataProvider: LoopInsights_TestDataProvider? + @State private var showTestDashboard = false + + private enum TestResult { + case success + case warning(String) + case failure(String) + + var isSuccess: Bool { + if case .success = self { return true } + return false + } + } + + init() { + let config = LoopInsights_FeatureFlags.aiConfiguration + _baseURL = State(initialValue: config.baseURL) + _model = State(initialValue: config.model) + _detectedFormat = State(initialValue: LoopInsightsRequestFormat.detect(from: config.baseURL)) + _endpointPath = State(initialValue: config.endpointPath) + _apiVersion = State(initialValue: config.apiVersion ?? "") + _organizationID = State(initialValue: config.organizationID ?? "") + + // Check if user has overridden format (differs from auto-detected) + let detected = LoopInsightsRequestFormat.detect(from: config.baseURL) + if config.requestFormat != detected { + _formatOverride = State(initialValue: config.requestFormat) + } else { + _formatOverride = State(initialValue: nil) + } + } + + var body: some View { + Form { + featureToggleSection + if isEnabled { + aiConfigSection + advancedAISection + analysisOptionsSection + personalitySection + dataSection + if LoopInsights_FeatureFlags.developerModeEnabled { + developerSection + } + } + } + .navigationTitle(NSLocalizedString("LoopInsights Settings", comment: "LoopInsights settings title")) + .navigationBarTitleDisplayMode(.inline) + .onAppear { + apiKeyText = LoopInsights_SecureStorage.loadAPIKey() ?? "" + + // Clear stale endpoint path if it matches a different format's default + if !endpointPath.isEmpty { + let detected = LoopInsightsRequestFormat.detect(from: baseURL) + let isKnownDefault = LoopInsightsRequestFormat.allCases.contains { $0.defaultEndpoint == endpointPath } + if isKnownDefault && endpointPath != detected.defaultEndpoint { + endpointPath = "" + } + } + } + .alert( + NSLocalizedString("Clear History", comment: "LoopInsights clear history alert title"), + isPresented: $showingClearHistory + ) { + Button(NSLocalizedString("Clear All", comment: "LoopInsights clear all button"), role: .destructive) { + LoopInsights_SuggestionStore.shared.clearAllHistory() + } + Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) {} + } message: { + Text(NSLocalizedString("This will permanently delete all suggestion history. This cannot be undone.", comment: "LoopInsights clear history warning")) + } + .alert( + NSLocalizedString("Developer Mode", comment: "LoopInsights developer mode alert title"), + isPresented: $showDeveloperUnlocked + ) { + Button(NSLocalizedString("OK", comment: "OK button")) {} + } message: { + Text(NSLocalizedString("Developer mode has been enabled. You now have access to test data fixtures and auto-apply mode.", comment: "LoopInsights developer mode unlocked message")) + } + .sheet(isPresented: $showTestDashboard) { + NavigationView { + LoopInsights_TestDashboardWrapper() + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + showTestDashboard = false + } + } + } + } + } + } + + // MARK: - Feature Toggle + + private var featureToggleSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "brain.head.profile") + .foregroundColor(.accentColor) + Text("LOOPINSIGHTS") + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + .lineLimit(1) + .layoutPriority(1) + } + .onLongPressGesture(minimumDuration: 1) { + developerTapCount += 1 + if developerTapCount >= LoopInsights_FeatureFlags.developerUnlockThreshold { + LoopInsights_FeatureFlags.developerModeEnabled = true + developerTapCount = 0 + showDeveloperUnlocked = true + } + } + + Toggle(NSLocalizedString("Enable LoopInsights", comment: "LoopInsights enable toggle"), isOn: $isEnabled) + .onChange(of: isEnabled) { newValue in + LoopInsights_FeatureFlags.isEnabled = newValue + } + + Text(NSLocalizedString("Enable AI-powered therapy settings analysis and suggestions. When disabled, the feature is hidden but settings are preserved.", comment: "LoopInsights feature toggle description")) + .font(.caption) + .foregroundColor(.secondary) + + if isEnabled { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 6) { + Image(systemName: "cross.fill") + .foregroundColor(.red) + Text(NSLocalizedString("MEDICAL DISCLAIMER", comment: "LoopInsights medical disclaimer header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + .lineLimit(1) + } + Text(NSLocalizedString("AI therapy suggestions are advisory only. You are responsible for reviewing all changes. Consult your healthcare provider for significant therapy adjustments.", comment: "LoopInsights medical disclaimer")) + .font(.caption) + .foregroundColor(.secondary) + } + + Button(action: { showTestDashboard = true }) { + HStack { + Image(systemName: "chart.line.uptrend.xyaxis") + .foregroundColor(.accentColor) + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Open Dashboard", comment: "LoopInsights open dashboard button")) + .fontWeight(.medium) + Text(NSLocalizedString("View therapy settings, run AI analysis, and manage suggestions", comment: "LoopInsights dashboard description")) + .font(.caption) + .foregroundColor(.secondary) + } + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + } + } + } + + // MARK: - AI Configuration + + private var aiConfigSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "sparkles") + .foregroundColor(.accentColor) + Text(NSLocalizedString("AI CONFIGURATION", comment: "LoopInsights AI config header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + Text(NSLocalizedString("Enter your preferred AI API connection details. Any provider that supports chat completions will work.", comment: "LoopInsights AI config description")) + .font(.caption) + .foregroundColor(.secondary) + + // API key signup links + VStack(alignment: .leading, spacing: 6) { + Text(NSLocalizedString("Get an API key from a provider:", comment: "LoopInsights API key links header")) + .font(.caption) + .foregroundColor(.secondary) + HStack(spacing: 12) { + apiKeyLink("OpenAI", url: "https://platform.openai.com/api-keys", color: .green) + apiKeyLink("Anthropic", url: "https://console.anthropic.com/settings/keys", color: .orange) + apiKeyLink("Gemini", url: "https://aistudio.google.com/apikey", color: .blue) + apiKeyLink("Grok", url: "https://console.x.ai", color: .red) + } + } + + // Base URL + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Base URL", comment: "LoopInsights base URL label")) + .font(.caption) + .foregroundColor(.secondary) + HStack(spacing: 8) { + TextField("", text: $baseURL) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .overlay(alignment: .leading) { + if baseURL.isEmpty { + Text("e.g. https://api.openai.com/v1") + .foregroundColor(.secondary) + .padding(.leading, 4) + .allowsHitTesting(false) + } + } + .foregroundColor(.primary) + .autocapitalization(.none) + .disableAutocorrection(true) + .keyboardType(.URL) + .onChange(of: baseURL) { _ in + detectedFormat = LoopInsightsRequestFormat.detect(from: baseURL) + formatOverride = nil + endpointPath = "" + testResult = nil + saveConfiguration() + } + if !baseURL.isEmpty { + Button(action: { baseURL = "" }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.secondary) + } + .buttonStyle(.plain) + } + } + } + + // API Key + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("API Key", comment: "LoopInsights API key label")) + .font(.caption) + .foregroundColor(.secondary) + HStack(spacing: 8) { + Group { + if showAPIKey { + TextField(NSLocalizedString("Enter your API key", comment: "LoopInsights API key placeholder"), text: $apiKeyText) + } else { + SecureField(NSLocalizedString("Enter your API key", comment: "LoopInsights API key placeholder"), text: $apiKeyText) + } + } + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: apiKeyText) { newValue in + saveAPIKey(newValue) + testResult = nil + } + Button(action: { showAPIKey.toggle() }) { + Image(systemName: showAPIKey ? "eye.slash" : "eye") + .foregroundColor(.blue) + } + .buttonStyle(.plain) + if !apiKeyText.isEmpty { + Button(action: { apiKeyText = "" }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.secondary) + } + .buttonStyle(.plain) + } + } + if !apiKeyText.isEmpty { + Text(NSLocalizedString("Stored securely in Keychain", comment: "LoopInsights keychain confirmation")) + .font(.caption2) + .foregroundColor(.green) + } + } + + // Model + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Model", comment: "LoopInsights model label")) + .font(.caption) + .foregroundColor(.secondary) + HStack(spacing: 8) { + TextField("e.g. gpt-4o, claude-sonnet-4-5-20250514, gemini-2.0-flash", text: $model) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: model) { _ in + testResult = nil + saveConfiguration() + } + if !model.isEmpty { + Button(action: { model = "" }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.secondary) + } + .buttonStyle(.plain) + } + } + } + + // Test Connection + VStack(spacing: 8) { + Button(action: testConnection) { + HStack(spacing: 6) { + if isTesting { + ProgressView() + .progressViewStyle(.circular) + .scaleEffect(0.8) + .tint(.black) + Text(NSLocalizedString("Testing...", comment: "LoopInsights testing connection")) + } else { + Image(systemName: "checkmark.shield") + Text(NSLocalizedString("Test Connection", comment: "LoopInsights test connection button")) + } + } + .font(.body.weight(.medium)) + .foregroundColor(.black) + .frame(maxWidth: .infinity) + .padding(.vertical, 10) + .background(Color.white) + .cornerRadius(10) + } + .disabled(isTesting || apiKeyText.isEmpty || baseURL.isEmpty) + .opacity((isTesting || apiKeyText.isEmpty || baseURL.isEmpty) ? 0.5 : 1.0) + .buttonStyle(.plain) + + if let result = testResult { + switch result { + case .success: + HStack(spacing: 4) { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.green) + Text(NSLocalizedString("Connected", comment: "LoopInsights connection success")) + .font(.caption) + .foregroundColor(.green) + } + case .warning(let message): + HStack(alignment: .top, spacing: 4) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.orange) + Text(message) + .font(.caption) + .foregroundColor(.orange) + .fixedSize(horizontal: false, vertical: true) + } + case .failure(let message): + HStack(alignment: .top, spacing: 4) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.red) + Text(message) + .font(.caption) + .foregroundColor(.red) + .fixedSize(horizontal: false, vertical: true) + } + } + } + } + } + } + } + + // MARK: - Advanced AI Config + + private var advancedAISection: some View { + Section { + DisclosureGroup(NSLocalizedString("Advanced API Settings", comment: "LoopInsights advanced settings toggle"), isExpanded: $showAdvanced) { + VStack(alignment: .leading, spacing: 12) { + Text(NSLocalizedString("This section is for self-hosted, Azure, or non-standard API endpoints. Most users can ignore these.", comment: "LoopInsights advanced settings description")) + .font(.caption2) + .foregroundColor(.secondary) + + // Endpoint Path + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Endpoint Path", comment: "LoopInsights endpoint path label")) + .font(.caption) + .foregroundColor(.secondary) + TextField("e.g. /chat/completions", text: $endpointPath) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: endpointPath) { _ in + saveConfiguration() + } + Text(NSLocalizedString("Leave blank to use the default for your chosen format.", comment: "LoopInsights endpoint path hint")) + .font(.caption2) + .foregroundColor(.secondary) + } + + // API Version + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("API Version", comment: "LoopInsights API version label")) + .font(.caption) + .foregroundColor(.secondary) + TextField("e.g. 2024-06-01 (Azure only)", text: $apiVersion) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: apiVersion) { _ in + saveConfiguration() + } + } + + // Organization ID + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Organization ID", comment: "LoopInsights org ID label")) + .font(.caption) + .foregroundColor(.secondary) + TextField("e.g. org-... (OpenAI, Azure)", text: $organizationID) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: organizationID) { _ in + saveConfiguration() + } + } + + // Request Format Override + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Request Format Override", comment: "LoopInsights format override label")) + .font(.caption) + .foregroundColor(.secondary) + Picker("Format", selection: Binding( + get: { formatOverride ?? .openAICompatible }, + set: { formatOverride = $0; saveConfiguration() } + )) { + ForEach(LoopInsightsRequestFormat.allCases, id: \.rawValue) { format in + Text(format.displayName).tag(format) + } + } + .pickerStyle(.segmented) + HStack(spacing: 4) { + Text(NSLocalizedString("Auto-detected:", comment: "LoopInsights auto-detected format label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(detectedFormat.displayName) + .font(.caption2) + .fontWeight(.medium) + .foregroundColor(.secondary) + if formatOverride != nil { + Button(NSLocalizedString("Reset", comment: "LoopInsights reset format button")) { + formatOverride = nil + saveConfiguration() + } + .font(.caption2) + } + } + Text(NSLocalizedString("Most providers use OpenAI Compatible. Only change this if auto-detection is wrong.", comment: "LoopInsights format override hint")) + .font(.caption2) + .foregroundColor(.secondary) + } + + // Endpoint preview + if !endpointPreview.isEmpty { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Full endpoint URL:", comment: "LoopInsights endpoint preview label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(endpointPreview) + .font(.caption2) + .foregroundColor(.secondary) + .lineLimit(2) + } + } + } + .padding(.vertical, 4) + } + } + } + + // MARK: - Analysis Options (Apply Mode + Period) + + private var analysisOptionsSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "slider.horizontal.3") + .foregroundColor(.accentColor) + Text(NSLocalizedString("ANALYSIS OPTIONS", comment: "LoopInsights analysis options header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + // Lookback period slider + VStack(spacing: 8) { + HStack { + Text(NSLocalizedString("Lookback Period", comment: "LoopInsights period picker")) + .font(.subheadline) + Spacer() + Text(selectedPeriod.displayName) + .font(.subheadline) + .fontWeight(.medium) + .foregroundColor(.accentColor) + } + + let cases = LoopInsightsAnalysisPeriod.allCases + let currentIndex = Double(cases.firstIndex(of: selectedPeriod) ?? 0) + Slider( + value: Binding( + get: { currentIndex }, + set: { newValue in + let index = Int(newValue.rounded()) + if index >= 0 && index < cases.count { + selectedPeriod = cases[index] + } + } + ), + in: 0...Double(cases.count - 1), + step: 1 + ) + HStack { + Text(cases.first?.displayName ?? "") + .font(.caption2) + .foregroundColor(.secondary) + Spacer() + Text(cases.last?.displayName ?? "") + .font(.caption2) + .foregroundColor(.secondary) + } + } + .onChange(of: selectedPeriod) { newValue in + LoopInsights_FeatureFlags.analysisPeriod = newValue + } + + Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights analysis period description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + + // Apply mode picker + let availableModes = LoopInsights_FeatureFlags.developerModeEnabled + ? LoopInsightsApplyMode.allCases + : LoopInsightsApplyMode.publicModes + + Picker(NSLocalizedString("When applying suggestions", comment: "LoopInsights apply mode picker"), selection: $selectedApplyMode) { + ForEach(availableModes) { mode in + Text(mode.displayName) + .foregroundColor(mode == .autoApply ? .orange : .primary) + .tag(mode) + } + } + .onChange(of: selectedApplyMode) { newValue in + LoopInsights_FeatureFlags.applyMode = newValue + } + + Text(selectedApplyMode.description) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + // MARK: - AI Personality + + private var personalitySection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "theatermasks") + .foregroundColor(.accentColor) + Text(NSLocalizedString("AI PERSONALITY", comment: "LoopInsights AI personality header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + Picker(NSLocalizedString("Response Style", comment: "LoopInsights personality picker label"), selection: $selectedPersonality) { + ForEach(LoopInsightsAIPersonality.allCases) { personality in + Text(personality.displayName).tag(personality) + } + } + .onChange(of: selectedPersonality) { newValue in + LoopInsights_FeatureFlags.aiPersonality = newValue + } + + Text(selectedPersonality.description) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + // MARK: - Data + + private var dataSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "clock.arrow.circlepath") + .foregroundColor(.accentColor) + Text(NSLocalizedString("SUGGESTION HISTORY", comment: "LoopInsights history header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + HStack { + Text(NSLocalizedString("Stored Suggestions", comment: "LoopInsights stored suggestions label")) + Spacer() + Text("\(LoopInsights_SuggestionStore.shared.allRecords.count)") + .foregroundColor(.secondary) + } + + Button(role: .destructive, action: { showingClearHistory = true }) { + HStack { + Image(systemName: "trash") + Text(NSLocalizedString("Clear Suggestion History", comment: "LoopInsights clear history button")) + } + } + + Text(NSLocalizedString("All past AI suggestions, including applied, dismissed, and expired records.", comment: "LoopInsights history description")) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + // MARK: - Developer Section (Hidden) + + private var developerSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "hammer.fill") + .foregroundColor(.orange) + Text(NSLocalizedString("DEVELOPER", comment: "LoopInsights developer section header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.orange) + .textCase(.uppercase) + } + + HStack { + Text(NSLocalizedString("Developer Mode", comment: "LoopInsights developer mode label")) + Spacer() + Text(NSLocalizedString("Active", comment: "LoopInsights developer mode active")) + .foregroundColor(.orange) + .fontWeight(.medium) + } + + if selectedApplyMode == .autoApply { + HStack(alignment: .top, spacing: 6) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.red) + Text(NSLocalizedString("Auto-Apply is enabled. High-confidence suggestions will be applied automatically.", comment: "LoopInsights auto-apply warning")) + .font(.caption) + .foregroundColor(.red) + } + } + + // Test Data Toggle + Toggle(NSLocalizedString("Use Test Data Fixtures", comment: "LoopInsights test data toggle"), isOn: $useTestData) + .onChange(of: useTestData) { newValue in + LoopInsights_FeatureFlags.useTestData = newValue + if newValue { + testDataProvider = LoopInsights_TestDataProvider() + } else { + testDataProvider = nil + } + } + + Text(NSLocalizedString("Load JSON fixtures from Documents/LoopInsights/ instead of real Loop data. Use pull_tidepool_data.py to generate fixtures from your Tidepool account.", comment: "LoopInsights test data description")) + .font(.caption) + .foregroundColor(.secondary) + + // Test data status + if useTestData { + testDataStatusView + } + + Button(action: { + LoopInsights_FeatureFlags.developerModeEnabled = false + LoopInsights_FeatureFlags.applyMode = .manual + selectedApplyMode = .manual + useTestData = false + LoopInsights_FeatureFlags.useTestData = false + testDataProvider = nil + }) { + HStack { + Image(systemName: "lock.fill") + Text(NSLocalizedString("Disable Developer Mode", comment: "LoopInsights disable developer button")) + } + .foregroundColor(.orange) + } + } + } + } + + // MARK: - Test Data Status + + private var testDataStatusView: some View { + VStack(alignment: .leading, spacing: 6) { + if let provider = testDataProvider { + if provider.hasTestData { + HStack(spacing: 4) { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.green) + .font(.caption) + Text(NSLocalizedString("Fixtures loaded", comment: "LoopInsights fixtures loaded")) + .font(.caption) + .foregroundColor(.green) + } + Text(provider.dataSummary) + .font(.caption2) + .foregroundColor(.secondary) + if let range = provider.dateRange { + let formatter = DateFormatter() + let _ = formatter.dateStyle = .short + Text("\(formatter.string(from: range.start)) — \(formatter.string(from: range.end))") + .font(.caption2) + .foregroundColor(.secondary) + } + } else { + HStack(spacing: 4) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.orange) + .font(.caption) + Text(NSLocalizedString("No fixtures found", comment: "LoopInsights no fixtures")) + .font(.caption) + .foregroundColor(.orange) + } + Text(NSLocalizedString("Place fixture files in Documents/LoopInsights/ or rebuild with bundled test data.", comment: "LoopInsights no fixtures hint")) + .font(.caption2) + .foregroundColor(.secondary) + Text("Documents path: \(LoopInsights_TestDataProvider.documentsDirectory.path)") + .font(.caption2) + .foregroundColor(.secondary) + .lineLimit(3) + } + } else { + ProgressView() + .scaleEffect(0.8) + } + } + .onAppear { + if useTestData && testDataProvider == nil { + testDataProvider = LoopInsights_TestDataProvider() + } + } + } + + + // MARK: - Helpers + + private var effectiveFormat: LoopInsightsRequestFormat { + return formatOverride ?? detectedFormat + } + + private var endpointPreview: String { + let base = baseURL.trimmingCharacters(in: .whitespacesAndNewlines) + guard !base.isEmpty else { return "" } + let trimmed = base.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + let path = endpointPath.isEmpty ? effectiveFormat.defaultEndpoint : endpointPath + let resolvedPath = path.replacingOccurrences(of: "{MODEL}", with: model.isEmpty ? "" : model) + return "\(trimmed)\(resolvedPath)" + } + + private func apiKeyLink(_ name: String, url: String, color: Color) -> some View { + Button(action: { if let u = URL(string: url) { openURL(u) } }) { + Text(name) + .font(.caption) + .foregroundColor(color) + } + .buttonStyle(.plain) + } + + private func saveConfiguration() { + let format = effectiveFormat + var config = LoopInsights_FeatureFlags.aiConfiguration + config.baseURL = baseURL + config.model = model + config.endpointPath = endpointPath.isEmpty ? format.defaultEndpoint : endpointPath + config.requestFormat = format + config.apiKeyHeader = format.defaultAPIKeyHeader + config.apiKeyPrefix = format.defaultAPIKeyPrefix + config.apiVersion = apiVersion.isEmpty ? nil : apiVersion + config.organizationID = organizationID.isEmpty ? nil : organizationID + LoopInsights_FeatureFlags.aiConfiguration = config + } + + private func saveAPIKey(_ key: String) { + if key.isEmpty { + LoopInsights_SecureStorage.deleteAPIKey() + } else { + try? LoopInsights_SecureStorage.saveAPIKey(key) + } + saveConfiguration() + } + + private func testConnection() { + guard !baseURL.isEmpty, !apiKeyText.isEmpty else { return } + + isTesting = true + testResult = nil + + // Save key and config first + try? LoopInsights_SecureStorage.saveAPIKey(apiKeyText) + saveConfiguration() + + Task { + do { + let success = try await LoopInsights_AIServiceAdapter.shared.testConnection() + await MainActor.run { + testResult = success ? .success : .failure(NSLocalizedString("Unknown error", comment: "LoopInsights unknown error")) + isTesting = false + } + } catch let error as LoopInsightsError { + await MainActor.run { + // 402/429 are "connected with caveats" — show as warning + let message = error.localizedDescription + if message.contains("402") || message.contains("429") { + testResult = .warning(message) + } else { + testResult = .failure(message) + } + isTesting = false + } + } catch { + await MainActor.run { + testResult = .failure(error.localizedDescription) + isTesting = false + } + } + } + } +} + +// MARK: - Dashboard Wrapper + +/// Lightweight container that owns the ViewModel and defers heavy creation to +/// onAppear. Also forwards the ViewModel's objectWillChange to its own publisher +/// so the wrapper view re-renders when any ViewModel @Published property changes. +/// This allows DashboardView to use a plain `var` instead of @ObservedObject, +/// avoiding a silent SwiftUI crash during sheet presentation rendering. +private class LoopInsights_DashboardContainer: ObservableObject { + @Published var viewModel: LoopInsights_DashboardViewModel? + /// Increments on every ViewModel objectWillChange, forcing SwiftUI to + /// re-evaluate DashboardView's body (since the reference itself doesn't change). + @Published var renderTrigger: Int = 0 + private var vmCancellable: AnyCancellable? + + func initializeIfNeeded() { + guard viewModel == nil else { return } + + let provider = LoopInsights_TestDataProvider() + let coordinator = LoopInsights_Coordinator(testDataProvider: provider) + let vm = LoopInsights_DashboardViewModel(coordinator: coordinator) + + // Forward ViewModel's objectWillChange → increment renderTrigger + // so SwiftUI sees a value change and re-evaluates DashboardView + vmCancellable = vm.objectWillChange.sink { [weak self] _ in + DispatchQueue.main.async { + self?.renderTrigger += 1 + } + } + + // Defer @Published assignment to next run loop to avoid + // objectWillChange during SwiftUI's view update cycle + DispatchQueue.main.async { [weak self] in + self?.viewModel = vm + } + } +} + +/// Wrapper view that owns the Container via @StateObject and presents +/// the DashboardView once the ViewModel is ready. +private struct LoopInsights_TestDashboardWrapper: View { + @StateObject private var container = LoopInsights_DashboardContainer() + + var body: some View { + Group { + if let vm = container.viewModel { + LoopInsights_DashboardView( + viewModel: vm, + renderTrigger: container.renderTrigger + ) + } else { + VStack(spacing: 12) { + ProgressView() + Text(NSLocalizedString("Loading test data...", comment: "LoopInsights loading test data")) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + .onAppear { + container.initializeIfNeeded() + } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift b/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift new file mode 100644 index 0000000000..afd0bb2621 --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift @@ -0,0 +1,239 @@ +// +// LoopInsights_SuggestionDetailView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Detailed view of a single suggestion showing reasoning, current vs proposed +/// values for each time block, and apply/dismiss actions. +struct LoopInsights_SuggestionDetailView: View { + + let record: LoopInsightsSuggestionRecord + let onApply: () -> Void + let onDismiss: () -> Void + + @Environment(\.dismiss) private var dismiss + + var body: some View { + List { + headerSection + reasoningSection + timeBlocksSection + if record.status == .pending { + actionsSection + } else { + statusSection + } + } + .navigationTitle(record.suggestion.settingType.displayName) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + dismiss() + } + } + } + } + + // MARK: - Header + + private var headerSection: some View { + Section { + VStack(alignment: .leading, spacing: 8) { + HStack { + Image(systemName: record.suggestion.settingType.systemImage) + .font(.title2) + .foregroundColor(.accentColor) + VStack(alignment: .leading) { + Text(record.suggestion.settingType.displayName) + .font(.headline) + Text(record.suggestion.summaryDescription) + .font(.subheadline) + .foregroundColor(.secondary) + } + Spacer() + confidenceBadge + } + + HStack { + Label(record.suggestion.analysisPeriod.displayName, systemImage: "calendar") + .font(.caption) + .foregroundColor(.secondary) + Spacer() + Text(Self.dateFormatter.string(from: record.suggestion.createdAt)) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + + // MARK: - Time Blocks + + private var timeBlocksSection: some View { + Section(header: Text(NSLocalizedString("Proposed Changes", comment: "LoopInsights proposed changes header"))) { + ForEach(record.suggestion.timeBlocks) { block in + VStack(alignment: .leading, spacing: 4) { + Text(block.timeRangeFormatted) + .font(.subheadline) + .fontWeight(.medium) + + HStack { + VStack(alignment: .leading) { + Text(NSLocalizedString("Current", comment: "LoopInsights current value label")) + .font(.caption) + .foregroundColor(.secondary) + Text(String(format: "%.1f %@", block.currentValue, record.suggestion.settingType.unitDescription)) + .font(.body) + .fontWeight(.medium) + } + + Spacer() + + Image(systemName: "arrow.right") + .foregroundColor(.accentColor) + + Spacer() + + VStack(alignment: .trailing) { + Text(NSLocalizedString("Proposed", comment: "LoopInsights proposed value label")) + .font(.caption) + .foregroundColor(.secondary) + Text(String(format: "%.1f %@", block.proposedValue, record.suggestion.settingType.unitDescription)) + .font(.body) + .fontWeight(.bold) + .foregroundColor(block.proposedValue > block.currentValue ? .orange : .blue) + } + } + + HStack { + Spacer() + Text(String(format: "%+.1f%% change", block.changePercent)) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + } + + // MARK: - Reasoning + + private var reasoningSection: some View { + Section(header: Text(NSLocalizedString("AI Reasoning", comment: "LoopInsights reasoning header"))) { + Text(record.suggestion.reasoning) + .font(.subheadline) + .foregroundColor(.secondary) + } + } + + // MARK: - Actions + + private var actionsSection: some View { + Section { + Button(action: { + onApply() + dismiss() + }) { + HStack { + Spacer() + Image(systemName: "checkmark.circle.fill") + Text(NSLocalizedString("Apply Suggestion", comment: "LoopInsights apply suggestion button")) + .fontWeight(.semibold) + Spacer() + } + .padding(.vertical, 4) + } + .buttonStyle(.borderedProminent) + .listRowBackground(Color.clear) + + Button(action: { + onDismiss() + dismiss() + }) { + HStack { + Spacer() + Image(systemName: "xmark.circle") + Text(NSLocalizedString("Dismiss Suggestion", comment: "LoopInsights dismiss suggestion button")) + Spacer() + } + .padding(.vertical, 4) + } + .buttonStyle(.bordered) + .listRowBackground(Color.clear) + } + } + + // MARK: - Status (for resolved records) + + private var statusSection: some View { + Section(header: Text(NSLocalizedString("Status", comment: "LoopInsights status header"))) { + HStack { + Image(systemName: record.status.systemImage) + .foregroundColor(statusColor) + Text(record.status.displayName) + .fontWeight(.medium) + Spacer() + if let resolvedAt = record.resolvedAt { + Text(Self.dateFormatter.string(from: resolvedAt)) + .font(.caption) + .foregroundColor(.secondary) + } + } + + if let mode = record.applyMode { + HStack { + Text(NSLocalizedString("Applied via", comment: "LoopInsights applied via label")) + .foregroundColor(.secondary) + Spacer() + Text(mode.displayName) + .fontWeight(.medium) + } + } + } + } + + // MARK: - Helpers + + private var confidenceBadge: some View { + Text(record.suggestion.confidence.displayName) + .font(.caption2) + .fontWeight(.medium) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(confidenceColor.opacity(0.2)) + .foregroundColor(confidenceColor) + .cornerRadius(6) + } + + private var confidenceColor: Color { + switch record.suggestion.confidence { + case .low: return .yellow + case .medium: return .orange + case .high: return .green + } + } + + private var statusColor: Color { + switch record.status { + case .pending: return .blue + case .applied: return .green + case .dismissed: return .gray + case .autoApplied: return .orange + } + } + + private static let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .short + return formatter + }() +} diff --git a/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift b/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift new file mode 100644 index 0000000000..37369e4cef --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift @@ -0,0 +1,183 @@ +// +// LoopInsights_SuggestionHistoryView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Scrollable log of all past suggestions with status indicators. +/// Shows the complete history of LoopInsights recommendations. +struct LoopInsights_SuggestionHistoryView: View { + + @ObservedObject var store: LoopInsights_SuggestionStore + @State private var selectedRecord: LoopInsightsSuggestionRecord? + @State private var filterStatus: FilterOption = .all + @Environment(\.dismiss) private var dismiss + + enum FilterOption: String, CaseIterable, Identifiable { + case all = "All" + case applied = "Applied" + case dismissed = "Dismissed" + case autoApplied = "Auto-Applied" + + var id: String { rawValue } + } + + var body: some View { + List { + filterSection + if filteredRecords.isEmpty { + emptySection + } else { + recordsSection + } + } + .navigationTitle(NSLocalizedString("Suggestion History", comment: "LoopInsights history title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + dismiss() + } + } + } + .sheet(item: $selectedRecord) { record in + NavigationView { + LoopInsights_SuggestionDetailView( + record: record, + onApply: {}, + onDismiss: {} + ) + } + } + } + + // MARK: - Filter + + private var filterSection: some View { + Section { + Picker(NSLocalizedString("Filter", comment: "LoopInsights filter picker"), selection: $filterStatus) { + ForEach(FilterOption.allCases) { option in + Text(option.rawValue).tag(option) + } + } + .pickerStyle(SegmentedPickerStyle()) + } + } + + // MARK: - Records + + private var recordsSection: some View { + Section(header: Text(String(format: NSLocalizedString("%d suggestions", comment: "LoopInsights suggestion count"), filteredRecords.count))) { + ForEach(filteredRecords) { record in + Button(action: { selectedRecord = record }) { + historyRow(record) + } + .buttonStyle(.plain) + } + .onDelete(perform: deleteRecords) + } + } + + private func historyRow(_ record: LoopInsightsSuggestionRecord) -> some View { + HStack(spacing: 12) { + // Status icon + Image(systemName: record.status.systemImage) + .foregroundColor(statusColor(record.status)) + .frame(width: 24) + + VStack(alignment: .leading, spacing: 2) { + Text(record.suggestion.summaryDescription) + .font(.subheadline) + .fontWeight(.medium) + + HStack { + Text(record.suggestion.settingType.abbreviation) + .font(.caption2) + .fontWeight(.medium) + .padding(.horizontal, 4) + .padding(.vertical, 1) + .background(Color.accentColor.opacity(0.15)) + .cornerRadius(3) + + Text(record.suggestion.confidence.displayName) + .font(.caption2) + .foregroundColor(.secondary) + + Text(Self.dateFormatter.string(from: record.createdAt)) + .font(.caption2) + .foregroundColor(.secondary) + } + } + + Spacer() + + Image(systemName: "chevron.right") + .font(.caption2) + .foregroundColor(.secondary) + } + .padding(.vertical, 2) + } + + // MARK: - Empty State + + private var emptySection: some View { + Section { + VStack(spacing: 12) { + Image(systemName: "clock.arrow.circlepath") + .font(.largeTitle) + .foregroundColor(.secondary) + Text(NSLocalizedString("No suggestions yet", comment: "LoopInsights empty history title")) + .font(.headline) + Text(NSLocalizedString("Run an analysis from the LoopInsights Dashboard to generate your first suggestions.", comment: "LoopInsights empty history message")) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 20) + } + } + + // MARK: - Computed + + private var filteredRecords: [LoopInsightsSuggestionRecord] { + let allRecords = store.allRecords + switch filterStatus { + case .all: + return allRecords + case .applied: + return allRecords.filter { $0.status == .applied } + case .dismissed: + return allRecords.filter { $0.status == .dismissed } + case .autoApplied: + return allRecords.filter { $0.status == .autoApplied } + } + } + + private func statusColor(_ status: LoopInsightsSuggestionStatus) -> Color { + switch status { + case .pending: return .blue + case .applied: return .green + case .dismissed: return .gray + case .autoApplied: return .orange + } + } + + private func deleteRecords(at offsets: IndexSet) { + for index in offsets { + let record = filteredRecords[index] + store.deleteRecord(withID: record.id) + } + } + + private static let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .short + return formatter + }() +} diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index aa0da33134..9e5dd04b38 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -305,6 +305,8 @@ extension SettingsView { if FeatureFlags.allowAlgorithmExperiments { algorithmExperimentsSection } + + loopInsightsSection } } @@ -376,6 +378,22 @@ extension SettingsView { descriptiveText: "Simplify Carb Entry") } } + + private var loopInsightsSection: some View { + Section { + NavigationLink(destination: LoopInsights_SettingsView()) { + LargeButton(action: {}, + includeArrow: false, + imageView: Image(systemName: "brain.head.profile") + .resizable() + .aspectRatio(contentMode: .fit) + .foregroundColor(.accentColor) + .frame(width: 30), + label: NSLocalizedString("LoopInsights", comment: "LoopInsights settings button"), + descriptiveText: NSLocalizedString("AI-powered therapy settings analysis", comment: "LoopInsights settings descriptive text")) + } + } + } private var cgmChoices: [ActionSheet.Button] { var result = viewModel.cgmManagerSettingsViewModel.availableDevices diff --git a/LoopTests/LoopInsights/LoopInsights_DataAggregatorTests.swift b/LoopTests/LoopInsights/LoopInsights_DataAggregatorTests.swift new file mode 100644 index 0000000000..e209829aa4 --- /dev/null +++ b/LoopTests/LoopInsights/LoopInsights_DataAggregatorTests.swift @@ -0,0 +1,166 @@ +// +// LoopInsights_DataAggregatorTests.swift +// LoopTests +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import XCTest +import LoopKit +import HealthKit +@testable import Loop + +// MARK: - Mock Data Provider + +final class MockLoopInsightsDataProvider: LoopInsightsDataProviderProtocol { + + var mockGlucoseSamples: [StoredGlucoseSample] = [] + var mockCarbEntries: [StoredCarbEntry] = [] + var mockDoseEntries: [DoseEntry] = [] + var mockSettings: StoredSettings = StoredSettings() + + func getGlucoseSamples(start: Date, end: Date) async throws -> [StoredGlucoseSample] { + return mockGlucoseSamples.filter { $0.startDate >= start && $0.startDate <= end } + } + + func getCarbEntries(start: Date, end: Date) async throws -> [StoredCarbEntry] { + return mockCarbEntries.filter { $0.startDate >= start && $0.startDate <= end } + } + + func getNormalizedDoseEntries(start: Date, end: Date) async throws -> [DoseEntry] { + return mockDoseEntries.filter { $0.startDate >= start && $0.startDate <= end } + } + + func getLatestStoredSettings() -> StoredSettings { + return mockSettings + } +} + +// MARK: - Tests + +final class LoopInsights_DataAggregatorTests: XCTestCase { + + private var mockProvider: MockLoopInsightsDataProvider! + private var aggregator: LoopInsights_DataAggregator! + + override func setUp() { + super.setUp() + mockProvider = MockLoopInsightsDataProvider() + aggregator = LoopInsights_DataAggregator(dataProvider: mockProvider) + } + + // MARK: - Glucose Stats + + func testGlucoseStatsCalculation() async throws { + // Create mock glucose samples spanning 7 days + let now = Date() + var samples: [StoredGlucoseSample] = [] + let calendar = Calendar.current + + // Create samples every 5 minutes for 7 days + // Mix of in-range, low, and high values + for dayOffset in 0..<7 { + for hourOffset in 0..<24 { + for minuteOffset in stride(from: 0, to: 60, by: 5) { + let date = calendar.date(byAdding: .day, value: -dayOffset, to: now)! + let dateWithHour = calendar.date(byAdding: .hour, value: -hourOffset, to: date)! + let dateWithMinute = calendar.date(byAdding: .minute, value: -minuteOffset, to: dateWithHour)! + + // Simulate realistic glucose: mostly in range with some highs after meals + var glucose: Double + if hourOffset >= 7 && hourOffset <= 9 { + glucose = Double.random(in: 140...200) // Post-breakfast highs + } else if hourOffset >= 12 && hourOffset <= 14 { + glucose = Double.random(in: 130...180) // Post-lunch + } else { + glucose = Double.random(in: 80...140) // Normal range + } + + let sample = StoredGlucoseSample( + uuid: UUID(), + provenanceIdentifier: "test", + syncIdentifier: UUID().uuidString, + syncVersion: 1, + startDate: dateWithMinute, + quantity: HKQuantity(unit: .milligramsPerDeciliter, doubleValue: glucose), + condition: nil, + trend: nil, + trendRate: nil, + isDisplayOnly: false, + wasUserEntered: false, + device: nil, + healthKitEligibleDate: nil + ) + samples.append(sample) + } + } + } + + mockProvider.mockGlucoseSamples = samples + + let stats = try await aggregator.aggregateData(period: .sevenDays) + + // Verify glucose stats are reasonable + XCTAssertGreaterThan(stats.glucoseStats.averageGlucose, 0) + XCTAssertGreaterThan(stats.glucoseStats.standardDeviation, 0) + XCTAssertGreaterThan(stats.glucoseStats.timeInRange, 0) + XCTAssertEqual(stats.glucoseStats.timeInRange + stats.glucoseStats.timeBelowRange + stats.glucoseStats.timeAboveRange, 100, accuracy: 0.1) + XCTAssertGreaterThan(stats.glucoseStats.gmi, 0) + XCTAssertGreaterThan(stats.glucoseStats.sampleCount, 0) + } + + func testInsufficientDataThrows() async { + // No glucose samples + mockProvider.mockGlucoseSamples = [] + + do { + _ = try await aggregator.aggregateData(period: .sevenDays) + XCTFail("Should have thrown insufficientData error") + } catch let error as LoopInsightsError { + if case .insufficientData = error { + // Expected + } else { + XCTFail("Wrong error type: \(error)") + } + } catch { + XCTFail("Wrong error type: \(error)") + } + } + + // MARK: - GMI Calculation + + func testGMICalculation() async throws { + // Create samples with known average glucose + let now = Date() + let targetGlucose = 154.0 // Should give GMI ≈ 7.0 + + var samples: [StoredGlucoseSample] = [] + for i in 0..<100 { + let date = now.addingTimeInterval(TimeInterval(-i * 300)) // 5 min apart + let sample = StoredGlucoseSample( + uuid: UUID(), + provenanceIdentifier: "test", + syncIdentifier: UUID().uuidString, + syncVersion: 1, + startDate: date, + quantity: HKQuantity(unit: .milligramsPerDeciliter, doubleValue: targetGlucose), + condition: nil, + trend: nil, + trendRate: nil, + isDisplayOnly: false, + wasUserEntered: false, + device: nil, + healthKitEligibleDate: nil + ) + samples.append(sample) + } + + mockProvider.mockGlucoseSamples = samples + + let stats = try await aggregator.aggregateData(period: .sevenDays) + + // GMI = 3.31 + 0.02392 × 154 = 3.31 + 3.68 ≈ 6.99 + XCTAssertEqual(stats.glucoseStats.gmi, 6.99, accuracy: 0.1) + } +} diff --git a/LoopTests/LoopInsights/LoopInsights_ModelsTests.swift b/LoopTests/LoopInsights/LoopInsights_ModelsTests.swift new file mode 100644 index 0000000000..968d692c4d --- /dev/null +++ b/LoopTests/LoopInsights/LoopInsights_ModelsTests.swift @@ -0,0 +1,255 @@ +// +// LoopInsights_ModelsTests.swift +// LoopTests +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import XCTest +@testable import Loop + +final class LoopInsights_ModelsTests: XCTestCase { + + // MARK: - LoopInsightsSettingType + + func testSettingTypeDisplayNames() { + XCTAssertEqual(LoopInsightsSettingType.carbRatio.abbreviation, "CR") + XCTAssertEqual(LoopInsightsSettingType.insulinSensitivity.abbreviation, "ISF") + XCTAssertEqual(LoopInsightsSettingType.basalRate.abbreviation, "BR") + } + + func testSettingTypeCodable() throws { + let original = LoopInsightsSettingType.carbRatio + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(LoopInsightsSettingType.self, from: data) + XCTAssertEqual(original, decoded) + } + + func testSettingTypeAllCases() { + XCTAssertEqual(LoopInsightsSettingType.allCases.count, 3) + } + + // MARK: - LoopInsightsAnalysisPeriod + + func testAnalysisPeriodTimeIntervals() { + XCTAssertEqual(LoopInsightsAnalysisPeriod.sevenDays.timeInterval, 7 * 24 * 60 * 60) + XCTAssertEqual(LoopInsightsAnalysisPeriod.fourteenDays.timeInterval, 14 * 24 * 60 * 60) + XCTAssertEqual(LoopInsightsAnalysisPeriod.thirtyDays.timeInterval, 30 * 24 * 60 * 60) + } + + func testAnalysisPeriodCodable() throws { + let original = LoopInsightsAnalysisPeriod.fourteenDays + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(LoopInsightsAnalysisPeriod.self, from: data) + XCTAssertEqual(original, decoded) + } + + // MARK: - LoopInsightsApplyMode + + func testApplyModePublicModes() { + let publicModes = LoopInsightsApplyMode.publicModes + XCTAssertEqual(publicModes.count, 3) + XCTAssertFalse(publicModes.contains(.autoApply)) + } + + func testApplyModeCodable() throws { + let original = LoopInsightsApplyMode.oneTap + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(LoopInsightsApplyMode.self, from: data) + XCTAssertEqual(original, decoded) + } + + // MARK: - LoopInsightsConfidence + + func testConfidenceComparable() { + XCTAssertTrue(LoopInsightsConfidence.low < .medium) + XCTAssertTrue(LoopInsightsConfidence.medium < .high) + XCTAssertFalse(LoopInsightsConfidence.high < .low) + } + + func testConfidenceCodable() throws { + let original = LoopInsightsConfidence.high + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(LoopInsightsConfidence.self, from: data) + XCTAssertEqual(original, decoded) + } + + // MARK: - LoopInsightsTimeBlock + + func testTimeBlockChangePercent() { + let block = LoopInsightsTimeBlock( + startTime: 0, + endTime: 21600, + currentValue: 10.0, + proposedValue: 12.0 + ) + XCTAssertEqual(block.changePercent, 20.0, accuracy: 0.01) + } + + func testTimeBlockChangePercentDecrease() { + let block = LoopInsightsTimeBlock( + startTime: 0, + endTime: 21600, + currentValue: 50.0, + proposedValue: 45.0 + ) + XCTAssertEqual(block.changePercent, -10.0, accuracy: 0.01) + } + + func testTimeBlockChangePercentZeroCurrent() { + let block = LoopInsightsTimeBlock( + startTime: 0, + endTime: 21600, + currentValue: 0.0, + proposedValue: 5.0 + ) + XCTAssertEqual(block.changePercent, 0.0) + } + + func testTimeBlockCodable() throws { + let original = LoopInsightsTimeBlock( + startTime: 21600, + endTime: 43200, + currentValue: 10.0, + proposedValue: 11.0 + ) + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(LoopInsightsTimeBlock.self, from: data) + XCTAssertEqual(decoded.startTime, original.startTime) + XCTAssertEqual(decoded.endTime, original.endTime) + XCTAssertEqual(decoded.currentValue, original.currentValue) + XCTAssertEqual(decoded.proposedValue, original.proposedValue) + } + + // MARK: - LoopInsightsSuggestion + + func testSuggestionSummaryDescriptionSingleBlock() { + let suggestion = makeSuggestion(blocks: [ + LoopInsightsTimeBlock(startTime: 43200, endTime: 54000, currentValue: 10, proposedValue: 12) + ]) + XCTAssertTrue(suggestion.summaryDescription.contains("Increase")) + XCTAssertTrue(suggestion.summaryDescription.contains("CR")) + } + + func testSuggestionSummaryDescriptionMultiBlock() { + let suggestion = makeSuggestion(blocks: [ + LoopInsightsTimeBlock(startTime: 0, endTime: 21600, currentValue: 10, proposedValue: 12), + LoopInsightsTimeBlock(startTime: 21600, endTime: 43200, currentValue: 8, proposedValue: 9) + ]) + XCTAssertTrue(suggestion.summaryDescription.contains("2")) + } + + func testSuggestionEquality() { + let suggestion1 = makeSuggestion(blocks: []) + let suggestion2 = makeSuggestion(blocks: []) + XCTAssertNotEqual(suggestion1, suggestion2, "Different UUIDs should not be equal") + XCTAssertEqual(suggestion1, suggestion1, "Same instance should be equal") + } + + func testSuggestionCodable() throws { + let original = makeSuggestion(blocks: [ + LoopInsightsTimeBlock(startTime: 0, endTime: 21600, currentValue: 10, proposedValue: 11) + ]) + let data = try JSONEncoder().encode(original) + let decoded = try JSONDecoder().decode(LoopInsightsSuggestion.self, from: data) + XCTAssertEqual(decoded.id, original.id) + XCTAssertEqual(decoded.settingType, original.settingType) + XCTAssertEqual(decoded.timeBlocks.count, original.timeBlocks.count) + } + + // MARK: - LoopInsightsTherapySnapshot + + func testTherapySnapshotCodable() throws { + let snapshot = LoopInsightsTherapySnapshot( + basalRateItems: [ + .init(startTime: 0, value: 0.8), + .init(startTime: 21600, value: 1.0) + ], + insulinSensitivityItems: [ + .init(startTime: 0, value: 50) + ], + carbRatioItems: [ + .init(startTime: 0, value: 10) + ], + capturedAt: Date() + ) + let data = try JSONEncoder().encode(snapshot) + let decoded = try JSONDecoder().decode(LoopInsightsTherapySnapshot.self, from: data) + XCTAssertEqual(decoded.basalRateItems.count, 2) + XCTAssertEqual(decoded.insulinSensitivityItems.count, 1) + XCTAssertEqual(decoded.carbRatioItems.count, 1) + } + + // MARK: - LoopInsightsRequestFormat + + func testRequestFormatAutoDetection() { + XCTAssertEqual(LoopInsightsRequestFormat.detect(from: "https://api.openai.com/v1"), .openAICompatible) + XCTAssertEqual(LoopInsightsRequestFormat.detect(from: "https://api.anthropic.com/v1"), .anthropicMessages) + XCTAssertEqual(LoopInsightsRequestFormat.detect(from: "https://generativelanguage.googleapis.com/v1beta"), .googleGenerativeAI) + // Unknown URL falls back to OpenAI-compatible + XCTAssertEqual(LoopInsightsRequestFormat.detect(from: "https://my-custom-llm.com/v1"), .openAICompatible) + } + + func testRequestFormatDefaults() { + XCTAssertEqual(LoopInsightsRequestFormat.openAICompatible.defaultAPIKeyHeader, "Authorization") + XCTAssertEqual(LoopInsightsRequestFormat.anthropicMessages.defaultAPIKeyHeader, "x-api-key") + XCTAssertEqual(LoopInsightsRequestFormat.openAICompatible.defaultAPIKeyPrefix, "Bearer ") + XCTAssertEqual(LoopInsightsRequestFormat.anthropicMessages.defaultAPIKeyPrefix, "") + } + + // MARK: - LoopInsightsAIProviderConfiguration + + func testConfigurationCodableExcludesAPIKey() throws { + var config = LoopInsightsAIProviderConfiguration( + baseURL: "https://api.openai.com/v1", + model: "gpt-4o", + apiKey: "sk-secret-key" + ) + let data = try JSONEncoder().encode(config) + let json = String(data: data, encoding: .utf8)! + // API key must NOT appear in serialized output + XCTAssertFalse(json.contains("sk-secret-key")) + + let decoded = try JSONDecoder().decode(LoopInsightsAIProviderConfiguration.self, from: data) + XCTAssertEqual(decoded.baseURL, "https://api.openai.com/v1") + XCTAssertEqual(decoded.model, "gpt-4o") + XCTAssertEqual(decoded.apiKey, "", "API key should be empty after decoding") + } + + func testConfigurationDefaultValues() { + let config = LoopInsightsAIProviderConfiguration() + XCTAssertEqual(config.baseURL, "https://api.openai.com/v1") + XCTAssertEqual(config.model, "gpt-4o") + XCTAssertEqual(config.requestFormat, .openAICompatible) + XCTAssertEqual(config.maxTokens, 4096) + XCTAssertEqual(config.temperature, 0.3, accuracy: 0.001) + XCTAssertNil(config.apiVersion) + XCTAssertNil(config.organizationID) + } + + // MARK: - LoopInsightsError + + func testErrorDescriptions() { + let noKey = LoopInsightsError.noAPIKeyConfigured + XCTAssertNotNil(noKey.errorDescription) + XCTAssertTrue(noKey.errorDescription!.contains("API key")) + + let parseError = LoopInsightsError.parseError("bad json") + XCTAssertTrue(parseError.errorDescription!.contains("bad json")) + } + + // MARK: - Helpers + + private func makeSuggestion(blocks: [LoopInsightsTimeBlock]) -> LoopInsightsSuggestion { + return LoopInsightsSuggestion( + id: UUID(), + settingType: .carbRatio, + timeBlocks: blocks, + reasoning: "Test reasoning", + confidence: .medium, + analysisPeriod: .fourteenDays, + createdAt: Date() + ) + } +} diff --git a/LoopTests/LoopInsights/LoopInsights_SuggestionStoreTests.swift b/LoopTests/LoopInsights/LoopInsights_SuggestionStoreTests.swift new file mode 100644 index 0000000000..d93c09d5b9 --- /dev/null +++ b/LoopTests/LoopInsights/LoopInsights_SuggestionStoreTests.swift @@ -0,0 +1,168 @@ +// +// LoopInsights_SuggestionStoreTests.swift +// LoopTests +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import XCTest +@testable import Loop + +final class LoopInsights_SuggestionStoreTests: XCTestCase { + + private var store: LoopInsights_SuggestionStore! + + override func setUp() { + super.setUp() + store = LoopInsights_SuggestionStore.shared + store.clearAllHistory() + } + + override func tearDown() { + store.clearAllHistory() + super.tearDown() + } + + // MARK: - Add + + func testAddSuggestion() { + let suggestion = makeSuggestion() + let record = store.addSuggestion(suggestion) + + XCTAssertEqual(record.status, .pending) + XCTAssertEqual(store.allRecords.count, 1) + XCTAssertEqual(store.pendingRecords.count, 1) + } + + func testAddMultipleSuggestions() { + let suggestions = [makeSuggestion(), makeSuggestion(), makeSuggestion()] + let records = store.addSuggestions(suggestions) + + XCTAssertEqual(records.count, 3) + XCTAssertEqual(store.allRecords.count, 3) + } + + // MARK: - Status Transitions + + func testMarkApplied() { + let suggestion = makeSuggestion() + let record = store.addSuggestion(suggestion) + + store.markApplied(recordID: record.id, mode: .oneTap, snapshotBefore: nil, snapshotAfter: nil) + + let updated = store.record(withID: record.id) + XCTAssertEqual(updated?.status, .applied) + XCTAssertNotNil(updated?.resolvedAt) + XCTAssertEqual(updated?.applyMode, .oneTap) + } + + func testMarkAutoApplied() { + let suggestion = makeSuggestion() + let record = store.addSuggestion(suggestion) + + store.markApplied(recordID: record.id, mode: .autoApply, snapshotBefore: nil, snapshotAfter: nil) + + let updated = store.record(withID: record.id) + XCTAssertEqual(updated?.status, .autoApplied) + } + + func testMarkDismissed() { + let suggestion = makeSuggestion() + let record = store.addSuggestion(suggestion) + + store.markDismissed(recordID: record.id) + + let updated = store.record(withID: record.id) + XCTAssertEqual(updated?.status, .dismissed) + XCTAssertNotNil(updated?.resolvedAt) + } + + func testDismissAllPending() { + _ = store.addSuggestions([makeSuggestion(), makeSuggestion(), makeSuggestion()]) + + XCTAssertEqual(store.pendingRecords.count, 3) + + store.dismissAllPending() + + XCTAssertEqual(store.pendingRecords.count, 0) + XCTAssertEqual(store.resolvedRecords.count, 3) + } + + // MARK: - Read + + func testPendingRecordsFilter() { + let suggestion1 = makeSuggestion() + let suggestion2 = makeSuggestion() + let record1 = store.addSuggestion(suggestion1) + _ = store.addSuggestion(suggestion2) + + store.markDismissed(recordID: record1.id) + + XCTAssertEqual(store.pendingRecords.count, 1) + XCTAssertEqual(store.resolvedRecords.count, 1) + } + + func testRecordLookupByID() { + let suggestion = makeSuggestion() + let record = store.addSuggestion(suggestion) + + let found = store.record(withID: record.id) + XCTAssertNotNil(found) + XCTAssertEqual(found?.id, record.id) + + let notFound = store.record(withID: UUID()) + XCTAssertNil(notFound) + } + + // MARK: - Delete + + func testDeleteRecord() { + let suggestion = makeSuggestion() + let record = store.addSuggestion(suggestion) + + store.deleteRecord(withID: record.id) + + XCTAssertEqual(store.allRecords.count, 0) + } + + func testClearAllHistory() { + _ = store.addSuggestions([makeSuggestion(), makeSuggestion()]) + + store.clearAllHistory() + + XCTAssertEqual(store.allRecords.count, 0) + } + + // MARK: - Persistence + + func testRecordsSortedNewestFirst() { + let suggestion1 = makeSuggestion() + let suggestion2 = makeSuggestion() + + _ = store.addSuggestion(suggestion1) + // Small delay to ensure different timestamps + _ = store.addSuggestion(suggestion2) + + let records = store.allRecords + XCTAssertEqual(records.count, 2) + // Newest should be first + XCTAssertGreaterThanOrEqual(records[0].createdAt, records[1].createdAt) + } + + // MARK: - Helpers + + private func makeSuggestion() -> LoopInsightsSuggestion { + return LoopInsightsSuggestion( + id: UUID(), + settingType: .carbRatio, + timeBlocks: [ + LoopInsightsTimeBlock(startTime: 0, endTime: 21600, currentValue: 10, proposedValue: 11) + ], + reasoning: "Test reasoning", + confidence: .medium, + analysisPeriod: .fourteenDays, + createdAt: Date() + ) + } +} From 41a89c37359bbeb3c56f35e16a048452ede1febb Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 12 Feb 2026 17:09:05 -0800 Subject: [PATCH 02/36] Phase 2: Therapy settings write pipeline, revert, clinical AI reasoning, and UI refinements - Wire real therapy settings writes via LoopInsightsSettingsWriter closure - Schedule splitting: insert new entries when AI suggests times not in user's schedule - Revert feature: restore pre-apply settings from suggestion history - Settings Score (0-100) with TIR, Safety, Stability, GMI breakdown - Clinical reasoning framework: AI now understands AID-specific patterns (corrections/day, basal/bolus ratio, time-of-day analysis, cross-setting interactions) - All three settings visible in every AI prompt for cross-setting reasoning - Pre-computed red flags injected into prompt (algorithm workload, basal % alerts) - Stale-data guard: excludes manually reverted changes from recent context - Suggestion merge: consolidates split AI responses into single cards - Pre-Fill Editor: editable proposed values before applying - Auto-applied notification banner - Debug log with Copy Full Log for troubleshooting AI behavior - Temperature forced to 0.0 for deterministic analysis --- Loop/Localizable.xcstrings | 152 ++++- .../LoopInsights_Coordinator.swift | 162 ++++- .../LoopInsights/LoopInsights_Models.swift | 17 +- .../LoopInsights_SuggestionRecord.swift | 18 +- .../LoopInsights_FeatureFlags.swift | 4 +- .../LoopInsights_AIAnalysis.swift | 260 ++++++-- .../LoopInsights_SuggestionStore.swift | 7 + .../StatusTableViewController.swift | 7 + .../LoopInsights_DashboardViewModel.swift | 325 +++++++++- Loop/View Models/SettingsViewModel.swift | 3 + .../LoopInsights_DashboardView.swift | 581 ++++++++++++++++-- .../LoopInsights_SettingsView.swift | 119 ++-- .../LoopInsights_SuggestionDetailView.swift | 40 +- .../LoopInsights_SuggestionHistoryView.swift | 45 +- Loop/Views/SettingsView.swift | 6 +- 15 files changed, 1550 insertions(+), 196 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index b3435231a2..24e3c354eb 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -3196,6 +3196,18 @@ "comment" : "The text that appears next to the \"Suggestion History\" label in the LoopInsights settings view, showing the number of suggestion records stored.", "isCommentAutoGenerated" : true }, + "%lld/%lld" : { + "comment" : "Displays the current score and maximum score for a given category. The first argument is the current score. The second argument is the maximum score.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld/%2$lld" + } + } + } + }, "⚠️" : { "localizations" : { "da" : { @@ -5882,6 +5894,9 @@ "AI Reasoning" : { "comment" : "LoopInsights reasoning header" }, + "AI REASONING" : { + "comment" : "LoopInsights pre-fill reasoning header" + }, "AI therapy suggestions are advisory only. You are responsible for reviewing all changes. Consult your healthcare provider for significant therapy adjustments." : { "comment" : "LoopInsights medical disclaimer" }, @@ -6492,9 +6507,6 @@ } } }, - "All past AI suggestions, including applied, dismissed, and expired records." : { - "comment" : "LoopInsights history description" - }, "Amount Consumed" : { "comment" : "Label for carb quantity entry row on carb entry screen", "localizations" : { @@ -7089,6 +7101,14 @@ } } }, + "Analysis Debug Log" : { + "comment" : "The title of the view that displays detailed information about an AI analysis.", + "isCommentAutoGenerated" : true + }, + "Analysis Info" : { + "comment" : "The header text for the section that displays information about the AI analysis.", + "isCommentAutoGenerated" : true + }, "ANALYSIS OPTIONS" : { "comment" : "LoopInsights analysis options header" }, @@ -7098,8 +7118,11 @@ "Analyze %@" : { "comment" : "LoopInsights analyze button" }, + "Analyze All" : { + "comment" : "LoopInsights analyze all button" + }, "Analyzing..." : { - "comment" : "LoopInsights analyzing" + "comment" : "LoopInsights analyzing\nLoopInsights analyzing all" }, "API Key" : { "comment" : "The title of the amplitude API key credential", @@ -7525,6 +7548,9 @@ "Apply" : { "comment" : "LoopInsights apply\nLoopInsights apply button" }, + "Apply Changes" : { + "comment" : "LoopInsights pre-fill apply button" + }, "Apply Suggestion" : { "comment" : "LoopInsights apply confirmation title\nLoopInsights apply suggestion button" }, @@ -8568,6 +8594,9 @@ "Auto-Applied" : { "comment" : "LoopInsights suggestion status: automatically applied" }, + "AUTO-APPLIED CHANGES" : { + "comment" : "LoopInsights auto-applied section header" + }, "Auto-Apply" : { "comment" : "LoopInsights apply mode: automatically apply suggestions (developer only)" }, @@ -10087,7 +10116,7 @@ } }, "Cancel" : { - "comment" : "Button label for cancel\nButton text to cancel\nCancel button\nCancel button for reset loop alert\nCancel export button title\nThe title of the cancel action in an action sheet", + "comment" : "Button label for cancel\nButton text to cancel\nCancel button\nCancel button for reset loop alert\nCancel export button title\nLoopInsights pre-fill cancel button\nThe title of the cancel action in an action sheet", "localizations" : { "ar" : { "stringUnit" : { @@ -12204,9 +12233,6 @@ "Clear History" : { "comment" : "LoopInsights clear history alert title" }, - "Clear Suggestion History" : { - "comment" : "LoopInsights clear history button" - }, "Clinical Expert" : { "comment" : "LoopInsights personality: clinical expert" }, @@ -12673,6 +12699,9 @@ } } }, + "Coefficient of Variation" : { + "comment" : "LoopInsights coefficient of variation label" + }, "Coefficient of variation %.1f%% (target <36%%)" : { "comment" : "LoopInsights pattern detail: high variability\nLoopInsights pattern detail: high variability moderate" }, @@ -13641,6 +13670,14 @@ } } }, + "Copied" : { + "comment" : "A confirmation message indicating that the full log text has been copied to the clipboard.", + "isCommentAutoGenerated" : true + }, + "Copy Full Log" : { + "comment" : "A button label that says \"Copy Full Log\".", + "isCommentAutoGenerated" : true + }, "Correction Range" : { "comment" : "The title of the glucose target range schedule screen\n The title text for the glucose target range schedule", "extractionState" : "manual", @@ -14147,7 +14184,7 @@ } }, "Current" : { - "comment" : "LoopInsights current value label" + "comment" : "LoopInsights current value label\nLoopInsights pre-fill current label" }, "Current Glucose" : { "comment" : "Label for glucose entry row on simple bolus screen", @@ -14595,9 +14632,6 @@ } } }, - "CV" : { - "comment" : "LoopInsights CV label" - }, "Date" : { "comment" : "Date picker label", "localizations" : { @@ -18540,6 +18574,9 @@ } } }, + "Excellent — your settings are well-optimized" : { + "comment" : "LoopInsights score: excellent" + }, "Export Critical Event Logs" : { "comment" : "The title of the export critical event logs in support", "localizations" : { @@ -18813,6 +18850,9 @@ } } }, + "Fair — some adjustments recommended" : { + "comment" : "LoopInsights score: fair" + }, "Favorite Foods" : { "comment" : "Title for Favorite Foods view", "localizations" : { @@ -20754,6 +20794,9 @@ "GMI (est. A1C)" : { "comment" : "LoopInsights GMI label" }, + "Good — minor improvements possible" : { + "comment" : "LoopInsights score: good" + }, "HARDWARE SOUNDS" : { "localizations" : { "da" : { @@ -23955,8 +23998,8 @@ "Load JSON fixtures from Documents/LoopInsights/ instead of real Loop data. Use pull_tidepool_data.py to generate fixtures from your Tidepool account." : { "comment" : "LoopInsights test data description" }, - "Loading test data..." : { - "comment" : "LoopInsights loading test data" + "Loading data..." : { + "comment" : "LoopInsights loading data" }, "Loading therapy settings..." : { "comment" : "LoopInsights loading settings" @@ -27031,6 +27074,9 @@ } } }, + "Needs attention — settings adjustments likely needed" : { + "comment" : "LoopInsights score: needs attention" + }, "Negative duration not allowed" : { "comment" : "Override error description: negative duration error.", "localizations" : { @@ -29157,6 +29203,9 @@ "Opens the Therapy Settings editor with the suggested value pre-filled. You confirm by tapping Save." : { "comment" : "LoopInsights apply mode description: pre-fill" }, + "or" : { + "comment" : "LoopInsights or separator" + }, "Organization ID" : { "comment" : "LoopInsights org ID label" }, @@ -29295,9 +29344,6 @@ "Pending" : { "comment" : "LoopInsights suggestion status: pending review" }, - "Pick from your Current Therapy Settings" : { - "comment" : "LoopInsights current settings header" - }, "Place fixture files in Documents/LoopInsights/ or rebuild with bundled test data." : { "comment" : "LoopInsights no fixtures hint" }, @@ -30581,11 +30627,14 @@ } }, "Proposed" : { - "comment" : "LoopInsights proposed value label" + "comment" : "LoopInsights pre-fill proposed label\nLoopInsights proposed value label" }, "Proposed Changes" : { "comment" : "LoopInsights proposed changes header" }, + "PROPOSED CHANGES" : { + "comment" : "LoopInsights pre-fill editor changes header" + }, "Pump" : { "comment" : "The title of the pump section in settings", "extractionState" : "manual", @@ -32157,6 +32206,10 @@ } } }, + "Raw AI Response" : { + "comment" : "A label displayed above the raw text of the AI's response.", + "isCommentAutoGenerated" : true + }, "Reasoning" : { "comment" : "LoopInsight's detailed reasoning" }, @@ -33314,9 +33367,30 @@ } } }, + "Revert" : { + "comment" : "LoopInsights revert button" + }, + "Revert Changes" : { + "comment" : "LoopInsights revert button" + }, + "Revert Changes?" : { + "comment" : "LoopInsights revert confirmation title" + }, + "Reverted" : { + "comment" : "LoopInsights suggestion status: changes reverted" + }, "Review" : { "comment" : "LoopInsights legend: review" }, + "Review and adjust the proposed values below before applying." : { + "comment" : "LoopInsights pre-fill editor instructions" + }, + "Review Changes" : { + "comment" : "LoopInsights pre-fill editor title" + }, + "Review recommended — significant adjustments may help" : { + "comment" : "LoopInsights score: review" + }, "Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { "comment" : "LoopInsights analysis period description" }, @@ -33862,6 +33936,10 @@ } } }, + "Setting Type" : { + "comment" : "A label for the type of setting that was analyzed.", + "isCommentAutoGenerated" : true + }, "Settings" : { "comment" : "Label of button that navigation user to iOS Settings\nSettings screen title\nThe label of the settings button", "localizations" : { @@ -33987,6 +34065,9 @@ } } }, + "SETTINGS SCORE" : { + "comment" : "LoopInsights settings score header" + }, "Setup Incomplete" : { "comment" : "The title of the cell indicating that onboarding is suspended", "localizations" : { @@ -35289,6 +35370,9 @@ } } } + }, + "System Prompt" : { + }, "Tap here to set up a CGM" : { "comment" : "Descriptive text for button to add CGM device", @@ -35575,6 +35659,9 @@ } } }, + "Tap one of your current Therapy Settings" : { + "comment" : "LoopInsights current settings header" + }, "Tap to Add" : { "comment" : "The subtitle of the cell displaying an action to add a manually measurement glucose value", "localizations" : { @@ -36457,6 +36544,9 @@ } } }, + "The following changes were automatically applied to your therapy settings:" : { + "comment" : "LoopInsights auto-applied description" + }, "The legacy model used by Loop, allowing customization of action duration." : { "comment" : "Subtitle description of Walsh insulin model setting", "extractionState" : "manual", @@ -37228,8 +37318,11 @@ "This will permanently delete all suggestion history. This cannot be undone." : { "comment" : "LoopInsights clear history warning" }, - "Time in Range" : { - "comment" : "LoopInsights TIR label" + "This will restore your therapy settings to the values they had before this suggestion was applied." : { + "comment" : "LoopInsights revert confirmation message" + }, + "Time in Range (70-180)" : { + "comment" : "LoopInsights TIR label with range" }, "Time Sensitive Alerts" : { "localizations" : { @@ -37366,6 +37459,13 @@ } } }, + "Timestamp" : { + "comment" : "A label displayed next to the timestamp in the debug log view.", + "isCommentAutoGenerated" : true + }, + "TIR >85% with low hypoglycemia risk. The suggestions below are minor refinements — apply with caution." : { + "comment" : "LoopInsights optimal warning detail" + }, "Total Daily Dose" : { "comment" : "LoopInsights TDD label" }, @@ -39568,12 +39668,15 @@ } } }, + "User Prompt" : { + + }, + "View Last Analysis Log" : { + "comment" : "LoopInsights debug log button" + }, "View the suggested values, then navigate to Therapy Settings to make changes yourself." : { "comment" : "LoopInsights apply mode description: manual" }, - "View therapy settings, run AI analysis, and manage suggestions" : { - "comment" : "LoopInsights dashboard description" - }, "Walsh" : { "comment" : "Title of insulin model setting", "extractionState" : "manual", @@ -41695,6 +41798,9 @@ } } } + }, + "Your settings are already performing well" : { + "comment" : "LoopInsights optimal warning title" } }, "version" : "1.1" diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 10b1ff4354..ecd917ebb5 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -8,8 +8,13 @@ import Foundation import LoopKit +import LoopCore import HealthKit +/// Closure type for writing therapy settings changes back to Loop. +/// Accepts a mutation block that modifies LoopSettings in place. +typealias LoopInsightsSettingsWriter = ((_ mutate: (inout LoopSettings) -> Void) -> Void) + /// Orchestrates all LoopInsights services and manages the feature lifecycle. /// Created when LoopInsights is accessed from Settings. Owns the DataAggregator, /// SuggestionStore, and AIAnalysis service, and provides the data access bridge @@ -29,6 +34,9 @@ final class LoopInsights_Coordinator: ObservableObject { /// Retained reference to test data provider (when using fixtures). private var testDataProvider: LoopInsights_TestDataProvider? + /// Closure to write therapy settings back to Loop via LoopDataManager.mutateSettings + var settingsWriter: LoopInsightsSettingsWriter? + // MARK: - Initialization /// Initialize with Loop's existing store references. @@ -37,7 +45,8 @@ final class LoopInsights_Coordinator: ObservableObject { glucoseStore: GlucoseStoreProtocol, doseStore: DoseStoreProtocol, carbStore: CarbStoreProtocol, - settingsProvider: LatestStoredSettingsProvider + settingsProvider: LatestStoredSettingsProvider, + settingsWriter: LoopInsightsSettingsWriter? = nil ) { let bridge = DataProviderBridge( glucoseStore: glucoseStore, @@ -46,6 +55,7 @@ final class LoopInsights_Coordinator: ObservableObject { settingsProvider: settingsProvider ) self.dataProviderBridge = bridge + self.settingsWriter = settingsWriter self.dataAggregator = LoopInsights_DataAggregator(dataProvider: bridge) self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared @@ -56,6 +66,7 @@ final class LoopInsights_Coordinator: ObservableObject { init(testDataProvider: LoopInsights_TestDataProvider) { self.testDataProvider = testDataProvider self.dataProviderBridge = nil + self.settingsWriter = nil self.dataAggregator = LoopInsights_DataAggregator(dataProvider: testDataProvider) self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared @@ -78,15 +89,154 @@ final class LoopInsights_Coordinator: ObservableObject { // MARK: - Therapy Settings Write Access - /// Reference to settings provider for write operations (one-tap apply) - private var settingsProvider: LatestStoredSettingsProvider? { - return dataProviderBridge?.settingsProvider - } - /// Capture a snapshot of the current therapy settings func captureCurrentSnapshot() throws -> LoopInsightsTherapySnapshot { return try dataAggregator.captureTherapySnapshot() } + + /// Apply a suggestion's time block changes to the actual therapy settings. + /// Returns true if the write succeeded. + @discardableResult + func applyTherapyChanges(suggestion: LoopInsightsSuggestion) -> Bool { + guard let writer = settingsWriter else { + print("[LoopInsights] Cannot apply: no settings writer available (test data mode?)") + return false + } + + let blocks = suggestion.timeBlocks + guard !blocks.isEmpty else { return false } + + writer { settings in + switch suggestion.settingType { + case .carbRatio: + guard let schedule = settings.carbRatioSchedule else { return } + let updatedItems = Self.applyBlockChanges(blocks, to: schedule.items) + if let newSchedule = CarbRatioSchedule(unit: schedule.unit, dailyItems: updatedItems, timeZone: schedule.timeZone) { + settings.carbRatioSchedule = newSchedule + } + + case .insulinSensitivity: + guard let schedule = settings.insulinSensitivitySchedule else { return } + let updatedItems = Self.applyBlockChanges(blocks, to: schedule.items) + if let newSchedule = InsulinSensitivitySchedule(unit: schedule.unit, dailyItems: updatedItems, timeZone: schedule.timeZone) { + settings.insulinSensitivitySchedule = newSchedule + } + + case .basalRate: + guard let schedule = settings.basalRateSchedule else { return } + let updatedItems = Self.applyBlockChanges(blocks, to: schedule.items) + if let newSchedule = BasalRateSchedule(dailyItems: updatedItems, timeZone: schedule.timeZone) { + settings.basalRateSchedule = newSchedule + } + } + } + + print("[LoopInsights] Applied \(suggestion.settingType.displayName) changes: \(blocks.count) time block(s)") + return true + } + + /// Revert therapy settings to a previously captured snapshot. + /// Restores all three schedule types (CR, ISF, Basal) from the snapshot. + /// Returns true if the write succeeded. + @discardableResult + func revertToSnapshot(_ snapshot: LoopInsightsTherapySnapshot) -> Bool { + guard let writer = settingsWriter else { + print("[LoopInsights] Cannot revert: no settings writer available") + return false + } + + writer { settings in + // Restore carb ratio schedule + if !snapshot.carbRatioItems.isEmpty, + let existingSchedule = settings.carbRatioSchedule { + let items = snapshot.carbRatioItems.map { + RepeatingScheduleValue(startTime: $0.startTime, value: $0.value) + } + if let restored = CarbRatioSchedule(unit: existingSchedule.unit, dailyItems: items, timeZone: existingSchedule.timeZone) { + settings.carbRatioSchedule = restored + } + } + + // Restore insulin sensitivity schedule + if !snapshot.insulinSensitivityItems.isEmpty, + let existingSchedule = settings.insulinSensitivitySchedule { + let items = snapshot.insulinSensitivityItems.map { + RepeatingScheduleValue(startTime: $0.startTime, value: $0.value) + } + if let restored = InsulinSensitivitySchedule(unit: existingSchedule.unit, dailyItems: items, timeZone: existingSchedule.timeZone) { + settings.insulinSensitivitySchedule = restored + } + } + + // Restore basal rate schedule + if !snapshot.basalRateItems.isEmpty, + let existingSchedule = settings.basalRateSchedule { + let items = snapshot.basalRateItems.map { + RepeatingScheduleValue(startTime: $0.startTime, value: $0.value) + } + if let restored = BasalRateSchedule(dailyItems: items, timeZone: existingSchedule.timeZone) { + settings.basalRateSchedule = restored + } + } + } + + print("[LoopInsights] Reverted settings to previous snapshot") + return true + } + + /// Match time blocks to schedule items and apply proposed values. + /// If no existing entry matches a block's start time, inserts new entries + /// to split the schedule at the suggested time boundaries. + private static func applyBlockChanges( + _ blocks: [LoopInsightsTimeBlock], + to items: [RepeatingScheduleValue] + ) -> [RepeatingScheduleValue] { + var updated = items + + for block in blocks { + // Try to find an existing entry matching this block's start time + let matchIndex = updated.firstIndex(where: { abs($0.startTime - block.startTime) < 60 }) + + if let idx = matchIndex { + // Exact match — update the value + updated[idx] = RepeatingScheduleValue(startTime: updated[idx].startTime, value: block.proposedValue) + } else { + // No matching entry — insert a new entry at the block's start time + // with the proposed value, and another at the block's end time to + // restore the original value for the remainder of the period. + let originalValue = valueAt(time: block.startTime, in: updated) + + updated.append(RepeatingScheduleValue(startTime: block.startTime, value: block.proposedValue)) + + // Only insert an end-time entry if it doesn't already exist + // and the block doesn't extend to end-of-day + let endAlreadyExists = updated.contains(where: { abs($0.startTime - block.endTime) < 60 }) + let endOfDay: TimeInterval = 24 * 3600 + if !endAlreadyExists && block.endTime < endOfDay { + updated.append(RepeatingScheduleValue(startTime: block.endTime, value: originalValue)) + } + } + } + + // Sort by start time to maintain schedule order + updated.sort { $0.startTime < $1.startTime } + return updated + } + + /// Find the effective value at a given time in a sorted schedule. + /// Returns the value of the last entry whose startTime <= the given time. + private static func valueAt(time: TimeInterval, in items: [RepeatingScheduleValue]) -> Double { + let sorted = items.sorted { $0.startTime < $1.startTime } + var result = sorted.first?.value ?? 0 + for item in sorted { + if item.startTime <= time { + result = item.value + } else { + break + } + } + return result + } } // MARK: - Data Provider Bridge diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 7ece698423..6d70e564da 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -14,9 +14,9 @@ import HealthKit /// The three therapy settings LoopInsights can analyze and suggest changes for enum LoopInsightsSettingType: String, Codable, CaseIterable, Identifiable { + case basalRate = "basal_rate" case carbRatio = "carb_ratio" case insulinSensitivity = "insulin_sensitivity" - case basalRate = "basal_rate" var id: String { rawValue } @@ -376,7 +376,7 @@ struct LoopInsightsAIProviderConfiguration: Codable, Equatable { apiKeyHeader: String? = nil, apiKeyPrefix: String? = nil, maxTokens: Int = 4096, - temperature: Double = 0.3, + temperature: Double = 0.0, apiVersion: String? = nil, organizationID: String? = nil, apiKey: String = "" @@ -672,3 +672,16 @@ enum LoopInsightsError: Error, LocalizedError { } } } + +// MARK: - Debug Log + +/// Captures the full prompt/response exchange for a single AI analysis call. +/// Used in developer mode to inspect what's being sent to the AI provider. +struct LoopInsightsDebugLog: Identifiable { + let id = UUID() + let timestamp: Date + let settingType: LoopInsightsSettingType + let systemPrompt: String + let userPrompt: String + let rawResponse: String +} diff --git a/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift b/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift index c7f9f05962..7c6e2aabf7 100644 --- a/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift +++ b/Loop/Models/LoopInsights/LoopInsights_SuggestionRecord.swift @@ -16,6 +16,7 @@ enum LoopInsightsSuggestionStatus: String, Codable { case applied = "applied" case dismissed = "dismissed" case autoApplied = "auto_applied" + case reverted = "reverted" var displayName: String { switch self { @@ -27,6 +28,8 @@ enum LoopInsightsSuggestionStatus: String, Codable { return NSLocalizedString("Dismissed", comment: "LoopInsights suggestion status: user dismissed") case .autoApplied: return NSLocalizedString("Auto-Applied", comment: "LoopInsights suggestion status: automatically applied") + case .reverted: + return NSLocalizedString("Reverted", comment: "LoopInsights suggestion status: changes reverted") } } @@ -36,13 +39,21 @@ enum LoopInsightsSuggestionStatus: String, Codable { case .applied: return "checkmark.circle.fill" case .dismissed: return "xmark.circle" case .autoApplied: return "bolt.circle.fill" + case .reverted: return "arrow.uturn.backward.circle.fill" } } var isResolved: Bool { switch self { case .pending: return false - case .applied, .dismissed, .autoApplied: return true + case .applied, .dismissed, .autoApplied, .reverted: return true + } + } + + var isRevertable: Bool { + switch self { + case .applied, .autoApplied: return true + case .pending, .dismissed, .reverted: return false } } } @@ -84,6 +95,11 @@ struct LoopInsightsSuggestionRecord: Codable, Identifiable, Equatable { self.resolvedAt = Date() } + mutating func markReverted() { + self.status = .reverted + self.resolvedAt = Date() + } + static func == (lhs: LoopInsightsSuggestionRecord, rhs: LoopInsightsSuggestionRecord) -> Bool { return lhs.id == rhs.id } diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index dafbf4d27d..6c16f7961b 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -114,9 +114,11 @@ struct LoopInsights_FeatureFlags { static var aiConfiguration: LoopInsightsAIProviderConfiguration { get { guard let data = defaults.data(forKey: Keys.aiConfiguration), - let config = try? JSONDecoder().decode(LoopInsightsAIProviderConfiguration.self, from: data) else { + var config = try? JSONDecoder().decode(LoopInsightsAIProviderConfiguration.self, from: data) else { return LoopInsightsAIProviderConfiguration() } + // Always enforce temperature=0 for deterministic analysis + config.temperature = 0.0 return config } set { diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index 1fce8f90f8..1b431d9763 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -7,6 +7,7 @@ // import Foundation +import Combine /// Builds structured prompts from aggregated data and current therapy settings, /// sends them to the AI provider via AIServiceAdapter, and parses the structured @@ -18,6 +19,10 @@ final class LoopInsights_AIAnalysis { private let serviceAdapter: LoopInsights_AIServiceAdapter + /// Debug log of the most recent analysis (developer mode only). + /// Contains the system prompt, user prompt, and raw AI response. + @Published private(set) var lastDebugLog: LoopInsightsDebugLog? + init(serviceAdapter: LoopInsights_AIServiceAdapter = .shared) { self.serviceAdapter = serviceAdapter } @@ -28,13 +33,24 @@ final class LoopInsights_AIAnalysis { func analyze( settingType: LoopInsightsSettingType, currentSettings: LoopInsightsTherapySnapshot, - stats: LoopInsightsAggregatedStats + stats: LoopInsightsAggregatedStats, + recentChanges: [LoopInsightsSuggestionRecord] = [] ) async throws -> LoopInsightsAnalysisResponse { let systemPrompt = buildSystemPrompt() - let userPrompt = buildUserPrompt(settingType: settingType, settings: currentSettings, stats: stats) + let userPrompt = buildUserPrompt(settingType: settingType, settings: currentSettings, stats: stats, recentChanges: recentChanges) + let timestamp = Date() let rawResponse = try await serviceAdapter.sendPrompt(systemPrompt, userPrompt: userPrompt) + // Capture debug log + lastDebugLog = LoopInsightsDebugLog( + timestamp: timestamp, + settingType: settingType, + systemPrompt: systemPrompt, + userPrompt: userPrompt, + rawResponse: rawResponse + ) + return try parseResponse(rawResponse: rawResponse, settingType: settingType, period: stats.period) } @@ -43,27 +59,81 @@ final class LoopInsights_AIAnalysis { private func buildSystemPrompt() -> String { let personality = LoopInsights_FeatureFlags.aiPersonality return """ - You are LoopInsights, an AI therapy settings advisor for people using insulin pump therapy \ - with automated insulin delivery (AID) systems. Your role is to analyze glucose, insulin, and \ - carbohydrate data to suggest therapy setting adjustments that improve Time in Range (TIR). + You are LoopInsights, an expert-level automated insulin delivery (AID) therapy settings analyst. \ + You think like a top endocrinologist who specializes in insulin pump optimization. You analyze \ + glucose, insulin, and carbohydrate data to determine whether therapy settings need adjustment. \(personality.promptInstruction) - CRITICAL SAFETY RULES: - 1. Never suggest changes larger than 20% from current values in a single adjustment. - 2. Always suggest conservative changes — it's better to under-adjust than over-adjust. - 3. Focus on one setting type at a time (Carb Ratio OR Insulin Sensitivity OR Basal Rate). - 4. Consider time-of-day patterns — different hours may need different adjustments. - 5. Flag any concerning patterns (frequent lows, extreme highs) prominently. - 6. Your suggestions are advisory only — the user makes the final decision. - - TUNING ORDER (one at a time): - 1. Carb Ratio (CR) — adjust first, as incorrect CR causes the most post-meal variability - 2. Insulin Sensitivity Factor (ISF) — adjust second, affects correction doses - 3. Basal Rate (BR) — adjust last, as basal changes affect the entire 24-hour profile + YOUR MANDATE: Be analytically rigorous. Every recommendation must be backed by specific numbers \ + from the data. If the data does not justify a change, return zero suggestions — that is the \ + correct response when settings are working. You are not here to impress or people-please. \ + You are here to find real problems and propose precise fixes. + + CLINICAL REASONING FRAMEWORK — How AID settings interact: + - BASAL RATE: Controls glucose during fasting periods. Analyze overnight (12AM-6AM) and \ + between-meal trends. In AID systems, the algorithm adjusts delivery around this baseline. \ + KEY SIGNAL: If the AID algorithm is constantly delivering corrections (high correction bolus \ + count) or if fasting glucose drifts up/down consistently, basal is likely wrong. \ + A basal/bolus split far from 50/50 is a strong signal — high bolus % (>60%) with many \ + corrections usually means basal is too low and the algorithm is compensating with corrections. + - INSULIN SENSITIVITY FACTOR (ISF): Controls how much 1 unit of insulin lowers glucose. \ + Analyze correction effectiveness — are corrections bringing glucose back to target? \ + KEY SIGNAL: If glucose stays high for hours after meals/corrections (hourly averages >150 \ + during 10AM-2PM or 7PM-10PM), ISF may be too high (insulin isn't strong enough). If glucose \ + drops too fast or goes low after corrections, ISF may be too low. + - CARB RATIO (CR): Controls how much insulin is given per gram of carbs at meals. \ + Analyze post-meal glucose behavior. KEY SIGNAL: If glucose spikes >50 mg/dL after meals \ + (compare pre-meal hour to 1-2 hours post-meal in hourly averages), CR may be too high \ + (not enough insulin per carb). If glucose drops after meals, CR may be too low. + + PATTERN RECOGNITION — What to look for: + 1. TIME-OF-DAY PATTERNS: Compare hourly averages across the day. Different periods may need \ + different settings. Common periods: overnight (12AM-6AM), morning (6AM-10AM), midday \ + (10AM-2PM), afternoon (2PM-6PM), evening (6PM-10PM), late night (10PM-12AM). + 2. AID ALGORITHM WORKLOAD: High correction bolus count means the algorithm is fighting the \ + settings. Calculate corrections per day (count / days in period). >3/day is elevated, \ + >5/day is a red flag that settings need work. + 3. BASAL/BOLUS RATIO: In well-tuned AID, expect roughly 40-60% basal. <30% basal almost \ + always means basal rate is too low. >70% basal may mean basal is too high. + 4. GLUCOSE TRENDS: Look at the slope of hourly averages. A consistent rise over 3+ hours \ + during fasting = basal too low. A consistent drop = basal too high. + 5. HIGH TIR DOES NOT MEAN PERFECT SETTINGS: If TIR is 90% but the algorithm is issuing 7 \ + corrections/day to achieve that, the settings are suboptimal — the algorithm is doing \ + heavy lifting to compensate. Better settings = same TIR with fewer corrections. + + CROSS-SETTING INTERACTIONS — You are given all three settings for context: + - BR and ISF are tightly coupled: if basal is too low, the algorithm compensates with \ + frequent corrections using ISF. Changing ISF without considering BR can mask the real problem. + - CR and ISF interact at meals: CR determines the meal bolus, ISF determines corrections. \ + If post-meal highs are followed by effective corrections, the issue is CR (not enough up front), \ + not ISF. If corrections aren't bringing glucose down, the issue is ISF. + - The CR/ISF ratio should be roughly consistent across time periods. Large deviations suggest \ + one of the two needs adjustment. + - When analyzing one setting, note in your reasoning if a different setting might be the \ + actual root cause. For example: "Midday highs could be addressed by lowering CR or ISF, \ + but the high correction count suggests basal is the primary issue." + - Only propose changes to the SPECIFIC setting being analyzed. Use cross-setting context \ + to inform your reasoning and confidence level, not to change other settings. + + DECISION CRITERIA — Only suggest a change when ALL of these apply: + 1. The data shows a clear, sustained pattern (not noise or one-off events). + 2. The pattern is attributable to the specific setting type being analyzed. + 3. The proposed change would meaningfully improve outcomes based on the data. + 4. The change does not increase hypoglycemia risk. + + IMPORTANT: Good TIR (>80%) with high algorithm workload (many corrections, skewed basal/bolus \ + ratio) STILL warrants setting changes. The goal is good TIR with MINIMAL algorithm intervention. \ + Only skip recommendations when TIR is good AND corrections are low AND basal/bolus is balanced. + + SAFETY RULES: + 1. Never suggest changes larger than 20% from current values. + 2. Conservative changes only — under-adjust rather than over-adjust. + 3. If time below range is >4%, prioritize safety (raise ISF or lower basal before anything else). + 4. Suggestions are advisory only — the user and their healthcare provider make final decisions. RESPONSE FORMAT: - You MUST respond with valid JSON in this exact structure: + Respond with valid JSON in this exact structure: { "suggestions": [ { @@ -75,16 +145,19 @@ final class LoopInsights_AIAnalysis { "proposed_value": 11.0 } ], - "reasoning": "Explanation of why this change is recommended", + "reasoning": "Specific data-backed explanation citing exact numbers that justify this change", "confidence": "low|medium|high" } ], - "overall_assessment": "Brief summary of the analysis findings", + "overall_assessment": "Factual summary including: algorithm workload assessment, time-of-day pattern summary, and what the basal/bolus ratio tells us", "next_recommended_focus": "carb_ratio|insulin_sensitivity|basal_rate|null" } + If NO changes are warranted, return: { "suggestions": [], "overall_assessment": "...", "next_recommended_focus": null } + Only return empty suggestions when TIR is good AND algorithm workload is low AND no time-of-day patterns exist. + Time blocks use seconds since midnight (0 = 12:00 AM, 21600 = 6:00 AM, 43200 = 12:00 PM, etc.) - Only suggest changes for time blocks where adjustment is warranted. If a time block is fine, omit it. + Combine all time blocks for the same setting type into a single suggestion. Do NOT return separate suggestions for the same setting — use multiple time_blocks within one suggestion. """ } @@ -93,32 +166,53 @@ final class LoopInsights_AIAnalysis { private func buildUserPrompt( settingType: LoopInsightsSettingType, settings: LoopInsightsTherapySnapshot, - stats: LoopInsightsAggregatedStats + stats: LoopInsightsAggregatedStats, + recentChanges: [LoopInsightsSuggestionRecord] = [] ) -> String { - var prompt = "Analyze my \(settingType.displayName) settings and suggest adjustments.\n\n" - - // Current settings - prompt += "## Current \(settingType.displayName) Schedule\n" - let items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] - let unit: String - - switch settingType { - case .carbRatio: - items = settings.carbRatioItems - unit = "g/U" - case .insulinSensitivity: - items = settings.insulinSensitivityItems - unit = "mg/dL per U" - case .basalRate: - items = settings.basalRateItems - unit = "U/hr" + var prompt = "Evaluate whether my \(settingType.displayName) settings need adjustment.\n\n" + + // Include recent LoopInsights-applied changes so the AI knows data predates current settings + let relevantChanges = recentChanges.filter { + ($0.status == .applied || $0.status == .autoApplied) && + $0.suggestion.settingType == settingType + } + if !relevantChanges.isEmpty { + prompt += "## IMPORTANT: Recent Settings Changes\n" + prompt += "The following changes were JUST applied to these settings based on a previous analysis of this same data. " + prompt += "The historical data below was collected BEFORE these changes took effect. " + prompt += "Do NOT suggest further changes to values that were already adjusted — the data does not yet reflect the new settings.\n\n" + for change in relevantChanges { + let ago = Int(Date().timeIntervalSince(change.resolvedAt ?? change.createdAt) / 60) + prompt += "- Applied \(ago) minute(s) ago: " + for block in change.suggestion.timeBlocks { + prompt += "\(formatTime(block.startTime))–\(formatTime(block.endTime)): \(String(format: "%.1f", block.currentValue)) → \(String(format: "%.1f", block.proposedValue)). " + } + prompt += "\n" + } + prompt += "\n" + } + + // All three therapy settings — AI needs full context to reason about interactions + prompt += "## All Current Therapy Settings\n" + prompt += "You are analyzing **\(settingType.displayName)** specifically, but consider how all three settings interact.\n\n" + + prompt += "### Basal Rate Schedule\(settingType == .basalRate ? " ← ANALYZING THIS" : "")\n" + for item in settings.basalRateItems { + prompt += "- \(formatTime(item.startTime)): \(String(format: "%.2f", item.value)) U/hr\n" + } + + prompt += "\n### Insulin Sensitivity Factor Schedule\(settingType == .insulinSensitivity ? " ← ANALYZING THIS" : "")\n" + for item in settings.insulinSensitivityItems { + prompt += "- \(formatTime(item.startTime)): \(String(format: "%.1f", item.value)) mg/dL per U\n" } - for item in items { - let timeStr = formatTime(item.startTime) - prompt += "- \(timeStr): \(String(format: "%.1f", item.value)) \(unit)\n" + prompt += "\n### Carb Ratio Schedule\(settingType == .carbRatio ? " ← ANALYZING THIS" : "")\n" + for item in settings.carbRatioItems { + prompt += "- \(formatTime(item.startTime)): \(String(format: "%.1f", item.value)) g/U\n" } + prompt += "\n" + // Glucose stats prompt += "\n## Glucose Statistics (\(stats.period.displayName))\n" prompt += "- Average Glucose: \(String(format: "%.0f", stats.glucoseStats.averageGlucose)) mg/dL\n" @@ -144,13 +238,59 @@ final class LoopInsights_AIAnalysis { prompt += "- Basal: \(String(format: "%.0f", stats.insulinStats.basalPercentage))% / Bolus: \(String(format: "%.0f", stats.insulinStats.bolusPercentage))%\n" prompt += "- Correction Boluses: \(stats.insulinStats.correctionBolusCount) in period\n" + // Computed: corrections per day and basal/bolus assessment + let days = max(1, stats.period.rawValue) + let correctionsPerDay = Double(stats.insulinStats.correctionBolusCount) / Double(days) + prompt += "- Corrections per Day: \(String(format: "%.1f", correctionsPerDay))\n" + if correctionsPerDay > 5 { + prompt += " ** RED FLAG: >5 corrections/day means the AID algorithm is heavily compensating for suboptimal settings **\n" + } else if correctionsPerDay > 3 { + prompt += " ** ELEVATED: >3 corrections/day suggests the algorithm is working harder than ideal **\n" + } + if stats.insulinStats.basalPercentage < 30 { + prompt += " ** RED FLAG: Basal is only \(String(format: "%.0f", stats.insulinStats.basalPercentage))% of TDD — strongly suggests basal rate is too low **\n" + } else if stats.insulinStats.basalPercentage < 40 { + prompt += " ** NOTE: Basal is \(String(format: "%.0f", stats.insulinStats.basalPercentage))% of TDD — lower than the ideal 40-60% range **\n" + } + // Carb stats prompt += "\n## Carbohydrate Statistics\n" prompt += "- Average Daily Carbs: \(String(format: "%.0f", stats.carbStats.averageDailyCarbs)) g/day\n" prompt += "- Meals Logged: \(stats.carbStats.mealCount)\n" prompt += "- Average Carbs per Meal: \(String(format: "%.0f", stats.carbStats.averageCarbsPerMeal)) g\n" - prompt += "\nPlease analyze this data and suggest adjustments to my \(settingType.displayName) settings. " + // Computed: time-of-day glucose analysis + prompt += "\n## Time-of-Day Analysis (computed from hourly averages)\n" + let g = stats.glucoseStats + let periods: [(name: String, hours: ClosedRange)] = [ + ("Overnight (12AM-6AM)", 0...5), + ("Morning (6AM-10AM)", 6...9), + ("Midday (10AM-2PM)", 10...13), + ("Afternoon (2PM-6PM)", 14...17), + ("Evening (6PM-10PM)", 18...21), + ("Late Night (10PM-12AM)", 22...23) + ] + for period in periods { + let hourlyValues = period.hours.compactMap { g.hourlyAverages[$0] } + guard !hourlyValues.isEmpty else { continue } + let avg = hourlyValues.reduce(0, +) / Double(hourlyValues.count) + let min = hourlyValues.min() ?? avg + let max = hourlyValues.max() ?? avg + let trend = (hourlyValues.last ?? avg) - (hourlyValues.first ?? avg) + prompt += "- \(period.name): avg \(String(format: "%.0f", avg)) mg/dL, " + prompt += "range \(String(format: "%.0f", min))-\(String(format: "%.0f", max)), " + prompt += "trend \(trend >= 0 ? "+" : "")\(String(format: "%.0f", trend)) mg/dL\n" + if avg > 150 { + prompt += " ** ELEVATED: Average glucose in this period is above 150 mg/dL **\n" + } + if abs(trend) > 30 { + prompt += " ** SIGNIFICANT DRIFT: \(trend > 0 ? "Rising" : "Falling") \(String(format: "%.0f", abs(trend))) mg/dL across this period **\n" + } + } + + prompt += "\nAnalyze this data focusing specifically on \(settingType.displayName). " + prompt += "Use the time-of-day analysis and algorithm workload metrics to identify actionable patterns. " + prompt += "If the data clearly supports adjustments, propose them. If not, return empty suggestions. " prompt += "Respond with JSON only, no markdown formatting." return prompt @@ -214,6 +354,10 @@ final class LoopInsights_AIAnalysis { suggestions.append(suggestion) } + // Merge multiple suggestions into one (all share the same setting type + // within a single analysis call, so separate entries are just LLM inconsistency) + let merged = mergeSuggestions(suggestions, settingType: settingType, period: period) + let overallAssessment = json["overall_assessment"] as? String ?? "Analysis complete." var nextFocus: LoopInsightsSettingType? = nil @@ -222,13 +366,41 @@ final class LoopInsights_AIAnalysis { } return LoopInsightsAnalysisResponse( - suggestions: suggestions, + suggestions: merged, overallAssessment: overallAssessment, nextRecommendedFocus: nextFocus, rawResponse: rawResponse ) } + // MARK: - Merge + + /// Consolidate multiple suggestions (same setting type) into a single suggestion + /// with all time blocks combined. Takes the highest confidence and joins reasoning. + private func mergeSuggestions( + _ suggestions: [LoopInsightsSuggestion], + settingType: LoopInsightsSettingType, + period: LoopInsightsAnalysisPeriod + ) -> [LoopInsightsSuggestion] { + guard suggestions.count > 1 else { return suggestions } + + let allBlocks = suggestions.flatMap { $0.timeBlocks } + .sorted { $0.startTime < $1.startTime } + let highestConfidence = suggestions.map { $0.confidence }.max() ?? .low + let combinedReasoning = suggestions.map { $0.reasoning }.joined(separator: " ") + + let merged = LoopInsightsSuggestion( + id: UUID(), + settingType: settingType, + timeBlocks: allBlocks, + reasoning: combinedReasoning, + confidence: highestConfidence, + analysisPeriod: period, + createdAt: Date() + ) + return [merged] + } + // MARK: - Helpers private func extractJSON(from text: String) -> String { diff --git a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift index 9c0781cf57..0ae0753d7c 100644 --- a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift +++ b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift @@ -80,6 +80,13 @@ final class LoopInsights_SuggestionStore: ObservableObject { saveRecords() } + /// Mark a record as reverted (settings restored to pre-apply state) + func markReverted(recordID: UUID) { + guard let index = records.firstIndex(where: { $0.id == recordID }) else { return } + records[index].markReverted() + saveRecords() + } + /// Dismiss all pending records func dismissAllPending() { for index in records.indices where records[index].status == .pending { diff --git a/Loop/View Controllers/StatusTableViewController.swift b/Loop/View Controllers/StatusTableViewController.swift index 94df013244..1c8ed6f4f0 100644 --- a/Loop/View Controllers/StatusTableViewController.swift +++ b/Loop/View Controllers/StatusTableViewController.swift @@ -1640,6 +1640,13 @@ final class StatusTableViewController: LoopChartsTableViewController { availableSupports: supportManager.availableSupports, isOnboardingComplete: onboardingManager.isComplete, therapySettingsViewModelDelegate: deviceManager, + loopInsightsDataStores: { [weak self] in + guard let dm = self?.deviceManager else { return nil } + let writer: LoopInsightsSettingsWriter = { mutate in + dm.loopManager.mutateSettings(mutate) + } + return (dm.glucoseStore, dm.doseStore, dm.carbStore, dm.settingsManager, writer) + }, delegate: self) let hostingController = DismissibleHostingController( rootView: SettingsView(viewModel: viewModel, localizedAppNameAndVersion: supportManager.localizedAppNameAndVersion) diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index b3da107c5a..1585c29bca 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -9,6 +9,7 @@ import Foundation import Combine import LoopKit +import SwiftUI /// Main view model for the LoopInsights Dashboard. Orchestrates data aggregation, /// AI analysis, and suggestion state management. @@ -20,6 +21,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { /// Current analysis state @Published var isAnalyzing = false + @Published var isAnalyzingAll = false @Published var analysisError: LoopInsightsError? @Published var lastAnalysisDate: Date? @@ -34,13 +36,14 @@ final class LoopInsights_DashboardViewModel: ObservableObject { @Published var pendingSuggestions: [LoopInsightsSuggestionRecord] = [] /// Selected setting type for analysis focus - @Published var focusSettingType: LoopInsightsSettingType = .carbRatio + @Published var focusSettingType: LoopInsightsSettingType = .basalRate /// Analysis period @Published var analysisPeriod: LoopInsightsAnalysisPeriod /// Apply mode confirmation state @Published var showingApplyConfirmation = false + @Published var showingPreFillEditor = false @Published var recordToApply: LoopInsightsSuggestionRecord? /// Aggregated stats (for display) @@ -53,6 +56,16 @@ final class LoopInsights_DashboardViewModel: ObservableObject { /// Detected glucose/insulin patterns from aggregated data @Published var detectedPatterns: [LoopInsightsDetectedPattern] = [] + /// Suggestions that were just auto-applied (for notification display) + @Published var autoAppliedSuggestions: [LoopInsightsSuggestion] = [] + + /// Settings score (0-100) based on objective metrics + @Published var settingsScore: Int? + @Published var settingsScoreBreakdown: SettingsScoreBreakdown? + + /// Whether current metrics indicate settings are already performing well + @Published var settingsAlreadyOptimal: Bool = false + // MARK: - Dependencies private let coordinator: LoopInsights_Coordinator @@ -96,6 +109,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { isAnalyzing = true analysisError = nil + autoAppliedSuggestions = [] Task { @MainActor in do { @@ -103,20 +117,22 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // Detect patterns from aggregated stats - self.detectedPatterns = Self.detectPatterns(from: stats) - // Capture current settings let snapshot = try coordinator.captureCurrentSnapshot() self.currentSnapshot = snapshot - // Run AI analysis + // Run AI analysis (include recent changes so AI knows data predates current settings) + let recentChanges = self.recentlyAppliedRecords() let response = try await coordinator.aiAnalysis.analyze( settingType: focusSettingType, currentSettings: snapshot, - stats: stats + stats: stats, + recentChanges: recentChanges ) + // Show patterns, score, and AI results together after analysis completes + self.detectedPatterns = Self.detectPatterns(from: stats) + self.updateSettingsScore() self.analysisResponse = response self.overallAssessment = response.overallAssessment self.lastAnalysisDate = Date() @@ -132,10 +148,8 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // Add new suggestions as pending records let _ = coordinator.suggestionStore.addSuggestions(response.suggestions) - // If next focus is recommended, update - if let nextFocus = response.nextRecommendedFocus { - self.focusSettingType = nextFocus - } + // Note: nextRecommendedFocus from AI is intentionally ignored + // for single-analysis — keep focus on what the user selected. // Auto-apply if developer mode + auto-apply enabled if LoopInsights_FeatureFlags.developerModeEnabled && @@ -157,6 +171,73 @@ final class LoopInsights_DashboardViewModel: ObservableObject { } } + /// Run AI analysis for all three setting types sequentially + func runAnalysisAll() { + guard !isAnalyzing else { return } + + isAnalyzing = true + isAnalyzingAll = true + analysisError = nil + autoAppliedSuggestions = [] + + Task { @MainActor in + do { + // Aggregate data once for all analyses + let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) + self.aggregatedStats = stats + + let snapshot = try coordinator.captureCurrentSnapshot() + self.currentSnapshot = snapshot + + // Analyze each setting type in tuning order: CR → ISF → BR + let recentChanges = self.recentlyAppliedRecords() + for settingType in LoopInsightsSettingType.allCases { + let response = try await coordinator.aiAnalysis.analyze( + settingType: settingType, + currentSettings: snapshot, + stats: stats, + recentChanges: recentChanges + ) + + self.overallAssessment = response.overallAssessment + self.analyzedSettingTypes.insert(settingType) + + // Dismiss existing pending suggestions for this type + for record in pendingSuggestions where record.suggestion.settingType == settingType { + coordinator.suggestionStore.markDismissed(recordID: record.id) + } + + let _ = coordinator.suggestionStore.addSuggestions(response.suggestions) + + // Auto-apply if developer mode + auto-apply enabled + if LoopInsights_FeatureFlags.developerModeEnabled && + LoopInsights_FeatureFlags.applyMode == .autoApply { + for suggestion in response.suggestions where suggestion.confidence >= .high { + await autoApplySuggestion(suggestion) + } + } + } + + // Show patterns and score after all analyses complete + self.detectedPatterns = Self.detectPatterns(from: stats) + self.updateSettingsScore() + + self.lastAnalysisDate = Date() + self.isAnalyzing = false + self.isAnalyzingAll = false + + } catch let error as LoopInsightsError { + self.analysisError = error + self.isAnalyzing = false + self.isAnalyzingAll = false + } catch { + self.analysisError = .aiProviderError(error.localizedDescription) + self.isAnalyzing = false + self.isAnalyzingAll = false + } + } + } + /// Apply a suggestion based on the current apply mode func applySuggestion(_ record: LoopInsightsSuggestionRecord) { let mode = LoopInsights_FeatureFlags.applyMode @@ -178,10 +259,9 @@ final class LoopInsights_DashboardViewModel: ObservableObject { showingApplyConfirmation = true case .preFill: - // Navigate to editor with pre-filled values - // For Phase 1, fall back to one-tap behavior with confirmation + // Open editor pre-filled with proposed values for user review recordToApply = record - showingApplyConfirmation = true + showingPreFillEditor = true case .autoApply: // This path is only available in developer mode @@ -197,13 +277,16 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let snapshotBefore = try? coordinator.captureCurrentSnapshot() - // TODO: Phase 1 — implement actual settings write via SettingsManager - // For now, mark as applied and log + // Write the therapy settings changes to Loop + coordinator.applyTherapyChanges(suggestion: record.suggestion) + + let snapshotAfter = try? coordinator.captureCurrentSnapshot() + coordinator.suggestionStore.markApplied( recordID: record.id, mode: LoopInsights_FeatureFlags.applyMode, snapshotBefore: snapshotBefore, - snapshotAfter: nil + snapshotAfter: snapshotAfter ) recordToApply = nil @@ -215,6 +298,40 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func cancelApply() { recordToApply = nil showingApplyConfirmation = false + showingPreFillEditor = false + } + + /// Apply with user-edited values from the pre-fill editor + func applyEditedSuggestion(editedBlocks: [LoopInsightsTimeBlock]) { + guard let record = recordToApply else { return } + + let snapshotBefore = try? coordinator.captureCurrentSnapshot() + + // Build a modified suggestion with the user's edited values + let editedSuggestion = LoopInsightsSuggestion( + id: record.suggestion.id, + settingType: record.suggestion.settingType, + timeBlocks: editedBlocks, + reasoning: record.suggestion.reasoning, + confidence: record.suggestion.confidence, + analysisPeriod: record.suggestion.analysisPeriod, + createdAt: record.suggestion.createdAt + ) + + coordinator.applyTherapyChanges(suggestion: editedSuggestion) + + let snapshotAfter = try? coordinator.captureCurrentSnapshot() + + coordinator.suggestionStore.markApplied( + recordID: record.id, + mode: .preFill, + snapshotBefore: snapshotBefore, + snapshotAfter: snapshotAfter + ) + + recordToApply = nil + showingPreFillEditor = false + loadCurrentSettings() } /// Dismiss a suggestion @@ -227,6 +344,24 @@ final class LoopInsights_DashboardViewModel: ObservableObject { coordinator.suggestionStore.dismissAllPending() } + /// Revert a previously applied suggestion by restoring the pre-apply snapshot. + /// Returns true if the revert succeeded. + @discardableResult + func revertSuggestion(_ record: LoopInsightsSuggestionRecord) -> Bool { + guard record.status.isRevertable else { return false } + guard let snapshotBefore = record.settingsSnapshotBefore else { + print("[LoopInsights] Cannot revert: no pre-apply snapshot stored") + return false + } + + let success = coordinator.revertToSnapshot(snapshotBefore) + if success { + coordinator.suggestionStore.markReverted(recordID: record.id) + loadCurrentSettings() + } + return success + } + /// Returns the analysis status for a setting type (used for color indicators) func settingStatus(_ type: LoopInsightsSettingType) -> LoopInsightsSettingStatus { let hasPending = pendingSuggestions.contains { $0.suggestion.settingType == type } @@ -244,23 +379,82 @@ final class LoopInsights_DashboardViewModel: ObservableObject { LoopInsights_FeatureFlags.analysisPeriod = period } + /// The most recent AI debug log (system prompt, user prompt, raw response). + /// Available in developer mode for troubleshooting. + var lastDebugLog: LoopInsightsDebugLog? { + coordinator.aiAnalysis.lastDebugLog + } + + /// Get records that were applied/auto-applied within the last 24 hours + /// AND whose changes are still reflected in the current settings. + /// If the user manually reverted settings, those records are excluded. + private func recentlyAppliedRecords() -> [LoopInsightsSuggestionRecord] { + let cutoff = Date().addingTimeInterval(-24 * 3600) + guard let currentSnapshot = currentSnapshot else { return [] } + + return coordinator.suggestionStore.allRecords.filter { record in + guard (record.status == .applied || record.status == .autoApplied), + (record.resolvedAt ?? record.createdAt) > cutoff else { + return false + } + + // Verify the proposed changes are still in effect by comparing + // against current settings. If the user manually reverted, the + // current values won't match the proposed values. + let currentItems: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] + switch record.suggestion.settingType { + case .carbRatio: currentItems = currentSnapshot.carbRatioItems + case .insulinSensitivity: currentItems = currentSnapshot.insulinSensitivityItems + case .basalRate: currentItems = currentSnapshot.basalRateItems + } + + // Check if at least one proposed value still matches current settings + for block in record.suggestion.timeBlocks { + let currentValue = Self.effectiveValue(at: block.startTime, in: currentItems) + if abs(currentValue - block.proposedValue) < 0.01 { + return true // This change is still active + } + } + return false // None of the proposed values match — change was reverted + } + } + + /// Find the effective value at a given time in a schedule snapshot. + private static func effectiveValue( + at time: TimeInterval, + in items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] + ) -> Double { + let sorted = items.sorted { $0.startTime < $1.startTime } + var result = sorted.first?.value ?? 0 + for item in sorted { + if item.startTime <= time { + result = item.value + } else { + break + } + } + return result + } + // MARK: - Private private func autoApplySuggestion(_ suggestion: LoopInsightsSuggestion) async { let snapshotBefore = try? coordinator.captureCurrentSnapshot() - // TODO: Implement actual settings write - // For now, just log the auto-apply intent - print("[LoopInsights] Auto-applying suggestion: \(suggestion.summaryDescription)") + coordinator.applyTherapyChanges(suggestion: suggestion) + + let snapshotAfter = try? coordinator.captureCurrentSnapshot() if let record = coordinator.suggestionStore.pendingRecords.first(where: { $0.suggestion.id == suggestion.id }) { coordinator.suggestionStore.markApplied( recordID: record.id, mode: .autoApply, snapshotBefore: snapshotBefore, - snapshotAfter: nil + snapshotAfter: snapshotAfter ) } + + autoAppliedSuggestions.append(suggestion) } // MARK: - Pattern Detection @@ -404,4 +598,95 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // Sort: high severity first return patterns.sorted { $0.severity > $1.severity } } + + // MARK: - Settings Score + + struct SettingsScoreBreakdown { + let tirScore: Int // 0-40 points + let belowRangeScore: Int // 0-25 points + let cvScore: Int // 0-20 points + let gmiScore: Int // 0-15 points + let total: Int // 0-100 + + var grade: String { + switch total { + case 90...100: return "A" + case 80..<90: return "B" + case 70..<80: return "C" + case 60..<70: return "D" + default: return "F" + } + } + + var gradeColor: Color { + switch total { + case 90...100: return .green + case 80..<90: return .blue + case 70..<80: return .yellow + case 60..<70: return .orange + default: return .red + } + } + + var summary: String { + switch total { + case 90...100: return NSLocalizedString("Excellent — your settings are well-optimized", comment: "LoopInsights score: excellent") + case 80..<90: return NSLocalizedString("Good — minor improvements possible", comment: "LoopInsights score: good") + case 70..<80: return NSLocalizedString("Fair — some adjustments recommended", comment: "LoopInsights score: fair") + case 60..<70: return NSLocalizedString("Needs attention — settings adjustments likely needed", comment: "LoopInsights score: needs attention") + default: return NSLocalizedString("Review recommended — significant adjustments may help", comment: "LoopInsights score: review") + } + } + } + + /// Calculate an objective settings score from glucose metrics. + /// Based on international consensus targets (ADA/AACE). + static func calculateSettingsScore(from stats: LoopInsightsAggregatedStats.GlucoseStats) -> SettingsScoreBreakdown { + // TIR score: 40 points max. Target >70% (ADA consensus) + // 90%+ = 40, 80% = 32, 70% = 24, <50% = 0 + let tirScore: Int + if stats.timeInRange >= 90 { tirScore = 40 } + else if stats.timeInRange >= 70 { tirScore = Int(((stats.timeInRange - 50) / 40) * 40) } + else if stats.timeInRange >= 50 { tirScore = Int(((stats.timeInRange - 50) / 20) * 16) } + else { tirScore = 0 } + + // Below range score: 25 points max. Target <4% (ADA consensus) + // <1% = 25, <4% = 20, <8% = 10, >8% = 0 + let belowRangeScore: Int + if stats.timeBelowRange < 1 { belowRangeScore = 25 } + else if stats.timeBelowRange < 4 { belowRangeScore = 20 } + else if stats.timeBelowRange < 8 { belowRangeScore = Int(25 - (stats.timeBelowRange * 2.5)) } + else { belowRangeScore = 0 } + + // CV score: 20 points max. Target <36% (ADA consensus) + // <30% = 20, <36% = 15, <45% = 8, >45% = 0 + let cvScore: Int + if stats.coefficientOfVariation < 30 { cvScore = 20 } + else if stats.coefficientOfVariation < 36 { cvScore = 15 } + else if stats.coefficientOfVariation < 45 { cvScore = 8 } + else { cvScore = 0 } + + // GMI score: 15 points max. Target <7.0% (ADA) + // <6.5% = 15, <7.0% = 12, <7.5% = 8, <8.0% = 4, >8% = 0 + let gmiScore: Int + if stats.gmi < 6.5 { gmiScore = 15 } + else if stats.gmi < 7.0 { gmiScore = 12 } + else if stats.gmi < 7.5 { gmiScore = 8 } + else if stats.gmi < 8.0 { gmiScore = 4 } + else { gmiScore = 0 } + + let total = max(0, min(100, tirScore + belowRangeScore + cvScore + gmiScore)) + return SettingsScoreBreakdown(tirScore: tirScore, belowRangeScore: belowRangeScore, cvScore: cvScore, gmiScore: gmiScore, total: total) + } + + /// Update the settings score from current aggregated stats. + func updateSettingsScore() { + guard let stats = aggregatedStats else { return } + let breakdown = Self.calculateSettingsScore(from: stats.glucoseStats) + settingsScore = breakdown.total + settingsScoreBreakdown = breakdown + + // Flag if settings are already performing well + settingsAlreadyOptimal = stats.glucoseStats.timeInRange > 85 && stats.glucoseStats.timeBelowRange < 4 + } } diff --git a/Loop/View Models/SettingsViewModel.swift b/Loop/View Models/SettingsViewModel.swift index d4b48766b3..f853ebcdb8 100644 --- a/Loop/View Models/SettingsViewModel.swift +++ b/Loop/View Models/SettingsViewModel.swift @@ -79,6 +79,7 @@ public class SettingsViewModel: ObservableObject { let sensitivityOverridesEnabled: Bool let isOnboardingComplete: Bool let therapySettingsViewModelDelegate: TherapySettingsViewModelDelegate? + let loopInsightsDataStores: () -> Any? @Published var isClosedLoopAllowed: Bool @@ -120,6 +121,7 @@ public class SettingsViewModel: ObservableObject { availableSupports: [SupportUI], isOnboardingComplete: Bool, therapySettingsViewModelDelegate: TherapySettingsViewModelDelegate?, + loopInsightsDataStores: @escaping () -> Any? = { nil }, delegate: SettingsViewModelDelegate? ) { self.alertPermissionsChecker = alertPermissionsChecker @@ -137,6 +139,7 @@ public class SettingsViewModel: ObservableObject { self.availableSupports = availableSupports self.isOnboardingComplete = isOnboardingComplete self.therapySettingsViewModelDelegate = therapySettingsViewModelDelegate + self.loopInsightsDataStores = loopInsightsDataStores self.delegate = delegate // This strangeness ensures the composed ViewModels' (ObservableObjects') changes get reported to this ViewModel (ObservableObject) diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index 00724f7123..d906865e80 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -25,6 +25,7 @@ struct LoopInsights_DashboardView: View { var renderTrigger: Int = 0 @State private var showingHistory = false + @State private var showingDebugLog = false @State private var selectedRecord: LoopInsightsSuggestionRecord? @State private var developerTapCount = 0 @@ -43,6 +44,13 @@ struct LoopInsights_DashboardView: View { ) } + private var showingPreFillEditorBinding: Binding { + Binding( + get: { viewModel.showingPreFillEditor }, + set: { viewModel.showingPreFillEditor = $0 } + ) + } + var body: some View { List { headerSection @@ -54,6 +62,15 @@ struct LoopInsights_DashboardView: View { if viewModel.overallAssessment != nil { assessmentSection } + if viewModel.settingsScoreBreakdown != nil { + settingsScoreSection + } + if viewModel.settingsAlreadyOptimal && !viewModel.pendingSuggestions.isEmpty { + optimalWarningBanner + } + if !viewModel.autoAppliedSuggestions.isEmpty { + autoAppliedSection + } if !viewModel.pendingSuggestions.isEmpty { pendingSuggestionsSection } @@ -71,7 +88,17 @@ struct LoopInsights_DashboardView: View { } .sheet(isPresented: $showingHistory) { NavigationView { - LoopInsights_SuggestionHistoryView(store: viewModel.suggestionStore) + LoopInsights_SuggestionHistoryView( + store: viewModel.suggestionStore, + onRevert: { record in viewModel.revertSuggestion(record) } + ) + } + } + .sheet(isPresented: $showingDebugLog) { + if let log = viewModel.lastDebugLog { + NavigationView { + LoopInsights_DebugLogView(log: log) + } } } .alert( @@ -90,6 +117,21 @@ struct LoopInsights_DashboardView: View { comment: "LoopInsights apply disclaimer" )) } + .sheet(isPresented: showingPreFillEditorBinding) { + if let record = viewModel.recordToApply { + NavigationView { + LoopInsights_PreFillEditorView( + record: record, + onApply: { editedBlocks in + viewModel.applyEditedSuggestion(editedBlocks: editedBlocks) + }, + onCancel: { + viewModel.cancelApply() + } + ) + } + } + } } // MARK: - Header @@ -126,8 +168,13 @@ struct LoopInsights_DashboardView: View { // MARK: - Current Settings private var currentSettingsSection: some View { - Section(header: Text(NSLocalizedString("Pick from your Current Therapy Settings", comment: "LoopInsights current settings header"))) { + Section(header: Text(NSLocalizedString("Tap one of your current Therapy Settings", comment: "LoopInsights current settings header"))) { if let snapshot = viewModel.currentSnapshot { + settingRow( + type: .basalRate, + items: snapshot.basalRateItems, + unit: "U/hr" + ) settingRow( type: .carbRatio, items: snapshot.carbRatioItems, @@ -138,11 +185,6 @@ struct LoopInsights_DashboardView: View { items: snapshot.insulinSensitivityItems, unit: "mg/dL/U" ) - settingRow( - type: .basalRate, - items: snapshot.basalRateItems, - unit: "U/hr" - ) HStack(spacing: 16) { legendDot(color: .gray, label: NSLocalizedString("Not analyzed", comment: "LoopInsights legend: not analyzed")) legendDot(color: .green, label: NSLocalizedString("No changes", comment: "LoopInsights legend: OK")) @@ -205,34 +247,70 @@ struct LoopInsights_DashboardView: View { } } - // Analyze button - Button(action: { viewModel.runAnalysis() }) { - HStack { - Spacer() - if viewModel.isAnalyzing { - ProgressView() - .progressViewStyle(CircularProgressViewStyle()) - .tint(.white) - .padding(.trailing, 8) - Text(NSLocalizedString("Analyzing...", comment: "LoopInsights analyzing")) - } else { - Image(systemName: "sparkles") - Text(String(format: NSLocalizedString("Analyze %@", comment: "LoopInsights analyze button"), viewModel.focusSettingType.abbreviation)) + // Analyze buttons + HStack(spacing: 10) { + Button(action: { viewModel.runAnalysis() }) { + HStack { + Spacer() + if viewModel.isAnalyzing && !viewModel.isAnalyzingAll { + ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .tint(.white) + .scaleEffect(0.8) + Text(NSLocalizedString("Analyzing...", comment: "LoopInsights analyzing")) + } else { + Image(systemName: "sparkles") + Text(String(format: NSLocalizedString("Analyze %@", comment: "LoopInsights analyze button"), viewModel.focusSettingType.abbreviation)) + } + Spacer() } - Spacer() + .font(.subheadline.weight(.medium)) + .foregroundColor(.white) + .padding(.vertical, 10) + .background( + (viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) + ? Color(red: 0.2, green: 0.6, blue: 0.2) + : Color.green + ) + .cornerRadius(10) } - .font(.body.weight(.medium)) - .foregroundColor(.white) - .padding(.vertical, 10) - .background( - (viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) - ? Color(red: 0.2, green: 0.6, blue: 0.2) - : Color.green - ) - .cornerRadius(10) + .buttonStyle(.plain) + .disabled(viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) + + Text(NSLocalizedString("or", comment: "LoopInsights or separator")) + .font(.caption) + .foregroundColor(.secondary) + + Button(action: { viewModel.runAnalysisAll() }) { + HStack { + Spacer() + if viewModel.isAnalyzingAll { + ProgressView() + .progressViewStyle(CircularProgressViewStyle()) + .tint(.white) + .scaleEffect(0.8) + Text(NSLocalizedString("Analyzing...", comment: "LoopInsights analyzing all")) + } else { + Image(systemName: "sparkles") + Text(NSLocalizedString("Analyze All", comment: "LoopInsights analyze all button")) + } + Spacer() + } + .font(.subheadline.weight(.medium)) + .foregroundColor(.white) + .padding(.vertical, 10) + .background( + (viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) + ? Color(red: 0.2, green: 0.6, blue: 0.2) + : Color.green + ) + .cornerRadius(10) + } + .buttonStyle(.plain) + .disabled(viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) } - .buttonStyle(.plain) - .disabled(viewModel.isAnalyzing || !LoopInsights_SecureStorage.hasAPIKey) + .listRowSeparator(.hidden, edges: .top) + .padding(.bottom, 8) if !LoopInsights_SecureStorage.hasAPIKey { Text(NSLocalizedString("Configure your AI API key in LoopInsights Settings to begin analysis.", comment: "LoopInsights no API key message")) @@ -248,6 +326,44 @@ struct LoopInsights_DashboardView: View { } } + // MARK: - Auto-Applied Notification + + private var autoAppliedSection: some View { + Section(header: Text(NSLocalizedString("AUTO-APPLIED CHANGES", comment: "LoopInsights auto-applied section header"))) { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 6) { + Image(systemName: "checkmark.seal.fill") + .foregroundColor(.green) + Text(NSLocalizedString("The following changes were automatically applied to your therapy settings:", comment: "LoopInsights auto-applied description")) + .font(.caption) + .foregroundColor(.secondary) + } + + ForEach(viewModel.autoAppliedSuggestions) { suggestion in + VStack(alignment: .leading, spacing: 4) { + Text(suggestion.settingType.displayName) + .font(.subheadline.weight(.semibold)) + ForEach(suggestion.timeBlocks) { block in + HStack { + Text(block.timeRangeFormatted) + .font(.caption) + .foregroundColor(.secondary) + Spacer() + Text(String(format: "%.1f → %.1f", block.currentValue, block.proposedValue)) + .font(.caption.weight(.medium)) + .foregroundColor(.green) + Text(String(format: "(%+.0f%%)", block.changePercent)) + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + .padding(.vertical, 2) + } + } + } + } + // MARK: - Pending Suggestions private var pendingSuggestionsSection: some View { @@ -261,15 +377,19 @@ struct LoopInsights_DashboardView: View { }) { ForEach(viewModel.pendingSuggestions) { record in suggestionCard(record) + .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)) + .padding(.horizontal, 16) + .padding(.vertical, 4) } HStack(spacing: 16) { Text(NSLocalizedString("Confidence Level:", comment: "LoopInsights confidence legend label")) - legendDot(color: .blue, label: NSLocalizedString("High", comment: "LoopInsights legend: high")) + legendDot(color: .green, label: NSLocalizedString("High", comment: "LoopInsights legend: high")) legendDot(color: .orange, label: NSLocalizedString("Medium", comment: "LoopInsights legend: medium")) legendDot(color: .yellow, label: NSLocalizedString("Low", comment: "LoopInsights legend: low")) } .font(.caption2) .foregroundColor(.secondary) + .listRowSeparator(.hidden, edges: .top) } } @@ -307,18 +427,26 @@ struct LoopInsights_DashboardView: View { // Quick action buttons HStack { Button(action: { viewModel.applySuggestion(record) }) { - Label(NSLocalizedString("Apply", comment: "LoopInsights apply"), systemImage: "checkmark.circle") - .font(.caption) + Text(NSLocalizedString("Apply", comment: "LoopInsights apply")) + .font(.caption.weight(.medium)) + .foregroundColor(.white) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(Color.green) + .cornerRadius(8) } - .buttonStyle(.borderedProminent) - .controlSize(.small) + .buttonStyle(.plain) Button(action: { viewModel.dismissSuggestion(record) }) { - Label(NSLocalizedString("Dismiss", comment: "LoopInsights dismiss"), systemImage: "xmark.circle") - .font(.caption) + Text(NSLocalizedString("Dismiss", comment: "LoopInsights dismiss")) + .font(.caption.weight(.medium)) + .foregroundColor(.white) + .padding(.horizontal, 12) + .padding(.vertical, 6) + .background(Color.red) + .cornerRadius(8) } - .buttonStyle(.bordered) - .controlSize(.small) + .buttonStyle(.plain) Spacer() @@ -336,21 +464,25 @@ struct LoopInsights_DashboardView: View { } private func confidenceBadge(_ confidence: LoopInsightsConfidence) -> some View { - Text(confidence.displayName) - .font(.caption2) - .fontWeight(.medium) - .padding(.horizontal, 6) - .padding(.vertical, 2) - .background(confidenceColor(confidence).opacity(0.2)) - .foregroundColor(confidenceColor(confidence)) - .cornerRadius(4) + HStack(spacing: 4) { + Circle() + .fill(confidenceColor(confidence)) + .frame(width: 8, height: 8) + Text(confidence.displayName) + .font(.caption.weight(.bold)) + } + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(confidenceColor(confidence).opacity(0.15)) + .foregroundColor(confidenceColor(confidence)) + .cornerRadius(6) } private func confidenceColor(_ confidence: LoopInsightsConfidence) -> Color { switch confidence { case .low: return .yellow case .medium: return .orange - case .high: return .blue + case .high: return .green } } @@ -410,7 +542,7 @@ struct LoopInsights_DashboardView: View { } if let stats = viewModel.aggregatedStats { - statsRow(label: NSLocalizedString("Time in Range", comment: "LoopInsights TIR label"), + statsRow(label: NSLocalizedString("Time in Range (70-180)", comment: "LoopInsights TIR label with range"), value: String(format: "%.1f%%", stats.glucoseStats.timeInRange)) statsRow(label: NSLocalizedString("Average Glucose", comment: "LoopInsights avg glucose label"), value: String(format: "%.0f mg/dL", stats.glucoseStats.averageGlucose)) @@ -418,7 +550,7 @@ struct LoopInsights_DashboardView: View { value: String(format: "%.1f%%", stats.glucoseStats.gmi)) statsRow(label: NSLocalizedString("Total Daily Dose", comment: "LoopInsights TDD label"), value: String(format: "%.1f U/day", stats.insulinStats.totalDailyDose)) - statsRow(label: NSLocalizedString("CV", comment: "LoopInsights CV label"), + statsRow(label: NSLocalizedString("Coefficient of Variation", comment: "LoopInsights coefficient of variation label"), value: String(format: "%.1f%%", stats.glucoseStats.coefficientOfVariation)) } } @@ -436,6 +568,99 @@ struct LoopInsights_DashboardView: View { } } + // MARK: - Settings Score + + private var settingsScoreSection: some View { + Section(header: Text(NSLocalizedString("SETTINGS SCORE", comment: "LoopInsights settings score header"))) { + if let breakdown = viewModel.settingsScoreBreakdown { + HStack(alignment: .center) { + // Grade circle + ZStack { + Circle() + .stroke(breakdown.gradeColor.opacity(0.3), lineWidth: 6) + .frame(width: 60, height: 60) + Circle() + .trim(from: 0, to: Double(breakdown.total) / 100) + .stroke(breakdown.gradeColor, style: StrokeStyle(lineWidth: 6, lineCap: .round)) + .frame(width: 60, height: 60) + .rotationEffect(.degrees(-90)) + VStack(spacing: 0) { + Text(breakdown.grade) + .font(.title2.weight(.bold)) + .foregroundColor(breakdown.gradeColor) + Text("\(breakdown.total)") + .font(.caption2) + .foregroundColor(.secondary) + } + } + .padding(.trailing, 12) + + VStack(alignment: .leading, spacing: 4) { + Text(breakdown.summary) + .font(.subheadline.weight(.medium)) + VStack(alignment: .leading, spacing: 2) { + scoreBar(label: "TIR", score: breakdown.tirScore, max: 40, color: breakdown.tirScore >= 32 ? .green : .orange) + scoreBar(label: "Safety", score: breakdown.belowRangeScore, max: 25, color: breakdown.belowRangeScore >= 20 ? .green : .red) + scoreBar(label: "Stability", score: breakdown.cvScore, max: 20, color: breakdown.cvScore >= 15 ? .green : .orange) + scoreBar(label: "GMI", score: breakdown.gmiScore, max: 15, color: breakdown.gmiScore >= 12 ? .green : .orange) + } + } + } + .padding(.vertical, 4) + } + } + } + + private func scoreBar(label: String, score: Int, max: Int, color: Color) -> some View { + HStack { + Text(label) + .font(.caption2) + .foregroundColor(.secondary) + .lineLimit(1) + .fixedSize() + .frame(width: 52, alignment: .leading) + .padding(.trailing, 6) + GeometryReader { geo in + ZStack(alignment: .leading) { + RoundedRectangle(cornerRadius: 2) + .fill(Color.secondary.opacity(0.2)) + .frame(height: 4) + RoundedRectangle(cornerRadius: 2) + .fill(color) + .frame(width: geo.size.width * CGFloat(score) / CGFloat(max), height: 4) + } + } + .frame(height: 4) + Text("\(score)/\(max)") + .font(.caption2) + .foregroundColor(.secondary) + .lineLimit(1) + .fixedSize() + .frame(width: 36, alignment: .trailing) + .padding(.leading, 6) + } + } + + // MARK: - Optimal Warning + + private var optimalWarningBanner: some View { + Section { + HStack(spacing: 8) { + Image(systemName: "checkmark.shield.fill") + .foregroundColor(.green) + .font(.title3) + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Your settings are already performing well", comment: "LoopInsights optimal warning title")) + .font(.subheadline.weight(.medium)) + Text(NSLocalizedString("TIR >85% with low hypoglycemia risk. The suggestions below are minor refinements — apply with caution.", comment: "LoopInsights optimal warning detail")) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + // MARK: - Navigation private var navigationSection: some View { @@ -450,6 +675,21 @@ struct LoopInsights_DashboardView: View { .foregroundColor(.secondary) } } + + // Debug log (developer mode only) + if LoopInsights_FeatureFlags.developerModeEnabled, viewModel.lastDebugLog != nil { + Button(action: { showingDebugLog = true }) { + HStack { + Image(systemName: "doc.text.magnifyingglass") + Text(NSLocalizedString("View Last Analysis Log", comment: "LoopInsights debug log button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + .foregroundColor(.orange) + } + } } } @@ -476,3 +716,240 @@ struct LoopInsights_DashboardView: View { }() } +// MARK: - Pre-Fill Editor View + +/// Editor that shows proposed therapy changes with editable values. +/// The user can adjust proposed values before applying. +struct LoopInsights_PreFillEditorView: View { + let record: LoopInsightsSuggestionRecord + let onApply: ([LoopInsightsTimeBlock]) -> Void + let onCancel: () -> Void + + @State private var editedValues: [UUID: Double] = [:] + @Environment(\.dismiss) private var dismiss + + var body: some View { + List { + Section(header: Text(record.suggestion.settingType.displayName)) { + Text(NSLocalizedString("Review and adjust the proposed values below before applying.", comment: "LoopInsights pre-fill editor instructions")) + .font(.caption) + .foregroundColor(.secondary) + } + + Section(header: Text(NSLocalizedString("PROPOSED CHANGES", comment: "LoopInsights pre-fill editor changes header"))) { + ForEach(record.suggestion.timeBlocks) { block in + VStack(alignment: .leading, spacing: 6) { + Text(block.timeRangeFormatted) + .font(.subheadline) + .foregroundColor(.secondary) + + HStack { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Current", comment: "LoopInsights pre-fill current label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.1f", block.currentValue)) + .font(.body.weight(.medium)) + } + + Image(systemName: "arrow.right") + .foregroundColor(.secondary) + .padding(.horizontal, 8) + + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Proposed", comment: "LoopInsights pre-fill proposed label")) + .font(.caption2) + .foregroundColor(.green) + TextField( + "", + value: Binding( + get: { editedValues[block.id] ?? block.proposedValue }, + set: { editedValues[block.id] = $0 } + ), + format: .number + ) + .font(.body.weight(.semibold)) + .foregroundColor(.green) + .textFieldStyle(.roundedBorder) + .keyboardType(.decimalPad) + .frame(width: 80) + } + + Spacer() + + let editedVal = editedValues[block.id] ?? block.proposedValue + let pct = block.currentValue != 0 + ? ((editedVal - block.currentValue) / block.currentValue) * 100 + : 0 + Text(String(format: "(%+.0f%%)", pct)) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + + Section(header: Text(NSLocalizedString("AI REASONING", comment: "LoopInsights pre-fill reasoning header"))) { + Text(record.suggestion.reasoning) + .font(.caption) + .foregroundColor(.secondary) + } + + Section { + Button(action: { + let editedBlocks = record.suggestion.timeBlocks.map { block in + LoopInsightsTimeBlock( + startTime: block.startTime, + endTime: block.endTime, + currentValue: block.currentValue, + proposedValue: editedValues[block.id] ?? block.proposedValue + ) + } + onApply(editedBlocks) + dismiss() + }) { + HStack { + Spacer() + Text(NSLocalizedString("Apply Changes", comment: "LoopInsights pre-fill apply button")) + .fontWeight(.semibold) + Spacer() + } + .foregroundColor(.white) + .padding(.vertical, 10) + .background(Color.green) + .cornerRadius(10) + } + .buttonStyle(.plain) + .listRowBackground(Color.clear) + + Button(action: { + onCancel() + dismiss() + }) { + HStack { + Spacer() + Text(NSLocalizedString("Cancel", comment: "LoopInsights pre-fill cancel button")) + .fontWeight(.semibold) + Spacer() + } + .foregroundColor(.white) + .padding(.vertical, 10) + .background(Color.red) + .cornerRadius(10) + } + .buttonStyle(.plain) + .listRowBackground(Color.clear) + } + } + .navigationTitle(NSLocalizedString("Review Changes", comment: "LoopInsights pre-fill editor title")) + .navigationBarTitleDisplayMode(.inline) + } +} + +// MARK: - Debug Log View + +/// Developer-only view that shows the full AI prompt/response exchange. +/// Useful for diagnosing unexpected AI behavior. +struct LoopInsights_DebugLogView: View { + let log: LoopInsightsDebugLog + @State private var copied = false + @Environment(\.dismiss) private var dismiss + + private var fullLogText: String { + """ + === LoopInsights Analysis Debug Log === + Setting Type: \(log.settingType.displayName) + Timestamp: \(Self.dateFormatter.string(from: log.timestamp)) + + === SYSTEM PROMPT === + \(log.systemPrompt) + + === USER PROMPT === + \(log.userPrompt) + + === RAW AI RESPONSE === + \(log.rawResponse) + """ + } + + var body: some View { + List { + Section { + Button(action: { + UIPasteboard.general.string = fullLogText + copied = true + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { copied = false } + }) { + HStack { + Spacer() + Image(systemName: copied ? "checkmark" : "doc.on.doc") + Text(copied ? "Copied" : "Copy Full Log") + .fontWeight(.semibold) + Spacer() + } + .foregroundColor(.white) + .padding(.vertical, 10) + .background(copied ? Color.green : Color.orange) + .cornerRadius(10) + } + .buttonStyle(.plain) + .listRowBackground(Color.clear) + } + + Section(header: Text("Analysis Info")) { + HStack { + Text("Setting Type") + .foregroundColor(.secondary) + Spacer() + Text(log.settingType.displayName) + } + HStack { + Text("Timestamp") + .foregroundColor(.secondary) + Spacer() + Text(Self.dateFormatter.string(from: log.timestamp)) + .font(.caption) + } + } + + Section(header: Text("System Prompt")) { + Text(log.systemPrompt) + .font(.caption2) + .foregroundColor(.secondary) + .textSelection(.enabled) + } + + Section(header: Text("User Prompt")) { + Text(log.userPrompt) + .font(.caption2) + .foregroundColor(.secondary) + .textSelection(.enabled) + } + + Section(header: Text("Raw AI Response")) { + Text(log.rawResponse) + .font(.caption2) + .foregroundColor(.secondary) + .textSelection(.enabled) + } + } + .navigationTitle("Analysis Debug Log") + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + dismiss() + } + } + } + } + + private static let dateFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.dateStyle = .medium + formatter.timeStyle = .medium + return formatter + }() +} + diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 36ee889535..e1b130270b 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -8,6 +8,7 @@ import SwiftUI import Combine +import LoopKit /// LoopInsights settings and configuration view. /// Accessible from Loop's main SettingsView via NavigationLink. @@ -15,6 +16,10 @@ struct LoopInsights_SettingsView: View { @Environment(\.openURL) var openURL + /// Real data store references passed from Loop's SettingsView (type-erased). + /// When nil, falls back to test data (simulator / preview). + var dataStoresProvider: (() -> Any?)? + @State private var isEnabled = LoopInsights_FeatureFlags.isEnabled @State private var selectedPeriod = LoopInsights_FeatureFlags.analysisPeriod @State private var selectedApplyMode = LoopInsights_FeatureFlags.applyMode @@ -61,7 +66,8 @@ struct LoopInsights_SettingsView: View { } } - init() { + init(dataStoresProvider: (() -> Any?)? = nil) { + self.dataStoresProvider = dataStoresProvider let config = LoopInsights_FeatureFlags.aiConfiguration _baseURL = State(initialValue: config.baseURL) _model = State(initialValue: config.model) @@ -96,6 +102,12 @@ struct LoopInsights_SettingsView: View { .navigationTitle(NSLocalizedString("LoopInsights Settings", comment: "LoopInsights settings title")) .navigationBarTitleDisplayMode(.inline) .onAppear { + // Re-sync @State from persisted values on every appearance + isEnabled = LoopInsights_FeatureFlags.isEnabled + selectedPeriod = LoopInsights_FeatureFlags.analysisPeriod + selectedApplyMode = LoopInsights_FeatureFlags.applyMode + selectedPersonality = LoopInsights_FeatureFlags.aiPersonality + useTestData = LoopInsights_FeatureFlags.useTestData apiKeyText = LoopInsights_SecureStorage.loadAPIKey() ?? "" // Clear stale endpoint path if it matches a different format's default @@ -128,7 +140,7 @@ struct LoopInsights_SettingsView: View { } .sheet(isPresented: $showTestDashboard) { NavigationView { - LoopInsights_TestDashboardWrapper() + LoopInsights_TestDashboardWrapper(dataStoresProvider: dataStoresProvider) .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button(NSLocalizedString("Done", comment: "Done button")) { @@ -192,22 +204,23 @@ struct LoopInsights_SettingsView: View { } Button(action: { showTestDashboard = true }) { - HStack { + HStack(spacing: 10) { Image(systemName: "chart.line.uptrend.xyaxis") - .foregroundColor(.accentColor) - VStack(alignment: .leading, spacing: 2) { - Text(NSLocalizedString("Open Dashboard", comment: "LoopInsights open dashboard button")) - .fontWeight(.medium) - Text(NSLocalizedString("View therapy settings, run AI analysis, and manage suggestions", comment: "LoopInsights dashboard description")) - .font(.caption) - .foregroundColor(.secondary) - } + .font(.title3) + Text(NSLocalizedString("Open Dashboard", comment: "LoopInsights open dashboard button")) + .fontWeight(.semibold) Spacer() - Image(systemName: "chevron.right") - .font(.caption) - .foregroundColor(.secondary) + Image(systemName: "arrow.right") + .font(.subheadline.weight(.semibold)) } + .foregroundColor(.white) + .padding(.vertical, 12) + .padding(.horizontal, 16) + .background(Color.green) + .cornerRadius(10) } + .buttonStyle(.plain) + .listRowInsets(EdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16)) } } } @@ -582,20 +595,36 @@ struct LoopInsights_SettingsView: View { ? LoopInsightsApplyMode.allCases : LoopInsightsApplyMode.publicModes - Picker(NSLocalizedString("When applying suggestions", comment: "LoopInsights apply mode picker"), selection: $selectedApplyMode) { - ForEach(availableModes) { mode in - Text(mode.displayName) - .foregroundColor(mode == .autoApply ? .orange : .primary) - .tag(mode) + HStack { + Text(NSLocalizedString("When applying suggestions", comment: "LoopInsights apply mode picker")) + Spacer() + Menu { + ForEach(availableModes) { mode in + Button(action: { + selectedApplyMode = mode + LoopInsights_FeatureFlags.applyMode = mode + }) { + if mode == selectedApplyMode { + Label(mode == .autoApply ? "\(mode.displayName) \u{26A0}\u{FE0F}" : mode.displayName, systemImage: "checkmark") + } else { + Text(mode == .autoApply ? "\(mode.displayName) \u{26A0}\u{FE0F}" : mode.displayName) + } + } + } + } label: { + HStack(spacing: 4) { + Text(selectedApplyMode.displayName) + .foregroundColor(selectedApplyMode == .autoApply ? .orange : .accentColor) + Image(systemName: "chevron.up.chevron.down") + .font(.caption2) + .foregroundColor(selectedApplyMode == .autoApply ? .orange : .accentColor) + } } } - .onChange(of: selectedApplyMode) { newValue in - LoopInsights_FeatureFlags.applyMode = newValue - } Text(selectedApplyMode.description) .font(.caption) - .foregroundColor(.secondary) + .foregroundColor(selectedApplyMode == .autoApply ? .orange : .secondary) } } } @@ -620,6 +649,7 @@ struct LoopInsights_SettingsView: View { Text(personality.displayName).tag(personality) } } + .pickerStyle(.menu) .onChange(of: selectedPersonality) { newValue in LoopInsights_FeatureFlags.aiPersonality = newValue } @@ -651,18 +681,11 @@ struct LoopInsights_SettingsView: View { Spacer() Text("\(LoopInsights_SuggestionStore.shared.allRecords.count)") .foregroundColor(.secondary) - } - - Button(role: .destructive, action: { showingClearHistory = true }) { - HStack { + Button(role: .destructive, action: { showingClearHistory = true }) { Image(systemName: "trash") - Text(NSLocalizedString("Clear Suggestion History", comment: "LoopInsights clear history button")) + .font(.caption) } } - - Text(NSLocalizedString("All past AI suggestions, including applied, dismissed, and expired records.", comment: "LoopInsights history description")) - .font(.caption) - .foregroundColor(.secondary) } } } @@ -891,11 +914,32 @@ private class LoopInsights_DashboardContainer: ObservableObject { @Published var renderTrigger: Int = 0 private var vmCancellable: AnyCancellable? - func initializeIfNeeded() { + func initializeIfNeeded(dataStoresProvider: (() -> Any?)? = nil) { guard viewModel == nil else { return } - let provider = LoopInsights_TestDataProvider() - let coordinator = LoopInsights_Coordinator(testDataProvider: provider) + let coordinator: LoopInsights_Coordinator + + // Developer mode: test data takes priority + if let testCoordinator = LoopInsights_Coordinator.withTestDataIfAvailable() { + coordinator = testCoordinator + } + // Real data stores from Loop (cast from type-erased tuple) + else if let any = dataStoresProvider?(), + let stores = any as? (GlucoseStoreProtocol, DoseStoreProtocol, CarbStoreProtocol, LatestStoredSettingsProvider, LoopInsightsSettingsWriter) { + coordinator = LoopInsights_Coordinator( + glucoseStore: stores.0, + doseStore: stores.1, + carbStore: stores.2, + settingsProvider: stores.3, + settingsWriter: stores.4 + ) + } + // Fallback: test data provider (simulator with no real stores) + else { + let provider = LoopInsights_TestDataProvider() + coordinator = LoopInsights_Coordinator(testDataProvider: provider) + } + let vm = LoopInsights_DashboardViewModel(coordinator: coordinator) // Forward ViewModel's objectWillChange → increment renderTrigger @@ -918,6 +962,7 @@ private class LoopInsights_DashboardContainer: ObservableObject { /// the DashboardView once the ViewModel is ready. private struct LoopInsights_TestDashboardWrapper: View { @StateObject private var container = LoopInsights_DashboardContainer() + var dataStoresProvider: (() -> Any?)? var body: some View { Group { @@ -929,14 +974,14 @@ private struct LoopInsights_TestDashboardWrapper: View { } else { VStack(spacing: 12) { ProgressView() - Text(NSLocalizedString("Loading test data...", comment: "LoopInsights loading test data")) + Text(NSLocalizedString("Loading data...", comment: "LoopInsights loading data")) .font(.caption) .foregroundColor(.secondary) } } } .onAppear { - container.initializeIfNeeded() + container.initializeIfNeeded(dataStoresProvider: dataStoresProvider) } } } diff --git a/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift b/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift index afd0bb2621..52190bbfd1 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift @@ -15,6 +15,7 @@ struct LoopInsights_SuggestionDetailView: View { let record: LoopInsightsSuggestionRecord let onApply: () -> Void let onDismiss: () -> Void + var onRevert: (() -> Void)? = nil @Environment(\.dismiss) private var dismiss @@ -144,14 +145,16 @@ struct LoopInsights_SuggestionDetailView: View { }) { HStack { Spacer() - Image(systemName: "checkmark.circle.fill") Text(NSLocalizedString("Apply Suggestion", comment: "LoopInsights apply suggestion button")) .fontWeight(.semibold) Spacer() } - .padding(.vertical, 4) + .foregroundColor(.white) + .padding(.vertical, 10) + .background(Color.green) + .cornerRadius(10) } - .buttonStyle(.borderedProminent) + .buttonStyle(.plain) .listRowBackground(Color.clear) Button(action: { @@ -160,13 +163,16 @@ struct LoopInsights_SuggestionDetailView: View { }) { HStack { Spacer() - Image(systemName: "xmark.circle") Text(NSLocalizedString("Dismiss Suggestion", comment: "LoopInsights dismiss suggestion button")) + .fontWeight(.semibold) Spacer() } - .padding(.vertical, 4) + .foregroundColor(.white) + .padding(.vertical, 10) + .background(Color.red) + .cornerRadius(10) } - .buttonStyle(.bordered) + .buttonStyle(.plain) .listRowBackground(Color.clear) } } @@ -197,6 +203,27 @@ struct LoopInsights_SuggestionDetailView: View { .fontWeight(.medium) } } + + // Revert button for applied/auto-applied records + if record.status.isRevertable, record.settingsSnapshotBefore != nil, let onRevert = onRevert { + Button(action: { + onRevert() + dismiss() + }) { + HStack { + Spacer() + Text(NSLocalizedString("Revert Changes", comment: "LoopInsights revert button")) + .fontWeight(.semibold) + Spacer() + } + .foregroundColor(.white) + .padding(.vertical, 10) + .background(Color.orange) + .cornerRadius(10) + } + .buttonStyle(.plain) + .listRowBackground(Color.clear) + } } } @@ -227,6 +254,7 @@ struct LoopInsights_SuggestionDetailView: View { case .applied: return .green case .dismissed: return .gray case .autoApplied: return .orange + case .reverted: return .purple } } diff --git a/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift b/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift index 37369e4cef..c13eb6ed22 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SuggestionHistoryView.swift @@ -13,7 +13,10 @@ import SwiftUI struct LoopInsights_SuggestionHistoryView: View { @ObservedObject var store: LoopInsights_SuggestionStore + let onRevert: ((LoopInsightsSuggestionRecord) -> Bool)? @State private var selectedRecord: LoopInsightsSuggestionRecord? + @State private var showingRevertConfirmation = false + @State private var recordToRevert: LoopInsightsSuggestionRecord? @State private var filterStatus: FilterOption = .all @Environment(\.dismiss) private var dismiss @@ -22,6 +25,7 @@ struct LoopInsights_SuggestionHistoryView: View { case applied = "Applied" case dismissed = "Dismissed" case autoApplied = "Auto-Applied" + case reverted = "Reverted" var id: String { rawValue } } @@ -49,10 +53,33 @@ struct LoopInsights_SuggestionHistoryView: View { LoopInsights_SuggestionDetailView( record: record, onApply: {}, - onDismiss: {} + onDismiss: {}, + onRevert: record.status.isRevertable && record.settingsSnapshotBefore != nil ? { + recordToRevert = record + showingRevertConfirmation = true + } : nil ) } } + .alert( + NSLocalizedString("Revert Changes?", comment: "LoopInsights revert confirmation title"), + isPresented: $showingRevertConfirmation + ) { + Button(NSLocalizedString("Revert", comment: "LoopInsights revert button"), role: .destructive) { + if let record = recordToRevert { + let _ = onRevert?(record) + } + recordToRevert = nil + } + Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) { + recordToRevert = nil + } + } message: { + Text(NSLocalizedString( + "This will restore your therapy settings to the values they had before this suggestion was applied.", + comment: "LoopInsights revert confirmation message" + )) + } } // MARK: - Filter @@ -115,6 +142,19 @@ struct LoopInsights_SuggestionHistoryView: View { Spacer() + // Revert button for applied/auto-applied records + if record.status.isRevertable, record.settingsSnapshotBefore != nil, onRevert != nil { + Button(action: { + recordToRevert = record + showingRevertConfirmation = true + }) { + Image(systemName: "arrow.uturn.backward") + .font(.caption) + .foregroundColor(.orange) + } + .buttonStyle(.plain) + } + Image(systemName: "chevron.right") .font(.caption2) .foregroundColor(.secondary) @@ -155,6 +195,8 @@ struct LoopInsights_SuggestionHistoryView: View { return allRecords.filter { $0.status == .dismissed } case .autoApplied: return allRecords.filter { $0.status == .autoApplied } + case .reverted: + return allRecords.filter { $0.status == .reverted } } } @@ -164,6 +206,7 @@ struct LoopInsights_SuggestionHistoryView: View { case .applied: return .green case .dismissed: return .gray case .autoApplied: return .orange + case .reverted: return .purple } } diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index 9e5dd04b38..b9bfe6103a 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -298,6 +298,8 @@ extension SettingsView { descriptiveText: NSLocalizedString("Diabetes Treatment", comment: "Descriptive text for Therapy Settings")) } + loopInsightsSection + ForEach(pluginMenuItems.filter {$0.section == .configuration}) { item in item.view } @@ -305,8 +307,6 @@ extension SettingsView { if FeatureFlags.allowAlgorithmExperiments { algorithmExperimentsSection } - - loopInsightsSection } } @@ -381,7 +381,7 @@ extension SettingsView { private var loopInsightsSection: some View { Section { - NavigationLink(destination: LoopInsights_SettingsView()) { + NavigationLink(destination: LoopInsights_SettingsView(dataStoresProvider: viewModel.loopInsightsDataStores)) { LargeButton(action: {}, includeArrow: false, imageView: Image(systemName: "brain.head.profile") From 03de7d383e1edb811c17f5517add5c1e4c5ce98c Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 12 Feb 2026 18:52:01 -0800 Subject: [PATCH 03/36] Phase 3: Chat, background monitor, Trends & Insights, and dark-themed advisor UI Add Ask LoopInsights chat with AI advisor powered by therapy context and glucose data. Background monitoring with configurable frequency and notification banners. New Trends & Insights view with Daily/Weekly/Monthly/Stats/Advisor tabs. Dark gradient styling for chat and trends views. Banner now includes Ask button to open chat directly. --- Loop.xcodeproj/project.pbxproj | 22 +- Loop/Localizable.xcstrings | 272 ++++++- .../LoopInsights_BackgroundMonitor.swift | 265 +++++++ .../LoopInsights_Coordinator.swift | 19 + .../LoopInsights/LoopInsights_Models.swift | 115 +++ .../LoopInsights_FeatureFlags.swift | 81 ++ .../LoopInsights_ChatViewModel.swift | 227 ++++++ .../LoopInsights_DashboardViewModel.swift | 9 +- .../LoopInsights/LoopInsights_ChatView.swift | 313 ++++++++ .../LoopInsights_DashboardView.swift | 146 ++++ .../LoopInsights_MonitorSettingsView.swift | 240 ++++++ .../LoopInsights_SettingsView.swift | 39 + .../LoopInsights_TrendsInsightsView.swift | 722 ++++++++++++++++++ 13 files changed, 2463 insertions(+), 7 deletions(-) create mode 100644 Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift create mode 100644 Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_ChatView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_MonitorSettingsView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 68a66b40c8..c0eb350d71 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -7,6 +7,7 @@ objects = { /* Begin PBXBuildFile section */ + 8D0F376E7E338ECB93EE03E0 /* LoopInsights_TrendsInsightsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE7AAD3549253FE16941E10D /* LoopInsights_TrendsInsightsView.swift */; }; 1419606428D9550400BA86E0 /* LoopKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 437AFEE6203688CF008C4892 /* LoopKitUI.framework */; }; 1419606928D9554E00BA86E0 /* LoopKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 437AFEE6203688CF008C4892 /* LoopKitUI.framework */; }; 1419606A28D955BC00BA86E0 /* MockKitUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C101947127DD473C004E7EB8 /* MockKitUI.framework */; }; @@ -606,6 +607,10 @@ 51E08775179BF0C6D3C4468A /* LoopInsights_ModelsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9807F50B2A84D11791A7C992 /* LoopInsights_ModelsTests.swift */; }; 84F08AFCA333AFD961F8B037 /* LoopInsights_SuggestionStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E9EE7EF28AC643A5A61BA90 /* LoopInsights_SuggestionStoreTests.swift */; }; 11D448D84F8B6FDE43A9DC77 /* LoopInsights_DataAggregatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DF3371B113CDE1971B80A91 /* LoopInsights_DataAggregatorTests.swift */; }; + D8950E91581E86BE23B016FC /* LoopInsights_BackgroundMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585625767F8B708C753B6B70 /* LoopInsights_BackgroundMonitor.swift */; }; + 43CA1D2C89F0E99C9BF8E595 /* LoopInsights_ChatViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1441AF7F093555B0A342E921 /* LoopInsights_ChatViewModel.swift */; }; + A5BA458D4C96896EB8F770A8 /* LoopInsights_ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2029C9AA34E59B67467B1756 /* LoopInsights_ChatView.swift */; }; + 02DEF744456C1BA094E55A8A /* LoopInsights_MonitorSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -776,6 +781,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + EE7AAD3549253FE16941E10D /* LoopInsights_TrendsInsightsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_TrendsInsightsView.swift; sourceTree = ""; }; 142CB7582A60BF2E0075748A /* EditMode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EditMode.swift; sourceTree = ""; }; 142CB75A2A60BFC30075748A /* FavoriteFoodsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FavoriteFoodsView.swift; sourceTree = ""; }; 1452F4A82A851C9400F8B9E4 /* AddEditFavoriteFoodViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddEditFavoriteFoodViewModel.swift; sourceTree = ""; }; @@ -1445,6 +1451,10 @@ 9807F50B2A84D11791A7C992 /* LoopInsights_ModelsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ModelsTests.swift; sourceTree = ""; }; 8E9EE7EF28AC643A5A61BA90 /* LoopInsights_SuggestionStoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_SuggestionStoreTests.swift; sourceTree = ""; }; 1DF3371B113CDE1971B80A91 /* LoopInsights_DataAggregatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_DataAggregatorTests.swift; sourceTree = ""; }; + 585625767F8B708C753B6B70 /* LoopInsights_BackgroundMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_BackgroundMonitor.swift; sourceTree = ""; }; + 1441AF7F093555B0A342E921 /* LoopInsights_ChatViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ChatViewModel.swift; sourceTree = ""; }; + 2029C9AA34E59B67467B1756 /* LoopInsights_ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ChatView.swift; sourceTree = ""; }; + CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_MonitorSettingsView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2716,6 +2726,7 @@ isa = PBXGroup; children = ( 76F7734CE5F39086ACDF05E4 /* LoopInsights_DashboardViewModel.swift */, + 1441AF7F093555B0A342E921 /* LoopInsights_ChatViewModel.swift */, ); path = LoopInsights; sourceTree = ""; @@ -2727,6 +2738,9 @@ 298B9D3C1F836418FB49F5A4 /* LoopInsights_SettingsView.swift */, 6FF964C8C711F6D2BC5ABADF /* LoopInsights_SuggestionDetailView.swift */, F30BE128F5152CCEFCE77A91 /* LoopInsights_SuggestionHistoryView.swift */, + 2029C9AA34E59B67467B1756 /* LoopInsights_ChatView.swift */, + CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */, + EE7AAD3549253FE16941E10D /* LoopInsights_TrendsInsightsView.swift */, ); path = LoopInsights; sourceTree = ""; @@ -2772,6 +2786,7 @@ isa = PBXGroup; children = ( DD1A8C2568AD3C055D53CABA /* LoopInsights_Coordinator.swift */, + 585625767F8B708C753B6B70 /* LoopInsights_BackgroundMonitor.swift */, ); path = LoopInsights; sourceTree = ""; @@ -3717,7 +3732,12 @@ 9C14D255A2CA94966BAD7667 /* LoopInsights_SuggestionStore.swift in Sources */, 17EAECD5386B86C1F7968394 /* LoopInsights_FeatureFlags.swift in Sources */, 6C78970231AAF9CC3E477BCB /* LoopInsights_Coordinator.swift in Sources */, - ); + D8950E91581E86BE23B016FC /* LoopInsights_BackgroundMonitor.swift in Sources */, + 43CA1D2C89F0E99C9BF8E595 /* LoopInsights_ChatViewModel.swift in Sources */, + A5BA458D4C96896EB8F770A8 /* LoopInsights_ChatView.swift in Sources */, + 02DEF744456C1BA094E55A8A /* LoopInsights_MonitorSettingsView.swift in Sources */, + 8D0F376E7E338ECB93EE03E0 /* LoopInsights_TrendsInsightsView.swift in Sources */, +); runOnlyForDeploymentPostprocessing = 0; }; 43A9437A1B926B7B0051FA24 /* Sources */ = { diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 24e3c354eb..df1772e330 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -3186,6 +3186,9 @@ } } }, + "%d new therapy setting suggestions available" : { + "comment" : "LoopInsights notification body: multiple suggestions" + }, "%d suggestions" : { "comment" : "LoopInsights suggestion count" }, @@ -3208,6 +3211,10 @@ } } }, + "•" : { + "comment" : "A bullet point symbol.", + "isCommentAutoGenerated" : true + }, "⚠️" : { "localizations" : { "da" : { @@ -4293,6 +4300,10 @@ } } }, + "Above Range (>180)" : { + "comment" : "Description of a glucose reading that is above 180 mg/dL.", + "isCommentAutoGenerated" : true + }, "Absorption Time" : { "comment" : "Label for food absorption entry on add favorite food screen", "localizations" : { @@ -5879,6 +5890,9 @@ "Advanced API Settings" : { "comment" : "LoopInsights advanced settings toggle" }, + "Advisor" : { + "comment" : "LoopInsights trends tab: advisor" + }, "AI Assessment" : { "comment" : "LoopInsights assessment header" }, @@ -6360,6 +6374,9 @@ } } }, + "All" : { + "comment" : "LoopInsights confidence filter: all" + }, "All Alerts Muted" : { "comment" : "Warning text for when alerts are muted", "localizations" : { @@ -6507,6 +6524,9 @@ } } }, + "Am I bolusing enough for meals?" : { + "comment" : "LoopInsights quick ask: meal bolus" + }, "Amount Consumed" : { "comment" : "Label for carb quantity entry row on carb entry screen", "localizations" : { @@ -7105,6 +7125,9 @@ "comment" : "The title of the view that displays detailed information about an AI analysis.", "isCommentAutoGenerated" : true }, + "ANALYSIS FREQUENCY" : { + "comment" : "LoopInsights monitor frequency header" + }, "Analysis Info" : { "comment" : "The header text for the section that displays information about the AI analysis.", "isCommentAutoGenerated" : true @@ -7121,6 +7144,9 @@ "Analyze All" : { "comment" : "LoopInsights analyze all button" }, + "Analyze my last 3 days" : { + "comment" : "LoopInsights quick ask: recent analysis" + }, "Analyzing..." : { "comment" : "LoopInsights analyzing\nLoopInsights analyzing all" }, @@ -8252,6 +8278,18 @@ } } }, + "Ask a question..." : { + "comment" : "LoopInsights chat input placeholder" + }, + "Ask LoopInsights" : { + "comment" : "LoopInsights chat button\nLoopInsights chat title" + }, + "Ask me anything about your diabetes management" : { + "comment" : "LoopInsights chat empty state title" + }, + "Ask questions about your glucose trends, therapy settings, and get personalized advice." : { + "comment" : "LoopInsights trends advisor subtitle" + }, "at %@" : { "comment" : "Format fragment for a specific time", "localizations" : { @@ -8634,6 +8672,22 @@ "Average rise of %.0f mg/dL between 3 AM–7 AM" : { "comment" : "LoopInsights pattern detail: dawn phenomenon\nLoopInsights pattern detail: dawn phenomenon moderate" }, + "Avg" : { + "comment" : "LoopInsights trends avg chip" + }, + "Background Monitoring" : { + "comment" : "LoopInsights background monitoring row\nLoopInsights monitor settings title" + }, + "BACKGROUND MONITORING" : { + "comment" : "LoopInsights background monitoring header" + }, + "Background monitoring piggybacks on Loop's existing ~5 minute cycle. When enough time has passed (based on your frequency setting), it runs a full AI analysis of all three therapy settings. If it finds suggestions that meet your confidence threshold, you'll be notified." : { + "comment" : "LoopInsights monitor info description" + }, + "Basal" : { + "comment" : "Label for the percentage of total insulin dose attributed to basal insulin.", + "isCommentAutoGenerated" : true + }, "Basal Rate" : { "comment" : "LoopInsights setting type: Basal Rate" }, @@ -8986,6 +9040,10 @@ } } }, + "Below Range (<70)" : { + "comment" : "Description of a glucose reading that is below the recommended target range.", + "isCommentAutoGenerated" : true + }, "Bluetooth\nOff" : { "comment" : "Message to the user to that the bluetooth is off", "localizations" : { @@ -11184,6 +11242,9 @@ } } }, + "Carbs" : { + "comment" : "LoopInsights trends stats carbs" + }, "Carbs Absorbed (g) ÷ Carb Ratio (g/U) × Insulin Sensitivity (%1$@/U)" : { "comment" : "Description of the prediction input effect for carbohydrates. (1: The glucose unit string)", "localizations" : { @@ -11625,6 +11686,12 @@ } } }, + "Chat with your AI Advisor" : { + "comment" : "LoopInsights trends advisor title" + }, + "Check every" : { + "comment" : "LoopInsights monitor frequency picker" + }, "Check settings" : { "comment" : "Details for configuration error when one or more loop settings are missing", "extractionState" : "manual", @@ -13678,6 +13745,10 @@ "comment" : "A button label that says \"Copy Full Log\".", "isCommentAutoGenerated" : true }, + "Correction Boluses" : { + "comment" : "Label for the number of correction boluses logged in the stats section of the Trends & Insights view.", + "isCommentAutoGenerated" : true + }, "Correction Range" : { "comment" : "The title of the glucose target range schedule screen\n The title text for the glucose target range schedule", "extractionState" : "manual", @@ -14632,6 +14703,16 @@ } } }, + "CV" : { + "comment" : "LoopInsights trends CV chip" + }, + "Daily" : { + "comment" : "LoopInsights trends tab: daily" + }, + "Daily Average" : { + "comment" : "Label for the daily average carb intake in the stats section of the Trends & Insights view.", + "isCommentAutoGenerated" : true + }, "Date" : { "comment" : "Date picker label", "localizations" : { @@ -15959,6 +16040,9 @@ } } }, + "Delivery" : { + "comment" : "LoopInsights monitor notification picker" + }, "Delivery Limits" : { "comment" : "Title text for delivery limits", "extractionState" : "manual", @@ -16097,6 +16181,9 @@ } } }, + "Detailed Statistics" : { + "comment" : "LoopInsights trends stats header" + }, "Detected Patterns" : { "comment" : "LoopInsights detected patterns header" }, @@ -16395,7 +16482,7 @@ } }, "Dismiss" : { - "comment" : "Default alert dismissal\nLoopInsights dismiss\nThe button label of the action used to dismiss an error alert", + "comment" : "Default alert dismissal\nLoopInsights banner dismiss button\nLoopInsights dismiss\nThe button label of the action used to dismiss an error alert", "localizations" : { "ar" : { "stringUnit" : { @@ -16910,6 +16997,9 @@ "comment" : "A placeholder text for the user to enter their OpenAI or Azure organization ID.", "isCommentAutoGenerated" : true }, + "Each analysis uses your configured AI provider and consumes API credits. With daily frequency, expect ~3 API calls per day (one per setting type)." : { + "comment" : "LoopInsights monitor API usage note" + }, "Enable\nBluetooth" : { "comment" : "Message to the user to enable bluetooth", "localizations" : { @@ -17008,6 +17098,9 @@ "Enable AI-powered therapy settings analysis and suggestions. When disabled, the feature is hidden but settings are preserved." : { "comment" : "LoopInsights feature toggle description" }, + "Enable Background Monitoring" : { + "comment" : "LoopInsights monitor toggle" + }, "Enable Glucose Based Partial Application" : { "comment" : "Title for Glucose Based Partial Application toggle", "localizations" : { @@ -17093,6 +17186,9 @@ "Enable LoopInsights" : { "comment" : "LoopInsights enable toggle" }, + "Enable Quiet Hours" : { + "comment" : "LoopInsights monitor quiet hours toggle" + }, "Enabled" : { "comment" : "Title for enable live activity toggle", "localizations" : { @@ -18307,6 +18403,12 @@ } } }, + "Every 6 Hours" : { + "comment" : "LoopInsights monitor frequency: 6 hours" + }, + "Every 12 Hours" : { + "comment" : "LoopInsights monitor frequency: 12 hours" + }, "Exceeds maximum allowed bolus in settings" : { "comment" : "Bolus error description: bolus exceeds maximum bolus in settings.", "localizations" : { @@ -19755,6 +19857,9 @@ } } }, + "From" : { + "comment" : "LoopInsights monitor quiet hours from" + }, "Full endpoint URL:" : { "comment" : "LoopInsights endpoint preview label" }, @@ -19886,6 +19991,20 @@ "g/U" : { "comment" : "LoopInsights unit: grams per unit of insulin" }, + "Generated %@ at %@" : { + "comment" : "LoopInsights trends generated at", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "Generated %1$@ at %2$@" + } + } + } + }, + "Generating insights..." : { + "comment" : "LoopInsights trends loading" + }, "Get an API key from a provider:" : { "comment" : "LoopInsights API key links header" }, @@ -19967,7 +20086,7 @@ } }, "Glucose" : { - "comment" : "The title of the glucose and prediction graph\nTitle for predicted glucose chart on bolus screen", + "comment" : "LoopInsights trends stats glucose\nThe title of the glucose and prediction graph\nTitle for predicted glucose chart on bolus screen", "localizations" : { "ar" : { "stringUnit" : { @@ -20904,9 +21023,15 @@ } } }, + "High Only" : { + "comment" : "LoopInsights confidence filter: high only" + }, "High Variability" : { "comment" : "LoopInsights pattern: high variability" }, + "Highlights" : { + "comment" : "LoopInsights trends highlights header" + }, "How can I silence non-Critical Alerts?" : { "localizations" : { "da" : { @@ -21052,6 +21177,12 @@ } } }, + "How it works" : { + "comment" : "LoopInsights monitor info header" + }, + "How often LoopInsights runs a full AI analysis on your data. More frequent checks use more API calls." : { + "comment" : "LoopInsights monitor frequency description" + }, "How to update (LoopDocs)" : { "comment" : "The title text for how to update", "localizations" : { @@ -21135,6 +21266,9 @@ } } }, + "How's my basal rate?" : { + "comment" : "LoopInsights quick ask: basal rate review" + }, "https://mysite.herokuapp.com" : { "comment" : "The placeholder text for the nightscout site URL credential", "extractionState" : "manual", @@ -21147,6 +21281,9 @@ } } }, + "I have access to your current therapy settings and recent glucose data. Try one of the suggestions below or type your own question." : { + "comment" : "LoopInsights chat empty state subtitle" + }, "If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." : { "comment" : "Focus modes descriptive text (1: app name)", "localizations" : { @@ -21324,6 +21461,9 @@ } } }, + "In-App Banner" : { + "comment" : "LoopInsights notification style: banner" + }, "Increase" : { "comment" : "LoopInsights: increase direction" }, @@ -21485,7 +21625,7 @@ "comment" : "LoopInsights error: insufficient data" }, "Insulin" : { - "comment" : "Title of the prediction input effect for insulin", + "comment" : "LoopInsights trends stats insulin\nTitle of the prediction input effect for insulin", "localizations" : { "ar" : { "stringUnit" : { @@ -25206,7 +25346,7 @@ } }, "LoopInsights" : { - "comment" : "LoopInsights dashboard title\nLoopInsights header\nLoopInsights settings button" + "comment" : "LoopInsights banner title\nLoopInsights dashboard title\nLoopInsights header\nLoopInsights notification title\nLoopInsights settings button" }, "LOOPINSIGHTS" : { "comment" : "The uppercase name of the feature.", @@ -25215,6 +25355,9 @@ "LoopInsights analyzes your glucose, insulin, and carb data to suggest adjustments to your Basal Rates, Carb Ratios, and Insulin Sensitivity factors. Tap one of the settings, choose a lookback period, and tap Analyze to get AI-generated suggestions. All changes require your review and approval." : { "comment" : "LoopInsights subtitle" }, + "LoopInsights can continuously monitor your data and proactively notify you when it detects a setting change opportunity." : { + "comment" : "LoopInsights background monitoring description" + }, "LoopInsights Settings" : { "comment" : "LoopInsights settings title" }, @@ -25900,12 +26043,19 @@ } } }, + "Meals Logged" : { + "comment" : "Label for the number of meals logged in the stats section of the Trends & Insights view.", + "isCommentAutoGenerated" : true + }, "MEDICAL DISCLAIMER" : { "comment" : "LoopInsights medical disclaimer header" }, "Medium" : { "comment" : "LoopInsights confidence: medium\nLoopInsights legend: medium" }, + "Medium & Above" : { + "comment" : "LoopInsights confidence filter: medium+" + }, "mg/dL" : { "comment" : "The short unit display string for milligrams of glucose per decilter", "localizations" : { @@ -26571,6 +26721,9 @@ } } }, + "Monthly" : { + "comment" : "LoopInsights trends tab: monthly" + }, "More Info" : { "comment" : "Text for more info action on notification of upcoming TestFlight expiration\nText for more info action on notification of upcoming profile expiration", "localizations" : { @@ -27151,6 +27304,17 @@ "Network Error: %@" : { "comment" : "LoopInsights error: network" }, + "New %@ suggestion: %@" : { + "comment" : "LoopInsights notification body: single suggestion", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "New %1$@ suggestion: %2$@" + } + } + } + }, "New Favorite Food" : { "comment" : "Title of new favorite food screen", "localizations" : { @@ -27312,6 +27476,9 @@ } } }, + "No alert — suggestions are available when you next open LoopInsights." : { + "comment" : "LoopInsights notification style desc: silent" + }, "No alerts or alarms will sound while muted. Select how long you would you like to mute for." : { "comment" : "Message for mute alert duration selection action sheet", "localizations" : { @@ -28428,6 +28595,12 @@ } } }, + "NOTIFICATION STYLE" : { + "comment" : "LoopInsights monitor notification style header" + }, + "NOTIFICATION THRESHOLD" : { + "comment" : "LoopInsights monitor confidence header" + }, "Notifications" : { "comment" : "Notifications Status text", "localizations" : { @@ -28511,6 +28684,9 @@ } } }, + "Notifications are suppressed during quiet hours. Analysis still runs — results are available when you next open LoopInsights." : { + "comment" : "LoopInsights monitor quiet hours description" + }, "Notifications Delayed" : { "comment" : "Scheduled Delivery Enabled alert title", "localizations" : { @@ -28754,8 +28930,17 @@ } } }, + "Notify for" : { + "comment" : "LoopInsights monitor confidence picker" + }, + "Notify for all suggestions, including low-confidence ones. This may result in more notifications." : { + "comment" : "LoopInsights monitor confidence: all desc" + }, + "Notify for medium and high confidence suggestions. Good balance of signal vs. noise." : { + "comment" : "LoopInsights monitor confidence: medium+ desc" + }, "Off" : { - "comment" : "Notification Setting Status is Off", + "comment" : "LoopInsights monitoring off\nNotification Setting Status is Off", "localizations" : { "cs" : { "stringUnit" : { @@ -29194,9 +29379,21 @@ } } }, + "Once Daily" : { + "comment" : "LoopInsights monitor frequency: daily" + }, + "Once Weekly" : { + "comment" : "LoopInsights monitor frequency: weekly" + }, "One-Tap Apply" : { "comment" : "LoopInsights apply mode: apply with confirmation" }, + "Only notify for high confidence suggestions. Fewer notifications, but only the most impactful changes." : { + "comment" : "LoopInsights monitor confidence: high only desc" + }, + "Open Chat" : { + "comment" : "LoopInsights trends advisor button" + }, "Open Dashboard" : { "comment" : "LoopInsights open dashboard button" }, @@ -29344,6 +29541,10 @@ "Pending" : { "comment" : "LoopInsights suggestion status: pending review" }, + "Per Meal Average" : { + "comment" : "Description of a stat row in the LoopInsights trends stats section, showing the average number of grams of carbohydrates consumed per meal.", + "isCommentAutoGenerated" : true + }, "Place fixture files in Documents/LoopInsights/ or rebuild with bundled test data." : { "comment" : "LoopInsights no fixtures hint" }, @@ -31828,6 +32029,9 @@ } } }, + "Push Notification" : { + "comment" : "LoopInsights notification style: push" + }, "QUANTITY_VALUE_AND_UNIT" : { "comment" : "Format string for combining localized numeric value and unit. (1: numeric value)(2: unit)", "extractionState" : "extracted_with_value", @@ -31954,6 +32158,9 @@ } } }, + "QUIET HOURS" : { + "comment" : "LoopInsights monitor quiet hours header" + }, "Rapid-Acting – Adults" : { "comment" : "Title of insulin model preset", "extractionState" : "manual", @@ -32210,6 +32417,9 @@ "comment" : "A label displayed above the raw text of the AI's response.", "isCommentAutoGenerated" : true }, + "Readings" : { + "comment" : "LoopInsights trends readings chip" + }, "Reasoning" : { "comment" : "LoopInsight's detailed reasoning" }, @@ -33765,6 +33975,9 @@ } } }, + "Sends a push notification even when the app is in the background." : { + "comment" : "LoopInsights notification style desc: push" + }, "Sensor Failed" : { "localizations" : { "da" : { @@ -34145,6 +34358,9 @@ } } }, + "Shows a banner inside the app when a new suggestion is found." : { + "comment" : "LoopInsights notification style desc: banner" + }, "Shows last loop error" : { "comment" : "Loop Completion HUD accessibility hint", "localizations" : { @@ -34264,6 +34480,9 @@ } } }, + "Silent (Badge Only)" : { + "comment" : "LoopInsights notification style: silent" + }, "Simple Bolus Calculator" : { "comment" : "Title of simple bolus view when not displaying meal entry", "localizations" : { @@ -35085,9 +35304,16 @@ } } }, + "Stats" : { + "comment" : "LoopInsights trends tab: stats" + }, "Status" : { "comment" : "LoopInsights status header" }, + "Std Deviation" : { + "comment" : "Label for the standard deviation value in the stats section card.", + "isCommentAutoGenerated" : true + }, "Stored securely in Keychain" : { "comment" : "LoopInsights keychain confirmation" }, @@ -35106,6 +35332,9 @@ "Suggestions for Fine Tuning" : { "comment" : "LoopInsights suggestions header" }, + "Summary" : { + "comment" : "LoopInsights trends summary header" + }, "Support" : { "comment" : "Section title for Support\nThe title of the support section in settings", "localizations" : { @@ -35662,6 +35891,9 @@ "Tap one of your current Therapy Settings" : { "comment" : "LoopInsights current settings header" }, + "Tap refresh to generate insights" : { + "comment" : "LoopInsights trends no data" + }, "Tap to Add" : { "comment" : "The subtitle of the cell displaying an action to add a manually measurement glucose value", "localizations" : { @@ -37250,6 +37482,9 @@ } } }, + "Thinking..." : { + "comment" : "LoopInsights chat: AI thinking" + }, "This option only applies when Loop's Dosing Strategy is set to Automatic Bolus." : { "comment" : "String shown when glucose based partial application cannot be enabled because dosing strategy is not set to Automatic Bolus", "localizations" : { @@ -37463,9 +37698,15 @@ "comment" : "A label displayed next to the timestamp in the debug log view.", "isCommentAutoGenerated" : true }, + "TIR" : { + "comment" : "LoopInsights trends TIR chip" + }, "TIR >85% with low hypoglycemia risk. The suggestions below are minor refinements — apply with caution." : { "comment" : "LoopInsights optimal warning detail" }, + "To" : { + "comment" : "LoopInsights monitor quiet hours to" + }, "Total Daily Dose" : { "comment" : "LoopInsights TDD label" }, @@ -37524,6 +37765,9 @@ } } }, + "Trends & Insights" : { + "comment" : "LoopInsights trends button\nLoopInsights trends title" + }, "Try Again" : { "comment" : "Critical event log export error alert try again button", "localizations" : { @@ -39670,6 +39914,9 @@ }, "User Prompt" : { + }, + "View" : { + "comment" : "LoopInsights banner view button" }, "View Last Analysis Log" : { "comment" : "LoopInsights debug log button" @@ -39880,6 +40127,9 @@ } } }, + "Weekly" : { + "comment" : "LoopInsights trends tab: weekly" + }, "What are examples of Critical and Time Sensitive alerts?" : { "localizations" : { "da" : { @@ -39932,6 +40182,9 @@ } } }, + "What should I change first?" : { + "comment" : "LoopInsights quick ask: priority" + }, "When applying suggestions" : { "comment" : "LoopInsights apply mode picker" }, @@ -40233,6 +40486,9 @@ } } }, + "When enabled, LoopInsights periodically analyzes your data and notifies you when it detects a therapy setting that could be improved." : { + "comment" : "LoopInsights monitor description" + }, "When out of Closed Loop mode, the app uses a simplified bolus calculator like a typical pump." : { "localizations" : { "da" : { @@ -40479,6 +40735,12 @@ } } }, + "Why am I high overnight?" : { + "comment" : "LoopInsights quick ask: overnight highs" + }, + "Why do I go low after exercise?" : { + "comment" : "LoopInsights quick ask: exercise lows" + }, "Witty and clever. No sugar-coating (pun intended) — helpful advice with a side of humor." : { "comment" : "LoopInsights personality desc: dry wit" }, diff --git a/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift b/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift new file mode 100644 index 0000000000..b4e58e57a0 --- /dev/null +++ b/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift @@ -0,0 +1,265 @@ +// +// LoopInsights_BackgroundMonitor.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import UserNotifications +import Combine + +/// Monitors Loop's completion cycle and periodically runs AI analysis +/// to proactively detect therapy setting adjustment opportunities. +/// +/// Hooks into `Notification.Name.LoopCompleted` which fires ~every 5 minutes. +/// Actual analysis is throttled to the user's configured frequency (6h/12h/24h/weekly). +/// When new suggestions are found, delivers notifications based on user preferences. +final class LoopInsights_BackgroundMonitor: ObservableObject { + + // MARK: - Published State + + /// The most recent background suggestion (for in-app banner display) + @Published private(set) var latestBackgroundSuggestion: LoopInsightsSuggestion? + + /// Whether a new suggestion banner should be shown + @Published var showBanner = false + + // MARK: - Properties + + private var loopCompletedObserver: NSObjectProtocol? + private let coordinator: LoopInsights_Coordinator + private var isRunningAnalysis = false + + /// UserDefaults key for last analysis timestamp + private static let lastAnalysisKey = "LoopInsights_lastBackgroundAnalysis" + + /// Notification category identifier for LoopInsights + static let notificationCategoryID = "LoopInsights_Suggestion" + + // MARK: - Initialization + + init(coordinator: LoopInsights_Coordinator) { + self.coordinator = coordinator + } + + deinit { + stop() + } + + // MARK: - Lifecycle + + /// Start observing Loop completion notifications. + func start() { + guard loopCompletedObserver == nil else { return } + guard LoopInsights_FeatureFlags.backgroundMonitorEnabled else { + print("[LoopInsights Monitor] Background monitoring is disabled") + return + } + + loopCompletedObserver = NotificationCenter.default.addObserver( + forName: .LoopCompleted, + object: nil, + queue: nil + ) { [weak self] _ in + self?.handleLoopCompleted() + } + + print("[LoopInsights Monitor] Started — frequency: \(LoopInsights_FeatureFlags.monitorFrequency.displayName)") + } + + /// Stop observing and cancel any pending work. + func stop() { + if let observer = loopCompletedObserver { + NotificationCenter.default.removeObserver(observer) + loopCompletedObserver = nil + } + print("[LoopInsights Monitor] Stopped") + } + + /// Restart the monitor (e.g. after settings change). + func restart() { + stop() + start() + } + + // MARK: - Loop Completion Handler + + private func handleLoopCompleted() { + guard LoopInsights_FeatureFlags.backgroundMonitorEnabled else { return } + guard !isRunningAnalysis else { return } + guard shouldRunAnalysis() else { return } + + isRunningAnalysis = true + + Task { + await runBackgroundAnalysis() + await MainActor.run { + isRunningAnalysis = false + } + } + } + + /// Check if enough time has elapsed since the last analysis + private func shouldRunAnalysis() -> Bool { + let frequency = LoopInsights_FeatureFlags.monitorFrequency + let lastAnalysis = UserDefaults.standard.double(forKey: Self.lastAnalysisKey) + + guard lastAnalysis > 0 else { + return true // Never run before + } + + let lastDate = Date(timeIntervalSince1970: lastAnalysis) + let elapsed = Date().timeIntervalSince(lastDate) + return elapsed >= frequency.timeInterval + } + + /// Check if the current time falls within quiet hours + private func isInQuietHours() -> Bool { + guard LoopInsights_FeatureFlags.quietHoursEnabled else { return false } + + let calendar = Calendar.current + let currentHour = calendar.component(.hour, from: Date()) + let start = LoopInsights_FeatureFlags.quietHoursStart + let end = LoopInsights_FeatureFlags.quietHoursEnd + + if start <= end { + // e.g., quiet hours 22-07 wraps around midnight → this is the non-wrapping case like 09-17 + return currentHour >= start && currentHour < end + } else { + // Wraps around midnight: e.g., 22-07 means quiet from 22:00 to 06:59 + return currentHour >= start || currentHour < end + } + } + + // MARK: - Background Analysis + + private func runBackgroundAnalysis() async { + print("[LoopInsights Monitor] Running background analysis...") + + do { + let period = LoopInsights_FeatureFlags.analysisPeriod + let stats = try await coordinator.dataAggregator.aggregateData(period: period) + let snapshot = try coordinator.captureCurrentSnapshot() + + var newSuggestions: [LoopInsightsSuggestion] = [] + let minConfidence = LoopInsights_FeatureFlags.monitorMinConfidence + + // Analyze all three setting types + for settingType in LoopInsightsSettingType.allCases { + let response = try await coordinator.aiAnalysis.analyze( + settingType: settingType, + currentSettings: snapshot, + stats: stats + ) + + // Filter by minimum confidence + let qualifying = response.suggestions.filter { $0.confidence >= minConfidence } + newSuggestions.append(contentsOf: qualifying) + } + + // Update last analysis timestamp + UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: Self.lastAnalysisKey) + + guard !newSuggestions.isEmpty else { + print("[LoopInsights Monitor] No new suggestions found") + return + } + + // Check for genuinely new suggestions (not duplicates of existing pending ones) + let existingPending = coordinator.suggestionStore.pendingRecords + let genuinelyNew = newSuggestions.filter { suggestion in + !existingPending.contains { existing in + existing.suggestion.settingType == suggestion.settingType && + existing.suggestion.timeBlocks.count == suggestion.timeBlocks.count + } + } + + guard !genuinelyNew.isEmpty else { + print("[LoopInsights Monitor] Suggestions match existing pending — no notification needed") + return + } + + // Store the new suggestions + let _ = coordinator.suggestionStore.addSuggestions(genuinelyNew) + + // Deliver notification + await deliverNotification(for: genuinelyNew) + + } catch { + print("[LoopInsights Monitor] Analysis failed: \(error.localizedDescription)") + } + } + + // MARK: - Notification Delivery + + private func deliverNotification(for suggestions: [LoopInsightsSuggestion]) async { + let style = LoopInsights_FeatureFlags.notificationStyle + + // Check quiet hours — still store suggestions but suppress notifications + if isInQuietHours() { + print("[LoopInsights Monitor] Quiet hours active — suppressing notification") + return + } + + guard let primary = suggestions.first else { return } + + switch style { + case .banner: + await deliverInAppBanner(suggestion: primary) + case .push: + await deliverPushNotification(suggestions: suggestions) + case .silent: + // No notification — suggestions are available in the store + print("[LoopInsights Monitor] Silent mode — \(suggestions.count) suggestion(s) stored") + } + } + + private func deliverInAppBanner(suggestion: LoopInsightsSuggestion) async { + await MainActor.run { + latestBackgroundSuggestion = suggestion + showBanner = true + } + } + + private func deliverPushNotification(suggestions: [LoopInsightsSuggestion]) async { + let notification = UNMutableNotificationContent() + notification.title = NSLocalizedString("LoopInsights", comment: "LoopInsights notification title") + + if suggestions.count == 1, let suggestion = suggestions.first { + notification.body = String( + format: NSLocalizedString("New %@ suggestion: %@", comment: "LoopInsights notification body: single suggestion"), + suggestion.settingType.displayName, + suggestion.summaryDescription + ) + } else { + notification.body = String( + format: NSLocalizedString("%d new therapy setting suggestions available", comment: "LoopInsights notification body: multiple suggestions"), + suggestions.count + ) + } + + notification.sound = .default + notification.categoryIdentifier = Self.notificationCategoryID + + let request = UNNotificationRequest( + identifier: "LoopInsights_Background_\(UUID().uuidString)", + content: notification, + trigger: nil + ) + + do { + try await UNUserNotificationCenter.current().add(request) + print("[LoopInsights Monitor] Push notification sent for \(suggestions.count) suggestion(s)") + } catch { + print("[LoopInsights Monitor] Failed to send notification: \(error.localizedDescription)") + } + } + + /// Dismiss the in-app banner + func dismissBanner() { + showBanner = false + latestBackgroundSuggestion = nil + } +} diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index ecd917ebb5..679c68841e 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -27,6 +27,9 @@ final class LoopInsights_Coordinator: ObservableObject { let aiAnalysis: LoopInsights_AIAnalysis let suggestionStore: LoopInsights_SuggestionStore + /// Background monitor for proactive suggestions (lazy-initialized) + lazy var backgroundMonitor: LoopInsights_BackgroundMonitor = LoopInsights_BackgroundMonitor(coordinator: self) + // MARK: - Data Provider Bridge private var dataProviderBridge: DataProviderBridge? @@ -87,6 +90,22 @@ final class LoopInsights_Coordinator: ObservableObject { return LoopInsights_Coordinator(testDataProvider: provider) } + // MARK: - Background Monitoring + + /// Start background monitoring if enabled and using real stores (not test data). + func startBackgroundMonitoring() { + guard dataProviderBridge != nil else { + print("[LoopInsights] Skipping background monitor — test data mode") + return + } + backgroundMonitor.start() + } + + /// Stop background monitoring. + func stopBackgroundMonitoring() { + backgroundMonitor.stop() + } + // MARK: - Therapy Settings Write Access /// Capture a snapshot of the current therapy settings diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 6d70e564da..947da77f0f 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -673,6 +673,73 @@ enum LoopInsightsError: Error, LocalizedError { } } +// MARK: - Monitor Frequency + +/// How often the background monitor runs AI analysis +enum LoopInsightsMonitorFrequency: String, Codable, CaseIterable, Identifiable { + case sixHours = "six_hours" + case twelveHours = "twelve_hours" + case daily = "daily" + case weekly = "weekly" + + var id: String { rawValue } + + var timeInterval: TimeInterval { + switch self { + case .sixHours: return 6 * 3600 + case .twelveHours: return 12 * 3600 + case .daily: return 24 * 3600 + case .weekly: return 7 * 24 * 3600 + } + } + + var displayName: String { + switch self { + case .sixHours: + return NSLocalizedString("Every 6 Hours", comment: "LoopInsights monitor frequency: 6 hours") + case .twelveHours: + return NSLocalizedString("Every 12 Hours", comment: "LoopInsights monitor frequency: 12 hours") + case .daily: + return NSLocalizedString("Once Daily", comment: "LoopInsights monitor frequency: daily") + case .weekly: + return NSLocalizedString("Once Weekly", comment: "LoopInsights monitor frequency: weekly") + } + } +} + +// MARK: - Notification Style + +/// How the background monitor delivers notifications +enum LoopInsightsNotificationStyle: String, Codable, CaseIterable, Identifiable { + case banner + case push + case silent + + var id: String { rawValue } + + var displayName: String { + switch self { + case .banner: + return NSLocalizedString("In-App Banner", comment: "LoopInsights notification style: banner") + case .push: + return NSLocalizedString("Push Notification", comment: "LoopInsights notification style: push") + case .silent: + return NSLocalizedString("Silent (Badge Only)", comment: "LoopInsights notification style: silent") + } + } + + var description: String { + switch self { + case .banner: + return NSLocalizedString("Shows a banner inside the app when a new suggestion is found.", comment: "LoopInsights notification style desc: banner") + case .push: + return NSLocalizedString("Sends a push notification even when the app is in the background.", comment: "LoopInsights notification style desc: push") + case .silent: + return NSLocalizedString("No alert — suggestions are available when you next open LoopInsights.", comment: "LoopInsights notification style desc: silent") + } + } +} + // MARK: - Debug Log /// Captures the full prompt/response exchange for a single AI analysis call. @@ -685,3 +752,51 @@ struct LoopInsightsDebugLog: Identifiable { let userPrompt: String let rawResponse: String } + +// MARK: - Chat Message + +/// A single message in a LoopInsights chat conversation +struct LoopInsightsChatMessage: Identifiable { + let id: UUID + let role: Role + let content: String + let timestamp: Date + + enum Role: String { + case user + case assistant + case system + } + + init(role: Role, content: String) { + self.id = UUID() + self.role = role + self.content = content + self.timestamp = Date() + } +} + +// MARK: - Chat Session + +/// Manages an in-memory chat session. Conversations are not persisted +/// across app launches — the AI always starts fresh with current data context. +final class LoopInsightsChatSession: ObservableObject { + @Published private(set) var messages: [LoopInsightsChatMessage] = [] + let sessionStarted: Date + + init() { + self.sessionStarted = Date() + } + + func appendMessage(_ message: LoopInsightsChatMessage) { + messages.append(message) + } + + func conversationHistory() -> [(role: String, content: String)] { + return messages.map { ($0.role.rawValue, $0.content) } + } + + func clear() { + messages.removeAll() + } +} diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index 6c16f7961b..47fb8e96d2 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -21,6 +21,13 @@ struct LoopInsights_FeatureFlags { static let developerUnlockCount = "LoopInsights_developerUnlockCount" static let useTestData = "LoopInsights_useTestData" static let aiPersonality = "LoopInsights_aiPersonality" + static let backgroundMonitorEnabled = "LoopInsights_backgroundMonitorEnabled" + static let monitorFrequency = "LoopInsights_monitorFrequency" + static let monitorMinConfidence = "LoopInsights_monitorMinConfidence" + static let quietHoursEnabled = "LoopInsights_quietHoursEnabled" + static let quietHoursStart = "LoopInsights_quietHoursStart" + static let quietHoursEnd = "LoopInsights_quietHoursEnd" + static let notificationStyle = "LoopInsights_notificationStyle" } private static let defaults = UserDefaults.standard @@ -108,6 +115,80 @@ struct LoopInsights_FeatureFlags { } } + // MARK: - Background Monitor + + /// Master toggle for background monitoring. Defaults to false. + static var backgroundMonitorEnabled: Bool { + get { defaults.bool(forKey: Keys.backgroundMonitorEnabled) } + set { defaults.set(newValue, forKey: Keys.backgroundMonitorEnabled) } + } + + /// How frequently background analysis runs. Defaults to daily. + static var monitorFrequency: LoopInsightsMonitorFrequency { + get { + guard let raw = defaults.string(forKey: Keys.monitorFrequency), + let freq = LoopInsightsMonitorFrequency(rawValue: raw) else { + return .daily + } + return freq + } + set { defaults.set(newValue.rawValue, forKey: Keys.monitorFrequency) } + } + + /// Minimum confidence level for background notifications. Defaults to medium. + static var monitorMinConfidence: LoopInsightsConfidence { + get { + guard let raw = defaults.string(forKey: Keys.monitorMinConfidence), + let conf = LoopInsightsConfidence(rawValue: raw) else { + return .medium + } + return conf + } + set { defaults.set(newValue.rawValue, forKey: Keys.monitorMinConfidence) } + } + + /// Whether quiet hours are enabled. Defaults to false. + static var quietHoursEnabled: Bool { + get { defaults.bool(forKey: Keys.quietHoursEnabled) } + set { defaults.set(newValue, forKey: Keys.quietHoursEnabled) } + } + + /// Quiet hours start (hour 0-23). Defaults to 22 (10 PM). + static var quietHoursStart: Int { + get { + let val = defaults.integer(forKey: Keys.quietHoursStart) + return val == 0 && !defaults.bool(forKey: Keys.quietHoursEnabled + "_startSet") ? 22 : val + } + set { + defaults.set(newValue, forKey: Keys.quietHoursStart) + defaults.set(true, forKey: Keys.quietHoursEnabled + "_startSet") + } + } + + /// Quiet hours end (hour 0-23). Defaults to 7 (7 AM). + static var quietHoursEnd: Int { + get { + let val = defaults.integer(forKey: Keys.quietHoursEnd) + return val == 0 && !defaults.bool(forKey: Keys.quietHoursEnabled + "_endSet") ? 7 : val + } + set { + defaults.set(newValue, forKey: Keys.quietHoursEnd) + defaults.set(true, forKey: Keys.quietHoursEnabled + "_endSet") + } + } + + /// Notification delivery style. Defaults to push. + static var notificationStyle: LoopInsightsNotificationStyle { + get { + guard let raw = defaults.string(forKey: Keys.notificationStyle), + let style = LoopInsightsNotificationStyle(rawValue: raw) else { + return .push + } + return style + } + set { defaults.set(newValue.rawValue, forKey: Keys.notificationStyle) } + } + // MARK: - AI Configuration /// User-configurable AI provider configuration. Persisted to UserDefaults (excluding API key). diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift new file mode 100644 index 0000000000..73fd9b40e7 --- /dev/null +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -0,0 +1,227 @@ +// +// LoopInsights_ChatViewModel.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import Combine + +/// View model for the LoopInsights chat interface. +/// Manages the conversation session, builds chat prompts, sends messages +/// through AIServiceAdapter, and provides quick-ask suggestion chips. +final class LoopInsights_ChatViewModel: ObservableObject { + + // MARK: - Published State + + @Published var messages: [LoopInsightsChatMessage] = [] + @Published var isLoading = false + @Published var inputText = "" + @Published var errorMessage: String? + + // MARK: - Dependencies + + private let session: LoopInsightsChatSession + private let coordinator: LoopInsights_Coordinator + private let serviceAdapter: LoopInsights_AIServiceAdapter + private var cancellables = Set() + + /// Pre-built quick-ask suggestions shown when the conversation is empty + let quickAskSuggestions: [String] = [ + NSLocalizedString("Why am I high overnight?", comment: "LoopInsights quick ask: overnight highs"), + NSLocalizedString("How's my basal rate?", comment: "LoopInsights quick ask: basal rate review"), + NSLocalizedString("Analyze my last 3 days", comment: "LoopInsights quick ask: recent analysis"), + NSLocalizedString("What should I change first?", comment: "LoopInsights quick ask: priority"), + NSLocalizedString("Am I bolusing enough for meals?", comment: "LoopInsights quick ask: meal bolus"), + NSLocalizedString("Why do I go low after exercise?", comment: "LoopInsights quick ask: exercise lows"), + ] + + // MARK: - Initialization + + init(coordinator: LoopInsights_Coordinator, serviceAdapter: LoopInsights_AIServiceAdapter = .shared) { + self.coordinator = coordinator + self.serviceAdapter = serviceAdapter + self.session = LoopInsightsChatSession() + + session.$messages + .receive(on: DispatchQueue.main) + .assign(to: &$messages) + } + + // MARK: - Actions + + /// Send the current input text as a message + func sendMessage() { + let text = inputText.trimmingCharacters(in: .whitespacesAndNewlines) + guard !text.isEmpty, !isLoading else { return } + + inputText = "" + errorMessage = nil + + let userMessage = LoopInsightsChatMessage(role: .user, content: text) + session.appendMessage(userMessage) + + isLoading = true + + Task { @MainActor in + do { + let snapshot = try? coordinator.captureCurrentSnapshot() + let stats = try? await coordinator.dataAggregator.aggregateData( + period: LoopInsights_FeatureFlags.analysisPeriod + ) + let context = Self.buildTherapyContext(snapshot: snapshot, stats: stats) + + let history = session.conversationHistory().dropLast().map { ($0.role, $0.content) } + + let systemPrompt = buildChatSystemPrompt(therapyContext: context) + let userPrompt = buildUserPrompt(message: text, conversationHistory: Array(history)) + + let response = try await serviceAdapter.sendPrompt(systemPrompt, userPrompt: userPrompt) + + let aiMessage = LoopInsightsChatMessage(role: .assistant, content: response) + session.appendMessage(aiMessage) + + isLoading = false + + } catch { + errorMessage = error.localizedDescription + isLoading = false + } + } + } + + /// Send a quick-ask suggestion + func sendQuickAsk(_ question: String) { + inputText = question + sendMessage() + } + + /// Clear the conversation and start fresh + func clearConversation() { + session.clear() + errorMessage = nil + } + + // MARK: - Chat Prompt Building + + private func buildChatSystemPrompt(therapyContext: String) -> String { + let personality = LoopInsights_FeatureFlags.aiPersonality + + return """ + You are an expert diabetes and automated insulin delivery (AID) advisor embedded \ + in the Loop app. The user is wearing an insulin pump managed by Loop's closed-loop \ + algorithm. You have access to their real therapy settings and recent glucose/insulin/carb \ + statistics provided below. + + \(personality.promptInstruction) + + GUIDELINES: + - Answer questions about diabetes management, glucose patterns, therapy settings, and Loop. + - Reference the user's actual data when relevant — don't give generic advice when you have specifics. + - If asked about changing settings, explain the expected impact and always recommend conservative changes. + - You may suggest specific therapy setting adjustments. Frame them clearly as suggestions, not commands. + - Always remind users that significant therapy changes should be discussed with their healthcare provider. + - Keep responses concise but thorough. Use bullet points for multi-part answers. + - If you don't have enough data to answer confidently, say so. + - Never fabricate data or statistics — only reference what's provided in the context below. + + CURRENT DATA CONTEXT: + \(therapyContext) + """ + } + + private func buildUserPrompt( + message: String, + conversationHistory: [(role: String, content: String)] + ) -> String { + if conversationHistory.isEmpty { + return message + } + + var prompt = "CONVERSATION HISTORY:\n" + let recentHistory = conversationHistory.suffix(10) + for entry in recentHistory { + let roleLabel = entry.role == "user" ? "User" : "Assistant" + prompt += "\(roleLabel): \(entry.content)\n\n" + } + prompt += "User: \(message)" + return prompt + } + + // MARK: - Therapy Context + + /// Build a therapy context string from a snapshot and stats. + static func buildTherapyContext( + snapshot: LoopInsightsTherapySnapshot?, + stats: LoopInsightsAggregatedStats? + ) -> String { + var context = "" + + if let snapshot = snapshot { + context += "CURRENT THERAPY SETTINGS:\n" + + context += "Basal Rates:\n" + for item in snapshot.basalRateItems { + context += " \(formatTime(item.startTime)): \(String(format: "%.2f", item.value)) U/hr\n" + } + + context += "Carb Ratios:\n" + for item in snapshot.carbRatioItems { + context += " \(formatTime(item.startTime)): \(String(format: "%.1f", item.value)) g/U\n" + } + + context += "Insulin Sensitivity Factors:\n" + for item in snapshot.insulinSensitivityItems { + context += " \(formatTime(item.startTime)): \(String(format: "%.0f", item.value)) mg/dL per U\n" + } + } + + if let stats = stats { + context += "\nRECENT GLUCOSE STATISTICS (\(stats.period.displayName)):\n" + context += " Average Glucose: \(String(format: "%.0f", stats.glucoseStats.averageGlucose)) mg/dL\n" + context += " Time in Range (70-180): \(String(format: "%.1f", stats.glucoseStats.timeInRange))%\n" + context += " Time Below Range (<70): \(String(format: "%.1f", stats.glucoseStats.timeBelowRange))%\n" + context += " Time Above Range (>180): \(String(format: "%.1f", stats.glucoseStats.timeAboveRange))%\n" + context += " GMI (est. A1C): \(String(format: "%.1f", stats.glucoseStats.gmi))%\n" + context += " Coefficient of Variation: \(String(format: "%.1f", stats.glucoseStats.coefficientOfVariation))%\n" + context += " Standard Deviation: \(String(format: "%.1f", stats.glucoseStats.standardDeviation)) mg/dL\n" + + context += "\nINSULIN STATISTICS:\n" + context += " Total Daily Dose: \(String(format: "%.1f", stats.insulinStats.totalDailyDose)) U/day\n" + context += " Basal %: \(String(format: "%.0f", stats.insulinStats.basalPercentage))%\n" + context += " Bolus %: \(String(format: "%.0f", stats.insulinStats.bolusPercentage))%\n" + context += " Correction Boluses: \(stats.insulinStats.correctionBolusCount)\n" + + context += "\nCARB STATISTICS:\n" + context += " Average Daily Carbs: \(String(format: "%.0f", stats.carbStats.averageDailyCarbs)) g/day\n" + context += " Average Carbs Per Meal: \(String(format: "%.0f", stats.carbStats.averageCarbsPerMeal)) g\n" + context += " Total Meals Logged: \(stats.carbStats.mealCount)\n" + + if !stats.glucoseStats.hourlyAverages.isEmpty { + context += "\nHOURLY GLUCOSE AVERAGES:\n" + for hour in 0..<24 { + if let avg = stats.glucoseStats.hourlyAverages[hour] { + context += " \(String(format: "%02d", hour)):00 — \(String(format: "%.0f", avg)) mg/dL\n" + } + } + } + } + + if context.isEmpty { + context = "No therapy data currently available." + } + + return context + } + + private static func formatTime(_ seconds: TimeInterval) -> String { + let formatter = DateFormatter() + formatter.dateFormat = "h:mm a" + var calendar = Calendar.current + calendar.timeZone = TimeZone.current + let date = calendar.startOfDay(for: Date()).addingTimeInterval(seconds) + return formatter.string(from: date) + } +} diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index 1585c29bca..94a6f3ede6 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -68,7 +68,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // MARK: - Dependencies - private let coordinator: LoopInsights_Coordinator + let coordinator: LoopInsights_Coordinator private var cancellables = Set() /// Expose suggestion store for views that need direct access @@ -76,6 +76,13 @@ final class LoopInsights_DashboardViewModel: ObservableObject { coordinator.suggestionStore } + /// Expose background monitor for banner overlay in DashboardView. + /// Returns nil if monitoring is disabled. + var backgroundMonitor: LoopInsights_BackgroundMonitor? { + guard LoopInsights_FeatureFlags.backgroundMonitorEnabled else { return nil } + return coordinator.backgroundMonitor + } + // MARK: - Initialization init(coordinator: LoopInsights_Coordinator) { diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift new file mode 100644 index 0000000000..9531f9765a --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -0,0 +1,313 @@ +// +// LoopInsights_ChatView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Full chat interface for Ask LoopInsights. +/// Dark-themed design with gradient background, purple user bubbles, +/// dark card AI bubbles, and a dark input bar. +struct LoopInsights_ChatView: View { + + @ObservedObject var viewModel: LoopInsights_ChatViewModel + @Environment(\.dismiss) private var dismiss + @FocusState private var isInputFocused: Bool + + var body: some View { + ZStack { + // Dark gradient background + LinearGradient( + colors: [ + Color(red: 0.06, green: 0.07, blue: 0.15), + Color(red: 0.08, green: 0.10, blue: 0.22), + Color(red: 0.05, green: 0.06, blue: 0.14) + ], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + .ignoresSafeArea() + + VStack(spacing: 0) { + ScrollViewReader { proxy in + ScrollView { + LazyVStack(spacing: 14) { + if viewModel.messages.isEmpty { + emptyStateView + } else { + ForEach(viewModel.messages) { message in + chatBubble(message) + .id(message.id) + } + } + + if viewModel.isLoading { + loadingIndicator + .id("loading") + } + + if let error = viewModel.errorMessage { + errorView(error) + } + } + .padding(.vertical) + } + .onChange(of: viewModel.messages.count) { _ in + withAnimation { + if let lastMessage = viewModel.messages.last { + proxy.scrollTo(lastMessage.id, anchor: .bottom) + } else if viewModel.isLoading { + proxy.scrollTo("loading", anchor: .bottom) + } + } + } + } + + inputBar + } + } + .navigationTitle(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(action: { dismiss() }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.white.opacity(0.7)) + } + } + ToolbarItem(placement: .navigationBarTrailing) { + if !viewModel.messages.isEmpty { + Button(action: { viewModel.clearConversation() }) { + Image(systemName: "trash") + .font(.caption) + .foregroundColor(.white.opacity(0.7)) + } + } + } + } + } + + // MARK: - Chat Bubble + + private func chatBubble(_ message: LoopInsightsChatMessage) -> some View { + let isUser = message.role == .user + return HStack(alignment: .bottom, spacing: 8) { + if isUser { Spacer(minLength: 50) } + + if !isUser { + // AI avatar + Image(systemName: "brain.head.profile") + .font(.caption) + .foregroundColor(.purple.opacity(0.8)) + .frame(width: 24, height: 24) + .background(Color.white.opacity(0.1)) + .clipShape(Circle()) + } + + VStack(alignment: isUser ? .trailing : .leading, spacing: 4) { + if isUser { + // Purple gradient user bubble + Text(message.content) + .font(.body) + .foregroundColor(.white) + .padding(.horizontal, 16) + .padding(.vertical, 10) + .background( + LinearGradient( + colors: [ + Color(red: 0.55, green: 0.25, blue: 0.85), + Color(red: 0.75, green: 0.20, blue: 0.65) + ], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + ) + .clipShape(RoundedRectangle(cornerRadius: 20)) + } else { + // Dark card AI bubble + Text(message.content) + .font(.body) + .foregroundColor(.white.opacity(0.92)) + .textSelection(.enabled) + .padding(.horizontal, 16) + .padding(.vertical, 12) + .background( + RoundedRectangle(cornerRadius: 16) + .fill(Color.white.opacity(0.10)) + ) + } + + Text(Self.timeFormatter.string(from: message.timestamp)) + .font(.caption2) + .foregroundColor(.white.opacity(0.4)) + .padding(.horizontal, 4) + } + + if !isUser { Spacer(minLength: 50) } + } + .padding(.horizontal) + } + + // MARK: - Loading Indicator + + private var loadingIndicator: some View { + HStack(spacing: 8) { + Image(systemName: "brain.head.profile") + .font(.caption) + .foregroundColor(.purple.opacity(0.8)) + .frame(width: 24, height: 24) + .background(Color.white.opacity(0.1)) + .clipShape(Circle()) + + HStack(spacing: 6) { + ProgressView() + .scaleEffect(0.7) + .tint(.white.opacity(0.6)) + Text(NSLocalizedString("Thinking...", comment: "LoopInsights chat: AI thinking")) + .font(.caption) + .foregroundColor(.white.opacity(0.5)) + } + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 16) + .fill(Color.white.opacity(0.08)) + ) + + Spacer() + } + .padding(.horizontal) + } + + // MARK: - Error View + + private func errorView(_ error: String) -> some View { + HStack(spacing: 6) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.red.opacity(0.8)) + Text(error) + .font(.caption) + .foregroundColor(.red.opacity(0.8)) + Spacer() + } + .padding(.horizontal, 16) + .padding(.vertical, 8) + .background( + RoundedRectangle(cornerRadius: 10) + .fill(Color.red.opacity(0.1)) + ) + .padding(.horizontal) + } + + // MARK: - Empty State + + private var emptyStateView: some View { + VStack(spacing: 20) { + Spacer() + .frame(height: 60) + + Image(systemName: "bubble.left.and.bubble.right") + .font(.system(size: 48)) + .foregroundColor(.purple.opacity(0.5)) + + Text(NSLocalizedString("Ask me anything about your diabetes management", comment: "LoopInsights chat empty state title")) + .font(.headline) + .foregroundColor(.white.opacity(0.9)) + .multilineTextAlignment(.center) + + Text(NSLocalizedString("I have access to your current therapy settings and recent glucose data. Try one of the suggestions below or type your own question.", comment: "LoopInsights chat empty state subtitle")) + .font(.subheadline) + .foregroundColor(.white.opacity(0.5)) + .multilineTextAlignment(.center) + .padding(.horizontal) + + // Quick-ask chips + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 10) { + ForEach(viewModel.quickAskSuggestions, id: \.self) { suggestion in + Button(action: { viewModel.sendQuickAsk(suggestion) }) { + Text(suggestion) + .font(.subheadline) + .foregroundColor(.white.opacity(0.8)) + .padding(.horizontal, 14) + .padding(.vertical, 8) + .background( + RoundedRectangle(cornerRadius: 20) + .stroke(Color.purple.opacity(0.5), lineWidth: 1) + ) + } + .buttonStyle(.plain) + } + } + .padding(.horizontal) + } + .padding(.top, 8) + + Spacer() + } + } + + // MARK: - Input Bar + + private var inputBar: some View { + HStack(spacing: 10) { + // Placeholder "+" button (non-functional for now) + Button(action: {}) { + Image(systemName: "plus.circle.fill") + .font(.title3) + .foregroundColor(.white.opacity(0.3)) + } + .disabled(true) + + // Text field area + HStack(spacing: 8) { + TextField( + NSLocalizedString("Ask a question...", comment: "LoopInsights chat input placeholder"), + text: $viewModel.inputText + ) + .textFieldStyle(.plain) + .foregroundColor(.white) + .focused($isInputFocused) + .onSubmit { + viewModel.sendMessage() + } + .tint(.purple) + + // Send button + Button(action: { viewModel.sendMessage() }) { + Image(systemName: "arrow.up.circle.fill") + .font(.title2) + .foregroundColor( + viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading + ? .white.opacity(0.2) + : .purple + ) + } + .disabled(viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading) + } + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 22) + .fill(Color.white.opacity(0.08)) + ) + } + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + Color(red: 0.06, green: 0.07, blue: 0.15) + .ignoresSafeArea(edges: .bottom) + ) + } + + // MARK: - Formatters + + private static let timeFormatter: DateFormatter = { + let formatter = DateFormatter() + formatter.timeStyle = .short + return formatter + }() +} diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index d906865e80..8ab8053f8b 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -26,6 +26,8 @@ struct LoopInsights_DashboardView: View { @State private var showingHistory = false @State private var showingDebugLog = false + @State private var showingChat = false + @State private var showingTrendsInsights = false @State private var selectedRecord: LoopInsightsSuggestionRecord? @State private var developerTapCount = 0 @@ -132,6 +134,38 @@ struct LoopInsights_DashboardView: View { } } } + .sheet(isPresented: $showingChat) { + NavigationView { + LoopInsights_ChatView( + viewModel: LoopInsights_ChatViewModel(coordinator: viewModel.coordinator) + ) + } + } + .sheet(isPresented: $showingTrendsInsights) { + NavigationView { + LoopInsights_TrendsInsightsView(coordinator: viewModel.coordinator) + } + } + .overlay(alignment: .top) { + if let monitor = viewModel.backgroundMonitor, + monitor.showBanner, + let suggestion = monitor.latestBackgroundSuggestion { + notificationBanner( + suggestion: suggestion, + onView: { + monitor.dismissBanner() + viewModel.loadCurrentSettings() + }, + onAsk: { + monitor.dismissBanner() + showingChat = true + }, + onDismiss: { + monitor.dismissBanner() + } + ) + } + } } // MARK: - Header @@ -665,6 +699,30 @@ struct LoopInsights_DashboardView: View { private var navigationSection: some View { Section { + Button(action: { showingTrendsInsights = true }) { + HStack { + Image(systemName: "chart.line.uptrend.xyaxis") + .foregroundColor(.accentColor) + Text(NSLocalizedString("Trends & Insights", comment: "LoopInsights trends button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + + Button(action: { showingChat = true }) { + HStack { + Image(systemName: "bubble.left.and.bubble.right") + .foregroundColor(.accentColor) + Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + Button(action: { showingHistory = true }) { HStack { Image(systemName: "clock.arrow.circlepath") @@ -706,6 +764,94 @@ struct LoopInsights_DashboardView: View { } } + // MARK: - Notification Banner + + @ViewBuilder + private func notificationBanner( + suggestion: LoopInsightsSuggestion, + onView: @escaping () -> Void, + onAsk: @escaping () -> Void, + onDismiss: @escaping () -> Void + ) -> some View { + VStack(spacing: 0) { + HStack(spacing: 12) { + Image(systemName: "brain.head.profile") + .font(.title3) + .foregroundColor(.white) + + VStack(alignment: .leading, spacing: 4) { + HStack { + Text(NSLocalizedString("LoopInsights", comment: "LoopInsights banner title")) + .font(.subheadline.weight(.bold)) + .foregroundColor(.white) + Spacer() + HStack(spacing: 4) { + Circle() + .fill(confidenceColor(suggestion.confidence)) + .frame(width: 6, height: 6) + Text(suggestion.confidence.displayName) + .font(.caption2.weight(.bold)) + } + .padding(.horizontal, 6) + .padding(.vertical, 3) + .background(Color.white.opacity(0.2)) + .cornerRadius(8) + .foregroundColor(.white) + } + + Text(suggestion.summaryDescription) + .font(.caption) + .foregroundColor(.white.opacity(0.9)) + .lineLimit(2) + + HStack(spacing: 12) { + Button(action: onView) { + Text(NSLocalizedString("View", comment: "LoopInsights banner view button")) + .font(.caption.weight(.semibold)) + .foregroundColor(.accentColor) + .padding(.horizontal, 16) + .padding(.vertical, 6) + .background(Color.white) + .cornerRadius(14) + } + .buttonStyle(.plain) + + Button(action: onAsk) { + Text(NSLocalizedString("Ask", comment: "LoopInsights banner ask button")) + .font(.caption.weight(.semibold)) + .foregroundColor(.white) + .padding(.horizontal, 16) + .padding(.vertical, 6) + .background(Color.white.opacity(0.25)) + .cornerRadius(14) + } + .buttonStyle(.plain) + + Button(action: onDismiss) { + Text(NSLocalizedString("Dismiss", comment: "LoopInsights banner dismiss button")) + .font(.caption.weight(.medium)) + .foregroundColor(.white.opacity(0.8)) + } + .buttonStyle(.plain) + + Spacer() + } + .padding(.top, 2) + } + } + .padding() + .background( + RoundedRectangle(cornerRadius: 16) + .fill(Color.accentColor.opacity(0.95)) + .shadow(color: .black.opacity(0.2), radius: 8, y: 4) + ) + .padding(.horizontal) + + Spacer() + } + .transition(.move(edge: .top).combined(with: .opacity)) + } + // MARK: - Formatters private static let dateFormatter: DateFormatter = { diff --git a/Loop/Views/LoopInsights/LoopInsights_MonitorSettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_MonitorSettingsView.swift new file mode 100644 index 0000000000..348783a4fc --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_MonitorSettingsView.swift @@ -0,0 +1,240 @@ +// +// LoopInsights_MonitorSettingsView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import Combine + +// MARK: - View Model + +/// Reads/writes all monitor preferences from LoopInsights_FeatureFlags. +private final class MonitorSettingsViewModel: ObservableObject { + + @Published var isEnabled: Bool { + didSet { LoopInsights_FeatureFlags.backgroundMonitorEnabled = isEnabled } + } + + @Published var frequency: LoopInsightsMonitorFrequency { + didSet { LoopInsights_FeatureFlags.monitorFrequency = frequency } + } + + @Published var minConfidence: LoopInsightsConfidence { + didSet { LoopInsights_FeatureFlags.monitorMinConfidence = minConfidence } + } + + @Published var quietHoursEnabled: Bool { + didSet { LoopInsights_FeatureFlags.quietHoursEnabled = quietHoursEnabled } + } + + @Published var quietHoursStart: Int { + didSet { LoopInsights_FeatureFlags.quietHoursStart = quietHoursStart } + } + + @Published var quietHoursEnd: Int { + didSet { LoopInsights_FeatureFlags.quietHoursEnd = quietHoursEnd } + } + + @Published var notificationStyle: LoopInsightsNotificationStyle { + didSet { LoopInsights_FeatureFlags.notificationStyle = notificationStyle } + } + + init() { + self.isEnabled = LoopInsights_FeatureFlags.backgroundMonitorEnabled + self.frequency = LoopInsights_FeatureFlags.monitorFrequency + self.minConfidence = LoopInsights_FeatureFlags.monitorMinConfidence + self.quietHoursEnabled = LoopInsights_FeatureFlags.quietHoursEnabled + self.quietHoursStart = LoopInsights_FeatureFlags.quietHoursStart + self.quietHoursEnd = LoopInsights_FeatureFlags.quietHoursEnd + self.notificationStyle = LoopInsights_FeatureFlags.notificationStyle + } + + func formatHour(_ hour: Int) -> String { + let formatter = DateFormatter() + formatter.dateFormat = "h a" + var calendar = Calendar.current + calendar.timeZone = TimeZone.current + let date = calendar.startOfDay(for: Date()).addingTimeInterval(TimeInterval(hour * 3600)) + return formatter.string(from: date) + } +} + +// MARK: - View + +/// Settings UI for configuring LoopInsights background monitoring preferences. +/// Allows users to control frequency, confidence thresholds, quiet hours, +/// and notification style. +struct LoopInsights_MonitorSettingsView: View { + + @StateObject private var viewModel = MonitorSettingsViewModel() + + /// Callback to restart the background monitor when settings change + var onSettingsChanged: (() -> Void)? + + var body: some View { + Form { + masterToggleSection + if viewModel.isEnabled { + frequencySection + confidenceSection + quietHoursSection + notificationStyleSection + infoSection + } + } + .navigationTitle(NSLocalizedString("Background Monitoring", comment: "LoopInsights monitor settings title")) + .navigationBarTitleDisplayMode(.inline) + .onDisappear { + onSettingsChanged?() + } + } + + // MARK: - Master Toggle + + private var masterToggleSection: some View { + Section { + Toggle( + NSLocalizedString("Enable Background Monitoring", comment: "LoopInsights monitor toggle"), + isOn: $viewModel.isEnabled + ) + + Text(NSLocalizedString("When enabled, LoopInsights periodically analyzes your data and notifies you when it detects a therapy setting that could be improved.", comment: "LoopInsights monitor description")) + .font(.caption) + .foregroundColor(.secondary) + } + } + + // MARK: - Frequency + + private var frequencySection: some View { + Section(header: Text(NSLocalizedString("ANALYSIS FREQUENCY", comment: "LoopInsights monitor frequency header"))) { + Picker( + NSLocalizedString("Check every", comment: "LoopInsights monitor frequency picker"), + selection: $viewModel.frequency + ) { + ForEach(LoopInsightsMonitorFrequency.allCases) { freq in + Text(freq.displayName).tag(freq) + } + } + + Text(NSLocalizedString("How often LoopInsights runs a full AI analysis on your data. More frequent checks use more API calls.", comment: "LoopInsights monitor frequency description")) + .font(.caption) + .foregroundColor(.secondary) + } + } + + // MARK: - Minimum Confidence + + private var confidenceSection: some View { + Section(header: Text(NSLocalizedString("NOTIFICATION THRESHOLD", comment: "LoopInsights monitor confidence header"))) { + Picker( + NSLocalizedString("Notify for", comment: "LoopInsights monitor confidence picker"), + selection: $viewModel.minConfidence + ) { + Text(NSLocalizedString("All", comment: "LoopInsights confidence filter: all")).tag(LoopInsightsConfidence.low) + Text(NSLocalizedString("Medium & Above", comment: "LoopInsights confidence filter: medium+")).tag(LoopInsightsConfidence.medium) + Text(NSLocalizedString("High Only", comment: "LoopInsights confidence filter: high only")).tag(LoopInsightsConfidence.high) + } + .pickerStyle(.segmented) + + Text(confidenceDescription) + .font(.caption) + .foregroundColor(.secondary) + } + } + + private var confidenceDescription: String { + switch viewModel.minConfidence { + case .low: + return NSLocalizedString("Notify for all suggestions, including low-confidence ones. This may result in more notifications.", comment: "LoopInsights monitor confidence: all desc") + case .medium: + return NSLocalizedString("Notify for medium and high confidence suggestions. Good balance of signal vs. noise.", comment: "LoopInsights monitor confidence: medium+ desc") + case .high: + return NSLocalizedString("Only notify for high confidence suggestions. Fewer notifications, but only the most impactful changes.", comment: "LoopInsights monitor confidence: high only desc") + } + } + + // MARK: - Quiet Hours + + private var quietHoursSection: some View { + Section(header: Text(NSLocalizedString("QUIET HOURS", comment: "LoopInsights monitor quiet hours header"))) { + Toggle( + NSLocalizedString("Enable Quiet Hours", comment: "LoopInsights monitor quiet hours toggle"), + isOn: $viewModel.quietHoursEnabled + ) + + if viewModel.quietHoursEnabled { + HStack { + Text(NSLocalizedString("From", comment: "LoopInsights monitor quiet hours from")) + Spacer() + Picker("", selection: $viewModel.quietHoursStart) { + ForEach(0..<24, id: \.self) { hour in + Text(viewModel.formatHour(hour)).tag(hour) + } + } + .pickerStyle(.menu) + } + + HStack { + Text(NSLocalizedString("To", comment: "LoopInsights monitor quiet hours to")) + Spacer() + Picker("", selection: $viewModel.quietHoursEnd) { + ForEach(0..<24, id: \.self) { hour in + Text(viewModel.formatHour(hour)).tag(hour) + } + } + .pickerStyle(.menu) + } + + Text(NSLocalizedString("Notifications are suppressed during quiet hours. Analysis still runs — results are available when you next open LoopInsights.", comment: "LoopInsights monitor quiet hours description")) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + // MARK: - Notification Style + + private var notificationStyleSection: some View { + Section(header: Text(NSLocalizedString("NOTIFICATION STYLE", comment: "LoopInsights monitor notification style header"))) { + Picker( + NSLocalizedString("Delivery", comment: "LoopInsights monitor notification picker"), + selection: $viewModel.notificationStyle + ) { + ForEach(LoopInsightsNotificationStyle.allCases) { style in + Text(style.displayName).tag(style) + } + } + + Text(viewModel.notificationStyle.description) + .font(.caption) + .foregroundColor(.secondary) + } + } + + // MARK: - Info + + private var infoSection: some View { + Section { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 6) { + Image(systemName: "info.circle") + .foregroundColor(.accentColor) + Text(NSLocalizedString("How it works", comment: "LoopInsights monitor info header")) + .font(.subheadline.weight(.medium)) + } + + Text(NSLocalizedString("Background monitoring piggybacks on Loop's existing ~5 minute cycle. When enough time has passed (based on your frequency setting), it runs a full AI analysis of all three therapy settings. If it finds suggestions that meet your confidence threshold, you'll be notified.", comment: "LoopInsights monitor info description")) + .font(.caption) + .foregroundColor(.secondary) + + Text(NSLocalizedString("Each analysis uses your configured AI provider and consumes API credits. With daily frequency, expect ~3 API calls per day (one per setting type).", comment: "LoopInsights monitor API usage note")) + .font(.caption) + .foregroundColor(.orange) + } + } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index e1b130270b..2614f73a48 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -93,6 +93,7 @@ struct LoopInsights_SettingsView: View { advancedAISection analysisOptionsSection personalitySection + backgroundMonitoringSection dataSection if LoopInsights_FeatureFlags.developerModeEnabled { developerSection @@ -661,6 +662,41 @@ struct LoopInsights_SettingsView: View { } } + // MARK: - Background Monitoring + + private var backgroundMonitoringSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "bell.badge") + .foregroundColor(.accentColor) + Text(NSLocalizedString("BACKGROUND MONITORING", comment: "LoopInsights background monitoring header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + NavigationLink { + LoopInsights_MonitorSettingsView() + } label: { + HStack { + Text(NSLocalizedString("Background Monitoring", comment: "LoopInsights background monitoring row")) + Spacer() + Text(LoopInsights_FeatureFlags.backgroundMonitorEnabled + ? LoopInsights_FeatureFlags.monitorFrequency.displayName + : NSLocalizedString("Off", comment: "LoopInsights monitoring off")) + .foregroundColor(.secondary) + } + } + + Text(NSLocalizedString("LoopInsights can continuously monitor your data and proactively notify you when it detects a setting change opportunity.", comment: "LoopInsights background monitoring description")) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + // MARK: - Data private var dataSection: some View { @@ -940,6 +976,9 @@ private class LoopInsights_DashboardContainer: ObservableObject { coordinator = LoopInsights_Coordinator(testDataProvider: provider) } + // Start background monitoring if enabled + coordinator.startBackgroundMonitoring() + let vm = LoopInsights_DashboardViewModel(coordinator: coordinator) // Forward ViewModel's objectWillChange → increment renderTrigger diff --git a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift new file mode 100644 index 0000000000..3786e5a353 --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift @@ -0,0 +1,722 @@ +// +// LoopInsights_TrendsInsightsView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Tab-based Trends & Insights view with Daily/Weekly/Monthly/Stats/Advisor tabs. +/// Shows AI-generated summaries of glucose data with stats chips, summary cards, +/// and highlights sections. Dark-themed to match the restyled ChatView. +struct LoopInsights_TrendsInsightsView: View { + + let coordinator: LoopInsights_Coordinator + @Environment(\.dismiss) private var dismiss + @StateObject private var viewModel = TrendsViewModel() + @State private var showingChat = false + + var body: some View { + ZStack { + // Dark gradient background + LinearGradient( + colors: [ + Color(red: 0.06, green: 0.07, blue: 0.15), + Color(red: 0.08, green: 0.10, blue: 0.22), + Color(red: 0.05, green: 0.06, blue: 0.14) + ], + startPoint: .topLeading, + endPoint: .bottomTrailing + ) + .ignoresSafeArea() + + VStack(spacing: 0) { + tabBar + tabContent + } + } + .navigationTitle(NSLocalizedString("Trends & Insights", comment: "LoopInsights trends title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(action: { dismiss() }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.white.opacity(0.7)) + } + } + ToolbarItem(placement: .navigationBarTrailing) { + if viewModel.selectedTab.isTimePeriod { + Button(action: { viewModel.refresh(coordinator: coordinator) }) { + Image(systemName: "arrow.clockwise") + .foregroundColor(.white.opacity(0.7)) + } + .disabled(viewModel.isLoading) + } + } + } + .onAppear { + viewModel.loadIfNeeded(coordinator: coordinator) + } + .sheet(isPresented: $showingChat) { + NavigationView { + LoopInsights_ChatView( + viewModel: LoopInsights_ChatViewModel(coordinator: coordinator) + ) + } + } + } + + // MARK: - Tab Bar + + private var tabBar: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 8) { + ForEach(TrendsTab.allCases) { tab in + Button(action: { + withAnimation(.easeInOut(duration: 0.2)) { + viewModel.selectedTab = tab + } + if tab == .advisor { + showingChat = true + } else { + viewModel.loadIfNeeded(coordinator: coordinator) + } + }) { + HStack(spacing: 5) { + Image(systemName: tab.icon) + .font(.caption2) + Text(tab.label) + .font(.caption.weight(.medium)) + } + .foregroundColor(viewModel.selectedTab == tab ? .white : .white.opacity(0.5)) + .padding(.horizontal, 14) + .padding(.vertical, 8) + .background( + Capsule() + .fill(viewModel.selectedTab == tab + ? Color.purple.opacity(0.6) + : Color.white.opacity(0.08) + ) + ) + } + .buttonStyle(.plain) + } + } + .padding(.horizontal, 16) + .padding(.vertical, 10) + } + } + + // MARK: - Tab Content + + @ViewBuilder + private var tabContent: some View { + switch viewModel.selectedTab { + case .daily, .weekly, .monthly: + timePeriodContent + case .stats: + statsContent + case .advisor: + // Advisor shows a prompt card; tapping opens chat + advisorContent + } + } + + // MARK: - Time Period Content (Daily/Weekly/Monthly) + + private var timePeriodContent: some View { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + // Date header + dateHeader + + if viewModel.isLoading { + loadingView + } else if let error = viewModel.errorMessage { + errorCard(error) + } else { + // Stats chips + if let stats = viewModel.cachedStats[viewModel.selectedTab] { + statsChipsRow(stats: stats) + } + + // Summary card + if let summary = viewModel.cachedSummaries[viewModel.selectedTab], !summary.isEmpty { + summaryCard(summary) + } + + // Highlights card + if let highlights = viewModel.cachedHighlights[viewModel.selectedTab], !highlights.isEmpty { + highlightsCard(highlights) + } + + // Show placeholder if no data yet + if viewModel.cachedSummaries[viewModel.selectedTab] == nil + && viewModel.cachedStats[viewModel.selectedTab] == nil { + noDataPlaceholder + } + } + } + .padding(.horizontal, 16) + .padding(.bottom, 20) + } + } + + private var dateHeader: some View { + VStack(alignment: .leading, spacing: 4) { + Text(Self.dayFormatter.string(from: Date())) + .font(.title2.weight(.bold)) + .foregroundColor(.white) + + if let generatedAt = viewModel.cachedGeneratedAt[viewModel.selectedTab] { + Text(String( + format: NSLocalizedString("Generated %@ at %@", comment: "LoopInsights trends generated at"), + Self.dateMediumFormatter.string(from: generatedAt), + Self.timeShortFormatter.string(from: generatedAt) + )) + .font(.caption) + .foregroundColor(.white.opacity(0.4)) + } + } + .padding(.top, 8) + } + + private func statsChipsRow(stats: LoopInsightsAggregatedStats) -> some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 10) { + statsChip( + label: NSLocalizedString("TIR", comment: "LoopInsights trends TIR chip"), + value: String(format: "%.0f%%", stats.glucoseStats.timeInRange), + color: tirColor(stats.glucoseStats.timeInRange) + ) + statsChip( + label: NSLocalizedString("Avg", comment: "LoopInsights trends avg chip"), + value: String(format: "%.0f", stats.glucoseStats.averageGlucose), + color: avgColor(stats.glucoseStats.averageGlucose) + ) + statsChip( + label: NSLocalizedString("Readings", comment: "LoopInsights trends readings chip"), + value: "\(stats.glucoseStats.sampleCount)", + color: .teal + ) + statsChip( + label: NSLocalizedString("CV", comment: "LoopInsights trends CV chip"), + value: String(format: "%.0f%%", stats.glucoseStats.coefficientOfVariation), + color: stats.glucoseStats.coefficientOfVariation <= 36 ? .green : .orange + ) + } + } + } + + private func statsChip(label: String, value: String, color: Color) -> some View { + VStack(spacing: 2) { + Text(value) + .font(.subheadline.weight(.bold)) + .foregroundColor(.white) + Text(label) + .font(.caption2) + .foregroundColor(.white.opacity(0.6)) + } + .padding(.horizontal, 16) + .padding(.vertical, 10) + .background( + Capsule() + .fill(color.opacity(0.25)) + ) + .overlay( + Capsule() + .stroke(color.opacity(0.4), lineWidth: 1) + ) + } + + private func summaryCard(_ summary: String) -> some View { + VStack(alignment: .leading, spacing: 10) { + HStack(spacing: 8) { + Image(systemName: "doc.plaintext") + .foregroundColor(.purple.opacity(0.8)) + Text(NSLocalizedString("Summary", comment: "LoopInsights trends summary header")) + .font(.subheadline.weight(.semibold)) + .foregroundColor(.white.opacity(0.9)) + } + + Text(summary) + .font(.subheadline) + .foregroundColor(.white.opacity(0.78)) + .textSelection(.enabled) + .fixedSize(horizontal: false, vertical: true) + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 14) + .fill(Color.white.opacity(0.08)) + ) + } + + private func highlightsCard(_ highlights: [String]) -> some View { + VStack(alignment: .leading, spacing: 10) { + HStack(spacing: 8) { + Image(systemName: "star.fill") + .foregroundColor(.yellow.opacity(0.8)) + Text(NSLocalizedString("Highlights", comment: "LoopInsights trends highlights header")) + .font(.subheadline.weight(.semibold)) + .foregroundColor(.white.opacity(0.9)) + } + + ForEach(highlights.indices, id: \.self) { index in + HStack(alignment: .top, spacing: 8) { + Text("\u{2022}") + .foregroundColor(.purple.opacity(0.8)) + Text(highlights[index]) + .font(.subheadline) + .foregroundColor(.white.opacity(0.78)) + .fixedSize(horizontal: false, vertical: true) + } + } + } + .padding(16) + .frame(maxWidth: .infinity, alignment: .leading) + .background( + RoundedRectangle(cornerRadius: 14) + .fill(Color.white.opacity(0.08)) + ) + } + + // MARK: - Stats Content + + private var statsContent: some View { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + Text(NSLocalizedString("Detailed Statistics", comment: "LoopInsights trends stats header")) + .font(.title3.weight(.bold)) + .foregroundColor(.white) + .padding(.top, 8) + + if viewModel.isLoading { + loadingView + } else if let stats = viewModel.statsTabData { + // Glucose section + statsSectionCard( + title: NSLocalizedString("Glucose", comment: "LoopInsights trends stats glucose"), + icon: "drop.fill", + rows: [ + (NSLocalizedString("Time in Range (70-180)", comment: ""), String(format: "%.1f%%", stats.glucoseStats.timeInRange)), + (NSLocalizedString("Below Range (<70)", comment: ""), String(format: "%.1f%%", stats.glucoseStats.timeBelowRange)), + (NSLocalizedString("Above Range (>180)", comment: ""), String(format: "%.1f%%", stats.glucoseStats.timeAboveRange)), + (NSLocalizedString("Average Glucose", comment: ""), String(format: "%.0f mg/dL", stats.glucoseStats.averageGlucose)), + (NSLocalizedString("GMI (est. A1C)", comment: ""), String(format: "%.1f%%", stats.glucoseStats.gmi)), + (NSLocalizedString("Coefficient of Variation", comment: ""), String(format: "%.1f%%", stats.glucoseStats.coefficientOfVariation)), + (NSLocalizedString("Std Deviation", comment: ""), String(format: "%.1f mg/dL", stats.glucoseStats.standardDeviation)), + (NSLocalizedString("Readings", comment: ""), "\(stats.glucoseStats.sampleCount)") + ] + ) + + // Insulin section + statsSectionCard( + title: NSLocalizedString("Insulin", comment: "LoopInsights trends stats insulin"), + icon: "syringe.fill", + rows: [ + (NSLocalizedString("Total Daily Dose", comment: ""), String(format: "%.1f U/day", stats.insulinStats.totalDailyDose)), + (NSLocalizedString("Basal", comment: ""), String(format: "%.0f%%", stats.insulinStats.basalPercentage)), + (NSLocalizedString("Bolus", comment: ""), String(format: "%.0f%%", stats.insulinStats.bolusPercentage)), + (NSLocalizedString("Correction Boluses", comment: ""), "\(stats.insulinStats.correctionBolusCount)") + ] + ) + + // Carb section + statsSectionCard( + title: NSLocalizedString("Carbs", comment: "LoopInsights trends stats carbs"), + icon: "fork.knife", + rows: [ + (NSLocalizedString("Daily Average", comment: ""), String(format: "%.0f g/day", stats.carbStats.averageDailyCarbs)), + (NSLocalizedString("Per Meal Average", comment: ""), String(format: "%.0f g", stats.carbStats.averageCarbsPerMeal)), + (NSLocalizedString("Meals Logged", comment: ""), "\(stats.carbStats.mealCount)") + ] + ) + } else { + noDataPlaceholder + } + } + .padding(.horizontal, 16) + .padding(.bottom, 20) + } + .onAppear { + viewModel.loadStatsIfNeeded(coordinator: coordinator) + } + } + + private func statsSectionCard(title: String, icon: String, rows: [(String, String)]) -> some View { + VStack(alignment: .leading, spacing: 10) { + HStack(spacing: 8) { + Image(systemName: icon) + .foregroundColor(.purple.opacity(0.8)) + Text(title) + .font(.subheadline.weight(.semibold)) + .foregroundColor(.white.opacity(0.9)) + } + + ForEach(rows.indices, id: \.self) { index in + HStack { + Text(rows[index].0) + .font(.caption) + .foregroundColor(.white.opacity(0.55)) + Spacer() + Text(rows[index].1) + .font(.caption.weight(.medium)) + .foregroundColor(.white.opacity(0.85)) + } + if index < rows.count - 1 { + Divider() + .background(Color.white.opacity(0.08)) + } + } + } + .padding(16) + .background( + RoundedRectangle(cornerRadius: 14) + .fill(Color.white.opacity(0.08)) + ) + } + + // MARK: - Advisor Content + + private var advisorContent: some View { + VStack(spacing: 24) { + Spacer() + + Image(systemName: "bubble.left.and.bubble.right") + .font(.system(size: 48)) + .foregroundColor(.purple.opacity(0.5)) + + Text(NSLocalizedString("Chat with your AI Advisor", comment: "LoopInsights trends advisor title")) + .font(.headline) + .foregroundColor(.white.opacity(0.9)) + + Text(NSLocalizedString("Ask questions about your glucose trends, therapy settings, and get personalized advice.", comment: "LoopInsights trends advisor subtitle")) + .font(.subheadline) + .foregroundColor(.white.opacity(0.5)) + .multilineTextAlignment(.center) + .padding(.horizontal, 32) + + Button(action: { showingChat = true }) { + HStack(spacing: 8) { + Image(systemName: "message.fill") + Text(NSLocalizedString("Open Chat", comment: "LoopInsights trends advisor button")) + .fontWeight(.semibold) + } + .foregroundColor(.white) + .padding(.horizontal, 28) + .padding(.vertical, 14) + .background( + LinearGradient( + colors: [ + Color(red: 0.55, green: 0.25, blue: 0.85), + Color(red: 0.75, green: 0.20, blue: 0.65) + ], + startPoint: .leading, + endPoint: .trailing + ) + ) + .clipShape(Capsule()) + } + .buttonStyle(.plain) + + Spacer() + } + } + + // MARK: - Shared Components + + private var loadingView: some View { + VStack(spacing: 12) { + Spacer().frame(height: 40) + ProgressView() + .scaleEffect(1.2) + .tint(.purple) + Text(NSLocalizedString("Generating insights...", comment: "LoopInsights trends loading")) + .font(.subheadline) + .foregroundColor(.white.opacity(0.5)) + Spacer().frame(height: 40) + } + .frame(maxWidth: .infinity) + } + + private func errorCard(_ message: String) -> some View { + HStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.red.opacity(0.8)) + Text(message) + .font(.caption) + .foregroundColor(.red.opacity(0.8)) + Spacer() + } + .padding(14) + .background( + RoundedRectangle(cornerRadius: 12) + .fill(Color.red.opacity(0.1)) + ) + } + + private var noDataPlaceholder: some View { + VStack(spacing: 12) { + Spacer().frame(height: 40) + Image(systemName: "chart.bar.doc.horizontal") + .font(.system(size: 36)) + .foregroundColor(.white.opacity(0.3)) + Text(NSLocalizedString("Tap refresh to generate insights", comment: "LoopInsights trends no data")) + .font(.subheadline) + .foregroundColor(.white.opacity(0.4)) + Spacer().frame(height: 40) + } + .frame(maxWidth: .infinity) + } + + // MARK: - Color Helpers + + private func tirColor(_ tir: Double) -> Color { + if tir >= 70 { return .green } + if tir >= 50 { return .yellow } + return .red + } + + private func avgColor(_ avg: Double) -> Color { + if avg >= 70 && avg <= 180 { return .green } + if avg >= 60 && avg <= 200 { return .yellow } + return .red + } + + // MARK: - Formatters + + private static let dayFormatter: DateFormatter = { + let f = DateFormatter() + f.dateFormat = "EEEE, MMM d" + return f + }() + + private static let dateMediumFormatter: DateFormatter = { + let f = DateFormatter() + f.dateStyle = .medium + return f + }() + + private static let timeShortFormatter: DateFormatter = { + let f = DateFormatter() + f.timeStyle = .short + return f + }() +} + +// MARK: - Trends Tab Enum + +private enum TrendsTab: String, CaseIterable, Identifiable, Hashable { + case daily + case weekly + case monthly + case stats + case advisor + + var id: String { rawValue } + + var label: String { + switch self { + case .daily: return NSLocalizedString("Daily", comment: "LoopInsights trends tab: daily") + case .weekly: return NSLocalizedString("Weekly", comment: "LoopInsights trends tab: weekly") + case .monthly: return NSLocalizedString("Monthly", comment: "LoopInsights trends tab: monthly") + case .stats: return NSLocalizedString("Stats", comment: "LoopInsights trends tab: stats") + case .advisor: return NSLocalizedString("Advisor", comment: "LoopInsights trends tab: advisor") + } + } + + var icon: String { + switch self { + case .daily: return "sun.max" + case .weekly: return "calendar" + case .monthly: return "calendar.badge.clock" + case .stats: return "chart.bar.fill" + case .advisor: return "bubble.left.and.bubble.right" + } + } + + var isTimePeriod: Bool { + switch self { + case .daily, .weekly, .monthly: return true + default: return false + } + } + + var analysisPeriod: LoopInsightsAnalysisPeriod? { + switch self { + case .daily: return .threeDays + case .weekly: return .sevenDays + case .monthly: return .thirtyDays + default: return nil + } + } +} + +// MARK: - Trends ViewModel + +private final class TrendsViewModel: ObservableObject { + + @Published var selectedTab: TrendsTab = .daily + @Published var isLoading = false + @Published var errorMessage: String? + + // Cached results per tab + var cachedSummaries: [TrendsTab: String] = [:] + var cachedHighlights: [TrendsTab: [String]] = [:] + var cachedStats: [TrendsTab: LoopInsightsAggregatedStats] = [:] + var cachedGeneratedAt: [TrendsTab: Date] = [:] + var statsTabData: LoopInsightsAggregatedStats? + + // MARK: - Load + + func loadIfNeeded(coordinator: LoopInsights_Coordinator) { + guard selectedTab.isTimePeriod else { return } + guard cachedSummaries[selectedTab] == nil else { return } + refresh(coordinator: coordinator) + } + + func loadStatsIfNeeded(coordinator: LoopInsights_Coordinator) { + guard statsTabData == nil else { return } + loadStats(coordinator: coordinator) + } + + func refresh(coordinator: LoopInsights_Coordinator) { + guard selectedTab.isTimePeriod, let period = selectedTab.analysisPeriod else { return } + + isLoading = true + errorMessage = nil + let currentTab = selectedTab + + Task { @MainActor in + do { + // Fetch aggregated stats + let stats = try await coordinator.dataAggregator.aggregateData(period: period) + cachedStats[currentTab] = stats + cachedGeneratedAt[currentTab] = Date() + + // Build a summary prompt + let therapyContext = LoopInsights_ChatViewModel.buildTherapyContext( + snapshot: try? coordinator.captureCurrentSnapshot(), + stats: stats + ) + + let systemPrompt = buildTrendsSystemPrompt() + let userPrompt = buildTrendsUserPrompt( + periodName: currentTab.label, + therapyContext: therapyContext + ) + + let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( + systemPrompt, + userPrompt: userPrompt + ) + + // Parse response into summary + highlights + let parsed = parseTrendsResponse(response) + cachedSummaries[currentTab] = parsed.summary + cachedHighlights[currentTab] = parsed.highlights + + isLoading = false + } catch { + errorMessage = error.localizedDescription + isLoading = false + } + } + } + + private func loadStats(coordinator: LoopInsights_Coordinator) { + isLoading = true + errorMessage = nil + + Task { @MainActor in + do { + let stats = try await coordinator.dataAggregator.aggregateData( + period: .sevenDays + ) + statsTabData = stats + isLoading = false + } catch { + errorMessage = error.localizedDescription + isLoading = false + } + } + } + + // MARK: - Prompt Building + + private func buildTrendsSystemPrompt() -> String { + let personality = LoopInsights_FeatureFlags.aiPersonality + + return """ + You are an expert diabetes advisor providing a trends summary for a Loop AID user. \ + \(personality.promptInstruction) + + RESPONSE FORMAT — you MUST use exactly this structure: + + SUMMARY: + Write 2-4 sentences summarizing the user's glucose control for this period. \ + Mention TIR, average glucose, and any notable patterns. Use **bold** for key numbers. + + HIGHLIGHTS: + - First key observation (one sentence) + - Second key observation (one sentence) + - Third key observation (one sentence) + + Keep it concise and actionable. Reference actual numbers from the data. + """ + } + + private func buildTrendsUserPrompt(periodName: String, therapyContext: String) -> String { + return """ + Generate a \(periodName) trends summary for this user's diabetes data: + + \(therapyContext) + """ + } + + // MARK: - Response Parsing + + private func parseTrendsResponse(_ response: String) -> (summary: String, highlights: [String]) { + var summary = "" + var highlights: [String] = [] + + let lines = response.components(separatedBy: "\n") + var section: String? + + for line in lines { + let trimmed = line.trimmingCharacters(in: .whitespaces) + + if trimmed.uppercased().hasPrefix("SUMMARY") { + section = "summary" + continue + } + if trimmed.uppercased().hasPrefix("HIGHLIGHTS") || trimmed.uppercased().hasPrefix("HIGHLIGHT") { + section = "highlights" + continue + } + + if section == "summary" && !trimmed.isEmpty { + if !summary.isEmpty { summary += " " } + summary += trimmed + } + + if section == "highlights" && trimmed.hasPrefix("-") { + let bullet = String(trimmed.dropFirst()).trimmingCharacters(in: .whitespaces) + if !bullet.isEmpty { + highlights.append(bullet) + } + } + } + + // Fallback: if parsing failed, treat entire response as summary + if summary.isEmpty && highlights.isEmpty { + summary = response + } + + return (summary, highlights) + } +} From c5ea7b98815b06facae8e07481a3db7088908403 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 12 Feb 2026 19:36:42 -0800 Subject: [PATCH 04/36] Phase 4: Goals, pattern discovery, reflections, and exportable PDF reports Add clinical goal tracking (TIR, A1C, below-range, custom) with progress bars, AI-powered 30-day pattern discovery with sick day and negative basal detection, timestamped reflection journal with mood tags, and HTML-to-PDF report generation with share sheet. Goals & Patterns accessible from the Dashboard navigation section. --- Loop.xcodeproj/project.pbxproj | 12 + Loop/Localizable.xcstrings | 111 ++- .../LoopInsights_Coordinator.swift | 3 + .../LoopInsights/LoopInsights_GoalStore.swift | 384 +++++++++ .../LoopInsights_ReportGenerator.swift | 256 ++++++ .../LoopInsights_DashboardView.swift | 18 + .../LoopInsights/LoopInsights_GoalsView.swift | 753 ++++++++++++++++++ 7 files changed, 1536 insertions(+), 1 deletion(-) create mode 100644 Loop/Services/LoopInsights/LoopInsights_GoalStore.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_GoalsView.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index c0eb350d71..e371592cd5 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -611,6 +611,9 @@ 43CA1D2C89F0E99C9BF8E595 /* LoopInsights_ChatViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1441AF7F093555B0A342E921 /* LoopInsights_ChatViewModel.swift */; }; A5BA458D4C96896EB8F770A8 /* LoopInsights_ChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2029C9AA34E59B67467B1756 /* LoopInsights_ChatView.swift */; }; 02DEF744456C1BA094E55A8A /* LoopInsights_MonitorSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */; }; + 8D65F67A3D5AE1576364C287 /* LoopInsights_GoalStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */; }; + 2BD98847D48B412626D8AFDF /* LoopInsights_GoalsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */; }; + 1AD80F425B1DA688EBAC6653 /* LoopInsights_ReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1455,6 +1458,9 @@ 1441AF7F093555B0A342E921 /* LoopInsights_ChatViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ChatViewModel.swift; sourceTree = ""; }; 2029C9AA34E59B67467B1756 /* LoopInsights_ChatView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ChatView.swift; sourceTree = ""; }; CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_MonitorSettingsView.swift; sourceTree = ""; }; + 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_GoalStore.swift; sourceTree = ""; }; + 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_GoalsView.swift; sourceTree = ""; }; + 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ReportGenerator.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2741,6 +2747,7 @@ 2029C9AA34E59B67467B1756 /* LoopInsights_ChatView.swift */, CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */, EE7AAD3549253FE16941E10D /* LoopInsights_TrendsInsightsView.swift */, + 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */, ); path = LoopInsights; sourceTree = ""; @@ -2762,6 +2769,8 @@ E8F875E984C8C1A149E4242E /* LoopInsights_TestDataProvider.swift */, EF3390DD6BCC87E617CF9C4E /* LoopInsights_SecureStorage.swift */, 186598BBCF20AF6BFDA7C65E /* LoopInsights_SuggestionStore.swift */, + 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */, + 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */, ); path = LoopInsights; sourceTree = ""; @@ -3736,6 +3745,9 @@ 43CA1D2C89F0E99C9BF8E595 /* LoopInsights_ChatViewModel.swift in Sources */, A5BA458D4C96896EB8F770A8 /* LoopInsights_ChatView.swift in Sources */, 02DEF744456C1BA094E55A8A /* LoopInsights_MonitorSettingsView.swift in Sources */, + 8D65F67A3D5AE1576364C287 /* LoopInsights_GoalStore.swift in Sources */, + 2BD98847D48B412626D8AFDF /* LoopInsights_GoalsView.swift in Sources */, + 1AD80F425B1DA688EBAC6653 /* LoopInsights_ReportGenerator.swift in Sources */, 8D0F376E7E338ECB93EE03E0 /* LoopInsights_TrendsInsightsView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index df1772e330..fe56d7c174 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1245,6 +1245,18 @@ } } }, + "%@%@" : { + "comment" : "Displays the current value of a goal, if it has one. The argument is the string “%.1f”.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@%2$@" + } + } + } + }, "%@%@ was unable to cancel your current temporary basal rate, which is higher than the new Max Basal limit you have set. This may result in higher insulin delivery than desired.\n\nConsider suspending insulin delivery manually and then immediately resuming to enact basal delivery with the new limit in place." : { "comment" : "Alert text for failing to cancel temp basal (1: reason description, 2: app name)", "localizations" : { @@ -3215,6 +3227,30 @@ "comment" : "A bullet point symbol.", "isCommentAutoGenerated" : true }, + "≤ %@%@" : { + "comment" : "A comparison symbol followed by the target value of a goal, formatted to one decimal place. The argument is the string “%.1f”.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "≤ %1$@%2$@" + } + } + } + }, + "≥ %@%@" : { + "comment" : "A textual representation of a target value for a goal, using a \"greater than or equal to\" symbol. The value is formatted to one decimal place. The argument is the string “%.1f”.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "≥ %1$@%2$@" + } + } + } + }, "⚠️" : { "localizations" : { "da" : { @@ -4300,6 +4336,9 @@ } } }, + "A1C Estimate" : { + "comment" : "LoopInsights goal type: A1C target" + }, "Above Range (>180)" : { "comment" : "Description of a glucose reading that is above 180 mg/dL.", "isCommentAutoGenerated" : true @@ -5113,6 +5152,9 @@ } } }, + "Add" : { + "comment" : "LoopInsights add reflection button" + }, "Add a new favorite food" : { "comment" : "Button label to open new favorite food view", "localizations" : { @@ -5422,6 +5464,9 @@ } } }, + "Add Goal" : { + "comment" : "LoopInsights add goal title" + }, "Add item to bottom row" : { "comment" : "Title for Add item", "extractionState" : "stale", @@ -8278,6 +8323,9 @@ } } }, + "Ask" : { + "comment" : "LoopInsights banner ask button" + }, "Ask a question..." : { "comment" : "LoopInsights chat input placeholder" }, @@ -9040,6 +9088,9 @@ } } }, + "Below Range" : { + "comment" : "LoopInsights goal type: hypo reduction" + }, "Below Range (<70)" : { "comment" : "Description of a glucose reading that is below the recommended target range.", "isCommentAutoGenerated" : true @@ -10174,7 +10225,7 @@ } }, "Cancel" : { - "comment" : "Button label for cancel\nButton text to cancel\nCancel button\nCancel button for reset loop alert\nCancel export button title\nLoopInsights pre-fill cancel button\nThe title of the cancel action in an action sheet", + "comment" : "Button label for cancel\nButton text to cancel\nCancel\nCancel button\nCancel button for reset loop alert\nCancel export button title\nLoopInsights pre-fill cancel button\nThe title of the cancel action in an action sheet", "localizations" : { "ar" : { "stringUnit" : { @@ -14471,6 +14522,9 @@ } } }, + "Custom Goal" : { + "comment" : "LoopInsights goal type: custom" + }, "Custom Override" : { "comment" : "The title of the cell indicating a generic temporary override is enabled", "extractionState" : "manual", @@ -16481,6 +16535,9 @@ } } }, + "Discovering patterns..." : { + "comment" : "LoopInsights patterns loading" + }, "Dismiss" : { "comment" : "Default alert dismissal\nLoopInsights banner dismiss button\nLoopInsights dismiss\nThe button label of the action used to dismiss an error alert", "localizations" : { @@ -20913,9 +20970,27 @@ "GMI (est. A1C)" : { "comment" : "LoopInsights GMI label" }, + "Goal name" : { + "comment" : "LoopInsights custom goal name" + }, + "Goal Type" : { + "comment" : "LoopInsights goal type picker" + }, + "Goals" : { + "comment" : "LoopInsights goals section header" + }, + "Goals & Patterns" : { + "comment" : "LoopInsights goals button\nLoopInsights goals view title" + }, + "Good" : { + "comment" : "LoopInsights mood: good" + }, "Good — minor improvements possible" : { "comment" : "LoopInsights score: good" }, + "Great" : { + "comment" : "LoopInsights mood: great" + }, "HARDWARE SOUNDS" : { "localizations" : { "da" : { @@ -21269,6 +21344,9 @@ "How's my basal rate?" : { "comment" : "LoopInsights quick ask: basal rate review" }, + "How's your day going?" : { + "comment" : "LoopInsights reflection placeholder" + }, "https://mysite.herokuapp.com" : { "comment" : "The placeholder text for the nightscout site URL credential", "extractionState" : "manual", @@ -27344,6 +27422,9 @@ } } }, + "New Goal" : { + "comment" : "LoopInsights new goal nav title" + }, "Nightscout" : { "comment" : "The title of the Nightscout service", "extractionState" : "manual", @@ -27740,6 +27821,9 @@ "No fixtures found" : { "comment" : "LoopInsights no fixtures" }, + "No goals set yet" : { + "comment" : "LoopInsights goals empty placeholder" + }, "No Maximum Bolus Configured" : { "comment" : "Alert title for a missing maximum bolus setting error", "localizations" : { @@ -29248,6 +29332,9 @@ } } }, + "Okay" : { + "comment" : "LoopInsights mood: okay" + }, "On" : { "comment" : "Notification Setting Status is On", "localizations" : { @@ -29538,6 +29625,9 @@ } } }, + "Pattern Discovery" : { + "comment" : "LoopInsights patterns section header" + }, "Pending" : { "comment" : "LoopInsights suggestion status: pending review" }, @@ -32981,6 +33071,9 @@ } } }, + "Reflections" : { + "comment" : "LoopInsights reflections section header" + }, "Remote Bolus Entry: %@ U" : { "comment" : "The notification title for a remote bolus. (1: Bolus amount)\nThe notification title for a remote failure. (1: Bolus amount)", "localizations" : { @@ -33608,6 +33701,7 @@ "comment" : "LoopInsights empty history message" }, "Save" : { + "comment" : "Save goal", "localizations" : { "da" : { "stringUnit" : { @@ -35602,6 +35696,9 @@ }, "System Prompt" : { + }, + "Tap + to set a clinical goal like TIR > 80%" : { + "comment" : "LoopInsights goals empty hint" }, "Tap here to set up a CGM" : { "comment" : "Descriptive text for button to add CGM device", @@ -35891,6 +35988,9 @@ "Tap one of your current Therapy Settings" : { "comment" : "LoopInsights current settings header" }, + "Tap refresh to discover patterns" : { + "comment" : "LoopInsights patterns empty" + }, "Tap refresh to generate insights" : { "comment" : "LoopInsights trends no data" }, @@ -36291,6 +36391,9 @@ } } }, + "Target:" : { + "comment" : "LoopInsights goal target\nLoopInsights goal target label" + }, "Test Connection" : { "comment" : "LoopInsights test connection button" }, @@ -37556,6 +37659,9 @@ "This will restore your therapy settings to the values they had before this suggestion was applied." : { "comment" : "LoopInsights revert confirmation message" }, + "Time in Range" : { + "comment" : "LoopInsights goal type: TIR target" + }, "Time in Range (70-180)" : { "comment" : "LoopInsights TIR label with range" }, @@ -37710,6 +37816,9 @@ "Total Daily Dose" : { "comment" : "LoopInsights TDD label" }, + "Tough" : { + "comment" : "LoopInsights mood: tough" + }, "Tough Love" : { "comment" : "LoopInsights personality: tough love" }, diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 679c68841e..83629f483a 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -26,6 +26,7 @@ final class LoopInsights_Coordinator: ObservableObject { let dataAggregator: LoopInsights_DataAggregator let aiAnalysis: LoopInsights_AIAnalysis let suggestionStore: LoopInsights_SuggestionStore + let goalStore: LoopInsights_GoalStore /// Background monitor for proactive suggestions (lazy-initialized) lazy var backgroundMonitor: LoopInsights_BackgroundMonitor = LoopInsights_BackgroundMonitor(coordinator: self) @@ -62,6 +63,7 @@ final class LoopInsights_Coordinator: ObservableObject { self.dataAggregator = LoopInsights_DataAggregator(dataProvider: bridge) self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared + self.goalStore = LoopInsights_GoalStore.shared } /// Initialize with test data fixtures (for simulator/developer mode). @@ -73,6 +75,7 @@ final class LoopInsights_Coordinator: ObservableObject { self.dataAggregator = LoopInsights_DataAggregator(dataProvider: testDataProvider) self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared + self.goalStore = LoopInsights_GoalStore.shared } /// Factory method: creates a Coordinator with test data if available and enabled, diff --git a/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift b/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift new file mode 100644 index 0000000000..6c0328b119 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift @@ -0,0 +1,384 @@ +// +// LoopInsights_GoalStore.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - Goal Type + +/// Types of clinical goals users can track +enum LoopInsightsGoalType: String, Codable, CaseIterable, Identifiable { + case tirTarget = "tir_target" + case a1cTarget = "a1c_target" + case hypoReduction = "hypo_reduction" + case custom = "custom" + + var id: String { rawValue } + + var displayName: String { + switch self { + case .tirTarget: + return NSLocalizedString("Time in Range", comment: "LoopInsights goal type: TIR target") + case .a1cTarget: + return NSLocalizedString("A1C Estimate", comment: "LoopInsights goal type: A1C target") + case .hypoReduction: + return NSLocalizedString("Below Range", comment: "LoopInsights goal type: hypo reduction") + case .custom: + return NSLocalizedString("Custom Goal", comment: "LoopInsights goal type: custom") + } + } + + var icon: String { + switch self { + case .tirTarget: return "target" + case .a1cTarget: return "chart.line.downtrend.xyaxis" + case .hypoReduction: return "arrow.down.circle" + case .custom: return "star" + } + } + + var unit: String { + switch self { + case .tirTarget: return "%" + case .a1cTarget: return "%" + case .hypoReduction: return "%" + case .custom: return "" + } + } + + /// Default target value for each goal type + var defaultTarget: Double { + switch self { + case .tirTarget: return 80 + case .a1cTarget: return 6.5 + case .hypoReduction: return 2 + case .custom: return 0 + } + } + + /// Whether lower is better (e.g., A1C, below-range %) + var lowerIsBetter: Bool { + switch self { + case .tirTarget: return false + case .a1cTarget: return true + case .hypoReduction: return true + case .custom: return false + } + } +} + +// MARK: - Goal Model + +/// A user-set clinical goal with progress tracking +struct LoopInsightsGoal: Codable, Identifiable { + let id: UUID + let type: LoopInsightsGoalType + var targetValue: Double + var currentValue: Double + var customLabel: String? + let createdAt: Date + var achieved: Bool + + init(type: LoopInsightsGoalType, targetValue: Double, currentValue: Double = 0, customLabel: String? = nil) { + self.id = UUID() + self.type = type + self.targetValue = targetValue + self.currentValue = currentValue + self.customLabel = customLabel + self.createdAt = Date() + self.achieved = false + } + + /// Display label (uses customLabel for custom goals, otherwise type displayName) + var displayLabel: String { + if type == .custom, let label = customLabel, !label.isEmpty { + return label + } + return type.displayName + } + + /// Progress from 0.0 to 1.0 + var progress: Double { + guard targetValue != 0 else { return 0 } + if type.lowerIsBetter { + // For lower-is-better goals: progress increases as current drops toward/below target + guard currentValue > 0 else { return 1.0 } + // If current is at or below target, we're done + if currentValue <= targetValue { return 1.0 } + // Use a reasonable "starting" value to measure progress from + let startValue = max(targetValue * 3, currentValue) + let range = startValue - targetValue + guard range > 0 else { return 1.0 } + return min(1.0, max(0, (startValue - currentValue) / range)) + } else { + return min(1.0, max(0, currentValue / targetValue)) + } + } +} + +// MARK: - Mood Tag + +/// Mood tag for reflections +enum LoopInsightsMoodTag: String, Codable, CaseIterable, Identifiable { + case great + case good + case okay + case tough + + var id: String { rawValue } + + var displayName: String { + switch self { + case .great: return NSLocalizedString("Great", comment: "LoopInsights mood: great") + case .good: return NSLocalizedString("Good", comment: "LoopInsights mood: good") + case .okay: return NSLocalizedString("Okay", comment: "LoopInsights mood: okay") + case .tough: return NSLocalizedString("Tough", comment: "LoopInsights mood: tough") + } + } + + var emoji: String { + switch self { + case .great: return "😊" + case .good: return "🙂" + case .okay: return "😐" + case .tough: return "😓" + } + } + + var color: String { + switch self { + case .great: return "green" + case .good: return "blue" + case .okay: return "orange" + case .tough: return "red" + } + } +} + +// MARK: - Reflection Model + +/// A timestamped journal entry with mood tag +struct LoopInsightsReflection: Codable, Identifiable { + let id: UUID + let text: String + let mood: LoopInsightsMoodTag + let timestamp: Date + + init(text: String, mood: LoopInsightsMoodTag) { + self.id = UUID() + self.text = text + self.mood = mood + self.timestamp = Date() + } +} + +// MARK: - Cached Pattern Model + +/// An AI-discovered pattern cached per session +struct LoopInsightsCachedPattern: Codable, Identifiable { + let id: UUID + let type: String + let description: String + let severity: String + let detectedAt: Date + let expiresAt: Date + + init(type: String, description: String, severity: String, ttlMinutes: Int = 60) { + self.id = UUID() + self.type = type + self.description = description + self.severity = severity + self.detectedAt = Date() + self.expiresAt = Date().addingTimeInterval(TimeInterval(ttlMinutes * 60)) + } + + var isExpired: Bool { + return Date() > expiresAt + } +} + +// MARK: - Goal Store + +/// Singleton store for LoopInsights goals, reflections, and cached patterns. +/// UserDefaults-backed JSON persistence. +final class LoopInsights_GoalStore: ObservableObject { + + static let shared = LoopInsights_GoalStore() + + private static let goalsKey = "LoopInsights_Goals" + private static let reflectionsKey = "LoopInsights_Reflections" + private static let patternsKey = "LoopInsights_CachedPatterns" + + private let defaults = UserDefaults.standard + private let encoder = JSONEncoder() + private let decoder = JSONDecoder() + + @Published private(set) var goals: [LoopInsightsGoal] = [] + @Published private(set) var reflections: [LoopInsightsReflection] = [] + @Published private(set) var cachedPatterns: [LoopInsightsCachedPattern] = [] + + private init() { + loadGoals() + loadReflections() + loadPatterns() + } + + // MARK: - Goals API + + /// Add a new goal + @discardableResult + func addGoal(type: LoopInsightsGoalType, targetValue: Double, customLabel: String? = nil) -> LoopInsightsGoal { + let goal = LoopInsightsGoal(type: type, targetValue: targetValue, customLabel: customLabel) + goals.append(goal) + saveGoals() + return goal + } + + /// Update goal's current value and check achievement + func updateGoal(id: UUID, currentValue: Double) { + guard let index = goals.firstIndex(where: { $0.id == id }) else { return } + goals[index].currentValue = currentValue + + // Check if goal is achieved + let goal = goals[index] + if goal.type.lowerIsBetter { + goals[index].achieved = currentValue <= goal.targetValue + } else { + goals[index].achieved = currentValue >= goal.targetValue + } + + saveGoals() + } + + /// Delete a goal + func deleteGoal(id: UUID) { + goals.removeAll { $0.id == id } + saveGoals() + } + + /// All goals sorted by creation date (newest first) + var allGoals: [LoopInsightsGoal] { + return goals.sorted { $0.createdAt > $1.createdAt } + } + + // MARK: - Reflections API + + /// Add a new reflection + @discardableResult + func addReflection(text: String, mood: LoopInsightsMoodTag) -> LoopInsightsReflection { + let reflection = LoopInsightsReflection(text: text, mood: mood) + reflections.append(reflection) + saveReflections() + return reflection + } + + /// Delete a reflection + func deleteReflection(id: UUID) { + reflections.removeAll { $0.id == id } + saveReflections() + } + + /// All reflections sorted by timestamp (newest first) + var allReflections: [LoopInsightsReflection] { + return reflections.sorted { $0.timestamp > $1.timestamp } + } + + /// Most recent N reflections + func recentReflections(limit: Int = 5) -> [LoopInsightsReflection] { + return Array(allReflections.prefix(limit)) + } + + // MARK: - Pattern Cache API + + /// Cache AI-discovered patterns + func cachePatterns(_ patterns: [LoopInsightsCachedPattern]) { + cachedPatterns = patterns + savePatterns() + } + + /// Get non-expired cached patterns + var validPatterns: [LoopInsightsCachedPattern] { + return cachedPatterns.filter { !$0.isExpired } + } + + /// Clear expired patterns + func pruneExpiredPatterns() { + let before = cachedPatterns.count + cachedPatterns.removeAll { $0.isExpired } + if cachedPatterns.count != before { + savePatterns() + } + } + + // MARK: - Persistence + + private func loadGoals() { + guard let data = defaults.data(forKey: Self.goalsKey) else { + goals = [] + return + } + do { + goals = try decoder.decode([LoopInsightsGoal].self, from: data) + } catch { + print("[LoopInsights] Failed to decode goals: \(error)") + goals = [] + } + } + + private func saveGoals() { + do { + let data = try encoder.encode(goals) + defaults.set(data, forKey: Self.goalsKey) + } catch { + print("[LoopInsights] Failed to encode goals: \(error)") + } + } + + private func loadReflections() { + guard let data = defaults.data(forKey: Self.reflectionsKey) else { + reflections = [] + return + } + do { + reflections = try decoder.decode([LoopInsightsReflection].self, from: data) + } catch { + print("[LoopInsights] Failed to decode reflections: \(error)") + reflections = [] + } + } + + private func saveReflections() { + do { + let data = try encoder.encode(reflections) + defaults.set(data, forKey: Self.reflectionsKey) + } catch { + print("[LoopInsights] Failed to encode reflections: \(error)") + } + } + + private func loadPatterns() { + guard let data = defaults.data(forKey: Self.patternsKey) else { + cachedPatterns = [] + return + } + do { + cachedPatterns = try decoder.decode([LoopInsightsCachedPattern].self, from: data) + } catch { + print("[LoopInsights] Failed to decode cached patterns: \(error)") + cachedPatterns = [] + } + } + + private func savePatterns() { + do { + let data = try encoder.encode(cachedPatterns) + defaults.set(data, forKey: Self.patternsKey) + } catch { + print("[LoopInsights] Failed to encode cached patterns: \(error)") + } + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift b/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift new file mode 100644 index 0000000000..88baf28be8 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift @@ -0,0 +1,256 @@ +// +// LoopInsights_ReportGenerator.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import UIKit +import SwiftUI + +/// Generates HTML→PDF reports for LoopInsights data (stats, goals, patterns, reflections). +/// Reports can be shared via the system share sheet. +final class LoopInsights_ReportGenerator { + + // MARK: - HTML Generation + + /// Generate a complete HTML report from LoopInsights data. + static func generateHTML( + stats: LoopInsightsAggregatedStats?, + goals: [LoopInsightsGoal], + patterns: [LoopInsightsCachedPattern], + reflections: [LoopInsightsReflection] + ) -> String { + let dateFormatter = DateFormatter() + dateFormatter.dateStyle = .long + dateFormatter.timeStyle = .short + + let shortDateFormatter = DateFormatter() + shortDateFormatter.dateStyle = .medium + + let now = Date() + let periodLabel = stats?.period.displayName ?? "N/A" + let startDate: Date + if let stats = stats { + startDate = now.addingTimeInterval(-stats.period.timeInterval) + } else { + startDate = now.addingTimeInterval(-14 * 24 * 3600) + } + + var html = """ + + + + + + + +

LoopInsights Report

+
+ Period: \(shortDateFormatter.string(from: startDate)) – \(shortDateFormatter.string(from: now)) (\(periodLabel))
+ Generated: \(dateFormatter.string(from: now)) +
+ """ + + // Glucose Section + if let stats = stats { + html += """ +

Glucose

+ + + + + + + + + +
Time in Range (70-180)\(String(format: "%.1f%%", stats.glucoseStats.timeInRange))
Average Glucose\(String(format: "%.0f mg/dL", stats.glucoseStats.averageGlucose))
GMI (est. A1C)\(String(format: "%.1f%%", stats.glucoseStats.gmi))
Coefficient of Variation\(String(format: "%.1f%%", stats.glucoseStats.coefficientOfVariation))
Below Range (<70)\(String(format: "%.1f%%", stats.glucoseStats.timeBelowRange))
Above Range (>180)\(String(format: "%.1f%%", stats.glucoseStats.timeAboveRange))
Std Deviation\(String(format: "%.1f mg/dL", stats.glucoseStats.standardDeviation))
Readings\(stats.glucoseStats.sampleCount)
+ """ + + // Insulin Section + html += """ +

Insulin

+ + + + + +
Total Daily Dose\(String(format: "%.1f U/day", stats.insulinStats.totalDailyDose))
Basal\(String(format: "%.0f%%", stats.insulinStats.basalPercentage))
Bolus\(String(format: "%.0f%%", stats.insulinStats.bolusPercentage))
Correction Boluses\(stats.insulinStats.correctionBolusCount)
+ """ + + // Carbs Section + html += """ +

Carbs

+ + + + +
Daily Average\(String(format: "%.0f g/day", stats.carbStats.averageDailyCarbs))
Per Meal Average\(String(format: "%.0f g", stats.carbStats.averageCarbsPerMeal))
Meals Logged\(stats.carbStats.mealCount)
+ """ + } + + // Goals Section + if !goals.isEmpty { + html += "

Goals

" + for goal in goals { + let statusText = goal.achieved + ? "Achieved" + : "\(String(format: "%.1f", goal.currentValue))\(goal.type.unit) / \(String(format: "%.1f", goal.targetValue))\(goal.type.unit)" + html += """ +
+ \(escapeHTML(goal.displayLabel)) — \(statusText) +
+ """ + } + } + + // Patterns Section + if !patterns.isEmpty { + html += "

Patterns

" + for pattern in patterns { + html += """ +
+
\(escapeHTML(pattern.type))
+
\(escapeHTML(pattern.description))
+
+ """ + } + } + + // Reflections Section (last 5) + let recentReflections = Array(reflections.prefix(5)) + if !recentReflections.isEmpty { + html += "

Recent Reflections

" + let reflectionDateFormatter = DateFormatter() + reflectionDateFormatter.dateStyle = .medium + reflectionDateFormatter.timeStyle = .short + + for reflection in recentReflections { + html += """ +
+ \(reflectionDateFormatter.string(from: reflection.timestamp)) + \(reflection.mood.emoji) \(reflection.mood.displayName) +
\(escapeHTML(reflection.text))
+
+ """ + } + } + + // Disclaimer + html += """ +
+ This report is generated by LoopInsights for informational purposes only. It is not a substitute for + professional medical advice, diagnosis, or treatment. Always consult your healthcare provider before + making changes to your diabetes therapy. +
+ + + """ + + return html + } + + // MARK: - PDF Generation + + /// Generate a PDF file from HTML content. Returns URL to temp file. + static func generatePDF(from html: String) async -> URL? { + return await MainActor.run { + let formatter = UIMarkupTextPrintFormatter(markupText: html) + + let renderer = UIPrintPageRenderer() + renderer.addPrintFormatter(formatter, startingAtPageAt: 0) + + // A4 page size + let pageRect = CGRect(x: 0, y: 0, width: 595.2, height: 841.8) + let printableRect = pageRect.insetBy(dx: 36, dy: 36) + + renderer.setValue(NSValue(cgRect: pageRect), forKey: "paperRect") + renderer.setValue(NSValue(cgRect: printableRect), forKey: "printableRect") + + let pdfData = NSMutableData() + UIGraphicsBeginPDFContextToData(pdfData, pageRect, nil) + + for i in 0.. String { + return string + .replacingOccurrences(of: "&", with: "&") + .replacingOccurrences(of: "<", with: "<") + .replacingOccurrences(of: ">", with: ">") + .replacingOccurrences(of: "\"", with: """) + } +} + +// MARK: - Share Sheet (UIViewControllerRepresentable) + +/// SwiftUI wrapper for UIActivityViewController to share PDFs and other items. +struct LoopInsights_ActivityViewRepresentable: UIViewControllerRepresentable { + let activityItems: [Any] + let applicationActivities: [UIActivity]? + + init(activityItems: [Any], applicationActivities: [UIActivity]? = nil) { + self.activityItems = activityItems + self.applicationActivities = applicationActivities + } + + func makeUIViewController(context: Context) -> UIActivityViewController { + return UIActivityViewController( + activityItems: activityItems, + applicationActivities: applicationActivities + ) + } + + func updateUIViewController(_ uiViewController: UIActivityViewController, context: Context) {} +} diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index 8ab8053f8b..fdc13ccc19 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -28,6 +28,7 @@ struct LoopInsights_DashboardView: View { @State private var showingDebugLog = false @State private var showingChat = false @State private var showingTrendsInsights = false + @State private var showingGoals = false @State private var selectedRecord: LoopInsightsSuggestionRecord? @State private var developerTapCount = 0 @@ -146,6 +147,11 @@ struct LoopInsights_DashboardView: View { LoopInsights_TrendsInsightsView(coordinator: viewModel.coordinator) } } + .sheet(isPresented: $showingGoals) { + NavigationView { + LoopInsights_GoalsView(coordinator: viewModel.coordinator) + } + } .overlay(alignment: .top) { if let monitor = viewModel.backgroundMonitor, monitor.showBanner, @@ -711,6 +717,18 @@ struct LoopInsights_DashboardView: View { } } + Button(action: { showingGoals = true }) { + HStack { + Image(systemName: "target") + .foregroundColor(.accentColor) + Text(NSLocalizedString("Goals & Patterns", comment: "LoopInsights goals button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + Button(action: { showingChat = true }) { HStack { Image(systemName: "bubble.left.and.bubble.right") diff --git a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift new file mode 100644 index 0000000000..5e676958b3 --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift @@ -0,0 +1,753 @@ +// +// LoopInsights_GoalsView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Combined Goals, Pattern Discovery, and Reflections view. +/// Light/Dark mode agnostic — adapts to the system appearance. +/// Presented as sheet from Dashboard. +struct LoopInsights_GoalsView: View { + + let coordinator: LoopInsights_Coordinator + @Environment(\.dismiss) private var dismiss + @StateObject private var viewModel = GoalsViewModel() + + var body: some View { + List { + goalsSection + patternsSection + reflectionsSection + } + .navigationTitle(NSLocalizedString("Goals & Patterns", comment: "LoopInsights goals view title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(action: { dismiss() }) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.secondary) + } + } + ToolbarItem(placement: .navigationBarTrailing) { + Button(action: { viewModel.generateReport(coordinator: coordinator) }) { + Image(systemName: "square.and.arrow.up") + } + .disabled(viewModel.isGeneratingReport) + } + } + .onAppear { + viewModel.loadData(coordinator: coordinator) + } + .sheet(isPresented: $viewModel.showingShareSheet) { + if let url = viewModel.reportURL { + LoopInsights_ActivityViewRepresentable(activityItems: [url]) + } + } + .sheet(isPresented: $viewModel.showingAddGoal) { + NavigationView { + addGoalSheet + } + } + } + + // MARK: - Goals Section + + private var goalsSection: some View { + Section(header: HStack { + Image(systemName: "target") + Text(NSLocalizedString("Goals", comment: "LoopInsights goals section header")) + Spacer() + Button(action: { viewModel.showingAddGoal = true }) { + Image(systemName: "plus.circle.fill") + .foregroundColor(.green) + .font(.title3) + } + .buttonStyle(.plain) + }) { + if viewModel.goals.isEmpty { + emptyGoalsPlaceholder + } else { + ForEach(viewModel.goals) { goal in + goalRow(goal) + } + } + } + } + + private var emptyGoalsPlaceholder: some View { + VStack(spacing: 8) { + Image(systemName: "target") + .font(.system(size: 28)) + .foregroundColor(.secondary.opacity(0.5)) + Text(NSLocalizedString("No goals set yet", comment: "LoopInsights goals empty placeholder")) + .font(.subheadline) + .foregroundColor(.secondary) + Text(NSLocalizedString("Tap + to set a clinical goal like TIR > 80%", comment: "LoopInsights goals empty hint")) + .font(.caption) + .foregroundColor(.secondary.opacity(0.7)) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 12) + } + + private func goalRow(_ goal: LoopInsightsGoal) -> some View { + VStack(alignment: .leading, spacing: 8) { + HStack { + Image(systemName: goal.type.icon) + .foregroundColor(goal.achieved ? .green : .accentColor) + .frame(width: 20) + + Text(goal.displayLabel) + .font(.subheadline.weight(.semibold)) + + Spacer() + + if goal.achieved { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.green) + } else { + Text("\(String(format: "%.1f", goal.currentValue))\(goal.type.unit)") + .font(.caption.weight(.medium)) + .foregroundColor(.secondary) + } + + Button(action: { viewModel.deleteGoal(id: goal.id) }) { + Image(systemName: "trash") + .font(.caption) + .foregroundColor(.red.opacity(0.6)) + } + .buttonStyle(.plain) + } + + // Progress bar + GeometryReader { geo in + ZStack(alignment: .leading) { + RoundedRectangle(cornerRadius: 3) + .fill(Color.secondary.opacity(0.2)) + .frame(height: 6) + RoundedRectangle(cornerRadius: 3) + .fill(goal.achieved ? Color.green : Color.accentColor) + .frame(width: geo.size.width * goal.progress, height: 6) + } + } + .frame(height: 6) + + HStack { + Text(NSLocalizedString("Target:", comment: "LoopInsights goal target label")) + .font(.caption2) + .foregroundColor(.secondary) + if goal.type.lowerIsBetter { + Text("\u{2264} \(String(format: "%.1f", goal.targetValue))\(goal.type.unit)") + .font(.caption2.weight(.medium)) + .foregroundColor(.secondary) + } else { + Text("\u{2265} \(String(format: "%.1f", goal.targetValue))\(goal.type.unit)") + .font(.caption2.weight(.medium)) + .foregroundColor(.secondary) + } + + Spacer() + + if let tip = viewModel.goalTips[goal.id] { + Text(tip) + .font(.caption2) + .foregroundColor(.accentColor) + .lineLimit(1) + } + } + } + .padding(.vertical, 4) + } + + // MARK: - Patterns Section + + private var patternsSection: some View { + Section(header: HStack { + Image(systemName: "waveform.path.ecg") + Text(NSLocalizedString("Pattern Discovery", comment: "LoopInsights patterns section header")) + Spacer() + Button(action: { viewModel.refreshPatterns(coordinator: coordinator) }) { + if viewModel.isLoadingPatterns { + ProgressView() + .scaleEffect(0.8) + } else { + Image(systemName: "arrow.clockwise") + } + } + .buttonStyle(.plain) + .disabled(viewModel.isLoadingPatterns) + }) { + if viewModel.isLoadingPatterns && viewModel.patterns.isEmpty { + loadingRow(NSLocalizedString("Discovering patterns...", comment: "LoopInsights patterns loading")) + } else if viewModel.patterns.isEmpty { + VStack(spacing: 8) { + Image(systemName: "magnifyingglass") + .font(.system(size: 28)) + .foregroundColor(.secondary.opacity(0.5)) + Text(NSLocalizedString("Tap refresh to discover patterns", comment: "LoopInsights patterns empty")) + .font(.subheadline) + .foregroundColor(.secondary) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 12) + } else { + ForEach(viewModel.patterns) { pattern in + patternRow(pattern) + } + } + + if let error = viewModel.patternError { + HStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.red) + Text(error) + .font(.caption) + .foregroundColor(.red) + } + } + } + } + + private func patternRow(_ pattern: LoopInsightsCachedPattern) -> some View { + VStack(alignment: .leading, spacing: 6) { + HStack { + Text(pattern.type) + .font(.subheadline.weight(.semibold)) + Spacer() + Text(pattern.severity.capitalized) + .font(.caption2.weight(.bold)) + .foregroundColor(severityColor(pattern.severity)) + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background(severityColor(pattern.severity).opacity(0.15)) + .cornerRadius(6) + } + + Text(pattern.description) + .font(.caption) + .foregroundColor(.secondary) + .fixedSize(horizontal: false, vertical: true) + } + .padding(.vertical, 4) + } + + // MARK: - Reflections Section + + private var reflectionsSection: some View { + Section(header: HStack { + Image(systemName: "note.text") + Text(NSLocalizedString("Reflections", comment: "LoopInsights reflections section header")) + }) { + // Add reflection input + addReflectionRow + + // Recent reflections + ForEach(viewModel.reflections.prefix(10)) { reflection in + reflectionRow(reflection) + } + } + } + + private var addReflectionRow: some View { + VStack(spacing: 10) { + TextField( + NSLocalizedString("How's your day going?", comment: "LoopInsights reflection placeholder"), + text: $viewModel.reflectionText + ) + .font(.subheadline) + + HStack(spacing: 8) { + // Mood picker + ForEach(LoopInsightsMoodTag.allCases) { mood in + Button(action: { viewModel.selectedMood = mood }) { + Text(mood.emoji) + .font(.title3) + .padding(6) + .background( + Circle() + .fill(viewModel.selectedMood == mood + ? Color.accentColor.opacity(0.3) + : Color.secondary.opacity(0.1) + ) + ) + } + .buttonStyle(.plain) + } + + Spacer() + + Button(action: { viewModel.addReflection() }) { + Text(NSLocalizedString("Add", comment: "LoopInsights add reflection button")) + .font(.caption.weight(.semibold)) + .foregroundColor(.white) + .padding(.horizontal, 16) + .padding(.vertical, 8) + .background( + Capsule() + .fill(viewModel.reflectionText.trimmingCharacters(in: .whitespaces).isEmpty + ? Color.accentColor.opacity(0.4) + : Color.accentColor + ) + ) + } + .buttonStyle(.plain) + .disabled(viewModel.reflectionText.trimmingCharacters(in: .whitespaces).isEmpty) + } + } + } + + private func reflectionRow(_ reflection: LoopInsightsReflection) -> some View { + HStack(alignment: .top, spacing: 10) { + Text(reflection.mood.emoji) + .font(.title3) + + VStack(alignment: .leading, spacing: 4) { + Text(reflection.text) + .font(.subheadline) + .fixedSize(horizontal: false, vertical: true) + + HStack { + Text(Self.reflectionDateFormatter.string(from: reflection.timestamp)) + .font(.caption2) + .foregroundColor(.secondary) + Text(reflection.mood.displayName) + .font(.caption2.weight(.medium)) + .foregroundColor(moodColor(reflection.mood)) + } + } + + Spacer() + + Button(action: { viewModel.deleteReflection(id: reflection.id) }) { + Image(systemName: "xmark") + .font(.caption2) + .foregroundColor(.secondary) + } + .buttonStyle(.plain) + } + .padding(.vertical, 2) + } + + // MARK: - Add Goal Sheet + + private var addGoalSheet: some View { + VStack(spacing: 20) { + Text(NSLocalizedString("Add Goal", comment: "LoopInsights add goal title")) + .font(.headline) + + Picker(NSLocalizedString("Goal Type", comment: "LoopInsights goal type picker"), selection: $viewModel.newGoalType) { + ForEach(LoopInsightsGoalType.allCases) { type in + Text(type.displayName).tag(type) + } + } + .pickerStyle(.segmented) + .onChange(of: viewModel.newGoalType) { newType in + viewModel.newGoalTarget = newType.defaultTarget + } + + if viewModel.newGoalType == .custom { + TextField( + NSLocalizedString("Goal name", comment: "LoopInsights custom goal name"), + text: $viewModel.newGoalCustomLabel + ) + .textFieldStyle(.roundedBorder) + } + + HStack { + Text(NSLocalizedString("Target:", comment: "LoopInsights goal target")) + .foregroundColor(.secondary) + TextField( + "", + value: $viewModel.newGoalTarget, + format: .number + ) + .textFieldStyle(.roundedBorder) + .keyboardType(.decimalPad) + .frame(width: 100) + Text(viewModel.newGoalType.unit) + .foregroundColor(.secondary) + } + + HStack { + Button(NSLocalizedString("Cancel", comment: "Cancel")) { + viewModel.showingAddGoal = false + } + Spacer() + Button(NSLocalizedString("Save", comment: "Save goal")) { + viewModel.saveNewGoal() + } + .disabled(viewModel.newGoalTarget <= 0) + } + .padding(.top, 8) + + Spacer() + } + .padding() + .navigationTitle(NSLocalizedString("New Goal", comment: "LoopInsights new goal nav title")) + .navigationBarTitleDisplayMode(.inline) + } + + // MARK: - Shared Components + + private func loadingRow(_ text: String) -> some View { + VStack(spacing: 10) { + ProgressView() + .scaleEffect(1.1) + Text(text) + .font(.subheadline) + .foregroundColor(.secondary) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 16) + } + + // MARK: - Color Helpers + + private func severityColor(_ severity: String) -> Color { + switch severity.lowercased() { + case "high": return .red + case "medium": return .orange + default: return .yellow + } + } + + private func moodColor(_ mood: LoopInsightsMoodTag) -> Color { + switch mood { + case .great: return .green + case .good: return .blue + case .okay: return .orange + case .tough: return .red + } + } + + // MARK: - Formatters + + private static let reflectionDateFormatter: DateFormatter = { + let f = DateFormatter() + f.dateStyle = .short + f.timeStyle = .short + return f + }() +} + +// MARK: - Goals ViewModel + +private final class GoalsViewModel: ObservableObject { + + // MARK: - Published State + + @Published var goals: [LoopInsightsGoal] = [] + @Published var patterns: [LoopInsightsCachedPattern] = [] + @Published var reflections: [LoopInsightsReflection] = [] + + @Published var goalTips: [UUID: String] = [:] + + @Published var isLoadingPatterns = false + @Published var patternError: String? + + @Published var reflectionText = "" + @Published var selectedMood: LoopInsightsMoodTag = .good + + @Published var showingAddGoal = false + @Published var newGoalType: LoopInsightsGoalType = .tirTarget + @Published var newGoalTarget: Double = 80 + @Published var newGoalCustomLabel = "" + + @Published var showingShareSheet = false + @Published var isGeneratingReport = false + @Published var reportURL: URL? + + private let goalStore = LoopInsights_GoalStore.shared + + // MARK: - Load + + func loadData(coordinator: LoopInsights_Coordinator) { + goals = goalStore.allGoals + reflections = goalStore.allReflections + patterns = goalStore.validPatterns + goalStore.pruneExpiredPatterns() + + // Update goal current values from live data + updateGoalCurrentValues(coordinator: coordinator) + } + + private func updateGoalCurrentValues(coordinator: LoopInsights_Coordinator) { + Task { @MainActor in + guard let stats = try? await coordinator.dataAggregator.aggregateData( + period: LoopInsights_FeatureFlags.analysisPeriod + ) else { return } + + for goal in goals { + let current: Double + switch goal.type { + case .tirTarget: + current = stats.glucoseStats.timeInRange + case .a1cTarget: + current = stats.glucoseStats.gmi + case .hypoReduction: + current = stats.glucoseStats.timeBelowRange + case .custom: + continue + } + goalStore.updateGoal(id: goal.id, currentValue: current) + } + goals = goalStore.allGoals + } + } + + // MARK: - Goals Actions + + func saveNewGoal() { + let target: Double + if newGoalType == .custom { + target = newGoalTarget + } else { + target = newGoalTarget > 0 ? newGoalTarget : newGoalType.defaultTarget + } + goalStore.addGoal( + type: newGoalType, + targetValue: target, + customLabel: newGoalType == .custom ? newGoalCustomLabel : nil + ) + goals = goalStore.allGoals + showingAddGoal = false + // Reset form + newGoalType = .tirTarget + newGoalTarget = 80 + newGoalCustomLabel = "" + } + + func deleteGoal(id: UUID) { + goalStore.deleteGoal(id: id) + goals = goalStore.allGoals + goalTips.removeValue(forKey: id) + } + + // MARK: - Pattern Discovery + + func refreshPatterns(coordinator: LoopInsights_Coordinator) { + guard !isLoadingPatterns else { return } + isLoadingPatterns = true + patternError = nil + + Task { @MainActor in + do { + let stats = try await coordinator.dataAggregator.aggregateData(period: .thirtyDays) + let snapshot = try? coordinator.captureCurrentSnapshot() + let context = LoopInsights_ChatViewModel.buildTherapyContext( + snapshot: snapshot, + stats: stats + ) + + let goalsContext = buildGoalsContext() + let systemPrompt = buildPatternSystemPrompt() + let userPrompt = buildPatternUserPrompt(therapyContext: context, goalsContext: goalsContext) + + let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( + systemPrompt, + userPrompt: userPrompt + ) + + let parsed = parsePatternResponse(response) + goalStore.cachePatterns(parsed.patterns) + patterns = parsed.patterns + goalTips = parsed.tips + + isLoadingPatterns = false + } catch { + patternError = error.localizedDescription + isLoadingPatterns = false + } + } + } + + // MARK: - Reflections Actions + + func addReflection() { + let text = reflectionText.trimmingCharacters(in: .whitespacesAndNewlines) + guard !text.isEmpty else { return } + goalStore.addReflection(text: text, mood: selectedMood) + reflections = goalStore.allReflections + reflectionText = "" + selectedMood = .good + } + + func deleteReflection(id: UUID) { + goalStore.deleteReflection(id: id) + reflections = goalStore.allReflections + } + + // MARK: - Report Generation + + func generateReport(coordinator: LoopInsights_Coordinator) { + guard !isGeneratingReport else { return } + isGeneratingReport = true + + Task { @MainActor in + let stats = try? await coordinator.dataAggregator.aggregateData( + period: LoopInsights_FeatureFlags.analysisPeriod + ) + + let html = LoopInsights_ReportGenerator.generateHTML( + stats: stats, + goals: goals, + patterns: patterns, + reflections: reflections + ) + + if let url = await LoopInsights_ReportGenerator.generatePDF(from: html) { + reportURL = url + showingShareSheet = true + } + isGeneratingReport = false + } + } + + // MARK: - Prompt Building + + private func buildPatternSystemPrompt() -> String { + let personality = LoopInsights_FeatureFlags.aiPersonality + + return """ + You are an expert diabetes advisor analyzing 30 days of Loop AID data to discover patterns. \ + \(personality.promptInstruction) + + RESPONSE FORMAT — you MUST use exactly this structure: + + PATTERNS: + [TYPE] Pattern title + Description of the pattern (1-2 sentences). Include specific numbers. + SEVERITY: high/medium/low + + [TYPE] Another pattern title + Description. + SEVERITY: high/medium/low + + (List 3-6 patterns. Types can be: Overnight, Dawn, Post-Meal, Exercise, Weekend, Weekday, \ + Sick Day, Negative Basal, Variability, Insulin Resistance, or any descriptive type.) + + TIPS: + GOAL_INDEX:0 One-line actionable tip for the first goal + GOAL_INDEX:1 One-line actionable tip for the second goal + (One tip per active goal. Skip if no goals.) + + SPECIAL PATTERN DETECTION: + - Sick day flags: Look for sustained glucose >250 mg/dL for 6+ hours with unusually high \ + insulin requirements. If hourly averages show extended periods well above 250, flag it. + - Negative basal: Periods where basal delivery is near-zero or suspended for extended periods \ + indicating overcorrection. Check if basal % is unusually low or insulin stats suggest \ + frequent suspensions. + - Weekend vs weekday: Compare timing patterns in carb data and glucose patterns. + - Exercise correlation: Look for post-activity lows followed by rebounds. + - Goal-aware tips: Reference the user's active goals in suggestions. + """ + } + + private func buildPatternUserPrompt(therapyContext: String, goalsContext: String) -> String { + return """ + Analyze this 30-day data for patterns and provide actionable insights: + + \(therapyContext) + + \(goalsContext) + """ + } + + private func buildGoalsContext() -> String { + guard !goals.isEmpty else { return "" } + + var context = "USER'S ACTIVE GOALS:\n" + for (index, goal) in goals.enumerated() { + let status = goal.achieved ? "ACHIEVED" : "In Progress" + context += " Goal \(index): \(goal.displayLabel) — Target: \(String(format: "%.1f", goal.targetValue))\(goal.type.unit), Current: \(String(format: "%.1f", goal.currentValue))\(goal.type.unit) [\(status)]\n" + } + return context + } + + // MARK: - Response Parsing + + private func parsePatternResponse(_ response: String) -> (patterns: [LoopInsightsCachedPattern], tips: [UUID: String]) { + var patterns: [LoopInsightsCachedPattern] = [] + var tips: [UUID: String] = [:] + + let lines = response.components(separatedBy: "\n") + var section: String? + var currentType: String? + var currentDesc = "" + var currentSeverity = "medium" + + func flushPattern() { + if let type = currentType, !currentDesc.isEmpty { + patterns.append(LoopInsightsCachedPattern( + type: type, + description: currentDesc.trimmingCharacters(in: .whitespacesAndNewlines), + severity: currentSeverity + )) + } + currentType = nil + currentDesc = "" + currentSeverity = "medium" + } + + for line in lines { + let trimmed = line.trimmingCharacters(in: .whitespaces) + + if trimmed.uppercased().hasPrefix("PATTERNS") { + section = "patterns" + continue + } + if trimmed.uppercased().hasPrefix("TIPS") { + flushPattern() + section = "tips" + continue + } + + if section == "patterns" { + // Check for [TYPE] pattern + if trimmed.hasPrefix("[") { + flushPattern() + if let endBracket = trimmed.firstIndex(of: "]") { + let type = String(trimmed[trimmed.index(after: trimmed.startIndex).. Date: Thu, 12 Feb 2026 21:06:37 -0800 Subject: [PATCH 05/36] Phase 4 (biometrics): HealthKit biometric integration for enriched AI analysis Add HealthKit biometric data (heart rate, HRV, steps, sleep, active energy, weight) to the AI analysis and chat pipelines. Biometrics are read-only, independently authorized, and gracefully degrade when individual types are unavailable. New file: LoopInsights_HealthKitManager.swift Modified: Models, DataAggregator, AIAnalysis, ChatViewModel, Coordinator, FeatureFlags, SettingsView, DashboardView, pbxproj, Localizable.xcstrings --- Loop.xcodeproj/project.pbxproj | 4 + Loop/Localizable.xcstrings | 27 ++ .../LoopInsights_Coordinator.swift | 8 +- .../LoopInsights/LoopInsights_Models.swift | 41 +++ .../LoopInsights_FeatureFlags.swift | 10 + .../LoopInsights_AIAnalysis.swift | 100 ++++- .../LoopInsights_DataAggregator.swift | 33 +- .../LoopInsights_HealthKitManager.swift | 343 ++++++++++++++++++ .../LoopInsights_ChatViewModel.swift | 40 ++ .../LoopInsights_DashboardView.swift | 23 ++ .../LoopInsights_SettingsView.swift | 126 +++++++ 11 files changed, 751 insertions(+), 4 deletions(-) create mode 100644 Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index e371592cd5..9a74180232 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -614,6 +614,7 @@ 8D65F67A3D5AE1576364C287 /* LoopInsights_GoalStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */; }; 2BD98847D48B412626D8AFDF /* LoopInsights_GoalsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */; }; 1AD80F425B1DA688EBAC6653 /* LoopInsights_ReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */; }; + 4F318965F55EC7E03D840A9C /* LoopInsights_HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F042788E3C9B3B77B4B55BB2 /* LoopInsights_HealthKitManager.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1461,6 +1462,7 @@ 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_GoalStore.swift; sourceTree = ""; }; 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_GoalsView.swift; sourceTree = ""; }; 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ReportGenerator.swift; sourceTree = ""; }; + F042788E3C9B3B77B4B55BB2 /* LoopInsights_HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_HealthKitManager.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2771,6 +2773,7 @@ 186598BBCF20AF6BFDA7C65E /* LoopInsights_SuggestionStore.swift */, 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */, 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */, + F042788E3C9B3B77B4B55BB2 /* LoopInsights_HealthKitManager.swift */, ); path = LoopInsights; sourceTree = ""; @@ -3748,6 +3751,7 @@ 8D65F67A3D5AE1576364C287 /* LoopInsights_GoalStore.swift in Sources */, 2BD98847D48B412626D8AFDF /* LoopInsights_GoalsView.swift in Sources */, 1AD80F425B1DA688EBAC6653 /* LoopInsights_ReportGenerator.swift in Sources */, + 4F318965F55EC7E03D840A9C /* LoopInsights_HealthKitManager.swift in Sources */, 8D0F376E7E338ECB93EE03E0 /* LoopInsights_TrendsInsightsView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index fe56d7c174..14cede22ac 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -8677,6 +8677,9 @@ } } }, + "Authorize HealthKit Access" : { + "comment" : "LoopInsights authorize HealthKit button" + }, "Auto-Applied" : { "comment" : "LoopInsights suggestion status: automatically applied" }, @@ -9095,6 +9098,12 @@ "comment" : "Description of a glucose reading that is below the recommended target range.", "isCommentAutoGenerated" : true }, + "Biometric data is read-only and never leaves your device except as part of AI analysis prompts. Manage permissions in Settings > Health > Loop." : { + "comment" : "LoopInsights biometrics privacy note" + }, + "BIOMETRICS" : { + "comment" : "LoopInsights biometrics header" + }, "Bluetooth\nOff" : { "comment" : "Message to the user to that the bluetooth is off", "localizations" : { @@ -21043,6 +21052,12 @@ } } }, + "HealthKit is not available on this device." : { + "comment" : "LoopInsights HealthKit not available" + }, + "HealthKit permissions configured" : { + "comment" : "LoopInsights HealthKit permissions configured" + }, "High" : { "comment" : "LoopInsights confidence: high\nLoopInsights legend: high" }, @@ -21542,6 +21557,9 @@ "In-App Banner" : { "comment" : "LoopInsights notification style: banner" }, + "Include Biometric Data" : { + "comment" : "LoopInsights biometrics toggle" + }, "Increase" : { "comment" : "LoopInsights: increase direction" }, @@ -28299,6 +28317,9 @@ } } }, + "No Recommended Changes" : { + "comment" : "LoopInsights no changes title" + }, "No suggestions yet" : { "comment" : "LoopInsights empty history title" }, @@ -40595,6 +40616,9 @@ } } }, + "When enabled, LoopInsights includes heart rate, HRV, steps, sleep, active energy, and weight data in AI analysis. This helps the AI correlate lifestyle factors with glucose patterns." : { + "comment" : "LoopInsights biometrics description" + }, "When enabled, LoopInsights periodically analyzes your data and notifies you when it detects a therapy setting that could be improved." : { "comment" : "LoopInsights monitor description" }, @@ -41399,6 +41423,9 @@ } } }, + "Your current therapy settings look good based on the available data. Check back after more data has been generated for a fresh analysis." : { + "comment" : "LoopInsights no changes description" + }, "Your glucose is below %1$@. Are you sure you want to bolus?" : { "comment" : "Format string for simple bolus screen warning when glucose is below glucose warning limit.", "localizations" : { diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 83629f483a..8e5d9ea20b 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -27,6 +27,7 @@ final class LoopInsights_Coordinator: ObservableObject { let aiAnalysis: LoopInsights_AIAnalysis let suggestionStore: LoopInsights_SuggestionStore let goalStore: LoopInsights_GoalStore + let healthKitManager: LoopInsights_HealthKitManager? /// Background monitor for proactive suggestions (lazy-initialized) lazy var backgroundMonitor: LoopInsights_BackgroundMonitor = LoopInsights_BackgroundMonitor(coordinator: self) @@ -60,7 +61,11 @@ final class LoopInsights_Coordinator: ObservableObject { ) self.dataProviderBridge = bridge self.settingsWriter = settingsWriter - self.dataAggregator = LoopInsights_DataAggregator(dataProvider: bridge) + + let hkManager: LoopInsights_HealthKitManager? = LoopInsights_FeatureFlags.biometricsEnabled + ? LoopInsights_HealthKitManager() : nil + self.healthKitManager = hkManager + self.dataAggregator = LoopInsights_DataAggregator(dataProvider: bridge, healthKitManager: hkManager) self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared self.goalStore = LoopInsights_GoalStore.shared @@ -72,6 +77,7 @@ final class LoopInsights_Coordinator: ObservableObject { self.testDataProvider = testDataProvider self.dataProviderBridge = nil self.settingsWriter = nil + self.healthKitManager = nil self.dataAggregator = LoopInsights_DataAggregator(dataProvider: testDataProvider) self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 947da77f0f..a44dbcf0a6 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -594,6 +594,7 @@ struct LoopInsightsAggregatedStats: Codable { let glucoseStats: GlucoseStats let insulinStats: InsulinStats let carbStats: CarbStats + let biometricStats: BiometricStats? let generatedAt: Date struct GlucoseStats: Codable { @@ -622,6 +623,46 @@ struct LoopInsightsAggregatedStats: Codable { let averageCarbsPerMeal: Double // grams/meal let hourlyMealFrequency: [Int: Int] // hour → number of meals at that hour } + + struct BiometricStats: Codable { + let heartRate: HeartRateStats? + let hrv: HRVStats? + let steps: StepStats? + let sleep: SleepStats? + let activeEnergy: ActiveEnergyStats? + let weight: WeightStats? + } + + struct HeartRateStats: Codable { + let averageRestingHR: Double // bpm + let averageActiveHR: Double // bpm + let hourlyAverages: [Int: Double] // hour → avg bpm + } + + struct HRVStats: Codable { + let averageSDNN: Double // ms + let trend: Double // positive = improving + } + + struct StepStats: Codable { + let averageDailySteps: Double + let hourlyAverages: [Int: Double] // hour → avg steps + } + + struct SleepStats: Codable { + let averageDurationHours: Double + let averageBedtime: Double // seconds since midnight + let averageWakeTime: Double // seconds since midnight + } + + struct ActiveEnergyStats: Codable { + let averageDailyCalories: Double + } + + struct WeightStats: Codable { + let latestWeight: Double // kg + let weightTrend: Double // kg change over period + } } // MARK: - AI Analysis Request/Response diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index 47fb8e96d2..04d8e62610 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -28,6 +28,7 @@ struct LoopInsights_FeatureFlags { static let quietHoursStart = "LoopInsights_quietHoursStart" static let quietHoursEnd = "LoopInsights_quietHoursEnd" static let notificationStyle = "LoopInsights_notificationStyle" + static let biometricsEnabled = "LoopInsights_biometricsEnabled" } private static let defaults = UserDefaults.standard @@ -189,6 +190,15 @@ struct LoopInsights_FeatureFlags { set { defaults.set(newValue.rawValue, forKey: Keys.notificationStyle) } } + // MARK: - Biometrics + + /// Whether HealthKit biometric data (HR, HRV, steps, sleep, energy, weight) + /// is included in AI analysis. Defaults to false. + static var biometricsEnabled: Bool { + get { defaults.bool(forKey: Keys.biometricsEnabled) } + set { defaults.set(newValue, forKey: Keys.biometricsEnabled) } + } + // MARK: - AI Configuration /// User-configurable AI provider configuration. Persisted to UserDefaults (excluding API key). diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index 1b431d9763..47802f09c1 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -132,6 +132,26 @@ final class LoopInsights_AIAnalysis { 3. If time below range is >4%, prioritize safety (raise ISF or lower basal before anything else). 4. Suggestions are advisory only — the user and their healthcare provider make final decisions. + BIOMETRIC CONTEXT — When biometric data is provided: + - HEART RATE: Elevated resting HR or HR spikes can indicate stress, illness, caffeine, or \ + exercise — all affect insulin sensitivity. Morning HR acceleration may indicate caffeine \ + intake or dawn cortisol surge. A sudden sustained HR increase could signal illness (reduce \ + insulin sensitivity expectation). + - HRV: Lower HRV indicates higher physiological stress. Declining HRV trend may predict \ + increased insulin resistance. Use HRV context to temper or strengthen confidence in \ + setting change recommendations. + - STEPS/ACTIVITY: High activity days often increase insulin sensitivity (lower ISF, lower \ + basal may be appropriate). Sedentary days may require the opposite. Look for patterns \ + between activity levels and glucose outcomes. + - SLEEP: Poor sleep or short duration often increases insulin resistance the following day. \ + Late bedtimes or irregular schedules correlate with variable glucose patterns. Note sleep \ + timing when assessing overnight glucose behavior. + - WEIGHT: Weight trends affect total daily dose requirements. A gaining trend may require \ + increased basal/bolus; a losing trend may require decreases. + - CORRELATION: Cross-reference biometric patterns with glucose patterns before suggesting \ + setting changes. If glucose variability correlates with activity or sleep variation, \ + note this as a lifestyle factor rather than a settings problem. + RESPONSE FORMAT: Respond with valid JSON in this exact structure: { @@ -182,8 +202,8 @@ final class LoopInsights_AIAnalysis { prompt += "The historical data below was collected BEFORE these changes took effect. " prompt += "Do NOT suggest further changes to values that were already adjusted — the data does not yet reflect the new settings.\n\n" for change in relevantChanges { - let ago = Int(Date().timeIntervalSince(change.resolvedAt ?? change.createdAt) / 60) - prompt += "- Applied \(ago) minute(s) ago: " + let agoText = formatDuration(Date().timeIntervalSince(change.resolvedAt ?? change.createdAt)) + prompt += "- Applied \(agoText) ago: " for block in change.suggestion.timeBlocks { prompt += "\(formatTime(block.startTime))–\(formatTime(block.endTime)): \(String(format: "%.1f", block.currentValue)) → \(String(format: "%.1f", block.proposedValue)). " } @@ -259,6 +279,52 @@ final class LoopInsights_AIAnalysis { prompt += "- Meals Logged: \(stats.carbStats.mealCount)\n" prompt += "- Average Carbs per Meal: \(String(format: "%.0f", stats.carbStats.averageCarbsPerMeal)) g\n" + // Biometric stats (if available) + if let bio = stats.biometricStats { + prompt += "\n## Biometric Context\n" + + if let hr = bio.heartRate { + prompt += "### Heart Rate\n" + prompt += "- Average Resting HR: \(String(format: "%.0f", hr.averageRestingHR)) bpm\n" + prompt += "- Average Active HR: \(String(format: "%.0f", hr.averageActiveHR)) bpm\n" + if !hr.hourlyAverages.isEmpty { + prompt += "- Hourly HR averages: " + let sorted = hr.hourlyAverages.sorted { $0.key < $1.key } + prompt += sorted.map { "\(String(format: "%02d", $0.key)):00=\(String(format: "%.0f", $0.value))" }.joined(separator: ", ") + prompt += "\n" + } + } + + if let hrv = bio.hrv { + prompt += "### HRV (Heart Rate Variability)\n" + prompt += "- Average SDNN: \(String(format: "%.1f", hrv.averageSDNN)) ms\n" + prompt += "- Trend: \(hrv.trend >= 0 ? "+" : "")\(String(format: "%.1f", hrv.trend)) ms (\(hrv.trend >= 0 ? "improving" : "declining"))\n" + } + + if let steps = bio.steps { + prompt += "### Steps/Activity\n" + prompt += "- Average Daily Steps: \(String(format: "%.0f", steps.averageDailySteps))\n" + } + + if let sleep = bio.sleep { + prompt += "### Sleep\n" + prompt += "- Average Duration: \(String(format: "%.1f", sleep.averageDurationHours)) hours/night\n" + prompt += "- Average Bedtime: \(formatTimeFromSeconds(sleep.averageBedtime))\n" + prompt += "- Average Wake Time: \(formatTimeFromSeconds(sleep.averageWakeTime))\n" + } + + if let energy = bio.activeEnergy { + prompt += "### Active Energy\n" + prompt += "- Average Daily Active Calories: \(String(format: "%.0f", energy.averageDailyCalories)) kcal\n" + } + + if let weight = bio.weight { + prompt += "### Weight\n" + prompt += "- Latest Weight: \(String(format: "%.1f", weight.latestWeight)) kg (\(String(format: "%.1f", weight.latestWeight * 2.205)) lbs)\n" + prompt += "- Weight Trend: \(weight.weightTrend >= 0 ? "+" : "")\(String(format: "%.1f", weight.weightTrend)) kg over period\n" + } + } + // Computed: time-of-day glucose analysis prompt += "\n## Time-of-Day Analysis (computed from hourly averages)\n" let g = stats.glucoseStats @@ -432,4 +498,34 @@ final class LoopInsights_AIAnalysis { let displayHour = hours == 0 ? 12 : (hours > 12 ? hours - 12 : hours) return String(format: "%d:%02d %@", displayHour, minutes, period) } + + private func formatDuration(_ interval: TimeInterval) -> String { + let totalMinutes = Int(interval) / 60 + if totalMinutes < 60 { + return "\(totalMinutes) minute\(totalMinutes == 1 ? "" : "s")" + } + let hours = totalMinutes / 60 + let minutes = totalMinutes % 60 + if hours < 24 { + if minutes == 0 { + return "\(hours) hour\(hours == 1 ? "" : "s")" + } + return "\(hours) hour\(hours == 1 ? "" : "s") \(minutes) minute\(minutes == 1 ? "" : "s")" + } + let days = hours / 24 + let remainingHours = hours % 24 + if remainingHours == 0 { + return "\(days) day\(days == 1 ? "" : "s")" + } + return "\(days) day\(days == 1 ? "" : "s") \(remainingHours) hour\(remainingHours == 1 ? "" : "s")" + } + + private func formatTimeFromSeconds(_ seconds: Double) -> String { + let totalSeconds = Int(seconds) + let hours = totalSeconds / 3600 + let minutes = (totalSeconds % 3600) / 60 + let period = hours >= 12 ? "PM" : "AM" + let displayHour = hours == 0 ? 12 : (hours > 12 ? hours - 12 : hours) + return String(format: "%d:%02d %@", displayHour, minutes, period) + } } diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index 0c494fcbd4..a3818998a3 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -26,9 +26,11 @@ protocol LoopInsightsDataProviderProtocol: AnyObject { final class LoopInsights_DataAggregator { private weak var dataProvider: LoopInsightsDataProviderProtocol? + private var healthKitManager: LoopInsights_HealthKitManager? - init(dataProvider: LoopInsightsDataProviderProtocol) { + init(dataProvider: LoopInsightsDataProviderProtocol, healthKitManager: LoopInsights_HealthKitManager? = nil) { self.dataProvider = dataProvider + self.healthKitManager = healthKitManager } // MARK: - Public API @@ -45,12 +47,14 @@ final class LoopInsights_DataAggregator { async let glucoseStats = computeGlucoseStats(provider: dataProvider, start: startDate, end: endDate) async let insulinStats = computeInsulinStats(provider: dataProvider, start: startDate, end: endDate) async let carbStats = computeCarbStats(provider: dataProvider, start: startDate, end: endDate) + async let biometrics = fetchBiometricsIfEnabled(start: startDate, end: endDate) return LoopInsightsAggregatedStats( period: period, glucoseStats: try await glucoseStats, insulinStats: try await insulinStats, carbStats: try await carbStats, + biometricStats: try await biometrics, generatedAt: Date() ) } @@ -83,6 +87,33 @@ final class LoopInsights_DataAggregator { ) } + // MARK: - Biometrics + + private func fetchBiometricsIfEnabled(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.BiometricStats? { + guard LoopInsights_FeatureFlags.biometricsEnabled else { + print("[LoopInsights] Biometrics: flag is disabled, skipping") + return nil + } + // Use the injected manager, or create one on the fly. This handles the case + // where the Coordinator was created before biometrics was enabled. + let manager = healthKitManager ?? LoopInsights_HealthKitManager() + print("[LoopInsights] Biometrics: fetching from HealthKit (start: \(start), end: \(end))") + do { + let result = try await manager.fetchAllBiometrics(start: start, end: end) + print("[LoopInsights] Biometrics: HR=\(result.heartRate != nil), HRV=\(result.hrv != nil), steps=\(result.steps != nil), sleep=\(result.sleep != nil), energy=\(result.activeEnergy != nil), weight=\(result.weight != nil)") + // If every sub-stat is nil, return nil so the AI prompt doesn't get an empty section + if result.heartRate == nil && result.hrv == nil && result.steps == nil && + result.sleep == nil && result.activeEnergy == nil && result.weight == nil { + print("[LoopInsights] Biometrics: all sub-stats nil — no HealthKit data available") + return nil + } + return result + } catch { + print("[LoopInsights] Biometrics: fetch error — \(error)") + return nil + } + } + // MARK: - Glucose Stats private func computeGlucoseStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.GlucoseStats { diff --git a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift new file mode 100644 index 0000000000..777044301e --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift @@ -0,0 +1,343 @@ +// +// LoopInsights_HealthKitManager.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import HealthKit + +/// Standalone HealthKit manager for LoopInsights biometric data. +/// Read-only — never writes to HealthKit. Uses its own HKHealthStore instance +/// and requests authorization independently of Loop's existing HealthKit access. +final class LoopInsights_HealthKitManager: ObservableObject { + + private let healthStore = HKHealthStore() + + /// The biometric types we request read access to + private static let biometricTypes: Set = { + var types = Set() + if let hr = HKQuantityType.quantityType(forIdentifier: .heartRate) { types.insert(hr) } + if let hrv = HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN) { types.insert(hrv) } + if let steps = HKQuantityType.quantityType(forIdentifier: .stepCount) { types.insert(steps) } + if let sleep = HKObjectType.categoryType(forIdentifier: .sleepAnalysis) { types.insert(sleep) } + if let energy = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned) { types.insert(energy) } + if let weight = HKQuantityType.quantityType(forIdentifier: .bodyMass) { types.insert(weight) } + return types + }() + + /// Whether HealthKit is available on this device + static var isHealthDataAvailable: Bool { + return HKHealthStore.isHealthDataAvailable() + } + + private static let authRequestedKey = "LoopInsights_biometricAuthRequested" + + /// Whether we have requested authorization (persisted to UserDefaults so it survives view recreation) + @Published private(set) var authorizationRequested = UserDefaults.standard.bool(forKey: authRequestedKey) + + // MARK: - Authorization + + /// Request read-only authorization for biometric types. + /// iOS will show a separate HealthKit authorization sheet for these new types. + func requestAuthorization() async throws { + guard Self.isHealthDataAvailable else { + throw LoopInsightsError.insufficientData("HealthKit is not available on this device") + } + + try await healthStore.requestAuthorization(toShare: [], read: Self.biometricTypes) + + await MainActor.run { + authorizationRequested = true + UserDefaults.standard.set(true, forKey: Self.authRequestedKey) + } + } + + /// NOTE: HealthKit intentionally hides read authorization status for privacy. + /// `authorizationStatus(for:)` only reports *write/share* status. Since LoopInsights + /// is read-only (toShare: []), we cannot determine per-type read permission. + /// We track only whether authorization has been requested. + + // MARK: - Fetch All Biometrics + + /// Fetch all biometric data for the given date range. Each sub-stat is optional — + /// if a type isn't authorized or has no data, that sub-stat is nil. + func fetchAllBiometrics(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.BiometricStats { + let hrResult: LoopInsightsAggregatedStats.HeartRateStats? + do { hrResult = try await fetchHeartRateStats(start: start, end: end) } + catch { print("[LoopInsights] HK heart rate error: \(error)"); hrResult = nil } + + let hrvResult: LoopInsightsAggregatedStats.HRVStats? + do { hrvResult = try await fetchHRVStats(start: start, end: end) } + catch { print("[LoopInsights] HK HRV error: \(error)"); hrvResult = nil } + + let stepResult: LoopInsightsAggregatedStats.StepStats? + do { stepResult = try await fetchStepStats(start: start, end: end) } + catch { print("[LoopInsights] HK steps error: \(error)"); stepResult = nil } + + let sleepResult: LoopInsightsAggregatedStats.SleepStats? + do { sleepResult = try await fetchSleepStats(start: start, end: end) } + catch { print("[LoopInsights] HK sleep error: \(error)"); sleepResult = nil } + + let energyResult: LoopInsightsAggregatedStats.ActiveEnergyStats? + do { energyResult = try await fetchActiveEnergyStats(start: start, end: end) } + catch { print("[LoopInsights] HK active energy error: \(error)"); energyResult = nil } + + let weightResult: LoopInsightsAggregatedStats.WeightStats? + do { weightResult = try await fetchWeightStats(start: start, end: end) } + catch { print("[LoopInsights] HK weight error: \(error)"); weightResult = nil } + + return LoopInsightsAggregatedStats.BiometricStats( + heartRate: hrResult, + hrv: hrvResult, + steps: stepResult, + sleep: sleepResult, + activeEnergy: energyResult, + weight: weightResult + ) + } + + // MARK: - Heart Rate + + private func fetchHeartRateStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.HeartRateStats? { + guard let hrType = HKQuantityType.quantityType(forIdentifier: .heartRate) else { return nil } + + let samples = try await querySamples(type: hrType, start: start, end: end) + guard !samples.isEmpty else { return nil } + + let bpmUnit = HKUnit.count().unitDivided(by: .minute()) + let calendar = Calendar.current + + var restingValues: [Double] = [] + var activeValues: [Double] = [] + var hourlyBuckets: [Int: [Double]] = [:] + + for sample in samples { + let bpm = sample.quantity.doubleValue(for: bpmUnit) + let hour = calendar.component(.hour, from: sample.startDate) + hourlyBuckets[hour, default: []].append(bpm) + + // Heuristic: resting = samples between 11PM-6AM or HR < 80 + let isResting = (hour >= 23 || hour < 6) || bpm < 80 + if isResting { + restingValues.append(bpm) + } else { + activeValues.append(bpm) + } + } + + let avgResting = restingValues.isEmpty ? 0 : restingValues.reduce(0, +) / Double(restingValues.count) + let avgActive = activeValues.isEmpty ? 0 : activeValues.reduce(0, +) / Double(activeValues.count) + let hourlyAvgs = hourlyBuckets.mapValues { $0.reduce(0, +) / Double($0.count) } + + return LoopInsightsAggregatedStats.HeartRateStats( + averageRestingHR: avgResting, + averageActiveHR: avgActive, + hourlyAverages: hourlyAvgs + ) + } + + // MARK: - HRV + + private func fetchHRVStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.HRVStats? { + guard let hrvType = HKQuantityType.quantityType(forIdentifier: .heartRateVariabilitySDNN) else { return nil } + + let samples = try await querySamples(type: hrvType, start: start, end: end) + guard !samples.isEmpty else { return nil } + + let msUnit = HKUnit.secondUnit(with: .milli) + let values = samples.map { $0.quantity.doubleValue(for: msUnit) } + let average = values.reduce(0, +) / Double(values.count) + + // Trend: compare first half to second half + let midpoint = values.count / 2 + let firstHalf = Array(values.prefix(midpoint)) + let secondHalf = Array(values.suffix(from: midpoint)) + let firstAvg = firstHalf.isEmpty ? average : firstHalf.reduce(0, +) / Double(firstHalf.count) + let secondAvg = secondHalf.isEmpty ? average : secondHalf.reduce(0, +) / Double(secondHalf.count) + let trend = secondAvg - firstAvg + + return LoopInsightsAggregatedStats.HRVStats( + averageSDNN: average, + trend: trend + ) + } + + // MARK: - Steps + + private func fetchStepStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.StepStats? { + guard let stepType = HKQuantityType.quantityType(forIdentifier: .stepCount) else { return nil } + + let samples = try await querySamples(type: stepType, start: start, end: end) + guard !samples.isEmpty else { return nil } + + let calendar = Calendar.current + let countUnit = HKUnit.count() + + var dailyTotals: [String: Double] = [:] + var hourlyBuckets: [Int: [Double]] = [:] + + for sample in samples { + let count = sample.quantity.doubleValue(for: countUnit) + let dayKey = Self.dayKey(for: sample.startDate, calendar: calendar) + dailyTotals[dayKey, default: 0] += count + + let hour = calendar.component(.hour, from: sample.startDate) + hourlyBuckets[hour, default: []].append(count) + } + + let avgDaily = dailyTotals.isEmpty ? 0 : dailyTotals.values.reduce(0, +) / Double(dailyTotals.count) + let hourlyAvgs = hourlyBuckets.mapValues { $0.reduce(0, +) / Double($0.count) } + + return LoopInsightsAggregatedStats.StepStats( + averageDailySteps: avgDaily, + hourlyAverages: hourlyAvgs + ) + } + + // MARK: - Sleep + + private func fetchSleepStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.SleepStats? { + guard let sleepType = HKObjectType.categoryType(forIdentifier: .sleepAnalysis) else { return nil } + + let predicate = HKQuery.predicateForSamples(withStart: start, end: end, options: .strictStartDate) + let samples: [HKCategorySample] = try await withCheckedThrowingContinuation { continuation in + let query = HKSampleQuery( + sampleType: sleepType, + predicate: predicate, + limit: HKObjectQueryNoLimit, + sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)] + ) { _, results, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (results as? [HKCategorySample]) ?? []) + } + } + healthStore.execute(query) + } + + // Filter to inBed or asleep categories (exclude awake/inBed transitions) + let sleepSamples = samples.filter { sample in + let value = HKCategoryValueSleepAnalysis(rawValue: sample.value) + if value == .inBed { return true } + if #available(iOS 16.0, *) { + if value == .asleepUnspecified || value == .asleepCore || + value == .asleepDeep || value == .asleepREM { + return true + } + } + return false + } + + guard !sleepSamples.isEmpty else { return nil } + + let calendar = Calendar.current + + // Group sleep samples by night (use the date of the start as the night key) + var nightlyDurations: [String: TimeInterval] = [:] + var bedtimes: [Double] = [] + var wakeTimes: [Double] = [] + + for sample in sleepSamples { + let duration = sample.endDate.timeIntervalSince(sample.startDate) + let nightKey = Self.dayKey(for: sample.startDate, calendar: calendar) + nightlyDurations[nightKey, default: 0] += duration + + let bedComponents = calendar.dateComponents([.hour, .minute], from: sample.startDate) + let bedSeconds = Double(bedComponents.hour ?? 0) * 3600 + Double(bedComponents.minute ?? 0) * 60 + bedtimes.append(bedSeconds) + + let wakeComponents = calendar.dateComponents([.hour, .minute], from: sample.endDate) + let wakeSeconds = Double(wakeComponents.hour ?? 0) * 3600 + Double(wakeComponents.minute ?? 0) * 60 + wakeTimes.append(wakeSeconds) + } + + let avgDuration = nightlyDurations.isEmpty ? 0 : nightlyDurations.values.reduce(0, +) / Double(nightlyDurations.count) / 3600 + let avgBedtime = bedtimes.isEmpty ? 0 : bedtimes.reduce(0, +) / Double(bedtimes.count) + let avgWakeTime = wakeTimes.isEmpty ? 0 : wakeTimes.reduce(0, +) / Double(wakeTimes.count) + + return LoopInsightsAggregatedStats.SleepStats( + averageDurationHours: avgDuration, + averageBedtime: avgBedtime, + averageWakeTime: avgWakeTime + ) + } + + // MARK: - Active Energy + + private func fetchActiveEnergyStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.ActiveEnergyStats? { + guard let energyType = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned) else { return nil } + + let samples = try await querySamples(type: energyType, start: start, end: end) + guard !samples.isEmpty else { return nil } + + let kcalUnit = HKUnit.kilocalorie() + let calendar = Calendar.current + + var dailyTotals: [String: Double] = [:] + for sample in samples { + let kcal = sample.quantity.doubleValue(for: kcalUnit) + let dayKey = Self.dayKey(for: sample.startDate, calendar: calendar) + dailyTotals[dayKey, default: 0] += kcal + } + + let avgDaily = dailyTotals.isEmpty ? 0 : dailyTotals.values.reduce(0, +) / Double(dailyTotals.count) + + return LoopInsightsAggregatedStats.ActiveEnergyStats( + averageDailyCalories: avgDaily + ) + } + + // MARK: - Weight + + private func fetchWeightStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.WeightStats? { + guard let weightType = HKQuantityType.quantityType(forIdentifier: .bodyMass) else { return nil } + + let samples = try await querySamples(type: weightType, start: start, end: end) + guard !samples.isEmpty else { return nil } + + let kgUnit = HKUnit.gramUnit(with: .kilo) + let values = samples.map { $0.quantity.doubleValue(for: kgUnit) } + + let latest = values.last ?? 0 + let earliest = values.first ?? latest + let trend = latest - earliest + + return LoopInsightsAggregatedStats.WeightStats( + latestWeight: latest, + weightTrend: trend + ) + } + + // MARK: - Helpers + + /// Generic sample query wrapper + private func querySamples(type: HKQuantityType, start: Date, end: Date) async throws -> [HKQuantitySample] { + let predicate = HKQuery.predicateForSamples(withStart: start, end: end, options: .strictStartDate) + + return try await withCheckedThrowingContinuation { continuation in + let query = HKSampleQuery( + sampleType: type, + predicate: predicate, + limit: HKObjectQueryNoLimit, + sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)] + ) { _, results, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (results as? [HKQuantitySample]) ?? []) + } + } + healthStore.execute(query) + } + } + + /// Create a day-key string for grouping samples by date + private static func dayKey(for date: Date, calendar: Calendar) -> String { + let components = calendar.dateComponents([.year, .month, .day], from: date) + return "\(components.year ?? 0)-\(components.month ?? 0)-\(components.day ?? 0)" + } +} diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 73fd9b40e7..0d32a77d62 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -207,6 +207,37 @@ final class LoopInsights_ChatViewModel: ObservableObject { } } } + + if let bio = stats.biometricStats { + context += "\nBIOMETRIC DATA:\n" + + if let hr = bio.heartRate { + context += " Resting HR: \(String(format: "%.0f", hr.averageRestingHR)) bpm\n" + context += " Active HR: \(String(format: "%.0f", hr.averageActiveHR)) bpm\n" + } + + if let hrv = bio.hrv { + context += " HRV (SDNN): \(String(format: "%.1f", hrv.averageSDNN)) ms (trend: \(hrv.trend >= 0 ? "+" : "")\(String(format: "%.1f", hrv.trend)))\n" + } + + if let steps = bio.steps { + context += " Avg Daily Steps: \(String(format: "%.0f", steps.averageDailySteps))\n" + } + + if let sleep = bio.sleep { + context += " Avg Sleep: \(String(format: "%.1f", sleep.averageDurationHours)) hrs/night\n" + context += " Avg Bedtime: \(Self.formatTimeFromSeconds(sleep.averageBedtime))\n" + context += " Avg Wake: \(Self.formatTimeFromSeconds(sleep.averageWakeTime))\n" + } + + if let energy = bio.activeEnergy { + context += " Avg Active Calories: \(String(format: "%.0f", energy.averageDailyCalories)) kcal/day\n" + } + + if let weight = bio.weight { + context += " Weight: \(String(format: "%.1f", weight.latestWeight)) kg (trend: \(weight.weightTrend >= 0 ? "+" : "")\(String(format: "%.1f", weight.weightTrend)) kg)\n" + } + } } if context.isEmpty { @@ -224,4 +255,13 @@ final class LoopInsights_ChatViewModel: ObservableObject { let date = calendar.startOfDay(for: Date()).addingTimeInterval(seconds) return formatter.string(from: date) } + + private static func formatTimeFromSeconds(_ seconds: Double) -> String { + let totalSeconds = Int(seconds) + let hours = totalSeconds / 3600 + let minutes = (totalSeconds % 3600) / 60 + let period = hours >= 12 ? "PM" : "AM" + let displayHour = hours == 0 ? 12 : (hours > 12 ? hours - 12 : hours) + return String(format: "%d:%02d %@", displayHour, minutes, period) + } } diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index fdc13ccc19..6cc9f6c9d4 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -77,6 +77,9 @@ struct LoopInsights_DashboardView: View { if !viewModel.pendingSuggestions.isEmpty { pendingSuggestionsSection } + if viewModel.pendingSuggestions.isEmpty && viewModel.analysisResponse != nil && !viewModel.isAnalyzing { + noChangesSection + } navigationSection } .navigationTitle(NSLocalizedString("LoopInsights", comment: "LoopInsights dashboard title")) @@ -571,6 +574,26 @@ struct LoopInsights_DashboardView: View { } } + // MARK: - No Changes + + private var noChangesSection: some View { + Section { + VStack(spacing: 10) { + Image(systemName: "checkmark.seal.fill") + .font(.system(size: 36)) + .foregroundColor(.green) + Text(NSLocalizedString("No Recommended Changes", comment: "LoopInsights no changes title")) + .font(.headline) + Text(NSLocalizedString("Your current therapy settings look good based on the available data. Check back after more data has been generated for a fresh analysis.", comment: "LoopInsights no changes description")) + .font(.subheadline) + .foregroundColor(.secondary) + .multilineTextAlignment(.center) + } + .frame(maxWidth: .infinity) + .padding(.vertical, 8) + } + } + // MARK: - Assessment private var assessmentSection: some View { diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 2614f73a48..770c0a8722 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -46,6 +46,11 @@ struct LoopInsights_SettingsView: View { // Data @State private var showingClearHistory = false + // Biometrics + @State private var biometricsEnabled = LoopInsights_FeatureFlags.biometricsEnabled + @StateObject private var healthKitManager = LoopInsights_HealthKitManager() + @State private var isRequestingBiometricAuth = false + // Developer mode unlock @State private var developerTapCount = 0 @State private var showDeveloperUnlocked = false @@ -92,6 +97,7 @@ struct LoopInsights_SettingsView: View { aiConfigSection advancedAISection analysisOptionsSection + biometricsSection personalitySection backgroundMonitoringSection dataSection @@ -109,6 +115,7 @@ struct LoopInsights_SettingsView: View { selectedApplyMode = LoopInsights_FeatureFlags.applyMode selectedPersonality = LoopInsights_FeatureFlags.aiPersonality useTestData = LoopInsights_FeatureFlags.useTestData + biometricsEnabled = LoopInsights_FeatureFlags.biometricsEnabled apiKeyText = LoopInsights_SecureStorage.loadAPIKey() ?? "" // Clear stale endpoint path if it matches a different format's default @@ -630,6 +637,125 @@ struct LoopInsights_SettingsView: View { } } + // MARK: - Biometrics + + private var biometricsSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "heart.text.square") + .foregroundColor(.accentColor) + Text(NSLocalizedString("BIOMETRICS", comment: "LoopInsights biometrics header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + Toggle(NSLocalizedString("Include Biometric Data", comment: "LoopInsights biometrics toggle"), isOn: $biometricsEnabled) + .onChange(of: biometricsEnabled) { newValue in + LoopInsights_FeatureFlags.biometricsEnabled = newValue + if newValue && !healthKitManager.authorizationRequested { + requestBiometricAuthorization() + } + } + + Text(NSLocalizedString("When enabled, LoopInsights includes heart rate, HRV, steps, sleep, active energy, and weight data in AI analysis. This helps the AI correlate lifestyle factors with glucose patterns.", comment: "LoopInsights biometrics description")) + .font(.caption) + .foregroundColor(.secondary) + + if biometricsEnabled { + if !LoopInsights_HealthKitManager.isHealthDataAvailable { + HStack(spacing: 4) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.red) + Text(NSLocalizedString("HealthKit is not available on this device.", comment: "LoopInsights HealthKit not available")) + .font(.caption) + .foregroundColor(.red) + } + } else { + // Authorization button (show when not yet requested) + if !healthKitManager.authorizationRequested { + Button(action: requestBiometricAuthorization) { + HStack(spacing: 6) { + if isRequestingBiometricAuth { + ProgressView() + .progressViewStyle(.circular) + .scaleEffect(0.8) + } else { + Image(systemName: "heart.circle") + } + Text(NSLocalizedString("Authorize HealthKit Access", comment: "LoopInsights authorize HealthKit button")) + } + .font(.body.weight(.medium)) + .foregroundColor(.white) + .frame(maxWidth: .infinity) + .padding(.vertical, 10) + .background(Color.pink) + .cornerRadius(10) + } + .disabled(isRequestingBiometricAuth) + .buttonStyle(.plain) + } else { + // Authorization sheet was shown — we can't see read permission status + HStack(spacing: 4) { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.green) + Text(NSLocalizedString("HealthKit permissions configured", comment: "LoopInsights HealthKit permissions configured")) + .font(.caption) + .foregroundColor(.green) + } + } + + // Biometric types list (two columns) + HStack(alignment: .top, spacing: 16) { + VStack(alignment: .leading, spacing: 6) { + biometricTypeLabel("Heart Rate", icon: "heart.fill") + biometricTypeLabel("HRV", icon: "waveform.path.ecg") + biometricTypeLabel("Steps", icon: "figure.walk") + } + VStack(alignment: .leading, spacing: 6) { + biometricTypeLabel("Sleep", icon: "bed.double.fill") + biometricTypeLabel("Energy", icon: "flame.fill") + biometricTypeLabel("Weight", icon: "scalemass.fill") + } + } + + Text(NSLocalizedString("Biometric data is read-only and never leaves your device except as part of AI analysis prompts. Manage permissions in Settings > Health > Loop.", comment: "LoopInsights biometrics privacy note")) + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + } + } + + private func biometricTypeLabel(_ name: String, icon: String) -> some View { + HStack(spacing: 6) { + Image(systemName: icon) + .foregroundColor(.pink) + .font(.caption) + .frame(width: 16) + Text(name) + .font(.caption) + .foregroundColor(.primary) + } + } + + private func requestBiometricAuthorization() { + isRequestingBiometricAuth = true + Task { + do { + try await healthKitManager.requestAuthorization() + } catch { + print("[LoopInsights] HealthKit authorization error: \(error)") + } + await MainActor.run { + isRequestingBiometricAuth = false + } + } + } + // MARK: - AI Personality private var personalitySection: some View { From e62c500623780e2ce3217002f40625b4b0500338 Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 13 Feb 2026 10:38:49 -0800 Subject: [PATCH 06/36] Phase 5: AGP chart, Clarity-style dashboard, caffeine tracker, meal insights, Nightscout import - Ambulatory Glucose Profile (AGP) chart with percentile bands and median line - Clarity-style dashboard redesign: Glucose card, Time in Range 5-zone stacked bar, capsule period picker with exact Clarity colors (#C14F0C, #F0CA4C, #74A52E, #D36265, #7F0302) - Caffeine tracker with half-life decay modeling and glucose correlation - Meal insights with food response analysis and per-meal glucose impact - Nightscout data import support - Advanced analyzers for pattern detection - 5-zone TIR breakdown (Very High/High/In Range/Low/Very Low) replacing 3-zone model - Compact list section spacing for tighter dashboard layout - Chat view UI refinements --- Loop.xcodeproj/project.pbxproj | 32 ++ Loop/Localizable.xcstrings | 246 ++++++++++-- .../LoopInsights_Coordinator.swift | 89 +++++ .../LoopInsights/LoopInsights_Models.swift | 29 +- .../LoopInsights_Phase5Models.swift | 233 +++++++++++ .../LoopInsights_FeatureFlags.swift | 38 ++ .../LoopInsights_AIAnalysis.swift | 36 +- .../LoopInsights_AdvancedAnalyzers.swift | 275 +++++++++++++ .../LoopInsights_CaffeineTracker.swift | 218 ++++++++++ .../LoopInsights_DataAggregator.swift | 245 +++++++++++- .../LoopInsights_FoodResponseAnalyzer.swift | 240 +++++++++++ .../LoopInsights_HealthKitManager.swift | 100 ++++- .../LoopInsights_NightscoutImporter.swift | 213 ++++++++++ .../LoopInsights_DashboardViewModel.swift | 31 +- .../LoopInsights_AGPChartView.swift | 295 ++++++++++++++ .../LoopInsights_CaffeineLogView.swift | 350 ++++++++++++++++ .../LoopInsights/LoopInsights_ChatView.swift | 263 +++++------- .../LoopInsights_DashboardView.swift | 287 ++++++++++++-- .../LoopInsights_MealInsightsView.swift | 373 ++++++++++++++++++ .../LoopInsights_SettingsView.swift | 221 +++++++++++ 20 files changed, 3560 insertions(+), 254 deletions(-) create mode 100644 Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_NightscoutImporter.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index 9a74180232..e20035d467 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -615,6 +615,14 @@ 2BD98847D48B412626D8AFDF /* LoopInsights_GoalsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */; }; 1AD80F425B1DA688EBAC6653 /* LoopInsights_ReportGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */; }; 4F318965F55EC7E03D840A9C /* LoopInsights_HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = F042788E3C9B3B77B4B55BB2 /* LoopInsights_HealthKitManager.swift */; }; + A81C5355140C9F091E110844 /* LoopInsights_Phase5Models.swift in Sources */ = {isa = PBXBuildFile; fileRef = 112AA1E5DF9955A367071297 /* LoopInsights_Phase5Models.swift */; }; + 09D1557DBE4E2CCCBABB5DD6 /* LoopInsights_AdvancedAnalyzers.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80638223202E2E350012A3C /* LoopInsights_AdvancedAnalyzers.swift */; }; + 7B0334A1033FF6A25BA39AEF /* LoopInsights_FoodResponseAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C86CC2627D9F765D1343AE0 /* LoopInsights_FoodResponseAnalyzer.swift */; }; + 295D246CCA16B260E308B55E /* LoopInsights_CaffeineTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3C90FF4FDA0C10D7AA5F0AF /* LoopInsights_CaffeineTracker.swift */; }; + B06E0BB85384E44B6825C9BE /* LoopInsights_NightscoutImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A8AD126B8E7A33598AE1087 /* LoopInsights_NightscoutImporter.swift */; }; + 51352D31C402E3F02651F5D2 /* LoopInsights_AGPChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71CC769321E323ACED2E8EC /* LoopInsights_AGPChartView.swift */; }; + 230C0B8EE9C8E341C7D3C395 /* LoopInsights_MealInsightsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C47D229ABCAB8F4394631D /* LoopInsights_MealInsightsView.swift */; }; + 4CC0E7120DEF811F7D268665 /* LoopInsights_CaffeineLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1463,6 +1471,14 @@ 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_GoalsView.swift; sourceTree = ""; }; 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_ReportGenerator.swift; sourceTree = ""; }; F042788E3C9B3B77B4B55BB2 /* LoopInsights_HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_HealthKitManager.swift; sourceTree = ""; }; + 112AA1E5DF9955A367071297 /* LoopInsights_Phase5Models.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_Phase5Models.swift; sourceTree = ""; }; + A80638223202E2E350012A3C /* LoopInsights_AdvancedAnalyzers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AdvancedAnalyzers.swift; sourceTree = ""; }; + 4C86CC2627D9F765D1343AE0 /* LoopInsights_FoodResponseAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_FoodResponseAnalyzer.swift; sourceTree = ""; }; + B3C90FF4FDA0C10D7AA5F0AF /* LoopInsights_CaffeineTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_CaffeineTracker.swift; sourceTree = ""; }; + 0A8AD126B8E7A33598AE1087 /* LoopInsights_NightscoutImporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_NightscoutImporter.swift; sourceTree = ""; }; + B71CC769321E323ACED2E8EC /* LoopInsights_AGPChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AGPChartView.swift; sourceTree = ""; }; + D9C47D229ABCAB8F4394631D /* LoopInsights_MealInsightsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_MealInsightsView.swift; sourceTree = ""; }; + 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_CaffeineLogView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2726,6 +2742,7 @@ children = ( 1B34C595DAA79BB6836BA60C /* LoopInsights_Models.swift */, 20EB0E3DF88A1303EA105423 /* LoopInsights_SuggestionRecord.swift */, + 112AA1E5DF9955A367071297 /* LoopInsights_Phase5Models.swift */, ); path = LoopInsights; sourceTree = ""; @@ -2750,6 +2767,9 @@ CF876C4BBAD67542E1E0A979 /* LoopInsights_MonitorSettingsView.swift */, EE7AAD3549253FE16941E10D /* LoopInsights_TrendsInsightsView.swift */, 49486DDC8FCBA7675B005E62 /* LoopInsights_GoalsView.swift */, + B71CC769321E323ACED2E8EC /* LoopInsights_AGPChartView.swift */, + D9C47D229ABCAB8F4394631D /* LoopInsights_MealInsightsView.swift */, + 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */, ); path = LoopInsights; sourceTree = ""; @@ -2774,6 +2794,10 @@ 0065F6CA2B051676FEE0B7D5 /* LoopInsights_GoalStore.swift */, 91CA9C204385601A795C4DF2 /* LoopInsights_ReportGenerator.swift */, F042788E3C9B3B77B4B55BB2 /* LoopInsights_HealthKitManager.swift */, + A80638223202E2E350012A3C /* LoopInsights_AdvancedAnalyzers.swift */, + 4C86CC2627D9F765D1343AE0 /* LoopInsights_FoodResponseAnalyzer.swift */, + B3C90FF4FDA0C10D7AA5F0AF /* LoopInsights_CaffeineTracker.swift */, + 0A8AD126B8E7A33598AE1087 /* LoopInsights_NightscoutImporter.swift */, ); path = LoopInsights; sourceTree = ""; @@ -3753,6 +3777,14 @@ 1AD80F425B1DA688EBAC6653 /* LoopInsights_ReportGenerator.swift in Sources */, 4F318965F55EC7E03D840A9C /* LoopInsights_HealthKitManager.swift in Sources */, 8D0F376E7E338ECB93EE03E0 /* LoopInsights_TrendsInsightsView.swift in Sources */, + A81C5355140C9F091E110844 /* LoopInsights_Phase5Models.swift in Sources */, + 09D1557DBE4E2CCCBABB5DD6 /* LoopInsights_AdvancedAnalyzers.swift in Sources */, + 7B0334A1033FF6A25BA39AEF /* LoopInsights_FoodResponseAnalyzer.swift in Sources */, + 295D246CCA16B260E308B55E /* LoopInsights_CaffeineTracker.swift in Sources */, + B06E0BB85384E44B6825C9BE /* LoopInsights_NightscoutImporter.swift in Sources */, + 51352D31C402E3F02651F5D2 /* LoopInsights_AGPChartView.swift in Sources */, + 230C0B8EE9C8E341C7D3C395 /* LoopInsights_MealInsightsView.swift in Sources */, + 4CC0E7120DEF811F7D268665 /* LoopInsights_CaffeineLogView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 14cede22ac..3c3741cef6 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -591,6 +591,10 @@ "comment" : "A small label that shows the percentage change in a time block's value. The argument is the string “%+.0f”.", "isCommentAutoGenerated" : true }, + "%" : { + "comment" : "Abbreviation for percentage.", + "isCommentAutoGenerated" : true + }, "%.1f%% time above range in %@" : { "comment" : "LoopInsights pattern detail: consistent highs\nLoopInsights pattern detail: consistent highs moderate", "localizations" : { @@ -3443,6 +3447,9 @@ } } }, + "24h Total" : { + "comment" : "LoopInsights caffeine 24h total" + }, "30 Days" : { "comment" : "LoopInsights analysis period: 30 days" }, @@ -3565,6 +3572,9 @@ } } }, + "70–180 mg/dL" : { + "comment" : "LoopInsights TIR target value" + }, "90 Days" : { "comment" : "LoopInsights analysis period: 90 days" }, @@ -5464,6 +5474,9 @@ } } }, + "Add Entry" : { + "comment" : "LoopInsights caffeine add entry" + }, "Add Goal" : { "comment" : "LoopInsights add goal title" }, @@ -5935,9 +5948,18 @@ "Advanced API Settings" : { "comment" : "LoopInsights advanced settings toggle" }, + "ADVANCED FEATURES" : { + "comment" : "LoopInsights Phase 5 features header" + }, "Advisor" : { "comment" : "LoopInsights trends tab: advisor" }, + "AGP Chart" : { + "comment" : "LoopInsights AGP toggle" + }, + "AI Advice" : { + "comment" : "LoopInsights AI advice header" + }, "AI Assessment" : { "comment" : "LoopInsights assessment header" }, @@ -6572,6 +6594,12 @@ "Am I bolusing enough for meals?" : { "comment" : "LoopInsights quick ask: meal bolus" }, + "Ambulatory Glucose Profile" : { + "comment" : "LoopInsights AGP chart title" + }, + "Amount (mg)" : { + "comment" : "LoopInsights caffeine amount\nLoopInsights caffeine amount placeholder" + }, "Amount Consumed" : { "comment" : "Label for carb quantity entry row on carb entry screen", "localizations" : { @@ -7180,9 +7208,6 @@ "ANALYSIS OPTIONS" : { "comment" : "LoopInsights analysis options header" }, - "Analysis Period" : { - "comment" : "LoopInsights period picker label" - }, "Analyze %@" : { "comment" : "LoopInsights analyze button" }, @@ -7192,6 +7217,15 @@ "Analyze my last 3 days" : { "comment" : "LoopInsights quick ask: recent analysis" }, + "Analyzes glucose responses by food type. Enables Meal Insights view with meal debrief cards and pre-meal AI advisor." : { + "comment" : "LoopInsights food response description" + }, + "Analyzes your glucose, insulin, and carb data to suggest Basal Rate, Carb Ratio, and ISF adjustments. Select a setting and lookback period, then tap Analyze. All changes require approval" : { + "comment" : "LoopInsights subtitle" + }, + "Analyzing meal data..." : { + "comment" : "LoopInsights meals loading" + }, "Analyzing..." : { "comment" : "LoopInsights analyzing\nLoopInsights analyzing all" }, @@ -8326,15 +8360,15 @@ "Ask" : { "comment" : "LoopInsights banner ask button" }, + "Ask a question about your data" : { + "comment" : "LoopInsights chat empty state" + }, "Ask a question..." : { "comment" : "LoopInsights chat input placeholder" }, "Ask LoopInsights" : { "comment" : "LoopInsights chat button\nLoopInsights chat title" }, - "Ask me anything about your diabetes management" : { - "comment" : "LoopInsights chat empty state title" - }, "Ask questions about your glucose trends, therapy settings, and get personalized advice." : { "comment" : "LoopInsights trends advisor subtitle" }, @@ -8726,6 +8760,9 @@ "Avg" : { "comment" : "LoopInsights trends avg chip" }, + "Avg Carbs" : { + "comment" : "LoopInsights avg carbs label" + }, "Background Monitoring" : { "comment" : "LoopInsights background monitoring row\nLoopInsights monitor settings title" }, @@ -10233,6 +10270,15 @@ } } }, + "Caffeine Impact" : { + "comment" : "LoopInsights pattern: caffeine correlation" + }, + "Caffeine Tracker" : { + "comment" : "LoopInsights caffeine button\nLoopInsights caffeine title" + }, + "Caffeine Tracking" : { + "comment" : "LoopInsights caffeine toggle" + }, "Cancel" : { "comment" : "Button label for cancel\nButton text to cancel\nCancel\nCancel button\nCancel button for reset loop alert\nCancel export button title\nLoopInsights pre-fill cancel button\nThe title of the cancel action in an action sheet", "localizations" : { @@ -12354,6 +12400,9 @@ } } }, + "Circadian Analysis" : { + "comment" : "LoopInsights circadian toggle" + }, "Clear All" : { "comment" : "LoopInsights clear all button" }, @@ -13541,6 +13590,9 @@ "Connected" : { "comment" : "LoopInsights connection success" }, + "Connected to Nightscout" : { + "comment" : "LoopInsights nightscout connected" + }, "Consistent Highs" : { "comment" : "LoopInsights pattern: consistent highs" }, @@ -14531,6 +14583,12 @@ } } }, + "Custom Caffeine Entry" : { + "comment" : "LoopInsights custom caffeine header" + }, + "Custom Entry" : { + "comment" : "LoopInsights caffeine custom entry" + }, "Custom Goal" : { "comment" : "LoopInsights goal type: custom" }, @@ -15560,6 +15618,9 @@ } } }, + "Delete Entry" : { + "comment" : "LoopInsights delete caffeine entry" + }, "Delete Food" : { "localizations" : { "da" : { @@ -17066,6 +17127,12 @@ "Each analysis uses your configured AI provider and consumes API credits. With daily frequency, expect ~3 API calls per day (one per setting type)." : { "comment" : "LoopInsights monitor API usage note" }, + "Edit Caffeine" : { + "comment" : "LoopInsights edit caffeine title" + }, + "Edit Entry" : { + "comment" : "LoopInsights edit caffeine header" + }, "Enable\nBluetooth" : { "comment" : "Message to the user to enable bluetooth", "localizations" : { @@ -17391,6 +17458,9 @@ } } }, + "Enables circadian glucose profiling, dawn phenomenon detection, negative basal awareness, and HRV-based stress scoring. Enriches AI analysis with sleep/wake patterns." : { + "comment" : "LoopInsights circadian description" + }, "Encouraging and positive. Celebrates your wins and gently explains areas for improvement." : { "comment" : "LoopInsights personality desc: supportive coach" }, @@ -18237,6 +18307,9 @@ } } }, + "Estimated Caffeine Level" : { + "comment" : "LoopInsights caffeine level label" + }, "Event History" : { "comment" : "Segmented button title for insulin delivery log event history", "localizations" : { @@ -19419,6 +19492,12 @@ "Fixtures loaded" : { "comment" : "LoopInsights fixtures loaded" }, + "Food Response Analysis" : { + "comment" : "LoopInsights food response toggle" + }, + "Food Sensitivity" : { + "comment" : "LoopInsights pattern: food sensitivity" + }, "Food Type" : { "comment" : "Label for food type entry on add favorite food screen", "localizations" : { @@ -19870,6 +19949,9 @@ "Frequent Lows" : { "comment" : "LoopInsights pattern: frequent lows" }, + "Frequent Suspensions" : { + "comment" : "LoopInsights pattern: negative basal" + }, "Frequently asked questions about alerts" : { "comment" : "Label for link to see frequently asked questions", "localizations" : { @@ -20151,8 +20233,11 @@ } } }, + "Getting advice..." : { + "comment" : "LoopInsights getting advice" + }, "Glucose" : { - "comment" : "LoopInsights trends stats glucose\nThe title of the glucose and prediction graph\nTitle for predicted glucose chart on bolus screen", + "comment" : "LoopInsights glucose card title\nLoopInsights trends stats glucose\nThe title of the glucose and prediction graph\nTitle for predicted glucose chart on bolus screen", "localizations" : { "ar" : { "stringUnit" : { @@ -20976,6 +21061,9 @@ } } }, + "GMI" : { + "comment" : "LoopInsights GMI label" + }, "GMI (est. A1C)" : { "comment" : "LoopInsights GMI label" }, @@ -21059,7 +21147,7 @@ "comment" : "LoopInsights HealthKit permissions configured" }, "High" : { - "comment" : "LoopInsights confidence: high\nLoopInsights legend: high" + "comment" : "LoopInsights TIR high\nLoopInsights confidence: high\nLoopInsights legend: high" }, "High Glucose" : { "localizations" : { @@ -21116,6 +21204,9 @@ "High Only" : { "comment" : "LoopInsights confidence filter: high only" }, + "High Stress Periods" : { + "comment" : "LoopInsights pattern: high stress" + }, "High Variability" : { "comment" : "LoopInsights pattern: high variability" }, @@ -21374,8 +21465,9 @@ } } }, - "I have access to your current therapy settings and recent glucose data. Try one of the suggestions below or type your own question." : { - "comment" : "LoopInsights chat empty state subtitle" + "https://your-site.herokuapp.com" : { + "comment" : "A placeholder text for the URL of a user's Nightscout site.", + "isCommentAutoGenerated" : true }, "If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." : { "comment" : "Focus modes descriptive text (1: app name)", @@ -21507,6 +21599,9 @@ } } }, + "Import glucose and treatment data from a Nightscout server as a supplemental data source." : { + "comment" : "LoopInsights nightscout description" + }, "In future versions of Loop these experiments may change, end up as standard parts of the Loop Algorithm, or be removed from Loop entirely. Please follow along in the Loop Zulip chat to stay informed of possible changes to these features." : { "comment" : "Algorithm Experiments description second paragraph.", "localizations" : { @@ -21554,6 +21649,9 @@ } } }, + "In Range" : { + "comment" : "LoopInsights TIR in range" + }, "In-App Banner" : { "comment" : "LoopInsights notification style: banner" }, @@ -23907,6 +24005,9 @@ "Last analysis: %@" : { "comment" : "LoopInsights last analysis date" }, + "Last Intake" : { + "comment" : "LoopInsights caffeine last intake" + }, "Launches CGM app" : { "comment" : "Glucose HUD accessibility hint", "extractionState" : "manual", @@ -24363,6 +24464,9 @@ "comment" : "The title of a section in the live activity settings view, related to lock screen, dynamic island, or carplay.", "isCommentAutoGenerated" : true }, + "Log caffeine intake to help the AI correlate caffeine with glucose patterns. Uses a 5.7-hour half-life decay model." : { + "comment" : "LoopInsights caffeine description" + }, "Log Dose" : { "comment" : "Button text to log a dose\nTitle for dose logging screen", "localizations" : { @@ -25448,9 +25552,6 @@ "comment" : "The uppercase name of the feature.", "isCommentAutoGenerated" : true }, - "LoopInsights analyzes your glucose, insulin, and carb data to suggest adjustments to your Basal Rates, Carb Ratios, and Insulin Sensitivity factors. Tap one of the settings, choose a lookback period, and tap Analyze to get AI-generated suggestions. All changes require your review and approval." : { - "comment" : "LoopInsights subtitle" - }, "LoopInsights can continuously monitor your data and proactively notify you when it detects a setting change opportunity." : { "comment" : "LoopInsights background monitoring description" }, @@ -25458,7 +25559,7 @@ "comment" : "LoopInsights settings title" }, "Low" : { - "comment" : "LoopInsights confidence: low\nLoopInsights legend: low" + "comment" : "LoopInsights TIR low\nLoopInsights confidence: low\nLoopInsights legend: low" }, "Low Glucose" : { "comment" : "Title for bolus screen warning when glucose is below glucose warning limit.\nTitle for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended", @@ -26139,10 +26240,17 @@ } } }, + "Meal Insights" : { + "comment" : "LoopInsights meal insights button\nLoopInsights meal insights title" + }, "Meals Logged" : { "comment" : "Label for the number of meals logged in the stats section of the Trends & Insights view.", "isCommentAutoGenerated" : true }, + "Median" : { + "comment" : "A label displayed in the legend for the median line in the AGP chart.", + "isCommentAutoGenerated" : true + }, "MEDICAL DISCLAIMER" : { "comment" : "LoopInsights medical disclaimer header" }, @@ -26152,8 +26260,12 @@ "Medium & Above" : { "comment" : "LoopInsights confidence filter: medium+" }, + "mg" : { + "comment" : "Abbreviation for milligrams.", + "isCommentAutoGenerated" : true + }, "mg/dL" : { - "comment" : "The short unit display string for milligrams of glucose per decilter", + "comment" : "LoopInsights unit mg/dL\nThe short unit display string for milligrams of glucose per decilter", "localizations" : { "ar" : { "stringUnit" : { @@ -27575,6 +27687,15 @@ } } }, + "NIGHTSCOUT" : { + "comment" : "LoopInsights Nightscout header" + }, + "Nightscout data is used as supplemental context for AI analysis. Your existing Loop data stores remain the primary source." : { + "comment" : "LoopInsights nightscout note" + }, + "Nightscout Import" : { + "comment" : "LoopInsights nightscout toggle" + }, "No alert — suggestions are available when you next open LoopInsights." : { "comment" : "LoopInsights notification style desc: silent" }, @@ -27711,6 +27832,9 @@ } } }, + "No caffeine entries yet. Tap a preset above to log intake." : { + "comment" : "LoopInsights no caffeine entries" + }, "No changes" : { "comment" : "LoopInsights legend: OK" }, @@ -27839,6 +27963,9 @@ "No fixtures found" : { "comment" : "LoopInsights no fixtures" }, + "No food-type patterns available. Log meals with food types to see patterns." : { + "comment" : "LoopInsights no food patterns" + }, "No goals set yet" : { "comment" : "LoopInsights goals empty placeholder" }, @@ -28222,6 +28349,9 @@ } } }, + "No recent meals with glucose data found" : { + "comment" : "LoopInsights no meals" + }, "No Recent Pump Data" : { "comment" : "Title for bolus screen notice when pump data is missing or stale", "localizations" : { @@ -28540,6 +28670,12 @@ "Not analyzed" : { "comment" : "LoopInsights legend: not analyzed" }, + "Not enough\ndata available" : { + "comment" : "LoopInsights GMI insufficient data" + }, + "Not enough data for AGP chart" : { + "comment" : "LoopInsights AGP no data" + }, "Notification Delivery" : { "comment" : "Notification Delivery Status text", "localizations" : { @@ -29649,6 +29785,12 @@ "Pattern Discovery" : { "comment" : "LoopInsights patterns section header" }, + "Peak" : { + "comment" : "LoopInsights meal peak label" + }, + "Peak Rise" : { + "comment" : "LoopInsights peak rise label" + }, "Pending" : { "comment" : "LoopInsights suggestion status: pending review" }, @@ -29742,9 +29884,15 @@ "Post-Meal Spikes" : { "comment" : "LoopInsights pattern: post-meal spikes" }, + "Pre" : { + "comment" : "LoopInsights meal pre-meal label" + }, "Pre-Fill Editor" : { "comment" : "LoopInsights apply mode: navigate to editor with value pre-filled" }, + "Pre-Meal Advice" : { + "comment" : "LoopInsights meal tab: advice" + }, "Pre-Meal Targets" : { "comment" : "The label of the pre-meal mode toggle button", "localizations" : { @@ -32269,6 +32417,9 @@ } } }, + "Quick Add" : { + "comment" : "LoopInsights caffeine quick add header" + }, "QUIET HOURS" : { "comment" : "LoopInsights monitor quiet hours header" }, @@ -32537,6 +32688,12 @@ "Rebound Highs" : { "comment" : "LoopInsights pattern: rebound highs" }, + "Recent Entries" : { + "comment" : "LoopInsights caffeine recent entries" + }, + "Recent Meals" : { + "comment" : "LoopInsights meal tab: recent" + }, "Recommendation expired: %1$@ old" : { "comment" : "The error message when a recommendation has expired. (1: age of recommendation in minutes)", "localizations" : { @@ -33715,6 +33872,15 @@ "Review recommended — significant adjustments may help" : { "comment" : "LoopInsights score: review" }, + "Rise > 50 mg/dL" : { + "comment" : "LoopInsights meal legend orange" + }, + "Rise ≤ 50 mg/dL" : { + "comment" : "LoopInsights meal legend green" + }, + "Rise: %+.0f mg/dL" : { + "comment" : "LoopInsights meal glucose rise" + }, "Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { "comment" : "LoopInsights analysis period description" }, @@ -33862,6 +34028,9 @@ } } }, + "Save Changes" : { + "comment" : "LoopInsights save caffeine edit" + }, "Save without Bolusing" : { "comment" : "Button text to save carbs and/or manual glucose entry without a bolus", "localizations" : { @@ -34034,6 +34203,9 @@ } } }, + "Select a food type to see your historical glucose response and get AI advice:" : { + "comment" : "LoopInsights food pattern instructions" + }, "Select Lock Screen Display Options" : { "comment" : "A section header for the lock screen display options.", "isCommentAutoGenerated" : true @@ -34473,6 +34645,9 @@ } } }, + "Show Ambulatory Glucose Profile chart on the dashboard with percentile bands (P10/P25/P50/P75/P90) over 24 hours." : { + "comment" : "LoopInsights AGP description" + }, "Shows a banner inside the app when a new suggestion is found." : { "comment" : "LoopInsights notification style desc: banner" }, @@ -35104,6 +35279,15 @@ } } }, + "Source" : { + "comment" : "LoopInsights caffeine source" + }, + "Source (e.g. Matcha Latte)" : { + "comment" : "LoopInsights caffeine source placeholder" + }, + "Standard Deviation" : { + "comment" : "LoopInsights std dev label" + }, "Start time is out of range: %@" : { "comment" : "Carb error description: invalid start time is out of range.", "localizations" : { @@ -36006,9 +36190,6 @@ } } }, - "Tap one of your current Therapy Settings" : { - "comment" : "LoopInsights current settings header" - }, "Tap refresh to discover patterns" : { "comment" : "LoopInsights patterns empty" }, @@ -36412,11 +36593,14 @@ } } }, + "Target Range: " : { + "comment" : "LoopInsights TIR target label" + }, "Target:" : { "comment" : "LoopInsights goal target\nLoopInsights goal target label" }, "Test Connection" : { - "comment" : "LoopInsights test connection button" + "comment" : "LoopInsights test connection button\nLoopInsights test nightscout button" }, "TestFlight" : { "comment" : "Settings app TestFlight section", @@ -36643,7 +36827,7 @@ } }, "Testing..." : { - "comment" : "LoopInsights testing connection" + "comment" : "LoopInsights testing connection\nLoopInsights testing nightscout" }, "The bolus amount entered is smaller than the minimum deliverable." : { "comment" : "Alert message for a bolus too small validation error", @@ -37512,7 +37696,7 @@ } }, "Therapy Settings" : { - "comment" : "Title text for button to Therapy Settings", + "comment" : "LoopInsights current settings header\nTitle text for button to Therapy Settings", "localizations" : { "da" : { "stringUnit" : { @@ -37680,8 +37864,11 @@ "This will restore your therapy settings to the values they had before this suggestion was applied." : { "comment" : "LoopInsights revert confirmation message" }, + "Time" : { + "comment" : "LoopInsights caffeine time" + }, "Time in Range" : { - "comment" : "LoopInsights goal type: TIR target" + "comment" : "LoopInsights TIR card title\nLoopInsights goal type: TIR target" }, "Time in Range (70-180)" : { "comment" : "LoopInsights TIR label with range" @@ -37821,6 +38008,9 @@ } } }, + "Time to Peak" : { + "comment" : "LoopInsights time to peak label" + }, "Timestamp" : { "comment" : "A label displayed next to the timestamp in the debug log view.", "isCommentAutoGenerated" : true @@ -37834,6 +38024,9 @@ "To" : { "comment" : "LoopInsights monitor quiet hours to" }, + "Today's Peak" : { + "comment" : "LoopInsights caffeine today peak" + }, "Total Daily Dose" : { "comment" : "LoopInsights TDD label" }, @@ -40044,6 +40237,12 @@ }, "User Prompt" : { + }, + "Very High" : { + "comment" : "LoopInsights TIR very high" + }, + "Very Low" : { + "comment" : "LoopInsights TIR very low" }, "View" : { "comment" : "LoopInsights banner view button" @@ -41423,6 +41622,9 @@ } } }, + "Your API secret" : { + "comment" : "LoopInsights Nightscout secret placeholder" + }, "Your current therapy settings look good based on the available data. Check back after more data has been generated for a fresh analysis." : { "comment" : "LoopInsights no changes description" }, diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 8e5d9ea20b..3a62e3cf2b 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -28,6 +28,7 @@ final class LoopInsights_Coordinator: ObservableObject { let suggestionStore: LoopInsights_SuggestionStore let goalStore: LoopInsights_GoalStore let healthKitManager: LoopInsights_HealthKitManager? + let caffeineTracker: LoopInsights_CaffeineTracker /// Background monitor for proactive suggestions (lazy-initialized) lazy var backgroundMonitor: LoopInsights_BackgroundMonitor = LoopInsights_BackgroundMonitor(coordinator: self) @@ -69,6 +70,8 @@ final class LoopInsights_Coordinator: ObservableObject { self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared self.goalStore = LoopInsights_GoalStore.shared + self.caffeineTracker = LoopInsights_CaffeineTracker.shared + self.caffeineTracker.healthKitManager = hkManager } /// Initialize with test data fixtures (for simulator/developer mode). @@ -82,6 +85,7 @@ final class LoopInsights_Coordinator: ObservableObject { self.aiAnalysis = LoopInsights_AIAnalysis() self.suggestionStore = LoopInsights_SuggestionStore.shared self.goalStore = LoopInsights_GoalStore.shared + self.caffeineTracker = LoopInsights_CaffeineTracker.shared } /// Factory method: creates a Coordinator with test data if available and enabled, @@ -115,6 +119,91 @@ final class LoopInsights_Coordinator: ObservableObject { backgroundMonitor.stop() } + // MARK: - Supplemental AI Context (Phase 5) + + /// Build supplemental context for AI prompt enrichment from Phase 5 analyzers. + /// Returns nil if no Phase 5 features are enabled. + func buildSupplementalContext( + stats: LoopInsightsAggregatedStats, + glucoseSamples: [StoredGlucoseSample]? = nil + ) async -> String? { + var context: [String] = [] + + let start = Date().addingTimeInterval(-stats.period.timeInterval) + let end = Date() + + // Fetch glucose samples once if not provided + var resolvedGlucose: [StoredGlucoseSample]? = glucoseSamples + if resolvedGlucose == nil, let bridge = dataProviderBridge { + resolvedGlucose = try? await bridge.getGlucoseSamples(start: start, end: end) + } + + // Circadian + Dawn Phenomenon + Negative Basal + Stress + if LoopInsights_FeatureFlags.circadianEnabled { + // Circadian profile from glucose + sleep data + if let samples = resolvedGlucose { + if let profile = LoopInsights_AdvancedAnalyzers.buildCircadianProfile( + glucoseSamples: samples, + sleepStats: stats.biometricStats?.sleep + ) { + context.append(LoopInsights_AdvancedAnalyzers.buildCircadianPromptContext(profile)) + } + } + + // Negative basal stats (already computed in aggregation, just need prompt context) + if let negBasal = stats.insulinStats.negativeBasalStats { + context.append(LoopInsights_AdvancedAnalyzers.buildNegativeBasalPromptContext(negBasal)) + } + + // Stress score (already computed in aggregation) + if let stressScore = stats.biometricStats?.stressScore { + context.append(LoopInsights_AdvancedAnalyzers.buildStressPromptContext(stressScore)) + } + } + + // Food response patterns + if LoopInsights_FeatureFlags.foodResponseEnabled { + if let bridge = dataProviderBridge, + let carbEntries = try? await bridge.getCarbEntries(start: start, end: end), + let glucSamples = resolvedGlucose { + let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( + carbEntries: carbEntries, + glucoseSamples: glucSamples + ) + let foodCtx = LoopInsights_FoodResponseAnalyzer.buildFoodResponsePromptContext(patterns) + if !foodCtx.isEmpty { context.append(foodCtx) } + } + } + + // Caffeine context + if LoopInsights_FeatureFlags.caffeineTrackingEnabled { + let caffeineCtx = caffeineTracker.buildCaffeinePromptContext() + if !caffeineCtx.isEmpty { context.append(caffeineCtx) } + } + + guard !context.isEmpty else { return nil } + return context.joined(separator: "\n") + } + + // MARK: - Raw Data Access + + /// Fetch raw glucose samples for the given date range. + /// Tries HealthKit first for longer history, falls back to Loop stores. + func fetchGlucoseSamples(start: Date, end: Date) async throws -> [StoredGlucoseSample] { + guard let bridge = dataProviderBridge else { + throw LoopInsightsError.insufficientData("Data provider not available") + } + return try await bridge.getGlucoseSamples(start: start, end: end) + } + + /// Fetch raw carb entries for the given date range. + func fetchCarbEntries(start: Date, end: Date) async throws -> [StoredCarbEntry] { + guard let bridge = dataProviderBridge else { + throw LoopInsightsError.insufficientData("Data provider not available") + } + return try await bridge.getCarbEntries(start: start, end: end) + } + // MARK: - Therapy Settings Write Access /// Capture a snapshot of the current therapy settings diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index a44dbcf0a6..24ec771e19 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -89,6 +89,10 @@ enum LoopInsightsPatternType: String, CaseIterable { case highVariability case consistentHighs case consistentLows + case negativeBasal + case highStress + case caffeineCorrelation + case foodSensitivity var displayName: String { switch self { @@ -110,6 +114,14 @@ enum LoopInsightsPatternType: String, CaseIterable { return NSLocalizedString("Consistent Highs", comment: "LoopInsights pattern: consistent highs") case .consistentLows: return NSLocalizedString("Consistent Lows", comment: "LoopInsights pattern: consistent lows") + case .negativeBasal: + return NSLocalizedString("Frequent Suspensions", comment: "LoopInsights pattern: negative basal") + case .highStress: + return NSLocalizedString("High Stress Periods", comment: "LoopInsights pattern: high stress") + case .caffeineCorrelation: + return NSLocalizedString("Caffeine Impact", comment: "LoopInsights pattern: caffeine correlation") + case .foodSensitivity: + return NSLocalizedString("Food Sensitivity", comment: "LoopInsights pattern: food sensitivity") } } @@ -124,6 +136,10 @@ enum LoopInsightsPatternType: String, CaseIterable { case .highVariability: return "waveform.path.ecg" case .consistentHighs: return "arrow.up.circle" case .consistentLows: return "arrow.down.to.line" + case .negativeBasal: return "pause.circle" + case .highStress: return "brain.head.profile" + case .caffeineCorrelation: return "cup.and.saucer.fill" + case .foodSensitivity: return "fork.knife" } } } @@ -602,11 +618,18 @@ struct LoopInsightsAggregatedStats: Codable { let standardDeviation: Double // mg/dL let coefficientOfVariation: Double // percentage let timeInRange: Double // percentage (70-180 mg/dL) - let timeBelowRange: Double // percentage (<70 mg/dL) - let timeAboveRange: Double // percentage (>180 mg/dL) + let timeVeryHigh: Double // percentage (>250 mg/dL) + let timeHigh: Double // percentage (181-250 mg/dL) + let timeLow: Double // percentage (54-69 mg/dL) + let timeVeryLow: Double // percentage (<54 mg/dL) let gmi: Double // Glucose Management Indicator (estimated A1C) let sampleCount: Int let hourlyAverages: [Int: Double] // hour (0-23) → average glucose + + /// Combined time below range (<70 mg/dL) — timeLow + timeVeryLow + var timeBelowRange: Double { timeLow + timeVeryLow } + /// Combined time above range (>180 mg/dL) — timeHigh + timeVeryHigh + var timeAboveRange: Double { timeHigh + timeVeryHigh } } struct InsulinStats: Codable { @@ -615,6 +638,7 @@ struct LoopInsightsAggregatedStats: Codable { let bolusPercentage: Double // percentage of TDD from bolus let hourlyBasalAverages: [Int: Double] // hour → average basal rate delivered let correctionBolusCount: Int // number of correction boluses in period + let negativeBasalStats: LoopInsightsNegativeBasalStats? // Phase 5: suspension/sub-basal stats } struct CarbStats: Codable { @@ -631,6 +655,7 @@ struct LoopInsightsAggregatedStats: Codable { let sleep: SleepStats? let activeEnergy: ActiveEnergyStats? let weight: WeightStats? + let stressScore: LoopInsightsStressScore? // Phase 5: HRV-derived stress } struct HeartRateStats: Codable { diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift new file mode 100644 index 0000000000..5a4ed625c6 --- /dev/null +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -0,0 +1,233 @@ +// +// LoopInsights_Phase5Models.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - Circadian Profile + +/// 24-hour circadian glucose profile derived from sleep/wake data and glucose patterns +struct LoopInsightsCircadianProfile: Codable { + let preSleepAvgGlucose: Double // mg/dL — avg glucose in hour before bed + let overnightAvgGlucose: Double // mg/dL — avg glucose during sleep + let wakeGlucose: Double // mg/dL — avg glucose at wake time + let riseAfterWake: Double // mg/dL — glucose rise in first 2h after wake + let dawnRiseDetected: Bool // True if significant rise before wake + let dawnRiseMagnitude: Double // mg/dL — magnitude of pre-wake rise + let estimatedWakeHour: Int // Hour (0-23) from sleep data or fallback + let estimatedBedHour: Int // Hour (0-23) from sleep data or fallback + let hourlyGlucoseRelativeToWake: [Int: Double] // hours-from-wake → avg glucose +} + +// MARK: - Food Response Pattern + +/// Per-food-type glucose response statistics +struct LoopInsightsFoodResponsePattern: Identifiable, Codable { + let id: UUID + let foodType: String // e.g. "Pizza", "Rice", "Bread" + let mealCount: Int // Number of meals analyzed + let averageCarbsPerMeal: Double // grams + let peakGlucoseRise: Double // mg/dL — avg max rise above pre-meal + let timeToPeakMinutes: Double // Minutes from meal to peak + let averageResponseAUC: Double // Area under the curve (mg/dL * hours) + let twoHourPostMealAvg: Double // mg/dL — avg glucose 2h post-meal + let fourHourPostMealAvg: Double // mg/dL — avg glucose 4h post-meal + + init(foodType: String, mealCount: Int, averageCarbsPerMeal: Double, + peakGlucoseRise: Double, timeToPeakMinutes: Double, + averageResponseAUC: Double, twoHourPostMealAvg: Double, + fourHourPostMealAvg: Double) { + self.id = UUID() + self.foodType = foodType + self.mealCount = mealCount + self.averageCarbsPerMeal = averageCarbsPerMeal + self.peakGlucoseRise = peakGlucoseRise + self.timeToPeakMinutes = timeToPeakMinutes + self.averageResponseAUC = averageResponseAUC + self.twoHourPostMealAvg = twoHourPostMealAvg + self.fourHourPostMealAvg = fourHourPostMealAvg + } +} + +/// A single meal event with matched glucose response for debrief +struct LoopInsightsMealEvent: Identifiable { + let id: UUID + let date: Date + let foodType: String + let carbs: Double // grams + let preMealGlucose: Double // mg/dL + let peakGlucose: Double // mg/dL + let twoHourGlucose: Double // mg/dL + let glucoseTimeline: [(minutesAfter: Int, glucose: Double)] + + init(date: Date, foodType: String, carbs: Double, preMealGlucose: Double, + peakGlucose: Double, twoHourGlucose: Double, + glucoseTimeline: [(minutesAfter: Int, glucose: Double)]) { + self.id = UUID() + self.date = date + self.foodType = foodType + self.carbs = carbs + self.preMealGlucose = preMealGlucose + self.peakGlucose = peakGlucose + self.twoHourGlucose = twoHourGlucose + self.glucoseTimeline = glucoseTimeline + } +} + +// MARK: - Negative Basal Stats + +/// Statistics about insulin suspension and sub-scheduled-rate delivery +struct LoopInsightsNegativeBasalStats: Codable { + let suspensionCount: Int // Number of suspend events + let totalSuspensionMinutes: Double // Total minutes of zero delivery + let suspensionPercentage: Double // % of total time spent suspended + let subBasalMinutes: Double // Minutes at rate < scheduled + let hourlyDistribution: [Int: Double] // hour → minutes of neg basal at that hour + let overcorrectionEvents: Int // Suspensions followed by rebound high >180 +} + +// MARK: - Stress Score + +/// HRV-derived stress score with glucose correlation +struct LoopInsightsStressScore: Codable { + let overallScore: Double // 0-100 (0=relaxed, 100=high stress) + let hourlyScores: [Int: Double] // hour → stress score + let glucoseCVCorrelation: Double // Correlation coefficient with glucose CV + let averageSDNN: Double // ms — average HRV SDNN for reference + let highStressHours: [Int] // Hours where stress > 70 +} + +// MARK: - Caffeine + +/// A single caffeine intake entry +struct LoopInsightsCaffeineEntry: Identifiable, Codable { + let id: UUID + let timestamp: Date + let milligrams: Double + let source: String // e.g. "Espresso", "Coffee (Medium)" + let isFromHealthKit: Bool + + init(id: UUID = UUID(), timestamp: Date, milligrams: Double, source: String, isFromHealthKit: Bool = false) { + self.id = id + self.timestamp = timestamp + self.milligrams = milligrams + self.source = source + self.isFromHealthKit = isFromHealthKit + } +} + +/// Current caffeine state computed from entries with half-life decay +struct LoopInsightsCaffeineState: Codable { + let currentLevelMg: Double // Current caffeine level in mg + let peakLevelToday: Double // Highest level today + let lastIntakeTime: Date? // When the last caffeine was consumed + let entriesLast24h: Int // Number of entries in last 24h + let totalMgLast24h: Double // Total mg consumed in last 24h +} + +/// Caffeine preset for quick-add +struct LoopInsightsCaffeinePreset: Identifiable { + let id = UUID() + let name: String + let milligrams: Double + let icon: String // SF Symbol name + + static let defaults: [LoopInsightsCaffeinePreset] = [ + LoopInsightsCaffeinePreset(name: "Espresso", milligrams: 63, icon: "cup.and.saucer.fill"), + LoopInsightsCaffeinePreset(name: "Coffee (Small)", milligrams: 95, icon: "cup.and.saucer.fill"), + LoopInsightsCaffeinePreset(name: "Coffee (Medium)", milligrams: 142, icon: "cup.and.saucer.fill"), + LoopInsightsCaffeinePreset(name: "Coffee (Large)", milligrams: 190, icon: "cup.and.saucer.fill"), + LoopInsightsCaffeinePreset(name: "Tea (Green)", milligrams: 28, icon: "leaf.fill"), + LoopInsightsCaffeinePreset(name: "Tea (Black)", milligrams: 47, icon: "leaf.fill"), + LoopInsightsCaffeinePreset(name: "Energy Drink", milligrams: 80, icon: "bolt.fill"), + LoopInsightsCaffeinePreset(name: "Cola", milligrams: 34, icon: "drop.fill"), + ] +} + +// MARK: - Nightscout + +/// Nightscout server configuration +struct LoopInsightsNightscoutConfig: Codable, Equatable { + var siteURL: String + var apiSecret: String + var isConnected: Bool + + init(siteURL: String = "", apiSecret: String = "", isConnected: Bool = false) { + self.siteURL = siteURL + self.apiSecret = apiSecret + self.isConnected = isConnected + } + + static let storageKey = "LoopInsights_nightscoutConfig" + + static func load() -> LoopInsightsNightscoutConfig { + guard let data = UserDefaults.standard.data(forKey: storageKey), + let config = try? JSONDecoder().decode(LoopInsightsNightscoutConfig.self, from: data) else { + return LoopInsightsNightscoutConfig() + } + return config + } + + func save() { + if let data = try? JSONEncoder().encode(self) { + UserDefaults.standard.set(data, forKey: Self.storageKey) + } + } +} + +/// A single Nightscout SGV entry (from /api/v1/entries.json) +struct LoopInsightsNightscoutEntry: Codable { + let sgv: Double // mg/dL + let dateString: String? // ISO date + let date: Double? // epoch ms + let direction: String? // Trend direction + + var sampleDate: Date? { + if let dateStr = dateString { + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + if let d = formatter.date(from: dateStr) { return d } + formatter.formatOptions = [.withInternetDateTime] + return formatter.date(from: dateStr) + } + if let epoch = date { + return Date(timeIntervalSince1970: epoch / 1000) + } + return nil + } +} + +/// A single Nightscout treatment (from /api/v1/treatments.json) +struct LoopInsightsNightscoutTreatment: Codable { + let eventType: String? + let created_at: String? + let carbs: Double? + let insulin: Double? + let rate: Double? // Temp basal rate + let duration: Double? // Duration in minutes + + var treatmentDate: Date? { + guard let dateStr = created_at else { return nil } + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds] + if let d = formatter.date(from: dateStr) { return d } + formatter.formatOptions = [.withInternetDateTime] + return formatter.date(from: dateStr) + } +} + +// MARK: - AGP Data Point + +/// A single time point in an Ambulatory Glucose Profile +struct LoopInsightsAGPDataPoint { + let minuteOfDay: Int // 0-1439 + let p10: Double // 10th percentile mg/dL + let p25: Double // 25th percentile mg/dL + let p50: Double // 50th (median) mg/dL + let p75: Double // 75th percentile mg/dL + let p90: Double // 90th percentile mg/dL +} diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index 04d8e62610..b8948ea81d 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -29,6 +29,11 @@ struct LoopInsights_FeatureFlags { static let quietHoursEnd = "LoopInsights_quietHoursEnd" static let notificationStyle = "LoopInsights_notificationStyle" static let biometricsEnabled = "LoopInsights_biometricsEnabled" + static let circadianEnabled = "LoopInsights_circadianEnabled" + static let foodResponseEnabled = "LoopInsights_foodResponseEnabled" + static let caffeineTrackingEnabled = "LoopInsights_caffeineTrackingEnabled" + static let nightscoutImportEnabled = "LoopInsights_nightscoutImportEnabled" + static let agpChartEnabled = "LoopInsights_agpChartEnabled" } private static let defaults = UserDefaults.standard @@ -199,6 +204,39 @@ struct LoopInsights_FeatureFlags { set { defaults.set(newValue, forKey: Keys.biometricsEnabled) } } + // MARK: - Phase 5 Feature Flags + + /// Enables circadian analysis, dawn phenomenon detection, negative basal awareness, + /// and HRV-based stress scoring. All advanced analyzers gated by one flag. + static var circadianEnabled: Bool { + get { defaults.bool(forKey: Keys.circadianEnabled) } + set { defaults.set(newValue, forKey: Keys.circadianEnabled) } + } + + /// Enables food-type response pattern analysis and the Meal Insights view. + static var foodResponseEnabled: Bool { + get { defaults.bool(forKey: Keys.foodResponseEnabled) } + set { defaults.set(newValue, forKey: Keys.foodResponseEnabled) } + } + + /// Enables caffeine intake tracking and the Caffeine Log view. + static var caffeineTrackingEnabled: Bool { + get { defaults.bool(forKey: Keys.caffeineTrackingEnabled) } + set { defaults.set(newValue, forKey: Keys.caffeineTrackingEnabled) } + } + + /// Enables Nightscout data import as an alternative/supplemental data source. + static var nightscoutImportEnabled: Bool { + get { defaults.bool(forKey: Keys.nightscoutImportEnabled) } + set { defaults.set(newValue, forKey: Keys.nightscoutImportEnabled) } + } + + /// Enables the Ambulatory Glucose Profile chart on the dashboard. + static var agpChartEnabled: Bool { + get { defaults.bool(forKey: Keys.agpChartEnabled) } + set { defaults.set(newValue, forKey: Keys.agpChartEnabled) } + } + // MARK: - AI Configuration /// User-configurable AI provider configuration. Persisted to UserDefaults (excluding API key). diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index 47802f09c1..d37f52a5a4 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -34,10 +34,11 @@ final class LoopInsights_AIAnalysis { settingType: LoopInsightsSettingType, currentSettings: LoopInsightsTherapySnapshot, stats: LoopInsightsAggregatedStats, - recentChanges: [LoopInsightsSuggestionRecord] = [] + recentChanges: [LoopInsightsSuggestionRecord] = [], + supplementalContext: String? = nil ) async throws -> LoopInsightsAnalysisResponse { - let systemPrompt = buildSystemPrompt() - let userPrompt = buildUserPrompt(settingType: settingType, settings: currentSettings, stats: stats, recentChanges: recentChanges) + let systemPrompt = buildSystemPrompt(supplementalContext: supplementalContext) + let userPrompt = buildUserPrompt(settingType: settingType, settings: currentSettings, stats: stats, recentChanges: recentChanges, supplementalContext: supplementalContext) let timestamp = Date() let rawResponse = try await serviceAdapter.sendPrompt(systemPrompt, userPrompt: userPrompt) @@ -56,7 +57,7 @@ final class LoopInsights_AIAnalysis { // MARK: - System Prompt - private func buildSystemPrompt() -> String { + private func buildSystemPrompt(supplementalContext: String? = nil) -> String { let personality = LoopInsights_FeatureFlags.aiPersonality return """ You are LoopInsights, an expert-level automated insulin delivery (AID) therapy settings analyst. \ @@ -152,6 +153,22 @@ final class LoopInsights_AIAnalysis { setting changes. If glucose variability correlates with activity or sleep variation, \ note this as a lifestyle factor rather than a settings problem. + ADVANCED CONTEXT — When supplemental data is provided below the user prompt: + - CIRCADIAN PROFILE: Use actual sleep/wake times to evaluate overnight and dawn patterns \ + rather than fixed time windows. A dawn rise before the user's actual wake time is a true dawn \ + phenomenon; a rise that starts after wake is likely a breakfast/activity effect. + - NEGATIVE BASAL: Frequent insulin suspensions (>10% of time) strongly suggest basal is too high. \ + Overcorrection events (suspend → rebound high) indicate settings oscillation. Weight suspension \ + patterns by hour to identify which time blocks need basal reduction. + - STRESS SCORE: High physiological stress (score >70) increases insulin resistance. If stress \ + correlates with glucose variability, settings changes alone may not solve the problem — note \ + lifestyle factors in your assessment. + - FOOD RESPONSE: Per-food glucose patterns help distinguish CR problems from ISF problems. If \ + high-GI foods cause large spikes but low-GI foods are handled well, the issue is food choice, \ + not necessarily CR settings. + - CAFFEINE: Active caffeine >100mg can increase insulin resistance and glucose variability. \ + Factor caffeine timing into your assessment of glucose patterns, especially morning highs. + RESPONSE FORMAT: Respond with valid JSON in this exact structure: { @@ -187,7 +204,8 @@ final class LoopInsights_AIAnalysis { settingType: LoopInsightsSettingType, settings: LoopInsightsTherapySnapshot, stats: LoopInsightsAggregatedStats, - recentChanges: [LoopInsightsSuggestionRecord] = [] + recentChanges: [LoopInsightsSuggestionRecord] = [], + supplementalContext: String? = nil ) -> String { var prompt = "Evaluate whether my \(settingType.displayName) settings need adjustment.\n\n" @@ -354,8 +372,16 @@ final class LoopInsights_AIAnalysis { } } + // Phase 5: Supplemental context from advanced analyzers + if let supplemental = supplementalContext, !supplemental.isEmpty { + prompt += "\n\n## Supplemental Analysis Context\n" + prompt += supplemental + prompt += "\n" + } + prompt += "\nAnalyze this data focusing specifically on \(settingType.displayName). " prompt += "Use the time-of-day analysis and algorithm workload metrics to identify actionable patterns. " + prompt += "If supplemental context is provided above, incorporate it into your reasoning. " prompt += "If the data clearly supports adjustments, propose them. If not, return empty suggestions. " prompt += "Respond with JSON only, no markdown formatting." diff --git a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift new file mode 100644 index 0000000000..d28b62e05b --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift @@ -0,0 +1,275 @@ +// +// LoopInsights_AdvancedAnalyzers.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +/// Advanced analyzers for Phase 5: Circadian AI, Dawn Phenomenon, +/// Negative Basal Awareness, and HRV Stress Score. +/// Each analyzer computes stats from raw data and builds prompt context strings. +final class LoopInsights_AdvancedAnalyzers { + + // MARK: - Circadian Profile + + /// Build a circadian glucose profile using sleep data and glucose samples. + /// Uses actual wake/bed times from HealthKit sleep data when available. + static func buildCircadianProfile( + glucoseSamples: [StoredGlucoseSample], + sleepStats: LoopInsightsAggregatedStats.SleepStats? + ) -> LoopInsightsCircadianProfile? { + guard !glucoseSamples.isEmpty else { return nil } + + let calendar = Calendar.current + + // Determine wake/bed hours from sleep data or use defaults + let wakeHour: Int + let bedHour: Int + if let sleep = sleepStats { + wakeHour = Int(sleep.averageWakeTime) / 3600 + bedHour = Int(sleep.averageBedtime) / 3600 + } else { + wakeHour = 7 + bedHour = 22 + } + + // Bucket glucose by hour + var hourlyBuckets: [Int: [Double]] = [:] + for sample in glucoseSamples { + let hour = calendar.component(.hour, from: sample.startDate) + let value = sample.quantity.doubleValue(for: .milligramsPerDeciliter) + hourlyBuckets[hour, default: []].append(value) + } + + let hourlyAvg: (Int) -> Double = { hour in + guard let vals = hourlyBuckets[hour], !vals.isEmpty else { return 0 } + return vals.reduce(0, +) / Double(vals.count) + } + + // Pre-sleep: hour before bed + let preSleepHour = (bedHour - 1 + 24) % 24 + let preSleepAvg = hourlyAvg(preSleepHour) + + // Overnight: bed to wake + var overnightValues: [Double] = [] + var h = bedHour + while h != wakeHour { + if let vals = hourlyBuckets[h] { overnightValues.append(contentsOf: vals) } + h = (h + 1) % 24 + } + let overnightAvg = overnightValues.isEmpty ? 0 : overnightValues.reduce(0, +) / Double(overnightValues.count) + + // Wake glucose + let wakeGlucose = hourlyAvg(wakeHour) + + // Rise after wake: compare wake hour to wake+2 + let twoHoursAfterWake = (wakeHour + 2) % 24 + let riseAfterWake = hourlyAvg(twoHoursAfterWake) - wakeGlucose + + // Dawn phenomenon: detect rise in the 2-3 hours before wake + let dawnStart = (wakeHour - 3 + 24) % 24 + let dawnStartGlucose = hourlyAvg(dawnStart) + let dawnRise = wakeGlucose - dawnStartGlucose + let dawnDetected = dawnRise > 15 // 15 mg/dL threshold + + // Hourly glucose relative to wake + var relativeHourly: [Int: Double] = [:] + for offset in -6...12 { + let absHour = (wakeHour + offset + 24) % 24 + let avg = hourlyAvg(absHour) + if avg > 0 { + relativeHourly[offset] = avg + } + } + + return LoopInsightsCircadianProfile( + preSleepAvgGlucose: preSleepAvg, + overnightAvgGlucose: overnightAvg, + wakeGlucose: wakeGlucose, + riseAfterWake: riseAfterWake, + dawnRiseDetected: dawnDetected, + dawnRiseMagnitude: max(0, dawnRise), + estimatedWakeHour: wakeHour, + estimatedBedHour: bedHour, + hourlyGlucoseRelativeToWake: relativeHourly + ) + } + + /// Build prompt context string from circadian profile + static func buildCircadianPromptContext(_ profile: LoopInsightsCircadianProfile) -> String { + var ctx = "## Circadian Glucose Profile\n" + ctx += "- Estimated bed time: \(profile.estimatedBedHour):00, wake time: \(profile.estimatedWakeHour):00\n" + ctx += "- Pre-sleep avg glucose: \(String(format: "%.0f", profile.preSleepAvgGlucose)) mg/dL\n" + ctx += "- Overnight avg glucose: \(String(format: "%.0f", profile.overnightAvgGlucose)) mg/dL\n" + ctx += "- Wake glucose: \(String(format: "%.0f", profile.wakeGlucose)) mg/dL\n" + ctx += "- Rise after wake (2h): \(String(format: "%+.0f", profile.riseAfterWake)) mg/dL\n" + if profile.dawnRiseDetected { + ctx += "- ** DAWN PHENOMENON DETECTED: \(String(format: "%.0f", profile.dawnRiseMagnitude)) mg/dL rise in 3h before wake **\n" + } + return ctx + } + + // MARK: - Negative Basal Stats + + /// Compute negative basal statistics from dose entries and scheduled basal rate. + static func computeNegativeBasalStats( + doses: [DoseEntry], + scheduledBasalItems: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem], + periodDays: Int, + glucoseSamples: [StoredGlucoseSample] + ) -> LoopInsightsNegativeBasalStats { + let calendar = Calendar.current + var suspensionCount = 0 + var totalSuspensionMinutes: Double = 0 + var subBasalMinutes: Double = 0 + var hourlyDistribution: [Int: Double] = [:] + var overcorrectionEvents = 0 + + let totalMinutes = Double(periodDays) * 24 * 60 + + for dose in doses { + let durationMinutes = dose.endDate.timeIntervalSince(dose.startDate) / 60 + let hour = calendar.component(.hour, from: dose.startDate) + + if dose.type == .suspend { + suspensionCount += 1 + totalSuspensionMinutes += durationMinutes + hourlyDistribution[hour, default: 0] += durationMinutes + + // Check for overcorrection: glucose > 180 within 2h after suspension ends + let checkWindow = dose.endDate...dose.endDate.addingTimeInterval(2 * 3600) + let reboundHigh = glucoseSamples.contains { sample in + checkWindow.contains(sample.startDate) && + sample.quantity.doubleValue(for: .milligramsPerDeciliter) > 180 + } + if reboundHigh { overcorrectionEvents += 1 } + } else if dose.type == .tempBasal { + let rate = dose.unitsPerHour + let scheduledRate = effectiveScheduledRate(at: dose.startDate, items: scheduledBasalItems) + if rate < scheduledRate { + let minutes = durationMinutes + subBasalMinutes += minutes + hourlyDistribution[hour, default: 0] += minutes + } + } + } + + let suspensionPercentage = totalMinutes > 0 ? (totalSuspensionMinutes / totalMinutes) * 100 : 0 + + return LoopInsightsNegativeBasalStats( + suspensionCount: suspensionCount, + totalSuspensionMinutes: totalSuspensionMinutes, + suspensionPercentage: suspensionPercentage, + subBasalMinutes: subBasalMinutes, + hourlyDistribution: hourlyDistribution, + overcorrectionEvents: overcorrectionEvents + ) + } + + /// Build prompt context from negative basal stats + static func buildNegativeBasalPromptContext(_ stats: LoopInsightsNegativeBasalStats) -> String { + var ctx = "## Negative Basal / Suspension Analysis\n" + ctx += "- Suspension events: \(stats.suspensionCount)\n" + ctx += "- Total suspension time: \(String(format: "%.0f", stats.totalSuspensionMinutes)) minutes (\(String(format: "%.1f", stats.suspensionPercentage))% of period)\n" + ctx += "- Sub-scheduled basal time: \(String(format: "%.0f", stats.subBasalMinutes)) minutes\n" + ctx += "- Overcorrection events (suspend → rebound >180): \(stats.overcorrectionEvents)\n" + if !stats.hourlyDistribution.isEmpty { + let sorted = stats.hourlyDistribution.sorted { $0.value > $1.value } + let topHours = sorted.prefix(3).map { "\(String(format: "%02d", $0.key)):00 (\(String(format: "%.0f", $0.value))min)" } + ctx += "- Heaviest suspension hours: \(topHours.joined(separator: ", "))\n" + } + if stats.suspensionPercentage > 10 { + ctx += "** HIGH SUSPENSION RATE: Algorithm is frequently cutting insulin — basal may be too high **\n" + } + if stats.overcorrectionEvents > 3 { + ctx += "** OVERCORRECTION PATTERN: Suspensions followed by rebound highs suggest settings oscillation **\n" + } + return ctx + } + + // MARK: - Stress Score from HRV + + /// Compute stress score from HRV data and correlate with glucose variability. + static func computeStressScore( + hrvStats: LoopInsightsAggregatedStats.HRVStats?, + glucoseStats: LoopInsightsAggregatedStats.GlucoseStats + ) -> LoopInsightsStressScore? { + guard let hrv = hrvStats, hrv.averageSDNN > 0 else { return nil } + + // Convert SDNN to stress score (0-100 scale) + // SDNN > 100ms = low stress (~10), SDNN < 20ms = high stress (~90) + let sdnn = hrv.averageSDNN + let overallScore = max(0, min(100, 100 - (sdnn - 20) * (90.0 / 80.0))) + + // Approximate hourly scores — we don't have hourly HRV, so use overall + // with small random-ish variation based on glucose hourly CV + var hourlyScores: [Int: Double] = [:] + for hour in 0..<24 { + if let hourGlucose = glucoseStats.hourlyAverages[hour] { + // Higher glucose deviation from mean → higher stress estimate + let deviation = abs(hourGlucose - glucoseStats.averageGlucose) + let hourModifier = min(15, deviation / 5) + hourlyScores[hour] = min(100, max(0, overallScore + hourModifier)) + } + } + + // High stress hours (score > 70) + let highStressHours = hourlyScores.filter { $0.value > 70 }.map { $0.key }.sorted() + + // Simple correlation between hourly stress and glucose CV + let glucoseCV = glucoseStats.coefficientOfVariation + let cvCorrelation = min(1.0, max(-1.0, (overallScore - 50) / 50 * (glucoseCV > 36 ? 0.6 : 0.3))) + + return LoopInsightsStressScore( + overallScore: overallScore, + hourlyScores: hourlyScores, + glucoseCVCorrelation: cvCorrelation, + averageSDNN: sdnn, + highStressHours: highStressHours + ) + } + + /// Build prompt context from stress score + static func buildStressPromptContext(_ score: LoopInsightsStressScore) -> String { + var ctx = "## Stress Score (HRV-derived)\n" + ctx += "- Overall stress score: \(String(format: "%.0f", score.overallScore))/100 (higher = more stress)\n" + ctx += "- Average HRV SDNN: \(String(format: "%.1f", score.averageSDNN)) ms\n" + ctx += "- Stress-glucose CV correlation: \(String(format: "%.2f", score.glucoseCVCorrelation))\n" + if !score.highStressHours.isEmpty { + let hourStrings = score.highStressHours.map { "\(String(format: "%02d", $0)):00" } + ctx += "- High stress hours: \(hourStrings.joined(separator: ", "))\n" + } + if score.overallScore > 70 { + ctx += "** HIGH PHYSIOLOGICAL STRESS: May increase insulin resistance. Consider this when evaluating settings. **\n" + } + return ctx + } + + // MARK: - Helpers + + private static func effectiveScheduledRate( + at date: Date, + items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] + ) -> Double { + let calendar = Calendar.current + let secondsSinceMidnight = TimeInterval( + calendar.component(.hour, from: date) * 3600 + + calendar.component(.minute, from: date) * 60 + ) + let sorted = items.sorted { $0.startTime < $1.startTime } + var result = sorted.first?.value ?? 0 + for item in sorted { + if item.startTime <= secondsSinceMidnight { + result = item.value + } else { + break + } + } + return result + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift new file mode 100644 index 0000000000..3e735b0361 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift @@ -0,0 +1,218 @@ +// +// LoopInsights_CaffeineTracker.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import HealthKit + +/// Tracks caffeine intake with half-life decay model and provides prompt context. +/// Entries are persisted to UserDefaults. Uses a 5.7-hour half-life for caffeine metabolism. +/// Also reads dietary caffeine from HealthKit and merges with manual entries. +final class LoopInsights_CaffeineTracker: ObservableObject { + + static let shared = LoopInsights_CaffeineTracker() + + /// Caffeine half-life in seconds (5.7 hours) + private static let halfLife: TimeInterval = 5.7 * 3600 + + /// UserDefaults key for persisted entries + private static let storageKey = "LoopInsights_caffeineEntries" + + @Published private(set) var entries: [LoopInsightsCaffeineEntry] = [] + + /// HealthKit-sourced entries (not persisted to UserDefaults) + private var healthKitEntries: [LoopInsightsCaffeineEntry] = [] + + /// Reference to HealthKitManager for fetching caffeine data + var healthKitManager: LoopInsights_HealthKitManager? + + init() { + loadEntries() + } + + // MARK: - HealthKit Integration + + /// Fetch caffeine entries from HealthKit and merge with manual entries. + func syncFromHealthKit() async { + guard let hkManager = healthKitManager else { return } + + let start = Date().addingTimeInterval(-48 * 3600) + let end = Date() + + do { + let hkEntries = try await hkManager.fetchCaffeineEntries(start: start, end: end) + await MainActor.run { + self.healthKitEntries = hkEntries + self.rebuildMergedEntries() + } + } catch { + print("[LoopInsights] Failed to fetch HealthKit caffeine: \(error)") + } + } + + /// Merge manual + HealthKit entries, sorted by timestamp descending + private func rebuildMergedEntries() { + var manual = loadManualEntries() + manual.append(contentsOf: healthKitEntries) + manual.sort { $0.timestamp > $1.timestamp } + entries = manual + } + + // MARK: - Public API + + /// Log a caffeine intake + func logCaffeine(milligrams: Double, source: String, at timestamp: Date = Date()) { + let entry = LoopInsightsCaffeineEntry( + timestamp: timestamp, + milligrams: milligrams, + source: source + ) + var manual = loadManualEntries() + manual.append(entry) + saveManualEntries(manual) + rebuildMergedEntries() + } + + /// Remove an entry (only manual entries can be removed) + func removeEntry(_ entry: LoopInsightsCaffeineEntry) { + guard !entry.isFromHealthKit else { return } + var manual = loadManualEntries() + manual.removeAll { $0.id == entry.id } + saveManualEntries(manual) + rebuildMergedEntries() + } + + /// Update an existing manual entry + func updateEntry(id: UUID, milligrams: Double, source: String, timestamp: Date) { + var manual = loadManualEntries() + guard let idx = manual.firstIndex(where: { $0.id == id }) else { return } + manual[idx] = LoopInsightsCaffeineEntry( + id: id, + timestamp: timestamp, + milligrams: milligrams, + source: source + ) + saveManualEntries(manual) + rebuildMergedEntries() + } + + /// Current caffeine state computed from all entries + func currentState(at now: Date = Date()) -> LoopInsightsCaffeineState { + var currentLevel: Double = 0 + var peakToday: Double = 0 + var totalLast24h: Double = 0 + var entriesLast24h = 0 + var lastIntake: Date? + + let twentyFourHoursAgo = now.addingTimeInterval(-24 * 3600) + let startOfToday = Calendar.current.startOfDay(for: now) + + for entry in entries { + // Compute remaining caffeine from this entry + let elapsed = now.timeIntervalSince(entry.timestamp) + guard elapsed >= 0 else { continue } + + let remaining = entry.milligrams * pow(0.5, elapsed / Self.halfLife) + if remaining > 0.1 { + currentLevel += remaining + } + + // Track 24h stats + if entry.timestamp >= twentyFourHoursAgo { + totalLast24h += entry.milligrams + entriesLast24h += 1 + } + + // Track last intake + if lastIntake == nil || entry.timestamp > (lastIntake ?? .distantPast) { + lastIntake = entry.timestamp + } + + // Track peak today (sum of remaining at time of each entry today) + if entry.timestamp >= startOfToday { + var levelAtEntry: Double = 0 + for other in entries where other.timestamp <= entry.timestamp { + let otherElapsed = entry.timestamp.timeIntervalSince(other.timestamp) + levelAtEntry += other.milligrams * pow(0.5, otherElapsed / Self.halfLife) + } + peakToday = max(peakToday, levelAtEntry) + } + } + + return LoopInsightsCaffeineState( + currentLevelMg: currentLevel, + peakLevelToday: peakToday, + lastIntakeTime: lastIntake, + entriesLast24h: entriesLast24h, + totalMgLast24h: totalLast24h + ) + } + + // MARK: - Prompt Context + + /// Build prompt context string for AI analysis + func buildCaffeinePromptContext(at now: Date = Date()) -> String { + let state = currentState(at: now) + guard state.entriesLast24h > 0 else { return "" } + + var ctx = "## Caffeine Intake\n" + ctx += "- Current estimated caffeine level: \(String(format: "%.0f", state.currentLevelMg)) mg\n" + ctx += "- Total caffeine last 24h: \(String(format: "%.0f", state.totalMgLast24h)) mg (\(state.entriesLast24h) intake(s))\n" + if let lastTime = state.lastIntakeTime { + let minutesAgo = Int(now.timeIntervalSince(lastTime) / 60) + if minutesAgo < 60 { + ctx += "- Last intake: \(minutesAgo) minutes ago\n" + } else { + ctx += "- Last intake: \(minutesAgo / 60)h \(minutesAgo % 60)m ago\n" + } + } + ctx += "- Peak caffeine level today: \(String(format: "%.0f", state.peakLevelToday)) mg\n" + + if state.currentLevelMg > 200 { + ctx += "** HIGH CAFFEINE: Current level >200mg may significantly affect insulin sensitivity and glucose variability **\n" + } else if state.currentLevelMg > 100 { + ctx += "** MODERATE CAFFEINE: May influence glucose response, especially post-meal **\n" + } + + // List recent entries + let recentEntries = entries.filter { $0.timestamp >= now.addingTimeInterval(-24 * 3600) } + if !recentEntries.isEmpty { + ctx += "- Recent entries: " + let formatter = DateFormatter() + formatter.timeStyle = .short + ctx += recentEntries.prefix(5).map { "\(formatter.string(from: $0.timestamp)) \($0.source) (\(String(format: "%.0f", $0.milligrams))mg)" }.joined(separator: "; ") + ctx += "\n" + } + + return ctx + } + + // MARK: - Persistence + + private func loadEntries() { + entries = loadManualEntries() + } + + /// Load manual entries from UserDefaults + private func loadManualEntries() -> [LoopInsightsCaffeineEntry] { + guard let data = UserDefaults.standard.data(forKey: Self.storageKey), + let decoded = try? JSONDecoder().decode([LoopInsightsCaffeineEntry].self, from: data) else { + return [] + } + let cutoff = Date().addingTimeInterval(-48 * 3600) + return decoded.filter { $0.timestamp >= cutoff }.sorted { $0.timestamp > $1.timestamp } + } + + /// Save manual entries to UserDefaults (excludes HealthKit entries) + private func saveManualEntries(_ manual: [LoopInsightsCaffeineEntry]) { + let cutoff = Date().addingTimeInterval(-48 * 3600) + let pruned = manual.filter { !$0.isFromHealthKit && $0.timestamp >= cutoff } + if let data = try? JSONEncoder().encode(pruned) { + UserDefaults.standard.set(data, forKey: Self.storageKey) + } + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index a3818998a3..c8ba20b166 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -49,12 +49,63 @@ final class LoopInsights_DataAggregator { async let carbStats = computeCarbStats(provider: dataProvider, start: startDate, end: endDate) async let biometrics = fetchBiometricsIfEnabled(start: startDate, end: endDate) + var resolvedInsulinStats = try await insulinStats + let resolvedBiometrics = try await biometrics + let resolvedGlucoseStats = try await glucoseStats + + // Phase 5: Compute negative basal stats if circadian flag is enabled + if LoopInsights_FeatureFlags.circadianEnabled { + do { + let doses = try await dataProvider.getNormalizedDoseEntries(start: startDate, end: endDate) + let glucoseSamples = try await dataProvider.getGlucoseSamples(start: startDate, end: endDate) + let snapshot = try captureTherapySnapshot() + let negBasal = LoopInsights_AdvancedAnalyzers.computeNegativeBasalStats( + doses: doses, + scheduledBasalItems: snapshot.basalRateItems, + periodDays: period.rawValue, + glucoseSamples: glucoseSamples + ) + resolvedInsulinStats = LoopInsightsAggregatedStats.InsulinStats( + totalDailyDose: resolvedInsulinStats.totalDailyDose, + basalPercentage: resolvedInsulinStats.basalPercentage, + bolusPercentage: resolvedInsulinStats.bolusPercentage, + hourlyBasalAverages: resolvedInsulinStats.hourlyBasalAverages, + correctionBolusCount: resolvedInsulinStats.correctionBolusCount, + negativeBasalStats: negBasal + ) + print("[LoopInsights] Phase 5: Negative basal stats computed — \(negBasal.suspensionCount) suspensions") + } catch { + print("[LoopInsights] Phase 5: Negative basal stats error — \(error)") + } + } + + // Phase 5: Compute stress score if circadian flag enabled + biometrics available + var enrichedBiometrics = resolvedBiometrics + if LoopInsights_FeatureFlags.circadianEnabled, let bio = resolvedBiometrics { + let stressScore = LoopInsights_AdvancedAnalyzers.computeStressScore( + hrvStats: bio.hrv, + glucoseStats: resolvedGlucoseStats + ) + if stressScore != nil { + enrichedBiometrics = LoopInsightsAggregatedStats.BiometricStats( + heartRate: bio.heartRate, + hrv: bio.hrv, + steps: bio.steps, + sleep: bio.sleep, + activeEnergy: bio.activeEnergy, + weight: bio.weight, + stressScore: stressScore + ) + print("[LoopInsights] Phase 5: Stress score computed — \(String(format: "%.0f", stressScore!.overallScore))/100") + } + } + return LoopInsightsAggregatedStats( period: period, - glucoseStats: try await glucoseStats, - insulinStats: try await insulinStats, + glucoseStats: resolvedGlucoseStats, + insulinStats: resolvedInsulinStats, carbStats: try await carbStats, - biometricStats: try await biometrics, + biometricStats: enrichedBiometrics, generatedAt: Date() ) } @@ -117,7 +168,26 @@ final class LoopInsights_DataAggregator { // MARK: - Glucose Stats private func computeGlucoseStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.GlucoseStats { - let samples = try await provider.getGlucoseSamples(start: start, end: end) + // First try Loop's local stores + var samples = try await provider.getGlucoseSamples(start: start, end: end) + + // Supplement with HealthKit data for longer periods or when Loop stores have gaps + if let hkManager = healthKitManager { + do { + let hkGlucose = try await hkManager.fetchGlucoseSamples(start: start, end: end) + // Loop writes CGM data to HealthKit, so HK always has >= Loop store data. + // Use HealthKit data when it has more samples (longer history). + if hkGlucose.count > samples.count { + print("[LoopInsights] HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(samples.count) — using HealthKit data") + return computeGlucoseStatsFromValues( + values: hkGlucose.map { (date: $0.date, mgdl: $0.mgdl) }, + start: start, end: end + ) + } + } catch { + print("[LoopInsights] HealthKit glucose fetch error (continuing with Loop store data): \(error)") + } + } guard !samples.isEmpty else { throw LoopInsightsError.insufficientData("No glucose data available for the selected period") @@ -133,14 +203,18 @@ final class LoopInsights_DataAggregator { let cv = (stdDev / average) * 100 - // Time in range calculations (70-180 mg/dL standard range) - let inRange = glucoseValues.filter { $0 >= 70 && $0 <= 180 } - let belowRange = glucoseValues.filter { $0 < 70 } - let aboveRange = glucoseValues.filter { $0 > 180 } + // Time in range calculations — 5-zone breakdown (Clarity-style) + let veryHighCount = glucoseValues.filter { $0 > 250 }.count + let highCount = glucoseValues.filter { $0 > 180 && $0 <= 250 }.count + let inRangeCount = glucoseValues.filter { $0 >= 70 && $0 <= 180 }.count + let lowCount = glucoseValues.filter { $0 >= 54 && $0 < 70 }.count + let veryLowCount = glucoseValues.filter { $0 < 54 }.count - let tir = (Double(inRange.count) / count) * 100 - let tbr = (Double(belowRange.count) / count) * 100 - let tar = (Double(aboveRange.count) / count) * 100 + let tir = (Double(inRangeCount) / count) * 100 + let tvh = (Double(veryHighCount) / count) * 100 + let th = (Double(highCount) / count) * 100 + let tl = (Double(lowCount) / count) * 100 + let tvl = (Double(veryLowCount) / count) * 100 // GMI (Glucose Management Indicator) = 3.31 + 0.02392 × mean glucose (mg/dL) let gmi = 3.31 + (0.02392 * average) @@ -161,8 +235,55 @@ final class LoopInsights_DataAggregator { standardDeviation: stdDev, coefficientOfVariation: cv, timeInRange: tir, - timeBelowRange: tbr, - timeAboveRange: tar, + timeVeryHigh: tvh, + timeHigh: th, + timeLow: tl, + timeVeryLow: tvl, + gmi: gmi, + sampleCount: glucoseValues.count, + hourlyAverages: hourlyAverages + ) + } + + /// Compute glucose stats from raw (date, mg/dL) tuples — used for HealthKit-sourced data + private func computeGlucoseStatsFromValues(values: [(date: Date, mgdl: Double)], start: Date, end: Date) -> LoopInsightsAggregatedStats.GlucoseStats { + let glucoseValues = values.map { $0.mgdl } + let count = Double(glucoseValues.count) + + let average = glucoseValues.reduce(0, +) / count + let variance = glucoseValues.reduce(0) { $0 + pow($1 - average, 2) } / count + let stdDev = sqrt(variance) + let cv = (stdDev / average) * 100 + + let veryHighCount = glucoseValues.filter { $0 > 250 }.count + let highCount = glucoseValues.filter { $0 > 180 && $0 <= 250 }.count + let inRangeCount = glucoseValues.filter { $0 >= 70 && $0 <= 180 }.count + let lowCount = glucoseValues.filter { $0 >= 54 && $0 < 70 }.count + let veryLowCount = glucoseValues.filter { $0 < 54 }.count + let tir = (Double(inRangeCount) / count) * 100 + let tvh = (Double(veryHighCount) / count) * 100 + let th = (Double(highCount) / count) * 100 + let tl = (Double(lowCount) / count) * 100 + let tvl = (Double(veryLowCount) / count) * 100 + let gmi = 3.31 + (0.02392 * average) + + var hourlyBuckets: [Int: [Double]] = [:] + let calendar = Calendar.current + for v in values { + let hour = calendar.component(.hour, from: v.date) + hourlyBuckets[hour, default: []].append(v.mgdl) + } + let hourlyAverages = hourlyBuckets.mapValues { $0.reduce(0, +) / Double($0.count) } + + return LoopInsightsAggregatedStats.GlucoseStats( + averageGlucose: average, + standardDeviation: stdDev, + coefficientOfVariation: cv, + timeInRange: tir, + timeVeryHigh: tvh, + timeHigh: th, + timeLow: tl, + timeVeryLow: tvl, gmi: gmi, sampleCount: glucoseValues.count, hourlyAverages: hourlyAverages @@ -172,7 +293,20 @@ final class LoopInsights_DataAggregator { // MARK: - Insulin Stats private func computeInsulinStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.InsulinStats { - let doses = try await provider.getNormalizedDoseEntries(start: start, end: end) + var doses = try await provider.getNormalizedDoseEntries(start: start, end: end) + + // Supplement with HealthKit insulin delivery for longer periods + if let hkManager = healthKitManager { + do { + let hkInsulin = try await hkManager.fetchInsulinDelivery(start: start, end: end) + if hkInsulin.count > doses.count { + print("[LoopInsights] HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(doses.count) — using HealthKit data") + return computeInsulinStatsFromHK(hkInsulin, start: start, end: end) + } + } catch { + print("[LoopInsights] HealthKit insulin fetch error (continuing with Loop store data): \(error)") + } + } let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) @@ -220,14 +354,70 @@ final class LoopInsights_DataAggregator { basalPercentage: basalPercent, bolusPercentage: bolusPercent, hourlyBasalAverages: hourlyBasalAverages, - correctionBolusCount: correctionCount + correctionBolusCount: correctionCount, + negativeBasalStats: nil + ) + } + + /// Compute insulin stats from HealthKit insulin delivery tuples + private func computeInsulinStatsFromHK( + _ deliveries: [(date: Date, units: Double, duration: TimeInterval, purpose: HKInsulinDeliveryReason?)], + start: Date, end: Date + ) -> LoopInsightsAggregatedStats.InsulinStats { + let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) + let calendar = Calendar.current + + var totalBasal: Double = 0 + var totalBolus: Double = 0 + var hourlyBasalBuckets: [Int: [Double]] = [:] + var correctionCount = 0 + + for delivery in deliveries { + let hour = calendar.component(.hour, from: delivery.date) + if delivery.purpose == .basal { + totalBasal += delivery.units + let durationHours = max(delivery.duration / 3600, 0.001) + let rate = delivery.units / durationHours + hourlyBasalBuckets[hour, default: []].append(rate) + } else { + totalBolus += delivery.units + correctionCount += 1 + } + } + + let totalInsulin = totalBasal + totalBolus + let tdd = totalInsulin / dayCount + let basalPercent = totalInsulin > 0 ? (totalBasal / totalInsulin) * 100 : 50 + let bolusPercent = totalInsulin > 0 ? (totalBolus / totalInsulin) * 100 : 50 + let hourlyBasalAverages = hourlyBasalBuckets.mapValues { $0.reduce(0, +) / Double($0.count) } + + return LoopInsightsAggregatedStats.InsulinStats( + totalDailyDose: tdd, + basalPercentage: basalPercent, + bolusPercentage: bolusPercent, + hourlyBasalAverages: hourlyBasalAverages, + correctionBolusCount: correctionCount, + negativeBasalStats: nil ) } // MARK: - Carb Stats private func computeCarbStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.CarbStats { - let entries = try await provider.getCarbEntries(start: start, end: end) + var entries = try await provider.getCarbEntries(start: start, end: end) + + // Supplement with HealthKit carb data for longer periods + if let hkManager = healthKitManager { + do { + let hkCarbs = try await hkManager.fetchCarbEntries(start: start, end: end) + if hkCarbs.count > entries.count { + print("[LoopInsights] HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(entries.count) — using HealthKit data") + return computeCarbStatsFromHK(hkCarbs, start: start, end: end) + } + } catch { + print("[LoopInsights] HealthKit carbs fetch error (continuing with Loop store data): \(error)") + } + } let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) let totalCarbs = entries.reduce(0.0) { $0 + $1.quantity.doubleValue(for: .gram()) } @@ -250,4 +440,27 @@ final class LoopInsights_DataAggregator { hourlyMealFrequency: hourlyFrequency ) } + + /// Compute carb stats from HealthKit (date, grams) tuples + private func computeCarbStatsFromHK(_ carbEntries: [(date: Date, grams: Double)], start: Date, end: Date) -> LoopInsightsAggregatedStats.CarbStats { + let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) + let totalCarbs = carbEntries.reduce(0.0) { $0 + $1.grams } + let avgDaily = totalCarbs / dayCount + let mealCount = carbEntries.count + let avgPerMeal = mealCount > 0 ? totalCarbs / Double(mealCount) : 0 + + var hourlyFrequency: [Int: Int] = [:] + let calendar = Calendar.current + for entry in carbEntries { + let hour = calendar.component(.hour, from: entry.date) + hourlyFrequency[hour, default: 0] += 1 + } + + return LoopInsightsAggregatedStats.CarbStats( + averageDailyCarbs: avgDaily, + mealCount: mealCount, + averageCarbsPerMeal: avgPerMeal, + hourlyMealFrequency: hourlyFrequency + ) + } } diff --git a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift new file mode 100644 index 0000000000..b85db8d84b --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift @@ -0,0 +1,240 @@ +// +// LoopInsights_FoodResponseAnalyzer.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +/// Analyzes glucose responses to different food types by matching carb entries +/// with subsequent glucose data. Produces per-food statistics and meal events +/// for the Meal Insights view and AI prompt enrichment. +final class LoopInsights_FoodResponseAnalyzer { + + // MARK: - Deduplication + + /// Remove near-duplicate carb entries that share a similar timestamp and carb amount. + /// Keeps the latest entry in each cluster (within 5 minutes and 20% carb tolerance). + private static func deduplicateCarbEntries(_ entries: [StoredCarbEntry]) -> [StoredCarbEntry] { + guard entries.count > 1 else { return entries } + + let sorted = entries.sorted { $0.startDate < $1.startDate } + var kept: [StoredCarbEntry] = [] + + for entry in sorted { + let carbs = entry.quantity.doubleValue(for: .gram()) + let isDuplicate = kept.contains { existing in + let existingCarbs = existing.quantity.doubleValue(for: .gram()) + let timeDiff = abs(entry.startDate.timeIntervalSince(existing.startDate)) + let carbDiff = carbs > 0 ? abs(carbs - existingCarbs) / carbs : abs(carbs - existingCarbs) + return timeDiff < 300 && carbDiff < 0.2 // Within 5 min and 20% carbs + } + if !isDuplicate { + kept.append(entry) + } + } + + return kept + } + + // MARK: - Food Response Patterns + + /// Analyze food response patterns by grouping carb entries by foodType + /// and matching with glucose samples 0-4h after each meal. + static func analyzeFoodResponses( + carbEntries: [StoredCarbEntry], + glucoseSamples: [StoredGlucoseSample] + ) -> [LoopInsightsFoodResponsePattern] { + let dedupedEntries = deduplicateCarbEntries(carbEntries) + + // Group entries by foodType (skip entries with no foodType) + var grouped: [String: [StoredCarbEntry]] = [:] + for entry in dedupedEntries { + let foodType = entry.foodType ?? "Unknown" + guard !foodType.isEmpty else { continue } + grouped[foodType, default: []].append(entry) + } + + // Sort glucose samples by date for efficient lookup + let sortedGlucose = glucoseSamples.sorted { $0.startDate < $1.startDate } + + var patterns: [LoopInsightsFoodResponsePattern] = [] + + for (foodType, entries) in grouped { + guard entries.count >= 2 else { continue } // Need at least 2 meals for a pattern + + var peakRises: [Double] = [] + var timesToPeak: [Double] = [] + var aucs: [Double] = [] + var twoHourAvgs: [Double] = [] + var fourHourAvgs: [Double] = [] + var carbAmounts: [Double] = [] + + for entry in entries { + let mealDate = entry.startDate + let carbs = entry.quantity.doubleValue(for: .gram()) + carbAmounts.append(carbs) + + // Get pre-meal glucose (30 min before to meal time) + let preMealWindow = mealDate.addingTimeInterval(-1800)...mealDate + let preMealSamples = sortedGlucose.filter { preMealWindow.contains($0.startDate) } + guard !preMealSamples.isEmpty else { continue } + let preMealAvg = preMealSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) }.reduce(0, +) / Double(preMealSamples.count) + + // Get post-meal glucose (0-4h after meal) + let postMealEnd = mealDate.addingTimeInterval(4 * 3600) + let postMealSamples = sortedGlucose.filter { + $0.startDate > mealDate && $0.startDate <= postMealEnd + } + guard postMealSamples.count >= 4 else { continue } + + let postValues = postMealSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } + + // Peak rise + let peak = postValues.max() ?? preMealAvg + let peakRise = peak - preMealAvg + peakRises.append(peakRise) + + // Time to peak + if let peakSample = postMealSamples.max(by: { $0.quantity.doubleValue(for: .milligramsPerDeciliter) < $1.quantity.doubleValue(for: .milligramsPerDeciliter) }) { + let minutesToPeak = peakSample.startDate.timeIntervalSince(mealDate) / 60 + timesToPeak.append(minutesToPeak) + } + + // AUC (trapezoidal approximation, mg/dL * hours above pre-meal) + var auc: Double = 0 + for i in 1.. Double = { vals in + vals.isEmpty ? 0 : vals.reduce(0, +) / Double(vals.count) + } + + patterns.append(LoopInsightsFoodResponsePattern( + foodType: foodType, + mealCount: entries.count, + averageCarbsPerMeal: avg(carbAmounts), + peakGlucoseRise: avg(peakRises), + timeToPeakMinutes: avg(timesToPeak), + averageResponseAUC: avg(aucs), + twoHourPostMealAvg: avg(twoHourAvgs), + fourHourPostMealAvg: avg(fourHourAvgs) + )) + } + + // Sort by peak glucose rise (highest impact first) + return patterns.sorted { $0.peakGlucoseRise > $1.peakGlucoseRise } + } + + // MARK: - Recent Meal Events + + /// Build recent meal events with glucose timeline for the meal debrief view. + /// Returns up to `limit` most recent meals. + static func buildRecentMealEvents( + carbEntries: [StoredCarbEntry], + glucoseSamples: [StoredGlucoseSample], + limit: Int = 20 + ) -> [LoopInsightsMealEvent] { + let dedupedEntries = deduplicateCarbEntries(carbEntries) + let sortedEntries = dedupedEntries.sorted { $0.startDate > $1.startDate } + let sortedGlucose = glucoseSamples.sorted { $0.startDate < $1.startDate } + + var events: [LoopInsightsMealEvent] = [] + + for entry in sortedEntries.prefix(limit * 2) { // Check extra in case some lack glucose + let mealDate = entry.startDate + let foodType = entry.foodType ?? "Unknown" + let carbs = entry.quantity.doubleValue(for: .gram()) + + // Pre-meal glucose + let preMealWindow = mealDate.addingTimeInterval(-1800)...mealDate + let preMealSamples = sortedGlucose.filter { preMealWindow.contains($0.startDate) } + guard !preMealSamples.isEmpty else { continue } + let preMealGlucose = preMealSamples.last!.quantity.doubleValue(for: .milligramsPerDeciliter) + + // Post-meal glucose (0-4h) + let postEnd = mealDate.addingTimeInterval(4 * 3600) + let postSamples = sortedGlucose.filter { $0.startDate > mealDate && $0.startDate <= postEnd } + guard postSamples.count >= 4 else { continue } + + let postValues = postSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } + let peakGlucose = postValues.max() ?? preMealGlucose + + // 2-hour glucose + let twoHourWindow = mealDate.addingTimeInterval(1.5 * 3600)...mealDate.addingTimeInterval(2.5 * 3600) + let twoHourSamples = postSamples.filter { twoHourWindow.contains($0.startDate) } + let twoHourGlucose = twoHourSamples.isEmpty ? preMealGlucose : + twoHourSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) }.reduce(0, +) / Double(twoHourSamples.count) + + // Build timeline (every ~15 min) + var timeline: [(minutesAfter: Int, glucose: Double)] = [] + timeline.append((0, preMealGlucose)) + for sample in postSamples { + let minutes = Int(sample.startDate.timeIntervalSince(mealDate) / 60) + let glucose = sample.quantity.doubleValue(for: .milligramsPerDeciliter) + timeline.append((minutes, glucose)) + } + + events.append(LoopInsightsMealEvent( + date: mealDate, + foodType: foodType, + carbs: carbs, + preMealGlucose: preMealGlucose, + peakGlucose: peakGlucose, + twoHourGlucose: twoHourGlucose, + glucoseTimeline: timeline + )) + + if events.count >= limit { break } + } + + return events + } + + // MARK: - Prompt Context + + /// Build prompt context string from food response patterns + static func buildFoodResponsePromptContext(_ patterns: [LoopInsightsFoodResponsePattern]) -> String { + guard !patterns.isEmpty else { return "" } + + var ctx = "## Food-Type Response Patterns\n" + for pattern in patterns.prefix(8) { + ctx += "- **\(pattern.foodType)** (\(pattern.mealCount) meals, avg \(String(format: "%.0f", pattern.averageCarbsPerMeal))g): " + ctx += "peak rise \(String(format: "%.0f", pattern.peakGlucoseRise)) mg/dL in \(String(format: "%.0f", pattern.timeToPeakMinutes)) min, " + ctx += "2h post \(String(format: "%.0f", pattern.twoHourPostMealAvg)) mg/dL, " + ctx += "4h post \(String(format: "%.0f", pattern.fourHourPostMealAvg)) mg/dL\n" + } + let highImpact = patterns.filter { $0.peakGlucoseRise > 60 } + if !highImpact.isEmpty { + ctx += "** HIGH IMPACT FOODS: \(highImpact.map { $0.foodType }.joined(separator: ", ")) cause >60 mg/dL glucose spikes **\n" + } + return ctx + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift index 777044301e..37d5f4bc64 100644 --- a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift +++ b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift @@ -25,6 +25,11 @@ final class LoopInsights_HealthKitManager: ObservableObject { if let sleep = HKObjectType.categoryType(forIdentifier: .sleepAnalysis) { types.insert(sleep) } if let energy = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned) { types.insert(energy) } if let weight = HKQuantityType.quantityType(forIdentifier: .bodyMass) { types.insert(weight) } + if let caffeine = HKQuantityType.quantityType(forIdentifier: .dietaryCaffeine) { types.insert(caffeine) } + // Core diabetes data types (Loop writes these — we read them for longer analysis periods) + if let glucose = HKQuantityType.quantityType(forIdentifier: .bloodGlucose) { types.insert(glucose) } + if let insulin = HKQuantityType.quantityType(forIdentifier: .insulinDelivery) { types.insert(insulin) } + if let carbs = HKQuantityType.quantityType(forIdentifier: .dietaryCarbohydrates) { types.insert(carbs) } return types }() @@ -95,7 +100,8 @@ final class LoopInsights_HealthKitManager: ObservableObject { steps: stepResult, sleep: sleepResult, activeEnergy: energyResult, - weight: weightResult + weight: weightResult, + stressScore: nil // Computed by AdvancedAnalyzers in DataAggregator ) } @@ -312,6 +318,98 @@ final class LoopInsights_HealthKitManager: ObservableObject { ) } + // MARK: - Core Diabetes Data (from HealthKit) + + /// Fetch blood glucose samples from HealthKit for the given date range. + /// Returns (timestamp, mg/dL) tuples. Loop writes CGM data to HealthKit, + /// so this provides access to historical data beyond Loop's local store retention. + func fetchGlucoseSamples(start: Date, end: Date) async throws -> [(date: Date, mgdl: Double)] { + guard let glucoseType = HKQuantityType.quantityType(forIdentifier: .bloodGlucose) else { return [] } + + let samples = try await querySamples(type: glucoseType, start: start, end: end) + let mgdlUnit = HKUnit.gramUnit(with: .milli).unitDivided(by: HKUnit.literUnit(with: .deci)) + + return samples.map { sample in + (date: sample.startDate, mgdl: sample.quantity.doubleValue(for: mgdlUnit)) + } + } + + /// Fetch insulin delivery samples from HealthKit for the given date range. + /// Loop writes all doses (basal + bolus) to HealthKit. + func fetchInsulinDelivery(start: Date, end: Date) async throws -> [(date: Date, units: Double, duration: TimeInterval, purpose: HKInsulinDeliveryReason?)] { + guard let insulinType = HKQuantityType.quantityType(forIdentifier: .insulinDelivery) else { return [] } + + let predicate = HKQuery.predicateForSamples(withStart: start, end: end, options: .strictStartDate) + + let samples: [HKQuantitySample] = try await withCheckedThrowingContinuation { continuation in + let query = HKSampleQuery( + sampleType: insulinType, + predicate: predicate, + limit: HKObjectQueryNoLimit, + sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)] + ) { _, results, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (results as? [HKQuantitySample]) ?? []) + } + } + healthStore.execute(query) + } + + let unitUnit = HKUnit.internationalUnit() + return samples.map { sample in + let purpose: HKInsulinDeliveryReason? + if let meta = sample.metadata, + let reasonRaw = meta[HKMetadataKeyInsulinDeliveryReason] as? NSNumber { + purpose = HKInsulinDeliveryReason(rawValue: reasonRaw.intValue) + } else { + purpose = nil + } + return ( + date: sample.startDate, + units: sample.quantity.doubleValue(for: unitUnit), + duration: sample.endDate.timeIntervalSince(sample.startDate), + purpose: purpose + ) + } + } + + /// Fetch dietary carbohydrate entries from HealthKit for the given date range. + /// Loop writes carb entries to HealthKit. + func fetchCarbEntries(start: Date, end: Date) async throws -> [(date: Date, grams: Double)] { + guard let carbType = HKQuantityType.quantityType(forIdentifier: .dietaryCarbohydrates) else { return [] } + + let samples = try await querySamples(type: carbType, start: start, end: end) + let gramUnit = HKUnit.gram() + + return samples.map { sample in + (date: sample.startDate, grams: sample.quantity.doubleValue(for: gramUnit)) + } + } + + // MARK: - Caffeine + + /// Fetch dietary caffeine entries from HealthKit for the given date range. + /// Returns LoopInsightsCaffeineEntry objects tagged with isFromHealthKit = true. + func fetchCaffeineEntries(start: Date, end: Date) async throws -> [LoopInsightsCaffeineEntry] { + guard let caffeineType = HKQuantityType.quantityType(forIdentifier: .dietaryCaffeine) else { return [] } + + let samples = try await querySamples(type: caffeineType, start: start, end: end) + let mgUnit = HKUnit.gramUnit(with: .milli) + + return samples.map { sample in + let mg = sample.quantity.doubleValue(for: mgUnit) + let sourceName = sample.sourceRevision.source.name + return LoopInsightsCaffeineEntry( + timestamp: sample.startDate, + milligrams: mg, + source: sourceName, + isFromHealthKit: true + ) + } + } + // MARK: - Helpers /// Generic sample query wrapper diff --git a/Loop/Services/LoopInsights/LoopInsights_NightscoutImporter.swift b/Loop/Services/LoopInsights/LoopInsights_NightscoutImporter.swift new file mode 100644 index 0000000000..85ae543f0a --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_NightscoutImporter.swift @@ -0,0 +1,213 @@ +// +// LoopInsights_NightscoutImporter.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit + +/// Nightscout API v1 client: fetches glucose entries and treatments, converts +/// to LoopKit types, and provides as an alternative data source for analysis. +final class LoopInsights_NightscoutImporter { + + private let config: LoopInsightsNightscoutConfig + + init(config: LoopInsightsNightscoutConfig) { + self.config = config + } + + // MARK: - Test Connection + + /// Test the Nightscout connection by fetching a single entry. + func testConnection() async throws -> Bool { + let url = try buildURL(path: "/api/v1/status.json") + var request = URLRequest(url: url) + addAuthHeaders(to: &request) + request.timeoutInterval = 10 + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse else { + throw LoopInsightsError.networkError(NSError(domain: "LoopInsights", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid response"])) + } + + if httpResponse.statusCode == 401 { + throw LoopInsightsError.aiProviderError("Authentication failed. Check your API secret.") + } + + guard (200...299).contains(httpResponse.statusCode) else { + throw LoopInsightsError.aiProviderError("Nightscout returned status \(httpResponse.statusCode)") + } + + // Verify it's a valid Nightscout response + if let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any], + json["status"] as? String == "ok" || json["name"] != nil { + return true + } + + return true // Status endpoint returned 200, good enough + } + + // MARK: - Fetch Entries (SGV) + + /// Fetch glucose entries from Nightscout for the given date range. + func fetchGlucoseEntries(start: Date, end: Date) async throws -> [LoopInsightsNightscoutEntry] { + let startEpoch = Int(start.timeIntervalSince1970 * 1000) + let endEpoch = Int(end.timeIntervalSince1970 * 1000) + let path = "/api/v1/entries.json?find[date][$gte]=\(startEpoch)&find[date][$lte]=\(endEpoch)&count=10000" + + let url = try buildURL(path: path) + var request = URLRequest(url: url) + addAuthHeaders(to: &request) + request.timeoutInterval = 30 + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + (200...299).contains(httpResponse.statusCode) else { + throw LoopInsightsError.networkError(NSError(domain: "LoopInsights", code: -2, userInfo: [NSLocalizedDescriptionKey: "Failed to fetch entries"])) + } + + let decoder = JSONDecoder() + return try decoder.decode([LoopInsightsNightscoutEntry].self, from: data) + } + + // MARK: - Fetch Treatments + + /// Fetch treatments (carbs, insulin, temp basals) from Nightscout. + func fetchTreatments(start: Date, end: Date) async throws -> [LoopInsightsNightscoutTreatment] { + let formatter = ISO8601DateFormatter() + let startStr = formatter.string(from: start) + let endStr = formatter.string(from: end) + let path = "/api/v1/treatments.json?find[created_at][$gte]=\(startStr)&find[created_at][$lte]=\(endStr)&count=10000" + + let url = try buildURL(path: path) + var request = URLRequest(url: url) + addAuthHeaders(to: &request) + request.timeoutInterval = 30 + + let (data, response) = try await URLSession.shared.data(for: request) + + guard let httpResponse = response as? HTTPURLResponse, + (200...299).contains(httpResponse.statusCode) else { + throw LoopInsightsError.networkError(NSError(domain: "LoopInsights", code: -3, userInfo: [NSLocalizedDescriptionKey: "Failed to fetch treatments"])) + } + + let decoder = JSONDecoder() + return try decoder.decode([LoopInsightsNightscoutTreatment].self, from: data) + } + + // MARK: - Convert to LoopKit Types + + /// Convert Nightscout entries to StoredGlucoseSample-compatible format. + /// Returns glucose values as (date, mg/dL) tuples for aggregation. + func convertToGlucoseData(_ entries: [LoopInsightsNightscoutEntry]) -> [(date: Date, mgdl: Double)] { + return entries.compactMap { entry in + guard let date = entry.sampleDate, entry.sgv > 0 else { return nil } + return (date, entry.sgv) + } + } + + /// Convert Nightscout treatments to carb and dose data. + func convertToTreatmentData(_ treatments: [LoopInsightsNightscoutTreatment]) -> (carbs: [(date: Date, grams: Double, foodType: String?)], boluses: [(date: Date, units: Double)]) { + var carbs: [(date: Date, grams: Double, foodType: String?)] = [] + var boluses: [(date: Date, units: Double)] = [] + + for treatment in treatments { + guard let date = treatment.treatmentDate else { continue } + + if let carbAmount = treatment.carbs, carbAmount > 0 { + let foodType = treatment.eventType == "Meal Bolus" ? "Meal" : treatment.eventType + carbs.append((date, carbAmount, foodType)) + } + + if let insulin = treatment.insulin, insulin > 0 { + boluses.append((date, insulin)) + } + } + + return (carbs, boluses) + } + + // MARK: - Import All + + /// Import all data from Nightscout for the given period and return as aggregated stats. + func importData(start: Date, end: Date) async throws -> LoopInsightsNightscoutImportResult { + async let entries = fetchGlucoseEntries(start: start, end: end) + async let treatments = fetchTreatments(start: start, end: end) + + let fetchedEntries = try await entries + let fetchedTreatments = try await treatments + + let glucoseData = convertToGlucoseData(fetchedEntries) + let treatmentData = convertToTreatmentData(fetchedTreatments) + + return LoopInsightsNightscoutImportResult( + glucoseReadings: glucoseData, + carbEntries: treatmentData.carbs, + bolusEntries: treatmentData.boluses, + entryCount: fetchedEntries.count, + treatmentCount: fetchedTreatments.count + ) + } + + // MARK: - Helpers + + private func buildURL(path: String) throws -> URL { + var siteURL = config.siteURL.trimmingCharacters(in: .whitespacesAndNewlines) + siteURL = siteURL.trimmingCharacters(in: CharacterSet(charactersIn: "/")) + + guard !siteURL.isEmpty else { + throw LoopInsightsError.insufficientData("Nightscout URL is not configured") + } + + // URL-encode the query parameters properly + guard let url = URL(string: siteURL + path) else { + throw LoopInsightsError.insufficientData("Invalid Nightscout URL: \(siteURL)\(path)") + } + + return url + } + + private func addAuthHeaders(to request: inout URLRequest) { + if !config.apiSecret.isEmpty { + // Nightscout uses SHA1 hash of API secret + let secretHash = config.apiSecret.sha1Hash() + request.setValue(secretHash, forHTTPHeaderField: "api-secret") + } + } +} + +// MARK: - Import Result + +/// Result of a Nightscout data import +struct LoopInsightsNightscoutImportResult { + let glucoseReadings: [(date: Date, mgdl: Double)] + let carbEntries: [(date: Date, grams: Double, foodType: String?)] + let bolusEntries: [(date: Date, units: Double)] + let entryCount: Int + let treatmentCount: Int + + var summary: String { + return "\(entryCount) glucose entries, \(treatmentCount) treatments (\(carbEntries.count) carbs, \(bolusEntries.count) boluses)" + } +} + +// MARK: - SHA1 Helper + +import CommonCrypto + +extension String { + func sha1Hash() -> String { + guard let data = self.data(using: .utf8) else { return self } + var digest = [UInt8](repeating: 0, count: Int(CC_SHA1_DIGEST_LENGTH)) + data.withUnsafeBytes { + _ = CC_SHA1($0.baseAddress, CC_LONG(data.count), &digest) + } + return digest.map { String(format: "%02x", $0) }.joined() + } +} diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index 94a6f3ede6..054c653b63 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -66,6 +66,9 @@ final class LoopInsights_DashboardViewModel: ObservableObject { /// Whether current metrics indicate settings are already performing well @Published var settingsAlreadyOptimal: Bool = false + /// Glucose samples for AGP chart (populated during analysis) + @Published var agpGlucoseSamples: [StoredGlucoseSample] = [] + // MARK: - Dependencies let coordinator: LoopInsights_Coordinator @@ -124,17 +127,29 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats + // Fetch glucose samples for AGP chart + if LoopInsights_FeatureFlags.agpChartEnabled { + let start = Date().addingTimeInterval(-analysisPeriod.timeInterval) + if let samples = try? await coordinator.fetchGlucoseSamples(start: start, end: Date()) { + self.agpGlucoseSamples = samples + } + } + // Capture current settings let snapshot = try coordinator.captureCurrentSnapshot() self.currentSnapshot = snapshot + // Phase 5: Build supplemental context from advanced analyzers + let supplementalContext = await coordinator.buildSupplementalContext(stats: stats) + // Run AI analysis (include recent changes so AI knows data predates current settings) let recentChanges = self.recentlyAppliedRecords() let response = try await coordinator.aiAnalysis.analyze( settingType: focusSettingType, currentSettings: snapshot, stats: stats, - recentChanges: recentChanges + recentChanges: recentChanges, + supplementalContext: supplementalContext ) // Show patterns, score, and AI results together after analysis completes @@ -193,9 +208,20 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats + // Fetch glucose samples for AGP chart + if LoopInsights_FeatureFlags.agpChartEnabled { + let start = Date().addingTimeInterval(-analysisPeriod.timeInterval) + if let samples = try? await coordinator.fetchGlucoseSamples(start: start, end: Date()) { + self.agpGlucoseSamples = samples + } + } + let snapshot = try coordinator.captureCurrentSnapshot() self.currentSnapshot = snapshot + // Phase 5: Build supplemental context from advanced analyzers + let supplementalContext = await coordinator.buildSupplementalContext(stats: stats) + // Analyze each setting type in tuning order: CR → ISF → BR let recentChanges = self.recentlyAppliedRecords() for settingType in LoopInsightsSettingType.allCases { @@ -203,7 +229,8 @@ final class LoopInsights_DashboardViewModel: ObservableObject { settingType: settingType, currentSettings: snapshot, stats: stats, - recentChanges: recentChanges + recentChanges: recentChanges, + supplementalContext: supplementalContext ) self.overallAssessment = response.overallAssessment diff --git a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift new file mode 100644 index 0000000000..d36fb7c76b --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift @@ -0,0 +1,295 @@ +// +// LoopInsights_AGPChartView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKit +import HealthKit + +/// Ambulatory Glucose Profile chart: renders percentile bands (p10/p25/p50/p75/p90) +/// as layered SwiftUI Paths over a 24-hour x-axis. iOS 15 compatible (no Charts framework). +struct LoopInsights_AGPChartView: View { + + let glucoseSamples: [StoredGlucoseSample] + + /// Computed AGP data points (48 points, every 30 min) + private var agpData: [LoopInsightsAGPDataPoint] { + Self.computeAGP(from: glucoseSamples) + } + + private let targetLow: Double = 70 + private let targetHigh: Double = 180 + private let chartMinY: Double = 40 + private let chartMaxY: Double = 300 + private let leftMargin: Double = 28 + private let rightMargin: Double = 8 + private let topMargin: Double = 8 + private let bottomMargin: Double = 16 + + var body: some View { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP chart title")) + .font(.subheadline.weight(.semibold)) + + if agpData.isEmpty { + Text(NSLocalizedString("Not enough data for AGP chart", comment: "LoopInsights AGP no data")) + .font(.caption) + .foregroundColor(.secondary) + .frame(maxWidth: .infinity, alignment: .center) + .padding(.vertical, 8) + } else { + GeometryReader { geo in + let w = geo.size.width + let h = geo.size.height + + ZStack(alignment: .topLeading) { + // Target range band (70-180) + targetRangePath(width: w, height: h) + .fill(Color.green.opacity(0.12)) + + // Y-axis grid lines at target boundaries + targetGridLines(width: w, height: h) + + // P10-P90 band (lightest) + percentileBand(data: agpData, lowerKey: \.p10, upperKey: \.p90, width: w, height: h) + .fill(Color.blue.opacity(0.12)) + + // P25-P75 band (medium) + percentileBand(data: agpData, lowerKey: \.p25, upperKey: \.p75, width: w, height: h) + .fill(Color.blue.opacity(0.25)) + + // P50 median line (bold) + medianLine(data: agpData, width: w, height: h) + .stroke(Color.blue, lineWidth: 2.5) + + // Y-axis labels + yAxisLabels(width: w, height: h) + + // X-axis labels + xAxisLabels(width: w, height: h) + } + } + .frame(height: 180) + + // Legend + legendView + } + } + } + + // MARK: - Legend + + private var legendView: some View { + HStack(spacing: 0) { + legendItem(color: Color.green.opacity(0.3), label: "70-180") + Spacer() + legendItem(color: Color.blue.opacity(0.12), label: "P10-P90") + Spacer() + legendItem(color: Color.blue.opacity(0.25), label: "P25-P75") + Spacer() + HStack(spacing: 3) { + RoundedRectangle(cornerRadius: 1) + .fill(Color.blue) + .frame(width: 14, height: 2.5) + Text("Median") + .font(.system(size: 12)) + .foregroundColor(.secondary) + } + } + .padding(.horizontal, 4) + } + + // MARK: - Chart Components + + /// Target range as a proper Path that fills the correct Y band + private func targetRangePath(width: Double, height: Double) -> Path { + let plotLeft = leftMargin + let plotRight = width - rightMargin + let topY = yPosition(for: targetHigh, height: height) + let bottomY = yPosition(for: targetLow, height: height) + + var path = Path() + path.addRect(CGRect( + x: plotLeft, + y: topY, + width: plotRight - plotLeft, + height: bottomY - topY + )) + return path + } + + /// Dashed grid lines at 70 and 180 + private func targetGridLines(width: Double, height: Double) -> some View { + let plotLeft = leftMargin + let plotRight = width - rightMargin + let y70 = yPosition(for: targetLow, height: height) + let y180 = yPosition(for: targetHigh, height: height) + + return ZStack { + Path { p in + p.move(to: CGPoint(x: plotLeft, y: y70)) + p.addLine(to: CGPoint(x: plotRight, y: y70)) + } + .stroke(Color.green.opacity(0.3), style: StrokeStyle(lineWidth: 0.5, dash: [4, 3])) + + Path { p in + p.move(to: CGPoint(x: plotLeft, y: y180)) + p.addLine(to: CGPoint(x: plotRight, y: y180)) + } + .stroke(Color.green.opacity(0.3), style: StrokeStyle(lineWidth: 0.5, dash: [4, 3])) + } + } + + private func percentileBand, U: KeyPath>( + data: [LoopInsightsAGPDataPoint], + lowerKey: L, + upperKey: U, + width: Double, + height: Double + ) -> Path { + var path = Path() + guard !data.isEmpty else { return path } + + // Upper line (left to right) + let firstX = xPosition(for: data[0].minuteOfDay, width: width) + let firstUpperY = yPosition(for: data[0][keyPath: upperKey], height: height) + path.move(to: CGPoint(x: firstX, y: firstUpperY)) + + for point in data.dropFirst() { + let x = xPosition(for: point.minuteOfDay, width: width) + let y = yPosition(for: point[keyPath: upperKey], height: height) + path.addLine(to: CGPoint(x: x, y: y)) + } + + // Lower line (right to left) + for point in data.reversed() { + let x = xPosition(for: point.minuteOfDay, width: width) + let y = yPosition(for: point[keyPath: lowerKey], height: height) + path.addLine(to: CGPoint(x: x, y: y)) + } + + path.closeSubpath() + return path + } + + private func medianLine(data: [LoopInsightsAGPDataPoint], width: Double, height: Double) -> Path { + var path = Path() + guard let first = data.first else { return path } + + path.move(to: CGPoint( + x: xPosition(for: first.minuteOfDay, width: width), + y: yPosition(for: first.p50, height: height) + )) + + for point in data.dropFirst() { + path.addLine(to: CGPoint( + x: xPosition(for: point.minuteOfDay, width: width), + y: yPosition(for: point.p50, height: height) + )) + } + + return path + } + + private func xAxisLabels(width: Double, height: Double) -> some View { + let hours = [0, 3, 6, 9, 12, 15, 18, 21] + return ZStack { + ForEach(hours, id: \.self) { hour in + let x = xPosition(for: hour * 60, width: width) + Text(formatHour(hour)) + .font(.system(size: 8)) + .foregroundColor(.secondary) + .position(x: x, y: height - 4) + } + } + } + + private func yAxisLabels(width: Double, height: Double) -> some View { + let values: [Double] = [70, 120, 180, 250] + return ZStack { + ForEach(values, id: \.self) { value in + let y = yPosition(for: value, height: height) + Text("\(Int(value))") + .font(.system(size: 8)) + .foregroundColor(.secondary) + .position(x: 14, y: y) + } + } + } + + private func legendItem(color: Color, label: String) -> some View { + HStack(spacing: 3) { + RoundedRectangle(cornerRadius: 2) + .fill(color) + .frame(width: 12, height: 10) + Text(label) + .font(.system(size: 12)) + .foregroundColor(.secondary) + } + } + + // MARK: - Coordinate Mapping + + private func xPosition(for minuteOfDay: Int, width: Double) -> Double { + let plotWidth = width - leftMargin - rightMargin + return leftMargin + (Double(minuteOfDay) / 1440.0) * plotWidth + } + + private func yPosition(for glucose: Double, height: Double) -> Double { + let plotHeight = height - topMargin - bottomMargin + let clamped = max(chartMinY, min(chartMaxY, glucose)) + let fraction = (clamped - chartMinY) / (chartMaxY - chartMinY) + return topMargin + (1 - fraction) * plotHeight // Inverted Y axis + } + + private func formatHour(_ hour: Int) -> String { + let h = hour % 24 + if h == 0 { return "12a" } + if h < 12 { return "\(h)a" } + if h == 12 { return "12p" } + return "\(h - 12)p" + } + + // MARK: - AGP Computation + + /// Compute AGP data: 48 time points (every 30 min), each with percentiles + static func computeAGP(from samples: [StoredGlucoseSample]) -> [LoopInsightsAGPDataPoint] { + guard !samples.isEmpty else { return [] } + + let calendar = Calendar.current + + // Bucket samples by 30-minute windows + var buckets: [Int: [Double]] = [:] // minuteOfDay → glucose values + for sample in samples { + let hour = calendar.component(.hour, from: sample.startDate) + let minute = calendar.component(.minute, from: sample.startDate) + let minuteOfDay = hour * 60 + minute + let bucket = (minuteOfDay / 30) * 30 // Round to nearest 30-min + buckets[bucket, default: []].append( + sample.quantity.doubleValue(for: .milligramsPerDeciliter) + ) + } + + var dataPoints: [LoopInsightsAGPDataPoint] = [] + for minuteOfDay in stride(from: 0, to: 1440, by: 30) { + guard let values = buckets[minuteOfDay], values.count >= 3 else { continue } + let sorted = values.sorted() + let count = sorted.count + + dataPoints.append(LoopInsightsAGPDataPoint( + minuteOfDay: minuteOfDay, + p10: sorted[max(0, Int(Double(count) * 0.1))], + p25: sorted[max(0, Int(Double(count) * 0.25))], + p50: sorted[count / 2], + p75: sorted[min(count - 1, Int(Double(count) * 0.75))], + p90: sorted[min(count - 1, Int(Double(count) * 0.9))] + )) + } + + return dataPoints.sorted { $0.minuteOfDay < $1.minuteOfDay } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift b/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift new file mode 100644 index 0000000000..fcf8ab0e3f --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift @@ -0,0 +1,350 @@ +// +// LoopInsights_CaffeineLogView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Brand color for all caffeine UI +private let caffeineGreen = Color.green + +/// Caffeine logging UI: shows current level gauge, quick-add presets, and entry log. +struct LoopInsights_CaffeineLogView: View { + + @ObservedObject var tracker: LoopInsights_CaffeineTracker + @State private var customMg: String = "" + @State private var customSource: String = "" + @State private var showingCustomEntry = false + @State private var editingEntry: LoopInsightsCaffeineEntry? + @State private var editMg: String = "" + @State private var editSource: String = "" + @State private var editTimestamp: Date = Date() + @Environment(\.dismiss) private var dismiss + + private var currentState: LoopInsightsCaffeineState { + tracker.currentState() + } + + var body: some View { + List { + currentLevelSection + quickAddSection + if showingCustomEntry { + customEntrySection + } + recentEntriesSection + } + .navigationTitle(NSLocalizedString("Caffeine Tracker", comment: "LoopInsights caffeine title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + dismiss() + } + } + } + .sheet(item: $editingEntry) { entry in + editEntrySheet(entry) + } + .task { + await tracker.syncFromHealthKit() + } + } + + // MARK: - Current Level + + private var currentLevelSection: some View { + Section { + VStack(spacing: 12) { + // Level gauge + ZStack { + Circle() + .stroke(caffeineGreen.opacity(0.2), lineWidth: 8) + .frame(width: 100, height: 100) + + let level = min(currentState.currentLevelMg, 400) + Circle() + .trim(from: 0, to: level / 400) + .stroke(gaugeColor(level), style: StrokeStyle(lineWidth: 8, lineCap: .round)) + .frame(width: 100, height: 100) + .rotationEffect(.degrees(-90)) + + VStack(spacing: 0) { + Text(String(format: "%.0f", currentState.currentLevelMg)) + .font(.title2.weight(.bold)) + .foregroundColor(gaugeColor(currentState.currentLevelMg)) + Text("mg") + .font(.caption2) + .foregroundColor(.secondary) + } + } + + Text(NSLocalizedString("Estimated Caffeine Level", comment: "LoopInsights caffeine level label")) + .font(.caption) + .foregroundColor(.secondary) + + if currentState.entriesLast24h > 0 { + HStack(spacing: 16) { + VStack(spacing: 2) { + Text(String(format: "%.0f mg", currentState.totalMgLast24h)) + .font(.caption.weight(.semibold)) + .foregroundColor(caffeineGreen) + Text(NSLocalizedString("24h Total", comment: "LoopInsights caffeine 24h total")) + .font(.caption2) + .foregroundColor(.secondary) + } + VStack(spacing: 2) { + Text(String(format: "%.0f mg", currentState.peakLevelToday)) + .font(.caption.weight(.semibold)) + .foregroundColor(caffeineGreen) + Text(NSLocalizedString("Today's Peak", comment: "LoopInsights caffeine today peak")) + .font(.caption2) + .foregroundColor(.secondary) + } + if let lastTime = currentState.lastIntakeTime { + VStack(spacing: 2) { + Text(Self.timeFormatter.string(from: lastTime)) + .font(.caption.weight(.semibold)) + .foregroundColor(caffeineGreen) + Text(NSLocalizedString("Last Intake", comment: "LoopInsights caffeine last intake")) + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + } + } + .frame(maxWidth: .infinity) + .padding(.vertical, 8) + } + } + + // MARK: - Quick Add + + private var quickAddSection: some View { + Section(header: Text(NSLocalizedString("Quick Add", comment: "LoopInsights caffeine quick add header"))) { + let presets = LoopInsightsCaffeinePreset.defaults + let columns = [GridItem(.flexible()), GridItem(.flexible())] + + LazyVGrid(columns: columns, spacing: 8) { + ForEach(presets) { preset in + Button(action: { + tracker.logCaffeine(milligrams: preset.milligrams, source: preset.name) + }) { + HStack(spacing: 6) { + Image(systemName: preset.icon) + .font(.caption) + .foregroundColor(caffeineGreen) + VStack(alignment: .leading, spacing: 1) { + Text(preset.name) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.primary) + .lineLimit(1) + Text(String(format: "%.0f mg", preset.milligrams)) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + } + .padding(.horizontal, 10) + .padding(.vertical, 8) + .background(Color(.secondarySystemGroupedBackground)) + .cornerRadius(8) + } + .buttonStyle(.plain) + } + } + .listRowInsets(EdgeInsets(top: 4, leading: 4, bottom: 4, trailing: 4)) + + Button(action: { showingCustomEntry.toggle() }) { + HStack { + Image(systemName: showingCustomEntry ? "minus.circle" : "plus.circle") + Text(NSLocalizedString("Custom Entry", comment: "LoopInsights caffeine custom entry")) + } + .font(.subheadline) + .foregroundColor(caffeineGreen) + } + } + } + + // MARK: - Custom Entry + + private var customEntrySection: some View { + Section(header: Text(NSLocalizedString("Custom Caffeine Entry", comment: "LoopInsights custom caffeine header"))) { + TextField(NSLocalizedString("Amount (mg)", comment: "LoopInsights caffeine amount placeholder"), text: $customMg) + .keyboardType(.decimalPad) + TextField(NSLocalizedString("Source (e.g. Matcha Latte)", comment: "LoopInsights caffeine source placeholder"), text: $customSource) + + Button(action: { + if let mg = Double(customMg), mg > 0 { + let source = customSource.isEmpty ? "Custom" : customSource + tracker.logCaffeine(milligrams: mg, source: source) + customMg = "" + customSource = "" + showingCustomEntry = false + } + }) { + HStack { + Spacer() + Text(NSLocalizedString("Add Entry", comment: "LoopInsights caffeine add entry")) + .fontWeight(.medium) + Spacer() + } + .foregroundColor(.white) + .padding(.vertical, 8) + .background(Double(customMg) ?? 0 > 0 ? caffeineGreen : Color.gray) + .cornerRadius(8) + } + .buttonStyle(.plain) + .disabled(Double(customMg) ?? 0 <= 0) + } + } + + // MARK: - Recent Entries + + private var recentEntriesSection: some View { + Section(header: Text(NSLocalizedString("Recent Entries", comment: "LoopInsights caffeine recent entries"))) { + if tracker.entries.isEmpty { + Text(NSLocalizedString("No caffeine entries yet. Tap a preset above to log intake.", comment: "LoopInsights no caffeine entries")) + .font(.caption) + .foregroundColor(.secondary) + } else { + ForEach(tracker.entries.prefix(20)) { entry in + Button(action: { + if !entry.isFromHealthKit { + editMg = String(format: "%.0f", entry.milligrams) + editSource = entry.source + editTimestamp = entry.timestamp + editingEntry = entry + } + }) { + HStack { + VStack(alignment: .leading, spacing: 2) { + HStack(spacing: 4) { + Text(entry.source) + .font(.subheadline) + .foregroundColor(.primary) + if entry.isFromHealthKit { + Image(systemName: "heart.fill") + .font(.caption2) + .foregroundColor(.red) + } + } + Text(Self.dateTimeFormatter.string(from: entry.timestamp)) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + Text(String(format: "%.0f mg", entry.milligrams)) + .font(.subheadline.weight(.medium)) + .foregroundColor(caffeineGreen) + } + } + .buttonStyle(.plain) + } + .onDelete { indexSet in + let entriesToDelete = indexSet.compactMap { idx -> LoopInsightsCaffeineEntry? in + let entry = tracker.entries[idx] + return entry.isFromHealthKit ? nil : entry + } + for entry in entriesToDelete { + tracker.removeEntry(entry) + } + } + } + } + } + + // MARK: - Edit Sheet + + private func editEntrySheet(_ entry: LoopInsightsCaffeineEntry) -> some View { + NavigationView { + Form { + Section(header: Text(NSLocalizedString("Edit Entry", comment: "LoopInsights edit caffeine header"))) { + TextField(NSLocalizedString("Amount (mg)", comment: "LoopInsights caffeine amount"), text: $editMg) + .keyboardType(.decimalPad) + TextField(NSLocalizedString("Source", comment: "LoopInsights caffeine source"), text: $editSource) + DatePicker( + NSLocalizedString("Time", comment: "LoopInsights caffeine time"), + selection: $editTimestamp, + in: ...Date(), + displayedComponents: [.date, .hourAndMinute] + ) + } + + Section { + Button(action: { + if let mg = Double(editMg), mg > 0 { + tracker.updateEntry( + id: entry.id, + milligrams: mg, + source: editSource.isEmpty ? "Custom" : editSource, + timestamp: editTimestamp + ) + editingEntry = nil + } + }) { + HStack { + Spacer() + Text(NSLocalizedString("Save Changes", comment: "LoopInsights save caffeine edit")) + .fontWeight(.medium) + .foregroundColor(.white) + Spacer() + } + .padding(.vertical, 8) + .background(Double(editMg) ?? 0 > 0 ? caffeineGreen : Color.gray) + .cornerRadius(8) + } + .buttonStyle(.plain) + .disabled(Double(editMg) ?? 0 <= 0) + + Button(role: .destructive, action: { + tracker.removeEntry(entry) + editingEntry = nil + }) { + HStack { + Spacer() + Text(NSLocalizedString("Delete Entry", comment: "LoopInsights delete caffeine entry")) + Spacer() + } + } + } + } + .navigationTitle(NSLocalizedString("Edit Caffeine", comment: "LoopInsights edit caffeine title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(NSLocalizedString("Cancel", comment: "Cancel button")) { + editingEntry = nil + } + } + } + } + } + + // MARK: - Helpers + + /// Gauge color: green base with orange/red for high levels + private func gaugeColor(_ mg: Double) -> Color { + if mg < 150 { return caffeineGreen } + if mg < 250 { return .orange } + return .red + } + + private static let timeFormatter: DateFormatter = { + let f = DateFormatter() + f.timeStyle = .short + return f + }() + + private static let dateTimeFormatter: DateFormatter = { + let f = DateFormatter() + f.dateStyle = .short + f.timeStyle = .short + return f + }() +} diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift index 9531f9765a..3bb063262a 100644 --- a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -8,9 +8,8 @@ import SwiftUI -/// Full chat interface for Ask LoopInsights. -/// Dark-themed design with gradient background, purple user bubbles, -/// dark card AI bubbles, and a dark input bar. +/// Minimal Q&A interface for Ask LoopInsights. +/// Quick answers only — just the facts. struct LoopInsights_ChatView: View { @ObservedObject var viewModel: LoopInsights_ChatViewModel @@ -19,22 +18,13 @@ struct LoopInsights_ChatView: View { var body: some View { ZStack { - // Dark gradient background - LinearGradient( - colors: [ - Color(red: 0.06, green: 0.07, blue: 0.15), - Color(red: 0.08, green: 0.10, blue: 0.22), - Color(red: 0.05, green: 0.06, blue: 0.14) - ], - startPoint: .topLeading, - endPoint: .bottomTrailing - ) - .ignoresSafeArea() + Color(red: 0.06, green: 0.07, blue: 0.15) + .ignoresSafeArea() VStack(spacing: 0) { ScrollViewReader { proxy in ScrollView { - LazyVStack(spacing: 14) { + LazyVStack(spacing: 12) { if viewModel.messages.isEmpty { emptyStateView } else { @@ -53,7 +43,7 @@ struct LoopInsights_ChatView: View { errorView(error) } } - .padding(.vertical) + .padding(.vertical, 8) } .onChange(of: viewModel.messages.count) { _ in withAnimation { @@ -69,9 +59,27 @@ struct LoopInsights_ChatView: View { inputBar } } - .navigationTitle(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat title")) .navigationBarTitleDisplayMode(.inline) + .onAppear { + let appearance = UINavigationBarAppearance() + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = UIColor(red: 0.06, green: 0.07, blue: 0.15, alpha: 1) + appearance.titleTextAttributes = [.foregroundColor: UIColor.white.withAlphaComponent(0.9)] + UINavigationBar.appearance().standardAppearance = appearance + UINavigationBar.appearance().scrollEdgeAppearance = appearance + } + .onDisappear { + let appearance = UINavigationBarAppearance() + appearance.configureWithDefaultBackground() + UINavigationBar.appearance().standardAppearance = appearance + UINavigationBar.appearance().scrollEdgeAppearance = nil + } .toolbar { + ToolbarItem(placement: .principal) { + Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat title")) + .font(.headline) + .foregroundColor(.white.opacity(0.9)) + } ToolbarItem(placement: .navigationBarLeading) { Button(action: { dismiss() }) { Image(systemName: "xmark.circle.fill") @@ -94,92 +102,38 @@ struct LoopInsights_ChatView: View { private func chatBubble(_ message: LoopInsightsChatMessage) -> some View { let isUser = message.role == .user - return HStack(alignment: .bottom, spacing: 8) { - if isUser { Spacer(minLength: 50) } - - if !isUser { - // AI avatar - Image(systemName: "brain.head.profile") - .font(.caption) - .foregroundColor(.purple.opacity(0.8)) - .frame(width: 24, height: 24) - .background(Color.white.opacity(0.1)) - .clipShape(Circle()) - } - - VStack(alignment: isUser ? .trailing : .leading, spacing: 4) { - if isUser { - // Purple gradient user bubble - Text(message.content) - .font(.body) - .foregroundColor(.white) - .padding(.horizontal, 16) - .padding(.vertical, 10) - .background( - LinearGradient( - colors: [ - Color(red: 0.55, green: 0.25, blue: 0.85), - Color(red: 0.75, green: 0.20, blue: 0.65) - ], - startPoint: .topLeading, - endPoint: .bottomTrailing - ) - ) - .clipShape(RoundedRectangle(cornerRadius: 20)) - } else { - // Dark card AI bubble - Text(message.content) - .font(.body) - .foregroundColor(.white.opacity(0.92)) - .textSelection(.enabled) - .padding(.horizontal, 16) - .padding(.vertical, 12) - .background( - RoundedRectangle(cornerRadius: 16) - .fill(Color.white.opacity(0.10)) - ) - } + return HStack { + if isUser { Spacer(minLength: 60) } - Text(Self.timeFormatter.string(from: message.timestamp)) - .font(.caption2) - .foregroundColor(.white.opacity(0.4)) - .padding(.horizontal, 4) - } + Text(message.content) + .font(.subheadline) + .foregroundColor(isUser ? .white : .white.opacity(0.9)) + .textSelection(.enabled) + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 14) + .fill(isUser ? Color.purple.opacity(0.6) : Color.white.opacity(0.08)) + ) - if !isUser { Spacer(minLength: 50) } + if !isUser { Spacer(minLength: 60) } } - .padding(.horizontal) + .padding(.horizontal, 12) } // MARK: - Loading Indicator private var loadingIndicator: some View { - HStack(spacing: 8) { - Image(systemName: "brain.head.profile") + HStack(spacing: 6) { + ProgressView() + .scaleEffect(0.7) + .tint(.white.opacity(0.5)) + Text(NSLocalizedString("Thinking...", comment: "LoopInsights chat: AI thinking")) .font(.caption) - .foregroundColor(.purple.opacity(0.8)) - .frame(width: 24, height: 24) - .background(Color.white.opacity(0.1)) - .clipShape(Circle()) - - HStack(spacing: 6) { - ProgressView() - .scaleEffect(0.7) - .tint(.white.opacity(0.6)) - Text(NSLocalizedString("Thinking...", comment: "LoopInsights chat: AI thinking")) - .font(.caption) - .foregroundColor(.white.opacity(0.5)) - } - .padding(.horizontal, 14) - .padding(.vertical, 10) - .background( - RoundedRectangle(cornerRadius: 16) - .fill(Color.white.opacity(0.08)) - ) - + .foregroundColor(.white.opacity(0.4)) Spacer() } - .padding(.horizontal) + .padding(.horizontal, 16) } // MARK: - Error View @@ -199,52 +153,39 @@ struct LoopInsights_ChatView: View { RoundedRectangle(cornerRadius: 10) .fill(Color.red.opacity(0.1)) ) - .padding(.horizontal) + .padding(.horizontal, 12) } // MARK: - Empty State private var emptyStateView: some View { - VStack(spacing: 20) { + VStack(spacing: 16) { Spacer() - .frame(height: 60) + .frame(height: 40) - Image(systemName: "bubble.left.and.bubble.right") - .font(.system(size: 48)) - .foregroundColor(.purple.opacity(0.5)) - - Text(NSLocalizedString("Ask me anything about your diabetes management", comment: "LoopInsights chat empty state title")) - .font(.headline) - .foregroundColor(.white.opacity(0.9)) - .multilineTextAlignment(.center) - - Text(NSLocalizedString("I have access to your current therapy settings and recent glucose data. Try one of the suggestions below or type your own question.", comment: "LoopInsights chat empty state subtitle")) + Text(NSLocalizedString("Ask a question about your data", comment: "LoopInsights chat empty state")) .font(.subheadline) - .foregroundColor(.white.opacity(0.5)) - .multilineTextAlignment(.center) - .padding(.horizontal) + .foregroundColor(.white.opacity(0.4)) // Quick-ask chips - ScrollView(.horizontal, showsIndicators: false) { - HStack(spacing: 10) { - ForEach(viewModel.quickAskSuggestions, id: \.self) { suggestion in - Button(action: { viewModel.sendQuickAsk(suggestion) }) { - Text(suggestion) - .font(.subheadline) - .foregroundColor(.white.opacity(0.8)) - .padding(.horizontal, 14) - .padding(.vertical, 8) - .background( - RoundedRectangle(cornerRadius: 20) - .stroke(Color.purple.opacity(0.5), lineWidth: 1) - ) - } - .buttonStyle(.plain) + VStack(spacing: 8) { + ForEach(viewModel.quickAskSuggestions, id: \.self) { suggestion in + Button(action: { viewModel.sendQuickAsk(suggestion) }) { + Text(suggestion) + .font(.subheadline) + .foregroundColor(.white.opacity(0.7)) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 10) + .fill(Color.white.opacity(0.06)) + ) } + .buttonStyle(.plain) } - .padding(.horizontal) } - .padding(.top, 8) + .padding(.horizontal, 12) Spacer() } @@ -253,61 +194,41 @@ struct LoopInsights_ChatView: View { // MARK: - Input Bar private var inputBar: some View { - HStack(spacing: 10) { - // Placeholder "+" button (non-functional for now) - Button(action: {}) { - Image(systemName: "plus.circle.fill") - .font(.title3) - .foregroundColor(.white.opacity(0.3)) + HStack(spacing: 8) { + TextField( + NSLocalizedString("Ask a question...", comment: "LoopInsights chat input placeholder"), + text: $viewModel.inputText + ) + .textFieldStyle(.plain) + .foregroundColor(.white) + .focused($isInputFocused) + .onSubmit { + viewModel.sendMessage() } - .disabled(true) + .tint(.purple) - // Text field area - HStack(spacing: 8) { - TextField( - NSLocalizedString("Ask a question...", comment: "LoopInsights chat input placeholder"), - text: $viewModel.inputText - ) - .textFieldStyle(.plain) - .foregroundColor(.white) - .focused($isInputFocused) - .onSubmit { - viewModel.sendMessage() - } - .tint(.purple) - - // Send button - Button(action: { viewModel.sendMessage() }) { - Image(systemName: "arrow.up.circle.fill") - .font(.title2) - .foregroundColor( - viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading - ? .white.opacity(0.2) - : .purple - ) - } - .disabled(viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading) + Button(action: { viewModel.sendMessage() }) { + Image(systemName: "arrow.up.circle.fill") + .font(.title3) + .foregroundColor( + viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading + ? .white.opacity(0.2) + : .purple + ) } - .padding(.horizontal, 14) - .padding(.vertical, 10) - .background( - RoundedRectangle(cornerRadius: 22) - .fill(Color.white.opacity(0.08)) - ) + .disabled(viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading) } .padding(.horizontal, 14) .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 20) + .fill(Color.white.opacity(0.08)) + ) + .padding(.horizontal, 12) + .padding(.vertical, 8) .background( Color(red: 0.06, green: 0.07, blue: 0.15) .ignoresSafeArea(edges: .bottom) ) } - - // MARK: - Formatters - - private static let timeFormatter: DateFormatter = { - let formatter = DateFormatter() - formatter.timeStyle = .short - return formatter - }() } diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index 6cc9f6c9d4..ea479a3ea7 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -29,6 +29,8 @@ struct LoopInsights_DashboardView: View { @State private var showingChat = false @State private var showingTrendsInsights = false @State private var showingGoals = false + @State private var showingMealInsights = false + @State private var showingCaffeineLog = false @State private var selectedRecord: LoopInsightsSuggestionRecord? @State private var developerTapCount = 0 @@ -59,6 +61,9 @@ struct LoopInsights_DashboardView: View { headerSection currentSettingsSection analysisSection + if viewModel.aggregatedStats != nil { + glucoseStatsCards + } if !viewModel.detectedPatterns.isEmpty { detectedPatternsSection } @@ -82,6 +87,7 @@ struct LoopInsights_DashboardView: View { } navigationSection } + .modifier(ListSectionSpacingModifier()) .navigationTitle(NSLocalizedString("LoopInsights", comment: "LoopInsights dashboard title")) .sheet(item: $selectedRecord) { record in NavigationView { @@ -155,6 +161,16 @@ struct LoopInsights_DashboardView: View { LoopInsights_GoalsView(coordinator: viewModel.coordinator) } } + .sheet(isPresented: $showingMealInsights) { + NavigationView { + LoopInsights_MealInsightsView(coordinator: viewModel.coordinator) + } + } + .sheet(isPresented: $showingCaffeineLog) { + NavigationView { + LoopInsights_CaffeineLogView(tracker: viewModel.coordinator.caffeineTracker) + } + } .overlay(alignment: .top) { if let monitor = viewModel.backgroundMonitor, monitor.showBanner, @@ -194,7 +210,7 @@ struct LoopInsights_DashboardView: View { handleDeveloperTap() } - Text(NSLocalizedString("LoopInsights analyzes your glucose, insulin, and carb data to suggest adjustments to your Basal Rates, Carb Ratios, and Insulin Sensitivity factors. Tap one of the settings, choose a lookback period, and tap Analyze to get AI-generated suggestions. All changes require your review and approval.", comment: "LoopInsights subtitle")) + Text(NSLocalizedString("Analyzes your glucose, insulin, and carb data to suggest Basal Rate, Carb Ratio, and ISF adjustments. Select a setting and lookback period, then tap Analyze. All changes require approval", comment: "LoopInsights subtitle")) .font(.subheadline) .foregroundColor(.secondary) @@ -204,20 +220,20 @@ struct LoopInsights_DashboardView: View { .foregroundColor(.secondary) } } - .padding(.vertical, 4) } } // MARK: - Current Settings private var currentSettingsSection: some View { - Section(header: Text(NSLocalizedString("Tap one of your current Therapy Settings", comment: "LoopInsights current settings header"))) { + Section(header: Text(NSLocalizedString("Therapy Settings", comment: "LoopInsights current settings header")) ) { if let snapshot = viewModel.currentSnapshot { settingRow( type: .basalRate, items: snapshot.basalRateItems, unit: "U/hr" ) + .padding(.top, 4) settingRow( type: .carbRatio, items: snapshot.carbRatioItems, @@ -283,12 +299,33 @@ struct LoopInsights_DashboardView: View { private var analysisSection: some View { Section { - // Period picker - Picker(NSLocalizedString("Analysis Period", comment: "LoopInsights period picker label"), selection: analysisPeriodBinding) { + // Period picker — Clarity-style capsule buttons + HStack(spacing: 6) { ForEach(LoopInsightsAnalysisPeriod.allCases) { period in - Text(period.displayName).tag(period) + let isSelected = viewModel.analysisPeriod == period + let clarityBlue = Color(red: 74/255, green: 115/255, blue: 213/255) // #4A73D5 + Button { + viewModel.updateAnalysisPeriod(period) + } label: { + Text("\(period.rawValue)") + .font(.subheadline.weight(.semibold)) + .frame(maxWidth: .infinity) + .padding(.vertical, 10) + .background(isSelected ? clarityBlue : Color.clear) + .foregroundColor(isSelected ? .white : Color(.secondaryLabel)) + .overlay( + Capsule() + .stroke( + isSelected ? clarityBlue : Color(.systemGray4), + lineWidth: 1.5 + ) + ) + .clipShape(Capsule()) + } + .buttonStyle(.plain) } } + .padding(.vertical, 4) // Analyze buttons HStack(spacing: 10) { @@ -355,6 +392,11 @@ struct LoopInsights_DashboardView: View { .listRowSeparator(.hidden, edges: .top) .padding(.bottom, 8) + // AGP Chart — shown with analysis summary when enabled + if LoopInsights_FeatureFlags.agpChartEnabled && !viewModel.agpGlucoseSamples.isEmpty { + LoopInsights_AGPChartView(glucoseSamples: viewModel.agpGlucoseSamples) + } + if !LoopInsights_SecureStorage.hasAPIKey { Text(NSLocalizedString("Configure your AI API key in LoopInsights Settings to begin analysis.", comment: "LoopInsights no API key message")) .font(.caption) @@ -594,6 +636,21 @@ struct LoopInsights_DashboardView: View { } } + // MARK: - Glucose Stats Cards (Clarity-style) + + private var glucoseStatsCards: some View { + Group { + if let stats = viewModel.aggregatedStats { + Section { + glucoseCard(stats: stats) + } + Section { + timeInRangeCard(glucoseStats: stats.glucoseStats) + } + } + } + } + // MARK: - Assessment private var assessmentSection: some View { @@ -603,31 +660,151 @@ struct LoopInsights_DashboardView: View { .font(.subheadline) .foregroundColor(.secondary) } + } + } - if let stats = viewModel.aggregatedStats { - statsRow(label: NSLocalizedString("Time in Range (70-180)", comment: "LoopInsights TIR label with range"), - value: String(format: "%.1f%%", stats.glucoseStats.timeInRange)) - statsRow(label: NSLocalizedString("Average Glucose", comment: "LoopInsights avg glucose label"), - value: String(format: "%.0f mg/dL", stats.glucoseStats.averageGlucose)) - statsRow(label: NSLocalizedString("GMI (est. A1C)", comment: "LoopInsights GMI label"), - value: String(format: "%.1f%%", stats.glucoseStats.gmi)) - statsRow(label: NSLocalizedString("Total Daily Dose", comment: "LoopInsights TDD label"), - value: String(format: "%.1f U/day", stats.insulinStats.totalDailyDose)) - statsRow(label: NSLocalizedString("Coefficient of Variation", comment: "LoopInsights coefficient of variation label"), - value: String(format: "%.1f%%", stats.glucoseStats.coefficientOfVariation)) + // MARK: - Glucose Card + + private func glucoseCard(stats: LoopInsightsAggregatedStats) -> some View { + VStack(alignment: .leading, spacing: 12) { + Text(NSLocalizedString("Glucose", comment: "LoopInsights glucose card title")) + .font(.title3.weight(.semibold)) + .foregroundColor(.primary) + Divider() + + // Average Glucose + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Average Glucose", comment: "LoopInsights avg glucose label")) + .font(.callout) + .foregroundColor(.primary) + HStack(alignment: .firstTextBaseline, spacing: 4) { + Text(String(format: "%.0f", stats.glucoseStats.averageGlucose)) + .font(.system(size: 42, weight: .bold, design: .rounded)) + .foregroundColor(.primary) + Text(NSLocalizedString("mg/dL", comment: "LoopInsights unit mg/dL")) + .font(.callout) + .foregroundColor(Color(.secondaryLabel)) + } + } + + // Std Dev & GMI side-by-side + HStack(alignment: .top, spacing: 24) { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Standard Deviation", comment: "LoopInsights std dev label")) + .font(.callout) + .foregroundColor(.primary) + HStack(alignment: .firstTextBaseline, spacing: 3) { + Text(String(format: "%.0f", stats.glucoseStats.standardDeviation)) + .font(.system(size: 28, weight: .bold, design: .rounded)) + .foregroundColor(.primary) + Text(NSLocalizedString("mg/dL", comment: "LoopInsights unit mg/dL")) + .font(.caption) + .foregroundColor(Color(.secondaryLabel)) + } + } + + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("GMI", comment: "LoopInsights GMI label")) + .font(.callout) + .foregroundColor(.primary) + if stats.glucoseStats.sampleCount >= 12 { + HStack(alignment: .firstTextBaseline, spacing: 3) { + Text(String(format: "%.1f", stats.glucoseStats.gmi)) + .font(.system(size: 28, weight: .bold, design: .rounded)) + .foregroundColor(.primary) + Text("%") + .font(.caption) + .foregroundColor(Color(.secondaryLabel)) + } + } else { + Text(NSLocalizedString("Not enough\ndata available", comment: "LoopInsights GMI insufficient data")) + .font(.callout.weight(.semibold)) + .foregroundColor(.primary) + } + } } } + .padding(.vertical, 4) } - private func statsRow(label: String, value: String) -> some View { - HStack { + // MARK: - Time in Range Card + + // Clarity TIR colors + private static let clarityVeryHigh = Color(red: 193/255, green: 79/255, blue: 12/255) // #C14F0C — Very High + private static let clarityHigh = Color(red: 240/255, green: 202/255, blue: 76/255) // #F0CA4C — High + private static let clarityGreen = Color(red: 116/255, green: 165/255, blue: 46/255) // #74A52E — In Range + private static let clarityLow = Color(red: 211/255, green: 98/255, blue: 101/255) // #D36265 — Low + private static let clarityVeryLow = Color(red: 127/255, green: 3/255, blue: 2/255) // #7F0302 — Very Low + + private func timeInRangeCard(glucoseStats g: LoopInsightsAggregatedStats.GlucoseStats) -> some View { + VStack(alignment: .leading, spacing: 12) { + Text(NSLocalizedString("Time in Range", comment: "LoopInsights TIR card title")) + .font(.title3.weight(.semibold)) + .foregroundColor(.primary) + Divider() + + HStack(alignment: .center, spacing: 14) { + // Stacked color bar — wide like Clarity + tirStackedBar(glucoseStats: g) + .frame(width: 65) + + // Percentage labels — lighter text + VStack(alignment: .leading, spacing: 5) { + tirLabelRow(percent: g.timeVeryHigh, label: NSLocalizedString("Very High", comment: "LoopInsights TIR very high"), isBold: false) + tirLabelRow(percent: g.timeHigh, label: NSLocalizedString("High", comment: "LoopInsights TIR high"), isBold: false) + tirLabelRow(percent: g.timeInRange, label: NSLocalizedString("In Range", comment: "LoopInsights TIR in range"), isBold: true) + tirLabelRow(percent: g.timeLow, label: NSLocalizedString("Low", comment: "LoopInsights TIR low"), isBold: false) + tirLabelRow(percent: g.timeVeryLow, label: NSLocalizedString("Very Low", comment: "LoopInsights TIR very low"), isBold: false) + } + } + + Divider() + + HStack(spacing: 0) { + Text(NSLocalizedString("Target Range: ", comment: "LoopInsights TIR target label")) + .font(.subheadline.weight(.semibold)) + .foregroundColor(.primary) + Text(NSLocalizedString("70–180 mg/dL", comment: "LoopInsights TIR target value")) + .font(.subheadline) + .foregroundColor(.primary) + } + } + .padding(.vertical, 4) + } + + private func tirStackedBar(glucoseStats g: LoopInsightsAggregatedStats.GlucoseStats) -> some View { + GeometryReader { geo in + let totalHeight = geo.size.height + let zones: [(Double, Color)] = [ + (g.timeVeryHigh, Self.clarityVeryHigh), + (g.timeHigh, Self.clarityHigh), + (g.timeInRange, Self.clarityGreen), + (g.timeLow, Self.clarityLow), + (g.timeVeryLow, Self.clarityVeryLow) + ] + VStack(spacing: 1) { + ForEach(Array(zones.enumerated()), id: \.offset) { _, zone in + let height = max(zone.0 > 0 ? 2 : 0, totalHeight * zone.0 / 100) + RoundedRectangle(cornerRadius: 4) + .fill(zone.1) + .frame(height: height) + } + } + } + .frame(height: 130) + } + + private func tirLabelRow(percent: Double, label: String, isBold: Bool) -> some View { + HStack(spacing: 4) { + Text(String(format: "%.0f%%", percent)) + .font(.subheadline) + .fontWeight(isBold ? .bold : .regular) + .foregroundColor(isBold ? .primary : Color(.secondaryLabel)) + .fixedSize(horizontal: true, vertical: false) Text(label) - .font(.caption) - .foregroundColor(.secondary) - Spacer() - Text(value) - .font(.caption) - .fontWeight(.medium) + .font(.subheadline) + .fontWeight(isBold ? .bold : .regular) + .foregroundColor(isBold ? .primary : Color(.secondaryLabel)) } } @@ -728,11 +905,11 @@ struct LoopInsights_DashboardView: View { private var navigationSection: some View { Section { - Button(action: { showingTrendsInsights = true }) { + Button(action: { showingChat = true }) { HStack { - Image(systemName: "chart.line.uptrend.xyaxis") + Image(systemName: "bubble.left.and.bubble.right") .foregroundColor(.accentColor) - Text(NSLocalizedString("Trends & Insights", comment: "LoopInsights trends button")) + Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat button")) Spacer() Image(systemName: "chevron.right") .font(.caption) @@ -740,6 +917,20 @@ struct LoopInsights_DashboardView: View { } } + if LoopInsights_FeatureFlags.caffeineTrackingEnabled { + Button(action: { showingCaffeineLog = true }) { + HStack { + Image(systemName: "cup.and.saucer.fill") + .foregroundColor(.green) + Text(NSLocalizedString("Caffeine Tracker", comment: "LoopInsights caffeine button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + Button(action: { showingGoals = true }) { HStack { Image(systemName: "target") @@ -752,11 +943,24 @@ struct LoopInsights_DashboardView: View { } } - Button(action: { showingChat = true }) { + if LoopInsights_FeatureFlags.foodResponseEnabled { + Button(action: { showingMealInsights = true }) { + HStack { + Image(systemName: "fork.knife") + .foregroundColor(.accentColor) + Text(NSLocalizedString("Meal Insights", comment: "LoopInsights meal insights button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + Button(action: { showingHistory = true }) { HStack { - Image(systemName: "bubble.left.and.bubble.right") - .foregroundColor(.accentColor) - Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat button")) + Image(systemName: "clock.arrow.circlepath") + Text(NSLocalizedString("Suggestion History", comment: "LoopInsights history button")) Spacer() Image(systemName: "chevron.right") .font(.caption) @@ -764,10 +968,11 @@ struct LoopInsights_DashboardView: View { } } - Button(action: { showingHistory = true }) { + Button(action: { showingTrendsInsights = true }) { HStack { - Image(systemName: "clock.arrow.circlepath") - Text(NSLocalizedString("Suggestion History", comment: "LoopInsights history button")) + Image(systemName: "chart.line.uptrend.xyaxis") + .foregroundColor(.accentColor) + Text(NSLocalizedString("Trends & Insights", comment: "LoopInsights trends button")) Spacer() Image(systemName: "chevron.right") .font(.caption) @@ -903,6 +1108,18 @@ struct LoopInsights_DashboardView: View { }() } +// MARK: - iOS 17+ List Section Spacing + +private struct ListSectionSpacingModifier: ViewModifier { + func body(content: Content) -> some View { + if #available(iOS 17.0, *) { + content.listSectionSpacing(10) + } else { + content + } + } +} + // MARK: - Pre-Fill Editor View /// Editor that shows proposed therapy changes with editable values. diff --git a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift new file mode 100644 index 0000000000..cb601a6e9a --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift @@ -0,0 +1,373 @@ +// +// LoopInsights_MealInsightsView.swift +// Loop +// +// Concept & design by Taylor Patterson. Coded & tested by Claude Code in February 2026. +// Copyright (c) 2025-2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI +import LoopKit +import HealthKit + +/// Combined Meal Debrief + Pre-Meal Advisor view. +/// "Recent Meals" tab shows meals with glucose response cards. +/// "Pre-Meal Advice" tab lets user pick a food type and see historical pattern + AI advice. +struct LoopInsights_MealInsightsView: View { + + let coordinator: LoopInsights_Coordinator + + @State private var selectedTab = 0 + @State private var mealEvents: [LoopInsightsMealEvent] = [] + @State private var foodPatterns: [LoopInsightsFoodResponsePattern] = [] + @State private var isLoading = true + @State private var selectedPattern: LoopInsightsFoodResponsePattern? + @State private var aiAdvice: String? + @State private var isLoadingAdvice = false + @Environment(\.dismiss) private var dismiss + + var body: some View { + VStack(spacing: 0) { + Picker("", selection: $selectedTab) { + Text(NSLocalizedString("Recent Meals", comment: "LoopInsights meal tab: recent")).tag(0) + Text(NSLocalizedString("Pre-Meal Advice", comment: "LoopInsights meal tab: advice")).tag(1) + } + .pickerStyle(.segmented) + .padding() + + if isLoading { + Spacer() + ProgressView() + Text(NSLocalizedString("Analyzing meal data...", comment: "LoopInsights meals loading")) + .font(.caption) + .foregroundColor(.secondary) + Spacer() + } else if selectedTab == 0 { + recentMealsTab + } else { + preMealAdviceTab + } + } + .navigationTitle(NSLocalizedString("Meal Insights", comment: "LoopInsights meal insights title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + dismiss() + } + } + } + .task { + await loadMealData() + } + } + + // MARK: - Recent Meals Tab + + private var recentMealsTab: some View { + Group { + if mealEvents.isEmpty { + VStack(spacing: 12) { + Image(systemName: "fork.knife") + .font(.system(size: 40)) + .foregroundColor(.secondary) + Text(NSLocalizedString("No recent meals with glucose data found", comment: "LoopInsights no meals")) + .font(.subheadline) + .foregroundColor(.secondary) + } + .frame(maxWidth: .infinity, maxHeight: .infinity) + } else { + ScrollView { + LazyVStack(spacing: 12) { + // Color key + HStack(spacing: 16) { + HStack(spacing: 4) { + Circle().fill(Color.green).frame(width: 8, height: 8) + Text(NSLocalizedString("Rise ≤ 50 mg/dL", comment: "LoopInsights meal legend green")) + .font(.caption2) + .foregroundColor(.secondary) + } + HStack(spacing: 4) { + Circle().fill(Color.orange).frame(width: 8, height: 8) + Text(NSLocalizedString("Rise > 50 mg/dL", comment: "LoopInsights meal legend orange")) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + } + + ForEach(mealEvents) { event in + mealCard(event) + } + } + .padding() + } + } + } + } + + private func mealCard(_ event: LoopInsightsMealEvent) -> some View { + VStack(alignment: .leading, spacing: 8) { + HStack { + VStack(alignment: .leading, spacing: 2) { + Text(event.foodType) + .font(.subheadline.weight(.semibold)) + Text(Self.dateFormatter.string(from: event.date)) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + Text(String(format: "%.0fg carbs", event.carbs)) + .font(.caption) + .foregroundColor(.secondary) + } + + // Glucose response summary + HStack(spacing: 16) { + glucoseStatPill( + label: NSLocalizedString("Pre", comment: "LoopInsights meal pre-meal label"), + value: String(format: "%.0f", event.preMealGlucose), + color: glucoseColor(event.preMealGlucose) + ) + Image(systemName: "arrow.right") + .font(.caption2) + .foregroundColor(.secondary) + glucoseStatPill( + label: NSLocalizedString("Peak", comment: "LoopInsights meal peak label"), + value: String(format: "%.0f", event.peakGlucose), + color: glucoseColor(event.peakGlucose) + ) + Image(systemName: "arrow.right") + .font(.caption2) + .foregroundColor(.secondary) + glucoseStatPill( + label: "2h", + value: String(format: "%.0f", event.twoHourGlucose), + color: glucoseColor(event.twoHourGlucose) + ) + } + + // Rise indicator + let rise = event.peakGlucose - event.preMealGlucose + HStack(spacing: 4) { + Image(systemName: rise > 50 ? "arrow.up.circle.fill" : "arrow.up.circle") + .foregroundColor(rise > 50 ? .orange : .green) + .font(.caption) + Text(String(format: NSLocalizedString("Rise: %+.0f mg/dL", comment: "LoopInsights meal glucose rise"), rise)) + .font(.caption) + .foregroundColor(rise > 50 ? .orange : .green) + } + } + .padding() + .background(Color(.secondarySystemGroupedBackground)) + .cornerRadius(12) + } + + private func glucoseStatPill(label: String, value: String, color: Color) -> some View { + VStack(spacing: 2) { + Text(label) + .font(.caption2) + .foregroundColor(.secondary) + Text(value) + .font(.caption.weight(.bold)) + .foregroundColor(color) + } + .frame(minWidth: 44) + } + + private func glucoseColor(_ value: Double) -> Color { + if value < 70 { return .red } + if value <= 180 { return .green } + return .orange + } + + // MARK: - Pre-Meal Advice Tab + + private var preMealAdviceTab: some View { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + if foodPatterns.isEmpty { + Text(NSLocalizedString("No food-type patterns available. Log meals with food types to see patterns.", comment: "LoopInsights no food patterns")) + .font(.subheadline) + .foregroundColor(.secondary) + .padding() + } else { + Text(NSLocalizedString("Select a food type to see your historical glucose response and get AI advice:", comment: "LoopInsights food pattern instructions")) + .font(.caption) + .foregroundColor(.secondary) + .padding(.horizontal) + + ForEach(foodPatterns) { pattern in + foodPatternCard(pattern) + } + + if let advice = aiAdvice { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 6) { + Image(systemName: "sparkles") + .foregroundColor(.accentColor) + Text(NSLocalizedString("AI Advice", comment: "LoopInsights AI advice header")) + .font(.subheadline.weight(.semibold)) + } + Text(advice) + .font(.caption) + .foregroundColor(.secondary) + } + .padding() + .background(Color(.secondarySystemGroupedBackground)) + .cornerRadius(12) + .padding(.horizontal) + } + } + } + .padding(.vertical) + } + } + + private func foodPatternCard(_ pattern: LoopInsightsFoodResponsePattern) -> some View { + Button(action: { + selectedPattern = pattern + requestAdvice(for: pattern) + }) { + VStack(alignment: .leading, spacing: 6) { + HStack { + Text(pattern.foodType) + .font(.subheadline.weight(.semibold)) + .foregroundColor(.primary) + Spacer() + Text(String(format: "%d meals", pattern.mealCount)) + .font(.caption) + .foregroundColor(.secondary) + if selectedPattern?.id == pattern.id { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.accentColor) + } + } + + HStack(spacing: 16) { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Peak Rise", comment: "LoopInsights peak rise label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "+%.0f mg/dL", pattern.peakGlucoseRise)) + .font(.caption.weight(.bold)) + .foregroundColor(pattern.peakGlucoseRise > 60 ? .orange : .green) + } + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Time to Peak", comment: "LoopInsights time to peak label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.0f min", pattern.timeToPeakMinutes)) + .font(.caption.weight(.bold)) + } + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Avg Carbs", comment: "LoopInsights avg carbs label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.0fg", pattern.averageCarbsPerMeal)) + .font(.caption.weight(.bold)) + } + } + + if isLoadingAdvice && selectedPattern?.id == pattern.id { + HStack { + ProgressView() + .scaleEffect(0.7) + Text(NSLocalizedString("Getting advice...", comment: "LoopInsights getting advice")) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + .padding() + .background( + RoundedRectangle(cornerRadius: 12) + .fill(selectedPattern?.id == pattern.id + ? Color.accentColor.opacity(0.08) + : Color(.secondarySystemGroupedBackground)) + ) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(selectedPattern?.id == pattern.id ? Color.accentColor.opacity(0.3) : Color.clear, lineWidth: 1) + ) + } + .buttonStyle(.plain) + .padding(.horizontal) + } + + // MARK: - Data Loading + + private func loadMealData() async { + let period = LoopInsights_FeatureFlags.analysisPeriod + let endDate = Date() + let startDate = endDate.addingTimeInterval(-period.timeInterval) + + do { + let carbEntries = try await coordinator.fetchCarbEntries(start: startDate, end: endDate) + let glucoseSamples = try await coordinator.fetchGlucoseSamples(start: startDate, end: endDate) + + let events = LoopInsights_FoodResponseAnalyzer.buildRecentMealEvents( + carbEntries: carbEntries, + glucoseSamples: glucoseSamples + ) + let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( + carbEntries: carbEntries, + glucoseSamples: glucoseSamples + ) + + await MainActor.run { + self.mealEvents = events + self.foodPatterns = patterns + self.isLoading = false + } + } catch { + await MainActor.run { + self.isLoading = false + } + } + } + + private func requestAdvice(for pattern: LoopInsightsFoodResponsePattern) { + isLoadingAdvice = true + aiAdvice = nil + + let prompt = """ + Based on my glucose response pattern for \(pattern.foodType): + - Average carbs: \(String(format: "%.0f", pattern.averageCarbsPerMeal))g per meal + - Peak glucose rise: \(String(format: "%.0f", pattern.peakGlucoseRise)) mg/dL + - Time to peak: \(String(format: "%.0f", pattern.timeToPeakMinutes)) minutes + - 2h post-meal average: \(String(format: "%.0f", pattern.twoHourPostMealAvg)) mg/dL + - 4h post-meal average: \(String(format: "%.0f", pattern.fourHourPostMealAvg)) mg/dL + + Give me brief, practical advice for managing this food. Include: timing of pre-bolus, \ + any carb ratio considerations, and alternative strategies. Keep it under 4 sentences. + """ + + Task { + do { + let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( + "You are a diabetes meal advisor. Be concise and practical.", + userPrompt: prompt + ) + await MainActor.run { + self.aiAdvice = response + self.isLoadingAdvice = false + } + } catch { + await MainActor.run { + self.aiAdvice = "Unable to get advice: \(error.localizedDescription)" + self.isLoadingAdvice = false + } + } + } + } + + // MARK: - Formatters + + private static let dateFormatter: DateFormatter = { + let f = DateFormatter() + f.dateStyle = .medium + f.timeStyle = .short + return f + }() +} diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 770c0a8722..09438add1c 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -51,6 +51,18 @@ struct LoopInsights_SettingsView: View { @StateObject private var healthKitManager = LoopInsights_HealthKitManager() @State private var isRequestingBiometricAuth = false + // Phase 5 flags + @State private var circadianEnabled = LoopInsights_FeatureFlags.circadianEnabled + @State private var foodResponseEnabled = LoopInsights_FeatureFlags.foodResponseEnabled + @State private var caffeineTrackingEnabled = LoopInsights_FeatureFlags.caffeineTrackingEnabled + @State private var nightscoutImportEnabled = LoopInsights_FeatureFlags.nightscoutImportEnabled + @State private var agpChartEnabled = LoopInsights_FeatureFlags.agpChartEnabled + + // Nightscout + @State private var nightscoutConfig = LoopInsightsNightscoutConfig.load() + @State private var isTestingNightscout = false + @State private var nightscoutTestResult: TestResult? + // Developer mode unlock @State private var developerTapCount = 0 @State private var showDeveloperUnlocked = false @@ -98,6 +110,10 @@ struct LoopInsights_SettingsView: View { advancedAISection analysisOptionsSection biometricsSection + phase5FeaturesSection + if nightscoutImportEnabled { + nightscoutSection + } personalitySection backgroundMonitoringSection dataSection @@ -116,6 +132,12 @@ struct LoopInsights_SettingsView: View { selectedPersonality = LoopInsights_FeatureFlags.aiPersonality useTestData = LoopInsights_FeatureFlags.useTestData biometricsEnabled = LoopInsights_FeatureFlags.biometricsEnabled + circadianEnabled = LoopInsights_FeatureFlags.circadianEnabled + foodResponseEnabled = LoopInsights_FeatureFlags.foodResponseEnabled + caffeineTrackingEnabled = LoopInsights_FeatureFlags.caffeineTrackingEnabled + nightscoutImportEnabled = LoopInsights_FeatureFlags.nightscoutImportEnabled + agpChartEnabled = LoopInsights_FeatureFlags.agpChartEnabled + nightscoutConfig = LoopInsightsNightscoutConfig.load() apiKeyText = LoopInsights_SecureStorage.loadAPIKey() ?? "" // Clear stale endpoint path if it matches a different format's default @@ -977,6 +999,205 @@ struct LoopInsights_SettingsView: View { } + // MARK: - Phase 5 Features + + private var phase5FeaturesSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "sparkle") + .foregroundColor(.accentColor) + Text(NSLocalizedString("ADVANCED FEATURES", comment: "LoopInsights Phase 5 features header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + Toggle(NSLocalizedString("Circadian Analysis", comment: "LoopInsights circadian toggle"), isOn: $circadianEnabled) + .onChange(of: circadianEnabled) { newValue in + LoopInsights_FeatureFlags.circadianEnabled = newValue + } + Text(NSLocalizedString("Enables circadian glucose profiling, dawn phenomenon detection, negative basal awareness, and HRV-based stress scoring. Enriches AI analysis with sleep/wake patterns.", comment: "LoopInsights circadian description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + + Toggle(NSLocalizedString("Food Response Analysis", comment: "LoopInsights food response toggle"), isOn: $foodResponseEnabled) + .onChange(of: foodResponseEnabled) { newValue in + LoopInsights_FeatureFlags.foodResponseEnabled = newValue + } + Text(NSLocalizedString("Analyzes glucose responses by food type. Enables Meal Insights view with meal debrief cards and pre-meal AI advisor.", comment: "LoopInsights food response description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + + Toggle(NSLocalizedString("Caffeine Tracking", comment: "LoopInsights caffeine toggle"), isOn: $caffeineTrackingEnabled) + .onChange(of: caffeineTrackingEnabled) { newValue in + LoopInsights_FeatureFlags.caffeineTrackingEnabled = newValue + } + Text(NSLocalizedString("Log caffeine intake to help the AI correlate caffeine with glucose patterns. Uses a 5.7-hour half-life decay model.", comment: "LoopInsights caffeine description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + + Toggle(NSLocalizedString("AGP Chart", comment: "LoopInsights AGP toggle"), isOn: $agpChartEnabled) + .onChange(of: agpChartEnabled) { newValue in + LoopInsights_FeatureFlags.agpChartEnabled = newValue + } + Text(NSLocalizedString("Show Ambulatory Glucose Profile chart on the dashboard with percentile bands (P10/P25/P50/P75/P90) over 24 hours.", comment: "LoopInsights AGP description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + + Toggle(NSLocalizedString("Nightscout Import", comment: "LoopInsights nightscout toggle"), isOn: $nightscoutImportEnabled) + .onChange(of: nightscoutImportEnabled) { newValue in + LoopInsights_FeatureFlags.nightscoutImportEnabled = newValue + } + Text(NSLocalizedString("Import glucose and treatment data from a Nightscout server as a supplemental data source.", comment: "LoopInsights nightscout description")) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + + // MARK: - Nightscout Configuration + + private var nightscoutSection: some View { + Section { + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Image(systemName: "cloud.fill") + .foregroundColor(.accentColor) + Text(NSLocalizedString("NIGHTSCOUT", comment: "LoopInsights Nightscout header")) + .font(.caption) + .fontWeight(.semibold) + .foregroundColor(.secondary) + .textCase(.uppercase) + } + + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Site URL", comment: "LoopInsights Nightscout URL label")) + .font(.caption) + .foregroundColor(.secondary) + TextField("https://your-site.herokuapp.com", text: $nightscoutConfig.siteURL) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .keyboardType(.URL) + .onChange(of: nightscoutConfig.siteURL) { _ in + nightscoutConfig.isConnected = false + nightscoutTestResult = nil + nightscoutConfig.save() + } + } + + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("API Secret", comment: "LoopInsights Nightscout API secret label")) + .font(.caption) + .foregroundColor(.secondary) + SecureField(NSLocalizedString("Your API secret", comment: "LoopInsights Nightscout secret placeholder"), text: $nightscoutConfig.apiSecret) + .textFieldStyle(RoundedBorderTextFieldStyle()) + .autocapitalization(.none) + .disableAutocorrection(true) + .onChange(of: nightscoutConfig.apiSecret) { _ in + nightscoutConfig.isConnected = false + nightscoutTestResult = nil + nightscoutConfig.save() + } + } + + // Test Connection + Button(action: testNightscoutConnection) { + HStack(spacing: 6) { + if isTestingNightscout { + ProgressView() + .progressViewStyle(.circular) + .scaleEffect(0.8) + .tint(.black) + Text(NSLocalizedString("Testing...", comment: "LoopInsights testing nightscout")) + } else { + Image(systemName: "checkmark.shield") + Text(NSLocalizedString("Test Connection", comment: "LoopInsights test nightscout button")) + } + } + .font(.body.weight(.medium)) + .foregroundColor(.black) + .frame(maxWidth: .infinity) + .padding(.vertical, 10) + .background(Color.white) + .cornerRadius(10) + } + .disabled(isTestingNightscout || nightscoutConfig.siteURL.isEmpty) + .opacity((isTestingNightscout || nightscoutConfig.siteURL.isEmpty) ? 0.5 : 1.0) + .buttonStyle(.plain) + + if let result = nightscoutTestResult { + switch result { + case .success: + HStack(spacing: 4) { + Image(systemName: "checkmark.circle.fill") + .foregroundColor(.green) + Text(NSLocalizedString("Connected to Nightscout", comment: "LoopInsights nightscout connected")) + .font(.caption) + .foregroundColor(.green) + } + case .failure(let message): + HStack(alignment: .top, spacing: 4) { + Image(systemName: "xmark.circle.fill") + .foregroundColor(.red) + Text(message) + .font(.caption) + .foregroundColor(.red) + .fixedSize(horizontal: false, vertical: true) + } + case .warning(let message): + HStack(alignment: .top, spacing: 4) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.orange) + Text(message) + .font(.caption) + .foregroundColor(.orange) + } + } + } + + Text(NSLocalizedString("Nightscout data is used as supplemental context for AI analysis. Your existing Loop data stores remain the primary source.", comment: "LoopInsights nightscout note")) + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + + private func testNightscoutConnection() { + isTestingNightscout = true + nightscoutTestResult = nil + + Task { + do { + let importer = LoopInsights_NightscoutImporter(config: nightscoutConfig) + let success = try await importer.testConnection() + await MainActor.run { + nightscoutConfig.isConnected = success + nightscoutConfig.save() + nightscoutTestResult = success ? .success : .failure("Unknown error") + isTestingNightscout = false + } + } catch { + await MainActor.run { + nightscoutConfig.isConnected = false + nightscoutConfig.save() + nightscoutTestResult = .failure(error.localizedDescription) + isTestingNightscout = false + } + } + } + } + // MARK: - Helpers private var effectiveFormat: LoopInsightsRequestFormat { From 1e74a3cc5bfa7992af4a58c19a0285ca3796e83d Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 13 Feb 2026 11:55:39 -0800 Subject: [PATCH 07/36] Phase 6: Performance optimizations, enhanced activity data, and meal card fixes P1: Parallel HealthKit queries via async let (6 concurrent fetches) P2: Single-pass TIR zone counting (5-zone) replacing multiple filter passes P3: Pre-fetch raw data in DataAggregator, cache for cross-component reuse P4: Binary search for glucose lookups in FoodResponseAnalyzer P5: Pre-sorted glucose samples with binary search in AdvancedAnalyzers P6: Pre-compute AGP data in ViewModel instead of SwiftUI view body P7: Static DateFormatter in LoopInsightsTimeBlock.formatTime P8: Pre-sort schedule items before dose loops, pre-sort in ViewModel P9: Pre-convert glucose to parallel arrays avoiding repeated doubleValue calls P10: Pass precomputed hourly averages to circadian profile builder Also: enhanced step/activity data in AI prompts with time-of-day breakdowns and activity-glucose correlation analysis (2h lag), and meal card layout cleanup. Co-Authored-By: Claude Opus 4.6 --- Loop/Localizable.xcstrings | 16 +- .../LoopInsights_Coordinator.swift | 22 ++- .../LoopInsights/LoopInsights_Models.swift | 13 +- .../LoopInsights_AIAnalysis.swift | 51 ++++++ .../LoopInsights_AdvancedAnalyzers.swift | 92 +++++++---- .../LoopInsights_DataAggregator.swift | 118 ++++++++------ .../LoopInsights_FoodResponseAnalyzer.swift | 153 ++++++++++++------ .../LoopInsights_HealthKitManager.swift | 84 ++++++---- .../LoopInsights_DashboardViewModel.swift | 52 +++--- .../LoopInsights_AGPChartView.swift | 8 +- .../LoopInsights_DashboardView.swift | 4 +- .../LoopInsights_MealInsightsView.swift | 16 +- 12 files changed, 422 insertions(+), 207 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 3c3741cef6..3b95706be5 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -629,6 +629,18 @@ } } }, + "%@ [%lld chars]" : { + "comment" : "A view that displays a meal with its food type, date, and glucose response. The \"Pre-Meal Advice\" tab in the Loop Insights app uses this view to show individual meal cards.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ [%2$lld chars]" + } + } + } + }, "%@ %@" : { "comment" : "The format for an active custom preset. (1: preset symbol)(2: preset name)", "localizations" : { @@ -33872,10 +33884,10 @@ "Review recommended — significant adjustments may help" : { "comment" : "LoopInsights score: review" }, - "Rise > 50 mg/dL" : { + "Rise is > 50 mg/dL" : { "comment" : "LoopInsights meal legend orange" }, - "Rise ≤ 50 mg/dL" : { + "Rise is ≤ 50 mg/dL" : { "comment" : "LoopInsights meal legend green" }, "Rise: %+.0f mg/dL" : { diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 3a62e3cf2b..a578b95a71 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -123,16 +123,19 @@ final class LoopInsights_Coordinator: ObservableObject { /// Build supplemental context for AI prompt enrichment from Phase 5 analyzers. /// Returns nil if no Phase 5 features are enabled. + /// P3: Accept pre-fetched glucose + carbs to avoid duplicate data fetches. + /// P10: Pass hourly averages to circadian profile builder. func buildSupplementalContext( stats: LoopInsightsAggregatedStats, - glucoseSamples: [StoredGlucoseSample]? = nil + glucoseSamples: [StoredGlucoseSample]? = nil, + carbEntries: [StoredCarbEntry]? = nil ) async -> String? { var context: [String] = [] let start = Date().addingTimeInterval(-stats.period.timeInterval) let end = Date() - // Fetch glucose samples once if not provided + // P3: Use pre-fetched glucose, fall back to bridge only if not provided var resolvedGlucose: [StoredGlucoseSample]? = glucoseSamples if resolvedGlucose == nil, let bridge = dataProviderBridge { resolvedGlucose = try? await bridge.getGlucoseSamples(start: start, end: end) @@ -142,9 +145,11 @@ final class LoopInsights_Coordinator: ObservableObject { if LoopInsights_FeatureFlags.circadianEnabled { // Circadian profile from glucose + sleep data if let samples = resolvedGlucose { + // P10: Pass pre-computed hourly averages to avoid re-bucketing if let profile = LoopInsights_AdvancedAnalyzers.buildCircadianProfile( glucoseSamples: samples, - sleepStats: stats.biometricStats?.sleep + sleepStats: stats.biometricStats?.sleep, + precomputedHourlyAverages: stats.glucoseStats.hourlyAverages ) { context.append(LoopInsights_AdvancedAnalyzers.buildCircadianPromptContext(profile)) } @@ -163,11 +168,14 @@ final class LoopInsights_Coordinator: ObservableObject { // Food response patterns if LoopInsights_FeatureFlags.foodResponseEnabled { - if let bridge = dataProviderBridge, - let carbEntries = try? await bridge.getCarbEntries(start: start, end: end), - let glucSamples = resolvedGlucose { + // P3: Use pre-fetched carbs, fall back to bridge only if not provided + var resolvedCarbs: [StoredCarbEntry]? = carbEntries + if resolvedCarbs == nil, let bridge = dataProviderBridge { + resolvedCarbs = try? await bridge.getCarbEntries(start: start, end: end) + } + if let carbs = resolvedCarbs, let glucSamples = resolvedGlucose { let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( - carbEntries: carbEntries, + carbEntries: carbs, glucoseSamples: glucSamples ) let foodCtx = LoopInsights_FoodResponseAnalyzer.buildFoodResponsePromptContext(patterns) diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 24ec771e19..05a7e4c8a6 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -531,15 +531,17 @@ struct LoopInsightsTimeBlock: Codable, Identifiable, Equatable { return ((proposedValue - currentValue) / currentValue) * 100 } - private static func formatTime(_ seconds: TimeInterval) -> String { - let hours = Int(seconds) / 3600 - let minutes = (Int(seconds) % 3600) / 60 + private static let timeFormatter: DateFormatter = { let formatter = DateFormatter() - formatter.dateFormat = hours >= 12 ? "h:mm a" : "h:mm a" + formatter.dateFormat = "h:mm a" + return formatter + }() + + private static func formatTime(_ seconds: TimeInterval) -> String { var calendar = Calendar.current calendar.timeZone = TimeZone.current let date = calendar.startOfDay(for: Date()).addingTimeInterval(seconds) - return formatter.string(from: date) + return timeFormatter.string(from: date) } } @@ -682,6 +684,7 @@ struct LoopInsightsAggregatedStats: Codable { struct ActiveEnergyStats: Codable { let averageDailyCalories: Double + let hourlyAverages: [Int: Double] // hour → avg kcal burned } struct WeightStats: Codable { diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index d37f52a5a4..c094d215d9 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -322,6 +322,44 @@ final class LoopInsights_AIAnalysis { if let steps = bio.steps { prompt += "### Steps/Activity\n" prompt += "- Average Daily Steps: \(String(format: "%.0f", steps.averageDailySteps))\n" + if !steps.hourlyAverages.isEmpty { + // Group into time-of-day activity levels + let activityPeriods: [(name: String, hours: ClosedRange)] = [ + ("Morning 6-10AM", 6...9), ("Midday 10AM-2PM", 10...13), + ("Afternoon 2-6PM", 14...17), ("Evening 6-10PM", 18...21) + ] + for period in activityPeriods { + let periodSteps = period.hours.compactMap { steps.hourlyAverages[$0] } + if !periodSteps.isEmpty { + let total = periodSteps.reduce(0, +) + prompt += "- \(period.name): \(String(format: "%.0f", total)) avg steps\n" + } + } + // Peak activity hour + if let peakHour = steps.hourlyAverages.max(by: { $0.value < $1.value }) { + prompt += "- Peak activity hour: \(String(format: "%02d", peakHour.key)):00 (\(String(format: "%.0f", peakHour.value)) steps)\n" + } + + // Activity-glucose correlation: compare high-activity hours to glucose + let glucoseHourly = stats.glucoseStats.hourlyAverages + if !glucoseHourly.isEmpty { + var correlations: [String] = [] + let avgGlucose = stats.glucoseStats.averageGlucose + for (hour, stepCount) in steps.hourlyAverages where stepCount > 200 { + let postActivityHour = (hour + 2) % 24 + if let postGlucose = glucoseHourly[postActivityHour] { + let delta = postGlucose - avgGlucose + if abs(delta) > 10 { + correlations.append("Activity at \(String(format: "%02d", hour)):00 → glucose \(delta > 0 ? "+" : "")\(String(format: "%.0f", delta)) mg/dL vs avg at \(String(format: "%02d", postActivityHour)):00") + } + } + } + if !correlations.isEmpty { + prompt += "- **Activity-Glucose Correlations (2h lag)**:\n" + for c in correlations.prefix(5) { prompt += " - \(c)\n" } + } + } + } } if let sleep = bio.sleep { @@ -334,6 +372,19 @@ final class LoopInsights_AIAnalysis { if let energy = bio.activeEnergy { prompt += "### Active Energy\n" prompt += "- Average Daily Active Calories: \(String(format: "%.0f", energy.averageDailyCalories)) kcal\n" + if !energy.hourlyAverages.isEmpty { + let activityPeriods: [(name: String, hours: ClosedRange)] = [ + ("Morning 6-10AM", 6...9), ("Midday 10AM-2PM", 10...13), + ("Afternoon 2-6PM", 14...17), ("Evening 6-10PM", 18...21) + ] + for period in activityPeriods { + let periodKcal = period.hours.compactMap { energy.hourlyAverages[$0] } + if !periodKcal.isEmpty { + let total = periodKcal.reduce(0, +) + prompt += "- \(period.name): \(String(format: "%.0f", total)) avg kcal\n" + } + } + } } if let weight = bio.weight { diff --git a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift index d28b62e05b..9fef965da3 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift @@ -19,14 +19,14 @@ final class LoopInsights_AdvancedAnalyzers { /// Build a circadian glucose profile using sleep data and glucose samples. /// Uses actual wake/bed times from HealthKit sleep data when available. + /// P10: Accept optional pre-computed hourlyAverages to avoid re-bucketing glucose static func buildCircadianProfile( glucoseSamples: [StoredGlucoseSample], - sleepStats: LoopInsightsAggregatedStats.SleepStats? + sleepStats: LoopInsightsAggregatedStats.SleepStats?, + precomputedHourlyAverages: [Int: Double]? = nil ) -> LoopInsightsCircadianProfile? { guard !glucoseSamples.isEmpty else { return nil } - let calendar = Calendar.current - // Determine wake/bed hours from sleep data or use defaults let wakeHour: Int let bedHour: Int @@ -38,31 +38,37 @@ final class LoopInsights_AdvancedAnalyzers { bedHour = 22 } - // Bucket glucose by hour - var hourlyBuckets: [Int: [Double]] = [:] - for sample in glucoseSamples { - let hour = calendar.component(.hour, from: sample.startDate) - let value = sample.quantity.doubleValue(for: .milligramsPerDeciliter) - hourlyBuckets[hour, default: []].append(value) - } - - let hourlyAvg: (Int) -> Double = { hour in - guard let vals = hourlyBuckets[hour], !vals.isEmpty else { return 0 } - return vals.reduce(0, +) / Double(vals.count) + // P10: Reuse pre-computed hourly averages when available + let hourlyAvg: (Int) -> Double + if let precomputed = precomputedHourlyAverages { + hourlyAvg = { hour in precomputed[hour] ?? 0 } + } else { + let calendar = Calendar.current + var hourlyBuckets: [Int: [Double]] = [:] + for sample in glucoseSamples { + let hour = calendar.component(.hour, from: sample.startDate) + let value = sample.quantity.doubleValue(for: .milligramsPerDeciliter) + hourlyBuckets[hour, default: []].append(value) + } + hourlyAvg = { hour in + guard let vals = hourlyBuckets[hour], !vals.isEmpty else { return 0 } + return vals.reduce(0, +) / Double(vals.count) + } } // Pre-sleep: hour before bed let preSleepHour = (bedHour - 1 + 24) % 24 let preSleepAvg = hourlyAvg(preSleepHour) - // Overnight: bed to wake - var overnightValues: [Double] = [] + // Overnight: bed to wake (use hourlyAvg function to work with both precomputed and bucketed data) + var overnightHourAvgs: [Double] = [] var h = bedHour while h != wakeHour { - if let vals = hourlyBuckets[h] { overnightValues.append(contentsOf: vals) } + let avg = hourlyAvg(h) + if avg > 0 { overnightHourAvgs.append(avg) } h = (h + 1) % 24 } - let overnightAvg = overnightValues.isEmpty ? 0 : overnightValues.reduce(0, +) / Double(overnightValues.count) + let overnightAvg = overnightHourAvgs.isEmpty ? 0 : overnightHourAvgs.reduce(0, +) / Double(overnightHourAvgs.count) // Wake glucose let wakeGlucose = hourlyAvg(wakeHour) @@ -132,6 +138,12 @@ final class LoopInsights_AdvancedAnalyzers { let totalMinutes = Double(periodDays) * 24 * 60 + // P8: Pre-sort schedule items once instead of per-dose + let sortedBasalItems = scheduledBasalItems.sorted { $0.startTime < $1.startTime } + + // P5: Sort glucose samples by date for binary search overcorrection lookups + let sortedGlucose = glucoseSamples.sorted { $0.startDate < $1.startDate } + for dose in doses { let durationMinutes = dose.endDate.timeIntervalSince(dose.startDate) / 60 let hour = calendar.component(.hour, from: dose.startDate) @@ -141,16 +153,23 @@ final class LoopInsights_AdvancedAnalyzers { totalSuspensionMinutes += durationMinutes hourlyDistribution[hour, default: 0] += durationMinutes - // Check for overcorrection: glucose > 180 within 2h after suspension ends - let checkWindow = dose.endDate...dose.endDate.addingTimeInterval(2 * 3600) - let reboundHigh = glucoseSamples.contains { sample in - checkWindow.contains(sample.startDate) && - sample.quantity.doubleValue(for: .milligramsPerDeciliter) > 180 + // P5: Binary search for overcorrection check instead of linear scan + let checkStart = dose.endDate + let checkEnd = dose.endDate.addingTimeInterval(2 * 3600) + let startIdx = Self.binarySearchFirstIndex(in: sortedGlucose, afterOrAt: checkStart) + var reboundHigh = false + for i in startIdx.. checkEnd { break } + if sample.quantity.doubleValue(for: .milligramsPerDeciliter) > 180 { + reboundHigh = true + break + } } if reboundHigh { overcorrectionEvents += 1 } } else if dose.type == .tempBasal { let rate = dose.unitsPerHour - let scheduledRate = effectiveScheduledRate(at: dose.startDate, items: scheduledBasalItems) + let scheduledRate = effectiveScheduledRate(at: dose.startDate, sortedItems: sortedBasalItems) if rate < scheduledRate { let minutes = durationMinutes subBasalMinutes += minutes @@ -252,18 +271,18 @@ final class LoopInsights_AdvancedAnalyzers { // MARK: - Helpers + /// Find the effective scheduled rate at a given date. Expects pre-sorted items (P8). private static func effectiveScheduledRate( at date: Date, - items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] + sortedItems: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] ) -> Double { let calendar = Calendar.current let secondsSinceMidnight = TimeInterval( calendar.component(.hour, from: date) * 3600 + calendar.component(.minute, from: date) * 60 ) - let sorted = items.sorted { $0.startTime < $1.startTime } - var result = sorted.first?.value ?? 0 - for item in sorted { + var result = sortedItems.first?.value ?? 0 + for item in sortedItems { if item.startTime <= secondsSinceMidnight { result = item.value } else { @@ -272,4 +291,21 @@ final class LoopInsights_AdvancedAnalyzers { } return result } + + /// P5: Binary search to find the first glucose sample at or after `date` in a sorted array. + static func binarySearchFirstIndex( + in samples: [StoredGlucoseSample], + afterOrAt date: Date + ) -> Int { + var lo = 0, hi = samples.count + while lo < hi { + let mid = (lo + hi) / 2 + if samples[mid].startDate < date { + lo = mid + 1 + } else { + hi = mid + } + } + return lo + } } diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index c8ba20b166..5de9526c5f 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -28,6 +28,10 @@ final class LoopInsights_DataAggregator { private weak var dataProvider: LoopInsightsDataProviderProtocol? private var healthKitManager: LoopInsights_HealthKitManager? + /// P3: Cached raw data from last aggregation, available for reuse (AGP chart, supplemental context) + private(set) var lastFetchedGlucoseSamples: [StoredGlucoseSample] = [] + private(set) var lastFetchedCarbEntries: [StoredCarbEntry] = [] + init(dataProvider: LoopInsightsDataProviderProtocol, healthKitManager: LoopInsights_HealthKitManager? = nil) { self.dataProvider = dataProvider self.healthKitManager = healthKitManager @@ -44,23 +48,37 @@ final class LoopInsights_DataAggregator { let endDate = Date() let startDate = endDate.addingTimeInterval(-period.timeInterval) - async let glucoseStats = computeGlucoseStats(provider: dataProvider, start: startDate, end: endDate) - async let insulinStats = computeInsulinStats(provider: dataProvider, start: startDate, end: endDate) - async let carbStats = computeCarbStats(provider: dataProvider, start: startDate, end: endDate) + // P3: Fetch all raw data in parallel — each type fetched exactly once + async let rawGlucose = dataProvider.getGlucoseSamples(start: startDate, end: endDate) + async let rawDoses = dataProvider.getNormalizedDoseEntries(start: startDate, end: endDate) + async let rawCarbs = dataProvider.getCarbEntries(start: startDate, end: endDate) async let biometrics = fetchBiometricsIfEnabled(start: startDate, end: endDate) - var resolvedInsulinStats = try await insulinStats + let glucoseSamples = try await rawGlucose + let doseEntries = try await rawDoses + let carbEntries = try await rawCarbs let resolvedBiometrics = try await biometrics - let resolvedGlucoseStats = try await glucoseStats + + // P3: Store for external reuse (AGP chart, supplemental context) + self.lastFetchedGlucoseSamples = glucoseSamples + self.lastFetchedCarbEntries = carbEntries + + // Compute stats from pre-fetched data (each may still supplement with HK data) + async let glucoseStatsTask = computeGlucoseStats(loopSamples: glucoseSamples, start: startDate, end: endDate) + async let insulinStatsTask = computeInsulinStats(loopDoses: doseEntries, start: startDate, end: endDate) + async let carbStatsTask = computeCarbStats(loopEntries: carbEntries, start: startDate, end: endDate) + + let resolvedGlucoseStats = try await glucoseStatsTask + var resolvedInsulinStats = try await insulinStatsTask + let resolvedCarbStats = try await carbStatsTask // Phase 5: Compute negative basal stats if circadian flag is enabled + // P3: Reuses pre-fetched doses and glucose — no duplicate fetches if LoopInsights_FeatureFlags.circadianEnabled { do { - let doses = try await dataProvider.getNormalizedDoseEntries(start: startDate, end: endDate) - let glucoseSamples = try await dataProvider.getGlucoseSamples(start: startDate, end: endDate) let snapshot = try captureTherapySnapshot() let negBasal = LoopInsights_AdvancedAnalyzers.computeNegativeBasalStats( - doses: doses, + doses: doseEntries, scheduledBasalItems: snapshot.basalRateItems, periodDays: period.rawValue, glucoseSamples: glucoseSamples @@ -104,7 +122,7 @@ final class LoopInsights_DataAggregator { period: period, glucoseStats: resolvedGlucoseStats, insulinStats: resolvedInsulinStats, - carbStats: try await carbStats, + carbStats: resolvedCarbStats, biometricStats: enrichedBiometrics, generatedAt: Date() ) @@ -167,18 +185,15 @@ final class LoopInsights_DataAggregator { // MARK: - Glucose Stats - private func computeGlucoseStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.GlucoseStats { - // First try Loop's local stores - var samples = try await provider.getGlucoseSamples(start: start, end: end) - + /// P3: Accepts pre-fetched Loop samples to avoid duplicate fetching. + /// Still supplements with HealthKit data for longer periods when HK has more samples. + private func computeGlucoseStats(loopSamples: [StoredGlucoseSample], start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.GlucoseStats { // Supplement with HealthKit data for longer periods or when Loop stores have gaps if let hkManager = healthKitManager { do { let hkGlucose = try await hkManager.fetchGlucoseSamples(start: start, end: end) - // Loop writes CGM data to HealthKit, so HK always has >= Loop store data. - // Use HealthKit data when it has more samples (longer history). - if hkGlucose.count > samples.count { - print("[LoopInsights] HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(samples.count) — using HealthKit data") + if hkGlucose.count > loopSamples.count { + print("[LoopInsights] HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(loopSamples.count) — using HealthKit data") return computeGlucoseStatsFromValues( values: hkGlucose.map { (date: $0.date, mgdl: $0.mgdl) }, start: start, end: end @@ -189,26 +204,28 @@ final class LoopInsights_DataAggregator { } } - guard !samples.isEmpty else { + guard !loopSamples.isEmpty else { throw LoopInsightsError.insufficientData("No glucose data available for the selected period") } - let glucoseValues = samples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } + // P9: Pre-convert all glucose values once + let glucoseValues = loopSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } let count = Double(glucoseValues.count) let average = glucoseValues.reduce(0, +) / count - let variance = glucoseValues.reduce(0) { $0 + pow($1 - average, 2) } / count let stdDev = sqrt(variance) - let cv = (stdDev / average) * 100 - // Time in range calculations — 5-zone breakdown (Clarity-style) - let veryHighCount = glucoseValues.filter { $0 > 250 }.count - let highCount = glucoseValues.filter { $0 > 180 && $0 <= 250 }.count - let inRangeCount = glucoseValues.filter { $0 >= 70 && $0 <= 180 }.count - let lowCount = glucoseValues.filter { $0 >= 54 && $0 < 70 }.count - let veryLowCount = glucoseValues.filter { $0 < 54 }.count + // P2: Single-pass 5-zone TIR counting (replaces 5 separate .filter() passes) + var veryHighCount = 0, highCount = 0, inRangeCount = 0, lowCount = 0, veryLowCount = 0 + for value in glucoseValues { + if value > 250 { veryHighCount += 1 } + else if value > 180 { highCount += 1 } + else if value >= 70 { inRangeCount += 1 } + else if value >= 54 { lowCount += 1 } + else { veryLowCount += 1 } + } let tir = (Double(inRangeCount) / count) * 100 let tvh = (Double(veryHighCount) / count) * 100 @@ -216,15 +233,14 @@ final class LoopInsights_DataAggregator { let tl = (Double(lowCount) / count) * 100 let tvl = (Double(veryLowCount) / count) * 100 - // GMI (Glucose Management Indicator) = 3.31 + 0.02392 × mean glucose (mg/dL) let gmi = 3.31 + (0.02392 * average) - // Hourly averages + // P9: Hourly averages using pre-converted values var hourlyBuckets: [Int: [Double]] = [:] let calendar = Calendar.current - for sample in samples { + for (i, sample) in loopSamples.enumerated() { let hour = calendar.component(.hour, from: sample.startDate) - hourlyBuckets[hour, default: []].append(sample.quantity.doubleValue(for: .milligramsPerDeciliter)) + hourlyBuckets[hour, default: []].append(glucoseValues[i]) } let hourlyAverages = hourlyBuckets.mapValues { values in values.reduce(0, +) / Double(values.count) @@ -255,11 +271,15 @@ final class LoopInsights_DataAggregator { let stdDev = sqrt(variance) let cv = (stdDev / average) * 100 - let veryHighCount = glucoseValues.filter { $0 > 250 }.count - let highCount = glucoseValues.filter { $0 > 180 && $0 <= 250 }.count - let inRangeCount = glucoseValues.filter { $0 >= 70 && $0 <= 180 }.count - let lowCount = glucoseValues.filter { $0 >= 54 && $0 < 70 }.count - let veryLowCount = glucoseValues.filter { $0 < 54 }.count + // P2: Single-pass 5-zone TIR counting + var veryHighCount = 0, highCount = 0, inRangeCount = 0, lowCount = 0, veryLowCount = 0 + for value in glucoseValues { + if value > 250 { veryHighCount += 1 } + else if value > 180 { highCount += 1 } + else if value >= 70 { inRangeCount += 1 } + else if value >= 54 { lowCount += 1 } + else { veryLowCount += 1 } + } let tir = (Double(inRangeCount) / count) * 100 let tvh = (Double(veryHighCount) / count) * 100 let th = (Double(highCount) / count) * 100 @@ -292,15 +312,14 @@ final class LoopInsights_DataAggregator { // MARK: - Insulin Stats - private func computeInsulinStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.InsulinStats { - var doses = try await provider.getNormalizedDoseEntries(start: start, end: end) - + /// P3: Accepts pre-fetched Loop doses to avoid duplicate fetching. + private func computeInsulinStats(loopDoses: [DoseEntry], start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.InsulinStats { // Supplement with HealthKit insulin delivery for longer periods if let hkManager = healthKitManager { do { let hkInsulin = try await hkManager.fetchInsulinDelivery(start: start, end: end) - if hkInsulin.count > doses.count { - print("[LoopInsights] HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(doses.count) — using HealthKit data") + if hkInsulin.count > loopDoses.count { + print("[LoopInsights] HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(loopDoses.count) — using HealthKit data") return computeInsulinStatsFromHK(hkInsulin, start: start, end: end) } } catch { @@ -316,7 +335,7 @@ final class LoopInsights_DataAggregator { var correctionCount = 0 let calendar = Calendar.current - for dose in doses { + for dose in loopDoses { let units = dose.deliveredUnits ?? dose.programmedUnits switch dose.type { @@ -403,15 +422,14 @@ final class LoopInsights_DataAggregator { // MARK: - Carb Stats - private func computeCarbStats(provider: LoopInsightsDataProviderProtocol, start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.CarbStats { - var entries = try await provider.getCarbEntries(start: start, end: end) - + /// P3: Accepts pre-fetched Loop carb entries to avoid duplicate fetching. + private func computeCarbStats(loopEntries: [StoredCarbEntry], start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.CarbStats { // Supplement with HealthKit carb data for longer periods if let hkManager = healthKitManager { do { let hkCarbs = try await hkManager.fetchCarbEntries(start: start, end: end) - if hkCarbs.count > entries.count { - print("[LoopInsights] HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(entries.count) — using HealthKit data") + if hkCarbs.count > loopEntries.count { + print("[LoopInsights] HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(loopEntries.count) — using HealthKit data") return computeCarbStatsFromHK(hkCarbs, start: start, end: end) } } catch { @@ -420,15 +438,15 @@ final class LoopInsights_DataAggregator { } let dayCount = max(1, end.timeIntervalSince(start) / (24 * 60 * 60)) - let totalCarbs = entries.reduce(0.0) { $0 + $1.quantity.doubleValue(for: .gram()) } + let totalCarbs = loopEntries.reduce(0.0) { $0 + $1.quantity.doubleValue(for: .gram()) } let avgDaily = totalCarbs / dayCount - let mealCount = entries.count + let mealCount = loopEntries.count let avgPerMeal = mealCount > 0 ? totalCarbs / Double(mealCount) : 0 // Hourly meal frequency var hourlyFrequency: [Int: Int] = [:] let calendar = Calendar.current - for entry in entries { + for entry in loopEntries { let hour = calendar.component(.hour, from: entry.startDate) hourlyFrequency[hour, default: 0] += 1 } diff --git a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift index b85db8d84b..6af68286eb 100644 --- a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift +++ b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift @@ -59,8 +59,10 @@ final class LoopInsights_FoodResponseAnalyzer { grouped[foodType, default: []].append(entry) } - // Sort glucose samples by date for efficient lookup + // P9: Pre-convert glucose values and sort for binary search (P4) let sortedGlucose = glucoseSamples.sorted { $0.startDate < $1.startDate } + let sortedDates = sortedGlucose.map { $0.startDate } + let sortedValues = sortedGlucose.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } var patterns: [LoopInsightsFoodResponsePattern] = [] @@ -79,20 +81,30 @@ final class LoopInsights_FoodResponseAnalyzer { let carbs = entry.quantity.doubleValue(for: .gram()) carbAmounts.append(carbs) - // Get pre-meal glucose (30 min before to meal time) - let preMealWindow = mealDate.addingTimeInterval(-1800)...mealDate - let preMealSamples = sortedGlucose.filter { preMealWindow.contains($0.startDate) } - guard !preMealSamples.isEmpty else { continue } - let preMealAvg = preMealSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) }.reduce(0, +) / Double(preMealSamples.count) + // P4: Binary search for pre-meal window (30 min before to meal time) + let preMealStart = mealDate.addingTimeInterval(-1800) + let preStartIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: preMealStart) + var preMealValues: [Double] = [] + for i in preStartIdx.. mealDate { break } + preMealValues.append(sortedValues[i]) + } + guard !preMealValues.isEmpty else { continue } + let preMealAvg = preMealValues.reduce(0, +) / Double(preMealValues.count) - // Get post-meal glucose (0-4h after meal) + // P4: Binary search for post-meal window (0-4h after meal) let postMealEnd = mealDate.addingTimeInterval(4 * 3600) - let postMealSamples = sortedGlucose.filter { - $0.startDate > mealDate && $0.startDate <= postMealEnd + let postStartIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: mealDate) + var postValues: [Double] = [] + var postDates: [Date] = [] + for i in postStartIdx.. postMealEnd { break } + if sortedDates[i] > mealDate { + postValues.append(sortedValues[i]) + postDates.append(sortedDates[i]) + } } - guard postMealSamples.count >= 4 else { continue } - - let postValues = postMealSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } + guard postValues.count >= 4 else { continue } // Peak rise let peak = postValues.max() ?? preMealAvg @@ -100,34 +112,44 @@ final class LoopInsights_FoodResponseAnalyzer { peakRises.append(peakRise) // Time to peak - if let peakSample = postMealSamples.max(by: { $0.quantity.doubleValue(for: .milligramsPerDeciliter) < $1.quantity.doubleValue(for: .milligramsPerDeciliter) }) { - let minutesToPeak = peakSample.startDate.timeIntervalSince(mealDate) / 60 + if let peakIdx = postValues.firstIndex(of: peak) { + let minutesToPeak = postDates[peakIdx].timeIntervalSince(mealDate) / 60 timesToPeak.append(minutesToPeak) } // AUC (trapezoidal approximation, mg/dL * hours above pre-meal) var auc: Double = 0 - for i in 1..= twoHourStart && postDates[i] <= twoHourEnd { + twoHourValues.append(postValues[i]) + } + } + if !twoHourValues.isEmpty { + twoHourAvgs.append(twoHourValues.reduce(0, +) / Double(twoHourValues.count)) } - let fourHourWindow = mealDate.addingTimeInterval(3.5 * 3600)...mealDate.addingTimeInterval(4.5 * 3600) - let fourHourSamples = postMealSamples.filter { fourHourWindow.contains($0.startDate) } - if !fourHourSamples.isEmpty { - let avg = fourHourSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) }.reduce(0, +) / Double(fourHourSamples.count) - fourHourAvgs.append(avg) + let fourHourStart = mealDate.addingTimeInterval(3.5 * 3600) + let fourHourEnd = mealDate.addingTimeInterval(4.5 * 3600) + var fourHourValues: [Double] = [] + for i in 0..= fourHourStart && postDates[i] <= fourHourEnd { + fourHourValues.append(postValues[i]) + } + } + if !fourHourValues.isEmpty { + fourHourAvgs.append(fourHourValues.reduce(0, +) / Double(fourHourValues.count)) } } @@ -164,7 +186,11 @@ final class LoopInsights_FoodResponseAnalyzer { ) -> [LoopInsightsMealEvent] { let dedupedEntries = deduplicateCarbEntries(carbEntries) let sortedEntries = dedupedEntries.sorted { $0.startDate > $1.startDate } + + // P4+P9: Pre-sort and pre-convert glucose for binary search + no repeated doubleValue let sortedGlucose = glucoseSamples.sorted { $0.startDate < $1.startDate } + let sortedDates = sortedGlucose.map { $0.startDate } + let sortedValues = sortedGlucose.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } var events: [LoopInsightsMealEvent] = [] @@ -173,33 +199,50 @@ final class LoopInsights_FoodResponseAnalyzer { let foodType = entry.foodType ?? "Unknown" let carbs = entry.quantity.doubleValue(for: .gram()) - // Pre-meal glucose - let preMealWindow = mealDate.addingTimeInterval(-1800)...mealDate - let preMealSamples = sortedGlucose.filter { preMealWindow.contains($0.startDate) } - guard !preMealSamples.isEmpty else { continue } - let preMealGlucose = preMealSamples.last!.quantity.doubleValue(for: .milligramsPerDeciliter) + // P4: Binary search for pre-meal glucose window + let preMealStart = mealDate.addingTimeInterval(-1800) + let preIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: preMealStart) + var lastPreMealValue: Double? + for i in preIdx.. mealDate { break } + lastPreMealValue = sortedValues[i] + } + guard let preMealGlucose = lastPreMealValue else { continue } - // Post-meal glucose (0-4h) + // P4: Binary search for post-meal glucose (0-4h) let postEnd = mealDate.addingTimeInterval(4 * 3600) - let postSamples = sortedGlucose.filter { $0.startDate > mealDate && $0.startDate <= postEnd } - guard postSamples.count >= 4 else { continue } + let postIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: mealDate) + var postValues: [Double] = [] + var postDates: [Date] = [] + for i in postIdx.. postEnd { break } + if sortedDates[i] > mealDate { + postValues.append(sortedValues[i]) + postDates.append(sortedDates[i]) + } + } + guard postValues.count >= 4 else { continue } - let postValues = postSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } let peakGlucose = postValues.max() ?? preMealGlucose // 2-hour glucose - let twoHourWindow = mealDate.addingTimeInterval(1.5 * 3600)...mealDate.addingTimeInterval(2.5 * 3600) - let twoHourSamples = postSamples.filter { twoHourWindow.contains($0.startDate) } - let twoHourGlucose = twoHourSamples.isEmpty ? preMealGlucose : - twoHourSamples.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) }.reduce(0, +) / Double(twoHourSamples.count) + let twoHourStart = mealDate.addingTimeInterval(1.5 * 3600) + let twoHourEnd = mealDate.addingTimeInterval(2.5 * 3600) + var twoHourValues: [Double] = [] + for i in 0..= twoHourStart && postDates[i] <= twoHourEnd { + twoHourValues.append(postValues[i]) + } + } + let twoHourGlucose = twoHourValues.isEmpty ? preMealGlucose : + twoHourValues.reduce(0, +) / Double(twoHourValues.count) - // Build timeline (every ~15 min) + // Build timeline var timeline: [(minutesAfter: Int, glucose: Double)] = [] timeline.append((0, preMealGlucose)) - for sample in postSamples { - let minutes = Int(sample.startDate.timeIntervalSince(mealDate) / 60) - let glucose = sample.quantity.doubleValue(for: .milligramsPerDeciliter) - timeline.append((minutes, glucose)) + for i in 0.. Int { + var lo = 0, hi = dates.count + while lo < hi { + let mid = (lo + hi) / 2 + if dates[mid] < date { + lo = mid + 1 + } else { + hi = mid + } + } + return lo + } + // MARK: - Prompt Context /// Build prompt context string from food response patterns diff --git a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift index 37d5f4bc64..d6ea96087f 100644 --- a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift +++ b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift @@ -70,41 +70,55 @@ final class LoopInsights_HealthKitManager: ObservableObject { /// Fetch all biometric data for the given date range. Each sub-stat is optional — /// if a type isn't authorized or has no data, that sub-stat is nil. func fetchAllBiometrics(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.BiometricStats { - let hrResult: LoopInsightsAggregatedStats.HeartRateStats? - do { hrResult = try await fetchHeartRateStats(start: start, end: end) } - catch { print("[LoopInsights] HK heart rate error: \(error)"); hrResult = nil } - - let hrvResult: LoopInsightsAggregatedStats.HRVStats? - do { hrvResult = try await fetchHRVStats(start: start, end: end) } - catch { print("[LoopInsights] HK HRV error: \(error)"); hrvResult = nil } - - let stepResult: LoopInsightsAggregatedStats.StepStats? - do { stepResult = try await fetchStepStats(start: start, end: end) } - catch { print("[LoopInsights] HK steps error: \(error)"); stepResult = nil } - - let sleepResult: LoopInsightsAggregatedStats.SleepStats? - do { sleepResult = try await fetchSleepStats(start: start, end: end) } - catch { print("[LoopInsights] HK sleep error: \(error)"); sleepResult = nil } - - let energyResult: LoopInsightsAggregatedStats.ActiveEnergyStats? - do { energyResult = try await fetchActiveEnergyStats(start: start, end: end) } - catch { print("[LoopInsights] HK active energy error: \(error)"); energyResult = nil } - - let weightResult: LoopInsightsAggregatedStats.WeightStats? - do { weightResult = try await fetchWeightStats(start: start, end: end) } - catch { print("[LoopInsights] HK weight error: \(error)"); weightResult = nil } - - return LoopInsightsAggregatedStats.BiometricStats( - heartRate: hrResult, - hrv: hrvResult, - steps: stepResult, - sleep: sleepResult, - activeEnergy: energyResult, - weight: weightResult, + // P1: Run all 6 HealthKit queries in parallel instead of sequentially + async let hr = fetchHeartRateSafe(start: start, end: end) + async let hrv = fetchHRVSafe(start: start, end: end) + async let steps = fetchStepSafe(start: start, end: end) + async let sleep = fetchSleepSafe(start: start, end: end) + async let energy = fetchEnergySafe(start: start, end: end) + async let weight = fetchWeightSafe(start: start, end: end) + + return await LoopInsightsAggregatedStats.BiometricStats( + heartRate: hr, + hrv: hrv, + steps: steps, + sleep: sleep, + activeEnergy: energy, + weight: weight, stressScore: nil // Computed by AdvancedAnalyzers in DataAggregator ) } + private func fetchHeartRateSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.HeartRateStats? { + do { return try await fetchHeartRateStats(start: start, end: end) } + catch { print("[LoopInsights] HK heart rate error: \(error)"); return nil } + } + + private func fetchHRVSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.HRVStats? { + do { return try await fetchHRVStats(start: start, end: end) } + catch { print("[LoopInsights] HK HRV error: \(error)"); return nil } + } + + private func fetchStepSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.StepStats? { + do { return try await fetchStepStats(start: start, end: end) } + catch { print("[LoopInsights] HK steps error: \(error)"); return nil } + } + + private func fetchSleepSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.SleepStats? { + do { return try await fetchSleepStats(start: start, end: end) } + catch { print("[LoopInsights] HK sleep error: \(error)"); return nil } + } + + private func fetchEnergySafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.ActiveEnergyStats? { + do { return try await fetchActiveEnergyStats(start: start, end: end) } + catch { print("[LoopInsights] HK active energy error: \(error)"); return nil } + } + + private func fetchWeightSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.WeightStats? { + do { return try await fetchWeightStats(start: start, end: end) } + catch { print("[LoopInsights] HK weight error: \(error)"); return nil } + } + // MARK: - Heart Rate private func fetchHeartRateStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.HeartRateStats? { @@ -284,16 +298,22 @@ final class LoopInsights_HealthKitManager: ObservableObject { let calendar = Calendar.current var dailyTotals: [String: Double] = [:] + var hourlyBuckets: [Int: [Double]] = [:] for sample in samples { let kcal = sample.quantity.doubleValue(for: kcalUnit) let dayKey = Self.dayKey(for: sample.startDate, calendar: calendar) dailyTotals[dayKey, default: 0] += kcal + + let hour = calendar.component(.hour, from: sample.startDate) + hourlyBuckets[hour, default: []].append(kcal) } let avgDaily = dailyTotals.isEmpty ? 0 : dailyTotals.values.reduce(0, +) / Double(dailyTotals.count) + let hourlyAvgs = hourlyBuckets.mapValues { $0.reduce(0, +) / Double($0.count) } return LoopInsightsAggregatedStats.ActiveEnergyStats( - averageDailyCalories: avgDaily + averageDailyCalories: avgDaily, + hourlyAverages: hourlyAvgs ) } diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index 054c653b63..21f030eef5 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -69,6 +69,9 @@ final class LoopInsights_DashboardViewModel: ObservableObject { /// Glucose samples for AGP chart (populated during analysis) @Published var agpGlucoseSamples: [StoredGlucoseSample] = [] + /// P6: Pre-computed AGP data points — computed once when samples change, not on every view render + @Published var agpComputedData: [LoopInsightsAGPDataPoint] = [] + // MARK: - Dependencies let coordinator: LoopInsights_Coordinator @@ -127,20 +130,24 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // Fetch glucose samples for AGP chart + // P3+P6: Use cached glucose for AGP and pre-compute AGP data + let cachedGlucose = coordinator.dataAggregator.lastFetchedGlucoseSamples + let cachedCarbs = coordinator.dataAggregator.lastFetchedCarbEntries if LoopInsights_FeatureFlags.agpChartEnabled { - let start = Date().addingTimeInterval(-analysisPeriod.timeInterval) - if let samples = try? await coordinator.fetchGlucoseSamples(start: start, end: Date()) { - self.agpGlucoseSamples = samples - } + self.agpGlucoseSamples = cachedGlucose + self.agpComputedData = LoopInsights_AGPChartView.computeAGP(from: cachedGlucose) } // Capture current settings let snapshot = try coordinator.captureCurrentSnapshot() self.currentSnapshot = snapshot - // Phase 5: Build supplemental context from advanced analyzers - let supplementalContext = await coordinator.buildSupplementalContext(stats: stats) + // P3: Pass cached glucose + carbs to avoid re-fetching in supplemental context + let supplementalContext = await coordinator.buildSupplementalContext( + stats: stats, + glucoseSamples: cachedGlucose, + carbEntries: cachedCarbs + ) // Run AI analysis (include recent changes so AI knows data predates current settings) let recentChanges = self.recentlyAppliedRecords() @@ -208,19 +215,23 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // Fetch glucose samples for AGP chart + // P3+P6: Use cached glucose for AGP and pre-compute AGP data + let cachedGlucose = coordinator.dataAggregator.lastFetchedGlucoseSamples + let cachedCarbs = coordinator.dataAggregator.lastFetchedCarbEntries if LoopInsights_FeatureFlags.agpChartEnabled { - let start = Date().addingTimeInterval(-analysisPeriod.timeInterval) - if let samples = try? await coordinator.fetchGlucoseSamples(start: start, end: Date()) { - self.agpGlucoseSamples = samples - } + self.agpGlucoseSamples = cachedGlucose + self.agpComputedData = LoopInsights_AGPChartView.computeAGP(from: cachedGlucose) } let snapshot = try coordinator.captureCurrentSnapshot() self.currentSnapshot = snapshot - // Phase 5: Build supplemental context from advanced analyzers - let supplementalContext = await coordinator.buildSupplementalContext(stats: stats) + // P3: Pass cached glucose + carbs to avoid re-fetching in supplemental context + let supplementalContext = await coordinator.buildSupplementalContext( + stats: stats, + glucoseSamples: cachedGlucose, + carbEntries: cachedCarbs + ) // Analyze each setting type in tuning order: CR → ISF → BR let recentChanges = self.recentlyAppliedRecords() @@ -442,9 +453,12 @@ final class LoopInsights_DashboardViewModel: ObservableObject { case .basalRate: currentItems = currentSnapshot.basalRateItems } + // P8: Pre-sort once for all time blocks in this record + let sortedItems = currentItems.sorted { $0.startTime < $1.startTime } + // Check if at least one proposed value still matches current settings for block in record.suggestion.timeBlocks { - let currentValue = Self.effectiveValue(at: block.startTime, in: currentItems) + let currentValue = Self.effectiveValue(at: block.startTime, in: sortedItems) if abs(currentValue - block.proposedValue) < 0.01 { return true // This change is still active } @@ -454,13 +468,13 @@ final class LoopInsights_DashboardViewModel: ObservableObject { } /// Find the effective value at a given time in a schedule snapshot. + /// P8: Expects pre-sorted items to avoid redundant sorting per call. private static func effectiveValue( at time: TimeInterval, - in items: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] + in sortedItems: [LoopInsightsTherapySnapshot.LoopInsightsScheduleItem] ) -> Double { - let sorted = items.sorted { $0.startTime < $1.startTime } - var result = sorted.first?.value ?? 0 - for item in sorted { + var result = sortedItems.first?.value ?? 0 + for item in sortedItems { if item.startTime <= time { result = item.value } else { diff --git a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift index d36fb7c76b..6061661994 100644 --- a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift @@ -14,12 +14,8 @@ import HealthKit /// as layered SwiftUI Paths over a 24-hour x-axis. iOS 15 compatible (no Charts framework). struct LoopInsights_AGPChartView: View { - let glucoseSamples: [StoredGlucoseSample] - - /// Computed AGP data points (48 points, every 30 min) - private var agpData: [LoopInsightsAGPDataPoint] { - Self.computeAGP(from: glucoseSamples) - } + /// P6: Accept pre-computed AGP data instead of recomputing on every view body evaluation + let agpData: [LoopInsightsAGPDataPoint] private let targetLow: Double = 70 private let targetHigh: Double = 180 diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index ea479a3ea7..1228c72f24 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -393,8 +393,8 @@ struct LoopInsights_DashboardView: View { .padding(.bottom, 8) // AGP Chart — shown with analysis summary when enabled - if LoopInsights_FeatureFlags.agpChartEnabled && !viewModel.agpGlucoseSamples.isEmpty { - LoopInsights_AGPChartView(glucoseSamples: viewModel.agpGlucoseSamples) + if LoopInsights_FeatureFlags.agpChartEnabled && !viewModel.agpComputedData.isEmpty { + LoopInsights_AGPChartView(agpData: viewModel.agpComputedData) } if !LoopInsights_SecureStorage.hasAPIKey { diff --git a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift index cb601a6e9a..086fc290c2 100644 --- a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift @@ -83,13 +83,13 @@ struct LoopInsights_MealInsightsView: View { HStack(spacing: 16) { HStack(spacing: 4) { Circle().fill(Color.green).frame(width: 8, height: 8) - Text(NSLocalizedString("Rise ≤ 50 mg/dL", comment: "LoopInsights meal legend green")) + Text(NSLocalizedString("Rise is ≤ 50 mg/dL", comment: "LoopInsights meal legend green")) .font(.caption2) .foregroundColor(.secondary) } HStack(spacing: 4) { Circle().fill(Color.orange).frame(width: 8, height: 8) - Text(NSLocalizedString("Rise > 50 mg/dL", comment: "LoopInsights meal legend orange")) + Text(NSLocalizedString("Rise is > 50 mg/dL", comment: "LoopInsights meal legend orange")) .font(.caption2) .foregroundColor(.secondary) } @@ -108,14 +108,12 @@ struct LoopInsights_MealInsightsView: View { private func mealCard(_ event: LoopInsightsMealEvent) -> some View { VStack(alignment: .leading, spacing: 8) { + Text(event.foodType) + .font(.subheadline.weight(.semibold)) HStack { - VStack(alignment: .leading, spacing: 2) { - Text(event.foodType) - .font(.subheadline.weight(.semibold)) - Text(Self.dateFormatter.string(from: event.date)) - .font(.caption2) - .foregroundColor(.secondary) - } + Text(Self.dateFormatter.string(from: event.date)) + .font(.caption2) + .foregroundColor(.secondary) Spacer() Text(String(format: "%.0fg carbs", event.carbs)) .font(.caption) From 2780973b36ec19ca400dc825a3de9252a63b49e8 Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 13 Feb 2026 13:45:43 -0800 Subject: [PATCH 08/36] Phase 7: Dual-mode glucose chart, HealthKit data pipeline, and quality fixes Glucose chart now operates in two modes: standard Ambulatory Glucose Profile (24-hour overlay with percentile bands) for 14-day lookback, and Glucose Profile (multi-day time series) for all other periods. Both modes include an info button explaining the visualization. HealthKit glucose data supplements Loop store for longer analysis periods. Chart data clears on period change to prevent stale labels. Additional fixes across 22 files: improved HealthKit data pipeline reliability, enhanced test data provider, refined food response analysis, and minor bug fixes in background monitor, coordinator, caffeine tracker, and goals/trends views. Co-Authored-By: Claude Opus 4.6 --- Loop/Localizable.xcstrings | 25 +- .../LoopInsights_BackgroundMonitor.swift | 23 +- .../LoopInsights_Coordinator.swift | 20 +- .../LoopInsights/LoopInsights_Models.swift | 19 ++ .../LoopInsights_Phase5Models.swift | 4 +- .../LoopInsights_FeatureFlags.swift | 4 + .../LoopInsights_AdvancedAnalyzers.swift | 18 +- .../LoopInsights_CaffeineTracker.swift | 2 +- .../LoopInsights_DataAggregator.swift | 43 ++-- .../LoopInsights_FoodResponseAnalyzer.swift | 24 +- .../LoopInsights/LoopInsights_GoalStore.swift | 12 +- .../LoopInsights_HealthKitManager.swift | 23 +- .../LoopInsights_ReportGenerator.swift | 2 +- .../LoopInsights_SuggestionStore.swift | 4 +- .../LoopInsights_TestDataProvider.swift | 20 +- .../LoopInsights_ChatViewModel.swift | 11 +- .../LoopInsights_DashboardViewModel.swift | 38 +-- .../LoopInsights_AGPChartView.swift | 238 ++++++++++++++---- .../LoopInsights_DashboardView.swift | 2 +- .../LoopInsights/LoopInsights_GoalsView.swift | 22 +- .../LoopInsights_SettingsView.swift | 14 +- .../LoopInsights_TrendsInsightsView.swift | 5 +- 22 files changed, 374 insertions(+), 199 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 3b95706be5..dbae7d6dc8 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -629,18 +629,6 @@ } } }, - "%@ [%lld chars]" : { - "comment" : "A view that displays a meal with its food type, date, and glucose response. The \"Pre-Meal Advice\" tab in the Loop Insights app uses this view to show individual meal cards.", - "isCommentAutoGenerated" : true, - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ [%2$lld chars]" - } - } - } - }, "%@ %@" : { "comment" : "The format for an active custom preset. (1: preset symbol)(2: preset name)", "localizations" : { @@ -5969,6 +5957,9 @@ "AGP Chart" : { "comment" : "LoopInsights AGP toggle" }, + "AGP is a standardized reporting format developed by the International Diabetes Center. It overlays 14 days of CGM data into a single 24-hour view, displaying the median (P50), interquartile range (P25–P75), and 10th/90th percentile bands.\n\nThis format lets you and your clinician spot recurring daily patterns — like dawn phenomenon or post-meal spikes — at a glance, using the same visual language across institutions." : { + "comment" : "LoopInsights AGP info alert message" + }, "AI Advice" : { "comment" : "LoopInsights AI advice header" }, @@ -6607,7 +6598,7 @@ "comment" : "LoopInsights quick ask: meal bolus" }, "Ambulatory Glucose Profile" : { - "comment" : "LoopInsights AGP chart title" + "comment" : "LoopInsights AGP chart title\nLoopInsights AGP info alert title" }, "Amount (mg)" : { "comment" : "LoopInsights caffeine amount\nLoopInsights caffeine amount placeholder" @@ -21002,6 +20993,12 @@ } } }, + "Glucose Profile" : { + "comment" : "LoopInsights glucose profile chart title\nLoopInsights glucose profile info alert title" + }, + "Glucose Profile displays your CGM data across the selected time period using percentile bands.\n\nThe median line (P50) shows your typical glucose at each point in time. The shaded bands show the interquartile range (P25–P75) and the 10th/90th percentile spread, giving you a sense of variability.\n\nFor a standardized Ambulatory Glucose Profile (AGP) — which overlays all days into a single 24-hour view — select the 14-day lookback period." : { + "comment" : "LoopInsights glucose profile info alert message" + }, "Glucose Target Range Schedule" : { "comment" : "Details for configuration error when glucose target range schedule is missing", "localizations" : { @@ -28685,7 +28682,7 @@ "Not enough\ndata available" : { "comment" : "LoopInsights GMI insufficient data" }, - "Not enough data for AGP chart" : { + "Not enough data for glucose profile" : { "comment" : "LoopInsights AGP no data" }, "Notification Delivery" : { diff --git a/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift b/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift index b4e58e57a0..9b97b39938 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift @@ -9,6 +9,7 @@ import Foundation import UserNotifications import Combine +import os.log /// Monitors Loop's completion cycle and periodically runs AI analysis /// to proactively detect therapy setting adjustment opportunities. @@ -54,7 +55,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { func start() { guard loopCompletedObserver == nil else { return } guard LoopInsights_FeatureFlags.backgroundMonitorEnabled else { - print("[LoopInsights Monitor] Background monitoring is disabled") + LoopInsights_FeatureFlags.log.info("Background monitoring is disabled") return } @@ -66,7 +67,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { self?.handleLoopCompleted() } - print("[LoopInsights Monitor] Started — frequency: \(LoopInsights_FeatureFlags.monitorFrequency.displayName)") + LoopInsights_FeatureFlags.log.info("Monitor started — frequency: \(LoopInsights_FeatureFlags.monitorFrequency.displayName)") } /// Stop observing and cancel any pending work. @@ -75,7 +76,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { NotificationCenter.default.removeObserver(observer) loopCompletedObserver = nil } - print("[LoopInsights Monitor] Stopped") + LoopInsights_FeatureFlags.log.info("Monitor stopped") } /// Restart the monitor (e.g. after settings change). @@ -136,7 +137,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { // MARK: - Background Analysis private func runBackgroundAnalysis() async { - print("[LoopInsights Monitor] Running background analysis...") + LoopInsights_FeatureFlags.log.debug("Running background analysis...") do { let period = LoopInsights_FeatureFlags.analysisPeriod @@ -163,7 +164,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: Self.lastAnalysisKey) guard !newSuggestions.isEmpty else { - print("[LoopInsights Monitor] No new suggestions found") + LoopInsights_FeatureFlags.log.debug("No new suggestions found") return } @@ -177,7 +178,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { } guard !genuinelyNew.isEmpty else { - print("[LoopInsights Monitor] Suggestions match existing pending — no notification needed") + LoopInsights_FeatureFlags.log.debug("Suggestions match existing pending — no notification needed") return } @@ -188,7 +189,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { await deliverNotification(for: genuinelyNew) } catch { - print("[LoopInsights Monitor] Analysis failed: \(error.localizedDescription)") + LoopInsights_FeatureFlags.log.error("Background analysis failed: \(error.localizedDescription)") } } @@ -199,7 +200,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { // Check quiet hours — still store suggestions but suppress notifications if isInQuietHours() { - print("[LoopInsights Monitor] Quiet hours active — suppressing notification") + LoopInsights_FeatureFlags.log.info("Quiet hours active — suppressing notification") return } @@ -212,7 +213,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { await deliverPushNotification(suggestions: suggestions) case .silent: // No notification — suggestions are available in the store - print("[LoopInsights Monitor] Silent mode — \(suggestions.count) suggestion(s) stored") + LoopInsights_FeatureFlags.log.debug("Silent mode — \(suggestions.count) suggestion(s) stored") } } @@ -251,9 +252,9 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { do { try await UNUserNotificationCenter.current().add(request) - print("[LoopInsights Monitor] Push notification sent for \(suggestions.count) suggestion(s)") + LoopInsights_FeatureFlags.log.info("Push notification sent for \(suggestions.count) suggestion(s)") } catch { - print("[LoopInsights Monitor] Failed to send notification: \(error.localizedDescription)") + LoopInsights_FeatureFlags.log.error("Failed to send notification: \(error.localizedDescription)") } } diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index a578b95a71..6321835b5e 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -95,11 +95,11 @@ final class LoopInsights_Coordinator: ObservableObject { let provider = LoopInsights_TestDataProvider() guard provider.hasTestData else { - print("[LoopInsights] Test data mode enabled but no fixtures found") + LoopInsights_FeatureFlags.log.info("Test data mode enabled but no fixtures found") return nil } - print("[LoopInsights] Using test data: \(provider.dataSummary)") + LoopInsights_FeatureFlags.log.info("Using test data: \(provider.dataSummary)") return LoopInsights_Coordinator(testDataProvider: provider) } @@ -108,7 +108,7 @@ final class LoopInsights_Coordinator: ObservableObject { /// Start background monitoring if enabled and using real stores (not test data). func startBackgroundMonitoring() { guard dataProviderBridge != nil else { - print("[LoopInsights] Skipping background monitor — test data mode") + LoopInsights_FeatureFlags.log.debug("Skipping background monitor — test data mode") return } backgroundMonitor.start() @@ -138,7 +138,8 @@ final class LoopInsights_Coordinator: ObservableObject { // P3: Use pre-fetched glucose, fall back to bridge only if not provided var resolvedGlucose: [StoredGlucoseSample]? = glucoseSamples if resolvedGlucose == nil, let bridge = dataProviderBridge { - resolvedGlucose = try? await bridge.getGlucoseSamples(start: start, end: end) + do { resolvedGlucose = try await bridge.getGlucoseSamples(start: start, end: end) } + catch { LoopInsights_FeatureFlags.log.error("Supplemental context: glucose fetch failed: \(error)") } } // Circadian + Dawn Phenomenon + Negative Basal + Stress @@ -171,7 +172,8 @@ final class LoopInsights_Coordinator: ObservableObject { // P3: Use pre-fetched carbs, fall back to bridge only if not provided var resolvedCarbs: [StoredCarbEntry]? = carbEntries if resolvedCarbs == nil, let bridge = dataProviderBridge { - resolvedCarbs = try? await bridge.getCarbEntries(start: start, end: end) + do { resolvedCarbs = try await bridge.getCarbEntries(start: start, end: end) } + catch { LoopInsights_FeatureFlags.log.error("Supplemental context: carbs fetch failed: \(error)") } } if let carbs = resolvedCarbs, let glucSamples = resolvedGlucose { let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( @@ -224,7 +226,7 @@ final class LoopInsights_Coordinator: ObservableObject { @discardableResult func applyTherapyChanges(suggestion: LoopInsightsSuggestion) -> Bool { guard let writer = settingsWriter else { - print("[LoopInsights] Cannot apply: no settings writer available (test data mode?)") + LoopInsights_FeatureFlags.log.error("Cannot apply: no settings writer available (test data mode?)") return false } @@ -256,7 +258,7 @@ final class LoopInsights_Coordinator: ObservableObject { } } - print("[LoopInsights] Applied \(suggestion.settingType.displayName) changes: \(blocks.count) time block(s)") + LoopInsights_FeatureFlags.log.info("Applied \(suggestion.settingType.displayName) changes: \(blocks.count) time block(s)") return true } @@ -266,7 +268,7 @@ final class LoopInsights_Coordinator: ObservableObject { @discardableResult func revertToSnapshot(_ snapshot: LoopInsightsTherapySnapshot) -> Bool { guard let writer = settingsWriter else { - print("[LoopInsights] Cannot revert: no settings writer available") + LoopInsights_FeatureFlags.log.error("Cannot revert: no settings writer available") return false } @@ -305,7 +307,7 @@ final class LoopInsights_Coordinator: ObservableObject { } } - print("[LoopInsights] Reverted settings to previous snapshot") + LoopInsights_FeatureFlags.log.info("Reverted settings to previous snapshot") return true } diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 05a7e4c8a6..2128c73579 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -869,3 +869,22 @@ final class LoopInsightsChatSession: ObservableObject { messages.removeAll() } } + +// MARK: - Binary Search Utility + +extension Array { + /// Binary search for the first index in a sorted array where `keyPath` is at or after `date`. + /// The array must be sorted by the key in ascending order. + func loopInsights_firstIndex(afterOrAt date: Date, by dateExtractor: (Element) -> Date) -> Int { + var lo = 0, hi = count + while lo < hi { + let mid = (lo + hi) / 2 + if dateExtractor(self[mid]) < date { + lo = mid + 1 + } else { + hi = mid + } + } + return lo + } +} diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index 5a4ed625c6..24c1538b1c 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -222,9 +222,9 @@ struct LoopInsightsNightscoutTreatment: Codable { // MARK: - AGP Data Point -/// A single time point in an Ambulatory Glucose Profile +/// A single time-window in a glucose profile chart spanning the analysis period. struct LoopInsightsAGPDataPoint { - let minuteOfDay: Int // 0-1439 + let date: Date // Bucket midpoint let p10: Double // 10th percentile mg/dL let p25: Double // 25th percentile mg/dL let p50: Double // 50th (median) mg/dL diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index b8948ea81d..783b84b29a 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -7,11 +7,15 @@ // import Foundation +import os.log /// Runtime feature flags for LoopInsights. All flags are UserDefaults-backed /// so they can be toggled without recompilation. struct LoopInsights_FeatureFlags { + /// Shared logger for all LoopInsights subsystems + static let log = Logger(subsystem: "com.loopkit.Loop.LoopInsights", category: "LoopInsights") + private enum Keys { static let isEnabled = "LoopInsights_isEnabled" static let developerModeEnabled = "LoopInsights_developerModeEnabled" diff --git a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift index 9fef965da3..956ae4c725 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift @@ -156,7 +156,7 @@ final class LoopInsights_AdvancedAnalyzers { // P5: Binary search for overcorrection check instead of linear scan let checkStart = dose.endDate let checkEnd = dose.endDate.addingTimeInterval(2 * 3600) - let startIdx = Self.binarySearchFirstIndex(in: sortedGlucose, afterOrAt: checkStart) + let startIdx = sortedGlucose.loopInsights_firstIndex(afterOrAt: checkStart) { $0.startDate } var reboundHigh = false for i in startIdx.. Int { - var lo = 0, hi = samples.count - while lo < hi { - let mid = (lo + hi) / 2 - if samples[mid].startDate < date { - lo = mid + 1 - } else { - hi = mid - } - } - return lo - } } diff --git a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift index 3e735b0361..a6be3b54de 100644 --- a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift +++ b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift @@ -50,7 +50,7 @@ final class LoopInsights_CaffeineTracker: ObservableObject { self.rebuildMergedEntries() } } catch { - print("[LoopInsights] Failed to fetch HealthKit caffeine: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to fetch HealthKit caffeine: \(error)") } } diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index 5de9526c5f..ec2e498d39 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -28,10 +28,13 @@ final class LoopInsights_DataAggregator { private weak var dataProvider: LoopInsightsDataProviderProtocol? private var healthKitManager: LoopInsights_HealthKitManager? - /// P3: Cached raw data from last aggregation, available for reuse (AGP chart, supplemental context) + /// P3: Cached raw data from last aggregation, available for reuse (supplemental context) private(set) var lastFetchedGlucoseSamples: [StoredGlucoseSample] = [] private(set) var lastFetchedCarbEntries: [StoredCarbEntry] = [] + /// Best available glucose data for AGP chart (Loop store or HealthKit, whichever has more samples for the period) + private(set) var lastGlucoseForAGP: [(date: Date, mgdl: Double)] = [] + init(dataProvider: LoopInsightsDataProviderProtocol, healthKitManager: LoopInsights_HealthKitManager? = nil) { self.dataProvider = dataProvider self.healthKitManager = healthKitManager @@ -59,9 +62,13 @@ final class LoopInsights_DataAggregator { let carbEntries = try await rawCarbs let resolvedBiometrics = try await biometrics - // P3: Store for external reuse (AGP chart, supplemental context) + // P3: Store for external reuse (supplemental context) self.lastFetchedGlucoseSamples = glucoseSamples self.lastFetchedCarbEntries = carbEntries + // Initial AGP cache from Loop store; computeGlucoseStats may upgrade to HealthKit if HK has more + self.lastGlucoseForAGP = glucoseSamples.map { + (date: $0.startDate, mgdl: $0.quantity.doubleValue(for: .milligramsPerDeciliter)) + } // Compute stats from pre-fetched data (each may still supplement with HK data) async let glucoseStatsTask = computeGlucoseStats(loopSamples: glucoseSamples, start: startDate, end: endDate) @@ -91,9 +98,9 @@ final class LoopInsights_DataAggregator { correctionBolusCount: resolvedInsulinStats.correctionBolusCount, negativeBasalStats: negBasal ) - print("[LoopInsights] Phase 5: Negative basal stats computed — \(negBasal.suspensionCount) suspensions") + LoopInsights_FeatureFlags.log.debug("Phase 5: Negative basal stats computed — \(negBasal.suspensionCount) suspensions") } catch { - print("[LoopInsights] Phase 5: Negative basal stats error — \(error)") + LoopInsights_FeatureFlags.log.error("Phase 5: Negative basal stats error — \(error)") } } @@ -114,7 +121,7 @@ final class LoopInsights_DataAggregator { weight: bio.weight, stressScore: stressScore ) - print("[LoopInsights] Phase 5: Stress score computed — \(String(format: "%.0f", stressScore!.overallScore))/100") + LoopInsights_FeatureFlags.log.debug("Phase 5: Stress score computed — \(String(format: "%.0f", stressScore!.overallScore))/100") } } @@ -160,25 +167,25 @@ final class LoopInsights_DataAggregator { private func fetchBiometricsIfEnabled(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.BiometricStats? { guard LoopInsights_FeatureFlags.biometricsEnabled else { - print("[LoopInsights] Biometrics: flag is disabled, skipping") + LoopInsights_FeatureFlags.log.debug("Biometrics: flag is disabled, skipping") return nil } // Use the injected manager, or create one on the fly. This handles the case // where the Coordinator was created before biometrics was enabled. let manager = healthKitManager ?? LoopInsights_HealthKitManager() - print("[LoopInsights] Biometrics: fetching from HealthKit (start: \(start), end: \(end))") + LoopInsights_FeatureFlags.log.debug("Biometrics: fetching from HealthKit (start: \(start), end: \(end))") do { let result = try await manager.fetchAllBiometrics(start: start, end: end) - print("[LoopInsights] Biometrics: HR=\(result.heartRate != nil), HRV=\(result.hrv != nil), steps=\(result.steps != nil), sleep=\(result.sleep != nil), energy=\(result.activeEnergy != nil), weight=\(result.weight != nil)") + LoopInsights_FeatureFlags.log.debug("Biometrics: HR=\(result.heartRate != nil), HRV=\(result.hrv != nil), steps=\(result.steps != nil), sleep=\(result.sleep != nil), energy=\(result.activeEnergy != nil), weight=\(result.weight != nil)") // If every sub-stat is nil, return nil so the AI prompt doesn't get an empty section if result.heartRate == nil && result.hrv == nil && result.steps == nil && result.sleep == nil && result.activeEnergy == nil && result.weight == nil { - print("[LoopInsights] Biometrics: all sub-stats nil — no HealthKit data available") + LoopInsights_FeatureFlags.log.debug("Biometrics: all sub-stats nil — no HealthKit data available") return nil } return result } catch { - print("[LoopInsights] Biometrics: fetch error — \(error)") + LoopInsights_FeatureFlags.log.error("Biometrics: fetch error — \(error)") return nil } } @@ -193,14 +200,16 @@ final class LoopInsights_DataAggregator { do { let hkGlucose = try await hkManager.fetchGlucoseSamples(start: start, end: end) if hkGlucose.count > loopSamples.count { - print("[LoopInsights] HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(loopSamples.count) — using HealthKit data") + LoopInsights_FeatureFlags.log.debug("HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(loopSamples.count) — using HealthKit data") + let hkValues = hkGlucose.map { (date: $0.date, mgdl: $0.mgdl) } + self.lastGlucoseForAGP = hkValues return computeGlucoseStatsFromValues( - values: hkGlucose.map { (date: $0.date, mgdl: $0.mgdl) }, + values: hkValues, start: start, end: end ) } } catch { - print("[LoopInsights] HealthKit glucose fetch error (continuing with Loop store data): \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit glucose fetch error (continuing with Loop store data): \(error)") } } @@ -319,11 +328,11 @@ final class LoopInsights_DataAggregator { do { let hkInsulin = try await hkManager.fetchInsulinDelivery(start: start, end: end) if hkInsulin.count > loopDoses.count { - print("[LoopInsights] HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(loopDoses.count) — using HealthKit data") + LoopInsights_FeatureFlags.log.debug("HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(loopDoses.count) — using HealthKit data") return computeInsulinStatsFromHK(hkInsulin, start: start, end: end) } } catch { - print("[LoopInsights] HealthKit insulin fetch error (continuing with Loop store data): \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit insulin fetch error (continuing with Loop store data): \(error)") } } @@ -429,11 +438,11 @@ final class LoopInsights_DataAggregator { do { let hkCarbs = try await hkManager.fetchCarbEntries(start: start, end: end) if hkCarbs.count > loopEntries.count { - print("[LoopInsights] HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(loopEntries.count) — using HealthKit data") + LoopInsights_FeatureFlags.log.debug("HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(loopEntries.count) — using HealthKit data") return computeCarbStatsFromHK(hkCarbs, start: start, end: end) } } catch { - print("[LoopInsights] HealthKit carbs fetch error (continuing with Loop store data): \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit carbs fetch error (continuing with Loop store data): \(error)") } } diff --git a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift index 6af68286eb..7eb6778802 100644 --- a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift +++ b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift @@ -83,7 +83,7 @@ final class LoopInsights_FoodResponseAnalyzer { // P4: Binary search for pre-meal window (30 min before to meal time) let preMealStart = mealDate.addingTimeInterval(-1800) - let preStartIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: preMealStart) + let preStartIdx = sortedDates.loopInsights_firstIndex(afterOrAt: preMealStart) { $0 } var preMealValues: [Double] = [] for i in preStartIdx.. mealDate { break } @@ -94,7 +94,7 @@ final class LoopInsights_FoodResponseAnalyzer { // P4: Binary search for post-meal window (0-4h after meal) let postMealEnd = mealDate.addingTimeInterval(4 * 3600) - let postStartIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: mealDate) + let postStartIdx = sortedDates.loopInsights_firstIndex(afterOrAt: mealDate) { $0 } var postValues: [Double] = [] var postDates: [Date] = [] for i in postStartIdx.. mealDate { break } @@ -211,7 +211,7 @@ final class LoopInsights_FoodResponseAnalyzer { // P4: Binary search for post-meal glucose (0-4h) let postEnd = mealDate.addingTimeInterval(4 * 3600) - let postIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: mealDate) + let postIdx = sortedDates.loopInsights_firstIndex(afterOrAt: mealDate) { $0 } var postValues: [Double] = [] var postDates: [Date] = [] for i in postIdx.. Int { - var lo = 0, hi = dates.count - while lo < hi { - let mid = (lo + hi) / 2 - if dates[mid] < date { - lo = mid + 1 - } else { - hi = mid - } - } - return lo - } - // MARK: - Prompt Context /// Build prompt context string from food response patterns diff --git a/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift b/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift index 6c0328b119..c17a9672af 100644 --- a/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift +++ b/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift @@ -324,7 +324,7 @@ final class LoopInsights_GoalStore: ObservableObject { do { goals = try decoder.decode([LoopInsightsGoal].self, from: data) } catch { - print("[LoopInsights] Failed to decode goals: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode goals: \(error)") goals = [] } } @@ -334,7 +334,7 @@ final class LoopInsights_GoalStore: ObservableObject { let data = try encoder.encode(goals) defaults.set(data, forKey: Self.goalsKey) } catch { - print("[LoopInsights] Failed to encode goals: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode goals: \(error)") } } @@ -346,7 +346,7 @@ final class LoopInsights_GoalStore: ObservableObject { do { reflections = try decoder.decode([LoopInsightsReflection].self, from: data) } catch { - print("[LoopInsights] Failed to decode reflections: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode reflections: \(error)") reflections = [] } } @@ -356,7 +356,7 @@ final class LoopInsights_GoalStore: ObservableObject { let data = try encoder.encode(reflections) defaults.set(data, forKey: Self.reflectionsKey) } catch { - print("[LoopInsights] Failed to encode reflections: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode reflections: \(error)") } } @@ -368,7 +368,7 @@ final class LoopInsights_GoalStore: ObservableObject { do { cachedPatterns = try decoder.decode([LoopInsightsCachedPattern].self, from: data) } catch { - print("[LoopInsights] Failed to decode cached patterns: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode cached patterns: \(error)") cachedPatterns = [] } } @@ -378,7 +378,7 @@ final class LoopInsights_GoalStore: ObservableObject { let data = try encoder.encode(cachedPatterns) defaults.set(data, forKey: Self.patternsKey) } catch { - print("[LoopInsights] Failed to encode cached patterns: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode cached patterns: \(error)") } } } diff --git a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift index d6ea96087f..f09cdc59e6 100644 --- a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift +++ b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift @@ -89,34 +89,33 @@ final class LoopInsights_HealthKitManager: ObservableObject { ) } + private func safeFetch(_ label: String, _ fetch: () async throws -> T?) async -> T? { + do { return try await fetch() } + catch { LoopInsights_FeatureFlags.log.error("HK \(label) error: \(error)"); return nil } + } + private func fetchHeartRateSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.HeartRateStats? { - do { return try await fetchHeartRateStats(start: start, end: end) } - catch { print("[LoopInsights] HK heart rate error: \(error)"); return nil } + await safeFetch("heart rate") { try await fetchHeartRateStats(start: start, end: end) } } private func fetchHRVSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.HRVStats? { - do { return try await fetchHRVStats(start: start, end: end) } - catch { print("[LoopInsights] HK HRV error: \(error)"); return nil } + await safeFetch("HRV") { try await fetchHRVStats(start: start, end: end) } } private func fetchStepSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.StepStats? { - do { return try await fetchStepStats(start: start, end: end) } - catch { print("[LoopInsights] HK steps error: \(error)"); return nil } + await safeFetch("steps") { try await fetchStepStats(start: start, end: end) } } private func fetchSleepSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.SleepStats? { - do { return try await fetchSleepStats(start: start, end: end) } - catch { print("[LoopInsights] HK sleep error: \(error)"); return nil } + await safeFetch("sleep") { try await fetchSleepStats(start: start, end: end) } } private func fetchEnergySafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.ActiveEnergyStats? { - do { return try await fetchActiveEnergyStats(start: start, end: end) } - catch { print("[LoopInsights] HK active energy error: \(error)"); return nil } + await safeFetch("active energy") { try await fetchActiveEnergyStats(start: start, end: end) } } private func fetchWeightSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.WeightStats? { - do { return try await fetchWeightStats(start: start, end: end) } - catch { print("[LoopInsights] HK weight error: \(error)"); return nil } + await safeFetch("weight") { try await fetchWeightStats(start: start, end: end) } } // MARK: - Heart Rate diff --git a/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift b/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift index 88baf28be8..a683e3f34a 100644 --- a/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift @@ -216,7 +216,7 @@ final class LoopInsights_ReportGenerator { try pdfData.write(to: tempURL) return tempURL } catch { - print("[LoopInsights] Failed to write PDF: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to write PDF: \(error)") return nil } } diff --git a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift index 0ae0753d7c..171bb83407 100644 --- a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift +++ b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift @@ -118,7 +118,7 @@ final class LoopInsights_SuggestionStore: ObservableObject { do { records = try decoder.decode([LoopInsightsSuggestionRecord].self, from: data) } catch { - print("[LoopInsights] Failed to decode suggestion history: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode suggestion history: \(error)") records = [] } } @@ -128,7 +128,7 @@ final class LoopInsights_SuggestionStore: ObservableObject { let data = try encoder.encode(records) defaults.set(data, forKey: Self.storageKey) } catch { - print("[LoopInsights] Failed to encode suggestion history: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode suggestion history: \(error)") } } } diff --git a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift index e3e8086e35..ba227693ad 100644 --- a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift +++ b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift @@ -131,9 +131,9 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { if let data = Self.loadFixtureData(for: FixtureFile.glucose) { do { glucoseSamples = try decoder.decode([StoredGlucoseSample].self, from: data) - print("[LoopInsights TestData] Loaded \(glucoseSamples.count) glucose samples") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded \(self.glucoseSamples.count) glucose samples") } catch { - print("[LoopInsights TestData] Failed to decode glucose: \(error)") + LoopInsights_FeatureFlags.log.error("TestData: Failed to decode glucose: \(error)") } } @@ -142,9 +142,9 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { let sanitizedData = Self.sanitizeDoseJSON(data) do { doseEntries = try decoder.decode([DoseEntry].self, from: sanitizedData) - print("[LoopInsights TestData] Loaded \(doseEntries.count) dose entries") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded \(self.doseEntries.count) dose entries") } catch { - print("[LoopInsights TestData] Failed to decode doses: \(error)") + LoopInsights_FeatureFlags.log.error("TestData: Failed to decode doses: \(error)") } } @@ -152,9 +152,9 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { if let data = Self.loadFixtureData(for: FixtureFile.carbs) { do { carbEntries = try decoder.decode([StoredCarbEntry].self, from: data) - print("[LoopInsights TestData] Loaded \(carbEntries.count) carb entries") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded \(self.carbEntries.count) carb entries") } catch { - print("[LoopInsights TestData] Failed to decode carbs: \(error)") + LoopInsights_FeatureFlags.log.error("TestData: Failed to decode carbs: \(error)") } } @@ -167,7 +167,7 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { /// Parse the Tidepool therapy settings JSON and construct a StoredSettings instance. private func loadTherapySettings(data: Data) { guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { - print("[LoopInsights TestData] Failed to parse therapy settings JSON") + LoopInsights_FeatureFlags.log.error("TestData: Failed to parse therapy settings JSON") return } @@ -217,7 +217,7 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { insulinSensitivitySchedule: isfSchedule, carbRatioSchedule: crSchedule ) - print("[LoopInsights TestData] Loaded therapy settings (basal: \(basalSchedule?.items.count ?? 0), ISF: \(isfSchedule?.items.count ?? 0), CR: \(crSchedule?.items.count ?? 0))") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded therapy settings (basal: \(basalSchedule?.items.count ?? 0), ISF: \(isfSchedule?.items.count ?? 0), CR: \(crSchedule?.items.count ?? 0))") } // MARK: - Dose JSON Sanitization @@ -264,10 +264,10 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { /// Load raw Data from a fixture file. private static func loadFixtureData(for filename: String) -> Data? { guard let url = resolveFixturePath(for: filename) else { - print("[LoopInsights TestData] Fixture not found: \(filename)") + LoopInsights_FeatureFlags.log.error("TestData: Fixture not found: \(filename)") return nil } - print("[LoopInsights TestData] Loading: \(url.lastPathComponent) from \(url.deletingLastPathComponent().lastPathComponent)/") + LoopInsights_FeatureFlags.log.debug("TestData: Loading \(url.lastPathComponent) from \(url.deletingLastPathComponent().lastPathComponent)/") return try? Data(contentsOf: url) } diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 0d32a77d62..f278a6d149 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -67,10 +67,13 @@ final class LoopInsights_ChatViewModel: ObservableObject { Task { @MainActor in do { - let snapshot = try? coordinator.captureCurrentSnapshot() - let stats = try? await coordinator.dataAggregator.aggregateData( - period: LoopInsights_FeatureFlags.analysisPeriod - ) + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Chat: failed to capture snapshot: \(error)") } + + var stats: LoopInsightsAggregatedStats? + do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } + catch { LoopInsights_FeatureFlags.log.error("Chat: failed to aggregate data: \(error)") } let context = Self.buildTherapyContext(snapshot: snapshot, stats: stats) let history = session.conversationHistory().dropLast().map { ($0.role, $0.content) } diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index 21f030eef5..176c816e42 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -66,12 +66,12 @@ final class LoopInsights_DashboardViewModel: ObservableObject { /// Whether current metrics indicate settings are already performing well @Published var settingsAlreadyOptimal: Bool = false - /// Glucose samples for AGP chart (populated during analysis) - @Published var agpGlucoseSamples: [StoredGlucoseSample] = [] - /// P6: Pre-computed AGP data points — computed once when samples change, not on every view render @Published var agpComputedData: [LoopInsightsAGPDataPoint] = [] + /// True when the analysis period is 14 days (standard AGP 24-hour overlay mode) + var isAGPMode: Bool { analysisPeriod == .fourteenDays } + // MARK: - Dependencies let coordinator: LoopInsights_Coordinator @@ -112,7 +112,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { do { currentSnapshot = try coordinator.captureCurrentSnapshot() } catch { - print("[LoopInsights] Failed to capture therapy snapshot: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to capture therapy snapshot: \(error)") } } @@ -130,12 +130,15 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // P3+P6: Use cached glucose for AGP and pre-compute AGP data - let cachedGlucose = coordinator.dataAggregator.lastFetchedGlucoseSamples + // P3+P6: Use cached data for chart and supplemental context let cachedCarbs = coordinator.dataAggregator.lastFetchedCarbEntries if LoopInsights_FeatureFlags.agpChartEnabled { - self.agpGlucoseSamples = cachedGlucose - self.agpComputedData = LoopInsights_AGPChartView.computeAGP(from: cachedGlucose) + let glucoseForChart = coordinator.dataAggregator.lastGlucoseForAGP + if isAGPMode { + self.agpComputedData = LoopInsights_AGPChartView.computeStandardAGP(from: glucoseForChart) + } else { + self.agpComputedData = LoopInsights_AGPChartView.computeProfile(from: glucoseForChart) + } } // Capture current settings @@ -145,7 +148,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // P3: Pass cached glucose + carbs to avoid re-fetching in supplemental context let supplementalContext = await coordinator.buildSupplementalContext( stats: stats, - glucoseSamples: cachedGlucose, + glucoseSamples: coordinator.dataAggregator.lastFetchedGlucoseSamples, carbEntries: cachedCarbs ) @@ -215,12 +218,15 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // P3+P6: Use cached glucose for AGP and pre-compute AGP data - let cachedGlucose = coordinator.dataAggregator.lastFetchedGlucoseSamples + // P3+P6: Use cached data for chart and supplemental context let cachedCarbs = coordinator.dataAggregator.lastFetchedCarbEntries if LoopInsights_FeatureFlags.agpChartEnabled { - self.agpGlucoseSamples = cachedGlucose - self.agpComputedData = LoopInsights_AGPChartView.computeAGP(from: cachedGlucose) + let glucoseForChart = coordinator.dataAggregator.lastGlucoseForAGP + if isAGPMode { + self.agpComputedData = LoopInsights_AGPChartView.computeStandardAGP(from: glucoseForChart) + } else { + self.agpComputedData = LoopInsights_AGPChartView.computeProfile(from: glucoseForChart) + } } let snapshot = try coordinator.captureCurrentSnapshot() @@ -229,7 +235,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // P3: Pass cached glucose + carbs to avoid re-fetching in supplemental context let supplementalContext = await coordinator.buildSupplementalContext( stats: stats, - glucoseSamples: cachedGlucose, + glucoseSamples: coordinator.dataAggregator.lastFetchedGlucoseSamples, carbEntries: cachedCarbs ) @@ -395,7 +401,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func revertSuggestion(_ record: LoopInsightsSuggestionRecord) -> Bool { guard record.status.isRevertable else { return false } guard let snapshotBefore = record.settingsSnapshotBefore else { - print("[LoopInsights] Cannot revert: no pre-apply snapshot stored") + LoopInsights_FeatureFlags.log.error("Cannot revert: no pre-apply snapshot stored") return false } @@ -422,6 +428,8 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func updateAnalysisPeriod(_ period: LoopInsightsAnalysisPeriod) { analysisPeriod = period LoopInsights_FeatureFlags.analysisPeriod = period + // Clear stale chart data so labels don't show a mismatched date range + agpComputedData = [] } /// The most recent AI debug log (system prompt, user prompt, raw response). diff --git a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift index 6061661994..657e914f55 100644 --- a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift @@ -7,16 +7,24 @@ // import SwiftUI -import LoopKit -import HealthKit -/// Ambulatory Glucose Profile chart: renders percentile bands (p10/p25/p50/p75/p90) -/// as layered SwiftUI Paths over a 24-hour x-axis. iOS 15 compatible (no Charts framework). +/// Dual-mode glucose chart: +/// - **AGP mode** (14-day lookback): Standard Ambulatory Glucose Profile — all days overlaid +/// into a single 24-hour view with percentile bands. Matches the IDC/AGP spec. +/// - **Profile mode** (all other periods): Glucose Profile — percentile bands spanning the +/// full analysis period with date-based X-axis. +/// iOS 15 compatible (no Charts framework). struct LoopInsights_AGPChartView: View { - /// P6: Accept pre-computed AGP data instead of recomputing on every view body evaluation + /// P6: Accept pre-computed data instead of recomputing on every view body evaluation let agpData: [LoopInsightsAGPDataPoint] + /// When true, renders as a standard 24-hour AGP overlay with hour labels. + let isAGPMode: Bool + + @State private var showingAGPInfo = false + @State private var showingProfileInfo = false + private let targetLow: Double = 70 private let targetHigh: Double = 180 private let chartMinY: Double = 40 @@ -26,13 +34,40 @@ struct LoopInsights_AGPChartView: View { private let topMargin: Double = 8 private let bottomMargin: Double = 16 + /// Date range derived from the data + private var startDate: Date { agpData.first?.date ?? Date() } + private var endDate: Date { agpData.last?.date ?? Date() } + private var totalDuration: TimeInterval { max(1, endDate.timeIntervalSince(startDate)) } + var body: some View { VStack(alignment: .leading, spacing: 2) { - Text(NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP chart title")) - .font(.subheadline.weight(.semibold)) + // Title — AGP mode gets the proper name + info button + if isAGPMode { + HStack(spacing: 4) { + Text(NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP chart title")) + .font(.subheadline.weight(.semibold)) + Button(action: { showingAGPInfo = true }) { + Image(systemName: "info.circle") + .font(.caption) + .foregroundColor(.accentColor) + } + .buttonStyle(.plain) + } + } else { + HStack(spacing: 4) { + Text(NSLocalizedString("Glucose Profile", comment: "LoopInsights glucose profile chart title")) + .font(.subheadline.weight(.semibold)) + Button(action: { showingProfileInfo = true }) { + Image(systemName: "info.circle") + .font(.caption) + .foregroundColor(.accentColor) + } + .buttonStyle(.plain) + } + } if agpData.isEmpty { - Text(NSLocalizedString("Not enough data for AGP chart", comment: "LoopInsights AGP no data")) + Text(NSLocalizedString("Not enough data for glucose profile", comment: "LoopInsights AGP no data")) .font(.caption) .foregroundColor(.secondary) .frame(maxWidth: .infinity, alignment: .center) @@ -71,10 +106,28 @@ struct LoopInsights_AGPChartView: View { } .frame(height: 180) + Spacer().frame(height: 6) + // Legend legendView } } + .alert( + NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP info alert title"), + isPresented: $showingAGPInfo + ) { + Button(NSLocalizedString("OK", comment: "OK button")) {} + } message: { + Text(NSLocalizedString("AGP is a standardized reporting format developed by the International Diabetes Center. It overlays 14 days of CGM data into a single 24-hour view, displaying the median (P50), interquartile range (P25\u{2013}P75), and 10th/90th percentile bands.\n\nThis format lets you and your clinician spot recurring daily patterns \u{2014} like dawn phenomenon or post-meal spikes \u{2014} at a glance, using the same visual language across institutions.", comment: "LoopInsights AGP info alert message")) + } + .alert( + NSLocalizedString("Glucose Profile", comment: "LoopInsights glucose profile info alert title"), + isPresented: $showingProfileInfo + ) { + Button(NSLocalizedString("OK", comment: "OK button")) {} + } message: { + Text(NSLocalizedString("Glucose Profile displays your CGM data across the selected time period using percentile bands.\n\nThe median line (P50) shows your typical glucose at each point in time. The shaded bands show the interquartile range (P25\u{2013}P75) and the 10th/90th percentile spread, giving you a sense of variability.\n\nFor a standardized Ambulatory Glucose Profile (AGP) \u{2014} which overlays all days into a single 24-hour view \u{2014} select the 14-day lookback period.", comment: "LoopInsights glucose profile info alert message")) + } } // MARK: - Legend @@ -101,7 +154,6 @@ struct LoopInsights_AGPChartView: View { // MARK: - Chart Components - /// Target range as a proper Path that fills the correct Y band private func targetRangePath(width: Double, height: Double) -> Path { let plotLeft = leftMargin let plotRight = width - rightMargin @@ -118,7 +170,6 @@ struct LoopInsights_AGPChartView: View { return path } - /// Dashed grid lines at 70 and 180 private func targetGridLines(width: Double, height: Double) -> some View { let plotLeft = leftMargin let plotRight = width - rightMargin @@ -150,20 +201,18 @@ struct LoopInsights_AGPChartView: View { var path = Path() guard !data.isEmpty else { return path } - // Upper line (left to right) - let firstX = xPosition(for: data[0].minuteOfDay, width: width) + let firstX = xPosition(for: data[0].date, width: width) let firstUpperY = yPosition(for: data[0][keyPath: upperKey], height: height) path.move(to: CGPoint(x: firstX, y: firstUpperY)) for point in data.dropFirst() { - let x = xPosition(for: point.minuteOfDay, width: width) + let x = xPosition(for: point.date, width: width) let y = yPosition(for: point[keyPath: upperKey], height: height) path.addLine(to: CGPoint(x: x, y: y)) } - // Lower line (right to left) for point in data.reversed() { - let x = xPosition(for: point.minuteOfDay, width: width) + let x = xPosition(for: point.date, width: width) let y = yPosition(for: point[keyPath: lowerKey], height: height) path.addLine(to: CGPoint(x: x, y: y)) } @@ -177,13 +226,13 @@ struct LoopInsights_AGPChartView: View { guard let first = data.first else { return path } path.move(to: CGPoint( - x: xPosition(for: first.minuteOfDay, width: width), + x: xPosition(for: first.date, width: width), y: yPosition(for: first.p50, height: height) )) for point in data.dropFirst() { path.addLine(to: CGPoint( - x: xPosition(for: point.minuteOfDay, width: width), + x: xPosition(for: point.date, width: width), y: yPosition(for: point.p50, height: height) )) } @@ -192,14 +241,19 @@ struct LoopInsights_AGPChartView: View { } private func xAxisLabels(width: Double, height: Double) -> some View { - let hours = [0, 3, 6, 9, 12, 15, 18, 21] + let labels: [(date: Date, text: String)] + if isAGPMode { + labels = Self.generateAGPHourLabels(start: startDate, end: endDate) + } else { + labels = Self.generateDateLabels(start: startDate, end: endDate) + } return ZStack { - ForEach(hours, id: \.self) { hour in - let x = xPosition(for: hour * 60, width: width) - Text(formatHour(hour)) + ForEach(Array(labels.enumerated()), id: \.offset) { _, label in + let x = xPosition(for: label.date, width: width) + Text(label.text) .font(.system(size: 8)) .foregroundColor(.secondary) - .position(x: x, y: height - 4) + .position(x: x, y: height - 20) } } } @@ -230,19 +284,68 @@ struct LoopInsights_AGPChartView: View { // MARK: - Coordinate Mapping - private func xPosition(for minuteOfDay: Int, width: Double) -> Double { + private func xPosition(for date: Date, width: Double) -> Double { let plotWidth = width - leftMargin - rightMargin - return leftMargin + (Double(minuteOfDay) / 1440.0) * plotWidth + let offset = date.timeIntervalSince(startDate) + let fraction = offset / totalDuration + return leftMargin + fraction * plotWidth } private func yPosition(for glucose: Double, height: Double) -> Double { let plotHeight = height - topMargin - bottomMargin let clamped = max(chartMinY, min(chartMaxY, glucose)) let fraction = (clamped - chartMinY) / (chartMaxY - chartMinY) - return topMargin + (1 - fraction) * plotHeight // Inverted Y axis + return topMargin + (1 - fraction) * plotHeight + } + + // MARK: - X-Axis Label Generation + + /// Hour labels for AGP mode (24-hour overlay): 12a, 3a, 6a, … 9p + private static func generateAGPHourLabels(start: Date, end: Date) -> [(date: Date, text: String)] { + let duration = end.timeIntervalSince(start) + guard duration > 0 else { return [] } + + let hours = [0, 3, 6, 9, 12, 15, 18, 21] + return hours.map { hour in + let fraction = Double(hour) / 24.0 + let date = start.addingTimeInterval(fraction * duration) + return (date: date, text: formatHour(hour)) + } } - private func formatHour(_ hour: Int) -> String { + /// Date labels for profile mode (multi-day time series) + private static func generateDateLabels(start: Date, end: Date) -> [(date: Date, text: String)] { + let duration = end.timeIntervalSince(start) + guard duration > 0 else { return [] } + + let days = duration / 86400 + let labelCount: Int + let formatter = DateFormatter() + + if days <= 4 { + labelCount = 7 + formatter.dateFormat = "E ha" + } else if days <= 10 { + labelCount = 7 + formatter.dateFormat = "E M/d" + } else if days <= 45 { + labelCount = 6 + formatter.dateFormat = "M/d" + } else { + labelCount = 6 + formatter.dateFormat = "M/d" + } + + var labels: [(date: Date, text: String)] = [] + for i in 0...labelCount { + let fraction = Double(i) / Double(labelCount) + let date = start.addingTimeInterval(fraction * duration) + labels.append((date: date, text: formatter.string(from: date))) + } + return labels + } + + private static func formatHour(_ hour: Int) -> String { let h = hour % 24 if h == 0 { return "12a" } if h < 12 { return "\(h)a" } @@ -250,42 +353,85 @@ struct LoopInsights_AGPChartView: View { return "\(h - 12)p" } - // MARK: - AGP Computation + // MARK: - Computation - /// Compute AGP data: 48 time points (every 30 min), each with percentiles - static func computeAGP(from samples: [StoredGlucoseSample]) -> [LoopInsightsAGPDataPoint] { + /// Compute standard AGP: overlay all days into a single 24-hour profile with 48 × 30-minute buckets. + /// Used when the lookback period is 14 days. + static func computeStandardAGP(from samples: [(date: Date, mgdl: Double)]) -> [LoopInsightsAGPDataPoint] { guard !samples.isEmpty else { return [] } let calendar = Calendar.current + // Reference day: midnight of the earliest sample's date + let refDay = calendar.startOfDay(for: samples.min(by: { $0.date < $1.date })!.date) - // Bucket samples by 30-minute windows - var buckets: [Int: [Double]] = [:] // minuteOfDay → glucose values + var buckets: [Int: [Double]] = [:] for sample in samples { - let hour = calendar.component(.hour, from: sample.startDate) - let minute = calendar.component(.minute, from: sample.startDate) + let hour = calendar.component(.hour, from: sample.date) + let minute = calendar.component(.minute, from: sample.date) let minuteOfDay = hour * 60 + minute - let bucket = (minuteOfDay / 30) * 30 // Round to nearest 30-min - buckets[bucket, default: []].append( - sample.quantity.doubleValue(for: .milligramsPerDeciliter) - ) + let bucket = (minuteOfDay / 30) * 30 + buckets[bucket, default: []].append(sample.mgdl) } var dataPoints: [LoopInsightsAGPDataPoint] = [] for minuteOfDay in stride(from: 0, to: 1440, by: 30) { guard let values = buckets[minuteOfDay], values.count >= 3 else { continue } - let sorted = values.sorted() - let count = sorted.count + let s = values.sorted() + let count = s.count + let date = refDay.addingTimeInterval(Double(minuteOfDay) * 60 + 15 * 60) // bucket midpoint + + dataPoints.append(LoopInsightsAGPDataPoint( + date: date, + p10: s[max(0, Int(Double(count) * 0.1))], + p25: s[max(0, Int(Double(count) * 0.25))], + p50: s[count / 2], + p75: s[min(count - 1, Int(Double(count) * 0.75))], + p90: s[min(count - 1, Int(Double(count) * 0.9))] + )) + } + + return dataPoints.sorted { $0.date < $1.date } + } + + /// Compute glucose profile: ~48 time-window buckets spanning the full sample period. + /// Used for all lookback periods except 14 days. + static func computeProfile(from samples: [(date: Date, mgdl: Double)]) -> [LoopInsightsAGPDataPoint] { + guard samples.count >= 3 else { return [] } + + let sorted = samples.sorted { $0.date < $1.date } + guard let first = sorted.first, let last = sorted.last else { return [] } + + let totalDuration = last.date.timeIntervalSince(first.date) + guard totalDuration > 0 else { return [] } + + let bucketCount = 48 + let bucketDuration = totalDuration / Double(bucketCount) + + var buckets: [[Double]] = Array(repeating: [], count: bucketCount) + for sample in sorted { + let offset = sample.date.timeIntervalSince(first.date) + let index = min(Int(offset / bucketDuration), bucketCount - 1) + buckets[index].append(sample.mgdl) + } + + var dataPoints: [LoopInsightsAGPDataPoint] = [] + for i in 0..= 3 else { continue } + let s = values.sorted() + let count = s.count + let midDate = first.date.addingTimeInterval((Double(i) + 0.5) * bucketDuration) dataPoints.append(LoopInsightsAGPDataPoint( - minuteOfDay: minuteOfDay, - p10: sorted[max(0, Int(Double(count) * 0.1))], - p25: sorted[max(0, Int(Double(count) * 0.25))], - p50: sorted[count / 2], - p75: sorted[min(count - 1, Int(Double(count) * 0.75))], - p90: sorted[min(count - 1, Int(Double(count) * 0.9))] + date: midDate, + p10: s[max(0, Int(Double(count) * 0.1))], + p25: s[max(0, Int(Double(count) * 0.25))], + p50: s[count / 2], + p75: s[min(count - 1, Int(Double(count) * 0.75))], + p90: s[min(count - 1, Int(Double(count) * 0.9))] )) } - return dataPoints.sorted { $0.minuteOfDay < $1.minuteOfDay } + return dataPoints } } diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index 1228c72f24..de175ca0df 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -394,7 +394,7 @@ struct LoopInsights_DashboardView: View { // AGP Chart — shown with analysis summary when enabled if LoopInsights_FeatureFlags.agpChartEnabled && !viewModel.agpComputedData.isEmpty { - LoopInsights_AGPChartView(agpData: viewModel.agpComputedData) + LoopInsights_AGPChartView(agpData: viewModel.agpComputedData, isAGPMode: viewModel.isAGPMode) } if !LoopInsights_SecureStorage.hasAPIKey { diff --git a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift index 5e676958b3..a1e861a11c 100644 --- a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift @@ -477,9 +477,15 @@ private final class GoalsViewModel: ObservableObject { private func updateGoalCurrentValues(coordinator: LoopInsights_Coordinator) { Task { @MainActor in - guard let stats = try? await coordinator.dataAggregator.aggregateData( - period: LoopInsights_FeatureFlags.analysisPeriod - ) else { return } + let stats: LoopInsightsAggregatedStats + do { + stats = try await coordinator.dataAggregator.aggregateData( + period: LoopInsights_FeatureFlags.analysisPeriod + ) + } catch { + LoopInsights_FeatureFlags.log.error("Goals: failed to aggregate data for goal updates: \(error)") + return + } for goal in goals { let current: Double @@ -537,7 +543,9 @@ private final class GoalsViewModel: ObservableObject { Task { @MainActor in do { let stats = try await coordinator.dataAggregator.aggregateData(period: .thirtyDays) - let snapshot = try? coordinator.captureCurrentSnapshot() + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Goals: failed to capture snapshot for patterns: \(error)") } let context = LoopInsights_ChatViewModel.buildTherapyContext( snapshot: snapshot, stats: stats @@ -588,9 +596,9 @@ private final class GoalsViewModel: ObservableObject { isGeneratingReport = true Task { @MainActor in - let stats = try? await coordinator.dataAggregator.aggregateData( - period: LoopInsights_FeatureFlags.analysisPeriod - ) + var stats: LoopInsightsAggregatedStats? + do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } + catch { LoopInsights_FeatureFlags.log.error("Goals: failed to aggregate data for report: \(error)") } let html = LoopInsights_ReportGenerator.generateHTML( stats: stats, diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 09438add1c..436f00e9d2 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -770,7 +770,7 @@ struct LoopInsights_SettingsView: View { do { try await healthKitManager.requestAuthorization() } catch { - print("[LoopInsights] HealthKit authorization error: \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit authorization error: \(error)") } await MainActor.run { isRequestingBiometricAuth = false @@ -1240,7 +1240,11 @@ struct LoopInsights_SettingsView: View { if key.isEmpty { LoopInsights_SecureStorage.deleteAPIKey() } else { - try? LoopInsights_SecureStorage.saveAPIKey(key) + do { + try LoopInsights_SecureStorage.saveAPIKey(key) + } catch { + LoopInsights_FeatureFlags.log.error("Failed to save API key: \(error)") + } } saveConfiguration() } @@ -1252,7 +1256,11 @@ struct LoopInsights_SettingsView: View { testResult = nil // Save key and config first - try? LoopInsights_SecureStorage.saveAPIKey(apiKeyText) + do { + try LoopInsights_SecureStorage.saveAPIKey(apiKeyText) + } catch { + LoopInsights_FeatureFlags.log.error("Failed to save API key for test: \(error)") + } saveConfiguration() Task { diff --git a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift index 3786e5a353..37614eccb3 100644 --- a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift @@ -599,8 +599,11 @@ private final class TrendsViewModel: ObservableObject { cachedGeneratedAt[currentTab] = Date() // Build a summary prompt + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Trends: failed to capture snapshot: \(error)") } let therapyContext = LoopInsights_ChatViewModel.buildTherapyContext( - snapshot: try? coordinator.captureCurrentSnapshot(), + snapshot: snapshot, stats: stats ) From 640b3ec38d5b7db6c025a8c2399561d72b62770d Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 13 Feb 2026 13:45:43 -0800 Subject: [PATCH 09/36] Phase 7: Dual-mode glucose chart, HealthKit data pipeline, and quality fixes Glucose chart now operates in two modes: standard Ambulatory Glucose Profile (24-hour overlay with percentile bands) for 14-day lookback, and Glucose Profile (multi-day time series) for all other periods. Both modes include an info button explaining the visualization. HealthKit glucose data supplements Loop store for longer analysis periods. Chart data clears on period change to prevent stale labels. Additional fixes across 22 files: improved HealthKit data pipeline reliability, enhanced test data provider, refined food response analysis, and minor bug fixes in background monitor, coordinator, caffeine tracker, and goals/trends views. --- Loop/Localizable.xcstrings | 25 +- .../LoopInsights_BackgroundMonitor.swift | 23 +- .../LoopInsights_Coordinator.swift | 20 +- .../LoopInsights/LoopInsights_Models.swift | 19 ++ .../LoopInsights_Phase5Models.swift | 4 +- .../LoopInsights_FeatureFlags.swift | 4 + .../LoopInsights_AdvancedAnalyzers.swift | 18 +- .../LoopInsights_CaffeineTracker.swift | 2 +- .../LoopInsights_DataAggregator.swift | 43 ++-- .../LoopInsights_FoodResponseAnalyzer.swift | 24 +- .../LoopInsights/LoopInsights_GoalStore.swift | 12 +- .../LoopInsights_HealthKitManager.swift | 23 +- .../LoopInsights_ReportGenerator.swift | 2 +- .../LoopInsights_SuggestionStore.swift | 4 +- .../LoopInsights_TestDataProvider.swift | 20 +- .../LoopInsights_ChatViewModel.swift | 11 +- .../LoopInsights_DashboardViewModel.swift | 38 +-- .../LoopInsights_AGPChartView.swift | 238 ++++++++++++++---- .../LoopInsights_DashboardView.swift | 2 +- .../LoopInsights/LoopInsights_GoalsView.swift | 22 +- .../LoopInsights_SettingsView.swift | 14 +- .../LoopInsights_TrendsInsightsView.swift | 5 +- 22 files changed, 374 insertions(+), 199 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 3b95706be5..dbae7d6dc8 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -629,18 +629,6 @@ } } }, - "%@ [%lld chars]" : { - "comment" : "A view that displays a meal with its food type, date, and glucose response. The \"Pre-Meal Advice\" tab in the Loop Insights app uses this view to show individual meal cards.", - "isCommentAutoGenerated" : true, - "localizations" : { - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "%1$@ [%2$lld chars]" - } - } - } - }, "%@ %@" : { "comment" : "The format for an active custom preset. (1: preset symbol)(2: preset name)", "localizations" : { @@ -5969,6 +5957,9 @@ "AGP Chart" : { "comment" : "LoopInsights AGP toggle" }, + "AGP is a standardized reporting format developed by the International Diabetes Center. It overlays 14 days of CGM data into a single 24-hour view, displaying the median (P50), interquartile range (P25–P75), and 10th/90th percentile bands.\n\nThis format lets you and your clinician spot recurring daily patterns — like dawn phenomenon or post-meal spikes — at a glance, using the same visual language across institutions." : { + "comment" : "LoopInsights AGP info alert message" + }, "AI Advice" : { "comment" : "LoopInsights AI advice header" }, @@ -6607,7 +6598,7 @@ "comment" : "LoopInsights quick ask: meal bolus" }, "Ambulatory Glucose Profile" : { - "comment" : "LoopInsights AGP chart title" + "comment" : "LoopInsights AGP chart title\nLoopInsights AGP info alert title" }, "Amount (mg)" : { "comment" : "LoopInsights caffeine amount\nLoopInsights caffeine amount placeholder" @@ -21002,6 +20993,12 @@ } } }, + "Glucose Profile" : { + "comment" : "LoopInsights glucose profile chart title\nLoopInsights glucose profile info alert title" + }, + "Glucose Profile displays your CGM data across the selected time period using percentile bands.\n\nThe median line (P50) shows your typical glucose at each point in time. The shaded bands show the interquartile range (P25–P75) and the 10th/90th percentile spread, giving you a sense of variability.\n\nFor a standardized Ambulatory Glucose Profile (AGP) — which overlays all days into a single 24-hour view — select the 14-day lookback period." : { + "comment" : "LoopInsights glucose profile info alert message" + }, "Glucose Target Range Schedule" : { "comment" : "Details for configuration error when glucose target range schedule is missing", "localizations" : { @@ -28685,7 +28682,7 @@ "Not enough\ndata available" : { "comment" : "LoopInsights GMI insufficient data" }, - "Not enough data for AGP chart" : { + "Not enough data for glucose profile" : { "comment" : "LoopInsights AGP no data" }, "Notification Delivery" : { diff --git a/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift b/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift index b4e58e57a0..9b97b39938 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_BackgroundMonitor.swift @@ -9,6 +9,7 @@ import Foundation import UserNotifications import Combine +import os.log /// Monitors Loop's completion cycle and periodically runs AI analysis /// to proactively detect therapy setting adjustment opportunities. @@ -54,7 +55,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { func start() { guard loopCompletedObserver == nil else { return } guard LoopInsights_FeatureFlags.backgroundMonitorEnabled else { - print("[LoopInsights Monitor] Background monitoring is disabled") + LoopInsights_FeatureFlags.log.info("Background monitoring is disabled") return } @@ -66,7 +67,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { self?.handleLoopCompleted() } - print("[LoopInsights Monitor] Started — frequency: \(LoopInsights_FeatureFlags.monitorFrequency.displayName)") + LoopInsights_FeatureFlags.log.info("Monitor started — frequency: \(LoopInsights_FeatureFlags.monitorFrequency.displayName)") } /// Stop observing and cancel any pending work. @@ -75,7 +76,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { NotificationCenter.default.removeObserver(observer) loopCompletedObserver = nil } - print("[LoopInsights Monitor] Stopped") + LoopInsights_FeatureFlags.log.info("Monitor stopped") } /// Restart the monitor (e.g. after settings change). @@ -136,7 +137,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { // MARK: - Background Analysis private func runBackgroundAnalysis() async { - print("[LoopInsights Monitor] Running background analysis...") + LoopInsights_FeatureFlags.log.debug("Running background analysis...") do { let period = LoopInsights_FeatureFlags.analysisPeriod @@ -163,7 +164,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: Self.lastAnalysisKey) guard !newSuggestions.isEmpty else { - print("[LoopInsights Monitor] No new suggestions found") + LoopInsights_FeatureFlags.log.debug("No new suggestions found") return } @@ -177,7 +178,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { } guard !genuinelyNew.isEmpty else { - print("[LoopInsights Monitor] Suggestions match existing pending — no notification needed") + LoopInsights_FeatureFlags.log.debug("Suggestions match existing pending — no notification needed") return } @@ -188,7 +189,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { await deliverNotification(for: genuinelyNew) } catch { - print("[LoopInsights Monitor] Analysis failed: \(error.localizedDescription)") + LoopInsights_FeatureFlags.log.error("Background analysis failed: \(error.localizedDescription)") } } @@ -199,7 +200,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { // Check quiet hours — still store suggestions but suppress notifications if isInQuietHours() { - print("[LoopInsights Monitor] Quiet hours active — suppressing notification") + LoopInsights_FeatureFlags.log.info("Quiet hours active — suppressing notification") return } @@ -212,7 +213,7 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { await deliverPushNotification(suggestions: suggestions) case .silent: // No notification — suggestions are available in the store - print("[LoopInsights Monitor] Silent mode — \(suggestions.count) suggestion(s) stored") + LoopInsights_FeatureFlags.log.debug("Silent mode — \(suggestions.count) suggestion(s) stored") } } @@ -251,9 +252,9 @@ final class LoopInsights_BackgroundMonitor: ObservableObject { do { try await UNUserNotificationCenter.current().add(request) - print("[LoopInsights Monitor] Push notification sent for \(suggestions.count) suggestion(s)") + LoopInsights_FeatureFlags.log.info("Push notification sent for \(suggestions.count) suggestion(s)") } catch { - print("[LoopInsights Monitor] Failed to send notification: \(error.localizedDescription)") + LoopInsights_FeatureFlags.log.error("Failed to send notification: \(error.localizedDescription)") } } diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index a578b95a71..6321835b5e 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -95,11 +95,11 @@ final class LoopInsights_Coordinator: ObservableObject { let provider = LoopInsights_TestDataProvider() guard provider.hasTestData else { - print("[LoopInsights] Test data mode enabled but no fixtures found") + LoopInsights_FeatureFlags.log.info("Test data mode enabled but no fixtures found") return nil } - print("[LoopInsights] Using test data: \(provider.dataSummary)") + LoopInsights_FeatureFlags.log.info("Using test data: \(provider.dataSummary)") return LoopInsights_Coordinator(testDataProvider: provider) } @@ -108,7 +108,7 @@ final class LoopInsights_Coordinator: ObservableObject { /// Start background monitoring if enabled and using real stores (not test data). func startBackgroundMonitoring() { guard dataProviderBridge != nil else { - print("[LoopInsights] Skipping background monitor — test data mode") + LoopInsights_FeatureFlags.log.debug("Skipping background monitor — test data mode") return } backgroundMonitor.start() @@ -138,7 +138,8 @@ final class LoopInsights_Coordinator: ObservableObject { // P3: Use pre-fetched glucose, fall back to bridge only if not provided var resolvedGlucose: [StoredGlucoseSample]? = glucoseSamples if resolvedGlucose == nil, let bridge = dataProviderBridge { - resolvedGlucose = try? await bridge.getGlucoseSamples(start: start, end: end) + do { resolvedGlucose = try await bridge.getGlucoseSamples(start: start, end: end) } + catch { LoopInsights_FeatureFlags.log.error("Supplemental context: glucose fetch failed: \(error)") } } // Circadian + Dawn Phenomenon + Negative Basal + Stress @@ -171,7 +172,8 @@ final class LoopInsights_Coordinator: ObservableObject { // P3: Use pre-fetched carbs, fall back to bridge only if not provided var resolvedCarbs: [StoredCarbEntry]? = carbEntries if resolvedCarbs == nil, let bridge = dataProviderBridge { - resolvedCarbs = try? await bridge.getCarbEntries(start: start, end: end) + do { resolvedCarbs = try await bridge.getCarbEntries(start: start, end: end) } + catch { LoopInsights_FeatureFlags.log.error("Supplemental context: carbs fetch failed: \(error)") } } if let carbs = resolvedCarbs, let glucSamples = resolvedGlucose { let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( @@ -224,7 +226,7 @@ final class LoopInsights_Coordinator: ObservableObject { @discardableResult func applyTherapyChanges(suggestion: LoopInsightsSuggestion) -> Bool { guard let writer = settingsWriter else { - print("[LoopInsights] Cannot apply: no settings writer available (test data mode?)") + LoopInsights_FeatureFlags.log.error("Cannot apply: no settings writer available (test data mode?)") return false } @@ -256,7 +258,7 @@ final class LoopInsights_Coordinator: ObservableObject { } } - print("[LoopInsights] Applied \(suggestion.settingType.displayName) changes: \(blocks.count) time block(s)") + LoopInsights_FeatureFlags.log.info("Applied \(suggestion.settingType.displayName) changes: \(blocks.count) time block(s)") return true } @@ -266,7 +268,7 @@ final class LoopInsights_Coordinator: ObservableObject { @discardableResult func revertToSnapshot(_ snapshot: LoopInsightsTherapySnapshot) -> Bool { guard let writer = settingsWriter else { - print("[LoopInsights] Cannot revert: no settings writer available") + LoopInsights_FeatureFlags.log.error("Cannot revert: no settings writer available") return false } @@ -305,7 +307,7 @@ final class LoopInsights_Coordinator: ObservableObject { } } - print("[LoopInsights] Reverted settings to previous snapshot") + LoopInsights_FeatureFlags.log.info("Reverted settings to previous snapshot") return true } diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 05a7e4c8a6..2128c73579 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -869,3 +869,22 @@ final class LoopInsightsChatSession: ObservableObject { messages.removeAll() } } + +// MARK: - Binary Search Utility + +extension Array { + /// Binary search for the first index in a sorted array where `keyPath` is at or after `date`. + /// The array must be sorted by the key in ascending order. + func loopInsights_firstIndex(afterOrAt date: Date, by dateExtractor: (Element) -> Date) -> Int { + var lo = 0, hi = count + while lo < hi { + let mid = (lo + hi) / 2 + if dateExtractor(self[mid]) < date { + lo = mid + 1 + } else { + hi = mid + } + } + return lo + } +} diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index 5a4ed625c6..24c1538b1c 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -222,9 +222,9 @@ struct LoopInsightsNightscoutTreatment: Codable { // MARK: - AGP Data Point -/// A single time point in an Ambulatory Glucose Profile +/// A single time-window in a glucose profile chart spanning the analysis period. struct LoopInsightsAGPDataPoint { - let minuteOfDay: Int // 0-1439 + let date: Date // Bucket midpoint let p10: Double // 10th percentile mg/dL let p25: Double // 25th percentile mg/dL let p50: Double // 50th (median) mg/dL diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index b8948ea81d..783b84b29a 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -7,11 +7,15 @@ // import Foundation +import os.log /// Runtime feature flags for LoopInsights. All flags are UserDefaults-backed /// so they can be toggled without recompilation. struct LoopInsights_FeatureFlags { + /// Shared logger for all LoopInsights subsystems + static let log = Logger(subsystem: "com.loopkit.Loop.LoopInsights", category: "LoopInsights") + private enum Keys { static let isEnabled = "LoopInsights_isEnabled" static let developerModeEnabled = "LoopInsights_developerModeEnabled" diff --git a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift index 9fef965da3..956ae4c725 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift @@ -156,7 +156,7 @@ final class LoopInsights_AdvancedAnalyzers { // P5: Binary search for overcorrection check instead of linear scan let checkStart = dose.endDate let checkEnd = dose.endDate.addingTimeInterval(2 * 3600) - let startIdx = Self.binarySearchFirstIndex(in: sortedGlucose, afterOrAt: checkStart) + let startIdx = sortedGlucose.loopInsights_firstIndex(afterOrAt: checkStart) { $0.startDate } var reboundHigh = false for i in startIdx.. Int { - var lo = 0, hi = samples.count - while lo < hi { - let mid = (lo + hi) / 2 - if samples[mid].startDate < date { - lo = mid + 1 - } else { - hi = mid - } - } - return lo - } } diff --git a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift index 3e735b0361..a6be3b54de 100644 --- a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift +++ b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift @@ -50,7 +50,7 @@ final class LoopInsights_CaffeineTracker: ObservableObject { self.rebuildMergedEntries() } } catch { - print("[LoopInsights] Failed to fetch HealthKit caffeine: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to fetch HealthKit caffeine: \(error)") } } diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index 5de9526c5f..ec2e498d39 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -28,10 +28,13 @@ final class LoopInsights_DataAggregator { private weak var dataProvider: LoopInsightsDataProviderProtocol? private var healthKitManager: LoopInsights_HealthKitManager? - /// P3: Cached raw data from last aggregation, available for reuse (AGP chart, supplemental context) + /// P3: Cached raw data from last aggregation, available for reuse (supplemental context) private(set) var lastFetchedGlucoseSamples: [StoredGlucoseSample] = [] private(set) var lastFetchedCarbEntries: [StoredCarbEntry] = [] + /// Best available glucose data for AGP chart (Loop store or HealthKit, whichever has more samples for the period) + private(set) var lastGlucoseForAGP: [(date: Date, mgdl: Double)] = [] + init(dataProvider: LoopInsightsDataProviderProtocol, healthKitManager: LoopInsights_HealthKitManager? = nil) { self.dataProvider = dataProvider self.healthKitManager = healthKitManager @@ -59,9 +62,13 @@ final class LoopInsights_DataAggregator { let carbEntries = try await rawCarbs let resolvedBiometrics = try await biometrics - // P3: Store for external reuse (AGP chart, supplemental context) + // P3: Store for external reuse (supplemental context) self.lastFetchedGlucoseSamples = glucoseSamples self.lastFetchedCarbEntries = carbEntries + // Initial AGP cache from Loop store; computeGlucoseStats may upgrade to HealthKit if HK has more + self.lastGlucoseForAGP = glucoseSamples.map { + (date: $0.startDate, mgdl: $0.quantity.doubleValue(for: .milligramsPerDeciliter)) + } // Compute stats from pre-fetched data (each may still supplement with HK data) async let glucoseStatsTask = computeGlucoseStats(loopSamples: glucoseSamples, start: startDate, end: endDate) @@ -91,9 +98,9 @@ final class LoopInsights_DataAggregator { correctionBolusCount: resolvedInsulinStats.correctionBolusCount, negativeBasalStats: negBasal ) - print("[LoopInsights] Phase 5: Negative basal stats computed — \(negBasal.suspensionCount) suspensions") + LoopInsights_FeatureFlags.log.debug("Phase 5: Negative basal stats computed — \(negBasal.suspensionCount) suspensions") } catch { - print("[LoopInsights] Phase 5: Negative basal stats error — \(error)") + LoopInsights_FeatureFlags.log.error("Phase 5: Negative basal stats error — \(error)") } } @@ -114,7 +121,7 @@ final class LoopInsights_DataAggregator { weight: bio.weight, stressScore: stressScore ) - print("[LoopInsights] Phase 5: Stress score computed — \(String(format: "%.0f", stressScore!.overallScore))/100") + LoopInsights_FeatureFlags.log.debug("Phase 5: Stress score computed — \(String(format: "%.0f", stressScore!.overallScore))/100") } } @@ -160,25 +167,25 @@ final class LoopInsights_DataAggregator { private func fetchBiometricsIfEnabled(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.BiometricStats? { guard LoopInsights_FeatureFlags.biometricsEnabled else { - print("[LoopInsights] Biometrics: flag is disabled, skipping") + LoopInsights_FeatureFlags.log.debug("Biometrics: flag is disabled, skipping") return nil } // Use the injected manager, or create one on the fly. This handles the case // where the Coordinator was created before biometrics was enabled. let manager = healthKitManager ?? LoopInsights_HealthKitManager() - print("[LoopInsights] Biometrics: fetching from HealthKit (start: \(start), end: \(end))") + LoopInsights_FeatureFlags.log.debug("Biometrics: fetching from HealthKit (start: \(start), end: \(end))") do { let result = try await manager.fetchAllBiometrics(start: start, end: end) - print("[LoopInsights] Biometrics: HR=\(result.heartRate != nil), HRV=\(result.hrv != nil), steps=\(result.steps != nil), sleep=\(result.sleep != nil), energy=\(result.activeEnergy != nil), weight=\(result.weight != nil)") + LoopInsights_FeatureFlags.log.debug("Biometrics: HR=\(result.heartRate != nil), HRV=\(result.hrv != nil), steps=\(result.steps != nil), sleep=\(result.sleep != nil), energy=\(result.activeEnergy != nil), weight=\(result.weight != nil)") // If every sub-stat is nil, return nil so the AI prompt doesn't get an empty section if result.heartRate == nil && result.hrv == nil && result.steps == nil && result.sleep == nil && result.activeEnergy == nil && result.weight == nil { - print("[LoopInsights] Biometrics: all sub-stats nil — no HealthKit data available") + LoopInsights_FeatureFlags.log.debug("Biometrics: all sub-stats nil — no HealthKit data available") return nil } return result } catch { - print("[LoopInsights] Biometrics: fetch error — \(error)") + LoopInsights_FeatureFlags.log.error("Biometrics: fetch error — \(error)") return nil } } @@ -193,14 +200,16 @@ final class LoopInsights_DataAggregator { do { let hkGlucose = try await hkManager.fetchGlucoseSamples(start: start, end: end) if hkGlucose.count > loopSamples.count { - print("[LoopInsights] HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(loopSamples.count) — using HealthKit data") + LoopInsights_FeatureFlags.log.debug("HealthKit glucose: \(hkGlucose.count) samples vs Loop store \(loopSamples.count) — using HealthKit data") + let hkValues = hkGlucose.map { (date: $0.date, mgdl: $0.mgdl) } + self.lastGlucoseForAGP = hkValues return computeGlucoseStatsFromValues( - values: hkGlucose.map { (date: $0.date, mgdl: $0.mgdl) }, + values: hkValues, start: start, end: end ) } } catch { - print("[LoopInsights] HealthKit glucose fetch error (continuing with Loop store data): \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit glucose fetch error (continuing with Loop store data): \(error)") } } @@ -319,11 +328,11 @@ final class LoopInsights_DataAggregator { do { let hkInsulin = try await hkManager.fetchInsulinDelivery(start: start, end: end) if hkInsulin.count > loopDoses.count { - print("[LoopInsights] HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(loopDoses.count) — using HealthKit data") + LoopInsights_FeatureFlags.log.debug("HealthKit insulin: \(hkInsulin.count) entries vs Loop store \(loopDoses.count) — using HealthKit data") return computeInsulinStatsFromHK(hkInsulin, start: start, end: end) } } catch { - print("[LoopInsights] HealthKit insulin fetch error (continuing with Loop store data): \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit insulin fetch error (continuing with Loop store data): \(error)") } } @@ -429,11 +438,11 @@ final class LoopInsights_DataAggregator { do { let hkCarbs = try await hkManager.fetchCarbEntries(start: start, end: end) if hkCarbs.count > loopEntries.count { - print("[LoopInsights] HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(loopEntries.count) — using HealthKit data") + LoopInsights_FeatureFlags.log.debug("HealthKit carbs: \(hkCarbs.count) entries vs Loop store \(loopEntries.count) — using HealthKit data") return computeCarbStatsFromHK(hkCarbs, start: start, end: end) } } catch { - print("[LoopInsights] HealthKit carbs fetch error (continuing with Loop store data): \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit carbs fetch error (continuing with Loop store data): \(error)") } } diff --git a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift index 6af68286eb..7eb6778802 100644 --- a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift +++ b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift @@ -83,7 +83,7 @@ final class LoopInsights_FoodResponseAnalyzer { // P4: Binary search for pre-meal window (30 min before to meal time) let preMealStart = mealDate.addingTimeInterval(-1800) - let preStartIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: preMealStart) + let preStartIdx = sortedDates.loopInsights_firstIndex(afterOrAt: preMealStart) { $0 } var preMealValues: [Double] = [] for i in preStartIdx.. mealDate { break } @@ -94,7 +94,7 @@ final class LoopInsights_FoodResponseAnalyzer { // P4: Binary search for post-meal window (0-4h after meal) let postMealEnd = mealDate.addingTimeInterval(4 * 3600) - let postStartIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: mealDate) + let postStartIdx = sortedDates.loopInsights_firstIndex(afterOrAt: mealDate) { $0 } var postValues: [Double] = [] var postDates: [Date] = [] for i in postStartIdx.. mealDate { break } @@ -211,7 +211,7 @@ final class LoopInsights_FoodResponseAnalyzer { // P4: Binary search for post-meal glucose (0-4h) let postEnd = mealDate.addingTimeInterval(4 * 3600) - let postIdx = binarySearchFirstIndex(in: sortedDates, afterOrAt: mealDate) + let postIdx = sortedDates.loopInsights_firstIndex(afterOrAt: mealDate) { $0 } var postValues: [Double] = [] var postDates: [Date] = [] for i in postIdx.. Int { - var lo = 0, hi = dates.count - while lo < hi { - let mid = (lo + hi) / 2 - if dates[mid] < date { - lo = mid + 1 - } else { - hi = mid - } - } - return lo - } - // MARK: - Prompt Context /// Build prompt context string from food response patterns diff --git a/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift b/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift index 6c0328b119..c17a9672af 100644 --- a/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift +++ b/Loop/Services/LoopInsights/LoopInsights_GoalStore.swift @@ -324,7 +324,7 @@ final class LoopInsights_GoalStore: ObservableObject { do { goals = try decoder.decode([LoopInsightsGoal].self, from: data) } catch { - print("[LoopInsights] Failed to decode goals: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode goals: \(error)") goals = [] } } @@ -334,7 +334,7 @@ final class LoopInsights_GoalStore: ObservableObject { let data = try encoder.encode(goals) defaults.set(data, forKey: Self.goalsKey) } catch { - print("[LoopInsights] Failed to encode goals: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode goals: \(error)") } } @@ -346,7 +346,7 @@ final class LoopInsights_GoalStore: ObservableObject { do { reflections = try decoder.decode([LoopInsightsReflection].self, from: data) } catch { - print("[LoopInsights] Failed to decode reflections: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode reflections: \(error)") reflections = [] } } @@ -356,7 +356,7 @@ final class LoopInsights_GoalStore: ObservableObject { let data = try encoder.encode(reflections) defaults.set(data, forKey: Self.reflectionsKey) } catch { - print("[LoopInsights] Failed to encode reflections: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode reflections: \(error)") } } @@ -368,7 +368,7 @@ final class LoopInsights_GoalStore: ObservableObject { do { cachedPatterns = try decoder.decode([LoopInsightsCachedPattern].self, from: data) } catch { - print("[LoopInsights] Failed to decode cached patterns: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode cached patterns: \(error)") cachedPatterns = [] } } @@ -378,7 +378,7 @@ final class LoopInsights_GoalStore: ObservableObject { let data = try encoder.encode(cachedPatterns) defaults.set(data, forKey: Self.patternsKey) } catch { - print("[LoopInsights] Failed to encode cached patterns: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode cached patterns: \(error)") } } } diff --git a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift index d6ea96087f..f09cdc59e6 100644 --- a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift +++ b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift @@ -89,34 +89,33 @@ final class LoopInsights_HealthKitManager: ObservableObject { ) } + private func safeFetch(_ label: String, _ fetch: () async throws -> T?) async -> T? { + do { return try await fetch() } + catch { LoopInsights_FeatureFlags.log.error("HK \(label) error: \(error)"); return nil } + } + private func fetchHeartRateSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.HeartRateStats? { - do { return try await fetchHeartRateStats(start: start, end: end) } - catch { print("[LoopInsights] HK heart rate error: \(error)"); return nil } + await safeFetch("heart rate") { try await fetchHeartRateStats(start: start, end: end) } } private func fetchHRVSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.HRVStats? { - do { return try await fetchHRVStats(start: start, end: end) } - catch { print("[LoopInsights] HK HRV error: \(error)"); return nil } + await safeFetch("HRV") { try await fetchHRVStats(start: start, end: end) } } private func fetchStepSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.StepStats? { - do { return try await fetchStepStats(start: start, end: end) } - catch { print("[LoopInsights] HK steps error: \(error)"); return nil } + await safeFetch("steps") { try await fetchStepStats(start: start, end: end) } } private func fetchSleepSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.SleepStats? { - do { return try await fetchSleepStats(start: start, end: end) } - catch { print("[LoopInsights] HK sleep error: \(error)"); return nil } + await safeFetch("sleep") { try await fetchSleepStats(start: start, end: end) } } private func fetchEnergySafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.ActiveEnergyStats? { - do { return try await fetchActiveEnergyStats(start: start, end: end) } - catch { print("[LoopInsights] HK active energy error: \(error)"); return nil } + await safeFetch("active energy") { try await fetchActiveEnergyStats(start: start, end: end) } } private func fetchWeightSafe(start: Date, end: Date) async -> LoopInsightsAggregatedStats.WeightStats? { - do { return try await fetchWeightStats(start: start, end: end) } - catch { print("[LoopInsights] HK weight error: \(error)"); return nil } + await safeFetch("weight") { try await fetchWeightStats(start: start, end: end) } } // MARK: - Heart Rate diff --git a/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift b/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift index 88baf28be8..a683e3f34a 100644 --- a/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_ReportGenerator.swift @@ -216,7 +216,7 @@ final class LoopInsights_ReportGenerator { try pdfData.write(to: tempURL) return tempURL } catch { - print("[LoopInsights] Failed to write PDF: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to write PDF: \(error)") return nil } } diff --git a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift index 0ae0753d7c..171bb83407 100644 --- a/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift +++ b/Loop/Services/LoopInsights/LoopInsights_SuggestionStore.swift @@ -118,7 +118,7 @@ final class LoopInsights_SuggestionStore: ObservableObject { do { records = try decoder.decode([LoopInsightsSuggestionRecord].self, from: data) } catch { - print("[LoopInsights] Failed to decode suggestion history: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to decode suggestion history: \(error)") records = [] } } @@ -128,7 +128,7 @@ final class LoopInsights_SuggestionStore: ObservableObject { let data = try encoder.encode(records) defaults.set(data, forKey: Self.storageKey) } catch { - print("[LoopInsights] Failed to encode suggestion history: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to encode suggestion history: \(error)") } } } diff --git a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift index e3e8086e35..ba227693ad 100644 --- a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift +++ b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift @@ -131,9 +131,9 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { if let data = Self.loadFixtureData(for: FixtureFile.glucose) { do { glucoseSamples = try decoder.decode([StoredGlucoseSample].self, from: data) - print("[LoopInsights TestData] Loaded \(glucoseSamples.count) glucose samples") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded \(self.glucoseSamples.count) glucose samples") } catch { - print("[LoopInsights TestData] Failed to decode glucose: \(error)") + LoopInsights_FeatureFlags.log.error("TestData: Failed to decode glucose: \(error)") } } @@ -142,9 +142,9 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { let sanitizedData = Self.sanitizeDoseJSON(data) do { doseEntries = try decoder.decode([DoseEntry].self, from: sanitizedData) - print("[LoopInsights TestData] Loaded \(doseEntries.count) dose entries") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded \(self.doseEntries.count) dose entries") } catch { - print("[LoopInsights TestData] Failed to decode doses: \(error)") + LoopInsights_FeatureFlags.log.error("TestData: Failed to decode doses: \(error)") } } @@ -152,9 +152,9 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { if let data = Self.loadFixtureData(for: FixtureFile.carbs) { do { carbEntries = try decoder.decode([StoredCarbEntry].self, from: data) - print("[LoopInsights TestData] Loaded \(carbEntries.count) carb entries") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded \(self.carbEntries.count) carb entries") } catch { - print("[LoopInsights TestData] Failed to decode carbs: \(error)") + LoopInsights_FeatureFlags.log.error("TestData: Failed to decode carbs: \(error)") } } @@ -167,7 +167,7 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { /// Parse the Tidepool therapy settings JSON and construct a StoredSettings instance. private func loadTherapySettings(data: Data) { guard let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any] else { - print("[LoopInsights TestData] Failed to parse therapy settings JSON") + LoopInsights_FeatureFlags.log.error("TestData: Failed to parse therapy settings JSON") return } @@ -217,7 +217,7 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { insulinSensitivitySchedule: isfSchedule, carbRatioSchedule: crSchedule ) - print("[LoopInsights TestData] Loaded therapy settings (basal: \(basalSchedule?.items.count ?? 0), ISF: \(isfSchedule?.items.count ?? 0), CR: \(crSchedule?.items.count ?? 0))") + LoopInsights_FeatureFlags.log.debug("TestData: Loaded therapy settings (basal: \(basalSchedule?.items.count ?? 0), ISF: \(isfSchedule?.items.count ?? 0), CR: \(crSchedule?.items.count ?? 0))") } // MARK: - Dose JSON Sanitization @@ -264,10 +264,10 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { /// Load raw Data from a fixture file. private static func loadFixtureData(for filename: String) -> Data? { guard let url = resolveFixturePath(for: filename) else { - print("[LoopInsights TestData] Fixture not found: \(filename)") + LoopInsights_FeatureFlags.log.error("TestData: Fixture not found: \(filename)") return nil } - print("[LoopInsights TestData] Loading: \(url.lastPathComponent) from \(url.deletingLastPathComponent().lastPathComponent)/") + LoopInsights_FeatureFlags.log.debug("TestData: Loading \(url.lastPathComponent) from \(url.deletingLastPathComponent().lastPathComponent)/") return try? Data(contentsOf: url) } diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 0d32a77d62..f278a6d149 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -67,10 +67,13 @@ final class LoopInsights_ChatViewModel: ObservableObject { Task { @MainActor in do { - let snapshot = try? coordinator.captureCurrentSnapshot() - let stats = try? await coordinator.dataAggregator.aggregateData( - period: LoopInsights_FeatureFlags.analysisPeriod - ) + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Chat: failed to capture snapshot: \(error)") } + + var stats: LoopInsightsAggregatedStats? + do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } + catch { LoopInsights_FeatureFlags.log.error("Chat: failed to aggregate data: \(error)") } let context = Self.buildTherapyContext(snapshot: snapshot, stats: stats) let history = session.conversationHistory().dropLast().map { ($0.role, $0.content) } diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index 21f030eef5..176c816e42 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -66,12 +66,12 @@ final class LoopInsights_DashboardViewModel: ObservableObject { /// Whether current metrics indicate settings are already performing well @Published var settingsAlreadyOptimal: Bool = false - /// Glucose samples for AGP chart (populated during analysis) - @Published var agpGlucoseSamples: [StoredGlucoseSample] = [] - /// P6: Pre-computed AGP data points — computed once when samples change, not on every view render @Published var agpComputedData: [LoopInsightsAGPDataPoint] = [] + /// True when the analysis period is 14 days (standard AGP 24-hour overlay mode) + var isAGPMode: Bool { analysisPeriod == .fourteenDays } + // MARK: - Dependencies let coordinator: LoopInsights_Coordinator @@ -112,7 +112,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { do { currentSnapshot = try coordinator.captureCurrentSnapshot() } catch { - print("[LoopInsights] Failed to capture therapy snapshot: \(error)") + LoopInsights_FeatureFlags.log.error("Failed to capture therapy snapshot: \(error)") } } @@ -130,12 +130,15 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // P3+P6: Use cached glucose for AGP and pre-compute AGP data - let cachedGlucose = coordinator.dataAggregator.lastFetchedGlucoseSamples + // P3+P6: Use cached data for chart and supplemental context let cachedCarbs = coordinator.dataAggregator.lastFetchedCarbEntries if LoopInsights_FeatureFlags.agpChartEnabled { - self.agpGlucoseSamples = cachedGlucose - self.agpComputedData = LoopInsights_AGPChartView.computeAGP(from: cachedGlucose) + let glucoseForChart = coordinator.dataAggregator.lastGlucoseForAGP + if isAGPMode { + self.agpComputedData = LoopInsights_AGPChartView.computeStandardAGP(from: glucoseForChart) + } else { + self.agpComputedData = LoopInsights_AGPChartView.computeProfile(from: glucoseForChart) + } } // Capture current settings @@ -145,7 +148,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // P3: Pass cached glucose + carbs to avoid re-fetching in supplemental context let supplementalContext = await coordinator.buildSupplementalContext( stats: stats, - glucoseSamples: cachedGlucose, + glucoseSamples: coordinator.dataAggregator.lastFetchedGlucoseSamples, carbEntries: cachedCarbs ) @@ -215,12 +218,15 @@ final class LoopInsights_DashboardViewModel: ObservableObject { let stats = try await coordinator.dataAggregator.aggregateData(period: analysisPeriod) self.aggregatedStats = stats - // P3+P6: Use cached glucose for AGP and pre-compute AGP data - let cachedGlucose = coordinator.dataAggregator.lastFetchedGlucoseSamples + // P3+P6: Use cached data for chart and supplemental context let cachedCarbs = coordinator.dataAggregator.lastFetchedCarbEntries if LoopInsights_FeatureFlags.agpChartEnabled { - self.agpGlucoseSamples = cachedGlucose - self.agpComputedData = LoopInsights_AGPChartView.computeAGP(from: cachedGlucose) + let glucoseForChart = coordinator.dataAggregator.lastGlucoseForAGP + if isAGPMode { + self.agpComputedData = LoopInsights_AGPChartView.computeStandardAGP(from: glucoseForChart) + } else { + self.agpComputedData = LoopInsights_AGPChartView.computeProfile(from: glucoseForChart) + } } let snapshot = try coordinator.captureCurrentSnapshot() @@ -229,7 +235,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // P3: Pass cached glucose + carbs to avoid re-fetching in supplemental context let supplementalContext = await coordinator.buildSupplementalContext( stats: stats, - glucoseSamples: cachedGlucose, + glucoseSamples: coordinator.dataAggregator.lastFetchedGlucoseSamples, carbEntries: cachedCarbs ) @@ -395,7 +401,7 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func revertSuggestion(_ record: LoopInsightsSuggestionRecord) -> Bool { guard record.status.isRevertable else { return false } guard let snapshotBefore = record.settingsSnapshotBefore else { - print("[LoopInsights] Cannot revert: no pre-apply snapshot stored") + LoopInsights_FeatureFlags.log.error("Cannot revert: no pre-apply snapshot stored") return false } @@ -422,6 +428,8 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func updateAnalysisPeriod(_ period: LoopInsightsAnalysisPeriod) { analysisPeriod = period LoopInsights_FeatureFlags.analysisPeriod = period + // Clear stale chart data so labels don't show a mismatched date range + agpComputedData = [] } /// The most recent AI debug log (system prompt, user prompt, raw response). diff --git a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift index 6061661994..657e914f55 100644 --- a/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_AGPChartView.swift @@ -7,16 +7,24 @@ // import SwiftUI -import LoopKit -import HealthKit -/// Ambulatory Glucose Profile chart: renders percentile bands (p10/p25/p50/p75/p90) -/// as layered SwiftUI Paths over a 24-hour x-axis. iOS 15 compatible (no Charts framework). +/// Dual-mode glucose chart: +/// - **AGP mode** (14-day lookback): Standard Ambulatory Glucose Profile — all days overlaid +/// into a single 24-hour view with percentile bands. Matches the IDC/AGP spec. +/// - **Profile mode** (all other periods): Glucose Profile — percentile bands spanning the +/// full analysis period with date-based X-axis. +/// iOS 15 compatible (no Charts framework). struct LoopInsights_AGPChartView: View { - /// P6: Accept pre-computed AGP data instead of recomputing on every view body evaluation + /// P6: Accept pre-computed data instead of recomputing on every view body evaluation let agpData: [LoopInsightsAGPDataPoint] + /// When true, renders as a standard 24-hour AGP overlay with hour labels. + let isAGPMode: Bool + + @State private var showingAGPInfo = false + @State private var showingProfileInfo = false + private let targetLow: Double = 70 private let targetHigh: Double = 180 private let chartMinY: Double = 40 @@ -26,13 +34,40 @@ struct LoopInsights_AGPChartView: View { private let topMargin: Double = 8 private let bottomMargin: Double = 16 + /// Date range derived from the data + private var startDate: Date { agpData.first?.date ?? Date() } + private var endDate: Date { agpData.last?.date ?? Date() } + private var totalDuration: TimeInterval { max(1, endDate.timeIntervalSince(startDate)) } + var body: some View { VStack(alignment: .leading, spacing: 2) { - Text(NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP chart title")) - .font(.subheadline.weight(.semibold)) + // Title — AGP mode gets the proper name + info button + if isAGPMode { + HStack(spacing: 4) { + Text(NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP chart title")) + .font(.subheadline.weight(.semibold)) + Button(action: { showingAGPInfo = true }) { + Image(systemName: "info.circle") + .font(.caption) + .foregroundColor(.accentColor) + } + .buttonStyle(.plain) + } + } else { + HStack(spacing: 4) { + Text(NSLocalizedString("Glucose Profile", comment: "LoopInsights glucose profile chart title")) + .font(.subheadline.weight(.semibold)) + Button(action: { showingProfileInfo = true }) { + Image(systemName: "info.circle") + .font(.caption) + .foregroundColor(.accentColor) + } + .buttonStyle(.plain) + } + } if agpData.isEmpty { - Text(NSLocalizedString("Not enough data for AGP chart", comment: "LoopInsights AGP no data")) + Text(NSLocalizedString("Not enough data for glucose profile", comment: "LoopInsights AGP no data")) .font(.caption) .foregroundColor(.secondary) .frame(maxWidth: .infinity, alignment: .center) @@ -71,10 +106,28 @@ struct LoopInsights_AGPChartView: View { } .frame(height: 180) + Spacer().frame(height: 6) + // Legend legendView } } + .alert( + NSLocalizedString("Ambulatory Glucose Profile", comment: "LoopInsights AGP info alert title"), + isPresented: $showingAGPInfo + ) { + Button(NSLocalizedString("OK", comment: "OK button")) {} + } message: { + Text(NSLocalizedString("AGP is a standardized reporting format developed by the International Diabetes Center. It overlays 14 days of CGM data into a single 24-hour view, displaying the median (P50), interquartile range (P25\u{2013}P75), and 10th/90th percentile bands.\n\nThis format lets you and your clinician spot recurring daily patterns \u{2014} like dawn phenomenon or post-meal spikes \u{2014} at a glance, using the same visual language across institutions.", comment: "LoopInsights AGP info alert message")) + } + .alert( + NSLocalizedString("Glucose Profile", comment: "LoopInsights glucose profile info alert title"), + isPresented: $showingProfileInfo + ) { + Button(NSLocalizedString("OK", comment: "OK button")) {} + } message: { + Text(NSLocalizedString("Glucose Profile displays your CGM data across the selected time period using percentile bands.\n\nThe median line (P50) shows your typical glucose at each point in time. The shaded bands show the interquartile range (P25\u{2013}P75) and the 10th/90th percentile spread, giving you a sense of variability.\n\nFor a standardized Ambulatory Glucose Profile (AGP) \u{2014} which overlays all days into a single 24-hour view \u{2014} select the 14-day lookback period.", comment: "LoopInsights glucose profile info alert message")) + } } // MARK: - Legend @@ -101,7 +154,6 @@ struct LoopInsights_AGPChartView: View { // MARK: - Chart Components - /// Target range as a proper Path that fills the correct Y band private func targetRangePath(width: Double, height: Double) -> Path { let plotLeft = leftMargin let plotRight = width - rightMargin @@ -118,7 +170,6 @@ struct LoopInsights_AGPChartView: View { return path } - /// Dashed grid lines at 70 and 180 private func targetGridLines(width: Double, height: Double) -> some View { let plotLeft = leftMargin let plotRight = width - rightMargin @@ -150,20 +201,18 @@ struct LoopInsights_AGPChartView: View { var path = Path() guard !data.isEmpty else { return path } - // Upper line (left to right) - let firstX = xPosition(for: data[0].minuteOfDay, width: width) + let firstX = xPosition(for: data[0].date, width: width) let firstUpperY = yPosition(for: data[0][keyPath: upperKey], height: height) path.move(to: CGPoint(x: firstX, y: firstUpperY)) for point in data.dropFirst() { - let x = xPosition(for: point.minuteOfDay, width: width) + let x = xPosition(for: point.date, width: width) let y = yPosition(for: point[keyPath: upperKey], height: height) path.addLine(to: CGPoint(x: x, y: y)) } - // Lower line (right to left) for point in data.reversed() { - let x = xPosition(for: point.minuteOfDay, width: width) + let x = xPosition(for: point.date, width: width) let y = yPosition(for: point[keyPath: lowerKey], height: height) path.addLine(to: CGPoint(x: x, y: y)) } @@ -177,13 +226,13 @@ struct LoopInsights_AGPChartView: View { guard let first = data.first else { return path } path.move(to: CGPoint( - x: xPosition(for: first.minuteOfDay, width: width), + x: xPosition(for: first.date, width: width), y: yPosition(for: first.p50, height: height) )) for point in data.dropFirst() { path.addLine(to: CGPoint( - x: xPosition(for: point.minuteOfDay, width: width), + x: xPosition(for: point.date, width: width), y: yPosition(for: point.p50, height: height) )) } @@ -192,14 +241,19 @@ struct LoopInsights_AGPChartView: View { } private func xAxisLabels(width: Double, height: Double) -> some View { - let hours = [0, 3, 6, 9, 12, 15, 18, 21] + let labels: [(date: Date, text: String)] + if isAGPMode { + labels = Self.generateAGPHourLabels(start: startDate, end: endDate) + } else { + labels = Self.generateDateLabels(start: startDate, end: endDate) + } return ZStack { - ForEach(hours, id: \.self) { hour in - let x = xPosition(for: hour * 60, width: width) - Text(formatHour(hour)) + ForEach(Array(labels.enumerated()), id: \.offset) { _, label in + let x = xPosition(for: label.date, width: width) + Text(label.text) .font(.system(size: 8)) .foregroundColor(.secondary) - .position(x: x, y: height - 4) + .position(x: x, y: height - 20) } } } @@ -230,19 +284,68 @@ struct LoopInsights_AGPChartView: View { // MARK: - Coordinate Mapping - private func xPosition(for minuteOfDay: Int, width: Double) -> Double { + private func xPosition(for date: Date, width: Double) -> Double { let plotWidth = width - leftMargin - rightMargin - return leftMargin + (Double(minuteOfDay) / 1440.0) * plotWidth + let offset = date.timeIntervalSince(startDate) + let fraction = offset / totalDuration + return leftMargin + fraction * plotWidth } private func yPosition(for glucose: Double, height: Double) -> Double { let plotHeight = height - topMargin - bottomMargin let clamped = max(chartMinY, min(chartMaxY, glucose)) let fraction = (clamped - chartMinY) / (chartMaxY - chartMinY) - return topMargin + (1 - fraction) * plotHeight // Inverted Y axis + return topMargin + (1 - fraction) * plotHeight + } + + // MARK: - X-Axis Label Generation + + /// Hour labels for AGP mode (24-hour overlay): 12a, 3a, 6a, … 9p + private static func generateAGPHourLabels(start: Date, end: Date) -> [(date: Date, text: String)] { + let duration = end.timeIntervalSince(start) + guard duration > 0 else { return [] } + + let hours = [0, 3, 6, 9, 12, 15, 18, 21] + return hours.map { hour in + let fraction = Double(hour) / 24.0 + let date = start.addingTimeInterval(fraction * duration) + return (date: date, text: formatHour(hour)) + } } - private func formatHour(_ hour: Int) -> String { + /// Date labels for profile mode (multi-day time series) + private static func generateDateLabels(start: Date, end: Date) -> [(date: Date, text: String)] { + let duration = end.timeIntervalSince(start) + guard duration > 0 else { return [] } + + let days = duration / 86400 + let labelCount: Int + let formatter = DateFormatter() + + if days <= 4 { + labelCount = 7 + formatter.dateFormat = "E ha" + } else if days <= 10 { + labelCount = 7 + formatter.dateFormat = "E M/d" + } else if days <= 45 { + labelCount = 6 + formatter.dateFormat = "M/d" + } else { + labelCount = 6 + formatter.dateFormat = "M/d" + } + + var labels: [(date: Date, text: String)] = [] + for i in 0...labelCount { + let fraction = Double(i) / Double(labelCount) + let date = start.addingTimeInterval(fraction * duration) + labels.append((date: date, text: formatter.string(from: date))) + } + return labels + } + + private static func formatHour(_ hour: Int) -> String { let h = hour % 24 if h == 0 { return "12a" } if h < 12 { return "\(h)a" } @@ -250,42 +353,85 @@ struct LoopInsights_AGPChartView: View { return "\(h - 12)p" } - // MARK: - AGP Computation + // MARK: - Computation - /// Compute AGP data: 48 time points (every 30 min), each with percentiles - static func computeAGP(from samples: [StoredGlucoseSample]) -> [LoopInsightsAGPDataPoint] { + /// Compute standard AGP: overlay all days into a single 24-hour profile with 48 × 30-minute buckets. + /// Used when the lookback period is 14 days. + static func computeStandardAGP(from samples: [(date: Date, mgdl: Double)]) -> [LoopInsightsAGPDataPoint] { guard !samples.isEmpty else { return [] } let calendar = Calendar.current + // Reference day: midnight of the earliest sample's date + let refDay = calendar.startOfDay(for: samples.min(by: { $0.date < $1.date })!.date) - // Bucket samples by 30-minute windows - var buckets: [Int: [Double]] = [:] // minuteOfDay → glucose values + var buckets: [Int: [Double]] = [:] for sample in samples { - let hour = calendar.component(.hour, from: sample.startDate) - let minute = calendar.component(.minute, from: sample.startDate) + let hour = calendar.component(.hour, from: sample.date) + let minute = calendar.component(.minute, from: sample.date) let minuteOfDay = hour * 60 + minute - let bucket = (minuteOfDay / 30) * 30 // Round to nearest 30-min - buckets[bucket, default: []].append( - sample.quantity.doubleValue(for: .milligramsPerDeciliter) - ) + let bucket = (minuteOfDay / 30) * 30 + buckets[bucket, default: []].append(sample.mgdl) } var dataPoints: [LoopInsightsAGPDataPoint] = [] for minuteOfDay in stride(from: 0, to: 1440, by: 30) { guard let values = buckets[minuteOfDay], values.count >= 3 else { continue } - let sorted = values.sorted() - let count = sorted.count + let s = values.sorted() + let count = s.count + let date = refDay.addingTimeInterval(Double(minuteOfDay) * 60 + 15 * 60) // bucket midpoint + + dataPoints.append(LoopInsightsAGPDataPoint( + date: date, + p10: s[max(0, Int(Double(count) * 0.1))], + p25: s[max(0, Int(Double(count) * 0.25))], + p50: s[count / 2], + p75: s[min(count - 1, Int(Double(count) * 0.75))], + p90: s[min(count - 1, Int(Double(count) * 0.9))] + )) + } + + return dataPoints.sorted { $0.date < $1.date } + } + + /// Compute glucose profile: ~48 time-window buckets spanning the full sample period. + /// Used for all lookback periods except 14 days. + static func computeProfile(from samples: [(date: Date, mgdl: Double)]) -> [LoopInsightsAGPDataPoint] { + guard samples.count >= 3 else { return [] } + + let sorted = samples.sorted { $0.date < $1.date } + guard let first = sorted.first, let last = sorted.last else { return [] } + + let totalDuration = last.date.timeIntervalSince(first.date) + guard totalDuration > 0 else { return [] } + + let bucketCount = 48 + let bucketDuration = totalDuration / Double(bucketCount) + + var buckets: [[Double]] = Array(repeating: [], count: bucketCount) + for sample in sorted { + let offset = sample.date.timeIntervalSince(first.date) + let index = min(Int(offset / bucketDuration), bucketCount - 1) + buckets[index].append(sample.mgdl) + } + + var dataPoints: [LoopInsightsAGPDataPoint] = [] + for i in 0..= 3 else { continue } + let s = values.sorted() + let count = s.count + let midDate = first.date.addingTimeInterval((Double(i) + 0.5) * bucketDuration) dataPoints.append(LoopInsightsAGPDataPoint( - minuteOfDay: minuteOfDay, - p10: sorted[max(0, Int(Double(count) * 0.1))], - p25: sorted[max(0, Int(Double(count) * 0.25))], - p50: sorted[count / 2], - p75: sorted[min(count - 1, Int(Double(count) * 0.75))], - p90: sorted[min(count - 1, Int(Double(count) * 0.9))] + date: midDate, + p10: s[max(0, Int(Double(count) * 0.1))], + p25: s[max(0, Int(Double(count) * 0.25))], + p50: s[count / 2], + p75: s[min(count - 1, Int(Double(count) * 0.75))], + p90: s[min(count - 1, Int(Double(count) * 0.9))] )) } - return dataPoints.sorted { $0.minuteOfDay < $1.minuteOfDay } + return dataPoints } } diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index 1228c72f24..de175ca0df 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -394,7 +394,7 @@ struct LoopInsights_DashboardView: View { // AGP Chart — shown with analysis summary when enabled if LoopInsights_FeatureFlags.agpChartEnabled && !viewModel.agpComputedData.isEmpty { - LoopInsights_AGPChartView(agpData: viewModel.agpComputedData) + LoopInsights_AGPChartView(agpData: viewModel.agpComputedData, isAGPMode: viewModel.isAGPMode) } if !LoopInsights_SecureStorage.hasAPIKey { diff --git a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift index 5e676958b3..a1e861a11c 100644 --- a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift @@ -477,9 +477,15 @@ private final class GoalsViewModel: ObservableObject { private func updateGoalCurrentValues(coordinator: LoopInsights_Coordinator) { Task { @MainActor in - guard let stats = try? await coordinator.dataAggregator.aggregateData( - period: LoopInsights_FeatureFlags.analysisPeriod - ) else { return } + let stats: LoopInsightsAggregatedStats + do { + stats = try await coordinator.dataAggregator.aggregateData( + period: LoopInsights_FeatureFlags.analysisPeriod + ) + } catch { + LoopInsights_FeatureFlags.log.error("Goals: failed to aggregate data for goal updates: \(error)") + return + } for goal in goals { let current: Double @@ -537,7 +543,9 @@ private final class GoalsViewModel: ObservableObject { Task { @MainActor in do { let stats = try await coordinator.dataAggregator.aggregateData(period: .thirtyDays) - let snapshot = try? coordinator.captureCurrentSnapshot() + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Goals: failed to capture snapshot for patterns: \(error)") } let context = LoopInsights_ChatViewModel.buildTherapyContext( snapshot: snapshot, stats: stats @@ -588,9 +596,9 @@ private final class GoalsViewModel: ObservableObject { isGeneratingReport = true Task { @MainActor in - let stats = try? await coordinator.dataAggregator.aggregateData( - period: LoopInsights_FeatureFlags.analysisPeriod - ) + var stats: LoopInsightsAggregatedStats? + do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } + catch { LoopInsights_FeatureFlags.log.error("Goals: failed to aggregate data for report: \(error)") } let html = LoopInsights_ReportGenerator.generateHTML( stats: stats, diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 09438add1c..436f00e9d2 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -770,7 +770,7 @@ struct LoopInsights_SettingsView: View { do { try await healthKitManager.requestAuthorization() } catch { - print("[LoopInsights] HealthKit authorization error: \(error)") + LoopInsights_FeatureFlags.log.error("HealthKit authorization error: \(error)") } await MainActor.run { isRequestingBiometricAuth = false @@ -1240,7 +1240,11 @@ struct LoopInsights_SettingsView: View { if key.isEmpty { LoopInsights_SecureStorage.deleteAPIKey() } else { - try? LoopInsights_SecureStorage.saveAPIKey(key) + do { + try LoopInsights_SecureStorage.saveAPIKey(key) + } catch { + LoopInsights_FeatureFlags.log.error("Failed to save API key: \(error)") + } } saveConfiguration() } @@ -1252,7 +1256,11 @@ struct LoopInsights_SettingsView: View { testResult = nil // Save key and config first - try? LoopInsights_SecureStorage.saveAPIKey(apiKeyText) + do { + try LoopInsights_SecureStorage.saveAPIKey(apiKeyText) + } catch { + LoopInsights_FeatureFlags.log.error("Failed to save API key for test: \(error)") + } saveConfiguration() Task { diff --git a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift index 3786e5a353..37614eccb3 100644 --- a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift @@ -599,8 +599,11 @@ private final class TrendsViewModel: ObservableObject { cachedGeneratedAt[currentTab] = Date() // Build a summary prompt + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Trends: failed to capture snapshot: \(error)") } let therapyContext = LoopInsights_ChatViewModel.buildTherapyContext( - snapshot: try? coordinator.captureCurrentSnapshot(), + snapshot: snapshot, stats: stats ) From 03065a36ac3f6c7633aabf88b9829a1dcab8d4d8 Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 13 Feb 2026 14:54:34 -0800 Subject: [PATCH 10/36] Fix white text on dark-themed views (Trends & Insights, Chat) Bump all body text, headers, and stat values to full white for readability on dark backgrounds. Replace .toolbarColorScheme (iOS 16+) with manual toolbar principal title for compatibility. Restore UINavigationBarAppearance approach in ChatView. Co-Authored-By: Claude Opus 4.6 --- .../LoopInsights/LoopInsights_ChatView.swift | 4 +-- .../LoopInsights_TrendsInsightsView.swift | 26 +++++++++++-------- 2 files changed, 17 insertions(+), 13 deletions(-) diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift index 3bb063262a..4dc6d63d9e 100644 --- a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -64,7 +64,7 @@ struct LoopInsights_ChatView: View { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = UIColor(red: 0.06, green: 0.07, blue: 0.15, alpha: 1) - appearance.titleTextAttributes = [.foregroundColor: UIColor.white.withAlphaComponent(0.9)] + appearance.titleTextAttributes = [.foregroundColor: UIColor.white] UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance } @@ -78,7 +78,7 @@ struct LoopInsights_ChatView: View { ToolbarItem(placement: .principal) { Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat title")) .font(.headline) - .foregroundColor(.white.opacity(0.9)) + .foregroundColor(.white) } ToolbarItem(placement: .navigationBarLeading) { Button(action: { dismiss() }) { diff --git a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift index 37614eccb3..a121d768c0 100644 --- a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift @@ -37,9 +37,16 @@ struct LoopInsights_TrendsInsightsView: View { tabContent } } - .navigationTitle(NSLocalizedString("Trends & Insights", comment: "LoopInsights trends title")) .navigationBarTitleDisplayMode(.inline) + .onAppear { + viewModel.loadIfNeeded(coordinator: coordinator) + } .toolbar { + ToolbarItem(placement: .principal) { + Text(NSLocalizedString("Trends & Insights", comment: "LoopInsights trends title")) + .font(.headline) + .foregroundColor(.white) + } ToolbarItem(placement: .navigationBarLeading) { Button(action: { dismiss() }) { Image(systemName: "xmark.circle.fill") @@ -56,9 +63,6 @@ struct LoopInsights_TrendsInsightsView: View { } } } - .onAppear { - viewModel.loadIfNeeded(coordinator: coordinator) - } .sheet(isPresented: $showingChat) { NavigationView { LoopInsights_ChatView( @@ -238,12 +242,12 @@ struct LoopInsights_TrendsInsightsView: View { .foregroundColor(.purple.opacity(0.8)) Text(NSLocalizedString("Summary", comment: "LoopInsights trends summary header")) .font(.subheadline.weight(.semibold)) - .foregroundColor(.white.opacity(0.9)) + .foregroundColor(.white) } Text(summary) .font(.subheadline) - .foregroundColor(.white.opacity(0.78)) + .foregroundColor(.white) .textSelection(.enabled) .fixedSize(horizontal: false, vertical: true) } @@ -262,7 +266,7 @@ struct LoopInsights_TrendsInsightsView: View { .foregroundColor(.yellow.opacity(0.8)) Text(NSLocalizedString("Highlights", comment: "LoopInsights trends highlights header")) .font(.subheadline.weight(.semibold)) - .foregroundColor(.white.opacity(0.9)) + .foregroundColor(.white) } ForEach(highlights.indices, id: \.self) { index in @@ -271,7 +275,7 @@ struct LoopInsights_TrendsInsightsView: View { .foregroundColor(.purple.opacity(0.8)) Text(highlights[index]) .font(.subheadline) - .foregroundColor(.white.opacity(0.78)) + .foregroundColor(.white) .fixedSize(horizontal: false, vertical: true) } } @@ -354,18 +358,18 @@ struct LoopInsights_TrendsInsightsView: View { .foregroundColor(.purple.opacity(0.8)) Text(title) .font(.subheadline.weight(.semibold)) - .foregroundColor(.white.opacity(0.9)) + .foregroundColor(.white) } ForEach(rows.indices, id: \.self) { index in HStack { Text(rows[index].0) .font(.caption) - .foregroundColor(.white.opacity(0.55)) + .foregroundColor(.white.opacity(0.7)) Spacer() Text(rows[index].1) .font(.caption.weight(.medium)) - .foregroundColor(.white.opacity(0.85)) + .foregroundColor(.white) } if index < rows.count - 1 { Divider() From c03d6c05136997b8f3a4a6c34fb1aaa0b2764b3e Mon Sep 17 00:00:00 2001 From: Taylor Date: Sat, 14 Feb 2026 08:48:36 -0800 Subject: [PATCH 11/36] Updated readme Added steps for creating and using test data in developer mode for demos and feature functionality testing. --- .../LoopInsights/LoopInsights_README.md | 152 ++++++++++++++++++ .../LoopInsights_SettingsView.swift | 2 +- Loop/Views/SettingsView.swift | 2 +- 3 files changed, 154 insertions(+), 2 deletions(-) diff --git a/Documentation/LoopInsights/LoopInsights_README.md b/Documentation/LoopInsights/LoopInsights_README.md index 02bae41ea6..ddcaca0209 100644 --- a/Documentation/LoopInsights/LoopInsights_README.md +++ b/Documentation/LoopInsights/LoopInsights_README.md @@ -116,6 +116,158 @@ API key is stored in iOS Keychain and shared with FoodFinder (same Keychain entr - User always sees disclaimer when applying changes - Feature flag defaults to OFF +## Test Data + +LoopInsights includes a **Test Data mode** (developer-only) that loads JSON fixture files instead of reading from Loop's live data stores. This is useful for development, demos, and for users who want to evaluate the feature without waiting for real data accumulation. + +### How Test Data Works + +`LoopInsights_TestDataProvider` looks for fixture files in two locations (checked in order): + +1. **App Documents** — `Documents/LoopInsights/` on the device (no rebuild needed) +2. **App Bundle** — `Resources/LoopInsights/TestData/` (requires rebuild) + +Expected fixture filenames: +- `tidepool_glucose_samples.json` — CGM glucose readings (`StoredGlucoseSample` format) +- `tidepool_dose_entries.json` — Insulin deliveries (`DoseEntry` format) +- `tidepool_carb_entries.json` — Carb entries (`StoredCarbEntry` format) +- `tidepool_therapy_settings.json` — Therapy settings (optional, custom format) + +### Enabling Test Data Mode + +1. Open **Settings > LoopInsights** +2. Long-press the LoopInsights header **3 times** to unlock Developer Mode +3. Scroll to the Developer section +4. Toggle **"Use Test Data Fixtures"** on +5. Open the Dashboard and run an analysis + +### Generating Test Data from Tidepool + +A Python script (`pull_tidepool_data.py`) is included to pull real diabetes data from a Tidepool account and convert it into the fixture format LoopInsights expects. + +**Prerequisites:** +```bash +pip3 install requests +``` + +**Usage:** +```bash +# Pull 14 days of data (default) +python3 pull_tidepool_data.py --email **YOUR_TIDEPOOL_EMAIL** --password **YOUR_TIDEPOOL_PASSWORD** + +# Pull 90 days for longer-range analysis testing +python3 pull_tidepool_data.py --email **YOUR_EMAIL** --password **YOUR_PASSWORD** --days 90 + +# Pull data and auto-copy to the iOS Simulator's Documents/LoopInsights/ +python3 pull_tidepool_data.py --email **YOUR_EMAIL** --password **YOUR_PASSWORD** --simulator + +# Specify a custom output directory +python3 pull_tidepool_data.py --email **YOUR_EMAIL** --password **YOUR_PASSWORD** --output /path/to/output +``` + +**What the script does:** +1. Authenticates with the Tidepool API (`api.tidepool.org`) +2. Pulls CGM glucose (cbg), insulin doses (basal + bolus), carb entries (wizard + food), and pump settings +3. Converts Tidepool's data format to Loop's native JSON format +4. Saves four fixture files to `LoopWorkspace/Loop/Loop/Resources/LoopInsights/TestData/` +5. With `--simulator`, copies the fixtures into the most recent iOS Simulator's `Documents/LoopInsights/` directory + +**After running the script:** +1. Build and run Loop in the Simulator (or on-device if you placed files in the app's Documents) +2. Enable LoopInsights in Settings +3. Unlock Developer Mode (5x long-press on header) +4. Enable "Use Test Data Fixtures" +5. Open the Dashboard and tap Analyze + +### Creating Test Data Manually + +If you don't have a Tidepool account, you can create fixture files manually. Each file is a JSON array. + +**Glucose samples** (`tidepool_glucose_samples.json`): +```json +[ + { + "startDate": "2026-02-01T08:00:00Z", + "quantity": 120.0, + "provenanceIdentifier": "com.test", + "syncIdentifier": "sample-001", + "syncVersion": 1, + "isDisplayOnly": false, + "wasUserEntered": false + } +] +``` + +**Dose entries** (`tidepool_dose_entries.json`): +```json +[ + { + "type": "tempBasal", + "startDate": "2026-02-01T08:00:00Z", + "endDate": "2026-02-01T08:30:00Z", + "value": 0.85, + "unit": "U/hour", + "automatic": true + }, + { + "type": "bolus", + "startDate": "2026-02-01T12:00:00Z", + "endDate": "2026-02-01T12:01:00Z", + "value": 3.5, + "unit": "U", + "isMutable": false + } +] +``` + +**Carb entries** (`tidepool_carb_entries.json`): +```json +[ + { + "startDate": "2026-02-01T12:00:00Z", + "quantity": 45, + "absorptionTime": 10800, + "syncIdentifier": "carb-001", + "syncVersion": 1, + "createdByCurrentApp": false + } +] +``` + +**Therapy settings** (`tidepool_therapy_settings.json`, optional): +```json +{ + "basalRateSchedule": [ + {"startTime": 0, "value": 0.8}, + {"startTime": 21600, "value": 0.9}, + {"startTime": 43200, "value": 0.75} + ], + "insulinSensitivitySchedule": [ + {"startTime": 0, "value": 45}, + {"startTime": 21600, "value": 40}, + {"startTime": 43200, "value": 50} + ], + "carbRatioSchedule": [ + {"startTime": 0, "value": 10}, + {"startTime": 21600, "value": 8}, + {"startTime": 43200, "value": 12} + ] +} +``` + +> **Note:** `startTime` values are in seconds from midnight (e.g., 21600 = 6:00 AM, 43200 = 12:00 PM). + +### Loading Fixtures on a Physical Device + +To load test data on a physical device without rebuilding: + +1. Connect the device to your Mac +2. Open Finder > select the device > Files tab +3. Drag-and-drop the four JSON files into the **Loop** app's Documents folder, inside a `LoopInsights` subfolder +4. Enable Test Data mode in LoopInsights Developer settings + +The `TestDataProvider` checks `Documents/LoopInsights/` first, so user-provided files always take priority over bundled fixtures. + ## Portability - All code in `LoopInsights/` subdirectories with `LoopInsights_` prefix diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 436f00e9d2..61704cdf7d 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -189,7 +189,7 @@ struct LoopInsights_SettingsView: View { VStack(alignment: .leading, spacing: 12) { HStack(spacing: 6) { Image(systemName: "brain.head.profile") - .foregroundColor(.accentColor) + .foregroundColor(Color(red: 26/255, green: 138/255, blue: 158/255)) Text("LOOPINSIGHTS") .font(.caption) .fontWeight(.semibold) diff --git a/Loop/Views/SettingsView.swift b/Loop/Views/SettingsView.swift index b9bfe6103a..d4ab105f91 100644 --- a/Loop/Views/SettingsView.swift +++ b/Loop/Views/SettingsView.swift @@ -387,7 +387,7 @@ extension SettingsView { imageView: Image(systemName: "brain.head.profile") .resizable() .aspectRatio(contentMode: .fit) - .foregroundColor(.accentColor) + .foregroundColor(Color(red: 26/255, green: 138/255, blue: 158/255)) .frame(width: 30), label: NSLocalizedString("LoopInsights", comment: "LoopInsights settings button"), descriptiveText: NSLocalizedString("AI-powered therapy settings analysis", comment: "LoopInsights settings descriptive text")) From 195f69751469bbf7c831bb4b0f29a5337a152b92 Mon Sep 17 00:00:00 2001 From: Taylor Date: Sun, 15 Feb 2026 14:41:05 -0800 Subject: [PATCH 12/36] Add safety guardrails and data-first AI prompt philosophy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Safety guardrails (3 layers of defense against dangerous therapy values): - LoopInsights_SafetyGuardrails struct with clinical bounds mirroring LoopKit (CR 4-28 recommended/2-150 absolute, ISF 16-400/10-500, Basal 0.05-10/0.05-30) - Post-parse validation rejects values outside absolute bounds and >25% changes - AI prompt now includes absolute bounds with clamping instructions - confirmApply() hard-blocks absolute violations - applyEditedSuggestion() validates edited blocks against absolute bounds - autoApplySuggestion() blocks anything outside recommended range (stricter) - SuggestionDetailView shows orange warning banner and color-coded values - DashboardView alert changes to "Safety Warning" with specific warnings - Suggestion cards show orange triangle badge for guardrail warnings Data-first AI prompts (all 4 AI interaction points): - Chat, Analysis, Goals/Patterns, and Trends prompts now require every answer to cite the user's specific numbers — no generic diabetes advice - Added "#1 RULE" blocks emphasizing real data over textbook answers Co-Authored-By: Claude Opus 4.6 --- .../LoopInsights/LoopInsights_Models.swift | 131 ++++++++++++++++++ .../LoopInsights_AIAnalysis.swift | 60 +++++++- .../LoopInsights_ChatViewModel.swift | 37 +++-- .../LoopInsights_DashboardViewModel.swift | 28 ++++ .../LoopInsights_DashboardView.swift | 66 +++++++-- .../LoopInsights/LoopInsights_GoalsView.swift | 22 ++- .../LoopInsights_SuggestionDetailView.swift | 56 +++++++- .../LoopInsights_TrendsInsightsView.swift | 24 +++- 8 files changed, 385 insertions(+), 39 deletions(-) diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 2128c73579..5a66af3e60 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -68,6 +68,112 @@ enum LoopInsightsSettingStatus { case hasSuggestions // Orange — has pending suggestions } +// MARK: - Safety Guardrails + +/// Absolute and recommended clinical bounds for therapy settings. +/// Mirrors LoopKit's `Guardrail+Settings.swift` as self-contained constants +/// so LoopInsights can validate without importing LoopKit guardrail types. +struct LoopInsights_SafetyGuardrails { + + /// Classification of a value relative to guardrail bounds + enum Classification { + case withinRecommended + case belowRecommended + case aboveRecommended + case belowAbsolute + case aboveAbsolute + } + + // -- Carb Ratio (g/U) -- + static let crRecommendedMin: Double = 4.0 + static let crRecommendedMax: Double = 28.0 + static let crAbsoluteMin: Double = 2.0 + static let crAbsoluteMax: Double = 150.0 + + // -- Insulin Sensitivity Factor (mg/dL per U) -- + static let isfRecommendedMin: Double = 16.0 + static let isfRecommendedMax: Double = 400.0 + static let isfAbsoluteMin: Double = 10.0 + static let isfAbsoluteMax: Double = 500.0 + + // -- Basal Rate (U/hr) -- + static let basalRecommendedMin: Double = 0.05 + static let basalRecommendedMax: Double = 10.0 + static let basalAbsoluteMin: Double = 0.05 + static let basalAbsoluteMax: Double = 30.0 + + /// Maximum allowed percentage change per analysis step (backstop) + static let maxChangePercent: Double = 25.0 + + /// Classify a value against the guardrail bounds for a setting type + static func classify(value: Double, settingType: LoopInsightsSettingType) -> Classification { + let (recMin, recMax, absMin, absMax) = bounds(for: settingType) + + if value < absMin { return .belowAbsolute } + if value > absMax { return .aboveAbsolute } + if value < recMin { return .belowRecommended } + if value > recMax { return .aboveRecommended } + return .withinRecommended + } + + /// Human-readable warning string, or nil if value is within recommended range + static func warningMessage(value: Double, settingType: LoopInsightsSettingType) -> String? { + let classification = classify(value: value, settingType: settingType) + let (recMin, recMax, absMin, absMax) = bounds(for: settingType) + let unit = settingType.unitDescription + let name = settingType.displayName + + switch classification { + case .withinRecommended: + return nil + case .belowAbsolute: + return String( + format: NSLocalizedString( + "%@ value %.1f %@ is below the absolute minimum (%.1f %@). This value cannot be applied.", + comment: "LoopInsights guardrail: below absolute" + ), + name, value, unit, absMin, unit + ) + case .aboveAbsolute: + return String( + format: NSLocalizedString( + "%@ value %.1f %@ exceeds the absolute maximum (%.1f %@). This value cannot be applied.", + comment: "LoopInsights guardrail: above absolute" + ), + name, value, unit, absMax, unit + ) + case .belowRecommended: + return String( + format: NSLocalizedString( + "%@ value %.1f %@ is below the recommended minimum (%.1f %@). Consult your healthcare provider before applying.", + comment: "LoopInsights guardrail: below recommended" + ), + name, value, unit, recMin, unit + ) + case .aboveRecommended: + return String( + format: NSLocalizedString( + "%@ value %.1f %@ exceeds the recommended maximum (%.1f %@). Consult your healthcare provider before applying.", + comment: "LoopInsights guardrail: above recommended" + ), + name, value, unit, recMax, unit + ) + } + } + + /// Returns (recommendedMin, recommendedMax, absoluteMin, absoluteMax) for a setting type + private static func bounds(for settingType: LoopInsightsSettingType) -> (Double, Double, Double, Double) { + switch settingType { + case .carbRatio: + return (crRecommendedMin, crRecommendedMax, crAbsoluteMin, crAbsoluteMax) + case .insulinSensitivity: + return (isfRecommendedMin, isfRecommendedMax, isfAbsoluteMin, isfAbsoluteMax) + case .basalRate: + return (basalRecommendedMin, basalRecommendedMax, basalAbsoluteMin, basalAbsoluteMax) + } + } +} + // MARK: - Detected Pattern /// A glucose/insulin pattern detected from aggregated data @@ -577,6 +683,31 @@ struct LoopInsightsSuggestion: Codable, Identifiable, Equatable { } } + // MARK: - Guardrail Computed Properties + + /// Warning strings for any proposed values outside recommended bounds + var guardrailWarnings: [String] { + timeBlocks.compactMap { block in + LoopInsights_SafetyGuardrails.warningMessage(value: block.proposedValue, settingType: settingType) + } + } + + /// True if any proposed value falls outside the recommended range + var hasGuardrailWarning: Bool { + timeBlocks.contains { block in + let c = LoopInsights_SafetyGuardrails.classify(value: block.proposedValue, settingType: settingType) + return c != .withinRecommended + } + } + + /// True if any proposed value falls outside the absolute bounds (hard block) + var hasAbsoluteViolation: Bool { + timeBlocks.contains { block in + let c = LoopInsights_SafetyGuardrails.classify(value: block.proposedValue, settingType: settingType) + return c == .belowAbsolute || c == .aboveAbsolute + } + } + static func == (lhs: LoopInsightsSuggestion, rhs: LoopInsightsSuggestion) -> Bool { return lhs.id == rhs.id } diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index c094d215d9..e1881e27c4 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -66,10 +66,12 @@ final class LoopInsights_AIAnalysis { \(personality.promptInstruction) - YOUR MANDATE: Be analytically rigorous. Every recommendation must be backed by specific numbers \ - from the data. If the data does not justify a change, return zero suggestions — that is the \ - correct response when settings are working. You are not here to impress or people-please. \ - You are here to find real problems and propose precise fixes. + YOUR MANDATE: Be analytically rigorous. You have this person's REAL data — their actual \ + glucose readings, insulin delivery, carb logs, and pump settings. Every recommendation must \ + cite specific numbers from THEIR data, not generic clinical wisdom. If the data does not \ + justify a change, return zero suggestions — that is the correct response when settings are \ + working. You are not here to impress or people-please. You are here to find real problems \ + in THIS person's data and propose precise fixes grounded in THEIR numbers. CLINICAL REASONING FRAMEWORK — How AID settings interact: - BASAL RATE: Controls glucose during fasting periods. Analyze overnight (12AM-6AM) and \ @@ -99,7 +101,7 @@ final class LoopInsights_AIAnalysis { always means basal rate is too low. >70% basal may mean basal is too high. 4. GLUCOSE TRENDS: Look at the slope of hourly averages. A consistent rise over 3+ hours \ during fasting = basal too low. A consistent drop = basal too high. - 5. HIGH TIR DOES NOT MEAN PERFECT SETTINGS: If TIR is 90% but the algorithm is issuing 7 \ + 5. HIGH TIR DOES NOT MEAN PERFECT SETTINGS: If TIR is 90% but the algorithm is issuing 10 \ corrections/day to achieve that, the settings are suboptimal — the algorithm is doing \ heavy lifting to compensate. Better settings = same TIR with fewer corrections. @@ -128,10 +130,18 @@ final class LoopInsights_AIAnalysis { Only skip recommendations when TIR is good AND corrections are low AND basal/bolus is balanced. SAFETY RULES: - 1. Never suggest changes larger than 20% from current values. + 1. Never suggest changes larger than 20% from current values in a single step. 2. Conservative changes only — under-adjust rather than over-adjust. 3. If time below range is >4%, prioritize safety (raise ISF or lower basal before anything else). 4. Suggestions are advisory only — the user and their healthcare provider make final decisions. + 5. ABSOLUTE CLINICAL BOUNDS — proposed values MUST stay within these ranges. Clamp to bound if needed: + - Carb Ratio: 2.0–150.0 g/U (recommended 4.0–28.0) + - ISF: 10.0–500.0 mg/dL/U (recommended 16.0–400.0) + - Basal Rate: 0.05–30.0 U/hr (recommended 0.05–10.0) + Values outside the recommended range should only be proposed with LOW confidence and explicit justification. + 6. CUMULATIVE CHANGE AWARENESS: If recent settings changes are listed above, do NOT stack \ + additional changes on top. Settings changes need time (3-7 days minimum) to show effect in the data. \ + If the data predates a recent change, recommend waiting for new data before adjusting further. BIOMETRIC CONTEXT — When biometric data is provided: - HEART RATE: Elevated resting HR or HR spikes can indicate stress, illness, caffeine, or \ @@ -485,10 +495,46 @@ final class LoopInsights_AIAnalysis { guard !timeBlocks.isEmpty else { continue } + // Post-parse safety validation: reject blocks outside absolute bounds + // and enforce max change percentage as a code-level backstop + let validatedBlocks = timeBlocks.filter { block in + let classification = LoopInsights_SafetyGuardrails.classify( + value: block.proposedValue, settingType: settingType + ) + + // Hard reject: values outside absolute bounds + if classification == .belowAbsolute || classification == .aboveAbsolute { + LoopInsights_FeatureFlags.log.error( + "Guardrail REJECTED: \(settingType.displayName) proposed \(block.proposedValue) at \(block.startTimeFormatted) — outside absolute bounds" + ) + return false + } + + // Warn (but pass through): values outside recommended bounds + if classification != .withinRecommended { + LoopInsights_FeatureFlags.log.default( + "Guardrail WARNING: \(settingType.displayName) proposed \(block.proposedValue) at \(block.startTimeFormatted) — outside recommended range" + ) + } + + // Backstop: reject blocks with >25% change from current + let changePercent = abs(block.changePercent) + if changePercent > LoopInsights_SafetyGuardrails.maxChangePercent { + LoopInsights_FeatureFlags.log.error( + "Guardrail REJECTED: \(settingType.displayName) proposed \(String(format: "%.1f", block.proposedValue)) at \(block.startTimeFormatted) — \(String(format: "%.0f", changePercent))%% change exceeds \(String(format: "%.0f", LoopInsights_SafetyGuardrails.maxChangePercent))%% limit" + ) + return false + } + + return true + } + + guard !validatedBlocks.isEmpty else { continue } + let suggestion = LoopInsightsSuggestion( id: UUID(), settingType: settingType, - timeBlocks: timeBlocks, + timeBlocks: validatedBlocks, reasoning: reasoning, confidence: confidence, analysisPeriod: period, diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index f278a6d149..29fe4fc3de 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -115,20 +115,41 @@ final class LoopInsights_ChatViewModel: ObservableObject { return """ You are an expert diabetes and automated insulin delivery (AID) advisor embedded \ in the Loop app. The user is wearing an insulin pump managed by Loop's closed-loop \ - algorithm. You have access to their real therapy settings and recent glucose/insulin/carb \ - statistics provided below. + algorithm. You have access to their REAL therapy settings, glucose data, insulin \ + delivery data, carb logs, and biometrics — all provided below. This is not hypothetical. \ + These are this specific person's actual numbers from their actual pump and CGM. \(personality.promptInstruction) + YOUR #1 RULE — ALWAYS ANSWER FROM THEIR DATA: + The entire value of this conversation is that you can see this person's real numbers. \ + Every answer you give MUST reference their specific data. Do NOT give generic diabetes \ + advice that could apply to anyone. The user can Google generic advice — they came here \ + because you can see their TIR, their hourly glucose patterns, their basal/bolus split, \ + their correction counts, their actual settings schedules. USE THEM. + + When the user asks "why am I high overnight?", don't explain what causes overnight highs \ + in general — look at THEIR hourly averages from 12AM-6AM, THEIR basal rate during those \ + hours, THEIR overnight trend, and tell them what's happening in THEIR data specifically. + + When they ask "should I change my carb ratio?", don't explain what a carb ratio does — \ + look at THEIR post-meal glucose patterns, THEIR current CR schedule, THEIR carb stats, \ + and give them a specific assessment with specific numbers. + GUIDELINES: - - Answer questions about diabetes management, glucose patterns, therapy settings, and Loop. - - Reference the user's actual data when relevant — don't give generic advice when you have specifics. - - If asked about changing settings, explain the expected impact and always recommend conservative changes. - - You may suggest specific therapy setting adjustments. Frame them clearly as suggestions, not commands. - - Always remind users that significant therapy changes should be discussed with their healthcare provider. + - Ground every answer in their actual data. Cite specific numbers: "Your average glucose \ + between 12AM-6AM is 162 mg/dL with your basal at 0.8 U/hr" — not "overnight highs can \ + be caused by insufficient basal." + - When their data tells a clear story, say so directly. When the data is ambiguous or \ + insufficient, say that too — but explain exactly what's missing and why it matters. + - If asked about settings changes, reference their current value, explain what the data \ + suggests, and propose a specific adjustment with expected impact. + - Frame suggestions as suggestions, not commands. Significant therapy changes should be \ + discussed with their healthcare provider. - Keep responses concise but thorough. Use bullet points for multi-part answers. - - If you don't have enough data to answer confidently, say so. - Never fabricate data or statistics — only reference what's provided in the context below. + - If the data context says "No therapy data currently available", tell the user you don't \ + have their data loaded yet and suggest they run an analysis first. CURRENT DATA CONTEXT: \(therapyContext) diff --git a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift index 176c816e42..4c6ebb7736 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_DashboardViewModel.swift @@ -326,6 +326,14 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func confirmApply() { guard let record = recordToApply else { return } + // Hard block: cannot apply if any proposed value is outside absolute bounds + if record.suggestion.hasAbsoluteViolation { + LoopInsights_FeatureFlags.log.error("confirmApply BLOCKED: suggestion has absolute guardrail violation") + recordToApply = nil + showingApplyConfirmation = false + return + } + let snapshotBefore = try? coordinator.captureCurrentSnapshot() // Write the therapy settings changes to Loop @@ -356,6 +364,20 @@ final class LoopInsights_DashboardViewModel: ObservableObject { func applyEditedSuggestion(editedBlocks: [LoopInsightsTimeBlock]) { guard let record = recordToApply else { return } + // Validate edited blocks against absolute bounds + let settingType = record.suggestion.settingType + for block in editedBlocks { + let classification = LoopInsights_SafetyGuardrails.classify( + value: block.proposedValue, settingType: settingType + ) + if classification == .belowAbsolute || classification == .aboveAbsolute { + LoopInsights_FeatureFlags.log.error("applyEditedSuggestion BLOCKED: edited value \(block.proposedValue) outside absolute bounds for \(settingType.displayName)") + recordToApply = nil + showingPreFillEditor = false + return + } + } + let snapshotBefore = try? coordinator.captureCurrentSnapshot() // Build a modified suggestion with the user's edited values @@ -495,6 +517,12 @@ final class LoopInsights_DashboardViewModel: ObservableObject { // MARK: - Private private func autoApplySuggestion(_ suggestion: LoopInsightsSuggestion) async { + // Stricter for automated changes: block if ANY value is outside recommended range + if suggestion.hasGuardrailWarning { + LoopInsights_FeatureFlags.log.error("autoApply BLOCKED: suggestion for \(suggestion.settingType.displayName) has guardrail warning — requires manual review") + return + } + let snapshotBefore = try? coordinator.captureCurrentSnapshot() coordinator.applyTherapyChanges(suggestion: suggestion) diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index de175ca0df..1162ccf4ca 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -114,20 +114,23 @@ struct LoopInsights_DashboardView: View { } } .alert( - NSLocalizedString("Apply Suggestion", comment: "LoopInsights apply confirmation title"), + applyAlertTitle, isPresented: showingApplyConfirmationBinding ) { - Button(NSLocalizedString("Apply", comment: "LoopInsights apply button"), role: .destructive) { - viewModel.confirmApply() - } - Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) { - viewModel.cancelApply() + if let record = viewModel.recordToApply, record.suggestion.hasAbsoluteViolation { + Button(NSLocalizedString("OK", comment: "OK button"), role: .cancel) { + viewModel.cancelApply() + } + } else { + Button(NSLocalizedString("Apply", comment: "LoopInsights apply button"), role: .destructive) { + viewModel.confirmApply() + } + Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) { + viewModel.cancelApply() + } } } message: { - Text(NSLocalizedString( - "This will modify your therapy settings. You are responsible for reviewing and verifying all changes. AI suggestions are advisory and may not be appropriate for your situation. Consult your healthcare provider for significant therapy adjustments.", - comment: "LoopInsights apply disclaimer" - )) + Text(applyAlertMessage) } .sheet(isPresented: showingPreFillEditorBinding) { if let record = viewModel.recordToApply { @@ -489,6 +492,11 @@ struct LoopInsights_DashboardView: View { .fontWeight(.medium) .foregroundColor(.primary) Spacer() + if record.suggestion.hasGuardrailWarning { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.orange) + .font(.caption) + } confidenceBadge(record.suggestion.confidence) } @@ -571,6 +579,44 @@ struct LoopInsights_DashboardView: View { } } + // MARK: - Guardrail Alert Helpers + + private var applyAlertTitle: String { + guard let record = viewModel.recordToApply else { + return NSLocalizedString("Apply Suggestion", comment: "LoopInsights apply confirmation title") + } + if record.suggestion.hasAbsoluteViolation { + return NSLocalizedString("Cannot Apply", comment: "LoopInsights apply blocked title") + } + if record.suggestion.hasGuardrailWarning { + return NSLocalizedString("Safety Warning", comment: "LoopInsights apply safety warning title") + } + return NSLocalizedString("Apply Suggestion", comment: "LoopInsights apply confirmation title") + } + + private var applyAlertMessage: String { + let disclaimer = NSLocalizedString( + "This will modify your therapy settings. You are responsible for reviewing and verifying all changes. AI suggestions are advisory and may not be appropriate for your situation. Consult your healthcare provider for significant therapy adjustments.", + comment: "LoopInsights apply disclaimer" + ) + guard let record = viewModel.recordToApply else { return disclaimer } + + if record.suggestion.hasAbsoluteViolation { + let warnings = record.suggestion.guardrailWarnings.joined(separator: "\n") + return warnings + "\n\n" + NSLocalizedString( + "One or more proposed values are outside safe clinical bounds. This suggestion cannot be applied.", + comment: "LoopInsights apply absolute block message" + ) + } + + if record.suggestion.hasGuardrailWarning { + let warnings = record.suggestion.guardrailWarnings.joined(separator: "\n") + return warnings + "\n\n" + disclaimer + } + + return disclaimer + } + private func settingStatusColor(_ status: LoopInsightsSettingStatus) -> Color { switch status { case .notAnalyzed: return .gray diff --git a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift index a1e861a11c..ee7391c386 100644 --- a/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_GoalsView.swift @@ -621,26 +621,36 @@ private final class GoalsViewModel: ObservableObject { let personality = LoopInsights_FeatureFlags.aiPersonality return """ - You are an expert diabetes advisor analyzing 30 days of Loop AID data to discover patterns. \ + You are an expert diabetes advisor analyzing 30 days of this specific person's Loop AID data \ + to discover patterns. You have their REAL glucose readings, insulin delivery, carb logs, \ + pump settings, and biometrics. This is not hypothetical — these are actual numbers from \ + their actual pump and CGM. \(personality.promptInstruction) + YOUR #1 RULE — ALWAYS GROUND IN THEIR DATA: + Every pattern you identify must cite specific numbers from their data. Do NOT describe \ + generic diabetes patterns — describe what is actually happening in THIS person's data. \ + "Your average glucose between 12AM-6AM is 172 mg/dL while your basal rate is 0.8 U/hr" — \ + not "overnight highs can indicate insufficient basal." If their data doesn't show a pattern, \ + don't invent one. + RESPONSE FORMAT — you MUST use exactly this structure: PATTERNS: [TYPE] Pattern title - Description of the pattern (1-2 sentences). Include specific numbers. + Description of the pattern (1-2 sentences) citing their specific numbers. SEVERITY: high/medium/low [TYPE] Another pattern title - Description. + Description citing their specific numbers. SEVERITY: high/medium/low (List 3-6 patterns. Types can be: Overnight, Dawn, Post-Meal, Exercise, Weekend, Weekday, \ Sick Day, Negative Basal, Variability, Insulin Resistance, or any descriptive type.) TIPS: - GOAL_INDEX:0 One-line actionable tip for the first goal - GOAL_INDEX:1 One-line actionable tip for the second goal + GOAL_INDEX:0 One-line actionable tip for the first goal, referencing their data + GOAL_INDEX:1 One-line actionable tip for the second goal, referencing their data (One tip per active goal. Skip if no goals.) SPECIAL PATTERN DETECTION: @@ -651,7 +661,7 @@ private final class GoalsViewModel: ObservableObject { frequent suspensions. - Weekend vs weekday: Compare timing patterns in carb data and glucose patterns. - Exercise correlation: Look for post-activity lows followed by rebounds. - - Goal-aware tips: Reference the user's active goals in suggestions. + - Goal-aware tips: Reference the user's active goals AND their actual metrics in suggestions. """ } diff --git a/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift b/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift index 52190bbfd1..349b7ecc78 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SuggestionDetailView.swift @@ -23,6 +23,9 @@ struct LoopInsights_SuggestionDetailView: View { List { headerSection reasoningSection + if record.suggestion.hasGuardrailWarning { + guardrailWarningSection + } timeBlocksSection if record.status == .pending { actionsSection @@ -109,7 +112,7 @@ struct LoopInsights_SuggestionDetailView: View { Text(String(format: "%.1f %@", block.proposedValue, record.suggestion.settingType.unitDescription)) .font(.body) .fontWeight(.bold) - .foregroundColor(block.proposedValue > block.currentValue ? .orange : .blue) + .foregroundColor(proposedValueColor(for: block)) } } @@ -227,8 +230,59 @@ struct LoopInsights_SuggestionDetailView: View { } } + // MARK: - Guardrail Warning + + private var guardrailWarningSection: some View { + Section { + VStack(alignment: .leading, spacing: 8) { + HStack(spacing: 8) { + Image(systemName: "exclamationmark.triangle.fill") + .foregroundColor(.orange) + .font(.title3) + Text(NSLocalizedString("Safety Warning", comment: "LoopInsights guardrail warning title")) + .font(.subheadline) + .fontWeight(.bold) + .foregroundColor(.orange) + } + + ForEach(record.suggestion.guardrailWarnings, id: \.self) { warning in + Text(warning) + .font(.caption) + .foregroundColor(.secondary) + } + + if record.suggestion.hasAbsoluteViolation { + Text(NSLocalizedString("One or more values are outside safe clinical bounds and cannot be applied.", comment: "LoopInsights guardrail absolute block message")) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.red) + } else { + Text(NSLocalizedString("These values are outside the typical recommended range. Consult your healthcare provider before applying.", comment: "LoopInsights guardrail consult message")) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + // MARK: - Helpers + /// Color for a proposed value based on guardrail classification + private func proposedValueColor(for block: LoopInsightsTimeBlock) -> Color { + let classification = LoopInsights_SafetyGuardrails.classify( + value: block.proposedValue, settingType: record.suggestion.settingType + ) + switch classification { + case .belowAbsolute, .aboveAbsolute: + return .red + case .belowRecommended, .aboveRecommended: + return .orange + case .withinRecommended: + return block.proposedValue > block.currentValue ? .orange : .blue + } + } + private var confidenceBadge: some View { Text(record.suggestion.confidence.displayName) .font(.caption2) diff --git a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift index a121d768c0..16d512fa87 100644 --- a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift @@ -659,21 +659,31 @@ private final class TrendsViewModel: ObservableObject { let personality = LoopInsights_FeatureFlags.aiPersonality return """ - You are an expert diabetes advisor providing a trends summary for a Loop AID user. \ + You are an expert diabetes advisor providing a trends summary for a specific Loop AID user. \ + You have their REAL glucose readings, insulin delivery, carb logs, pump settings, and \ + biometrics. These are actual numbers from their actual pump and CGM — not hypothetical. \(personality.promptInstruction) + YOUR #1 RULE — ALWAYS GROUND IN THEIR DATA: + Every sentence you write must reference this person's specific numbers. Do NOT write \ + generic summaries like "maintaining good control" — write "Your TIR is **87%** with an \ + average glucose of **142 mg/dL** and only **2.1%** time below range." The user can read \ + generic diabetes content anywhere — the value here is that you're interpreting THEIR data. + RESPONSE FORMAT — you MUST use exactly this structure: SUMMARY: - Write 2-4 sentences summarizing the user's glucose control for this period. \ - Mention TIR, average glucose, and any notable patterns. Use **bold** for key numbers. + Write 2-4 sentences summarizing this person's glucose control for this period, citing \ + their specific TIR, average glucose, time below/above range, and any notable patterns. \ + Use **bold** for key numbers. HIGHLIGHTS: - - First key observation (one sentence) - - Second key observation (one sentence) - - Third key observation (one sentence) + - First key observation citing their specific data (one sentence) + - Second key observation citing their specific data (one sentence) + - Third key observation citing their specific data (one sentence) - Keep it concise and actionable. Reference actual numbers from the data. + Keep it concise and actionable. Every highlight must include at least one specific number \ + from their data. """ } From 02f475fca97b6d4cf40a28090317a64fbb5366fe Mon Sep 17 00:00:00 2001 From: Taylor Date: Sun, 15 Feb 2026 15:18:20 -0800 Subject: [PATCH 13/36] =?UTF-8?q?Fix=20Logger=20member:=20.default()=20?= =?UTF-8?q?=E2=86=92=20.warning()=20in=20guardrail=20validation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 --- Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index e1881e27c4..6ae69d6fb5 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -512,7 +512,7 @@ final class LoopInsights_AIAnalysis { // Warn (but pass through): values outside recommended bounds if classification != .withinRecommended { - LoopInsights_FeatureFlags.log.default( + LoopInsights_FeatureFlags.log.warning( "Guardrail WARNING: \(settingType.displayName) proposed \(block.proposedValue) at \(block.startTimeFormatted) — outside recommended range" ) } From 4957511466032aa7b67b7303b636415a22101bed Mon Sep 17 00:00:00 2001 From: Taylor Date: Mon, 16 Feb 2026 10:25:10 -0800 Subject: [PATCH 14/36] Add insulin type to LoopInsights AI analysis Passes the user's insulin type (e.g. Fiasp, Novolog) into the therapy snapshot and AI prompts so the model can distinguish timing issues from dosing issues based on pharmacokinetics. --- .../LoopInsights/LoopInsights_Models.swift | 1 + .../LoopInsights_AIAnalysis.swift | 19 +++++++++++++++++++ .../LoopInsights_DataAggregator.swift | 3 +++ 3 files changed, 23 insertions(+) diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 5a66af3e60..5836cc0d8d 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -720,6 +720,7 @@ struct LoopInsightsTherapySnapshot: Codable { let basalRateItems: [LoopInsightsScheduleItem] let insulinSensitivityItems: [LoopInsightsScheduleItem] let carbRatioItems: [LoopInsightsScheduleItem] + let insulinTypeName: String? let capturedAt: Date struct LoopInsightsScheduleItem: Codable, Identifiable { diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index 6ae69d6fb5..c780c69b9f 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -179,6 +179,20 @@ final class LoopInsights_AIAnalysis { - CAFFEINE: Active caffeine >100mg can increase insulin resistance and glucose variability. \ Factor caffeine timing into your assessment of glucose patterns, especially morning highs. + INSULIN TYPE CONTEXT — When insulin type data is provided: + - RAPID-ACTING (Novolog/Humalog/Apidra): Onset ~15 min, peak activity ~75 min, duration ~6 hrs. \ + Standard absorption profile. Post-meal glucose should begin dropping within 60-90 min of bolus. \ + Pre-bolusing 15-20 min before meals is effective. Corrections take 2-3 hrs to fully resolve. + - ULTRA-RAPID (Fiasp/Lyumjev): Onset ~2-5 min, peak activity ~55 min, duration ~6 hrs. \ + Faster onset and earlier peak means: \ + Post-meal spikes should be smaller — if spike is still large, CR is more likely the issue (not timing). \ + Corrections resolve faster (~1.5-2 hrs) — if glucose stays high after correction, ISF is likely too high. \ + Less tail stacking risk — basal adjustments can be slightly more aggressive per time block. \ + Pre-bolusing is less critical — a large spike despite on-time bolusing strongly suggests weak CR. + - Use insulin type to distinguish TIMING issues from DOSING issues. A Novolog user with post-meal \ + spikes that resolve by hour 3 may need more pre-bolus time, not a CR change. A Fiasp user with \ + the same pattern likely needs a CR adjustment since Fiasp should already be active. + RESPONSE FORMAT: Respond with valid JSON in this exact structure: { @@ -259,6 +273,11 @@ final class LoopInsights_AIAnalysis { prompt += "- \(formatTime(item.startTime)): \(String(format: "%.1f", item.value)) g/U\n" } + if let insulinType = settings.insulinTypeName { + prompt += "\n### Insulin Type\n" + prompt += "- Currently using: \(insulinType)\n" + } + prompt += "\n" // Glucose stats diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index ec2e498d39..a4c2654a14 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -155,10 +155,13 @@ final class LoopInsights_DataAggregator { LoopInsightsTherapySnapshot.LoopInsightsScheduleItem(startTime: $0.startTime, value: $0.value) } ?? [] + let insulinTypeName = settings.insulinType?.title + return LoopInsightsTherapySnapshot( basalRateItems: basalItems, insulinSensitivityItems: isfItems, carbRatioItems: crItems, + insulinTypeName: insulinTypeName, capturedAt: Date() ) } From c4d898568e789812c43e4d4cc2cbcb2298112646 Mon Sep 17 00:00:00 2001 From: Taylor Date: Tue, 17 Feb 2026 13:51:18 -0800 Subject: [PATCH 15/36] Add alcohol tracker with delayed hypoglycemia risk model 2 new files, 7 modified. Tracks standard drinks with linear metabolism (~1 drink/hour), computes delayed hypo risk (4-24h window, 8-12h peak), and injects alcohol context into AI analysis. Includes preset grid, custom entry, edit sheet, and risk banner UI. --- Loop.xcodeproj/project.pbxproj | 8 + Loop/Localizable.xcstrings | 150 ++++++- .../LoopInsights_Coordinator.swift | 9 + .../LoopInsights/LoopInsights_Models.swift | 4 + .../LoopInsights_Phase5Models.swift | 64 ++- .../LoopInsights_FeatureFlags.swift | 7 + .../LoopInsights_AIAnalysis.swift | 60 ++- .../LoopInsights_AlcoholTracker.swift | 237 ++++++++++ .../LoopInsights_AlcoholLogView.swift | 406 ++++++++++++++++++ .../LoopInsights_DashboardView.swift | 34 +- .../LoopInsights_SettingsView.swift | 12 + 11 files changed, 968 insertions(+), 23 deletions(-) create mode 100644 Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index e20035d467..d69a5779bf 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -623,6 +623,8 @@ 51352D31C402E3F02651F5D2 /* LoopInsights_AGPChartView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B71CC769321E323ACED2E8EC /* LoopInsights_AGPChartView.swift */; }; 230C0B8EE9C8E341C7D3C395 /* LoopInsights_MealInsightsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9C47D229ABCAB8F4394631D /* LoopInsights_MealInsightsView.swift */; }; 4CC0E7120DEF811F7D268665 /* LoopInsights_CaffeineLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */; }; + 08484BF38BCF05D6013FC659 /* LoopInsights_AlcoholTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB2DBFF0339A59DE50B5E79 /* LoopInsights_AlcoholTracker.swift */; }; + 5750459159D6F9324C3CC23F /* LoopInsights_AlcoholLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A1F607877F41965FF710D61 /* LoopInsights_AlcoholLogView.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1479,6 +1481,8 @@ B71CC769321E323ACED2E8EC /* LoopInsights_AGPChartView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AGPChartView.swift; sourceTree = ""; }; D9C47D229ABCAB8F4394631D /* LoopInsights_MealInsightsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_MealInsightsView.swift; sourceTree = ""; }; 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_CaffeineLogView.swift; sourceTree = ""; }; + BAB2DBFF0339A59DE50B5E79 /* LoopInsights_AlcoholTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AlcoholTracker.swift; sourceTree = ""; }; + 6A1F607877F41965FF710D61 /* LoopInsights_AlcoholLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AlcoholLogView.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2770,6 +2774,7 @@ B71CC769321E323ACED2E8EC /* LoopInsights_AGPChartView.swift */, D9C47D229ABCAB8F4394631D /* LoopInsights_MealInsightsView.swift */, 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */, + 6A1F607877F41965FF710D61 /* LoopInsights_AlcoholLogView.swift */, ); path = LoopInsights; sourceTree = ""; @@ -2798,6 +2803,7 @@ 4C86CC2627D9F765D1343AE0 /* LoopInsights_FoodResponseAnalyzer.swift */, B3C90FF4FDA0C10D7AA5F0AF /* LoopInsights_CaffeineTracker.swift */, 0A8AD126B8E7A33598AE1087 /* LoopInsights_NightscoutImporter.swift */, + BAB2DBFF0339A59DE50B5E79 /* LoopInsights_AlcoholTracker.swift */, ); path = LoopInsights; sourceTree = ""; @@ -3785,6 +3791,8 @@ 51352D31C402E3F02651F5D2 /* LoopInsights_AGPChartView.swift in Sources */, 230C0B8EE9C8E341C7D3C395 /* LoopInsights_MealInsightsView.swift in Sources */, 4CC0E7120DEF811F7D268665 /* LoopInsights_CaffeineLogView.swift in Sources */, + 08484BF38BCF05D6013FC659 /* LoopInsights_AlcoholTracker.swift in Sources */, + 5750459159D6F9324C3CC23F /* LoopInsights_AlcoholLogView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index dbae7d6dc8..f0cfd27976 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -1117,6 +1117,50 @@ } } }, + "%@ value %.1f %@ exceeds the absolute maximum (%.1f %@). This value cannot be applied." : { + "comment" : "LoopInsights guardrail: above absolute", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ value %2$.1f %3$@ exceeds the absolute maximum (%4$.1f %5$@). This value cannot be applied." + } + } + } + }, + "%@ value %.1f %@ exceeds the recommended maximum (%.1f %@). Consult your healthcare provider before applying." : { + "comment" : "LoopInsights guardrail: above recommended", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ value %2$.1f %3$@ exceeds the recommended maximum (%4$.1f %5$@). Consult your healthcare provider before applying." + } + } + } + }, + "%@ value %.1f %@ is below the absolute minimum (%.1f %@). This value cannot be applied." : { + "comment" : "LoopInsights guardrail: below absolute", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ value %2$.1f %3$@ is below the absolute minimum (%4$.1f %5$@). This value cannot be applied." + } + } + } + }, + "%@ value %.1f %@ is below the recommended minimum (%.1f %@). Consult your healthcare provider before applying." : { + "comment" : "LoopInsights guardrail: below recommended", + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$@ value %2$.1f %3$@ is below the recommended minimum (%4$.1f %5$@). Consult your healthcare provider before applying." + } + } + } + }, "%@." : { "comment" : "Appends a full-stop to a statement", "extractionState" : "manual", @@ -3313,6 +3357,9 @@ } } }, + "⚠️ Basal Rate changes carry higher risk than other settings. Basal insulin delivers continuously — including overnight while you sleep. Changes that are too aggressive can cause severe low blood sugar (hypoglycemia), especially at night. Monitor your glucose closely for 3–5 days after applying this change." : { + "comment" : "LoopInsights basal rate safety warning" + }, "3 Days" : { "comment" : "LoopInsights analysis period: 3 days" }, @@ -3448,7 +3495,7 @@ } }, "24h Total" : { - "comment" : "LoopInsights caffeine 24h total" + "comment" : "LoopInsights alcohol 24h total\nLoopInsights caffeine 24h total" }, "30 Days" : { "comment" : "LoopInsights analysis period: 30 days" @@ -5475,7 +5522,7 @@ } }, "Add Entry" : { - "comment" : "LoopInsights caffeine add entry" + "comment" : "LoopInsights alcohol add entry\nLoopInsights caffeine add entry" }, "Add Goal" : { "comment" : "LoopInsights add goal title" @@ -5987,6 +6034,15 @@ "AI-powered therapy settings analysis" : { "comment" : "LoopInsights settings descriptive text" }, + "Alcohol suppresses liver glucose production, causing delayed low blood sugar 4-24 hours after drinking." : { + "comment" : "LoopInsights alcohol risk description" + }, + "Alcohol Tracker" : { + "comment" : "LoopInsights alcohol button\nLoopInsights alcohol title" + }, + "Alcohol Tracking" : { + "comment" : "LoopInsights alcohol toggle" + }, "Alert Management" : { "comment" : "Alert Permissions button text\nTitle of alert management screen", "localizations" : { @@ -10544,6 +10600,9 @@ } } }, + "Cannot Apply" : { + "comment" : "LoopInsights apply blocked title" + }, "Carb effects" : { "comment" : "Details for missing data error when carb effects are missing", "localizations" : { @@ -14586,11 +14645,14 @@ } } }, + "Custom Alcohol Entry" : { + "comment" : "LoopInsights custom alcohol header" + }, "Custom Caffeine Entry" : { "comment" : "LoopInsights custom caffeine header" }, "Custom Entry" : { - "comment" : "LoopInsights caffeine custom entry" + "comment" : "LoopInsights alcohol custom entry\nLoopInsights caffeine custom entry" }, "Custom Goal" : { "comment" : "LoopInsights goal type: custom" @@ -15622,7 +15684,7 @@ } }, "Delete Entry" : { - "comment" : "LoopInsights delete caffeine entry" + "comment" : "LoopInsights delete alcohol entry\nLoopInsights delete caffeine entry" }, "Delete Food" : { "localizations" : { @@ -17035,6 +17097,10 @@ } } }, + "drinks" : { + "comment" : "A unit of measurement for alcohol consumption.", + "isCommentAutoGenerated" : true + }, "Dry Wit" : { "comment" : "LoopInsights personality: dry wit" }, @@ -17133,8 +17199,11 @@ "Edit Caffeine" : { "comment" : "LoopInsights edit caffeine title" }, + "Edit Drink" : { + "comment" : "LoopInsights edit alcohol title" + }, "Edit Entry" : { - "comment" : "LoopInsights edit caffeine header" + "comment" : "LoopInsights edit alcohol header\nLoopInsights edit caffeine header" }, "Enable\nBluetooth" : { "comment" : "Message to the user to enable bluetooth", @@ -18310,6 +18379,12 @@ } } }, + "Est. Clear" : { + "comment" : "LoopInsights alcohol est clear" + }, + "Estimated Alcohol Level" : { + "comment" : "LoopInsights alcohol level label" + }, "Estimated Caffeine Level" : { "comment" : "LoopInsights caffeine level label" }, @@ -21156,7 +21231,7 @@ "comment" : "LoopInsights HealthKit permissions configured" }, "High" : { - "comment" : "LoopInsights TIR high\nLoopInsights confidence: high\nLoopInsights legend: high" + "comment" : "LoopInsights TIR high\nLoopInsights alcohol risk high\nLoopInsights confidence: high\nLoopInsights legend: high" }, "High Glucose" : { "localizations" : { @@ -21210,6 +21285,9 @@ } } }, + "High Hypoglycemia Risk" : { + "comment" : "LoopInsights alcohol high risk title" + }, "High Only" : { "comment" : "LoopInsights confidence filter: high only" }, @@ -21478,6 +21556,9 @@ "comment" : "A placeholder text for the URL of a user's Nightscout site.", "isCommentAutoGenerated" : true }, + "Hypo Risk" : { + "comment" : "LoopInsights alcohol hypo risk" + }, "If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." : { "comment" : "Focus modes descriptive text (1: app name)", "localizations" : { @@ -24473,6 +24554,9 @@ "comment" : "The title of a section in the live activity settings view, related to lock screen, dynamic island, or carplay.", "isCommentAutoGenerated" : true }, + "Log alcohol intake to help the AI account for delayed hypoglycemia risk. Tracks standard drinks with linear metabolism." : { + "comment" : "LoopInsights alcohol description" + }, "Log caffeine intake to help the AI correlate caffeine with glucose patterns. Uses a 5.7-hour half-life decay model." : { "comment" : "LoopInsights caffeine description" }, @@ -25568,7 +25652,7 @@ "comment" : "LoopInsights settings title" }, "Low" : { - "comment" : "LoopInsights TIR low\nLoopInsights confidence: low\nLoopInsights legend: low" + "comment" : "LoopInsights TIR low\nLoopInsights alcohol risk low\nLoopInsights confidence: low\nLoopInsights legend: low" }, "Low Glucose" : { "comment" : "Title for bolus screen warning when glucose is below glucose warning limit.\nTitle for bolus screen warning when glucose is below suspend threshold, but a bolus is recommended", @@ -25653,6 +25737,9 @@ } } }, + "Low Hypoglycemia Risk" : { + "comment" : "LoopInsights alcohol low risk title" + }, "Manage Permissions in Settings" : { "comment" : "Manage Permissions in Settings button text", "localizations" : { @@ -26819,6 +26906,12 @@ "Model" : { "comment" : "LoopInsights model label" }, + "Moderate" : { + "comment" : "LoopInsights alcohol risk moderate" + }, + "Moderate Hypoglycemia Risk" : { + "comment" : "LoopInsights alcohol moderate risk title" + }, "Momentum effects" : { "comment" : "Details for missing data error when momentum effects are missing", "localizations" : { @@ -26938,6 +27031,9 @@ } } }, + "Monitor glucose closely, especially overnight." : { + "comment" : "LoopInsights alcohol high risk warning" + }, "Monthly" : { "comment" : "LoopInsights trends tab: monthly" }, @@ -27705,6 +27801,9 @@ "Nightscout Import" : { "comment" : "LoopInsights nightscout toggle" }, + "No alcohol entries yet. Tap a preset above to log intake." : { + "comment" : "LoopInsights no alcohol entries" + }, "No alert — suggestions are available when you next open LoopInsights." : { "comment" : "LoopInsights notification style desc: silent" }, @@ -28546,7 +28645,7 @@ } }, "None" : { - "comment" : "Indicates no favorite food is selected", + "comment" : "Indicates no favorite food is selected\nLoopInsights alcohol risk none", "localizations" : { "ar" : { "stringUnit" : { @@ -29638,6 +29737,12 @@ "Once Weekly" : { "comment" : "LoopInsights monitor frequency: weekly" }, + "One or more proposed values are outside safe clinical bounds. This suggestion cannot be applied." : { + "comment" : "LoopInsights apply absolute block message" + }, + "One or more values are outside safe clinical bounds and cannot be applied." : { + "comment" : "LoopInsights guardrail absolute block message" + }, "One-Tap Apply" : { "comment" : "LoopInsights apply mode: apply with confirmation" }, @@ -32427,7 +32532,7 @@ } }, "Quick Add" : { - "comment" : "LoopInsights caffeine quick add header" + "comment" : "LoopInsights alcohol quick add header\nLoopInsights caffeine quick add header" }, "QUIET HOURS" : { "comment" : "LoopInsights monitor quiet hours header" @@ -32698,7 +32803,7 @@ "comment" : "LoopInsights pattern: rebound highs" }, "Recent Entries" : { - "comment" : "LoopInsights caffeine recent entries" + "comment" : "LoopInsights alcohol recent entries\nLoopInsights caffeine recent entries" }, "Recent Meals" : { "comment" : "LoopInsights meal tab: recent" @@ -33890,12 +33995,18 @@ "Rise: %+.0f mg/dL" : { "comment" : "LoopInsights meal glucose rise" }, + "Risk window until %@." : { + "comment" : "LoopInsights alcohol risk window" + }, "Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { "comment" : "LoopInsights analysis period description" }, "Run an analysis from the LoopInsights Dashboard to generate your first suggestions." : { "comment" : "LoopInsights empty history message" }, + "Safety Warning" : { + "comment" : "LoopInsights apply safety warning title\nLoopInsights guardrail warning title" + }, "Save" : { "comment" : "Save goal", "localizations" : { @@ -34038,7 +34149,7 @@ } }, "Save Changes" : { - "comment" : "LoopInsights save caffeine edit" + "comment" : "LoopInsights save alcohol edit\nLoopInsights save caffeine edit" }, "Save without Bolusing" : { "comment" : "Button text to save carbs and/or manual glucose entry without a bolus", @@ -35297,6 +35408,12 @@ "Standard Deviation" : { "comment" : "LoopInsights std dev label" }, + "Standard Drinks" : { + "comment" : "LoopInsights alcohol amount" + }, + "Standard Drinks (e.g. 1.5)" : { + "comment" : "LoopInsights alcohol amount placeholder" + }, "Start time is out of range: %@" : { "comment" : "Carb error description: invalid start time is out of range.", "localizations" : { @@ -37799,6 +37916,9 @@ } } }, + "These values are outside the typical recommended range. Consult your healthcare provider before applying." : { + "comment" : "LoopInsights guardrail consult message" + }, "Thinking..." : { "comment" : "LoopInsights chat: AI thinking" }, @@ -37874,7 +37994,7 @@ "comment" : "LoopInsights revert confirmation message" }, "Time" : { - "comment" : "LoopInsights caffeine time" + "comment" : "LoopInsights alcohol time\nLoopInsights caffeine time" }, "Time in Range" : { "comment" : "LoopInsights TIR card title\nLoopInsights goal type: TIR target" @@ -38337,6 +38457,12 @@ } } }, + "Type" : { + "comment" : "LoopInsights alcohol source" + }, + "Type (e.g. Margarita)" : { + "comment" : "LoopInsights alcohol source placeholder" + }, "U" : { "comment" : "The short unit display string for international units of insulin", "localizations" : { diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 6321835b5e..e52141046e 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -29,6 +29,7 @@ final class LoopInsights_Coordinator: ObservableObject { let goalStore: LoopInsights_GoalStore let healthKitManager: LoopInsights_HealthKitManager? let caffeineTracker: LoopInsights_CaffeineTracker + let alcoholTracker: LoopInsights_AlcoholTracker /// Background monitor for proactive suggestions (lazy-initialized) lazy var backgroundMonitor: LoopInsights_BackgroundMonitor = LoopInsights_BackgroundMonitor(coordinator: self) @@ -72,6 +73,7 @@ final class LoopInsights_Coordinator: ObservableObject { self.goalStore = LoopInsights_GoalStore.shared self.caffeineTracker = LoopInsights_CaffeineTracker.shared self.caffeineTracker.healthKitManager = hkManager + self.alcoholTracker = LoopInsights_AlcoholTracker.shared } /// Initialize with test data fixtures (for simulator/developer mode). @@ -86,6 +88,7 @@ final class LoopInsights_Coordinator: ObservableObject { self.suggestionStore = LoopInsights_SuggestionStore.shared self.goalStore = LoopInsights_GoalStore.shared self.caffeineTracker = LoopInsights_CaffeineTracker.shared + self.alcoholTracker = LoopInsights_AlcoholTracker.shared } /// Factory method: creates a Coordinator with test data if available and enabled, @@ -191,6 +194,12 @@ final class LoopInsights_Coordinator: ObservableObject { if !caffeineCtx.isEmpty { context.append(caffeineCtx) } } + // Alcohol context + if LoopInsights_FeatureFlags.alcoholTrackingEnabled { + let alcoholCtx = alcoholTracker.buildAlcoholPromptContext() + if !alcoholCtx.isEmpty { context.append(alcoholCtx) } + } + guard !context.isEmpty else { return nil } return context.joined(separator: "\n") } diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 5836cc0d8d..ab9769336a 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -105,6 +105,10 @@ struct LoopInsights_SafetyGuardrails { /// Maximum allowed percentage change per analysis step (backstop) static let maxChangePercent: Double = 25.0 + /// Stricter limit for basal rate — basal delivers insulin continuously (including overnight) + /// so changes compound over hours and carry higher hypoglycemia risk than CR or ISF changes. + static let maxBasalChangePercent: Double = 15.0 + /// Classify a value against the guardrail bounds for a setting type static func classify(value: Double, settingType: LoopInsightsSettingType) -> Classification { let (recMin, recMax, absMin, absMax) = bounds(for: settingType) diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index 24c1538b1c..15c36b9e0d 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -137,14 +137,68 @@ struct LoopInsightsCaffeinePreset: Identifiable { let icon: String // SF Symbol name static let defaults: [LoopInsightsCaffeinePreset] = [ - LoopInsightsCaffeinePreset(name: "Espresso", milligrams: 63, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Coffee (Small)", milligrams: 95, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Coffee (Medium)", milligrams: 142, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Coffee (Large)", milligrams: 190, icon: "cup.and.saucer.fill"), + // Left column // Right column + LoopInsightsCaffeinePreset(name: "Coffee (sm)", milligrams: 95, icon: "cup.and.saucer.fill"), LoopInsightsCaffeinePreset(name: "Tea (Green)", milligrams: 28, icon: "leaf.fill"), + LoopInsightsCaffeinePreset(name: "Coffee (med)", milligrams: 142, icon: "cup.and.saucer.fill"), LoopInsightsCaffeinePreset(name: "Tea (Black)", milligrams: 47, icon: "leaf.fill"), - LoopInsightsCaffeinePreset(name: "Energy Drink", milligrams: 80, icon: "bolt.fill"), + LoopInsightsCaffeinePreset(name: "Coffee (lg)", milligrams: 190, icon: "cup.and.saucer.fill"), LoopInsightsCaffeinePreset(name: "Cola", milligrams: 34, icon: "drop.fill"), + LoopInsightsCaffeinePreset(name: "Espresso", milligrams: 63, icon: "cup.and.saucer.fill"), + LoopInsightsCaffeinePreset(name: "Energy Drink", milligrams: 80, icon: "bolt.fill"), + ] +} + +// MARK: - Alcohol + +/// A single alcohol intake entry +struct LoopInsightsAlcoholEntry: Identifiable, Codable { + let id: UUID + let timestamp: Date + let standardDrinks: Double // 1.0 = one standard drink (14g pure alcohol) + let source: String // e.g. "Beer (Regular)", "Wine (Red)" + + init(id: UUID = UUID(), timestamp: Date, standardDrinks: Double, source: String) { + self.id = id + self.timestamp = timestamp + self.standardDrinks = standardDrinks + self.source = source + } +} + +/// Delayed hypoglycemia risk level from alcohol consumption +enum LoopInsightsAlcoholHypoRisk: String, Codable { + case none, low, moderate, high +} + +/// Current alcohol state computed from entries with linear metabolism +struct LoopInsightsAlcoholState: Codable { + let currentAlcoholLevel: Double // Estimated standard drinks remaining + let estimatedClearTime: Date? // When alcohol will be fully metabolized + let hypoRiskLevel: LoopInsightsAlcoholHypoRisk + let hypoRiskWindowEnd: Date? // End of delayed hypoglycemia risk window + let totalDrinksLast24h: Double // Total standard drinks in last 24h + let entriesLast24h: Int // Number of entries in last 24h + let lastIntakeTime: Date? // When the last drink was consumed +} + +/// Alcohol preset for quick-add +struct LoopInsightsAlcoholPreset: Identifiable { + let id = UUID() + let name: String + let standardDrinks: Double + let icon: String // SF Symbol name + + static let defaults: [LoopInsightsAlcoholPreset] = [ + // Left column // Right column + LoopInsightsAlcoholPreset(name: "Beer (Light)", standardDrinks: 1.0, icon: "mug.fill"), + LoopInsightsAlcoholPreset(name: "Wine (White)", standardDrinks: 1.0, icon: "wineglass.fill"), + LoopInsightsAlcoholPreset(name: "Beer (Regular)", standardDrinks: 1.0, icon: "mug.fill"), + LoopInsightsAlcoholPreset(name: "Spirits (neat)", standardDrinks: 1.5, icon: "drop.fill"), + LoopInsightsAlcoholPreset(name: "Beer (Craft/IPA)", standardDrinks: 1.5, icon: "mug.fill"), + LoopInsightsAlcoholPreset(name: "Mixed Drink", standardDrinks: 1.5, icon: "waterbottle.fill"), + LoopInsightsAlcoholPreset(name: "Wine (Red)", standardDrinks: 1.0, icon: "wineglass.fill"), + LoopInsightsAlcoholPreset(name: "Cocktail", standardDrinks: 2.0, icon: "cup.and.saucer.fill"), ] } diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index 783b84b29a..bd7a0452d5 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -36,6 +36,7 @@ struct LoopInsights_FeatureFlags { static let circadianEnabled = "LoopInsights_circadianEnabled" static let foodResponseEnabled = "LoopInsights_foodResponseEnabled" static let caffeineTrackingEnabled = "LoopInsights_caffeineTrackingEnabled" + static let alcoholTrackingEnabled = "LoopInsights_alcoholTrackingEnabled" static let nightscoutImportEnabled = "LoopInsights_nightscoutImportEnabled" static let agpChartEnabled = "LoopInsights_agpChartEnabled" } @@ -229,6 +230,12 @@ struct LoopInsights_FeatureFlags { set { defaults.set(newValue, forKey: Keys.caffeineTrackingEnabled) } } + /// Enables alcohol intake tracking and the Alcohol Log view. + static var alcoholTrackingEnabled: Bool { + get { defaults.bool(forKey: Keys.alcoholTrackingEnabled) } + set { defaults.set(newValue, forKey: Keys.alcoholTrackingEnabled) } + } + /// Enables Nightscout data import as an alternative/supplemental data source. static var nightscoutImportEnabled: Bool { get { defaults.bool(forKey: Keys.nightscoutImportEnabled) } diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index c780c69b9f..cda16d185e 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -76,6 +76,9 @@ final class LoopInsights_AIAnalysis { CLINICAL REASONING FRAMEWORK — How AID settings interact: - BASAL RATE: Controls glucose during fasting periods. Analyze overnight (12AM-6AM) and \ between-meal trends. In AID systems, the algorithm adjusts delivery around this baseline. \ + ⚠️ HIGHEST RISK SETTING — basal delivers insulin 24/7, including overnight when the user \ + is asleep. A basal rate set too high can cause severe nocturnal hypoglycemia. Always err on \ + the side of under-adjustment. \ KEY SIGNAL: If the AID algorithm is constantly delivering corrections (high correction bolus \ count) or if fasting glucose drifts up/down consistently, basal is likely wrong. \ A basal/bolus split far from 50/50 is a strong signal — high bolus % (>60%) with many \ @@ -130,7 +133,9 @@ final class LoopInsights_AIAnalysis { Only skip recommendations when TIR is good AND corrections are low AND basal/bolus is balanced. SAFETY RULES: - 1. Never suggest changes larger than 20% from current values in a single step. + 1. Never suggest CR or ISF changes larger than 20% from current values in a single step. \ + For BASAL RATE, never suggest changes larger than 10% — basal delivers insulin continuously \ + and small changes compound over hours, especially overnight. 2. Conservative changes only — under-adjust rather than over-adjust. 3. If time below range is >4%, prioritize safety (raise ISF or lower basal before anything else). 4. Suggestions are advisory only — the user and their healthcare provider make final decisions. @@ -143,6 +148,24 @@ final class LoopInsights_AIAnalysis { additional changes on top. Settings changes need time (3-7 days minimum) to show effect in the data. \ If the data predates a recent change, recommend waiting for new data before adjusting further. + BASAL RATE SAFETY — CRITICAL: + Basal rate changes carry the HIGHEST RISK of all three therapy settings. Unlike CR (which only \ + affects mealtimes) or ISF (which only affects corrections), basal insulin delivers CONTINUOUSLY — \ + including overnight while the user is asleep and cannot respond to a low. Excessive basal can cause \ + severe nocturnal hypoglycemia. Follow these rules strictly when analyzing basal rate: + 1. Maximum 10% change per time block. Even if the data shows a strong signal, limit basal changes \ + to 10% increments. It is always safer to make two small changes over two analysis cycles than one \ + large change that risks overnight lows. + 2. OVERNIGHT PERIODS (10PM–6AM) require EXTRA conservatism. If suggesting a basal INCREASE for any \ + time block that overlaps overnight hours, explicitly warn about nighttime low risk in your reasoning. \ + Prefer smaller increases (5–7%) for overnight blocks. + 3. If time below range is >2% (not just >4%), seriously consider whether basal is already too high \ + before suggesting ANY basal increase. Nighttime lows are dangerous and often go undetected. + 4. If the data shows frequent insulin suspensions or negative basal events, this is a STRONG signal \ + that basal is already too high — do NOT increase it regardless of other signals. + 5. Always include a safety note in your reasoning when suggesting basal changes, reminding the user \ + that basal changes affect overnight glucose and should be monitored closely for 3–5 days. + BIOMETRIC CONTEXT — When biometric data is provided: - HEART RATE: Elevated resting HR or HR spikes can indicate stress, illness, caffeine, or \ exercise — all affect insulin sensitivity. Morning HR acceleration may indicate caffeine \ @@ -178,6 +201,22 @@ final class LoopInsights_AIAnalysis { not necessarily CR settings. - CAFFEINE: Active caffeine >100mg can increase insulin resistance and glucose variability. \ Factor caffeine timing into your assessment of glucose patterns, especially morning highs. + - ALCOHOL: Alcohol SUPPRESSES hepatic gluconeogenesis, causing DELAYED HYPOGLYCEMIA 4-24 hours \ + after consumption, peaking at 8-12 hours. This is the OPPOSITE of caffeine's effect. \ + The liver metabolizes ~1 standard drink per hour. During metabolism, glucose production drops ~45%. \ + CRITICAL OVERNIGHT RISK: Evening drinking causes peak hypo risk during sleep (2AM-10AM). \ + The AID algorithm can suspend basal but cannot remove IOB already delivered. \ + Dose-dependent: 1-2 drinks = mild suppression, 20% basal reduction recommended overnight. \ + 3-4 drinks = moderate, higher targets + 20-30% basal reduction. \ + 5+ drinks = severe, up to 24h duration, 30-50% basal reduction. \ + AVOID AGGRESSIVE CORRECTIONS after drinking — post-meal highs from carb-containing drinks \ + will self-correct as gluconeogenesis suppression kicks in. Over-correcting causes stacking. \ + When analyzing settings with active alcohol context: \ + Do NOT recommend basal INCREASES if drinking occurred in the last 24 hours. \ + High glucose immediately after drinking is transient — not a settings problem. \ + Low glucose 8-16 hours after drinking is alcohol-induced — not necessarily a settings problem. \ + If the analysis period contains significant alcohol intake, note this as a confounding factor \ + and REDUCE confidence in all settings change recommendations. INSULIN TYPE CONTEXT — When insulin type data is provided: - RAPID-ACTING (Novolog/Humalog/Apidra): Onset ~15 min, peak activity ~75 min, duration ~6 hrs. \ @@ -463,6 +502,16 @@ final class LoopInsights_AIAnalysis { prompt += "Use the time-of-day analysis and algorithm workload metrics to identify actionable patterns. " prompt += "If supplemental context is provided above, incorporate it into your reasoning. " prompt += "If the data clearly supports adjustments, propose them. If not, return empty suggestions. " + + if settingType == .basalRate { + prompt += "\n\n⚠️ BASAL RATE REMINDER: Basal rate is the highest-risk setting to change. " + prompt += "It delivers insulin continuously, including overnight when the user is asleep. " + prompt += "Limit all proposed changes to ≤10% per time block. For overnight blocks (10PM–6AM), " + prompt += "prefer even smaller changes (5–7%). If suggesting any basal increase, you MUST include " + prompt += "a warning about monitoring for nighttime lows in your reasoning. " + prompt += "If time below range is >2%, strongly consider whether basal is already too high.\n" + } + prompt += "Respond with JSON only, no markdown formatting." return prompt @@ -536,11 +585,14 @@ final class LoopInsights_AIAnalysis { ) } - // Backstop: reject blocks with >25% change from current + // Backstop: reject blocks exceeding max change (15% for basal, 25% for CR/ISF) let changePercent = abs(block.changePercent) - if changePercent > LoopInsights_SafetyGuardrails.maxChangePercent { + let maxAllowed = settingType == .basalRate + ? LoopInsights_SafetyGuardrails.maxBasalChangePercent + : LoopInsights_SafetyGuardrails.maxChangePercent + if changePercent > maxAllowed { LoopInsights_FeatureFlags.log.error( - "Guardrail REJECTED: \(settingType.displayName) proposed \(String(format: "%.1f", block.proposedValue)) at \(block.startTimeFormatted) — \(String(format: "%.0f", changePercent))%% change exceeds \(String(format: "%.0f", LoopInsights_SafetyGuardrails.maxChangePercent))%% limit" + "Guardrail REJECTED: \(settingType.displayName) proposed \(String(format: "%.1f", block.proposedValue)) at \(block.startTimeFormatted) — \(String(format: "%.0f", changePercent))%% change exceeds \(String(format: "%.0f", maxAllowed))%% limit" ) return false } diff --git a/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift b/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift new file mode 100644 index 0000000000..757133bedb --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift @@ -0,0 +1,237 @@ +// +// LoopInsights_AlcoholTracker.swift +// Loop +// +// LoopInsights — Alcohol intake tracker with linear metabolism and hypo risk model. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +/// Tracks alcohol intake with linear metabolism model and delayed hypoglycemia risk. +/// Entries are persisted to UserDefaults. Uses ~1 standard drink/hour linear metabolism. +/// No HealthKit integration — all entries are manual. +final class LoopInsights_AlcoholTracker: ObservableObject { + + static let shared = LoopInsights_AlcoholTracker() + + /// Linear metabolism rate: ~1 standard drink per hour + private static let metabolismRate: Double = 1.0 + + /// Delayed hypoglycemia risk window: up to 24 hours after last drink + private static let hypoRiskWindowHours: Double = 24.0 + + /// Peak hypo risk window: 8-12 hours after last intake + private static let peakRiskStartHours: Double = 8.0 + private static let peakRiskEndHours: Double = 12.0 + + /// UserDefaults key for persisted entries + private static let storageKey = "LoopInsights_alcoholEntries" + + @Published private(set) var entries: [LoopInsightsAlcoholEntry] = [] + + init() { + loadEntries() + } + + // MARK: - Public API + + /// Log an alcohol intake + func logAlcohol(standardDrinks: Double, source: String, at timestamp: Date = Date()) { + let entry = LoopInsightsAlcoholEntry( + timestamp: timestamp, + standardDrinks: standardDrinks, + source: source + ) + entries.append(entry) + entries.sort { $0.timestamp > $1.timestamp } + saveEntries() + } + + /// Remove an entry + func removeEntry(_ entry: LoopInsightsAlcoholEntry) { + entries.removeAll { $0.id == entry.id } + saveEntries() + } + + /// Update an existing entry + func updateEntry(id: UUID, standardDrinks: Double, source: String, timestamp: Date) { + guard let idx = entries.firstIndex(where: { $0.id == id }) else { return } + entries[idx] = LoopInsightsAlcoholEntry( + id: id, + timestamp: timestamp, + standardDrinks: standardDrinks, + source: source + ) + entries.sort { $0.timestamp > $1.timestamp } + saveEntries() + } + + /// Current alcohol state computed from all entries using linear metabolism + func currentState(at now: Date = Date()) -> LoopInsightsAlcoholState { + var currentLevel: Double = 0 + var totalLast24h: Double = 0 + var entriesLast24h = 0 + var lastIntake: Date? + + let twentyFourHoursAgo = now.addingTimeInterval(-24 * 3600) + + // Sort entries chronologically for sequential metabolism + let chronological = entries.sorted { $0.timestamp < $1.timestamp } + + // Linear metabolism: process entries in order, each drink adds to the queue + // The liver metabolizes ~1 drink/hour regardless of how many are queued + var totalConsumed: Double = 0 + var firstDrinkTime: Date? + + for entry in chronological { + guard entry.timestamp <= now else { continue } + + if firstDrinkTime == nil { + firstDrinkTime = entry.timestamp + } + + totalConsumed += entry.standardDrinks + + if entry.timestamp >= twentyFourHoursAgo { + totalLast24h += entry.standardDrinks + entriesLast24h += 1 + } + + if lastIntake == nil || entry.timestamp > (lastIntake ?? .distantPast) { + lastIntake = entry.timestamp + } + } + + // Calculate current level: total consumed minus what's been metabolized + if let firstTime = firstDrinkTime { + let hoursElapsed = now.timeIntervalSince(firstTime) / 3600 + let metabolized = hoursElapsed * Self.metabolismRate + currentLevel = max(0, totalConsumed - metabolized) + } + + // Estimated clear time + var clearTime: Date? + if currentLevel > 0 { + let hoursToCllear = currentLevel / Self.metabolismRate + clearTime = now.addingTimeInterval(hoursToCllear * 3600) + } + + // Compute hypo risk + let hypoRisk = computeHypoRisk(totalDrinksLast24h: totalLast24h, lastIntakeTime: lastIntake, at: now) + + // Hypo risk window end: 24 hours after last intake + var riskWindowEnd: Date? + if let lastTime = lastIntake, hypoRisk != .none { + riskWindowEnd = lastTime.addingTimeInterval(Self.hypoRiskWindowHours * 3600) + } + + return LoopInsightsAlcoholState( + currentAlcoholLevel: currentLevel, + estimatedClearTime: clearTime, + hypoRiskLevel: hypoRisk, + hypoRiskWindowEnd: riskWindowEnd, + totalDrinksLast24h: totalLast24h, + entriesLast24h: entriesLast24h, + lastIntakeTime: lastIntake + ) + } + + // MARK: - Hypo Risk Model + + /// Compute delayed hypoglycemia risk level based on alcohol intake + private func computeHypoRisk(totalDrinksLast24h: Double, lastIntakeTime: Date?, at now: Date) -> LoopInsightsAlcoholHypoRisk { + guard totalDrinksLast24h > 0, let lastTime = lastIntakeTime else { return .none } + + let hoursSinceLastDrink = now.timeIntervalSince(lastTime) / 3600 + + // Outside the 24-hour risk window + guard hoursSinceLastDrink < Self.hypoRiskWindowHours else { return .none } + + let inPeakWindow = hoursSinceLastDrink >= Self.peakRiskStartHours && + hoursSinceLastDrink <= Self.peakRiskEndHours + + if totalDrinksLast24h >= 5 { + return .high + } else if totalDrinksLast24h >= 3 { + return inPeakWindow ? .high : .moderate + } else { // 1-2 drinks + return inPeakWindow ? .moderate : .low + } + } + + // MARK: - Prompt Context + + /// Build prompt context string for AI analysis + func buildAlcoholPromptContext(at now: Date = Date()) -> String { + let state = currentState(at: now) + guard state.entriesLast24h > 0 else { return "" } + + var ctx = "## Alcohol Intake\n" + ctx += "- Current estimated alcohol level: \(String(format: "%.1f", state.currentAlcoholLevel)) standard drinks\n" + ctx += "- Total drinks last 24h: \(String(format: "%.1f", state.totalDrinksLast24h)) (\(state.entriesLast24h) intake(s))\n" + + if let lastTime = state.lastIntakeTime { + let minutesAgo = Int(now.timeIntervalSince(lastTime) / 60) + if minutesAgo < 60 { + ctx += "- Last drink: \(minutesAgo) minutes ago\n" + } else { + ctx += "- Last drink: \(minutesAgo / 60)h \(minutesAgo % 60)m ago\n" + } + } + + if let clearTime = state.estimatedClearTime { + let formatter = DateFormatter() + formatter.timeStyle = .short + ctx += "- Estimated alcohol clearance: \(formatter.string(from: clearTime))\n" + } + + ctx += "- Delayed hypoglycemia risk: \(state.hypoRiskLevel.rawValue.uppercased())\n" + + if let riskEnd = state.hypoRiskWindowEnd { + let formatter = DateFormatter() + formatter.timeStyle = .short + ctx += "- Risk window ends: \(formatter.string(from: riskEnd))\n" + } + + if state.hypoRiskLevel == .high { + ctx += "** HIGH ALCOHOL HYPO RISK: Significant delayed hypoglycemia risk. Gluconeogenesis suppressed. Do NOT recommend basal increases. **\n" + } else if state.hypoRiskLevel == .moderate { + ctx += "** MODERATE ALCOHOL HYPO RISK: Delayed hypoglycemia risk present. Consider reduced confidence in settings changes. **\n" + } + + // List recent entries + let recentEntries = entries.filter { $0.timestamp >= now.addingTimeInterval(-24 * 3600) } + if !recentEntries.isEmpty { + ctx += "- Recent entries: " + let formatter = DateFormatter() + formatter.timeStyle = .short + ctx += recentEntries.prefix(5).map { "\(formatter.string(from: $0.timestamp)) \($0.source) (\(String(format: "%.1f", $0.standardDrinks)) drinks)" }.joined(separator: "; ") + ctx += "\n" + } + + return ctx + } + + // MARK: - Persistence + + private func loadEntries() { + guard let data = UserDefaults.standard.data(forKey: Self.storageKey), + let decoded = try? JSONDecoder().decode([LoopInsightsAlcoholEntry].self, from: data) else { + entries = [] + return + } + let cutoff = Date().addingTimeInterval(-48 * 3600) + entries = decoded.filter { $0.timestamp >= cutoff }.sorted { $0.timestamp > $1.timestamp } + } + + private func saveEntries() { + let cutoff = Date().addingTimeInterval(-48 * 3600) + let pruned = entries.filter { $0.timestamp >= cutoff } + if let data = try? JSONEncoder().encode(pruned) { + UserDefaults.standard.set(data, forKey: Self.storageKey) + } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift b/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift new file mode 100644 index 0000000000..a6a8405acb --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift @@ -0,0 +1,406 @@ +// +// LoopInsights_AlcoholLogView.swift +// Loop +// +// LoopInsights — Alcohol intake logging UI with hypo risk awareness. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Brand color for all alcohol UI +private let alcoholAmber = Color.orange + +/// Alcohol logging UI: shows current level gauge, hypo risk banner, quick-add presets, and entry log. +struct LoopInsights_AlcoholLogView: View { + + @ObservedObject var tracker: LoopInsights_AlcoholTracker + @State private var customDrinks: String = "" + @State private var customSource: String = "" + @State private var showingCustomEntry = false + @State private var editingEntry: LoopInsightsAlcoholEntry? + @State private var editDrinks: String = "" + @State private var editSource: String = "" + @State private var editTimestamp: Date = Date() + @Environment(\.dismiss) private var dismiss + + private var currentState: LoopInsightsAlcoholState { + tracker.currentState() + } + + var body: some View { + List { + currentLevelSection + if currentState.hypoRiskLevel != .none { + hypoRiskBanner + } + quickAddSection + if showingCustomEntry { + customEntrySection + } + recentEntriesSection + } + .navigationTitle(NSLocalizedString("Alcohol Tracker", comment: "LoopInsights alcohol title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button(NSLocalizedString("Done", comment: "Done button")) { + dismiss() + } + } + } + .sheet(item: $editingEntry) { entry in + editEntrySheet(entry) + } + } + + // MARK: - Current Level + + private var currentLevelSection: some View { + Section { + VStack(spacing: 12) { + // Level gauge + ZStack { + Circle() + .stroke(alcoholAmber.opacity(0.2), lineWidth: 8) + .frame(width: 100, height: 100) + + let level = min(currentState.currentAlcoholLevel, 5) + Circle() + .trim(from: 0, to: level / 5) + .stroke(gaugeColor(level), style: StrokeStyle(lineWidth: 8, lineCap: .round)) + .frame(width: 100, height: 100) + .rotationEffect(.degrees(-90)) + + VStack(spacing: 0) { + Text(String(format: "%.1f", currentState.currentAlcoholLevel)) + .font(.title2.weight(.bold)) + .foregroundColor(gaugeColor(currentState.currentAlcoholLevel)) + Text("drinks") + .font(.caption2) + .foregroundColor(.secondary) + } + } + + Text(NSLocalizedString("Estimated Alcohol Level", comment: "LoopInsights alcohol level label")) + .font(.caption) + .foregroundColor(.secondary) + + if currentState.entriesLast24h > 0 { + HStack(spacing: 16) { + VStack(spacing: 2) { + Text(String(format: "%.1f", currentState.totalDrinksLast24h)) + .font(.caption.weight(.semibold)) + .foregroundColor(alcoholAmber) + Text(NSLocalizedString("24h Total", comment: "LoopInsights alcohol 24h total")) + .font(.caption2) + .foregroundColor(.secondary) + } + VStack(spacing: 2) { + Text(riskDisplayText(currentState.hypoRiskLevel)) + .font(.caption.weight(.semibold)) + .foregroundColor(riskColor(currentState.hypoRiskLevel)) + Text(NSLocalizedString("Hypo Risk", comment: "LoopInsights alcohol hypo risk")) + .font(.caption2) + .foregroundColor(.secondary) + } + if let clearTime = currentState.estimatedClearTime { + VStack(spacing: 2) { + Text(Self.timeFormatter.string(from: clearTime)) + .font(.caption.weight(.semibold)) + .foregroundColor(alcoholAmber) + Text(NSLocalizedString("Est. Clear", comment: "LoopInsights alcohol est clear")) + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + } + } + .frame(maxWidth: .infinity) + .padding(.vertical, 8) + } + } + + // MARK: - Hypo Risk Banner + + private var hypoRiskBanner: some View { + Section { + HStack(spacing: 10) { + Image(systemName: "exclamationmark.triangle.fill") + .font(.title3) + .foregroundColor(riskColor(currentState.hypoRiskLevel)) + VStack(alignment: .leading, spacing: 4) { + Text(riskBannerTitle(currentState.hypoRiskLevel)) + .font(.subheadline.weight(.semibold)) + .foregroundColor(riskColor(currentState.hypoRiskLevel)) + Text(riskBannerDetail(currentState)) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) + } + } + + // MARK: - Quick Add + + private var quickAddSection: some View { + Section(header: Text(NSLocalizedString("Quick Add", comment: "LoopInsights alcohol quick add header"))) { + let presets = LoopInsightsAlcoholPreset.defaults + let columns = [GridItem(.flexible()), GridItem(.flexible())] + + LazyVGrid(columns: columns, spacing: 8) { + ForEach(presets) { preset in + Button(action: { + tracker.logAlcohol(standardDrinks: preset.standardDrinks, source: preset.name) + }) { + HStack(spacing: 6) { + Image(systemName: preset.icon) + .font(.caption) + .foregroundColor(alcoholAmber) + VStack(alignment: .leading, spacing: 1) { + Text(preset.name) + .font(.caption) + .fontWeight(.medium) + .foregroundColor(.primary) + .lineLimit(1) + Text(String(format: "%.1f drinks", preset.standardDrinks)) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + } + .padding(.horizontal, 10) + .padding(.vertical, 8) + .background(Color(.secondarySystemGroupedBackground)) + .cornerRadius(8) + } + .buttonStyle(.plain) + } + } + .listRowInsets(EdgeInsets(top: 4, leading: 4, bottom: 4, trailing: 4)) + + Button(action: { showingCustomEntry.toggle() }) { + HStack { + Image(systemName: showingCustomEntry ? "minus.circle" : "plus.circle") + Text(NSLocalizedString("Custom Entry", comment: "LoopInsights alcohol custom entry")) + } + .font(.subheadline) + .foregroundColor(alcoholAmber) + } + } + } + + // MARK: - Custom Entry + + private var customEntrySection: some View { + Section(header: Text(NSLocalizedString("Custom Alcohol Entry", comment: "LoopInsights custom alcohol header"))) { + TextField(NSLocalizedString("Standard Drinks (e.g. 1.5)", comment: "LoopInsights alcohol amount placeholder"), text: $customDrinks) + .keyboardType(.decimalPad) + TextField(NSLocalizedString("Type (e.g. Margarita)", comment: "LoopInsights alcohol source placeholder"), text: $customSource) + + Button(action: { + if let drinks = Double(customDrinks), drinks > 0 { + let source = customSource.isEmpty ? "Custom" : customSource + tracker.logAlcohol(standardDrinks: drinks, source: source) + customDrinks = "" + customSource = "" + showingCustomEntry = false + } + }) { + HStack { + Spacer() + Text(NSLocalizedString("Add Entry", comment: "LoopInsights alcohol add entry")) + .fontWeight(.medium) + Spacer() + } + .foregroundColor(.white) + .padding(.vertical, 8) + .background(Double(customDrinks) ?? 0 > 0 ? alcoholAmber : Color.gray) + .cornerRadius(8) + } + .buttonStyle(.plain) + .disabled(Double(customDrinks) ?? 0 <= 0) + } + } + + // MARK: - Recent Entries + + private var recentEntriesSection: some View { + Section(header: Text(NSLocalizedString("Recent Entries", comment: "LoopInsights alcohol recent entries"))) { + if tracker.entries.isEmpty { + Text(NSLocalizedString("No alcohol entries yet. Tap a preset above to log intake.", comment: "LoopInsights no alcohol entries")) + .font(.caption) + .foregroundColor(.secondary) + } else { + ForEach(tracker.entries.prefix(20)) { entry in + Button(action: { + editDrinks = String(format: "%.1f", entry.standardDrinks) + editSource = entry.source + editTimestamp = entry.timestamp + editingEntry = entry + }) { + HStack { + VStack(alignment: .leading, spacing: 2) { + Text(entry.source) + .font(.subheadline) + .foregroundColor(.primary) + Text(Self.dateTimeFormatter.string(from: entry.timestamp)) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + Text(String(format: "%.1f drinks", entry.standardDrinks)) + .font(.subheadline.weight(.medium)) + .foregroundColor(alcoholAmber) + } + } + .buttonStyle(.plain) + } + .onDelete { indexSet in + let entriesToDelete = indexSet.compactMap { idx -> LoopInsightsAlcoholEntry? in + guard idx < tracker.entries.count else { return nil } + return tracker.entries[idx] + } + for entry in entriesToDelete { + tracker.removeEntry(entry) + } + } + } + } + } + + // MARK: - Edit Sheet + + private func editEntrySheet(_ entry: LoopInsightsAlcoholEntry) -> some View { + NavigationView { + Form { + Section(header: Text(NSLocalizedString("Edit Entry", comment: "LoopInsights edit alcohol header"))) { + TextField(NSLocalizedString("Standard Drinks", comment: "LoopInsights alcohol amount"), text: $editDrinks) + .keyboardType(.decimalPad) + TextField(NSLocalizedString("Type", comment: "LoopInsights alcohol source"), text: $editSource) + DatePicker( + NSLocalizedString("Time", comment: "LoopInsights alcohol time"), + selection: $editTimestamp, + in: ...Date(), + displayedComponents: [.date, .hourAndMinute] + ) + } + + Section { + Button(action: { + if let drinks = Double(editDrinks), drinks > 0 { + tracker.updateEntry( + id: entry.id, + standardDrinks: drinks, + source: editSource.isEmpty ? "Custom" : editSource, + timestamp: editTimestamp + ) + editingEntry = nil + } + }) { + HStack { + Spacer() + Text(NSLocalizedString("Save Changes", comment: "LoopInsights save alcohol edit")) + .fontWeight(.medium) + .foregroundColor(.white) + Spacer() + } + .padding(.vertical, 8) + .background(Double(editDrinks) ?? 0 > 0 ? alcoholAmber : Color.gray) + .cornerRadius(8) + } + .buttonStyle(.plain) + .disabled(Double(editDrinks) ?? 0 <= 0) + + Button(role: .destructive, action: { + tracker.removeEntry(entry) + editingEntry = nil + }) { + HStack { + Spacer() + Text(NSLocalizedString("Delete Entry", comment: "LoopInsights delete alcohol entry")) + Spacer() + } + } + } + } + .navigationTitle(NSLocalizedString("Edit Drink", comment: "LoopInsights edit alcohol title")) + .navigationBarTitleDisplayMode(.inline) + .toolbar { + ToolbarItem(placement: .navigationBarLeading) { + Button(NSLocalizedString("Cancel", comment: "Cancel button")) { + editingEntry = nil + } + } + } + } + } + + // MARK: - Helpers + + /// Gauge color: amber base with red for high levels + private func gaugeColor(_ drinks: Double) -> Color { + if drinks < 2 { return alcoholAmber } + if drinks < 4 { return Color(red: 0.9, green: 0.5, blue: 0.1) } + return .red + } + + /// Risk level display text + private func riskDisplayText(_ risk: LoopInsightsAlcoholHypoRisk) -> String { + switch risk { + case .none: return NSLocalizedString("None", comment: "LoopInsights alcohol risk none") + case .low: return NSLocalizedString("Low", comment: "LoopInsights alcohol risk low") + case .moderate: return NSLocalizedString("Moderate", comment: "LoopInsights alcohol risk moderate") + case .high: return NSLocalizedString("High", comment: "LoopInsights alcohol risk high") + } + } + + /// Risk level color + private func riskColor(_ risk: LoopInsightsAlcoholHypoRisk) -> Color { + switch risk { + case .none: return .green + case .low: return .yellow + case .moderate: return .orange + case .high: return .red + } + } + + /// Risk banner title + private func riskBannerTitle(_ risk: LoopInsightsAlcoholHypoRisk) -> String { + switch risk { + case .none: return "" + case .low: return NSLocalizedString("Low Hypoglycemia Risk", comment: "LoopInsights alcohol low risk title") + case .moderate: return NSLocalizedString("Moderate Hypoglycemia Risk", comment: "LoopInsights alcohol moderate risk title") + case .high: return NSLocalizedString("High Hypoglycemia Risk", comment: "LoopInsights alcohol high risk title") + } + } + + /// Risk banner detail text + private func riskBannerDetail(_ state: LoopInsightsAlcoholState) -> String { + var detail = NSLocalizedString("Alcohol suppresses liver glucose production, causing delayed low blood sugar 4-24 hours after drinking.", comment: "LoopInsights alcohol risk description") + if let riskEnd = state.hypoRiskWindowEnd { + detail += " " + String(format: NSLocalizedString("Risk window until %@.", comment: "LoopInsights alcohol risk window"), Self.timeFormatter.string(from: riskEnd)) + } + if state.hypoRiskLevel == .high { + detail += " " + NSLocalizedString("Monitor glucose closely, especially overnight.", comment: "LoopInsights alcohol high risk warning") + } + return detail + } + + private static let timeFormatter: DateFormatter = { + let f = DateFormatter() + f.timeStyle = .short + return f + }() + + private static let dateTimeFormatter: DateFormatter = { + let f = DateFormatter() + f.dateStyle = .short + f.timeStyle = .short + return f + }() +} diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index 1162ccf4ca..b50f5eb11a 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -31,6 +31,7 @@ struct LoopInsights_DashboardView: View { @State private var showingGoals = false @State private var showingMealInsights = false @State private var showingCaffeineLog = false + @State private var showingAlcoholLog = false @State private var selectedRecord: LoopInsightsSuggestionRecord? @State private var developerTapCount = 0 @@ -174,6 +175,11 @@ struct LoopInsights_DashboardView: View { LoopInsights_CaffeineLogView(tracker: viewModel.coordinator.caffeineTracker) } } + .sheet(isPresented: $showingAlcoholLog) { + NavigationView { + LoopInsights_AlcoholLogView(tracker: viewModel.coordinator.alcoholTracker) + } + } .overlay(alignment: .top) { if let monitor = viewModel.backgroundMonitor, monitor.showBanner, @@ -609,12 +615,22 @@ struct LoopInsights_DashboardView: View { ) } + var message = "" + if record.suggestion.hasGuardrailWarning { let warnings = record.suggestion.guardrailWarnings.joined(separator: "\n") - return warnings + "\n\n" + disclaimer + message += warnings + "\n\n" } - return disclaimer + if record.suggestion.settingType == .basalRate { + message += NSLocalizedString( + "⚠️ Basal Rate changes carry higher risk than other settings. Basal insulin delivers continuously — including overnight while you sleep. Changes that are too aggressive can cause severe low blood sugar (hypoglycemia), especially at night. Monitor your glucose closely for 3–5 days after applying this change.", + comment: "LoopInsights basal rate safety warning" + ) + "\n\n" + } + + message += disclaimer + return message } private func settingStatusColor(_ status: LoopInsightsSettingStatus) -> Color { @@ -963,6 +979,20 @@ struct LoopInsights_DashboardView: View { } } + if LoopInsights_FeatureFlags.alcoholTrackingEnabled { + Button(action: { showingAlcoholLog = true }) { + HStack { + Image(systemName: "wineglass.fill") + .foregroundColor(.orange) + Text(NSLocalizedString("Alcohol Tracker", comment: "LoopInsights alcohol button")) + Spacer() + Image(systemName: "chevron.right") + .font(.caption) + .foregroundColor(.secondary) + } + } + } + if LoopInsights_FeatureFlags.caffeineTrackingEnabled { Button(action: { showingCaffeineLog = true }) { HStack { diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 61704cdf7d..5d9aaa679c 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -55,6 +55,7 @@ struct LoopInsights_SettingsView: View { @State private var circadianEnabled = LoopInsights_FeatureFlags.circadianEnabled @State private var foodResponseEnabled = LoopInsights_FeatureFlags.foodResponseEnabled @State private var caffeineTrackingEnabled = LoopInsights_FeatureFlags.caffeineTrackingEnabled + @State private var alcoholTrackingEnabled = LoopInsights_FeatureFlags.alcoholTrackingEnabled @State private var nightscoutImportEnabled = LoopInsights_FeatureFlags.nightscoutImportEnabled @State private var agpChartEnabled = LoopInsights_FeatureFlags.agpChartEnabled @@ -135,6 +136,7 @@ struct LoopInsights_SettingsView: View { circadianEnabled = LoopInsights_FeatureFlags.circadianEnabled foodResponseEnabled = LoopInsights_FeatureFlags.foodResponseEnabled caffeineTrackingEnabled = LoopInsights_FeatureFlags.caffeineTrackingEnabled + alcoholTrackingEnabled = LoopInsights_FeatureFlags.alcoholTrackingEnabled nightscoutImportEnabled = LoopInsights_FeatureFlags.nightscoutImportEnabled agpChartEnabled = LoopInsights_FeatureFlags.agpChartEnabled nightscoutConfig = LoopInsightsNightscoutConfig.load() @@ -1044,6 +1046,16 @@ struct LoopInsights_SettingsView: View { Divider() + Toggle(NSLocalizedString("Alcohol Tracking", comment: "LoopInsights alcohol toggle"), isOn: $alcoholTrackingEnabled) + .onChange(of: alcoholTrackingEnabled) { newValue in + LoopInsights_FeatureFlags.alcoholTrackingEnabled = newValue + } + Text(NSLocalizedString("Log alcohol intake to help the AI account for delayed hypoglycemia risk. Tracks standard drinks with linear metabolism.", comment: "LoopInsights alcohol description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + Toggle(NSLocalizedString("AGP Chart", comment: "LoopInsights AGP toggle"), isOn: $agpChartEnabled) .onChange(of: agpChartEnabled) { newValue in LoopInsights_FeatureFlags.agpChartEnabled = newValue From 8b7fa02a051647ecdd489ecf04b8dc0877144992 Mon Sep 17 00:00:00 2001 From: Taylor Date: Tue, 17 Feb 2026 14:26:27 -0800 Subject: [PATCH 16/36] Fix missing Combine import in AlcoholTracker ObservableObject and @Published require Combine framework. CaffeineTracker got it transitively via HealthKit import; AlcoholTracker only imported Foundation. --- Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift b/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift index 757133bedb..88dfee86af 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift @@ -9,6 +9,7 @@ // import Foundation +import Combine /// Tracks alcohol intake with linear metabolism model and delayed hypoglycemia risk. /// Entries are persisted to UserDefaults. Uses ~1 standard drink/hour linear metabolism. From 80313bdf3f4a4e6f24148b929fd3d769f24fd05b Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 18 Feb 2026 10:26:30 -0800 Subject: [PATCH 17/36] Add voice interaction to Ask LoopInsights chat Dictated questions auto-send after 2s pause and AI responses are spoken aloud via TTS. Typed questions remain text-only. Send button swaps to stop button while speaking. Replay button on voice-initiated responses. --- Loop.xcodeproj/project.pbxproj | 4 ++ .../LoopInsights/LoopInsights_Models.swift | 4 +- .../LoopInsights_VoiceService.swift | 50 ++++++++++++++ .../LoopInsights_ChatViewModel.swift | 49 +++++++++++++- .../LoopInsights/LoopInsights_ChatView.swift | 66 +++++++++++++------ 5 files changed, 151 insertions(+), 22 deletions(-) create mode 100644 Loop/Services/LoopInsights/LoopInsights_VoiceService.swift diff --git a/Loop.xcodeproj/project.pbxproj b/Loop.xcodeproj/project.pbxproj index d69a5779bf..2fd65da21f 100644 --- a/Loop.xcodeproj/project.pbxproj +++ b/Loop.xcodeproj/project.pbxproj @@ -625,6 +625,7 @@ 4CC0E7120DEF811F7D268665 /* LoopInsights_CaffeineLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */; }; 08484BF38BCF05D6013FC659 /* LoopInsights_AlcoholTracker.swift in Sources */ = {isa = PBXBuildFile; fileRef = BAB2DBFF0339A59DE50B5E79 /* LoopInsights_AlcoholTracker.swift */; }; 5750459159D6F9324C3CC23F /* LoopInsights_AlcoholLogView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A1F607877F41965FF710D61 /* LoopInsights_AlcoholLogView.swift */; }; + C43D60BE7EB18127C94178B9 /* LoopInsights_VoiceService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C90281DB9786B60AE9388CF4 /* LoopInsights_VoiceService.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -1483,6 +1484,7 @@ 50DB299AD493553DA6E1A02B /* LoopInsights_CaffeineLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_CaffeineLogView.swift; sourceTree = ""; }; BAB2DBFF0339A59DE50B5E79 /* LoopInsights_AlcoholTracker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AlcoholTracker.swift; sourceTree = ""; }; 6A1F607877F41965FF710D61 /* LoopInsights_AlcoholLogView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_AlcoholLogView.swift; sourceTree = ""; }; + C90281DB9786B60AE9388CF4 /* LoopInsights_VoiceService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoopInsights_VoiceService.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -2804,6 +2806,7 @@ B3C90FF4FDA0C10D7AA5F0AF /* LoopInsights_CaffeineTracker.swift */, 0A8AD126B8E7A33598AE1087 /* LoopInsights_NightscoutImporter.swift */, BAB2DBFF0339A59DE50B5E79 /* LoopInsights_AlcoholTracker.swift */, + C90281DB9786B60AE9388CF4 /* LoopInsights_VoiceService.swift */, ); path = LoopInsights; sourceTree = ""; @@ -3793,6 +3796,7 @@ 4CC0E7120DEF811F7D268665 /* LoopInsights_CaffeineLogView.swift in Sources */, 08484BF38BCF05D6013FC659 /* LoopInsights_AlcoholTracker.swift in Sources */, 5750459159D6F9324C3CC23F /* LoopInsights_AlcoholLogView.swift in Sources */, + C43D60BE7EB18127C94178B9 /* LoopInsights_VoiceService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index ab9769336a..7e0b2f1e53 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -966,6 +966,7 @@ struct LoopInsightsChatMessage: Identifiable { let role: Role let content: String let timestamp: Date + let voiceInitiated: Bool enum Role: String { case user @@ -973,11 +974,12 @@ struct LoopInsightsChatMessage: Identifiable { case system } - init(role: Role, content: String) { + init(role: Role, content: String, voiceInitiated: Bool = false) { self.id = UUID() self.role = role self.content = content self.timestamp = Date() + self.voiceInitiated = voiceInitiated } } diff --git a/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift b/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift new file mode 100644 index 0000000000..1f9ede2487 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift @@ -0,0 +1,50 @@ +// +// LoopInsights_VoiceService.swift +// Loop +// +// LoopInsights — Text-to-speech service for voice-initiated chat responses. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import AVFoundation +import Combine + +/// Lightweight TTS wrapper for LoopInsights chat. +/// Speaks AI responses when the user's question was dictated via keyboard mic. +final class LoopInsights_VoiceService: NSObject, ObservableObject { + @Published var isSpeaking = false + + private let synthesizer = AVSpeechSynthesizer() + + override init() { + super.init() + synthesizer.delegate = self + } + + func speak(_ text: String) { + synthesizer.stopSpeaking(at: .immediate) + let utterance = AVSpeechUtterance(string: text) + utterance.voice = AVSpeechSynthesisVoice(language: Locale.current.language.languageCode?.identifier ?? "en") + utterance.rate = AVSpeechUtteranceDefaultSpeechRate + isSpeaking = true + synthesizer.speak(utterance) + } + + func stopSpeaking() { + guard isSpeaking else { return } + synthesizer.stopSpeaking(at: .immediate) + isSpeaking = false + } +} + +extension LoopInsights_VoiceService: AVSpeechSynthesizerDelegate { + func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) { + DispatchQueue.main.async { self.isSpeaking = false } + } + + func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didCancel utterance: AVSpeechUtterance) { + DispatchQueue.main.async { self.isSpeaking = false } + } +} diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 29fe4fc3de..14f2dee455 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -20,12 +20,16 @@ final class LoopInsights_ChatViewModel: ObservableObject { @Published var isLoading = false @Published var inputText = "" @Published var errorMessage: String? + @Published var isSpeaking = false // MARK: - Dependencies private let session: LoopInsightsChatSession private let coordinator: LoopInsights_Coordinator private let serviceAdapter: LoopInsights_AIServiceAdapter + let voiceService = LoopInsights_VoiceService() + private var pendingVoiceMessage = false + private var autoSendTimer: DispatchWorkItem? private var cancellables = Set() /// Pre-built quick-ask suggestions shown when the conversation is empty @@ -48,6 +52,10 @@ final class LoopInsights_ChatViewModel: ObservableObject { session.$messages .receive(on: DispatchQueue.main) .assign(to: &$messages) + + voiceService.$isSpeaking + .receive(on: DispatchQueue.main) + .assign(to: &$isSpeaking) } // MARK: - Actions @@ -57,10 +65,16 @@ final class LoopInsights_ChatViewModel: ObservableObject { let text = inputText.trimmingCharacters(in: .whitespacesAndNewlines) guard !text.isEmpty, !isLoading else { return } + let isVoice = pendingVoiceMessage + pendingVoiceMessage = false + autoSendTimer?.cancel() + autoSendTimer = nil + inputText = "" errorMessage = nil + voiceService.stopSpeaking() - let userMessage = LoopInsightsChatMessage(role: .user, content: text) + let userMessage = LoopInsightsChatMessage(role: .user, content: text, voiceInitiated: isVoice) session.appendMessage(userMessage) isLoading = true @@ -83,11 +97,15 @@ final class LoopInsights_ChatViewModel: ObservableObject { let response = try await serviceAdapter.sendPrompt(systemPrompt, userPrompt: userPrompt) - let aiMessage = LoopInsightsChatMessage(role: .assistant, content: response) + let aiMessage = LoopInsightsChatMessage(role: .assistant, content: response, voiceInitiated: isVoice) session.appendMessage(aiMessage) isLoading = false + if isVoice { + voiceService.speak(response) + } + } catch { errorMessage = error.localizedDescription isLoading = false @@ -101,8 +119,35 @@ final class LoopInsights_ChatViewModel: ObservableObject { sendMessage() } + /// Called from the view's `.onChange(of: inputText)` to detect dictation vs typing + func handleTextChange(oldValue: String, newValue: String) { + let changeSize = newValue.count - oldValue.count + let isAppend = newValue.hasPrefix(oldValue) || oldValue.isEmpty + + if isAppend && changeSize >= 4 { + pendingVoiceMessage = true + } else if changeSize == 1 || changeSize == -1 { + pendingVoiceMessage = false + } + + autoSendTimer?.cancel() + if pendingVoiceMessage && !newValue.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { + let timer = DispatchWorkItem { [weak self] in + self?.sendMessage() + } + autoSendTimer = timer + DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: timer) + } + } + + /// Stop any active TTS playback + func stopSpeaking() { + voiceService.stopSpeaking() + } + /// Clear the conversation and start fresh func clearConversation() { + voiceService.stopSpeaking() session.clear() errorMessage = nil } diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift index 4dc6d63d9e..b0bc90d960 100644 --- a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -69,6 +69,7 @@ struct LoopInsights_ChatView: View { UINavigationBar.appearance().scrollEdgeAppearance = appearance } .onDisappear { + viewModel.stopSpeaking() let appearance = UINavigationBarAppearance() appearance.configureWithDefaultBackground() UINavigationBar.appearance().standardAppearance = appearance @@ -105,16 +106,32 @@ struct LoopInsights_ChatView: View { return HStack { if isUser { Spacer(minLength: 60) } - Text(message.content) - .font(.subheadline) - .foregroundColor(isUser ? .white : .white.opacity(0.9)) - .textSelection(.enabled) - .padding(.horizontal, 14) - .padding(.vertical, 10) - .background( - RoundedRectangle(cornerRadius: 14) - .fill(isUser ? Color.purple.opacity(0.6) : Color.white.opacity(0.08)) - ) + VStack(alignment: isUser ? .trailing : .leading, spacing: 4) { + Text(message.content) + .font(.subheadline) + .foregroundColor(isUser ? .white : .white.opacity(0.9)) + .textSelection(.enabled) + .padding(.horizontal, 14) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 14) + .fill(isUser ? Color.purple.opacity(0.6) : Color.white.opacity(0.08)) + ) + + if !isUser && message.voiceInitiated { + Button(action: { viewModel.voiceService.speak(message.content) }) { + HStack(spacing: 4) { + Image(systemName: "speaker.wave.2.fill") + .font(.caption2) + Text(NSLocalizedString("Listen", comment: "LoopInsights chat: replay TTS")) + .font(.caption2) + } + .foregroundColor(.purple.opacity(0.7)) + } + .buttonStyle(.plain) + .padding(.leading, 6) + } + } if !isUser { Spacer(minLength: 60) } } @@ -206,17 +223,28 @@ struct LoopInsights_ChatView: View { viewModel.sendMessage() } .tint(.purple) + .onChange(of: viewModel.inputText) { oldValue, newValue in + viewModel.handleTextChange(oldValue: oldValue, newValue: newValue) + } - Button(action: { viewModel.sendMessage() }) { - Image(systemName: "arrow.up.circle.fill") - .font(.title3) - .foregroundColor( - viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading - ? .white.opacity(0.2) - : .purple - ) + if viewModel.isSpeaking { + Button(action: { viewModel.stopSpeaking() }) { + Image(systemName: "stop.fill") + .font(.title3) + .foregroundColor(.red) + } + } else { + Button(action: { viewModel.sendMessage() }) { + Image(systemName: "arrow.up.circle.fill") + .font(.title3) + .foregroundColor( + viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading + ? .white.opacity(0.2) + : .purple + ) + } + .disabled(viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading) } - .disabled(viewModel.inputText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty || viewModel.isLoading) } .padding(.horizontal, 14) .padding(.vertical, 10) From c5a49a7d2c964fe707a613741a7584340d8065ff Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 18 Feb 2026 10:51:08 -0800 Subject: [PATCH 18/36] Fix iOS version compatibility for voice interaction Use single-param onChange (iOS 15+) with @State tracking instead of two-param onChange (iOS 17+). Use Locale.current.languageCode (iOS 15+) instead of Locale.current.language.languageCode (iOS 16+). --- Loop/Services/LoopInsights/LoopInsights_VoiceService.swift | 2 +- Loop/Views/LoopInsights/LoopInsights_ChatView.swift | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift b/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift index 1f9ede2487..817ad8c927 100644 --- a/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift +++ b/Loop/Services/LoopInsights/LoopInsights_VoiceService.swift @@ -26,7 +26,7 @@ final class LoopInsights_VoiceService: NSObject, ObservableObject { func speak(_ text: String) { synthesizer.stopSpeaking(at: .immediate) let utterance = AVSpeechUtterance(string: text) - utterance.voice = AVSpeechSynthesisVoice(language: Locale.current.language.languageCode?.identifier ?? "en") + utterance.voice = AVSpeechSynthesisVoice(language: Locale.current.languageCode ?? "en") utterance.rate = AVSpeechUtteranceDefaultSpeechRate isSpeaking = true synthesizer.speak(utterance) diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift index b0bc90d960..b5fb503e0a 100644 --- a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -15,6 +15,7 @@ struct LoopInsights_ChatView: View { @ObservedObject var viewModel: LoopInsights_ChatViewModel @Environment(\.dismiss) private var dismiss @FocusState private var isInputFocused: Bool + @State private var previousInputText = "" var body: some View { ZStack { @@ -223,8 +224,9 @@ struct LoopInsights_ChatView: View { viewModel.sendMessage() } .tint(.purple) - .onChange(of: viewModel.inputText) { oldValue, newValue in - viewModel.handleTextChange(oldValue: oldValue, newValue: newValue) + .onChange(of: viewModel.inputText) { newValue in + viewModel.handleTextChange(oldValue: previousInputText, newValue: newValue) + previousInputText = newValue } if viewModel.isSpeaking { From 70e2b4180975b80cb9a7188c0c4569ff5aca3344 Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 18 Feb 2026 11:45:11 -0800 Subject: [PATCH 19/36] Pre-fetch therapy data when chat opens for faster first response Aggregate HealthKit data (glucose, insulin, carbs, biometrics) in the background when the chat view initializes. Cache for 5 minutes so subsequent messages reuse the same context without re-fetching thousands of HealthKit entries each time. --- .../LoopInsights_ChatViewModel.swift | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 14f2dee455..c0a7b03717 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -32,6 +32,10 @@ final class LoopInsights_ChatViewModel: ObservableObject { private var autoSendTimer: DispatchWorkItem? private var cancellables = Set() + /// Cached therapy context built during pre-fetch — reused across messages + private var cachedTherapyContext: String? + private var cacheTimestamp: Date? + /// Pre-built quick-ask suggestions shown when the conversation is empty let quickAskSuggestions: [String] = [ NSLocalizedString("Why am I high overnight?", comment: "LoopInsights quick ask: overnight highs"), @@ -56,6 +60,25 @@ final class LoopInsights_ChatViewModel: ObservableObject { voiceService.$isSpeaking .receive(on: DispatchQueue.main) .assign(to: &$isSpeaking) + + // Pre-fetch therapy data so the first message sends instantly + prefetchTherapyContext() + } + + /// Pre-fetch and cache therapy context in the background on chat open + private func prefetchTherapyContext() { + Task { @MainActor in + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: snapshot failed: \(error)") } + + var stats: LoopInsightsAggregatedStats? + do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } + catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: aggregate failed: \(error)") } + + cachedTherapyContext = Self.buildTherapyContext(snapshot: snapshot, stats: stats) + cacheTimestamp = Date() + } } // MARK: - Actions @@ -81,14 +104,24 @@ final class LoopInsights_ChatViewModel: ObservableObject { Task { @MainActor in do { - var snapshot: LoopInsightsTherapySnapshot? - do { snapshot = try coordinator.captureCurrentSnapshot() } - catch { LoopInsights_FeatureFlags.log.error("Chat: failed to capture snapshot: \(error)") } - - var stats: LoopInsightsAggregatedStats? - do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } - catch { LoopInsights_FeatureFlags.log.error("Chat: failed to aggregate data: \(error)") } - let context = Self.buildTherapyContext(snapshot: snapshot, stats: stats) + // Use cached context if fresh (< 5 min), otherwise re-fetch + let context: String + if let cached = cachedTherapyContext, + let ts = cacheTimestamp, + Date().timeIntervalSince(ts) < 300 { + context = cached + } else { + var snapshot: LoopInsightsTherapySnapshot? + do { snapshot = try coordinator.captureCurrentSnapshot() } + catch { LoopInsights_FeatureFlags.log.error("Chat: failed to capture snapshot: \(error)") } + + var stats: LoopInsightsAggregatedStats? + do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } + catch { LoopInsights_FeatureFlags.log.error("Chat: failed to aggregate data: \(error)") } + context = Self.buildTherapyContext(snapshot: snapshot, stats: stats) + cachedTherapyContext = context + cacheTimestamp = Date() + } let history = session.conversationHistory().dropLast().map { ($0.role, $0.content) } From a93d01c2fe0d0bb2df519fdeabb4903782b75c21 Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 18 Feb 2026 11:47:10 -0800 Subject: [PATCH 20/36] Rewrite chat system prompt for concise, buddy-style responses Cut verbose medical-advisor tone. New prompt: brief answers, cite specific numbers, skip explanations the user already knows, talk like a knowledgeable friend. 2-3 sentences for simple questions. --- .../LoopInsights_ChatViewModel.swift | 51 ++++++------------- 1 file changed, 15 insertions(+), 36 deletions(-) diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index c0a7b03717..12620bd61c 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -191,45 +191,24 @@ final class LoopInsights_ChatViewModel: ObservableObject { let personality = LoopInsights_FeatureFlags.aiPersonality return """ - You are an expert diabetes and automated insulin delivery (AID) advisor embedded \ - in the Loop app. The user is wearing an insulin pump managed by Loop's closed-loop \ - algorithm. You have access to their REAL therapy settings, glucose data, insulin \ - delivery data, carb logs, and biometrics — all provided below. This is not hypothetical. \ - These are this specific person's actual numbers from their actual pump and CGM. + You're a diabetes-savvy friend who can see this person's actual Loop data. \ + They know how diabetes works — skip the textbook stuff. \(personality.promptInstruction) - YOUR #1 RULE — ALWAYS ANSWER FROM THEIR DATA: - The entire value of this conversation is that you can see this person's real numbers. \ - Every answer you give MUST reference their specific data. Do NOT give generic diabetes \ - advice that could apply to anyone. The user can Google generic advice — they came here \ - because you can see their TIR, their hourly glucose patterns, their basal/bolus split, \ - their correction counts, their actual settings schedules. USE THEM. - - When the user asks "why am I high overnight?", don't explain what causes overnight highs \ - in general — look at THEIR hourly averages from 12AM-6AM, THEIR basal rate during those \ - hours, THEIR overnight trend, and tell them what's happening in THEIR data specifically. - - When they ask "should I change my carb ratio?", don't explain what a carb ratio does — \ - look at THEIR post-meal glucose patterns, THEIR current CR schedule, THEIR carb stats, \ - and give them a specific assessment with specific numbers. - - GUIDELINES: - - Ground every answer in their actual data. Cite specific numbers: "Your average glucose \ - between 12AM-6AM is 162 mg/dL with your basal at 0.8 U/hr" — not "overnight highs can \ - be caused by insufficient basal." - - When their data tells a clear story, say so directly. When the data is ambiguous or \ - insufficient, say that too — but explain exactly what's missing and why it matters. - - If asked about settings changes, reference their current value, explain what the data \ - suggests, and propose a specific adjustment with expected impact. - - Frame suggestions as suggestions, not commands. Significant therapy changes should be \ - discussed with their healthcare provider. - - Keep responses concise but thorough. Use bullet points for multi-part answers. - - Never fabricate data or statistics — only reference what's provided in the context below. - - If the data context says "No therapy data currently available", tell the user you don't \ - have their data loaded yet and suggest they run an analysis first. - - CURRENT DATA CONTEXT: + RULES: + - Be brief. 2-3 sentences max for simple questions. Bullets for complex ones. + - Just the facts — cite their specific numbers, skip explanations they already know. + - Talk like a knowledgeable friend, not a doctor or a manual. + - Never explain what a carb ratio, ISF, or basal rate IS. They know. + - If they ask "why am I high overnight?" — give their overnight avg and what's \ + likely causing it. Don't explain what overnight highs are. + - If data says something clearly, say it directly. No hedging. + - For settings changes: current value → suggested value → why, in one line. + - Never fabricate numbers. Only reference what's in the data below. + - If no data is available, just say so briefly. + + DATA: \(therapyContext) """ } From c54b98b8365d3b0eca5153b34d9bfa16294dd4ac Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 18 Feb 2026 12:37:39 -0800 Subject: [PATCH 21/36] Add debug timing logs to diagnose slow chat initialization MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instruments prefetch, data aggregation, and individual HealthKit queries with millisecond-precision timing markers (⏱ prefix) to pinpoint the bottleneck. Also updates lookback period description to mention the chatbot. --- .../LoopInsights_DataAggregator.swift | 28 ++++++++++++++++++- .../LoopInsights_ChatViewModel.swift | 9 ++++++ .../LoopInsights_SettingsView.swift | 2 +- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index a4c2654a14..1368ff3c65 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -48,19 +48,34 @@ final class LoopInsights_DataAggregator { throw LoopInsightsError.insufficientData("Data provider not available") } + let aggregateStart = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: STARTED (period: \(period.displayName))") + let endDate = Date() let startDate = endDate.addingTimeInterval(-period.timeInterval) // P3: Fetch all raw data in parallel — each type fetched exactly once + let fetchStart = CFAbsoluteTimeGetCurrent() async let rawGlucose = dataProvider.getGlucoseSamples(start: startDate, end: endDate) async let rawDoses = dataProvider.getNormalizedDoseEntries(start: startDate, end: endDate) async let rawCarbs = dataProvider.getCarbEntries(start: startDate, end: endDate) async let biometrics = fetchBiometricsIfEnabled(start: startDate, end: endDate) let glucoseSamples = try await rawGlucose + let t1 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: glucose fetched (\(glucoseSamples.count) samples) at +\(String(format: "%.2f", t1 - fetchStart))s") + let doseEntries = try await rawDoses + let t2 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: doses fetched (\(doseEntries.count) entries) at +\(String(format: "%.2f", t2 - fetchStart))s") + let carbEntries = try await rawCarbs + let t3 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: carbs fetched (\(carbEntries.count) entries) at +\(String(format: "%.2f", t3 - fetchStart))s") + let resolvedBiometrics = try await biometrics + let t4 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: biometrics fetched at +\(String(format: "%.2f", t4 - fetchStart))s (total fetch phase: \(String(format: "%.2f", t4 - fetchStart))s)") // P3: Store for external reuse (supplemental context) self.lastFetchedGlucoseSamples = glucoseSamples @@ -71,13 +86,22 @@ final class LoopInsights_DataAggregator { } // Compute stats from pre-fetched data (each may still supplement with HK data) + let computeStart = CFAbsoluteTimeGetCurrent() async let glucoseStatsTask = computeGlucoseStats(loopSamples: glucoseSamples, start: startDate, end: endDate) async let insulinStatsTask = computeInsulinStats(loopDoses: doseEntries, start: startDate, end: endDate) async let carbStatsTask = computeCarbStats(loopEntries: carbEntries, start: startDate, end: endDate) let resolvedGlucoseStats = try await glucoseStatsTask + let t5 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: glucoseStats computed at +\(String(format: "%.2f", t5 - computeStart))s") + var resolvedInsulinStats = try await insulinStatsTask + let t6 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: insulinStats computed at +\(String(format: "%.2f", t6 - computeStart))s") + let resolvedCarbStats = try await carbStatsTask + let t7 = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: carbStats computed at +\(String(format: "%.2f", t7 - computeStart))s (total compute phase: \(String(format: "%.2f", t7 - computeStart))s)") // Phase 5: Compute negative basal stats if circadian flag is enabled // P3: Reuses pre-fetched doses and glucose — no duplicate fetches @@ -125,7 +149,7 @@ final class LoopInsights_DataAggregator { } } - return LoopInsightsAggregatedStats( + let result = LoopInsightsAggregatedStats( period: period, glucoseStats: resolvedGlucoseStats, insulinStats: resolvedInsulinStats, @@ -133,6 +157,8 @@ final class LoopInsights_DataAggregator { biometricStats: enrichedBiometrics, generatedAt: Date() ) + LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: DONE in \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - aggregateStart))s total") + return result } /// Capture a snapshot of current therapy settings diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 12620bd61c..a083c999b7 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -68,16 +68,25 @@ final class LoopInsights_ChatViewModel: ObservableObject { /// Pre-fetch and cache therapy context in the background on chat open private func prefetchTherapyContext() { Task { @MainActor in + let prefetchStart = CFAbsoluteTimeGetCurrent() + LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: STARTED (period: \(LoopInsights_FeatureFlags.analysisPeriod.displayName))") + var snapshot: LoopInsightsTherapySnapshot? + let t0 = CFAbsoluteTimeGetCurrent() do { snapshot = try coordinator.captureCurrentSnapshot() } catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: snapshot failed: \(error)") } + LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: snapshot took \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - t0))s") var stats: LoopInsightsAggregatedStats? + let t1 = CFAbsoluteTimeGetCurrent() do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: aggregate failed: \(error)") } + LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: aggregateData took \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - t1))s") cachedTherapyContext = Self.buildTherapyContext(snapshot: snapshot, stats: stats) cacheTimestamp = Date() + + LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: DONE in \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - prefetchStart))s total") } } diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 5d9aaa679c..20cf94b641 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -616,7 +616,7 @@ struct LoopInsights_SettingsView: View { LoopInsights_FeatureFlags.analysisPeriod = newValue } - Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights analysis period description")) + Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions and Ask LoopInsights Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights analysis period description")) .font(.caption) .foregroundColor(.secondary) From 7cb0e0ae35a490238f3250abba3b247ef534a26a Mon Sep 17 00:00:00 2001 From: Taylor Date: Wed, 18 Feb 2026 12:51:01 -0800 Subject: [PATCH 22/36] Remove debug timing logs from chat prefetch and data aggregator --- .../LoopInsights_DataAggregator.swift | 28 +------------------ .../LoopInsights_ChatViewModel.swift | 9 ------ 2 files changed, 1 insertion(+), 36 deletions(-) diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index 1368ff3c65..a4c2654a14 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -48,34 +48,19 @@ final class LoopInsights_DataAggregator { throw LoopInsightsError.insufficientData("Data provider not available") } - let aggregateStart = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: STARTED (period: \(period.displayName))") - let endDate = Date() let startDate = endDate.addingTimeInterval(-period.timeInterval) // P3: Fetch all raw data in parallel — each type fetched exactly once - let fetchStart = CFAbsoluteTimeGetCurrent() async let rawGlucose = dataProvider.getGlucoseSamples(start: startDate, end: endDate) async let rawDoses = dataProvider.getNormalizedDoseEntries(start: startDate, end: endDate) async let rawCarbs = dataProvider.getCarbEntries(start: startDate, end: endDate) async let biometrics = fetchBiometricsIfEnabled(start: startDate, end: endDate) let glucoseSamples = try await rawGlucose - let t1 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: glucose fetched (\(glucoseSamples.count) samples) at +\(String(format: "%.2f", t1 - fetchStart))s") - let doseEntries = try await rawDoses - let t2 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: doses fetched (\(doseEntries.count) entries) at +\(String(format: "%.2f", t2 - fetchStart))s") - let carbEntries = try await rawCarbs - let t3 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: carbs fetched (\(carbEntries.count) entries) at +\(String(format: "%.2f", t3 - fetchStart))s") - let resolvedBiometrics = try await biometrics - let t4 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: biometrics fetched at +\(String(format: "%.2f", t4 - fetchStart))s (total fetch phase: \(String(format: "%.2f", t4 - fetchStart))s)") // P3: Store for external reuse (supplemental context) self.lastFetchedGlucoseSamples = glucoseSamples @@ -86,22 +71,13 @@ final class LoopInsights_DataAggregator { } // Compute stats from pre-fetched data (each may still supplement with HK data) - let computeStart = CFAbsoluteTimeGetCurrent() async let glucoseStatsTask = computeGlucoseStats(loopSamples: glucoseSamples, start: startDate, end: endDate) async let insulinStatsTask = computeInsulinStats(loopDoses: doseEntries, start: startDate, end: endDate) async let carbStatsTask = computeCarbStats(loopEntries: carbEntries, start: startDate, end: endDate) let resolvedGlucoseStats = try await glucoseStatsTask - let t5 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: glucoseStats computed at +\(String(format: "%.2f", t5 - computeStart))s") - var resolvedInsulinStats = try await insulinStatsTask - let t6 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: insulinStats computed at +\(String(format: "%.2f", t6 - computeStart))s") - let resolvedCarbStats = try await carbStatsTask - let t7 = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: carbStats computed at +\(String(format: "%.2f", t7 - computeStart))s (total compute phase: \(String(format: "%.2f", t7 - computeStart))s)") // Phase 5: Compute negative basal stats if circadian flag is enabled // P3: Reuses pre-fetched doses and glucose — no duplicate fetches @@ -149,7 +125,7 @@ final class LoopInsights_DataAggregator { } } - let result = LoopInsightsAggregatedStats( + return LoopInsightsAggregatedStats( period: period, glucoseStats: resolvedGlucoseStats, insulinStats: resolvedInsulinStats, @@ -157,8 +133,6 @@ final class LoopInsights_DataAggregator { biometricStats: enrichedBiometrics, generatedAt: Date() ) - LoopInsights_FeatureFlags.log.debug("⏱ aggregateData: DONE in \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - aggregateStart))s total") - return result } /// Capture a snapshot of current therapy settings diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index a083c999b7..12620bd61c 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -68,25 +68,16 @@ final class LoopInsights_ChatViewModel: ObservableObject { /// Pre-fetch and cache therapy context in the background on chat open private func prefetchTherapyContext() { Task { @MainActor in - let prefetchStart = CFAbsoluteTimeGetCurrent() - LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: STARTED (period: \(LoopInsights_FeatureFlags.analysisPeriod.displayName))") - var snapshot: LoopInsightsTherapySnapshot? - let t0 = CFAbsoluteTimeGetCurrent() do { snapshot = try coordinator.captureCurrentSnapshot() } catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: snapshot failed: \(error)") } - LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: snapshot took \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - t0))s") var stats: LoopInsightsAggregatedStats? - let t1 = CFAbsoluteTimeGetCurrent() do { stats = try await coordinator.dataAggregator.aggregateData(period: LoopInsights_FeatureFlags.analysisPeriod) } catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: aggregate failed: \(error)") } - LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: aggregateData took \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - t1))s") cachedTherapyContext = Self.buildTherapyContext(snapshot: snapshot, stats: stats) cacheTimestamp = Date() - - LoopInsights_FeatureFlags.log.debug("⏱ Chat prefetch: DONE in \(String(format: "%.2f", CFAbsoluteTimeGetCurrent() - prefetchStart))s total") } } From 14f09ae2635cb42c76544dcd56d8219919cbd6c2 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 10:31:48 -0800 Subject: [PATCH 23/36] Fix alcohol tracker metabolism, hypo risk, and polish both trackers - Fix broken alcohol metabolism model: replace first-drink-time calculation with proper pool simulation that tracks liver idle time - Rework hypo risk to use current alcohol level and peak instead of raw 24h sum; risk decays properly over time and clears when fully metabolized - Add Today's Peak stat to alcohol tracker - Add (i) info buttons on all metrics for both alcohol and caffeine trackers - Add Clear All Entries button to both trackers - Switch to emoji icons for all drink and caffeine presets - Add 5-tier gauge color range (green/yellow/orange/red/dark red) to both - Dynamic background ring color matches current gauge level - Remove redundant 24h Total from alcohol tracker - Fix force unwrap crashes in TestDataProvider and DataAggregator - Fix array bounds crash in caffeine onDelete handler --- Loop/Localizable.xcstrings | 58 +++++++-- .../LoopInsights_Phase5Models.swift | 37 +++--- .../LoopInsights_AlcoholTracker.swift | 118 ++++++++++++++---- .../LoopInsights_CaffeineTracker.swift | 6 + .../LoopInsights_DataAggregator.swift | 4 +- .../LoopInsights_TestDataProvider.swift | 3 +- .../LoopInsights_AlcoholLogView.swift | 111 +++++++++++++--- .../LoopInsights_CaffeineLogView.swift | 110 +++++++++++++--- 8 files changed, 353 insertions(+), 94 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index f0cfd27976..33df532f41 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -3495,7 +3495,7 @@ } }, "24h Total" : { - "comment" : "LoopInsights alcohol 24h total\nLoopInsights caffeine 24h total" + "comment" : "CaffeineInfoTip 24h total title\nLoopInsights caffeine 24h total" }, "30 Days" : { "comment" : "LoopInsights analysis period: 30 days" @@ -6037,6 +6037,9 @@ "Alcohol suppresses liver glucose production, causing delayed low blood sugar 4-24 hours after drinking." : { "comment" : "LoopInsights alcohol risk description" }, + "Alcohol suppresses your liver's ability to produce glucose, which can cause delayed low blood sugar 4–24 hours after drinking. Risk is highest 8–12 hours after your last drink. The level is based on how much you drank and when." : { + "comment" : "AlcoholInfoTip hypo risk message" + }, "Alcohol Tracker" : { "comment" : "LoopInsights alcohol button\nLoopInsights alcohol title" }, @@ -12466,7 +12469,13 @@ "comment" : "LoopInsights circadian toggle" }, "Clear All" : { - "comment" : "LoopInsights clear all button" + "comment" : "LoopInsights clear all button\nLoopInsights clear all confirm" + }, + "Clear All Entries" : { + "comment" : "LoopInsights clear all alcohol entries\nLoopInsights clear all caffeine entries" + }, + "Clear All Entries?" : { + "comment" : "LoopInsights clear all alcohol alert title\nLoopInsights clear all caffeine alert title" }, "Clear History" : { "comment" : "LoopInsights clear history alert title" @@ -18383,10 +18392,13 @@ "comment" : "LoopInsights alcohol est clear" }, "Estimated Alcohol Level" : { - "comment" : "LoopInsights alcohol level label" + "comment" : "AlcoholInfoTip estimated level title\nLoopInsights alcohol level label" }, "Estimated Caffeine Level" : { - "comment" : "LoopInsights caffeine level label" + "comment" : "CaffeineInfoTip estimated level title\nLoopInsights caffeine level label" + }, + "Estimated Clear Time" : { + "comment" : "AlcoholInfoTip est clear title" }, "Event History" : { "comment" : "Segmented button title for insulin delivery log event history", @@ -21557,7 +21569,7 @@ "isCommentAutoGenerated" : true }, "Hypo Risk" : { - "comment" : "LoopInsights alcohol hypo risk" + "comment" : "AlcoholInfoTip hypo risk title\nLoopInsights alcohol hypo risk" }, "If iOS Focus Mode is ON and Mute Alerts is OFF, Critical Alerts will still be delivered and non-Critical Alerts will be silenced until %1$@ is added to each Focus mode as an Allowed App." : { "comment" : "Focus modes descriptive text (1: app name)", @@ -24096,7 +24108,7 @@ "comment" : "LoopInsights last analysis date" }, "Last Intake" : { - "comment" : "LoopInsights caffeine last intake" + "comment" : "CaffeineInfoTip last intake title\nLoopInsights caffeine last intake" }, "Launches CGM app" : { "comment" : "Glucose HUD accessibility hint", @@ -24405,6 +24417,9 @@ } } }, + "Listen" : { + "comment" : "LoopInsights chat: replay TTS" + }, "Live activity" : { "comment" : "Alert Permissions live activity\nLive activity screen title", "localizations" : { @@ -33998,7 +34013,7 @@ "Risk window until %@." : { "comment" : "LoopInsights alcohol risk window" }, - "Rolling lookback period for automated AI-based suggestions - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { + "Rolling lookback period for automated AI-based suggestions and Ask LoopInsights Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { "comment" : "LoopInsights analysis period description" }, "Run an analysis from the LoopInsights Dashboard to generate your first suggestions." : { @@ -37210,9 +37225,21 @@ } } }, + "The estimated milligrams of caffeine currently in your system. Caffeine has a half-life of about 5.7 hours, meaning half of what you consume is eliminated roughly every 6 hours." : { + "comment" : "CaffeineInfoTip estimated level message" + }, + "The estimated time when all alcohol will be metabolized from your system, based on a rate of about 1 standard drink per hour. Hypo risk may persist for hours after this time." : { + "comment" : "AlcoholInfoTip est clear message" + }, "The following changes were automatically applied to your therapy settings:" : { "comment" : "LoopInsights auto-applied description" }, + "The highest alcohol level your body reached today. This is the most drinks in your system at any one time, which matters more for impairment and hypo risk than total drinks consumed." : { + "comment" : "AlcoholInfoTip today peak message" + }, + "The highest caffeine level your body reached today. High peak levels can amplify effects on blood sugar, heart rate, and sleep quality." : { + "comment" : "CaffeineInfoTip today peak message" + }, "The legacy model used by Loop, allowing customization of action duration." : { "comment" : "Subtitle description of Walsh insulin model setting", "extractionState" : "manual", @@ -37821,6 +37848,12 @@ } } }, + "The number of standard drinks estimated to still be in your system. Your liver metabolizes about 1 standard drink per hour. This number decreases over time as your body processes the alcohol." : { + "comment" : "AlcoholInfoTip estimated level message" + }, + "The total milligrams of caffeine consumed in the last 24 hours from all sources. The FDA considers 400 mg/day a safe amount for most adults." : { + "comment" : "CaffeineInfoTip 24h total message" + }, "Therapy Settings" : { "comment" : "LoopInsights current settings header\nTitle text for button to Therapy Settings", "localizations" : { @@ -37990,6 +38023,12 @@ "This will permanently delete all suggestion history. This cannot be undone." : { "comment" : "LoopInsights clear history warning" }, + "This will remove all alcohol entries. This cannot be undone." : { + "comment" : "LoopInsights clear all alcohol alert message" + }, + "This will remove all manual caffeine entries. HealthKit entries will remain. This cannot be undone." : { + "comment" : "LoopInsights clear all caffeine alert message" + }, "This will restore your therapy settings to the values they had before this suggestion was applied." : { "comment" : "LoopInsights revert confirmation message" }, @@ -38154,7 +38193,7 @@ "comment" : "LoopInsights monitor quiet hours to" }, "Today's Peak" : { - "comment" : "LoopInsights caffeine today peak" + "comment" : "AlcoholInfoTip today peak title\nCaffeineInfoTip today peak title\nLoopInsights alcohol today peak\nLoopInsights caffeine today peak" }, "Total Daily Dose" : { "comment" : "LoopInsights TDD label" @@ -41044,6 +41083,9 @@ } } }, + "When you last consumed caffeine. Caffeine consumed within 6 hours of bedtime can disrupt sleep and affect overnight glucose control." : { + "comment" : "CaffeineInfoTip last intake message" + }, "While mute alerts is on, all alerts from your %1$@ app including Critical and Time Sensitive alerts will temporarily display without sounds and will vibrate only." : { "comment" : "App sounds descriptive text (1: app name)", "localizations" : { diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index 15c36b9e0d..50bc25eb03 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -134,18 +134,18 @@ struct LoopInsightsCaffeinePreset: Identifiable { let id = UUID() let name: String let milligrams: Double - let icon: String // SF Symbol name + let icon: String // Emoji icon static let defaults: [LoopInsightsCaffeinePreset] = [ // Left column // Right column - LoopInsightsCaffeinePreset(name: "Coffee (sm)", milligrams: 95, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Tea (Green)", milligrams: 28, icon: "leaf.fill"), - LoopInsightsCaffeinePreset(name: "Coffee (med)", milligrams: 142, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Tea (Black)", milligrams: 47, icon: "leaf.fill"), - LoopInsightsCaffeinePreset(name: "Coffee (lg)", milligrams: 190, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Cola", milligrams: 34, icon: "drop.fill"), - LoopInsightsCaffeinePreset(name: "Espresso", milligrams: 63, icon: "cup.and.saucer.fill"), - LoopInsightsCaffeinePreset(name: "Energy Drink", milligrams: 80, icon: "bolt.fill"), + LoopInsightsCaffeinePreset(name: "Coffee (sm)", milligrams: 95, icon: "☕"), + LoopInsightsCaffeinePreset(name: "Tea (Green)", milligrams: 28, icon: "🍵"), + LoopInsightsCaffeinePreset(name: "Coffee (med)", milligrams: 142, icon: "☕"), + LoopInsightsCaffeinePreset(name: "Tea (Black)", milligrams: 47, icon: "🍵"), + LoopInsightsCaffeinePreset(name: "Coffee (lg)", milligrams: 190, icon: "☕"), + LoopInsightsCaffeinePreset(name: "Cola", milligrams: 34, icon: "🥤"), + LoopInsightsCaffeinePreset(name: "Espresso", milligrams: 63, icon: "🫘"), + LoopInsightsCaffeinePreset(name: "Energy Drink", milligrams: 80, icon: "⚡"), ] } @@ -174,6 +174,7 @@ enum LoopInsightsAlcoholHypoRisk: String, Codable { /// Current alcohol state computed from entries with linear metabolism struct LoopInsightsAlcoholState: Codable { let currentAlcoholLevel: Double // Estimated standard drinks remaining + let peakLevelToday: Double // Highest alcohol level reached today let estimatedClearTime: Date? // When alcohol will be fully metabolized let hypoRiskLevel: LoopInsightsAlcoholHypoRisk let hypoRiskWindowEnd: Date? // End of delayed hypoglycemia risk window @@ -187,18 +188,18 @@ struct LoopInsightsAlcoholPreset: Identifiable { let id = UUID() let name: String let standardDrinks: Double - let icon: String // SF Symbol name + let icon: String // Emoji icon static let defaults: [LoopInsightsAlcoholPreset] = [ // Left column // Right column - LoopInsightsAlcoholPreset(name: "Beer (Light)", standardDrinks: 1.0, icon: "mug.fill"), - LoopInsightsAlcoholPreset(name: "Wine (White)", standardDrinks: 1.0, icon: "wineglass.fill"), - LoopInsightsAlcoholPreset(name: "Beer (Regular)", standardDrinks: 1.0, icon: "mug.fill"), - LoopInsightsAlcoholPreset(name: "Spirits (neat)", standardDrinks: 1.5, icon: "drop.fill"), - LoopInsightsAlcoholPreset(name: "Beer (Craft/IPA)", standardDrinks: 1.5, icon: "mug.fill"), - LoopInsightsAlcoholPreset(name: "Mixed Drink", standardDrinks: 1.5, icon: "waterbottle.fill"), - LoopInsightsAlcoholPreset(name: "Wine (Red)", standardDrinks: 1.0, icon: "wineglass.fill"), - LoopInsightsAlcoholPreset(name: "Cocktail", standardDrinks: 2.0, icon: "cup.and.saucer.fill"), + LoopInsightsAlcoholPreset(name: "Beer (Light)", standardDrinks: 1.0, icon: "🍺"), + LoopInsightsAlcoholPreset(name: "Wine (White)", standardDrinks: 1.0, icon: "🍷"), + LoopInsightsAlcoholPreset(name: "Beer (Regular)", standardDrinks: 1.0, icon: "🍺"), + LoopInsightsAlcoholPreset(name: "Spirits (neat)", standardDrinks: 1.5, icon: "🥃"), + LoopInsightsAlcoholPreset(name: "Beer (Craft/IPA)", standardDrinks: 1.5, icon: "🍻"), + LoopInsightsAlcoholPreset(name: "Mixed Drink", standardDrinks: 1.5, icon: "🍹"), + LoopInsightsAlcoholPreset(name: "Wine (Red)", standardDrinks: 1.0, icon: "🍷"), + LoopInsightsAlcoholPreset(name: "Cocktail", standardDrinks: 2.0, icon: "🍸"), ] } diff --git a/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift b/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift index 88dfee86af..cc0ff4ff64 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AlcoholTracker.swift @@ -57,6 +57,12 @@ final class LoopInsights_AlcoholTracker: ObservableObject { saveEntries() } + /// Remove all entries + func clearAllEntries() { + entries.removeAll() + saveEntries() + } + /// Update an existing entry func updateEntry(id: UUID, standardDrinks: Double, source: String, timestamp: Date) { guard let idx = entries.firstIndex(where: { $0.id == id }) else { return } @@ -73,28 +79,39 @@ final class LoopInsights_AlcoholTracker: ObservableObject { /// Current alcohol state computed from all entries using linear metabolism func currentState(at now: Date = Date()) -> LoopInsightsAlcoholState { var currentLevel: Double = 0 + var peakToday: Double = 0 var totalLast24h: Double = 0 var entriesLast24h = 0 var lastIntake: Date? let twentyFourHoursAgo = now.addingTimeInterval(-24 * 3600) + let startOfToday = Calendar.current.startOfDay(for: now) - // Sort entries chronologically for sequential metabolism + // Sort entries chronologically for sequential metabolism simulation let chronological = entries.sorted { $0.timestamp < $1.timestamp } + .filter { $0.timestamp <= now } - // Linear metabolism: process entries in order, each drink adds to the queue - // The liver metabolizes ~1 drink/hour regardless of how many are queued - var totalConsumed: Double = 0 - var firstDrinkTime: Date? + // Simulate alcohol pool over time: the liver metabolizes ~1 drink/hour, + // but only while there's alcohol in the system (pool > 0). Between each + // entry we apply metabolism, then add the new drink to the pool. + var pool: Double = 0 + var lastEventTime: Date? for entry in chronological { - guard entry.timestamp <= now else { continue } - - if firstDrinkTime == nil { - firstDrinkTime = entry.timestamp + // Metabolize since last event (liver is idle when pool is empty) + if let lastTime = lastEventTime { + let elapsed = entry.timestamp.timeIntervalSince(lastTime) / 3600 + pool = max(0, pool - elapsed * Self.metabolismRate) } - totalConsumed += entry.standardDrinks + // Add this drink to the pool + pool += entry.standardDrinks + lastEventTime = entry.timestamp + + // Track peak today (pool is highest right after adding a drink) + if entry.timestamp >= startOfToday { + peakToday = max(peakToday, pool) + } if entry.timestamp >= twentyFourHoursAgo { totalLast24h += entry.standardDrinks @@ -106,22 +123,23 @@ final class LoopInsights_AlcoholTracker: ObservableObject { } } - // Calculate current level: total consumed minus what's been metabolized - if let firstTime = firstDrinkTime { - let hoursElapsed = now.timeIntervalSince(firstTime) / 3600 - let metabolized = hoursElapsed * Self.metabolismRate - currentLevel = max(0, totalConsumed - metabolized) + // Metabolize from last event to now + if let lastTime = lastEventTime { + let elapsed = now.timeIntervalSince(lastTime) / 3600 + pool = max(0, pool - elapsed * Self.metabolismRate) } + currentLevel = pool + // Estimated clear time var clearTime: Date? if currentLevel > 0 { - let hoursToCllear = currentLevel / Self.metabolismRate - clearTime = now.addingTimeInterval(hoursToCllear * 3600) + let hoursToClear = currentLevel / Self.metabolismRate + clearTime = now.addingTimeInterval(hoursToClear * 3600) } - // Compute hypo risk - let hypoRisk = computeHypoRisk(totalDrinksLast24h: totalLast24h, lastIntakeTime: lastIntake, at: now) + // Compute hypo risk (factors in peak level and time decay) + let hypoRisk = computeHypoRisk(totalDrinksLast24h: totalLast24h, peakLevelToday: peakToday, currentAlcoholLevel: currentLevel, lastIntakeTime: lastIntake, at: now) // Hypo risk window end: 24 hours after last intake var riskWindowEnd: Date? @@ -131,6 +149,7 @@ final class LoopInsights_AlcoholTracker: ObservableObject { return LoopInsightsAlcoholState( currentAlcoholLevel: currentLevel, + peakLevelToday: peakToday, estimatedClearTime: clearTime, hypoRiskLevel: hypoRisk, hypoRiskWindowEnd: riskWindowEnd, @@ -142,8 +161,13 @@ final class LoopInsights_AlcoholTracker: ObservableObject { // MARK: - Hypo Risk Model - /// Compute delayed hypoglycemia risk level based on alcohol intake - private func computeHypoRisk(totalDrinksLast24h: Double, lastIntakeTime: Date?, at now: Date) -> LoopInsightsAlcoholHypoRisk { + /// Compute delayed hypoglycemia risk level based on alcohol intake with time decay. + /// Risk follows a natural arc based on hours since last drink and current alcohol level: + /// 0–4h (active drinking/early): base risk from amount consumed + /// 4–8h (building): base risk (gluconeogenesis suppression building) + /// 8–12h (peak danger zone): risk elevated one level + /// 12h+ (recovery): risk decays — faster when alcohol is fully metabolized + private func computeHypoRisk(totalDrinksLast24h: Double, peakLevelToday: Double, currentAlcoholLevel: Double, lastIntakeTime: Date?, at now: Date) -> LoopInsightsAlcoholHypoRisk { guard totalDrinksLast24h > 0, let lastTime = lastIntakeTime else { return .none } let hoursSinceLastDrink = now.timeIntervalSince(lastTime) / 3600 @@ -153,14 +177,54 @@ final class LoopInsights_AlcoholTracker: ObservableObject { let inPeakWindow = hoursSinceLastDrink >= Self.peakRiskStartHours && hoursSinceLastDrink <= Self.peakRiskEndHours + let pastPeakWindow = hoursSinceLastDrink > Self.peakRiskEndHours + let fullyMetabolized = currentAlcoholLevel <= 0 + + // Base severity from what's actually in your system and today's session peak. + // NOT totalDrinksLast24h — a rolling sum double-counts old metabolized sessions. + let drinkMetric = max(currentAlcoholLevel, peakLevelToday) + + // Base risk from consumption amount + let baseRisk: LoopInsightsAlcoholHypoRisk + if drinkMetric >= 5 { + baseRisk = .high + } else if drinkMetric >= 3 { + baseRisk = .moderate + } else { + baseRisk = .low + } - if totalDrinksLast24h >= 5 { - return .high - } else if totalDrinksLast24h >= 3 { - return inPeakWindow ? .high : .moderate - } else { // 1-2 drinks - return inPeakWindow ? .moderate : .low + // During peak window (8-12h): elevate risk by one level + if inPeakWindow { + switch baseRisk { + case .low: return .moderate + case .moderate: return .high + case .high: return .high + case .none: return .none + } + } + + // After peak window (12h+): decay risk based on metabolism state + if pastPeakWindow { + // Fully metabolized + past the peak danger zone = risk cleared + if fullyMetabolized { + return .none + } + // Still metabolizing past peak — step down one level + switch baseRisk { + case .high: return .moderate + case .moderate: return .low + case .low: return .none + case .none: return .none + } + } + + // Before peak window (0-8h): base risk, but if fully metabolized + low → none + if fullyMetabolized && baseRisk == .low { + return .none } + + return baseRisk } // MARK: - Prompt Context diff --git a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift index a6be3b54de..041636a211 100644 --- a/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift +++ b/Loop/Services/LoopInsights/LoopInsights_CaffeineTracker.swift @@ -86,6 +86,12 @@ final class LoopInsights_CaffeineTracker: ObservableObject { rebuildMergedEntries() } + /// Remove all manual entries + func clearAllEntries() { + saveManualEntries([]) + rebuildMergedEntries() + } + /// Update an existing manual entry func updateEntry(id: UUID, milligrams: Double, source: String, timestamp: Date) { var manual = loadManualEntries() diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index a4c2654a14..422ef7a157 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -121,7 +121,9 @@ final class LoopInsights_DataAggregator { weight: bio.weight, stressScore: stressScore ) - LoopInsights_FeatureFlags.log.debug("Phase 5: Stress score computed — \(String(format: "%.0f", stressScore!.overallScore))/100") + if let score = stressScore { + LoopInsights_FeatureFlags.log.debug("Phase 5: Stress score computed — \(String(format: "%.0f", score.overallScore))/100") + } } } diff --git a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift index ba227693ad..7279cd133b 100644 --- a/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift +++ b/Loop/Services/LoopInsights/LoopInsights_TestDataProvider.swift @@ -102,7 +102,8 @@ final class LoopInsights_TestDataProvider: LoopInsightsDataProviderProtocol { /// Returns the Documents/LoopInsights/ directory path (creates it if needed). static var documentsDirectory: URL { - let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! + let docs = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first + ?? URL(fileURLWithPath: NSHomeDirectory()) let dir = docs.appendingPathComponent("LoopInsights", isDirectory: true) try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) return dir diff --git a/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift b/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift index a6a8405acb..af19b8ab81 100644 --- a/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_AlcoholLogView.swift @@ -13,6 +13,42 @@ import SwiftUI /// Brand color for all alcohol UI private let alcoholAmber = Color.orange +/// Info tips shown via (i) buttons in the alcohol tracker UI. +private enum AlcoholInfoTip: String, Identifiable { + case estimatedLevel + case todaysPeak + case hypoRisk + case estClear + + var id: String { rawValue } + + var title: String { + switch self { + case .estimatedLevel: + return NSLocalizedString("Estimated Alcohol Level", comment: "AlcoholInfoTip estimated level title") + case .todaysPeak: + return NSLocalizedString("Today's Peak", comment: "AlcoholInfoTip today peak title") + case .hypoRisk: + return NSLocalizedString("Hypo Risk", comment: "AlcoholInfoTip hypo risk title") + case .estClear: + return NSLocalizedString("Estimated Clear Time", comment: "AlcoholInfoTip est clear title") + } + } + + var message: String { + switch self { + case .estimatedLevel: + return NSLocalizedString("The number of standard drinks estimated to still be in your system. Your liver metabolizes about 1 standard drink per hour. This number decreases over time as your body processes the alcohol.", comment: "AlcoholInfoTip estimated level message") + case .todaysPeak: + return NSLocalizedString("The highest alcohol level your body reached today. This is the most drinks in your system at any one time, which matters more for impairment and hypo risk than total drinks consumed.", comment: "AlcoholInfoTip today peak message") + case .hypoRisk: + return NSLocalizedString("Alcohol suppresses your liver's ability to produce glucose, which can cause delayed low blood sugar 4–24 hours after drinking. Risk is highest 8–12 hours after your last drink. The level is based on how much you drank and when.", comment: "AlcoholInfoTip hypo risk message") + case .estClear: + return NSLocalizedString("The estimated time when all alcohol will be metabolized from your system, based on a rate of about 1 standard drink per hour. Hypo risk may persist for hours after this time.", comment: "AlcoholInfoTip est clear message") + } + } +} + /// Alcohol logging UI: shows current level gauge, hypo risk banner, quick-add presets, and entry log. struct LoopInsights_AlcoholLogView: View { @@ -24,6 +60,8 @@ struct LoopInsights_AlcoholLogView: View { @State private var editDrinks: String = "" @State private var editSource: String = "" @State private var editTimestamp: Date = Date() + @State private var activeInfo: AlcoholInfoTip? + @State private var showingClearConfirmation = false @Environment(\.dismiss) private var dismiss private var currentState: LoopInsightsAlcoholState { @@ -64,7 +102,7 @@ struct LoopInsights_AlcoholLogView: View { // Level gauge ZStack { Circle() - .stroke(alcoholAmber.opacity(0.2), lineWidth: 8) + .stroke(gaugeColor(currentState.currentAlcoholLevel).opacity(0.2), lineWidth: 8) .frame(width: 100, height: 100) let level = min(currentState.currentAlcoholLevel, 5) @@ -84,36 +122,28 @@ struct LoopInsights_AlcoholLogView: View { } } - Text(NSLocalizedString("Estimated Alcohol Level", comment: "LoopInsights alcohol level label")) - .font(.caption) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Estimated Alcohol Level", comment: "LoopInsights alcohol level label"), tip: .estimatedLevel) if currentState.entriesLast24h > 0 { HStack(spacing: 16) { VStack(spacing: 2) { - Text(String(format: "%.1f", currentState.totalDrinksLast24h)) + Text(String(format: "%.1f", currentState.peakLevelToday)) .font(.caption.weight(.semibold)) .foregroundColor(alcoholAmber) - Text(NSLocalizedString("24h Total", comment: "LoopInsights alcohol 24h total")) - .font(.caption2) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Today's Peak", comment: "LoopInsights alcohol today peak"), tip: .todaysPeak) } VStack(spacing: 2) { Text(riskDisplayText(currentState.hypoRiskLevel)) .font(.caption.weight(.semibold)) .foregroundColor(riskColor(currentState.hypoRiskLevel)) - Text(NSLocalizedString("Hypo Risk", comment: "LoopInsights alcohol hypo risk")) - .font(.caption2) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Hypo Risk", comment: "LoopInsights alcohol hypo risk"), tip: .hypoRisk) } if let clearTime = currentState.estimatedClearTime { VStack(spacing: 2) { Text(Self.timeFormatter.string(from: clearTime)) .font(.caption.weight(.semibold)) .foregroundColor(alcoholAmber) - Text(NSLocalizedString("Est. Clear", comment: "LoopInsights alcohol est clear")) - .font(.caption2) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Est. Clear", comment: "LoopInsights alcohol est clear"), tip: .estClear) } } } @@ -121,9 +151,30 @@ struct LoopInsights_AlcoholLogView: View { } .frame(maxWidth: .infinity) .padding(.vertical, 8) + .alert(item: $activeInfo) { tip in + Alert( + title: Text(tip.title), + message: Text(tip.message), + dismissButton: .default(Text(NSLocalizedString("OK", comment: "OK button"))) + ) + } } } + private func infoLabel(_ text: String, tip: AlcoholInfoTip) -> some View { + Button(action: { activeInfo = tip }) { + HStack(spacing: 3) { + Text(text) + .font(.caption2) + .foregroundColor(.secondary) + Image(systemName: "info.circle") + .font(.system(size: 10)) + .foregroundColor(.secondary) + } + } + .buttonStyle(.plain) + } + // MARK: - Hypo Risk Banner private var hypoRiskBanner: some View { @@ -158,9 +209,8 @@ struct LoopInsights_AlcoholLogView: View { tracker.logAlcohol(standardDrinks: preset.standardDrinks, source: preset.name) }) { HStack(spacing: 6) { - Image(systemName: preset.icon) + Text(preset.icon) .font(.caption) - .foregroundColor(alcoholAmber) VStack(alignment: .leading, spacing: 1) { Text(preset.name) .font(.caption) @@ -269,6 +319,24 @@ struct LoopInsights_AlcoholLogView: View { tracker.removeEntry(entry) } } + + Button(role: .destructive, action: { + showingClearConfirmation = true + }) { + HStack { + Spacer() + Text(NSLocalizedString("Clear All Entries", comment: "LoopInsights clear all alcohol entries")) + Spacer() + } + } + .alert(NSLocalizedString("Clear All Entries?", comment: "LoopInsights clear all alcohol alert title"), isPresented: $showingClearConfirmation) { + Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) {} + Button(NSLocalizedString("Clear All", comment: "LoopInsights clear all confirm"), role: .destructive) { + tracker.clearAllEntries() + } + } message: { + Text(NSLocalizedString("This will remove all alcohol entries. This cannot be undone.", comment: "LoopInsights clear all alcohol alert message")) + } } } } @@ -342,11 +410,14 @@ struct LoopInsights_AlcoholLogView: View { // MARK: - Helpers - /// Gauge color: amber base with red for high levels + /// Gauge color: green → yellow → orange → red → dark red private func gaugeColor(_ drinks: Double) -> Color { - if drinks < 2 { return alcoholAmber } - if drinks < 4 { return Color(red: 0.9, green: 0.5, blue: 0.1) } - return .red + if drinks <= 0 { return .green } + if drinks < 1 { return .green } + if drinks < 2 { return .yellow } + if drinks < 3 { return .orange } + if drinks < 4 { return .red } + return Color(red: 0.7, green: 0.0, blue: 0.0) // dark red } /// Risk level display text diff --git a/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift b/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift index fcf8ab0e3f..23846f1b7a 100644 --- a/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_CaffeineLogView.swift @@ -11,6 +11,42 @@ import SwiftUI /// Brand color for all caffeine UI private let caffeineGreen = Color.green +/// Info tips shown via (i) buttons in the caffeine tracker UI. +private enum CaffeineInfoTip: String, Identifiable { + case estimatedLevel + case totalLast24h + case todaysPeak + case lastIntake + + var id: String { rawValue } + + var title: String { + switch self { + case .estimatedLevel: + return NSLocalizedString("Estimated Caffeine Level", comment: "CaffeineInfoTip estimated level title") + case .totalLast24h: + return NSLocalizedString("24h Total", comment: "CaffeineInfoTip 24h total title") + case .todaysPeak: + return NSLocalizedString("Today's Peak", comment: "CaffeineInfoTip today peak title") + case .lastIntake: + return NSLocalizedString("Last Intake", comment: "CaffeineInfoTip last intake title") + } + } + + var message: String { + switch self { + case .estimatedLevel: + return NSLocalizedString("The estimated milligrams of caffeine currently in your system. Caffeine has a half-life of about 5.7 hours, meaning half of what you consume is eliminated roughly every 6 hours.", comment: "CaffeineInfoTip estimated level message") + case .totalLast24h: + return NSLocalizedString("The total milligrams of caffeine consumed in the last 24 hours from all sources. The FDA considers 400 mg/day a safe amount for most adults.", comment: "CaffeineInfoTip 24h total message") + case .todaysPeak: + return NSLocalizedString("The highest caffeine level your body reached today. High peak levels can amplify effects on blood sugar, heart rate, and sleep quality.", comment: "CaffeineInfoTip today peak message") + case .lastIntake: + return NSLocalizedString("When you last consumed caffeine. Caffeine consumed within 6 hours of bedtime can disrupt sleep and affect overnight glucose control.", comment: "CaffeineInfoTip last intake message") + } + } +} + /// Caffeine logging UI: shows current level gauge, quick-add presets, and entry log. struct LoopInsights_CaffeineLogView: View { @@ -22,6 +58,8 @@ struct LoopInsights_CaffeineLogView: View { @State private var editMg: String = "" @State private var editSource: String = "" @State private var editTimestamp: Date = Date() + @State private var showingClearConfirmation = false + @State private var activeInfo: CaffeineInfoTip? @Environment(\.dismiss) private var dismiss private var currentState: LoopInsightsCaffeineState { @@ -62,7 +100,7 @@ struct LoopInsights_CaffeineLogView: View { // Level gauge ZStack { Circle() - .stroke(caffeineGreen.opacity(0.2), lineWidth: 8) + .stroke(gaugeColor(currentState.currentLevelMg).opacity(0.2), lineWidth: 8) .frame(width: 100, height: 100) let level = min(currentState.currentLevelMg, 400) @@ -82,9 +120,7 @@ struct LoopInsights_CaffeineLogView: View { } } - Text(NSLocalizedString("Estimated Caffeine Level", comment: "LoopInsights caffeine level label")) - .font(.caption) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Estimated Caffeine Level", comment: "LoopInsights caffeine level label"), tip: .estimatedLevel) if currentState.entriesLast24h > 0 { HStack(spacing: 16) { @@ -92,26 +128,20 @@ struct LoopInsights_CaffeineLogView: View { Text(String(format: "%.0f mg", currentState.totalMgLast24h)) .font(.caption.weight(.semibold)) .foregroundColor(caffeineGreen) - Text(NSLocalizedString("24h Total", comment: "LoopInsights caffeine 24h total")) - .font(.caption2) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("24h Total", comment: "LoopInsights caffeine 24h total"), tip: .totalLast24h) } VStack(spacing: 2) { Text(String(format: "%.0f mg", currentState.peakLevelToday)) .font(.caption.weight(.semibold)) .foregroundColor(caffeineGreen) - Text(NSLocalizedString("Today's Peak", comment: "LoopInsights caffeine today peak")) - .font(.caption2) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Today's Peak", comment: "LoopInsights caffeine today peak"), tip: .todaysPeak) } if let lastTime = currentState.lastIntakeTime { VStack(spacing: 2) { Text(Self.timeFormatter.string(from: lastTime)) .font(.caption.weight(.semibold)) .foregroundColor(caffeineGreen) - Text(NSLocalizedString("Last Intake", comment: "LoopInsights caffeine last intake")) - .font(.caption2) - .foregroundColor(.secondary) + infoLabel(NSLocalizedString("Last Intake", comment: "LoopInsights caffeine last intake"), tip: .lastIntake) } } } @@ -119,7 +149,28 @@ struct LoopInsights_CaffeineLogView: View { } .frame(maxWidth: .infinity) .padding(.vertical, 8) + .alert(item: $activeInfo) { tip in + Alert( + title: Text(tip.title), + message: Text(tip.message), + dismissButton: .default(Text(NSLocalizedString("OK", comment: "OK button"))) + ) + } + } + } + + private func infoLabel(_ text: String, tip: CaffeineInfoTip) -> some View { + Button(action: { activeInfo = tip }) { + HStack(spacing: 3) { + Text(text) + .font(.caption2) + .foregroundColor(.secondary) + Image(systemName: "info.circle") + .font(.system(size: 10)) + .foregroundColor(.secondary) + } } + .buttonStyle(.plain) } // MARK: - Quick Add @@ -135,9 +186,8 @@ struct LoopInsights_CaffeineLogView: View { tracker.logCaffeine(milligrams: preset.milligrams, source: preset.name) }) { HStack(spacing: 6) { - Image(systemName: preset.icon) + Text(preset.icon) .font(.caption) - .foregroundColor(caffeineGreen) VStack(alignment: .leading, spacing: 1) { Text(preset.name) .font(.caption) @@ -248,6 +298,7 @@ struct LoopInsights_CaffeineLogView: View { } .onDelete { indexSet in let entriesToDelete = indexSet.compactMap { idx -> LoopInsightsCaffeineEntry? in + guard idx < tracker.entries.count else { return nil } let entry = tracker.entries[idx] return entry.isFromHealthKit ? nil : entry } @@ -255,6 +306,24 @@ struct LoopInsights_CaffeineLogView: View { tracker.removeEntry(entry) } } + + Button(role: .destructive, action: { + showingClearConfirmation = true + }) { + HStack { + Spacer() + Text(NSLocalizedString("Clear All Entries", comment: "LoopInsights clear all caffeine entries")) + Spacer() + } + } + .alert(NSLocalizedString("Clear All Entries?", comment: "LoopInsights clear all caffeine alert title"), isPresented: $showingClearConfirmation) { + Button(NSLocalizedString("Cancel", comment: "Cancel button"), role: .cancel) {} + Button(NSLocalizedString("Clear All", comment: "LoopInsights clear all confirm"), role: .destructive) { + tracker.clearAllEntries() + } + } message: { + Text(NSLocalizedString("This will remove all manual caffeine entries. HealthKit entries will remain. This cannot be undone.", comment: "LoopInsights clear all caffeine alert message")) + } } } } @@ -328,11 +397,14 @@ struct LoopInsights_CaffeineLogView: View { // MARK: - Helpers - /// Gauge color: green base with orange/red for high levels + /// Gauge color: green → yellow → orange → red → dark red private func gaugeColor(_ mg: Double) -> Color { - if mg < 150 { return caffeineGreen } - if mg < 250 { return .orange } - return .red + if mg <= 0 { return .green } + if mg < 100 { return .green } + if mg < 200 { return .yellow } + if mg < 300 { return .orange } + if mg < 400 { return .red } + return Color(red: 0.7, green: 0.0, blue: 0.0) // dark red } private static let timeFormatter: DateFormatter = { From 18d9c124e6b05c166f7c208ece060b1483ca6017 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 13:07:17 -0800 Subject: [PATCH 24/36] Rename chatbot persona to Loopy with cyclone emoji branding - Rename "Ask LoopInsights" to "Ask Loopy" in chat title and dashboard - Update system prompt persona from LoopInsights to Loopy - Replace chat button SF Symbol with cyclone emoji - Update "Chat with your AI Advisor" to "Chat with Loopy" - Update settings description to reference Ask Loopy Chatbot --- Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift | 2 +- Loop/Views/LoopInsights/LoopInsights_ChatView.swift | 4 ++-- Loop/Views/LoopInsights/LoopInsights_DashboardView.swift | 5 ++--- Loop/Views/LoopInsights/LoopInsights_SettingsView.swift | 2 +- .../Views/LoopInsights/LoopInsights_TrendsInsightsView.swift | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index cda16d185e..9f7730ac34 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -60,7 +60,7 @@ final class LoopInsights_AIAnalysis { private func buildSystemPrompt(supplementalContext: String? = nil) -> String { let personality = LoopInsights_FeatureFlags.aiPersonality return """ - You are LoopInsights, an expert-level automated insulin delivery (AID) therapy settings analyst. \ + You are Loopy, an expert-level automated insulin delivery (AID) therapy settings analyst. \ You think like a top endocrinologist who specializes in insulin pump optimization. You analyze \ glucose, insulin, and carbohydrate data to determine whether therapy settings need adjustment. diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift index b5fb503e0a..e4fdba1bdd 100644 --- a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -8,7 +8,7 @@ import SwiftUI -/// Minimal Q&A interface for Ask LoopInsights. +/// Minimal Q&A interface for Ask Loopy. /// Quick answers only — just the facts. struct LoopInsights_ChatView: View { @@ -78,7 +78,7 @@ struct LoopInsights_ChatView: View { } .toolbar { ToolbarItem(placement: .principal) { - Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat title")) + Text("🌀 " + NSLocalizedString("Ask Loopy", comment: "LoopInsights chat title")) .font(.headline) .foregroundColor(.white) } diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index b50f5eb11a..c9a8d91f4c 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -969,9 +969,8 @@ struct LoopInsights_DashboardView: View { Section { Button(action: { showingChat = true }) { HStack { - Image(systemName: "bubble.left.and.bubble.right") - .foregroundColor(.accentColor) - Text(NSLocalizedString("Ask LoopInsights", comment: "LoopInsights chat button")) + Text("🌀") + Text(NSLocalizedString("Ask Loopy", comment: "LoopInsights chat button")) Spacer() Image(systemName: "chevron.right") .font(.caption) diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index 20cf94b641..c248981316 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -616,7 +616,7 @@ struct LoopInsights_SettingsView: View { LoopInsights_FeatureFlags.analysisPeriod = newValue } - Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions and Ask LoopInsights Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights analysis period description")) + Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions and Ask Loopy Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights analysis period description")) .font(.caption) .foregroundColor(.secondary) diff --git a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift index 16d512fa87..c780c35e86 100644 --- a/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_TrendsInsightsView.swift @@ -394,7 +394,7 @@ struct LoopInsights_TrendsInsightsView: View { .font(.system(size: 48)) .foregroundColor(.purple.opacity(0.5)) - Text(NSLocalizedString("Chat with your AI Advisor", comment: "LoopInsights trends advisor title")) + Text(NSLocalizedString("Chat with Loopy", comment: "LoopInsights trends advisor title")) .font(.headline) .foregroundColor(.white.opacity(0.9)) From e6212bf70d35a90832cf7e0ddc031fe68ef83f4b Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 13:53:19 -0800 Subject: [PATCH 25/36] Add real-time glucose to Loopy chat and improve voice detection - Fetch latest glucose readings fresh on every message (not cached) - Include current reading, 30-min trend, and 3h history in chat prompt - Fix voice dictation detection: stay in voice mode once detected, only reset on field clear instead of on every small text change - Reduce auto-send debounce from 2.0s to 1.5s - Lower dictation burst threshold from 4 to 3 characters --- Loop/Localizable.xcstrings | 10 ++- .../LoopInsights_ChatViewModel.swift | 73 +++++++++++++++++-- 2 files changed, 74 insertions(+), 9 deletions(-) diff --git a/Loop/Localizable.xcstrings b/Loop/Localizable.xcstrings index 33df532f41..85a5211c0b 100644 --- a/Loop/Localizable.xcstrings +++ b/Loop/Localizable.xcstrings @@ -3360,6 +3360,10 @@ "⚠️ Basal Rate changes carry higher risk than other settings. Basal insulin delivers continuously — including overnight while you sleep. Changes that are too aggressive can cause severe low blood sugar (hypoglycemia), especially at night. Monitor your glucose closely for 3–5 days after applying this change." : { "comment" : "LoopInsights basal rate safety warning" }, + "🌀" : { + "comment" : "A description of the \"Ask Loopy\" button in the LoopInsights dashboard.", + "isCommentAutoGenerated" : true + }, "3 Days" : { "comment" : "LoopInsights analysis period: 3 days" }, @@ -8428,7 +8432,7 @@ "Ask a question..." : { "comment" : "LoopInsights chat input placeholder" }, - "Ask LoopInsights" : { + "Ask Loopy" : { "comment" : "LoopInsights chat button\nLoopInsights chat title" }, "Ask questions about your glucose trends, therapy settings, and get personalized advice." : { @@ -11857,7 +11861,7 @@ } } }, - "Chat with your AI Advisor" : { + "Chat with Loopy" : { "comment" : "LoopInsights trends advisor title" }, "Check every" : { @@ -34013,7 +34017,7 @@ "Risk window until %@." : { "comment" : "LoopInsights alcohol risk window" }, - "Rolling lookback period for automated AI-based suggestions and Ask LoopInsights Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { + "Rolling lookback period for automated AI-based suggestions and Ask Loopy Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?" : { "comment" : "LoopInsights analysis period description" }, "Run an analysis from the LoopInsights Dashboard to generate your first suggestions." : { diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 12620bd61c..6c85443a10 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -105,7 +105,7 @@ final class LoopInsights_ChatViewModel: ObservableObject { Task { @MainActor in do { // Use cached context if fresh (< 5 min), otherwise re-fetch - let context: String + var context: String if let cached = cachedTherapyContext, let ts = cacheTimestamp, Date().timeIntervalSince(ts) < 300 { @@ -123,6 +123,12 @@ final class LoopInsights_ChatViewModel: ObservableObject { cacheTimestamp = Date() } + // Always fetch fresh real-time glucose (not cached) + let realtimeCtx = await fetchRealtimeGlucoseContext() + if !realtimeCtx.isEmpty { + context = realtimeCtx + "\n" + context + } + let history = session.conversationHistory().dropLast().map { ($0.role, $0.content) } let systemPrompt = buildChatSystemPrompt(therapyContext: context) @@ -152,24 +158,31 @@ final class LoopInsights_ChatViewModel: ObservableObject { sendMessage() } - /// Called from the view's `.onChange(of: inputText)` to detect dictation vs typing + /// Called from the view's `.onChange(of: inputText)` to detect dictation vs typing. + /// Dictation inserts multi-character bursts. Once detected, stays in voice mode + /// until the message is sent or the field is cleared. Auto-sends after 1.5s of + /// no further text changes. func handleTextChange(oldValue: String, newValue: String) { let changeSize = newValue.count - oldValue.count - let isAppend = newValue.hasPrefix(oldValue) || oldValue.isEmpty - if isAppend && changeSize >= 4 { + // Detect dictation: 3+ characters appended at once (dictation burst) + if changeSize >= 3 { pendingVoiceMessage = true - } else if changeSize == 1 || changeSize == -1 { + } + + // Only cancel voice mode on explicit clear (backspace to empty or full clear) + if newValue.isEmpty { pendingVoiceMessage = false } + // Reset the auto-send timer on every change autoSendTimer?.cancel() if pendingVoiceMessage && !newValue.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { let timer = DispatchWorkItem { [weak self] in self?.sendMessage() } autoSendTimer = timer - DispatchQueue.main.asyncAfter(deadline: .now() + 2.0, execute: timer) + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5, execute: timer) } } @@ -231,6 +244,54 @@ final class LoopInsights_ChatViewModel: ObservableObject { return prompt } + // MARK: - Real-Time Glucose + + /// Fetch the most recent glucose readings (last 3 hours) fresh on every message. + /// This gives Loopy access to the user's current blood sugar and recent trend. + private func fetchRealtimeGlucoseContext() async -> String { + let now = Date() + let threeHoursAgo = now.addingTimeInterval(-3 * 3600) + + var samples: [(date: Date, value: Double)] = [] + do { + let rawSamples = try await coordinator.fetchGlucoseSamples(start: threeHoursAgo, end: now) + samples = rawSamples.map { (date: $0.startDate, value: $0.quantity.doubleValue(for: .milligramsPerDeciliter)) } + } catch { + LoopInsights_FeatureFlags.log.error("Chat: failed to fetch real-time glucose: \(error)") + } + + guard !samples.isEmpty else { return "" } + + let sorted = samples.sorted { $0.date < $1.date } + let latest = sorted.last! + let minutesAgo = Int(now.timeIntervalSince(latest.date) / 60) + + var ctx = "CURRENT GLUCOSE (REAL-TIME):\n" + ctx += " Latest Reading: \(String(format: "%.0f", latest.value)) mg/dL (\(minutesAgo) min ago)\n" + + // Trend from last 30 min + let thirtyMinAgo = now.addingTimeInterval(-30 * 60) + let recentSamples = sorted.filter { $0.date >= thirtyMinAgo } + if recentSamples.count >= 2, let first = recentSamples.first, let last = recentSamples.last { + let delta = last.value - first.value + let direction = delta > 5 ? "rising" : (delta < -5 ? "falling" : "stable") + ctx += " 30-min Trend: \(direction) (\(delta >= 0 ? "+" : "")\(String(format: "%.0f", delta)) mg/dL)\n" + } + + // Last 3 hours of readings (sampled every ~30 min for brevity) + let formatter = DateFormatter() + formatter.timeStyle = .short + ctx += " Recent Readings:\n" + var lastShown: Date? + for sample in sorted { + if let prev = lastShown, sample.date.timeIntervalSince(prev) < 25 * 60 { continue } + ctx += " \(formatter.string(from: sample.date)): \(String(format: "%.0f", sample.value)) mg/dL\n" + lastShown = sample.date + } + + return ctx + } + // MARK: - Therapy Context /// Build a therapy context string from a snapshot and stats. From 3589cf1cd7869e799731923250b4fc1814f4d2ad Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 13:57:49 -0800 Subject: [PATCH 26/36] Wire supplemental context into Loopy chat for full data access Loopy now receives caffeine, alcohol, circadian profile, dawn phenomenon, negative basal stats, stress score, and food response patterns on every message via Coordinator.buildSupplementalContext(). Stats object cached alongside therapy context so supplemental data is always available. --- .../LoopInsights/LoopInsights_ChatViewModel.swift | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 6c85443a10..823ad5321d 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -34,6 +34,7 @@ final class LoopInsights_ChatViewModel: ObservableObject { /// Cached therapy context built during pre-fetch — reused across messages private var cachedTherapyContext: String? + private var cachedStats: LoopInsightsAggregatedStats? private var cacheTimestamp: Date? /// Pre-built quick-ask suggestions shown when the conversation is empty @@ -77,6 +78,7 @@ final class LoopInsights_ChatViewModel: ObservableObject { catch { LoopInsights_FeatureFlags.log.error("Chat prefetch: aggregate failed: \(error)") } cachedTherapyContext = Self.buildTherapyContext(snapshot: snapshot, stats: stats) + cachedStats = stats cacheTimestamp = Date() } } @@ -120,9 +122,17 @@ final class LoopInsights_ChatViewModel: ObservableObject { catch { LoopInsights_FeatureFlags.log.error("Chat: failed to aggregate data: \(error)") } context = Self.buildTherapyContext(snapshot: snapshot, stats: stats) cachedTherapyContext = context + cachedStats = stats cacheTimestamp = Date() } + // Supplemental context: caffeine, alcohol, circadian, food response, stress + // Fetched fresh every message since caffeine/alcohol levels change in real-time + if let stats = cachedStats, + let supplemental = await coordinator.buildSupplementalContext(stats: stats) { + context += "\n\n" + supplemental + } + // Always fetch fresh real-time glucose (not cached) let realtimeCtx = await fetchRealtimeGlucoseContext() if !realtimeCtx.isEmpty { From 7ff661afc839b54dd29123a72a843a265f158e48 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 14:08:00 -0800 Subject: [PATCH 27/36] Wire IOB, COB, overrides, predicted glucose, and loop status into Loopy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add buildLiveStatusContext() to Coordinator that reads IOB/COB from existing store protocols, active overrides from SettingsProvider, and predicted glucose + loop freshness from StatusExtensionContext in UserDefaults. Zero changes to Loop core files — all read-only access through interfaces the Coordinator already holds. --- .../LoopInsights_Coordinator.swift | 144 ++++++++++++++++++ .../LoopInsights_ChatViewModel.swift | 5 + 2 files changed, 149 insertions(+) diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index e52141046e..15fe503b9e 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -223,6 +223,124 @@ final class LoopInsights_Coordinator: ObservableObject { return try await bridge.getCarbEntries(start: start, end: end) } + // MARK: - Live Loop Status for Chat + + /// Build a live status context string for the chat, pulling IOB, COB, active + /// overrides, predicted glucose, and loop freshness from existing read-only sources. + /// Zero changes to Loop core files — reads from protocol methods and UserDefaults. + func buildLiveStatusContext() async -> String? { + var parts: [String] = [] + + // IOB + if let bridge = dataProviderBridge { + do { + let iob = try await bridge.getInsulinOnBoard() + parts.append(" IOB (Insulin On Board): \(String(format: "%.2f", iob.value)) U") + } catch { + LoopInsights_FeatureFlags.log.error("Live status: IOB fetch failed: \(error)") + } + + // COB + do { + let cob = try await bridge.getCarbsOnBoard() + parts.append(" COB (Carbs On Board): \(String(format: "%.0f", cob.quantity.doubleValue(for: .gram()))) g") + } catch { + LoopInsights_FeatureFlags.log.error("Live status: COB fetch failed: \(error)") + } + } + + // Active overrides + dosing strategy from settings + if let bridge = dataProviderBridge { + let settings = bridge.settingsProvider.latestSettings + + let loopMode = settings.dosingEnabled ? "Closed Loop" : "Open Loop" + let strategy: String + switch settings.automaticDosingStrategy { + case .tempBasalOnly: + strategy = "Temp Basal Only" + case .automaticBolus: + strategy = "Automatic Bolus" + default: + strategy = "Unknown" + } + parts.append(" Loop Mode: \(loopMode) (\(strategy))") + + if let override = settings.scheduleOverride, override.isActive() { + var overrideDesc = " Active Override:" + switch override.context { + case .preset(let preset): + overrideDesc += " \(preset.name)" + case .legacyWorkout: + overrideDesc += " Workout" + case .custom: + overrideDesc += " Custom" + case .preMeal: + overrideDesc += " Pre-Meal" + } + if let factor = override.settings.insulinNeedsScaleFactor { + overrideDesc += " (insulin needs \(String(format: "%.0f", factor * 100))%)" + } + if let range = override.settings.targetRange { + let low = range.lowerBound.doubleValue(for: .milligramsPerDeciliter) + let high = range.upperBound.doubleValue(for: .milligramsPerDeciliter) + overrideDesc += " target \(String(format: "%.0f", low))-\(String(format: "%.0f", high)) mg/dL" + } + let remaining = override.scheduledEndDate.timeIntervalSinceNow + if remaining.isFinite && remaining > 0 { + let mins = Int(remaining / 60) + overrideDesc += " (\(mins / 60)h \(mins % 60)m remaining)" + } else if override.duration.isInfinite { + overrideDesc += " (indefinite)" + } + parts.append(overrideDesc) + } + + if let preMeal = settings.preMealOverride, preMeal.isActive() { + parts.append(" Pre-Meal Override: Active") + } + } + + // Predicted glucose + loop freshness from StatusExtensionContext (UserDefaults) + if let statusCtx = UserDefaults.appGroup?.statusExtensionContext { + if let lastLoop = statusCtx.lastLoopCompleted { + let minsAgo = Int(Date().timeIntervalSince(lastLoop) / 60) + parts.append(" Last Loop: \(minsAgo) min ago") + } + + if let netBasal = statusCtx.netBasal { + parts.append(" Current Delivery: \(String(format: "%.2f", netBasal.rate)) U/hr (\(String(format: "%.0f", netBasal.percentage))% of scheduled)") + } + + if let predicted = statusCtx.predictedGlucose { + let samples = predicted.samples + if let first = samples.first, let last = samples.last, samples.count >= 2 { + let formatter = DateFormatter() + formatter.timeStyle = .short + let current = String(format: "%.0f", first.value) + let predicted30 = samples.count > 6 ? String(format: "%.0f", samples[6].value) : nil + let predictedEnd = String(format: "%.0f", last.value) + var predLine = " Predicted Glucose: \(current) now" + if let p30 = predicted30 { + predLine += " → \(p30) in 30 min" + } + predLine += " → \(predictedEnd) at \(formatter.string(from: last.startDate))" + parts.append(predLine) + } + } + + if let battery = statusCtx.batteryPercentage { + parts.append(" Pump Battery: \(String(format: "%.0f", battery * 100))%") + } + + if let reservoir = statusCtx.reservoirCapacity { + parts.append(" Reservoir: \(String(format: "%.0f", reservoir)) U remaining") + } + } + + guard !parts.isEmpty else { return nil } + return "LIVE LOOP STATUS:\n" + parts.joined(separator: "\n") + } + // MARK: - Therapy Settings Write Access /// Capture a snapshot of the current therapy settings @@ -439,4 +557,30 @@ private final class DataProviderBridge: LoopInsightsDataProviderProtocol { func getLatestStoredSettings() -> StoredSettings { return settingsProvider.latestSettings } + + func getInsulinOnBoard() async throws -> InsulinValue { + return try await withCheckedThrowingContinuation { continuation in + doseStore.insulinOnBoard(at: Date()) { result in + switch result { + case .success(let value): + continuation.resume(returning: value) + case .failure(let error): + continuation.resume(throwing: error) + } + } + } + } + + func getCarbsOnBoard() async throws -> CarbValue { + return try await withCheckedThrowingContinuation { continuation in + carbStore.carbsOnBoard(at: Date(), effectVelocities: nil) { result in + switch result { + case .success(let value): + continuation.resume(returning: value) + case .failure(let error): + continuation.resume(throwing: error) + } + } + } + } } diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index 823ad5321d..c81724ddf2 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -133,6 +133,11 @@ final class LoopInsights_ChatViewModel: ObservableObject { context += "\n\n" + supplemental } + // Live loop status: IOB, COB, overrides, predicted glucose, loop freshness + if let liveStatus = await coordinator.buildLiveStatusContext() { + context += "\n\n" + liveStatus + } + // Always fetch fresh real-time glucose (not cached) let realtimeCtx = await fetchRealtimeGlucoseContext() if !realtimeCtx.isEmpty { From d62adfdc898873e5ecbb20f5ca4a32d354f61621 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 14:19:59 -0800 Subject: [PATCH 28/36] Cut unsolicited praise and encouragement from Loopy chat prompt Add explicit rule: never give unprompted "great job" or "you're doing well" responses. Just answer the question. Evaluate honestly only when asked directly. --- Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index c81724ddf2..aae91b7114 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -235,6 +235,9 @@ final class LoopInsights_ChatViewModel: ObservableObject { - For settings changes: current value → suggested value → why, in one line. - Never fabricate numbers. Only reference what's in the data below. - If no data is available, just say so briefly. + - NEVER give unsolicited praise, encouragement, or reassurance. No "Great job!", \ + "You're doing well!", "Keep it up!" or similar. Just answer the question. \ + If they ask how they're doing, then evaluate honestly. Otherwise, skip it entirely. DATA: \(therapyContext) From c54d3096a05cf1dc70bdf5b3e3df1f4dea9ea6dc Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 14:25:39 -0800 Subject: [PATCH 29/36] Wire FoodFinder history and Nightscout import into Loopy context FoodFinder: reads meal history via AnalysisHistoryStore.meals(), formats per-meal details including AI carb estimate vs actual entry delta and confidence. Includes aggregate AI accuracy summary when 3+ meals exist. Nightscout: creates importer from saved config when enabled and connected, fetches glucose entries and treatments, caches result for 5 minutes to avoid repeated network calls. Formats recent readings, carbs, and boluses. Both gated behind their respective feature flags and only included when data is available. --- .../LoopInsights_Coordinator.swift | 151 ++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 15fe503b9e..9e8fd58cab 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -200,10 +200,161 @@ final class LoopInsights_Coordinator: ObservableObject { if !alcoholCtx.isEmpty { context.append(alcoholCtx) } } + // FoodFinder meal history + if FoodFinder_FeatureFlags.isEnabled { + let foodCtx = Self.buildFoodFinderPromptContext(start: start, end: end) + if !foodCtx.isEmpty { context.append(foodCtx) } + } + + // Nightscout supplemental data + if LoopInsights_FeatureFlags.nightscoutImportEnabled { + let nsCtx = await buildNightscoutPromptContext(start: start, end: end) + if !nsCtx.isEmpty { context.append(nsCtx) } + } + guard !context.isEmpty else { return nil } return context.joined(separator: "\n") } + // MARK: - FoodFinder Context + + /// Build prompt context from FoodFinder meal analysis history. + /// Includes AI carb estimates vs actual entries — the most valuable signal + /// for carb ratio tuning recommendations. + private static func buildFoodFinderPromptContext(start: Date, end: Date) -> String { + let meals = FoodFinder_AnalysisHistoryStore.meals(from: start, to: end) + guard !meals.isEmpty else { return "" } + + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .short + + var lines: [String] = ["FOODFINDER MEAL HISTORY (\(meals.count) meals):"] + + // Per-meal summary (most recent 20 to keep context size reasonable) + for meal in meals.prefix(20) { + var line = " \(formatter.string(from: meal.date)): \(meal.name)" + line += " — \(String(format: "%.0f", meal.carbsGrams))g carbs entered" + + if let aiCarbs = meal.originalAICarbs { + let delta = meal.carbsGrams - aiCarbs + line += ", AI estimated \(String(format: "%.0f", aiCarbs))g" + if abs(delta) > 1 { + line += " (user \(delta > 0 ? "+" : "")\(String(format: "%.0f", delta))g)" + } + } + + if let confidence = meal.aiConfidencePercent { + line += " [\(confidence)% confidence]" + } + + lines.append(line) + } + + // Aggregate AI accuracy stats + let mealsWithAI = meals.filter { $0.originalAICarbs != nil } + if mealsWithAI.count >= 3 { + let deltas = mealsWithAI.compactMap { meal -> Double? in + guard let aiCarbs = meal.originalAICarbs else { return nil } + return meal.carbsGrams - aiCarbs + } + let avgDelta = deltas.reduce(0, +) / Double(deltas.count) + let overCount = deltas.filter { $0 > 2 }.count + let underCount = deltas.filter { $0 < -2 }.count + let accurateCount = deltas.filter { abs($0) <= 2 }.count + + lines.append(" AI Accuracy Summary:") + lines.append(" Avg user adjustment: \(avgDelta >= 0 ? "+" : "")\(String(format: "%.1f", avgDelta))g") + lines.append(" Accurate (±2g): \(accurateCount)/\(mealsWithAI.count), User added carbs: \(overCount), User reduced carbs: \(underCount)") + } + + return lines.joined(separator: "\n") + } + + // MARK: - Nightscout Context + + /// Cached Nightscout import result to avoid repeated network calls + private static var cachedNightscoutResult: LoopInsightsNightscoutImportResult? + private static var nightscoutCacheTimestamp: Date? + + /// Build prompt context from Nightscout data. Uses a 5-minute cache to + /// avoid hammering the server on every chat message. + private func buildNightscoutPromptContext(start: Date, end: Date) async -> String { + let config = LoopInsightsNightscoutConfig.load() + guard config.isConnected, !config.siteURL.isEmpty else { return "" } + + // Use cached result if fresh (< 5 min) + let result: LoopInsightsNightscoutImportResult + if let cached = Self.cachedNightscoutResult, + let ts = Self.nightscoutCacheTimestamp, + Date().timeIntervalSince(ts) < 300 { + result = cached + } else { + let importer = LoopInsights_NightscoutImporter(config: config) + do { + result = try await importer.importData(start: start, end: end) + Self.cachedNightscoutResult = result + Self.nightscoutCacheTimestamp = Date() + } catch { + LoopInsights_FeatureFlags.log.error("Nightscout import for context failed: \(error)") + return "" + } + } + + guard result.entryCount > 0 || result.treatmentCount > 0 else { return "" } + + var lines: [String] = ["NIGHTSCOUT DATA (\(result.summary)):"] + + // Recent glucose from Nightscout (last 12 hours, sampled every ~30 min) + let twelveHoursAgo = Date().addingTimeInterval(-12 * 3600) + let recentGlucose = result.glucoseReadings + .filter { $0.date >= twelveHoursAgo } + .sorted { $0.date < $1.date } + + if !recentGlucose.isEmpty { + let formatter = DateFormatter() + formatter.timeStyle = .short + lines.append(" Recent Glucose (Nightscout):") + var lastShown: Date? + for reading in recentGlucose { + if let prev = lastShown, reading.date.timeIntervalSince(prev) < 25 * 60 { continue } + lines.append(" \(formatter.string(from: reading.date)): \(String(format: "%.0f", reading.mgdl)) mg/dL") + lastShown = reading.date + } + } + + // Recent treatments + let recentCarbs = result.carbEntries + .filter { $0.date >= twelveHoursAgo } + .sorted { $0.date > $1.date } + + if !recentCarbs.isEmpty { + let formatter = DateFormatter() + formatter.timeStyle = .short + lines.append(" Recent Meals (Nightscout):") + for entry in recentCarbs.prefix(10) { + var line = " \(formatter.string(from: entry.date)): \(String(format: "%.0f", entry.grams))g carbs" + if let foodType = entry.foodType { line += " (\(foodType))" } + lines.append(line) + } + } + + let recentBoluses = result.bolusEntries + .filter { $0.date >= twelveHoursAgo } + .sorted { $0.date > $1.date } + + if !recentBoluses.isEmpty { + let formatter = DateFormatter() + formatter.timeStyle = .short + lines.append(" Recent Boluses (Nightscout):") + for bolus in recentBoluses.prefix(10) { + lines.append(" \(formatter.string(from: bolus.date)): \(String(format: "%.1f", bolus.units)) U") + } + } + + return lines.joined(separator: "\n") + } + // MARK: - Raw Data Access /// Fetch raw glucose samples for the given date range. From 5f42c2cd9718804c7b8cb01ca6171efd36cd5207 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 14:33:46 -0800 Subject: [PATCH 30/36] Add permanent meal archive, full nutritional prompt, and glucose correlation 1. MealArchive: permanent JSON file storage in Application Support that survives FoodFinder's 7-day prune. Hooked into AnalysisHistoryStore.record() so every meal is archived automatically. Deduplicates by ID. 2. Enriched FoodFinder prompt: per-item nutritional breakdown (protein, fat, fiber, calories, absorption time), per-item detail for multi-item meals, avg meal composition summary. Reads from archive for full history. 3. Nutritional glucose correlation: matches FoodFinder records with glucose data, groups meals by fat/protein/fiber ratio, compares spike magnitude between groups. Discovers patterns like "high-fat meals delay peak by 30 min" or "fiber reduces spikes by 15 mg/dL". --- .../LoopInsights_Coordinator.swift | 84 +++++++-- .../FoodFinder_AnalysisHistoryStore.swift | 177 ++++++++++++++++++ .../LoopInsights_FoodResponseAnalyzer.swift | 150 +++++++++++++++ 3 files changed, 398 insertions(+), 13 deletions(-) create mode 100644 Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 9e8fd58cab..9d90e7083a 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -200,10 +200,22 @@ final class LoopInsights_Coordinator: ObservableObject { if !alcoholCtx.isEmpty { context.append(alcoholCtx) } } - // FoodFinder meal history + // FoodFinder meal history + nutritional glucose correlation if FoodFinder_FeatureFlags.isEnabled { let foodCtx = Self.buildFoodFinderPromptContext(start: start, end: end) if !foodCtx.isEmpty { context.append(foodCtx) } + + // Correlate FoodFinder nutritional profiles with glucose spikes + if let glucSamples = resolvedGlucose { + let archiveMeals = MealArchive.meals(from: start, to: end) + if !archiveMeals.isEmpty { + let nutritionCtx = LoopInsights_FoodResponseAnalyzer.analyzeNutritionalCorrelations( + meals: archiveMeals, + glucoseSamples: glucSamples + ) + if !nutritionCtx.isEmpty { context.append(nutritionCtx) } + } + } } // Nightscout supplemental data @@ -219,36 +231,75 @@ final class LoopInsights_Coordinator: ObservableObject { // MARK: - FoodFinder Context /// Build prompt context from FoodFinder meal analysis history. - /// Includes AI carb estimates vs actual entries — the most valuable signal - /// for carb ratio tuning recommendations. + /// Reads from the long-term archive for full history. Includes per-item + /// nutritional detail (protein, fat, fiber, calories) and AI accuracy stats. private static func buildFoodFinderPromptContext(start: Date, end: Date) -> String { - let meals = FoodFinder_AnalysisHistoryStore.meals(from: start, to: end) + // Read from long-term archive first, fall back to 7-day store + var meals = MealArchive.meals(from: start, to: end) + if meals.isEmpty { + meals = FoodFinder_AnalysisHistoryStore.meals(from: start, to: end) + } guard !meals.isEmpty else { return "" } let formatter = DateFormatter() formatter.dateStyle = .short formatter.timeStyle = .short - var lines: [String] = ["FOODFINDER MEAL HISTORY (\(meals.count) meals):"] + let archiveTotal = MealArchive.count + var lines: [String] = ["FOODFINDER MEAL HISTORY (\(meals.count) meals in period, \(archiveTotal) total archived):"] - // Per-meal summary (most recent 20 to keep context size reasonable) - for meal in meals.prefix(20) { + // Per-meal detail (most recent 15 to keep prompt size reasonable) + for meal in meals.prefix(15) { var line = " \(formatter.string(from: meal.date)): \(meal.name)" - line += " — \(String(format: "%.0f", meal.carbsGrams))g carbs entered" + line += " — \(String(format: "%.0f", meal.carbsGrams))g carbs" + // Full nutritional profile from AI analysis + if let result = meal.analysisResult { + var macros: [String] = [] + if let protein = result.totalProtein, protein > 0 { + macros.append("\(String(format: "%.0f", protein))g protein") + } + if let fat = result.totalFat, fat > 0 { + macros.append("\(String(format: "%.0f", fat))g fat") + } + if let fiber = result.totalFiber, fiber > 0 { + macros.append("\(String(format: "%.0f", fiber))g fiber") + } + if let cal = result.totalCalories, cal > 0 { + macros.append("\(String(format: "%.0f", cal)) cal") + } + if !macros.isEmpty { + line += " (\(macros.joined(separator: ", ")))" + } + if let absorb = result.absorptionTimeHours { + line += " ~\(String(format: "%.1f", absorb))h absorption" + } + } + + // AI vs user carb delta if let aiCarbs = meal.originalAICarbs { let delta = meal.carbsGrams - aiCarbs - line += ", AI estimated \(String(format: "%.0f", aiCarbs))g" + line += " | AI: \(String(format: "%.0f", aiCarbs))g" if abs(delta) > 1 { line += " (user \(delta > 0 ? "+" : "")\(String(format: "%.0f", delta))g)" } } if let confidence = meal.aiConfidencePercent { - line += " [\(confidence)% confidence]" + line += " [\(confidence)%]" } lines.append(line) + + // Per-item breakdown for multi-item meals (compact) + if let items = meal.analysisResult?.foodItemsDetailed, items.count > 1 { + for item in items { + var itemLine = " · \(item.name): \(String(format: "%.0f", item.carbohydrates))g carbs" + if let fat = item.fat, fat > 0 { itemLine += ", \(String(format: "%.0f", fat))g fat" } + if let protein = item.protein, protein > 0 { itemLine += ", \(String(format: "%.0f", protein))g protein" } + lines.append(itemLine) + } + } } // Aggregate AI accuracy stats @@ -263,9 +314,16 @@ final class LoopInsights_Coordinator: ObservableObject { let underCount = deltas.filter { $0 < -2 }.count let accurateCount = deltas.filter { abs($0) <= 2 }.count - lines.append(" AI Accuracy Summary:") - lines.append(" Avg user adjustment: \(avgDelta >= 0 ? "+" : "")\(String(format: "%.1f", avgDelta))g") - lines.append(" Accurate (±2g): \(accurateCount)/\(mealsWithAI.count), User added carbs: \(overCount), User reduced carbs: \(underCount)") + lines.append(" AI Accuracy: avg adjustment \(avgDelta >= 0 ? "+" : "")\(String(format: "%.1f", avgDelta))g, accurate ±2g: \(accurateCount)/\(mealsWithAI.count), user added: \(overCount), user reduced: \(underCount)") + } + + // Nutritional composition summary + let mealsWithNutrition = meals.filter { $0.analysisResult?.totalFat != nil } + if mealsWithNutrition.count >= 3 { + let avgFat = mealsWithNutrition.compactMap { $0.analysisResult?.totalFat }.reduce(0, +) / Double(mealsWithNutrition.count) + let avgProtein = mealsWithNutrition.compactMap { $0.analysisResult?.totalProtein }.reduce(0, +) / Double(mealsWithNutrition.count) + let avgFiber = mealsWithNutrition.compactMap { $0.analysisResult?.totalFiber }.reduce(0, +) / Double(mealsWithNutrition.count) + lines.append(" Avg meal composition: \(String(format: "%.0f", avgFat))g fat, \(String(format: "%.0f", avgProtein))g protein, \(String(format: "%.0f", avgFiber))g fiber") } return lines.joined(separator: "\n") diff --git a/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift b/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift new file mode 100644 index 0000000000..90eac876e1 --- /dev/null +++ b/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift @@ -0,0 +1,177 @@ +// +// FoodFinder_AnalysisHistoryStore.swift +// Loop +// +// FoodFinder — Persistence and cleanup for AI analysis history records. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - LoopInsights Notification +// +// Posted every time FoodFinder records a meal analysis. LoopInsights (or any +// future feature) can observe this to correlate meal events with BG data in +// real-time, without importing any FoodFinder view code. +// +// userInfo keys: +// "recordID" — String, the FoodFinder_AnalysisRecord.id that was just saved. + +extension Notification.Name { + static let foodFinderMealLogged = Notification.Name("com.loopkit.Loop.foodFinderMealLogged") +} + +// MARK: - MealDataProvider Protocol +// +// Clean query interface for LoopInsights to access FoodFinder meal history. +// FoodFinder_AnalysisHistoryStore conforms below so LoopInsights never needs +// to know about UserDefaults keys, pruning logic, or storage format. +// +// Key fields for LoopInsights tuning recommendations: +// • originalAICarbs vs carbsGrams → reveals systematic AI over/under-estimation +// • aiConfidencePercent → low-confidence meals can be weighted differently +// • absorptionTime + foodType → patterns in absorption accuracy by food category +// • date → time-of-day and day-of-week trend analysis + +protocol MealDataProvider { + static func meals(from startDate: Date, to endDate: Date) -> [FoodFinder_AnalysisRecord] +} + +enum FoodFinder_AnalysisHistoryStore { + + // MARK: - Record + + /// Append a new analysis record to the stored history. + /// Also archives the record permanently for long-term LoopInsights analysis. + static func record(_ record: FoodFinder_AnalysisRecord) { + var records = allRecords() + records.append(record) + save(records) + MealArchive.archive(record) + #if DEBUG + print("FoodFinder: Recorded analysis history — total: \(records.count)") + #endif + } + + // MARK: - Load (filtered by retention) + + /// Returns records that fall within the retention window. + static func loadRecords(retentionDays: Int) -> [FoodFinder_AnalysisRecord] { + let cutoff = Date().addingTimeInterval(-Double(retentionDays) * 86400) + return allRecords() + .filter { $0.date >= cutoff } + .sorted { $0.date > $1.date } + } + + // MARK: - Prune Expired + + /// Remove records older than the retention window and delete orphaned thumbnails. + static func pruneExpired(retentionDays: Int) { + let cutoff = Date().addingTimeInterval(-Double(retentionDays) * 86400) + let all = allRecords() + let (keep, expired) = all.reduce(into: ([FoodFinder_AnalysisRecord](), [FoodFinder_AnalysisRecord]())) { result, record in + if record.date >= cutoff { + result.0.append(record) + } else { + result.1.append(record) + } + } + + // Delete thumbnails for expired records + for record in expired { + if let thumbID = record.thumbnailID { + FavoriteFoodImageStore.deleteThumbnail(id: thumbID) + } + } + + if expired.count > 0 { + save(keep) + #if DEBUG + print("FoodFinder: Pruned \(expired.count) expired analysis records, \(keep.count) remain") + #endif + } + } + + // MARK: - Private Helpers + + private static let key = FoodFinder_FeatureFlags.Keys.analysisHistory + + private static func allRecords() -> [FoodFinder_AnalysisRecord] { + guard let data = UserDefaults.standard.data(forKey: key) else { return [] } + return (try? JSONDecoder().decode([FoodFinder_AnalysisRecord].self, from: data)) ?? [] + } + + private static func save(_ records: [FoodFinder_AnalysisRecord]) { + guard let data = try? JSONEncoder().encode(records) else { return } + UserDefaults.standard.set(data, forKey: key) + } +} + +// MARK: - MealDataProvider Conformance +// +// Gives LoopInsights a clean way to query meal history by date range +// without knowing anything about FoodFinder's storage internals. + +extension FoodFinder_AnalysisHistoryStore: MealDataProvider { + static func meals(from startDate: Date, to endDate: Date) -> [FoodFinder_AnalysisRecord] { + allRecords() + .filter { $0.date >= startDate && $0.date <= endDate } + .sorted { $0.date > $1.date } + } +} + +// MARK: - Long-Term Meal Archive +// +// Permanent archive of all meal analysis records for LoopInsights data mining. +// Unlike the 7-day analysis history (UserDefaults), this archive persists +// indefinitely as a JSON file on disk. Used for: +// • Long-term AI carb estimation accuracy tracking +// • Nutritional glucose response correlation (high-fat vs low-fat, etc.) +// • Food pattern trend analysis across months +// • Data mining for personalized meal insights + +enum MealArchive { + + private static let filename = "FoodFinder_MealArchive.json" + + private static var archiveURL: URL { + let appSupport = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first + ?? URL(fileURLWithPath: NSHomeDirectory()).appendingPathComponent("Library/Application Support") + let dir = appSupport.appendingPathComponent("LoopInsights") + try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + return dir.appendingPathComponent(filename) + } + + /// Archive a single record (append to the JSON file on disk). + /// Deduplicates by ID to avoid storing the same meal twice. + static func archive(_ record: FoodFinder_AnalysisRecord) { + var existing = loadAll() + guard !existing.contains(where: { $0.id == record.id }) else { return } + existing.append(record) + saveAll(existing) + } + + /// Load all archived records within a date range. + static func meals(from startDate: Date, to endDate: Date) -> [FoodFinder_AnalysisRecord] { + loadAll() + .filter { $0.date >= startDate && $0.date <= endDate } + .sorted { $0.date > $1.date } + } + + /// Load the complete archive (all time). + static func loadAll() -> [FoodFinder_AnalysisRecord] { + guard FileManager.default.fileExists(atPath: archiveURL.path) else { return [] } + guard let data = try? Data(contentsOf: archiveURL) else { return [] } + return (try? JSONDecoder().decode([FoodFinder_AnalysisRecord].self, from: data)) ?? [] + } + + /// Total archived meal count. + static var count: Int { loadAll().count } + + private static func saveAll(_ records: [FoodFinder_AnalysisRecord]) { + guard let data = try? JSONEncoder().encode(records) else { return } + try? data.write(to: archiveURL, options: .atomic) + } +} diff --git a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift index 7eb6778802..f10f45567e 100644 --- a/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift +++ b/Loop/Services/LoopInsights/LoopInsights_FoodResponseAnalyzer.swift @@ -280,4 +280,154 @@ final class LoopInsights_FoodResponseAnalyzer { } return ctx } + + // MARK: - Nutritional Glucose Correlation + + /// Correlate FoodFinder meal records (with full nutritional detail) against + /// glucose data to discover how macronutrient composition affects BG response. + /// Groups meals by nutritional profile (high-fat vs low-fat, etc.) and compares + /// average glucose spikes between groups. + static func analyzeNutritionalCorrelations( + meals: [FoodFinder_AnalysisRecord], + glucoseSamples: [StoredGlucoseSample] + ) -> String { + // Only analyze meals with full nutritional data + let mealsWithNutrition = meals.filter { meal in + guard let result = meal.analysisResult else { return false } + return result.totalFat != nil && result.totalProtein != nil && meal.carbsGrams > 0 + } + guard mealsWithNutrition.count >= 4 else { return "" } + + // Pre-sort glucose for binary search + let sortedGlucose = glucoseSamples.sorted { $0.startDate < $1.startDate } + let sortedDates = sortedGlucose.map { $0.startDate } + let sortedValues = sortedGlucose.map { $0.quantity.doubleValue(for: .milligramsPerDeciliter) } + + guard !sortedDates.isEmpty else { return "" } + + // Calculate glucose spike for each meal + struct MealSpike { + let meal: FoodFinder_AnalysisRecord + let peakRise: Double // mg/dL above pre-meal + let timeToPeak: Double // minutes + let fatPerCarb: Double // fat grams per carb gram + let proteinPerCarb: Double // protein grams per carb gram + let fiberPerCarb: Double // fiber grams per carb gram + } + + var spikes: [MealSpike] = [] + + for meal in mealsWithNutrition { + guard let result = meal.analysisResult, + let fat = result.totalFat, + let protein = result.totalProtein else { continue } + let fiber = result.totalFiber ?? 0 + + let mealDate = meal.date + + // Pre-meal glucose (30 min before) + let preMealStart = mealDate.addingTimeInterval(-1800) + let preIdx = sortedDates.loopInsights_firstIndex(afterOrAt: preMealStart) { $0 } + var preMealValues: [Double] = [] + for i in preIdx.. mealDate { break } + preMealValues.append(sortedValues[i]) + } + guard !preMealValues.isEmpty else { continue } + let preMealAvg = preMealValues.reduce(0, +) / Double(preMealValues.count) + + // Post-meal glucose (0-4h) + let postEnd = mealDate.addingTimeInterval(4 * 3600) + let postIdx = sortedDates.loopInsights_firstIndex(afterOrAt: mealDate) { $0 } + var postValues: [Double] = [] + var postDates: [Date] = [] + for i in postIdx.. postEnd { break } + if sortedDates[i] > mealDate { + postValues.append(sortedValues[i]) + postDates.append(sortedDates[i]) + } + } + guard postValues.count >= 4 else { continue } + + let peak = postValues.max() ?? preMealAvg + let peakRise = peak - preMealAvg + var timeToPeak: Double = 60 + if let peakIdx = postValues.firstIndex(of: peak) { + timeToPeak = postDates[peakIdx].timeIntervalSince(mealDate) / 60 + } + + spikes.append(MealSpike( + meal: meal, + peakRise: peakRise, + timeToPeak: timeToPeak, + fatPerCarb: fat / meal.carbsGrams, + proteinPerCarb: protein / meal.carbsGrams, + fiberPerCarb: fiber / meal.carbsGrams + )) + } + + guard spikes.count >= 4 else { return "" } + + var lines: [String] = ["NUTRITIONAL GLUCOSE CORRELATIONS (\(spikes.count) meals analyzed):"] + + let avgSpike: ([MealSpike]) -> Double = { group in + group.isEmpty ? 0 : group.map { $0.peakRise }.reduce(0, +) / Double(group.count) + } + let avgTime: ([MealSpike]) -> Double = { group in + group.isEmpty ? 0 : group.map { $0.timeToPeak }.reduce(0, +) / Double(group.count) + } + + // Fat analysis: high-fat (>0.5g fat per g carb) vs low-fat (<0.2g) + let highFat = spikes.filter { $0.fatPerCarb > 0.5 } + let lowFat = spikes.filter { $0.fatPerCarb < 0.2 } + if highFat.count >= 2 && lowFat.count >= 2 { + let hfSpike = avgSpike(highFat) + let lfSpike = avgSpike(lowFat) + let hfTime = avgTime(highFat) + let lfTime = avgTime(lowFat) + lines.append(" Fat Impact:") + lines.append(" High-fat meals (\(highFat.count)): avg spike \(String(format: "%.0f", hfSpike)) mg/dL, peak at \(String(format: "%.0f", hfTime)) min") + lines.append(" Low-fat meals (\(lowFat.count)): avg spike \(String(format: "%.0f", lfSpike)) mg/dL, peak at \(String(format: "%.0f", lfTime)) min") + if hfTime > lfTime + 15 { + lines.append(" → High-fat meals delay glucose peak by ~\(String(format: "%.0f", hfTime - lfTime)) min") + } + } + + // Protein analysis: high-protein (>0.5g protein per g carb) vs low-protein + let highProtein = spikes.filter { $0.proteinPerCarb > 0.5 } + let lowProtein = spikes.filter { $0.proteinPerCarb < 0.2 } + if highProtein.count >= 2 && lowProtein.count >= 2 { + let hpSpike = avgSpike(highProtein) + let lpSpike = avgSpike(lowProtein) + lines.append(" Protein Impact:") + lines.append(" High-protein meals (\(highProtein.count)): avg spike \(String(format: "%.0f", hpSpike)) mg/dL") + lines.append(" Low-protein meals (\(lowProtein.count)): avg spike \(String(format: "%.0f", lpSpike)) mg/dL") + } + + // Fiber analysis: high-fiber (>0.15g fiber per g carb) vs low-fiber + let highFiber = spikes.filter { $0.fiberPerCarb > 0.15 } + let lowFiber = spikes.filter { $0.fiberPerCarb < 0.05 } + if highFiber.count >= 2 && lowFiber.count >= 2 { + let hfibSpike = avgSpike(highFiber) + let lfibSpike = avgSpike(lowFiber) + lines.append(" Fiber Impact:") + lines.append(" High-fiber meals (\(highFiber.count)): avg spike \(String(format: "%.0f", hfibSpike)) mg/dL") + lines.append(" Low-fiber meals (\(lowFiber.count)): avg spike \(String(format: "%.0f", lfibSpike)) mg/dL") + if lfibSpike > hfibSpike + 10 { + lines.append(" → Fiber reduces glucose spike by ~\(String(format: "%.0f", lfibSpike - hfibSpike)) mg/dL on average") + } + } + + // Top 3 highest-spike meals + let sorted = spikes.sorted { $0.peakRise > $1.peakRise } + lines.append(" Biggest Spikes:") + for spike in sorted.prefix(3) { + let fat = spike.meal.analysisResult?.totalFat ?? 0 + let protein = spike.meal.analysisResult?.totalProtein ?? 0 + lines.append(" \(spike.meal.name): +\(String(format: "%.0f", spike.peakRise)) mg/dL (\(String(format: "%.0f", spike.meal.carbsGrams))g carbs, \(String(format: "%.0f", fat))g fat, \(String(format: "%.0f", protein))g protein)") + } + + return lines.joined(separator: "\n") + } } From 2c4407738fab7edb378ecd305ae6f6680ef829ef Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 14:45:19 -0800 Subject: [PATCH 31/36] Add menstrual cycle tracking from Apple Health Cycle Tracker MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reads menstrual flow data from HealthKit to determine cycle phase (menstrual, follicular, ovulatory, luteal), cycle day, and average cycle length. Wired into all AI analysis paths — dashboard analysis, Loopy chat context, and supplemental prompt context — so hormonal impact on insulin sensitivity is factored into recommendations. --- .../LoopInsights_Coordinator.swift | 6 + .../LoopInsights/LoopInsights_Models.swift | 1 + .../LoopInsights_Phase5Models.swift | 26 ++++ .../LoopInsights_AIAnalysis.swift | 15 ++ .../LoopInsights_AdvancedAnalyzers.swift | 57 ++++++++ .../LoopInsights_DataAggregator.swift | 3 +- .../LoopInsights_HealthKitManager.swift | 128 +++++++++++++++++- .../LoopInsights_ChatViewModel.swift | 8 ++ 8 files changed, 242 insertions(+), 2 deletions(-) diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 9d90e7083a..47189ec9a0 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -218,6 +218,12 @@ final class LoopInsights_Coordinator: ObservableObject { } } + // Menstrual cycle context (if user tracks in Apple Health) + if let menstrualStats = stats.biometricStats?.menstrualCycle { + let menstrualCtx = LoopInsights_AdvancedAnalyzers.buildMenstrualCyclePromptContext(menstrualStats) + if !menstrualCtx.isEmpty { context.append(menstrualCtx) } + } + // Nightscout supplemental data if LoopInsights_FeatureFlags.nightscoutImportEnabled { let nsCtx = await buildNightscoutPromptContext(start: start, end: end) diff --git a/Loop/Models/LoopInsights/LoopInsights_Models.swift b/Loop/Models/LoopInsights/LoopInsights_Models.swift index 7e0b2f1e53..d197781eb8 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Models.swift @@ -794,6 +794,7 @@ struct LoopInsightsAggregatedStats: Codable { let activeEnergy: ActiveEnergyStats? let weight: WeightStats? let stressScore: LoopInsightsStressScore? // Phase 5: HRV-derived stress + let menstrualCycle: LoopInsightsMenstrualCycleStats? // Phase 5: hormonal context } struct HeartRateStats: Codable { diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index 50bc25eb03..f174f46b1e 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -275,6 +275,32 @@ struct LoopInsightsNightscoutTreatment: Codable { } } +// MARK: - Menstrual Cycle + +/// Estimated menstrual cycle phase derived from Apple Health Cycle Tracker data. +/// Phases have well-documented effects on insulin sensitivity: +/// • Follicular (post-period → ovulation): typically best insulin sensitivity +/// • Luteal (post-ovulation → period): progesterone rises → insulin resistance increases +/// • Menstrual (period): insulin sensitivity returns toward baseline +enum LoopInsightsMenstrualPhase: String, Codable { + case menstrual // Day 1-5: active period + case follicular // Day 6-13: estrogen rising, good sensitivity + case ovulatory // Day 14-16: peak estrogen, LH surge + case luteal // Day 17-28: progesterone dominant, insulin resistance + case unknown // Insufficient data to determine phase +} + +/// Menstrual cycle statistics from Apple Health Cycle Tracker. +/// Used by LoopInsights to contextualize insulin needs with hormonal phase. +struct LoopInsightsMenstrualCycleStats: Codable { + let currentPhase: LoopInsightsMenstrualPhase + let currentCycleDay: Int? // Day within current cycle (1-based) + let averageCycleLength: Double? // Days, averaged across recent cycles + let lastFlowStartDate: Date? // Most recent period start + let flowDaysInLookback: Int // Number of days with flow in the analysis period + let dataAvailable: Bool // Whether any menstrual data was found +} + // MARK: - AGP Data Point /// A single time-window in a glucose profile chart spanning the analysis period. diff --git a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift index 9f7730ac34..1365f32edc 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AIAnalysis.swift @@ -460,6 +460,21 @@ final class LoopInsights_AIAnalysis { prompt += "- Latest Weight: \(String(format: "%.1f", weight.latestWeight)) kg (\(String(format: "%.1f", weight.latestWeight * 2.205)) lbs)\n" prompt += "- Weight Trend: \(weight.weightTrend >= 0 ? "+" : "")\(String(format: "%.1f", weight.weightTrend)) kg over period\n" } + + if let menstrual = bio.menstrualCycle, menstrual.dataAvailable { + prompt += "### Menstrual Cycle\n" + prompt += "- Current Phase: \(menstrual.currentPhase.rawValue)\n" + if let day = menstrual.currentCycleDay { + prompt += "- Cycle Day: \(day)\n" + } + if let avgLength = menstrual.averageCycleLength { + prompt += "- Average Cycle Length: \(String(format: "%.0f", avgLength)) days\n" + } + if menstrual.flowDaysInLookback > 0 { + prompt += "- Flow Days in Period: \(menstrual.flowDaysInLookback)\n" + } + prompt += "- Note: Luteal phase typically increases insulin resistance 15-30%. Consider hormonal impact before recommending permanent settings changes.\n" + } } // Computed: time-of-day glucose analysis diff --git a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift index 956ae4c725..066793fd6a 100644 --- a/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift +++ b/Loop/Services/LoopInsights/LoopInsights_AdvancedAnalyzers.swift @@ -269,6 +269,63 @@ final class LoopInsights_AdvancedAnalyzers { return ctx } + // MARK: - Menstrual Cycle Context + + /// Build prompt context from menstrual cycle data. Returns empty string if no data. + static func buildMenstrualCyclePromptContext(_ stats: LoopInsightsMenstrualCycleStats) -> String { + guard stats.dataAvailable else { return "" } + + var ctx = "## Menstrual Cycle (from Apple Health Cycle Tracker)\n" + + let phaseDescription: String + let insulinImpact: String + switch stats.currentPhase { + case .menstrual: + phaseDescription = "Menstrual (active period)" + insulinImpact = "Insulin sensitivity returning toward baseline. Some may need less insulin." + case .follicular: + phaseDescription = "Follicular (post-period, pre-ovulation)" + insulinImpact = "Typically best insulin sensitivity of the cycle. May need less insulin." + case .ovulatory: + phaseDescription = "Ovulatory (around ovulation)" + insulinImpact = "Transition period. Insulin sensitivity starting to decline." + case .luteal: + phaseDescription = "Luteal (post-ovulation, pre-period)" + insulinImpact = "Progesterone rises → increased insulin resistance. May need 15-30% more insulin. Watch for unexplained highs." + case .unknown: + phaseDescription = "Unknown" + insulinImpact = "Insufficient data to determine hormonal impact." + } + + ctx += "- Current phase: \(phaseDescription)\n" + + if let day = stats.currentCycleDay { + ctx += "- Cycle day: \(day)\n" + } + + if let avgLength = stats.averageCycleLength { + ctx += "- Average cycle length: \(String(format: "%.0f", avgLength)) days\n" + } + + if let lastStart = stats.lastFlowStartDate { + let formatter = DateFormatter() + formatter.dateStyle = .short + ctx += "- Last period started: \(formatter.string(from: lastStart))\n" + } + + if stats.flowDaysInLookback > 0 { + ctx += "- Flow days in analysis period: \(stats.flowDaysInLookback)\n" + } + + ctx += "- Hormonal impact on insulin: \(insulinImpact)\n" + + if stats.currentPhase == .luteal { + ctx += "** LUTEAL PHASE: Expect increased insulin resistance. If BG is running higher than usual, hormonal changes are a likely factor before adjusting long-term settings. **\n" + } + + return ctx + } + // MARK: - Helpers /// Find the effective scheduled rate at a given date. Expects pre-sorted items (P8). diff --git a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift index 422ef7a157..1b11a36f01 100644 --- a/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift +++ b/Loop/Services/LoopInsights/LoopInsights_DataAggregator.swift @@ -119,7 +119,8 @@ final class LoopInsights_DataAggregator { sleep: bio.sleep, activeEnergy: bio.activeEnergy, weight: bio.weight, - stressScore: stressScore + stressScore: stressScore, + menstrualCycle: bio.menstrualCycle ) if let score = stressScore { LoopInsights_FeatureFlags.log.debug("Phase 5: Stress score computed — \(String(format: "%.0f", score.overallScore))/100") diff --git a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift index f09cdc59e6..fecfca41a4 100644 --- a/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift +++ b/Loop/Services/LoopInsights/LoopInsights_HealthKitManager.swift @@ -26,6 +26,9 @@ final class LoopInsights_HealthKitManager: ObservableObject { if let energy = HKQuantityType.quantityType(forIdentifier: .activeEnergyBurned) { types.insert(energy) } if let weight = HKQuantityType.quantityType(forIdentifier: .bodyMass) { types.insert(weight) } if let caffeine = HKQuantityType.quantityType(forIdentifier: .dietaryCaffeine) { types.insert(caffeine) } + // Menstrual cycle data from Apple Health Cycle Tracker + if let menstrualFlow = HKObjectType.categoryType(forIdentifier: .menstrualFlow) { types.insert(menstrualFlow) } + if let ovulation = HKObjectType.categoryType(forIdentifier: .ovulationTestResult) { types.insert(ovulation) } // Core diabetes data types (Loop writes these — we read them for longer analysis periods) if let glucose = HKQuantityType.quantityType(forIdentifier: .bloodGlucose) { types.insert(glucose) } if let insulin = HKQuantityType.quantityType(forIdentifier: .insulinDelivery) { types.insert(insulin) } @@ -77,6 +80,7 @@ final class LoopInsights_HealthKitManager: ObservableObject { async let sleep = fetchSleepSafe(start: start, end: end) async let energy = fetchEnergySafe(start: start, end: end) async let weight = fetchWeightSafe(start: start, end: end) + async let menstrual = fetchMenstrualCycleSafe(start: start, end: end) return await LoopInsightsAggregatedStats.BiometricStats( heartRate: hr, @@ -85,7 +89,8 @@ final class LoopInsights_HealthKitManager: ObservableObject { sleep: sleep, activeEnergy: energy, weight: weight, - stressScore: nil // Computed by AdvancedAnalyzers in DataAggregator + stressScore: nil, // Computed by AdvancedAnalyzers in DataAggregator + menstrualCycle: menstrual ) } @@ -118,6 +123,10 @@ final class LoopInsights_HealthKitManager: ObservableObject { await safeFetch("weight") { try await fetchWeightStats(start: start, end: end) } } + private func fetchMenstrualCycleSafe(start: Date, end: Date) async -> LoopInsightsMenstrualCycleStats? { + await safeFetch("menstrual cycle") { try await fetchMenstrualCycleStats(start: start, end: end) } + } + // MARK: - Heart Rate private func fetchHeartRateStats(start: Date, end: Date) async throws -> LoopInsightsAggregatedStats.HeartRateStats? { @@ -407,6 +416,123 @@ final class LoopInsights_HealthKitManager: ObservableObject { } } + // MARK: - Menstrual Cycle + + /// Fetch menstrual cycle data from Apple Health Cycle Tracker. + /// Uses HKCategorySample queries for menstrualFlow to determine cycle phase, + /// cycle length, and current cycle day. Returns nil if no data is found + /// (user doesn't track cycles or hasn't granted access). + private func fetchMenstrualCycleStats(start: Date, end: Date) async throws -> LoopInsightsMenstrualCycleStats? { + guard let flowType = HKObjectType.categoryType(forIdentifier: .menstrualFlow) else { return nil } + + // Query flow samples — use a wider window (90 days back) to estimate cycle length + let extendedStart = Date().addingTimeInterval(-90 * 86400) + let predicate = HKQuery.predicateForSamples(withStart: extendedStart, end: end, options: .strictStartDate) + + let samples: [HKCategorySample] = try await withCheckedThrowingContinuation { continuation in + let query = HKSampleQuery( + sampleType: flowType, + predicate: predicate, + limit: HKObjectQueryNoLimit, + sortDescriptors: [NSSortDescriptor(key: HKSampleSortIdentifierStartDate, ascending: true)] + ) { _, results, error in + if let error = error { + continuation.resume(throwing: error) + } else { + continuation.resume(returning: (results as? [HKCategorySample]) ?? []) + } + } + healthStore.execute(query) + } + + guard !samples.isEmpty else { + return LoopInsightsMenstrualCycleStats( + currentPhase: .unknown, currentCycleDay: nil, averageCycleLength: nil, + lastFlowStartDate: nil, flowDaysInLookback: 0, dataAvailable: false + ) + } + + let calendar = Calendar.current + + // Group flow samples by day to find period start dates + var flowDays: Set = [] + var flowDates: [Date] = [] + for sample in samples { + let dayKey = Self.dayKey(for: sample.startDate, calendar: calendar) + if flowDays.insert(dayKey).inserted { + flowDates.append(calendar.startOfDay(for: sample.startDate)) + } + } + flowDates.sort() + + // Identify period start dates (first flow day after a gap of 14+ days) + var periodStarts: [Date] = [] + if let first = flowDates.first { + periodStarts.append(first) + } + for i in 1.. 14 * 86400 { + // New period — gap too large to be consecutive flow days + periodStarts.append(flowDates[i]) + } + } + + // Average cycle length from consecutive period starts + var cycleLengths: [Double] = [] + for i in 1..= 18 && length <= 45 { // Filter physiologically plausible cycles + cycleLengths.append(length) + } + } + let avgCycleLength = cycleLengths.isEmpty ? nil : cycleLengths.reduce(0, +) / Double(cycleLengths.count) + + // Most recent period start + let lastPeriodStart = periodStarts.last + + // Current cycle day (days since last period start + 1) + let currentCycleDay: Int? + if let lastStart = lastPeriodStart { + let daysSincePeriod = Int(Date().timeIntervalSince(lastStart) / 86400) + 1 + currentCycleDay = daysSincePeriod + } else { + currentCycleDay = nil + } + + // Estimate current phase from cycle day + let phase: LoopInsightsMenstrualPhase + let cycleLen = avgCycleLength ?? 28.0 + if let day = currentCycleDay { + if day <= 5 { + phase = .menstrual + } else if day <= Int(cycleLen * 0.46) { // ~day 13 of 28 + phase = .follicular + } else if day <= Int(cycleLen * 0.57) { // ~day 16 of 28 + phase = .ovulatory + } else if Double(day) <= cycleLen { + phase = .luteal + } else { + // Past expected cycle length — could be late period or irregular + phase = .luteal // Default to luteal since that's what happens pre-period + } + } else { + phase = .unknown + } + + // Count flow days within the analysis lookback period + let lookbackFlowDays = flowDates.filter { $0 >= start && $0 <= end }.count + + return LoopInsightsMenstrualCycleStats( + currentPhase: phase, + currentCycleDay: currentCycleDay, + averageCycleLength: avgCycleLength, + lastFlowStartDate: lastPeriodStart, + flowDaysInLookback: lookbackFlowDays, + dataAvailable: true + ) + } + // MARK: - Caffeine /// Fetch dietary caffeine entries from HealthKit for the given date range. diff --git a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift index aae91b7114..a255ad1d05 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_ChatViewModel.swift @@ -397,6 +397,14 @@ final class LoopInsights_ChatViewModel: ObservableObject { if let weight = bio.weight { context += " Weight: \(String(format: "%.1f", weight.latestWeight)) kg (trend: \(weight.weightTrend >= 0 ? "+" : "")\(String(format: "%.1f", weight.weightTrend)) kg)\n" } + + if let menstrual = bio.menstrualCycle, menstrual.dataAvailable { + context += " Menstrual Phase: \(menstrual.currentPhase.rawValue)" + if let day = menstrual.currentCycleDay { + context += " (cycle day \(day))" + } + context += "\n" + } } } From 4616919bba66e039af9e191d03b7658aae4413cc Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 16:28:35 -0800 Subject: [PATCH 32/36] Add AI Meal Debrief, Pre-Meal Advisor, and Meal Insights improvements - Capture Loop's predicted glucose at meal time for later comparison - AI Meal Debrief: predicted vs actual glucose analysis with learnings - AI Pre-Meal Advisor: historical food patterns + personalized advice - Show all FoodFinder meals in Meal Insights (even without glucose data) - Food thumbnails in meal card upper-right corner - MealDebriefModels, MealDebriefService, PreMealAdvisorService (new) - MealInsightsViewModel extracted from view, MealDebriefCard, PreMealAdvisorCard (new) - Feature flags: mealDebriefEnabled, preMealAdvisorEnabled (both off by default) - Alphabetize Advanced Features toggles in LoopInsights settings --- .../LoopInsights_Coordinator.swift | 80 ++++ .../LoopInsights_MealDebriefModels.swift | 166 +++++++++ .../LoopInsights_Phase5Models.swift | 23 +- .../LoopInsights_FeatureFlags.swift | 18 + .../LoopInsights_MealDebriefService.swift | 277 ++++++++++++++ .../LoopInsights_PreMealAdvisorService.swift | 200 ++++++++++ .../LoopInsights_MealInsightsViewModel.swift | 219 +++++++++++ .../LoopInsights/LoopInsights_ChatView.swift | 2 +- .../LoopInsights_DashboardView.swift | 2 +- .../LoopInsights_MealDebriefCard.swift | 344 ++++++++++++++++++ .../LoopInsights_MealInsightsView.swift | 258 +++++++------ .../LoopInsights_PreMealAdvisorCard.swift | 113 ++++++ .../LoopInsights_SettingsView.swift | 60 ++- 13 files changed, 1605 insertions(+), 157 deletions(-) create mode 100644 Loop/Models/LoopInsights/LoopInsights_MealDebriefModels.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_MealDebriefService.swift create mode 100644 Loop/Services/LoopInsights/LoopInsights_PreMealAdvisorService.swift create mode 100644 Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_MealDebriefCard.swift create mode 100644 Loop/Views/LoopInsights/LoopInsights_PreMealAdvisorCard.swift diff --git a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift index 47189ec9a0..93ce64d412 100644 --- a/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift +++ b/Loop/Managers/LoopInsights/LoopInsights_Coordinator.swift @@ -30,10 +30,15 @@ final class LoopInsights_Coordinator: ObservableObject { let healthKitManager: LoopInsights_HealthKitManager? let caffeineTracker: LoopInsights_CaffeineTracker let alcoholTracker: LoopInsights_AlcoholTracker + let mealDebriefService: LoopInsights_MealDebriefService + let preMealAdvisorService: LoopInsights_PreMealAdvisorService /// Background monitor for proactive suggestions (lazy-initialized) lazy var backgroundMonitor: LoopInsights_BackgroundMonitor = LoopInsights_BackgroundMonitor(coordinator: self) + /// Observation token for meal-logged notifications + private var mealLoggedObserver: NSObjectProtocol? + // MARK: - Data Provider Bridge private var dataProviderBridge: DataProviderBridge? @@ -74,6 +79,10 @@ final class LoopInsights_Coordinator: ObservableObject { self.caffeineTracker = LoopInsights_CaffeineTracker.shared self.caffeineTracker.healthKitManager = hkManager self.alcoholTracker = LoopInsights_AlcoholTracker.shared + self.mealDebriefService = LoopInsights_MealDebriefService.shared + self.preMealAdvisorService = LoopInsights_PreMealAdvisorService.shared + observeMealLogged() + pruneStaleData() } /// Initialize with test data fixtures (for simulator/developer mode). @@ -89,6 +98,10 @@ final class LoopInsights_Coordinator: ObservableObject { self.goalStore = LoopInsights_GoalStore.shared self.caffeineTracker = LoopInsights_CaffeineTracker.shared self.alcoholTracker = LoopInsights_AlcoholTracker.shared + self.mealDebriefService = LoopInsights_MealDebriefService.shared + self.preMealAdvisorService = LoopInsights_PreMealAdvisorService.shared + observeMealLogged() + pruneStaleData() } /// Factory method: creates a Coordinator with test data if available and enabled, @@ -106,6 +119,33 @@ final class LoopInsights_Coordinator: ObservableObject { return LoopInsights_Coordinator(testDataProvider: provider) } + // MARK: - Meal Logged Observer + + /// Prune stale prediction snapshots and debriefs (>90 days). + /// Called once on Coordinator init. + private func pruneStaleData() { + LoopInsights_PredictionSnapshotStore.pruneStale() + LoopInsights_MealDebriefCache.pruneStale() + } + + /// Observe FoodFinder meal-logged notifications to capture prediction snapshots. + private func observeMealLogged() { + mealLoggedObserver = NotificationCenter.default.addObserver( + forName: .foodFinderMealLogged, + object: nil, + queue: .main + ) { [weak self] notification in + guard let mealRecordID = notification.userInfo?["recordID"] as? String else { return } + self?.mealDebriefService.capturePredictionSnapshot(mealRecordID: mealRecordID) + } + } + + deinit { + if let observer = mealLoggedObserver { + NotificationCenter.default.removeObserver(observer) + } + } + // MARK: - Background Monitoring /// Start background monitoring if enabled and using real stores (not test data). @@ -200,6 +240,12 @@ final class LoopInsights_Coordinator: ObservableObject { if !alcoholCtx.isEmpty { context.append(alcoholCtx) } } + // Meal debrief context (recent AI debriefs for Loopy) + if LoopInsights_FeatureFlags.mealDebriefEnabled { + let debriefCtx = Self.buildMealDebriefPromptContext() + if !debriefCtx.isEmpty { context.append(debriefCtx) } + } + // FoodFinder meal history + nutritional glucose correlation if FoodFinder_FeatureFlags.isEnabled { let foodCtx = Self.buildFoodFinderPromptContext(start: start, end: end) @@ -234,6 +280,40 @@ final class LoopInsights_Coordinator: ObservableObject { return context.joined(separator: "\n") } + // MARK: - Meal Debrief Context + + /// Build prompt context from recent AI meal debriefs. + /// Includes effective carbs estimates and key learnings from the last 10 debriefs. + private static func buildMealDebriefPromptContext() -> String { + let debriefs = LoopInsights_MealDebriefCache.loadAll() + .sorted { $0.generatedAt > $1.generatedAt } + guard !debriefs.isEmpty else { return "" } + + let formatter = DateFormatter() + formatter.dateStyle = .short + formatter.timeStyle = .short + + var lines: [String] = ["MEAL DEBRIEF HISTORY (\(debriefs.count) debriefs):"] + + for debrief in debriefs.prefix(10) { + // Look up the meal name from archive + let mealName = MealArchive.loadAll().first { $0.id == debrief.mealRecordID }?.name ?? "Unknown meal" + var line = " \(formatter.string(from: debrief.generatedAt)): \(mealName)" + if let effective = debrief.effectiveCarbsEstimate { + line += " — effective ~\(String(format: "%.0f", effective))g" + } + if let predPeak = debrief.predictedPeakGlucose, let actPeak = debrief.actualPeakGlucose { + line += " (predicted peak \(String(format: "%.0f", predPeak)), actual \(String(format: "%.0f", actPeak)))" + } + lines.append(line) + for learning in debrief.learnings.prefix(2) { + lines.append(" - \(learning)") + } + } + + return lines.joined(separator: "\n") + } + // MARK: - FoodFinder Context /// Build prompt context from FoodFinder meal analysis history. diff --git a/Loop/Models/LoopInsights/LoopInsights_MealDebriefModels.swift b/Loop/Models/LoopInsights/LoopInsights_MealDebriefModels.swift new file mode 100644 index 0000000000..ccd1c8f1a4 --- /dev/null +++ b/Loop/Models/LoopInsights/LoopInsights_MealDebriefModels.swift @@ -0,0 +1,166 @@ +// +// LoopInsights_MealDebriefModels.swift +// Loop +// +// LoopInsights — Data models for AI Meal Debrief and Pre-Meal Advisor. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import Foundation + +// MARK: - Prediction Snapshot + +/// Captures Loop's predicted glucose trajectory at the moment a meal is logged. +/// This is the "what Loop thought would happen" half of the debrief comparison. +struct LoopInsights_PredictionSnapshot: Codable, Identifiable { + let id: String // Matches the MealArchive record ID + let capturedAt: Date // When the snapshot was taken + let mealRecordID: String // FoodFinder_AnalysisRecord.id + let predictedValues: [Double] // mg/dL values at each interval + let intervalSeconds: TimeInterval // Typically 300 (5 min) + let startDate: Date // First prediction point (≈ current glucose) + let preMealGlucose: Double // mg/dL at capture time +} + +// MARK: - Meal Debrief + +/// The AI-generated analysis comparing predicted vs actual glucose response. +struct LoopInsights_MealDebrief: Codable, Identifiable { + let id: String // Same as mealRecordID + let mealRecordID: String + let generatedAt: Date + let effectiveCarbsEstimate: Double? // "Behaved like Xg of carbs" + let aiInterpretation: String // Full AI text (≤5 sentences) + let learnings: [String] // Bullet-point takeaways + let predictedPeakGlucose: Double? // mg/dL — from snapshot + let actualPeakGlucose: Double? // mg/dL — from real data + let peakTimingDeltaMinutes: Double? // Actual peak - predicted peak (+ = later than predicted) +} + +// MARK: - Debrief Context + +/// Bundles all data needed to generate a debrief for a single meal. +struct LoopInsights_DebriefContext { + let mealRecord: FoodFinder_AnalysisRecord + let snapshot: LoopInsights_PredictionSnapshot + let actualGlucoseTimeline: [(minutesAfter: Int, glucose: Double)] + let foodPattern: LoopInsightsFoodResponsePattern? // Historical pattern if available +} + +// MARK: - Pre-Meal Advice + +/// Instant pre-computed advice shown when user selects a familiar food type. +struct LoopInsights_PreMealAdvice: Identifiable { + let id = UUID() + let foodType: String + let mealCount: Int + let averageCarbs: Double // g + let averagePeakRise: Double // mg/dL + let averageTimeToPeak: Double // minutes + let summaryText: String // Pre-computed instant summary + var aiAdvice: String? // Async AI enhancement (nil until loaded) + var isLoadingAI: Bool = false +} + +// MARK: - Snapshot Store + +/// Manages persistence of prediction snapshots to JSON file. +/// 90-day retention, pruned on every save. +enum LoopInsights_PredictionSnapshotStore { + + private static let fileName = "LoopInsights_PredictionSnapshots.json" + private static let retentionDays: TimeInterval = 90 * 24 * 3600 + + private static var fileURL: URL { + let appSupport = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first! + let dir = appSupport.appendingPathComponent("LoopInsights", isDirectory: true) + try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + return dir.appendingPathComponent(fileName) + } + + static func loadAll() -> [LoopInsights_PredictionSnapshot] { + guard let data = try? Data(contentsOf: fileURL), + let snapshots = try? JSONDecoder().decode([LoopInsights_PredictionSnapshot].self, from: data) else { + return [] + } + return snapshots + } + + static func save(_ snapshots: [LoopInsights_PredictionSnapshot]) { + let cutoff = Date().addingTimeInterval(-retentionDays) + let pruned = snapshots.filter { $0.capturedAt > cutoff } + if let data = try? JSONEncoder().encode(pruned) { + try? data.write(to: fileURL, options: .atomic) + } + } + + static func snapshot(forMealID id: String) -> LoopInsights_PredictionSnapshot? { + loadAll().first { $0.mealRecordID == id } + } + + static func append(_ snapshot: LoopInsights_PredictionSnapshot) { + var all = loadAll() + // Don't duplicate + guard !all.contains(where: { $0.mealRecordID == snapshot.mealRecordID }) else { return } + all.append(snapshot) + save(all) + } + + /// Remove snapshots older than 90 days + static func pruneStale() { + let all = loadAll() + save(all) // save() already prunes + } +} + +// MARK: - Debrief Cache + +/// Manages persistence of generated debriefs to JSON file. +/// 90-day retention, immutable once generated. +enum LoopInsights_MealDebriefCache { + + private static let fileName = "LoopInsights_MealDebriefs.json" + private static let retentionDays: TimeInterval = 90 * 24 * 3600 + + private static var fileURL: URL { + let appSupport = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first! + let dir = appSupport.appendingPathComponent("LoopInsights", isDirectory: true) + try? FileManager.default.createDirectory(at: dir, withIntermediateDirectories: true) + return dir.appendingPathComponent(fileName) + } + + static func loadAll() -> [LoopInsights_MealDebrief] { + guard let data = try? Data(contentsOf: fileURL), + let debriefs = try? JSONDecoder().decode([LoopInsights_MealDebrief].self, from: data) else { + return [] + } + return debriefs + } + + static func save(_ debriefs: [LoopInsights_MealDebrief]) { + let cutoff = Date().addingTimeInterval(-retentionDays) + let pruned = debriefs.filter { $0.generatedAt > cutoff } + if let data = try? JSONEncoder().encode(pruned) { + try? data.write(to: fileURL, options: .atomic) + } + } + + static func debrief(forMealID id: String) -> LoopInsights_MealDebrief? { + loadAll().first { $0.mealRecordID == id } + } + + static func append(_ debrief: LoopInsights_MealDebrief) { + var all = loadAll() + guard !all.contains(where: { $0.mealRecordID == debrief.mealRecordID }) else { return } + all.append(debrief) + save(all) + } + + /// Remove debriefs older than 90 days + static func pruneStale() { + let all = loadAll() + save(all) // save() already prunes + } +} diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index f174f46b1e..c2ea109392 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -53,20 +53,27 @@ struct LoopInsightsFoodResponsePattern: Identifiable, Codable { } } -/// A single meal event with matched glucose response for debrief +/// A single meal event with optional glucose response for debrief. +/// Meals from MealArchive may not yet have glucose data matched. struct LoopInsightsMealEvent: Identifiable { let id: UUID let date: Date let foodType: String let carbs: Double // grams - let preMealGlucose: Double // mg/dL - let peakGlucose: Double // mg/dL - let twoHourGlucose: Double // mg/dL + let preMealGlucose: Double? // mg/dL — nil if no glucose data matched + let peakGlucose: Double? // mg/dL + let twoHourGlucose: Double? // mg/dL let glucoseTimeline: [(minutesAfter: Int, glucose: Double)] + let archiveRecordID: String? // FoodFinder_AnalysisRecord.id if from MealArchive + let thumbnailID: String? // FavoriteFoodImageStore thumbnail ID - init(date: Date, foodType: String, carbs: Double, preMealGlucose: Double, - peakGlucose: Double, twoHourGlucose: Double, - glucoseTimeline: [(minutesAfter: Int, glucose: Double)]) { + /// Whether this event has matched glucose data + var hasGlucoseData: Bool { preMealGlucose != nil } + + init(date: Date, foodType: String, carbs: Double, preMealGlucose: Double? = nil, + peakGlucose: Double? = nil, twoHourGlucose: Double? = nil, + glucoseTimeline: [(minutesAfter: Int, glucose: Double)] = [], + archiveRecordID: String? = nil, thumbnailID: String? = nil) { self.id = UUID() self.date = date self.foodType = foodType @@ -75,6 +82,8 @@ struct LoopInsightsMealEvent: Identifiable { self.peakGlucose = peakGlucose self.twoHourGlucose = twoHourGlucose self.glucoseTimeline = glucoseTimeline + self.archiveRecordID = archiveRecordID + self.thumbnailID = thumbnailID } } diff --git a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift index bd7a0452d5..e99dd7b0a7 100644 --- a/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift +++ b/Loop/Resources/LoopInsights/LoopInsights_FeatureFlags.swift @@ -39,6 +39,8 @@ struct LoopInsights_FeatureFlags { static let alcoholTrackingEnabled = "LoopInsights_alcoholTrackingEnabled" static let nightscoutImportEnabled = "LoopInsights_nightscoutImportEnabled" static let agpChartEnabled = "LoopInsights_agpChartEnabled" + static let mealDebriefEnabled = "LoopInsights_mealDebriefEnabled" + static let preMealAdvisorEnabled = "LoopInsights_preMealAdvisorEnabled" } private static let defaults = UserDefaults.standard @@ -248,6 +250,22 @@ struct LoopInsights_FeatureFlags { set { defaults.set(newValue, forKey: Keys.agpChartEnabled) } } + /// Enables AI Meal Debrief — captures Loop's predicted glucose at meal time, + /// then generates AI analysis comparing predicted vs actual response. + /// Requires foodResponseEnabled. Defaults to false. + static var mealDebriefEnabled: Bool { + get { defaults.bool(forKey: Keys.mealDebriefEnabled) } + set { defaults.set(newValue, forKey: Keys.mealDebriefEnabled) } + } + + /// Enables AI Pre-Meal Advisor — shows historical glucose patterns and AI advice + /// when the user identifies a familiar food type in CarbEntryView. + /// Requires foodResponseEnabled. Defaults to false. + static var preMealAdvisorEnabled: Bool { + get { defaults.bool(forKey: Keys.preMealAdvisorEnabled) } + set { defaults.set(newValue, forKey: Keys.preMealAdvisorEnabled) } + } + // MARK: - AI Configuration /// User-configurable AI provider configuration. Persisted to UserDefaults (excluding API key). diff --git a/Loop/Services/LoopInsights/LoopInsights_MealDebriefService.swift b/Loop/Services/LoopInsights/LoopInsights_MealDebriefService.swift new file mode 100644 index 0000000000..2fa5418018 --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_MealDebriefService.swift @@ -0,0 +1,277 @@ +// +// LoopInsights_MealDebriefService.swift +// Loop +// +// LoopInsights — Prediction capture on meal log, debrief generation via AI, +// and JSON storage for snapshots + debriefs. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import HealthKit +import os.log + +/// Captures Loop's predicted glucose at meal time, then later generates +/// AI-powered debriefs comparing predicted vs actual glucose response. +final class LoopInsights_MealDebriefService { + + static let shared = LoopInsights_MealDebriefService() + + private let log = Logger(subsystem: "com.loopkit.Loop.LoopInsights", category: "MealDebrief") + + // MARK: - Prediction Capture + + /// Called when `.foodFinderMealLogged` fires. Reads the current predicted glucose + /// from StatusExtensionContext and persists it alongside the meal record ID. + func capturePredictionSnapshot(mealRecordID: String) { + guard LoopInsights_FeatureFlags.mealDebriefEnabled else { return } + + guard let statusCtx = UserDefaults.appGroup?.statusExtensionContext, + let predicted = statusCtx.predictedGlucose else { + log.info("No predicted glucose available for snapshot (mealID: \(mealRecordID))") + return + } + + let samples = predicted.samples + guard let first = samples.first else { + log.info("Empty predicted glucose samples for snapshot (mealID: \(mealRecordID))") + return + } + + let snapshot = LoopInsights_PredictionSnapshot( + id: mealRecordID, + capturedAt: Date(), + mealRecordID: mealRecordID, + predictedValues: predicted.values, + intervalSeconds: predicted.interval, + startDate: predicted.startDate, + preMealGlucose: first.value + ) + + LoopInsights_PredictionSnapshotStore.append(snapshot) + log.info("Captured prediction snapshot for meal \(mealRecordID): \(predicted.values.count) points, pre-meal \(String(format: "%.0f", first.value)) mg/dL") + } + + // MARK: - Debrief Generation + + /// Check if a debrief is ready (meal is ≥2h old and has a prediction snapshot). + func isDebriefReady(for mealRecord: FoodFinder_AnalysisRecord) -> LoopInsights_DebriefReadiness { + guard LoopInsights_FeatureFlags.mealDebriefEnabled else { return .featureDisabled } + + // Already cached? + if LoopInsights_MealDebriefCache.debrief(forMealID: mealRecord.id) != nil { + return .ready + } + + // Has prediction snapshot? + guard LoopInsights_PredictionSnapshotStore.snapshot(forMealID: mealRecord.id) != nil else { + return .noSnapshot + } + + // Is it old enough? + let hoursElapsed = Date().timeIntervalSince(mealRecord.date) / 3600 + if hoursElapsed < 2 { + let minutesRemaining = Int((2 - hoursElapsed) * 60) + return .tooRecent(minutesRemaining: minutesRemaining) + } + + return .readyToGenerate + } + + /// Generate a debrief for a meal. Returns cached version if available. + func generateDebrief( + for mealRecord: FoodFinder_AnalysisRecord, + actualTimeline: [(minutesAfter: Int, glucose: Double)], + foodPattern: LoopInsightsFoodResponsePattern? + ) async throws -> LoopInsights_MealDebrief { + // Return cached + if let cached = LoopInsights_MealDebriefCache.debrief(forMealID: mealRecord.id) { + return cached + } + + guard let snapshot = LoopInsights_PredictionSnapshotStore.snapshot(forMealID: mealRecord.id) else { + throw LoopInsightsError.insufficientData("No prediction snapshot for meal \(mealRecord.id)") + } + + let prompt = buildDebriefPrompt( + mealRecord: mealRecord, + snapshot: snapshot, + actualTimeline: actualTimeline, + foodPattern: foodPattern + ) + + let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( + "You are a diabetes meal analysis assistant. Analyze predicted vs actual glucose response. Be concise and practical.", + userPrompt: prompt + ) + + let debrief = parseDebriefResponse( + response: response, + mealRecord: mealRecord, + snapshot: snapshot, + actualTimeline: actualTimeline + ) + + LoopInsights_MealDebriefCache.append(debrief) + log.info("Generated debrief for meal \(mealRecord.id): \(debrief.learnings.count) learnings") + return debrief + } + + // MARK: - Prompt Building + + private func buildDebriefPrompt( + mealRecord: FoodFinder_AnalysisRecord, + snapshot: LoopInsights_PredictionSnapshot, + actualTimeline: [(minutesAfter: Int, glucose: Double)], + foodPattern: LoopInsightsFoodResponsePattern? + ) -> String { + var lines: [String] = [] + + // Meal info + lines.append("Meal: \(mealRecord.name), \(String(format: "%.0f", mealRecord.carbsGrams))g carbs entered") + if let aiCarbs = mealRecord.originalAICarbs { + var aiLine = " (AI suggested \(String(format: "%.0f", aiCarbs))g" + if let conf = mealRecord.aiConfidencePercent { + aiLine += ", \(conf)% confidence" + } + aiLine += ")" + lines.append(aiLine) + } + + // Nutrition from analysis result + if let result = mealRecord.analysisResult { + var macros: [String] = [] + if let fat = result.totalFat, fat > 0 { macros.append("\(String(format: "%.0f", fat))g fat") } + if let protein = result.totalProtein, protein > 0 { macros.append("\(String(format: "%.0f", protein))g protein") } + if let fiber = result.totalFiber, fiber > 0 { macros.append("\(String(format: "%.0f", fiber))g fiber") } + if let cal = result.totalCalories, cal > 0 { macros.append("\(String(format: "%.0f", cal)) cal") } + if !macros.isEmpty { + lines.append("Nutrition: \(macros.joined(separator: ", "))") + } + if let absorb = result.absorptionTimeHours { + lines.append("Absorption time: \(String(format: "%.1f", absorb))h") + } + } + + lines.append("Pre-meal glucose: \(String(format: "%.0f", snapshot.preMealGlucose)) mg/dL") + lines.append("") + + // Predicted glucose + lines.append("Predicted glucose (from Loop at meal time):") + let predSamples = snapshot.predictedValues + let interval = snapshot.intervalSeconds + for (i, value) in predSamples.enumerated() { + let minutes = Int(Double(i) * interval / 60) + if minutes <= 240 && (minutes % 30 == 0 || i == 0) { + lines.append(" \(minutes)min: \(String(format: "%.0f", value))") + } + } + + lines.append("") + + // Actual glucose + lines.append("Actual glucose:") + for point in actualTimeline { + if point.minutesAfter <= 240 && (point.minutesAfter % 30 == 0 || point.minutesAfter == 0) { + lines.append(" \(point.minutesAfter)min: \(String(format: "%.0f", point.glucose))") + } + } + + // Historical pattern + if let pattern = foodPattern { + lines.append("") + lines.append("Historical pattern for \(pattern.foodType) (\(pattern.mealCount) meals): avg peak +\(String(format: "%.0f", pattern.peakGlucoseRise)) mg/dL in \(String(format: "%.0f", pattern.timeToPeakMinutes)) min") + } + + lines.append("") + lines.append("Analyze: What happened vs what was predicted? What did the carbs effectively behave like? What should be learned for next time? Keep it under 5 sentences.") + lines.append("") + lines.append("IMPORTANT: End your response with a line starting with 'LEARNINGS:' followed by 2-3 short bullet points (one per line, each starting with '- '). These will be shown as takeaways.") + + return lines.joined(separator: "\n") + } + + // MARK: - Response Parsing + + private func parseDebriefResponse( + response: String, + mealRecord: FoodFinder_AnalysisRecord, + snapshot: LoopInsights_PredictionSnapshot, + actualTimeline: [(minutesAfter: Int, glucose: Double)] + ) -> LoopInsights_MealDebrief { + // Split response into interpretation and learnings + let parts = response.components(separatedBy: "LEARNINGS:") + let interpretation = parts[0].trimmingCharacters(in: .whitespacesAndNewlines) + + var learnings: [String] = [] + if parts.count > 1 { + learnings = parts[1] + .components(separatedBy: "\n") + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + .filter { $0.hasPrefix("- ") || $0.hasPrefix("* ") } + .map { String($0.dropFirst(2)) } + } + + // Calculate effective carbs estimate from response (look for pattern like "Xg of carbs" or "X grams") + let effectiveCarbs = extractEffectiveCarbs(from: response) + + // Predicted peak from snapshot + let predictedPeak = snapshot.predictedValues.max() + + // Actual peak from timeline + let actualPeak = actualTimeline.max(by: { $0.glucose < $1.glucose })?.glucose + + // Peak timing delta + var peakTimingDelta: Double? + if let predPeakIdx = snapshot.predictedValues.firstIndex(where: { $0 == predictedPeak }), + let actPeakPoint = actualTimeline.max(by: { $0.glucose < $1.glucose }) { + let predictedPeakMinutes = Double(predPeakIdx) * snapshot.intervalSeconds / 60 + peakTimingDelta = Double(actPeakPoint.minutesAfter) - predictedPeakMinutes + } + + return LoopInsights_MealDebrief( + id: mealRecord.id, + mealRecordID: mealRecord.id, + generatedAt: Date(), + effectiveCarbsEstimate: effectiveCarbs, + aiInterpretation: interpretation, + learnings: learnings.isEmpty ? ["Review your carb count for this meal type"] : learnings, + predictedPeakGlucose: predictedPeak, + actualPeakGlucose: actualPeak, + peakTimingDeltaMinutes: peakTimingDelta + ) + } + + /// Try to extract an "effective carbs" number from AI response text + private func extractEffectiveCarbs(from text: String) -> Double? { + // Match patterns like "behaved like 70g" or "effectively 70 grams" or "~70g of carbs" + let patterns = [ + "behaved like[\\s~]*(\\d+\\.?\\d*)\\s*g", + "effectively[\\s~]*(\\d+\\.?\\d*)\\s*g", + "equivalent to[\\s~]*(\\d+\\.?\\d*)\\s*g", + "acted as[\\s~]*(\\d+\\.?\\d*)\\s*g" + ] + for pattern in patterns { + if let regex = try? NSRegularExpression(pattern: pattern, options: .caseInsensitive), + let match = regex.firstMatch(in: text, range: NSRange(text.startIndex..., in: text)), + match.numberOfRanges > 1, + let range = Range(match.range(at: 1), in: text), + let value = Double(text[range]) { + return value + } + } + return nil + } +} + +// MARK: - Debrief Readiness + +enum LoopInsights_DebriefReadiness: Equatable { + case featureDisabled + case noSnapshot // No prediction was captured at meal time + case tooRecent(minutesRemaining: Int) // Meal is <2h old + case readyToGenerate // Has snapshot, ≥2h old, not yet generated + case ready // Already generated and cached +} diff --git a/Loop/Services/LoopInsights/LoopInsights_PreMealAdvisorService.swift b/Loop/Services/LoopInsights/LoopInsights_PreMealAdvisorService.swift new file mode 100644 index 0000000000..fea92b35ee --- /dev/null +++ b/Loop/Services/LoopInsights/LoopInsights_PreMealAdvisorService.swift @@ -0,0 +1,200 @@ +// +// LoopInsights_PreMealAdvisorService.swift +// Loop +// +// LoopInsights — Pattern lookup by foodType, pre-computed summary, +// and async AI advice for the Pre-Meal Advisor card. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import LoopKit +import HealthKit +import os.log + +/// Provides instant historical patterns and async AI advice for familiar food types. +/// Used by FoodFinder_EntryPoint to show a "Personal Insight" card. +final class LoopInsights_PreMealAdvisorService { + + static let shared = LoopInsights_PreMealAdvisorService() + + private let log = Logger(subsystem: "com.loopkit.Loop.LoopInsights", category: "PreMealAdvisor") + + // Cache of recent advice to avoid re-querying for the same food type within a session + private var adviceCache: [String: LoopInsights_PreMealAdvice] = [:] + + // MARK: - Public API + + /// Check if we have enough data to show advice for this food type. + /// Returns pre-computed advice immediately if ≥2 meals match. + func checkForAdvice(foodType: String) -> LoopInsights_PreMealAdvice? { + guard LoopInsights_FeatureFlags.preMealAdvisorEnabled, + LoopInsights_FeatureFlags.foodResponseEnabled, + !foodType.isEmpty else { + return nil + } + + let normalizedType = foodType.trimmingCharacters(in: .whitespacesAndNewlines) + guard !normalizedType.isEmpty else { return nil } + + // Check cache + if let cached = adviceCache[normalizedType.lowercased()] { + return cached + } + + // Query MealArchive for matching meals (full history) + let allMeals = MealArchive.loadAll() + let matching = allMeals.filter { + $0.foodType.lowercased().contains(normalizedType.lowercased()) || + normalizedType.lowercased().contains($0.foodType.lowercased()) + } + + guard matching.count >= 2 else { return nil } + + // Compute summary from MealArchive data + let avgCarbs = matching.map(\.carbsGrams).reduce(0, +) / Double(matching.count) + + // Try to get glucose patterns from FoodResponseAnalyzer via existing patterns + // We'll compute basic stats from archive data + let advice = LoopInsights_PreMealAdvice( + foodType: normalizedType, + mealCount: matching.count, + averageCarbs: avgCarbs, + averagePeakRise: 0, // Will be enriched if glucose data available + averageTimeToPeak: 0, + summaryText: buildSummaryText(foodType: normalizedType, meals: matching, avgCarbs: avgCarbs) + ) + + adviceCache[normalizedType.lowercased()] = advice + return advice + } + + /// Enrich advice with glucose pattern data from FoodResponseAnalyzer. + /// Call this after initial advice is returned to add peak/timing stats. + func enrichWithGlucosePatterns( + advice: LoopInsights_PreMealAdvice, + patterns: [LoopInsightsFoodResponsePattern] + ) -> LoopInsights_PreMealAdvice { + guard let pattern = patterns.first(where: { + $0.foodType.lowercased() == advice.foodType.lowercased() + }) else { + return advice + } + + var enriched = LoopInsights_PreMealAdvice( + foodType: advice.foodType, + mealCount: advice.mealCount, + averageCarbs: advice.averageCarbs, + averagePeakRise: pattern.peakGlucoseRise, + averageTimeToPeak: pattern.timeToPeakMinutes, + summaryText: buildEnrichedSummary( + foodType: advice.foodType, + mealCount: advice.mealCount, + avgCarbs: advice.averageCarbs, + peakRise: pattern.peakGlucoseRise, + timeToPeak: pattern.timeToPeakMinutes + ) + ) + enriched.aiAdvice = advice.aiAdvice + enriched.isLoadingAI = advice.isLoadingAI + + adviceCache[advice.foodType.lowercased()] = enriched + return enriched + } + + /// Request AI-generated personalized advice (async). Updates the advice in-place. + func requestAIAdvice(for advice: LoopInsights_PreMealAdvice) async -> LoopInsights_PreMealAdvice { + var updated = advice + updated.isLoadingAI = true + + // Check for recent debriefs for this food type to include in prompt + let recentDebriefs = LoopInsights_MealDebriefCache.loadAll() + .filter { debrief in + let record = MealArchive.loadAll().first { $0.id == debrief.mealRecordID } + return record?.foodType.lowercased() == advice.foodType.lowercased() + } + .sorted { $0.generatedAt > $1.generatedAt } + .prefix(3) + + let prompt = buildAIPrompt(advice: advice, recentDebriefs: Array(recentDebriefs)) + + do { + let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( + "You are a diabetes pre-meal advisor. Give brief, actionable advice based on the user's personal history. Keep it under 3 sentences.", + userPrompt: prompt + ) + updated.aiAdvice = response + updated.isLoadingAI = false + } catch { + log.error("AI advice failed for \(advice.foodType): \(error)") + updated.isLoadingAI = false + } + + adviceCache[advice.foodType.lowercased()] = updated + return updated + } + + /// Clear the advice cache (e.g., on view disappear) + func clearCache() { + adviceCache.removeAll() + } + + // MARK: - Private + + private func buildSummaryText(foodType: String, meals: [FoodFinder_AnalysisRecord], avgCarbs: Double) -> String { + let timeFormatter = DateFormatter() + timeFormatter.dateStyle = .short + timeFormatter.timeStyle = .none + + var text = String(format: NSLocalizedString("You've had %@ %d times. Avg carbs: %.0fg.", comment: "Pre-meal advisor summary"), foodType, meals.count, avgCarbs) + + // Add absorption time info if available + let absorptionTimes = meals.compactMap { $0.analysisResult?.absorptionTimeHours } + if !absorptionTimes.isEmpty { + let avgAbsorption = absorptionTimes.reduce(0, +) / Double(absorptionTimes.count) + text += String(format: NSLocalizedString(" Avg absorption: %.1fh.", comment: "Pre-meal advisor absorption"), avgAbsorption) + } + + // Add last time info + if let lastMeal = meals.sorted(by: { $0.date > $1.date }).first { + text += String(format: NSLocalizedString(" Last: %@.", comment: "Pre-meal advisor last meal"), timeFormatter.string(from: lastMeal.date)) + } + + return text + } + + private func buildEnrichedSummary(foodType: String, mealCount: Int, avgCarbs: Double, peakRise: Double, timeToPeak: Double) -> String { + return String(format: NSLocalizedString("You've had %@ %d times. Avg peak: +%.0f mg/dL in %.0f min. Avg carbs: %.0fg.", comment: "Pre-meal advisor enriched summary"), foodType, mealCount, peakRise, timeToPeak, avgCarbs) + } + + private func buildAIPrompt(advice: LoopInsights_PreMealAdvice, recentDebriefs: [LoopInsights_MealDebrief]) -> String { + var lines: [String] = [] + lines.append("I'm about to eat \(advice.foodType).") + lines.append("My personal history with this food (\(advice.mealCount) meals):") + lines.append("- Average carbs: \(String(format: "%.0f", advice.averageCarbs))g") + if advice.averagePeakRise > 0 { + lines.append("- Average peak glucose rise: +\(String(format: "%.0f", advice.averagePeakRise)) mg/dL") + lines.append("- Average time to peak: \(String(format: "%.0f", advice.averageTimeToPeak)) min") + } + + if !recentDebriefs.isEmpty { + lines.append("") + lines.append("Recent meal debriefs for this food:") + for debrief in recentDebriefs { + if let effective = debrief.effectiveCarbsEstimate { + lines.append("- Effective carbs: ~\(String(format: "%.0f", effective))g") + } + for learning in debrief.learnings { + lines.append("- \(learning)") + } + } + } + + lines.append("") + lines.append("What should I consider for bolusing this time? Be specific about timing and approach.") + + return lines.joined(separator: "\n") + } +} diff --git a/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift new file mode 100644 index 0000000000..e510fc5bba --- /dev/null +++ b/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift @@ -0,0 +1,219 @@ +// +// LoopInsights_MealInsightsViewModel.swift +// Loop +// +// LoopInsights — Extracted ViewModel for Meal Insights view. +// Manages meal data loading, debrief generation, and pre-meal advice state. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import Foundation +import Combine +import LoopKit +import HealthKit + +@MainActor +final class LoopInsights_MealInsightsViewModel: ObservableObject { + + // MARK: - Published State + + @Published var mealEvents: [LoopInsightsMealEvent] = [] + @Published var foodPatterns: [LoopInsightsFoodResponsePattern] = [] + @Published var isLoading = true + + // Pre-Meal Advice tab + @Published var selectedPattern: LoopInsightsFoodResponsePattern? + @Published var aiAdvice: String? + @Published var isLoadingAdvice = false + + // Debrief state per meal + @Published var expandedDebriefID: String? + @Published var debriefResults: [String: LoopInsights_MealDebrief] = [:] + @Published var debriefLoadingIDs: Set = [] + @Published var debriefErrors: [String: String] = [:] + + // MARK: - Dependencies + + let coordinator: LoopInsights_Coordinator + + init(coordinator: LoopInsights_Coordinator) { + self.coordinator = coordinator + } + + // MARK: - Data Loading + + func loadMealData() async { + let period = LoopInsights_FeatureFlags.analysisPeriod + let endDate = Date() + let startDate = endDate.addingTimeInterval(-period.timeInterval) + + do { + let carbEntries = try await coordinator.fetchCarbEntries(start: startDate, end: endDate) + let glucoseSamples = try await coordinator.fetchGlucoseSamples(start: startDate, end: endDate) + + let rawGlucoseEvents = LoopInsights_FoodResponseAnalyzer.buildRecentMealEvents( + carbEntries: carbEntries, + glucoseSamples: glucoseSamples + ) + let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( + carbEntries: carbEntries, + glucoseSamples: glucoseSamples + ) + + // Load FoodFinder MealArchive to get thumbnails + meals without glucose data + let archiveMeals = MealArchive.meals(from: startDate, to: endDate) + + // Enrich glucose-matched events with thumbnail from MealArchive + let glucoseMatchedEvents = rawGlucoseEvents.map { event -> LoopInsightsMealEvent in + let matchingRecord = archiveMeals.first { record in + abs(record.date.timeIntervalSince(event.date)) < 300 && + record.foodType == event.foodType + } + guard let record = matchingRecord, record.thumbnailID != nil else { return event } + return LoopInsightsMealEvent( + date: event.date, + foodType: event.foodType, + carbs: event.carbs, + preMealGlucose: event.preMealGlucose, + peakGlucose: event.peakGlucose, + twoHourGlucose: event.twoHourGlucose, + glucoseTimeline: event.glucoseTimeline, + archiveRecordID: record.id, + thumbnailID: record.thumbnailID + ) + } + + // Archive-only meals (no glucose match yet) + let archiveEvents = archiveMeals.compactMap { record -> LoopInsightsMealEvent? in + let isDuplicate = glucoseMatchedEvents.contains { event in + abs(event.date.timeIntervalSince(record.date)) < 300 && + event.foodType == record.foodType + } + guard !isDuplicate else { return nil } + + return LoopInsightsMealEvent( + date: record.date, + foodType: record.foodType, + carbs: record.carbsGrams, + archiveRecordID: record.id, + thumbnailID: record.thumbnailID + ) + } + + // Merge and sort by date (most recent first) + self.mealEvents = (glucoseMatchedEvents + archiveEvents) + .sorted { $0.date > $1.date } + self.foodPatterns = patterns + self.isLoading = false + } catch { + self.isLoading = false + } + } + + // MARK: - Debrief + + /// Check debrief readiness for a meal event. Looks up the MealArchive record by date + foodType. + func debriefReadiness(for event: LoopInsightsMealEvent) -> LoopInsights_DebriefReadiness { + guard LoopInsights_FeatureFlags.mealDebriefEnabled else { return .featureDisabled } + + // Already loaded in this session? + if debriefResults[event.id.uuidString] != nil { return .ready } + + // Find matching MealArchive record + guard let record = findArchiveRecord(for: event) else { return .noSnapshot } + + return coordinator.mealDebriefService.isDebriefReady(for: record) + } + + /// Toggle debrief expansion for a meal event. Generates on first expand if needed. + func toggleDebrief(for event: LoopInsightsMealEvent) { + let eventID = event.id.uuidString + + if expandedDebriefID == eventID { + expandedDebriefID = nil + return + } + + expandedDebriefID = eventID + + // Already loaded or loading? + if debriefResults[eventID] != nil || debriefLoadingIDs.contains(eventID) { return } + + guard let record = findArchiveRecord(for: event) else { return } + + let readiness = coordinator.mealDebriefService.isDebriefReady(for: record) + guard readiness == .readyToGenerate || readiness == .ready else { return } + + // Find food pattern for this type + let pattern = foodPatterns.first { $0.foodType == event.foodType } + + debriefLoadingIDs.insert(eventID) + debriefErrors.removeValue(forKey: eventID) + + Task { + do { + let debrief = try await coordinator.mealDebriefService.generateDebrief( + for: record, + actualTimeline: event.glucoseTimeline, + foodPattern: pattern + ) + self.debriefResults[eventID] = debrief + self.debriefLoadingIDs.remove(eventID) + } catch { + self.debriefErrors[eventID] = error.localizedDescription + self.debriefLoadingIDs.remove(eventID) + } + } + } + + // MARK: - Pre-Meal Advice + + func requestAdvice(for pattern: LoopInsightsFoodResponsePattern) { + selectedPattern = pattern + isLoadingAdvice = true + aiAdvice = nil + + let prompt = """ + Based on my glucose response pattern for \(pattern.foodType): + - Average carbs: \(String(format: "%.0f", pattern.averageCarbsPerMeal))g per meal + - Peak glucose rise: \(String(format: "%.0f", pattern.peakGlucoseRise)) mg/dL + - Time to peak: \(String(format: "%.0f", pattern.timeToPeakMinutes)) minutes + - 2h post-meal average: \(String(format: "%.0f", pattern.twoHourPostMealAvg)) mg/dL + - 4h post-meal average: \(String(format: "%.0f", pattern.fourHourPostMealAvg)) mg/dL + + Give me brief, practical advice for managing this food. Include: timing of pre-bolus, \ + any carb ratio considerations, and alternative strategies. Keep it under 4 sentences. + """ + + Task { + do { + let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( + "You are a diabetes meal advisor. Be concise and practical.", + userPrompt: prompt + ) + self.aiAdvice = response + self.isLoadingAdvice = false + } catch { + self.aiAdvice = "Unable to get advice: \(error.localizedDescription)" + self.isLoadingAdvice = false + } + } + } + + // MARK: - Helpers + + /// Find the MealArchive record that matches this meal event. + /// Uses archiveRecordID if available, otherwise falls back to date proximity + foodType. + private func findArchiveRecord(for event: LoopInsightsMealEvent) -> FoodFinder_AnalysisRecord? { + if let recordID = event.archiveRecordID { + return MealArchive.loadAll().first { $0.id == recordID } + } + let windowStart = event.date.addingTimeInterval(-300) // 5 min tolerance + let windowEnd = event.date.addingTimeInterval(300) + let candidates = MealArchive.meals(from: windowStart, to: windowEnd) + return candidates.first { $0.foodType == event.foodType } + ?? candidates.first // Fall back to closest match + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift index e4fdba1bdd..c8f117498f 100644 --- a/Loop/Views/LoopInsights/LoopInsights_ChatView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_ChatView.swift @@ -78,7 +78,7 @@ struct LoopInsights_ChatView: View { } .toolbar { ToolbarItem(placement: .principal) { - Text("🌀 " + NSLocalizedString("Ask Loopy", comment: "LoopInsights chat title")) + Text("🌀 " + NSLocalizedString("Ask Loopy!", comment: "LoopInsights Loopy chat title")) .font(.headline) .foregroundColor(.white) } diff --git a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift index c9a8d91f4c..7983e5f834 100644 --- a/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_DashboardView.swift @@ -970,7 +970,7 @@ struct LoopInsights_DashboardView: View { Button(action: { showingChat = true }) { HStack { Text("🌀") - Text(NSLocalizedString("Ask Loopy", comment: "LoopInsights chat button")) + Text(NSLocalizedString("Ask Loopy!", comment: "LoopInsights Loopy chat button")) Spacer() Image(systemName: "chevron.right") .font(.caption) diff --git a/Loop/Views/LoopInsights/LoopInsights_MealDebriefCard.swift b/Loop/Views/LoopInsights/LoopInsights_MealDebriefCard.swift new file mode 100644 index 0000000000..c546f7989c --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_MealDebriefCard.swift @@ -0,0 +1,344 @@ +// +// LoopInsights_MealDebriefCard.swift +// Loop +// +// LoopInsights — Expandable card showing predicted vs actual glucose, +// AI interpretation, effective carbs badge, and learnings. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// Expandable debrief section shown inside a meal card when the meal is ≥2h old. +struct LoopInsights_MealDebriefCard: View { + + let event: LoopInsightsMealEvent + let readiness: LoopInsights_DebriefReadiness + let debrief: LoopInsights_MealDebrief? + let isLoading: Bool + let errorMessage: String? + let isExpanded: Bool + let onToggle: () -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + debriefHeader + if isExpanded { + debriefContent + } + } + } + + // MARK: - Header + + private var debriefHeader: some View { + Button(action: onToggle) { + HStack(spacing: 6) { + readinessIcon + Text(headerText) + .font(.caption) + .foregroundColor(.secondary) + Spacer() + if canExpand { + Image(systemName: isExpanded ? "chevron.up" : "chevron.down") + .font(.caption2) + .foregroundColor(.secondary) + } + } + } + .buttonStyle(.plain) + .disabled(!canExpand) + } + + private var readinessIcon: some View { + Group { + switch readiness { + case .ready, .readyToGenerate: + Image(systemName: "sparkles") + .font(.caption) + .foregroundColor(.accentColor) + case .tooRecent: + Image(systemName: "clock") + .font(.caption) + .foregroundColor(.orange) + case .noSnapshot: + Image(systemName: "exclamationmark.circle") + .font(.caption) + .foregroundColor(.secondary) + case .featureDisabled: + EmptyView() + } + } + } + + private var headerText: String { + switch readiness { + case .ready, .readyToGenerate: + return NSLocalizedString("AI Meal Debrief", comment: "LoopInsights debrief header") + case .tooRecent(let mins): + return String(format: NSLocalizedString("Debrief ready in %d min", comment: "LoopInsights debrief countdown"), mins) + case .noSnapshot: + return NSLocalizedString("No prediction data captured", comment: "LoopInsights no snapshot") + case .featureDisabled: + return "" + } + } + + private var canExpand: Bool { + switch readiness { + case .ready, .readyToGenerate: + return true + default: + return false + } + } + + // MARK: - Expanded Content + + @ViewBuilder + private var debriefContent: some View { + if isLoading { + HStack(spacing: 8) { + ProgressView() + .scaleEffect(0.7) + Text(NSLocalizedString("Generating debrief...", comment: "LoopInsights generating debrief")) + .font(.caption) + .foregroundColor(.secondary) + } + .padding(.vertical, 4) + } else if let error = errorMessage { + HStack(spacing: 6) { + Image(systemName: "exclamationmark.triangle") + .font(.caption) + .foregroundColor(.orange) + Text(error) + .font(.caption) + .foregroundColor(.secondary) + } + } else if let debrief = debrief { + VStack(alignment: .leading, spacing: 10) { + // Mini chart: predicted vs actual + predictedVsActualChart(debrief: debrief) + + // Effective carbs badge + if let effectiveCarbs = debrief.effectiveCarbsEstimate { + effectiveCarbsBadge(effectiveCarbs: effectiveCarbs, enteredCarbs: event.carbs) + } + + // AI interpretation + Text(debrief.aiInterpretation) + .font(.caption) + .foregroundColor(.primary) + .fixedSize(horizontal: false, vertical: true) + + // Learnings + if !debrief.learnings.isEmpty { + VStack(alignment: .leading, spacing: 4) { + Text(NSLocalizedString("Key Takeaways", comment: "LoopInsights debrief learnings header")) + .font(.caption2.weight(.semibold)) + .foregroundColor(.secondary) + ForEach(debrief.learnings, id: \.self) { learning in + HStack(alignment: .top, spacing: 6) { + Image(systemName: "lightbulb.fill") + .font(.caption2) + .foregroundColor(.yellow) + Text(learning) + .font(.caption) + .foregroundColor(.secondary) + } + } + } + } + + // Peak comparison + if let predPeak = debrief.predictedPeakGlucose, + let actPeak = debrief.actualPeakGlucose { + peakComparisonRow(predicted: predPeak, actual: actPeak, timingDelta: debrief.peakTimingDeltaMinutes) + } + } + .padding(.vertical, 4) + } + } + + // MARK: - Predicted vs Actual Chart + + private func predictedVsActualChart(debrief: LoopInsights_MealDebrief) -> some View { + // Find the prediction snapshot for timeline data + let snapshot = LoopInsights_PredictionSnapshotStore.snapshot(forMealID: debrief.mealRecordID) + + return VStack(alignment: .leading, spacing: 4) { + // Legend + HStack(spacing: 12) { + HStack(spacing: 4) { + Rectangle().fill(Color.blue.opacity(0.5)) + .frame(width: 16, height: 2) + .overlay( + Rectangle().stroke(style: StrokeStyle(lineWidth: 1, dash: [3, 2])) + .foregroundColor(.blue) + ) + Text(NSLocalizedString("Predicted", comment: "LoopInsights chart predicted")) + .font(.caption2) + .foregroundColor(.secondary) + } + HStack(spacing: 4) { + Rectangle().fill(Color.green).frame(width: 16, height: 2) + Text(NSLocalizedString("Actual", comment: "LoopInsights chart actual")) + .font(.caption2) + .foregroundColor(.secondary) + } + Spacer() + } + + // Chart + GeometryReader { geo in + let width = geo.size.width + let height: CGFloat = 80 + + // Build data points for 0-4h + let actualPoints = event.glucoseTimeline.filter { $0.minutesAfter >= 0 && $0.minutesAfter <= 240 } + let predictedPoints: [(Int, Double)] = { + guard let snap = snapshot else { return [] } + var pts: [(Int, Double)] = [] + for (i, v) in snap.predictedValues.enumerated() { + let min = Int(Double(i) * snap.intervalSeconds / 60) + if min <= 240 { pts.append((min, v)) } + } + return pts + }() + + // Find global min/max for scale + let allValues = actualPoints.map(\.glucose) + predictedPoints.map(\.1) + let minVal = (allValues.min() ?? 70) - 10 + let maxVal = (allValues.max() ?? 200) + 10 + let valRange = max(maxVal - minVal, 1) + + ZStack { + // Grid lines at 70 and 180 + ForEach([70.0, 180.0], id: \.self) { threshold in + if threshold >= minVal && threshold <= maxVal { + let y = height * (1 - CGFloat((threshold - minVal) / valRange)) + Path { path in + path.move(to: CGPoint(x: 0, y: y)) + path.addLine(to: CGPoint(x: width, y: y)) + } + .stroke(Color.secondary.opacity(0.2), style: StrokeStyle(lineWidth: 0.5, dash: [4, 4])) + } + } + + // Predicted line (dashed blue) + if predictedPoints.count >= 2 { + Path { path in + for (i, pt) in predictedPoints.enumerated() { + let x = width * CGFloat(pt.0) / 240 + let y = height * (1 - CGFloat((pt.1 - minVal) / valRange)) + if i == 0 { path.move(to: CGPoint(x: x, y: y)) } + else { path.addLine(to: CGPoint(x: x, y: y)) } + } + } + .stroke(Color.blue.opacity(0.6), style: StrokeStyle(lineWidth: 1.5, dash: [5, 3])) + } + + // Actual line (solid green) + if actualPoints.count >= 2 { + Path { path in + for (i, pt) in actualPoints.enumerated() { + let x = width * CGFloat(pt.minutesAfter) / 240 + let y = height * (1 - CGFloat((pt.glucose - minVal) / valRange)) + if i == 0 { path.move(to: CGPoint(x: x, y: y)) } + else { path.addLine(to: CGPoint(x: x, y: y)) } + } + } + .stroke(Color.green, lineWidth: 2) + } + + // Time labels + HStack { + Text("0h").font(.system(size: 8)).foregroundColor(.secondary) + Spacer() + Text("1h").font(.system(size: 8)).foregroundColor(.secondary) + Spacer() + Text("2h").font(.system(size: 8)).foregroundColor(.secondary) + Spacer() + Text("3h").font(.system(size: 8)).foregroundColor(.secondary) + Spacer() + Text("4h").font(.system(size: 8)).foregroundColor(.secondary) + } + .offset(y: height / 2 + 6) + } + } + .frame(height: 96) + } + } + + // MARK: - Effective Carbs Badge + + private func effectiveCarbsBadge(effectiveCarbs: Double, enteredCarbs: Double) -> some View { + let delta = effectiveCarbs - enteredCarbs + let color: Color = abs(delta) <= 5 ? .green : (delta > 0 ? .orange : .blue) + + return HStack(spacing: 8) { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Effective Carbs", comment: "LoopInsights effective carbs label")) + .font(.caption2) + .foregroundColor(.secondary) + HStack(spacing: 4) { + Text(String(format: "~%.0fg", effectiveCarbs)) + .font(.caption.weight(.bold)) + .foregroundColor(color) + Text(NSLocalizedString("vs", comment: "LoopInsights vs label")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.0fg entered", enteredCarbs)) + .font(.caption) + .foregroundColor(.secondary) + } + } + Spacer() + if abs(delta) > 2 { + Text(String(format: "%+.0fg", delta)) + .font(.caption.weight(.bold)) + .foregroundColor(color) + .padding(.horizontal, 8) + .padding(.vertical, 3) + .background(color.opacity(0.12)) + .cornerRadius(6) + } + } + } + + // MARK: - Peak Comparison + + private func peakComparisonRow(predicted: Double, actual: Double, timingDelta: Double?) -> some View { + HStack(spacing: 16) { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Predicted Peak", comment: "LoopInsights predicted peak")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.0f mg/dL", predicted)) + .font(.caption.weight(.semibold)) + .foregroundColor(.blue) + } + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Actual Peak", comment: "LoopInsights actual peak")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.0f mg/dL", actual)) + .font(.caption.weight(.semibold)) + .foregroundColor(.green) + } + if let delta = timingDelta, abs(delta) > 5 { + VStack(alignment: .leading, spacing: 2) { + Text(NSLocalizedString("Peak Timing", comment: "LoopInsights peak timing")) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%+.0f min", delta)) + .font(.caption.weight(.semibold)) + .foregroundColor(delta > 0 ? .orange : .blue) + } + } + Spacer() + } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift index 086fc290c2..526bd33e3e 100644 --- a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift @@ -11,21 +11,21 @@ import LoopKit import HealthKit /// Combined Meal Debrief + Pre-Meal Advisor view. -/// "Recent Meals" tab shows meals with glucose response cards. +/// "Recent Meals" tab shows meals with glucose response cards and expandable AI debriefs. /// "Pre-Meal Advice" tab lets user pick a food type and see historical pattern + AI advice. struct LoopInsights_MealInsightsView: View { let coordinator: LoopInsights_Coordinator + @StateObject private var viewModel: LoopInsights_MealInsightsViewModel @State private var selectedTab = 0 - @State private var mealEvents: [LoopInsightsMealEvent] = [] - @State private var foodPatterns: [LoopInsightsFoodResponsePattern] = [] - @State private var isLoading = true - @State private var selectedPattern: LoopInsightsFoodResponsePattern? - @State private var aiAdvice: String? - @State private var isLoadingAdvice = false @Environment(\.dismiss) private var dismiss + init(coordinator: LoopInsights_Coordinator) { + self.coordinator = coordinator + _viewModel = StateObject(wrappedValue: LoopInsights_MealInsightsViewModel(coordinator: coordinator)) + } + var body: some View { VStack(spacing: 0) { Picker("", selection: $selectedTab) { @@ -35,7 +35,7 @@ struct LoopInsights_MealInsightsView: View { .pickerStyle(.segmented) .padding() - if isLoading { + if viewModel.isLoading { Spacer() ProgressView() Text(NSLocalizedString("Analyzing meal data...", comment: "LoopInsights meals loading")) @@ -58,7 +58,7 @@ struct LoopInsights_MealInsightsView: View { } } .task { - await loadMealData() + await viewModel.loadMealData() } } @@ -66,14 +66,16 @@ struct LoopInsights_MealInsightsView: View { private var recentMealsTab: some View { Group { - if mealEvents.isEmpty { + if viewModel.mealEvents.isEmpty { VStack(spacing: 12) { Image(systemName: "fork.knife") .font(.system(size: 40)) .foregroundColor(.secondary) - Text(NSLocalizedString("No recent meals with glucose data found", comment: "LoopInsights no meals")) + Text(NSLocalizedString("No recent meals found. Log meals with FoodFinder or carb entries to see them here.", comment: "LoopInsights no meals")) .font(.subheadline) .foregroundColor(.secondary) + .multilineTextAlignment(.center) + .padding(.horizontal) } .frame(maxWidth: .infinity, maxHeight: .infinity) } else { @@ -83,7 +85,7 @@ struct LoopInsights_MealInsightsView: View { HStack(spacing: 16) { HStack(spacing: 4) { Circle().fill(Color.green).frame(width: 8, height: 8) - Text(NSLocalizedString("Rise is ≤ 50 mg/dL", comment: "LoopInsights meal legend green")) + Text(NSLocalizedString("Rise is \u{2264} 50 mg/dL", comment: "LoopInsights meal legend green")) .font(.caption2) .foregroundColor(.secondary) } @@ -96,7 +98,7 @@ struct LoopInsights_MealInsightsView: View { Spacer() } - ForEach(mealEvents) { event in + ForEach(viewModel.mealEvents) { event in mealCard(event) } } @@ -108,52 +110,114 @@ struct LoopInsights_MealInsightsView: View { private func mealCard(_ event: LoopInsightsMealEvent) -> some View { VStack(alignment: .leading, spacing: 8) { - Text(event.foodType) - .font(.subheadline.weight(.semibold)) - HStack { - Text(Self.dateFormatter.string(from: event.date)) - .font(.caption2) - .foregroundColor(.secondary) - Spacer() - Text(String(format: "%.0fg carbs", event.carbs)) - .font(.caption) - .foregroundColor(.secondary) + HStack(alignment: .top, spacing: 10) { + VStack(alignment: .leading, spacing: 4) { + Text(event.foodType) + .font(.subheadline.weight(.semibold)) + HStack { + Text(Self.dateFormatter.string(from: event.date)) + .font(.caption2) + .foregroundColor(.secondary) + Spacer() + Text(String(format: "%.0fg carbs", event.carbs)) + .font(.caption) + .foregroundColor(.secondary) + } + } + + if let thumbID = event.thumbnailID, + let uiImage = FavoriteFoodImageStore.loadThumbnail(id: thumbID) { + Image(uiImage: uiImage) + .resizable() + .scaledToFill() + .frame(width: 48, height: 48) + .cornerRadius(8) + .overlay( + RoundedRectangle(cornerRadius: 8) + .stroke(Color(.systemGray4), lineWidth: 0.5) + ) + } } - // Glucose response summary - HStack(spacing: 16) { - glucoseStatPill( - label: NSLocalizedString("Pre", comment: "LoopInsights meal pre-meal label"), - value: String(format: "%.0f", event.preMealGlucose), - color: glucoseColor(event.preMealGlucose) - ) - Image(systemName: "arrow.right") - .font(.caption2) - .foregroundColor(.secondary) - glucoseStatPill( - label: NSLocalizedString("Peak", comment: "LoopInsights meal peak label"), - value: String(format: "%.0f", event.peakGlucose), - color: glucoseColor(event.peakGlucose) - ) - Image(systemName: "arrow.right") - .font(.caption2) - .foregroundColor(.secondary) - glucoseStatPill( - label: "2h", - value: String(format: "%.0f", event.twoHourGlucose), - color: glucoseColor(event.twoHourGlucose) - ) + if event.hasGlucoseData, + let preMeal = event.preMealGlucose, + let peak = event.peakGlucose, + let twoHour = event.twoHourGlucose { + // Glucose response summary + HStack(spacing: 16) { + glucoseStatPill( + label: NSLocalizedString("Pre", comment: "LoopInsights meal pre-meal label"), + value: String(format: "%.0f", preMeal), + color: glucoseColor(preMeal) + ) + Image(systemName: "arrow.right") + .font(.caption2) + .foregroundColor(.secondary) + glucoseStatPill( + label: NSLocalizedString("Peak", comment: "LoopInsights meal peak label"), + value: String(format: "%.0f", peak), + color: glucoseColor(peak) + ) + Image(systemName: "arrow.right") + .font(.caption2) + .foregroundColor(.secondary) + glucoseStatPill( + label: "2h", + value: String(format: "%.0f", twoHour), + color: glucoseColor(twoHour) + ) + } + + // Rise indicator + let rise = peak - preMeal + HStack(spacing: 4) { + Image(systemName: rise > 50 ? "arrow.up.circle.fill" : "arrow.up.circle") + .foregroundColor(rise > 50 ? .orange : .green) + .font(.caption) + Text(String(format: NSLocalizedString("Rise: %+.0f mg/dL", comment: "LoopInsights meal glucose rise"), rise)) + .font(.caption) + .foregroundColor(rise > 50 ? .orange : .green) + } + } else { + // No glucose data yet + HStack(spacing: 6) { + let hoursAgo = Date().timeIntervalSince(event.date) / 3600 + if hoursAgo < 4 { + Image(systemName: "clock") + .font(.caption) + .foregroundColor(.secondary) + Text(NSLocalizedString("Glucose response data collecting...", comment: "LoopInsights meal waiting for glucose")) + .font(.caption) + .foregroundColor(.secondary) + } else { + Image(systemName: "waveform.path.ecg") + .font(.caption) + .foregroundColor(.secondary) + Text(NSLocalizedString("No glucose data matched", comment: "LoopInsights meal no glucose data")) + .font(.caption) + .foregroundColor(.secondary) + } + } + .padding(.vertical, 4) } - // Rise indicator - let rise = event.peakGlucose - event.preMealGlucose - HStack(spacing: 4) { - Image(systemName: rise > 50 ? "arrow.up.circle.fill" : "arrow.up.circle") - .foregroundColor(rise > 50 ? .orange : .green) - .font(.caption) - Text(String(format: NSLocalizedString("Rise: %+.0f mg/dL", comment: "LoopInsights meal glucose rise"), rise)) - .font(.caption) - .foregroundColor(rise > 50 ? .orange : .green) + // AI Meal Debrief section (expandable) + if LoopInsights_FeatureFlags.mealDebriefEnabled && event.hasGlucoseData { + let readiness = viewModel.debriefReadiness(for: event) + if case .featureDisabled = readiness { + // Don't show anything + } else { + Divider() + LoopInsights_MealDebriefCard( + event: event, + readiness: readiness, + debrief: viewModel.debriefResults[event.id.uuidString], + isLoading: viewModel.debriefLoadingIDs.contains(event.id.uuidString), + errorMessage: viewModel.debriefErrors[event.id.uuidString], + isExpanded: viewModel.expandedDebriefID == event.id.uuidString, + onToggle: { viewModel.toggleDebrief(for: event) } + ) + } } } .padding() @@ -184,7 +248,7 @@ struct LoopInsights_MealInsightsView: View { private var preMealAdviceTab: some View { ScrollView { VStack(alignment: .leading, spacing: 16) { - if foodPatterns.isEmpty { + if viewModel.foodPatterns.isEmpty { Text(NSLocalizedString("No food-type patterns available. Log meals with food types to see patterns.", comment: "LoopInsights no food patterns")) .font(.subheadline) .foregroundColor(.secondary) @@ -195,11 +259,11 @@ struct LoopInsights_MealInsightsView: View { .foregroundColor(.secondary) .padding(.horizontal) - ForEach(foodPatterns) { pattern in + ForEach(viewModel.foodPatterns) { pattern in foodPatternCard(pattern) } - if let advice = aiAdvice { + if let advice = viewModel.aiAdvice { VStack(alignment: .leading, spacing: 8) { HStack(spacing: 6) { Image(systemName: "sparkles") @@ -224,8 +288,7 @@ struct LoopInsights_MealInsightsView: View { private func foodPatternCard(_ pattern: LoopInsightsFoodResponsePattern) -> some View { Button(action: { - selectedPattern = pattern - requestAdvice(for: pattern) + viewModel.requestAdvice(for: pattern) }) { VStack(alignment: .leading, spacing: 6) { HStack { @@ -236,7 +299,7 @@ struct LoopInsights_MealInsightsView: View { Text(String(format: "%d meals", pattern.mealCount)) .font(.caption) .foregroundColor(.secondary) - if selectedPattern?.id == pattern.id { + if viewModel.selectedPattern?.id == pattern.id { Image(systemName: "checkmark.circle.fill") .foregroundColor(.accentColor) } @@ -267,7 +330,7 @@ struct LoopInsights_MealInsightsView: View { } } - if isLoadingAdvice && selectedPattern?.id == pattern.id { + if viewModel.isLoadingAdvice && viewModel.selectedPattern?.id == pattern.id { HStack { ProgressView() .scaleEffect(0.7) @@ -280,86 +343,19 @@ struct LoopInsights_MealInsightsView: View { .padding() .background( RoundedRectangle(cornerRadius: 12) - .fill(selectedPattern?.id == pattern.id + .fill(viewModel.selectedPattern?.id == pattern.id ? Color.accentColor.opacity(0.08) : Color(.secondarySystemGroupedBackground)) ) .overlay( RoundedRectangle(cornerRadius: 12) - .stroke(selectedPattern?.id == pattern.id ? Color.accentColor.opacity(0.3) : Color.clear, lineWidth: 1) + .stroke(viewModel.selectedPattern?.id == pattern.id ? Color.accentColor.opacity(0.3) : Color.clear, lineWidth: 1) ) } .buttonStyle(.plain) .padding(.horizontal) } - // MARK: - Data Loading - - private func loadMealData() async { - let period = LoopInsights_FeatureFlags.analysisPeriod - let endDate = Date() - let startDate = endDate.addingTimeInterval(-period.timeInterval) - - do { - let carbEntries = try await coordinator.fetchCarbEntries(start: startDate, end: endDate) - let glucoseSamples = try await coordinator.fetchGlucoseSamples(start: startDate, end: endDate) - - let events = LoopInsights_FoodResponseAnalyzer.buildRecentMealEvents( - carbEntries: carbEntries, - glucoseSamples: glucoseSamples - ) - let patterns = LoopInsights_FoodResponseAnalyzer.analyzeFoodResponses( - carbEntries: carbEntries, - glucoseSamples: glucoseSamples - ) - - await MainActor.run { - self.mealEvents = events - self.foodPatterns = patterns - self.isLoading = false - } - } catch { - await MainActor.run { - self.isLoading = false - } - } - } - - private func requestAdvice(for pattern: LoopInsightsFoodResponsePattern) { - isLoadingAdvice = true - aiAdvice = nil - - let prompt = """ - Based on my glucose response pattern for \(pattern.foodType): - - Average carbs: \(String(format: "%.0f", pattern.averageCarbsPerMeal))g per meal - - Peak glucose rise: \(String(format: "%.0f", pattern.peakGlucoseRise)) mg/dL - - Time to peak: \(String(format: "%.0f", pattern.timeToPeakMinutes)) minutes - - 2h post-meal average: \(String(format: "%.0f", pattern.twoHourPostMealAvg)) mg/dL - - 4h post-meal average: \(String(format: "%.0f", pattern.fourHourPostMealAvg)) mg/dL - - Give me brief, practical advice for managing this food. Include: timing of pre-bolus, \ - any carb ratio considerations, and alternative strategies. Keep it under 4 sentences. - """ - - Task { - do { - let response = try await LoopInsights_AIServiceAdapter.shared.sendPrompt( - "You are a diabetes meal advisor. Be concise and practical.", - userPrompt: prompt - ) - await MainActor.run { - self.aiAdvice = response - self.isLoadingAdvice = false - } - } catch { - await MainActor.run { - self.aiAdvice = "Unable to get advice: \(error.localizedDescription)" - self.isLoadingAdvice = false - } - } - } - } - // MARK: - Formatters private static let dateFormatter: DateFormatter = { diff --git a/Loop/Views/LoopInsights/LoopInsights_PreMealAdvisorCard.swift b/Loop/Views/LoopInsights/LoopInsights_PreMealAdvisorCard.swift new file mode 100644 index 0000000000..c82aaee9f3 --- /dev/null +++ b/Loop/Views/LoopInsights/LoopInsights_PreMealAdvisorCard.swift @@ -0,0 +1,113 @@ +// +// LoopInsights_PreMealAdvisorCard.swift +// Loop +// +// LoopInsights — Compact card shown in CarbEntryView (via FoodFinder_EntryPoint) +// when the user identifies a food they've eaten before. Shows historical stats +// and async AI advice. +// +// Idea by Taylor Patterson. Coded by Claude Code. +// Copyright © 2026 LoopKit Authors. All rights reserved. +// + +import SwiftUI + +/// "Personal Insight" card shown below food identification in FoodFinder. +struct LoopInsights_PreMealAdvisorCard: View { + + let advice: LoopInsights_PreMealAdvice + let onDismiss: () -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + // Header + HStack { + HStack(spacing: 6) { + Image(systemName: "brain.head.profile") + .font(.caption) + .foregroundColor(Color(red: 26/255, green: 138/255, blue: 158/255)) + Text(NSLocalizedString("Personal Insight", comment: "Pre-meal advisor card header")) + .font(.caption.weight(.semibold)) + .foregroundColor(Color(red: 26/255, green: 138/255, blue: 158/255)) + } + Spacer() + Button(action: onDismiss) { + Image(systemName: "xmark.circle.fill") + .font(.caption) + .foregroundColor(.secondary) + } + .buttonStyle(.plain) + } + + // Stats row + if advice.averagePeakRise > 0 { + HStack(spacing: 16) { + statPill( + label: NSLocalizedString("Meals", comment: "Pre-meal advisor meals count"), + value: "\(advice.mealCount)" + ) + statPill( + label: NSLocalizedString("Peak Rise", comment: "Pre-meal advisor peak rise"), + value: String(format: "+%.0f", advice.averagePeakRise), + color: advice.averagePeakRise > 60 ? .orange : .green + ) + statPill( + label: NSLocalizedString("Peak Time", comment: "Pre-meal advisor peak time"), + value: String(format: "%.0f min", advice.averageTimeToPeak) + ) + statPill( + label: NSLocalizedString("Avg Carbs", comment: "Pre-meal advisor avg carbs"), + value: String(format: "%.0fg", advice.averageCarbs) + ) + } + } + + // Summary text + Text(advice.summaryText) + .font(.caption) + .foregroundColor(.secondary) + .fixedSize(horizontal: false, vertical: true) + + // AI advice (async loaded) + if advice.isLoadingAI { + HStack(spacing: 6) { + ProgressView() + .scaleEffect(0.6) + Text(NSLocalizedString("Getting personalized advice...", comment: "Pre-meal advisor loading AI")) + .font(.caption) + .foregroundColor(.secondary) + } + } else if let aiText = advice.aiAdvice { + HStack(alignment: .top, spacing: 6) { + Image(systemName: "sparkles") + .font(.caption) + .foregroundColor(.accentColor) + Text(aiText) + .font(.caption) + .foregroundColor(.primary) + .fixedSize(horizontal: false, vertical: true) + } + } + } + .padding(12) + .background( + RoundedRectangle(cornerRadius: 10) + .fill(Color(red: 26/255, green: 138/255, blue: 158/255).opacity(0.06)) + ) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke(Color(red: 26/255, green: 138/255, blue: 158/255).opacity(0.2), lineWidth: 1) + ) + } + + private func statPill(label: String, value: String, color: Color = .primary) -> some View { + VStack(spacing: 2) { + Text(label) + .font(.system(size: 9)) + .foregroundColor(.secondary) + Text(value) + .font(.caption2.weight(.bold)) + .foregroundColor(color) + } + } +} diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index c248981316..d76aca10aa 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -54,6 +54,8 @@ struct LoopInsights_SettingsView: View { // Phase 5 flags @State private var circadianEnabled = LoopInsights_FeatureFlags.circadianEnabled @State private var foodResponseEnabled = LoopInsights_FeatureFlags.foodResponseEnabled + @State private var mealDebriefEnabled = LoopInsights_FeatureFlags.mealDebriefEnabled + @State private var preMealAdvisorEnabled = LoopInsights_FeatureFlags.preMealAdvisorEnabled @State private var caffeineTrackingEnabled = LoopInsights_FeatureFlags.caffeineTrackingEnabled @State private var alcoholTrackingEnabled = LoopInsights_FeatureFlags.alcoholTrackingEnabled @State private var nightscoutImportEnabled = LoopInsights_FeatureFlags.nightscoutImportEnabled @@ -135,6 +137,8 @@ struct LoopInsights_SettingsView: View { biometricsEnabled = LoopInsights_FeatureFlags.biometricsEnabled circadianEnabled = LoopInsights_FeatureFlags.circadianEnabled foodResponseEnabled = LoopInsights_FeatureFlags.foodResponseEnabled + mealDebriefEnabled = LoopInsights_FeatureFlags.mealDebriefEnabled + preMealAdvisorEnabled = LoopInsights_FeatureFlags.preMealAdvisorEnabled caffeineTrackingEnabled = LoopInsights_FeatureFlags.caffeineTrackingEnabled alcoholTrackingEnabled = LoopInsights_FeatureFlags.alcoholTrackingEnabled nightscoutImportEnabled = LoopInsights_FeatureFlags.nightscoutImportEnabled @@ -616,7 +620,7 @@ struct LoopInsights_SettingsView: View { LoopInsights_FeatureFlags.analysisPeriod = newValue } - Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions and Ask Loopy Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights analysis period description")) + Text(NSLocalizedString("Rolling lookback period for automated AI-based suggestions and Ask Loopy Chatbot - how far back do you want LoopInsights to look when analyzing your glucose, insulin, and carb data?", comment: "LoopInsights Loopy analysis period description")) .font(.caption) .foregroundColor(.secondary) @@ -1016,21 +1020,21 @@ struct LoopInsights_SettingsView: View { .textCase(.uppercase) } - Toggle(NSLocalizedString("Circadian Analysis", comment: "LoopInsights circadian toggle"), isOn: $circadianEnabled) - .onChange(of: circadianEnabled) { newValue in - LoopInsights_FeatureFlags.circadianEnabled = newValue + Toggle(NSLocalizedString("AGP Chart", comment: "LoopInsights AGP toggle"), isOn: $agpChartEnabled) + .onChange(of: agpChartEnabled) { newValue in + LoopInsights_FeatureFlags.agpChartEnabled = newValue } - Text(NSLocalizedString("Enables circadian glucose profiling, dawn phenomenon detection, negative basal awareness, and HRV-based stress scoring. Enriches AI analysis with sleep/wake patterns.", comment: "LoopInsights circadian description")) + Text(NSLocalizedString("Show Ambulatory Glucose Profile chart on the dashboard with percentile bands (P10/P25/P50/P75/P90) over 24 hours.", comment: "LoopInsights AGP description")) .font(.caption) .foregroundColor(.secondary) Divider() - Toggle(NSLocalizedString("Food Response Analysis", comment: "LoopInsights food response toggle"), isOn: $foodResponseEnabled) - .onChange(of: foodResponseEnabled) { newValue in - LoopInsights_FeatureFlags.foodResponseEnabled = newValue + Toggle(NSLocalizedString("Alcohol Tracking", comment: "LoopInsights alcohol toggle"), isOn: $alcoholTrackingEnabled) + .onChange(of: alcoholTrackingEnabled) { newValue in + LoopInsights_FeatureFlags.alcoholTrackingEnabled = newValue } - Text(NSLocalizedString("Analyzes glucose responses by food type. Enables Meal Insights view with meal debrief cards and pre-meal AI advisor.", comment: "LoopInsights food response description")) + Text(NSLocalizedString("Log alcohol intake to help the AI account for delayed hypoglycemia risk. Tracks standard drinks with linear metabolism.", comment: "LoopInsights alcohol description")) .font(.caption) .foregroundColor(.secondary) @@ -1046,24 +1050,46 @@ struct LoopInsights_SettingsView: View { Divider() - Toggle(NSLocalizedString("Alcohol Tracking", comment: "LoopInsights alcohol toggle"), isOn: $alcoholTrackingEnabled) - .onChange(of: alcoholTrackingEnabled) { newValue in - LoopInsights_FeatureFlags.alcoholTrackingEnabled = newValue + Toggle(NSLocalizedString("Circadian Analysis", comment: "LoopInsights circadian toggle"), isOn: $circadianEnabled) + .onChange(of: circadianEnabled) { newValue in + LoopInsights_FeatureFlags.circadianEnabled = newValue } - Text(NSLocalizedString("Log alcohol intake to help the AI account for delayed hypoglycemia risk. Tracks standard drinks with linear metabolism.", comment: "LoopInsights alcohol description")) + Text(NSLocalizedString("Enables circadian glucose profiling, dawn phenomenon detection, negative basal awareness, and HRV-based stress scoring. Enriches AI analysis with sleep/wake patterns.", comment: "LoopInsights circadian description")) .font(.caption) .foregroundColor(.secondary) Divider() - Toggle(NSLocalizedString("AGP Chart", comment: "LoopInsights AGP toggle"), isOn: $agpChartEnabled) - .onChange(of: agpChartEnabled) { newValue in - LoopInsights_FeatureFlags.agpChartEnabled = newValue + Toggle(NSLocalizedString("Food Response Analysis", comment: "LoopInsights food response toggle"), isOn: $foodResponseEnabled) + .onChange(of: foodResponseEnabled) { newValue in + LoopInsights_FeatureFlags.foodResponseEnabled = newValue } - Text(NSLocalizedString("Show Ambulatory Glucose Profile chart on the dashboard with percentile bands (P10/P25/P50/P75/P90) over 24 hours.", comment: "LoopInsights AGP description")) + Text(NSLocalizedString("Analyzes glucose responses by food type. Enables Meal Insights view with meal debrief cards and pre-meal AI advisor.", comment: "LoopInsights food response description")) .font(.caption) .foregroundColor(.secondary) + if foodResponseEnabled { + Divider() + + Toggle(NSLocalizedString("AI Meal Debrief", comment: "LoopInsights meal debrief toggle"), isOn: $mealDebriefEnabled) + .onChange(of: mealDebriefEnabled) { newValue in + LoopInsights_FeatureFlags.mealDebriefEnabled = newValue + } + Text(NSLocalizedString("Captures Loop's predicted glucose at meal time, then generates AI analysis comparing predicted vs actual response. Tap any meal card after 2 hours to see the debrief.", comment: "LoopInsights meal debrief description")) + .font(.caption) + .foregroundColor(.secondary) + + Divider() + + Toggle(NSLocalizedString("Pre-Meal Advisor", comment: "LoopInsights pre-meal advisor toggle"), isOn: $preMealAdvisorEnabled) + .onChange(of: preMealAdvisorEnabled) { newValue in + LoopInsights_FeatureFlags.preMealAdvisorEnabled = newValue + } + Text(NSLocalizedString("Shows historical glucose patterns and AI-powered advice when you identify a food you've eaten before in FoodFinder.", comment: "LoopInsights pre-meal advisor description")) + .font(.caption) + .foregroundColor(.secondary) + } + Divider() Toggle(NSLocalizedString("Nightscout Import", comment: "LoopInsights nightscout toggle"), isOn: $nightscoutImportEnabled) From b8659e51dd1305af7bd099d0bc2ca54c3d1e35b9 Mon Sep 17 00:00:00 2001 From: Taylor Date: Thu, 19 Feb 2026 17:46:35 -0800 Subject: [PATCH 33/36] Alphabetize Advanced Features toggles in LoopInsights settings --- .../LoopInsights_SettingsView.swift | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift index d76aca10aa..5c09c98275 100644 --- a/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_SettingsView.swift @@ -1028,6 +1028,18 @@ struct LoopInsights_SettingsView: View { .font(.caption) .foregroundColor(.secondary) + if foodResponseEnabled { + Divider() + + Toggle(NSLocalizedString("AI Meal Debrief", comment: "LoopInsights meal debrief toggle"), isOn: $mealDebriefEnabled) + .onChange(of: mealDebriefEnabled) { newValue in + LoopInsights_FeatureFlags.mealDebriefEnabled = newValue + } + Text(NSLocalizedString("Captures Loop's predicted glucose at meal time, then generates AI analysis comparing predicted vs actual response. Tap any meal card after 2 hours to see the debrief.", comment: "LoopInsights meal debrief description")) + .font(.caption) + .foregroundColor(.secondary) + } + Divider() Toggle(NSLocalizedString("Alcohol Tracking", comment: "LoopInsights alcohol toggle"), isOn: $alcoholTrackingEnabled) @@ -1068,17 +1080,17 @@ struct LoopInsights_SettingsView: View { .font(.caption) .foregroundColor(.secondary) - if foodResponseEnabled { - Divider() + Divider() - Toggle(NSLocalizedString("AI Meal Debrief", comment: "LoopInsights meal debrief toggle"), isOn: $mealDebriefEnabled) - .onChange(of: mealDebriefEnabled) { newValue in - LoopInsights_FeatureFlags.mealDebriefEnabled = newValue - } - Text(NSLocalizedString("Captures Loop's predicted glucose at meal time, then generates AI analysis comparing predicted vs actual response. Tap any meal card after 2 hours to see the debrief.", comment: "LoopInsights meal debrief description")) - .font(.caption) - .foregroundColor(.secondary) + Toggle(NSLocalizedString("Nightscout Import", comment: "LoopInsights nightscout toggle"), isOn: $nightscoutImportEnabled) + .onChange(of: nightscoutImportEnabled) { newValue in + LoopInsights_FeatureFlags.nightscoutImportEnabled = newValue + } + Text(NSLocalizedString("Import glucose and treatment data from a Nightscout server as a supplemental data source.", comment: "LoopInsights nightscout description")) + .font(.caption) + .foregroundColor(.secondary) + if foodResponseEnabled { Divider() Toggle(NSLocalizedString("Pre-Meal Advisor", comment: "LoopInsights pre-meal advisor toggle"), isOn: $preMealAdvisorEnabled) @@ -1089,16 +1101,6 @@ struct LoopInsights_SettingsView: View { .font(.caption) .foregroundColor(.secondary) } - - Divider() - - Toggle(NSLocalizedString("Nightscout Import", comment: "LoopInsights nightscout toggle"), isOn: $nightscoutImportEnabled) - .onChange(of: nightscoutImportEnabled) { newValue in - LoopInsights_FeatureFlags.nightscoutImportEnabled = newValue - } - Text(NSLocalizedString("Import glucose and treatment data from a Nightscout server as a supplemental data source.", comment: "LoopInsights nightscout description")) - .font(.caption) - .foregroundColor(.secondary) } } } From cb449a5f307b0efb1c827ae4af67208f4d3d77c8 Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 20 Feb 2026 13:49:31 -0800 Subject: [PATCH 34/36] Fix duplicate meals in Meal Insights and add nutritional data display Deduplicate merged meal events by date+foodType proximity (5 min window) to prevent the same meal appearing multiple times. Also strengthen MealArchive.archive() dedup to block same-meal-different-ID records. Add protein, fat, fiber, and calorie fields to LoopInsightsMealEvent and display them in the meal card when available from FoodFinder analysis. Enrich glucose-matched events with full nutritional data from archive. --- .../LoopInsights_Phase5Models.swift | 19 +++++++++- .../FoodFinder_AnalysisHistoryStore.swift | 9 ++++- .../LoopInsights_MealInsightsViewModel.swift | 35 +++++++++++++++---- .../LoopInsights_MealInsightsView.swift | 30 ++++++++++++++++ 4 files changed, 84 insertions(+), 9 deletions(-) diff --git a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift index c2ea109392..8963190f67 100644 --- a/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift +++ b/Loop/Models/LoopInsights/LoopInsights_Phase5Models.swift @@ -67,13 +67,26 @@ struct LoopInsightsMealEvent: Identifiable { let archiveRecordID: String? // FoodFinder_AnalysisRecord.id if from MealArchive let thumbnailID: String? // FavoriteFoodImageStore thumbnail ID + // Nutritional data from FoodFinder analysis (nil if not available) + let totalProtein: Double? // grams + let totalFat: Double? // grams + let totalFiber: Double? // grams + let totalCalories: Double? // kcal + /// Whether this event has matched glucose data var hasGlucoseData: Bool { preMealGlucose != nil } + /// Whether this event has nutritional breakdown beyond carbs + var hasNutritionalData: Bool { + totalProtein != nil || totalFat != nil || totalFiber != nil || totalCalories != nil + } + init(date: Date, foodType: String, carbs: Double, preMealGlucose: Double? = nil, peakGlucose: Double? = nil, twoHourGlucose: Double? = nil, glucoseTimeline: [(minutesAfter: Int, glucose: Double)] = [], - archiveRecordID: String? = nil, thumbnailID: String? = nil) { + archiveRecordID: String? = nil, thumbnailID: String? = nil, + totalProtein: Double? = nil, totalFat: Double? = nil, + totalFiber: Double? = nil, totalCalories: Double? = nil) { self.id = UUID() self.date = date self.foodType = foodType @@ -84,6 +97,10 @@ struct LoopInsightsMealEvent: Identifiable { self.glucoseTimeline = glucoseTimeline self.archiveRecordID = archiveRecordID self.thumbnailID = thumbnailID + self.totalProtein = totalProtein + self.totalFat = totalFat + self.totalFiber = totalFiber + self.totalCalories = totalCalories } } diff --git a/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift b/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift index 90eac876e1..1bbaaddb59 100644 --- a/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift +++ b/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift @@ -145,10 +145,17 @@ enum MealArchive { } /// Archive a single record (append to the JSON file on disk). - /// Deduplicates by ID to avoid storing the same meal twice. + /// Deduplicates by ID and by date+foodType proximity to avoid storing the same meal twice. static func archive(_ record: FoodFinder_AnalysisRecord) { var existing = loadAll() + // Skip if exact ID match guard !existing.contains(where: { $0.id == record.id }) else { return } + // Skip if another record with same foodType exists within 5 minutes + let isDuplicate = existing.contains { other in + abs(other.date.timeIntervalSince(record.date)) < 300 && + other.foodType == record.foodType + } + guard !isDuplicate else { return } existing.append(record) saveAll(existing) } diff --git a/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift index e510fc5bba..563a6d5fa6 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift @@ -65,13 +65,14 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { // Load FoodFinder MealArchive to get thumbnails + meals without glucose data let archiveMeals = MealArchive.meals(from: startDate, to: endDate) - // Enrich glucose-matched events with thumbnail from MealArchive + // Enrich glucose-matched events with thumbnail + nutrition from MealArchive let glucoseMatchedEvents = rawGlucoseEvents.map { event -> LoopInsightsMealEvent in let matchingRecord = archiveMeals.first { record in abs(record.date.timeIntervalSince(event.date)) < 300 && record.foodType == event.foodType } - guard let record = matchingRecord, record.thumbnailID != nil else { return event } + guard let record = matchingRecord else { return event } + let result = record.analysisResult return LoopInsightsMealEvent( date: event.date, foodType: event.foodType, @@ -81,7 +82,11 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { twoHourGlucose: event.twoHourGlucose, glucoseTimeline: event.glucoseTimeline, archiveRecordID: record.id, - thumbnailID: record.thumbnailID + thumbnailID: record.thumbnailID, + totalProtein: result?.totalProtein, + totalFat: result?.totalFat, + totalFiber: result?.totalFiber, + totalCalories: result?.totalCalories ) } @@ -93,18 +98,34 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { } guard !isDuplicate else { return nil } + let result = record.analysisResult return LoopInsightsMealEvent( date: record.date, foodType: record.foodType, carbs: record.carbsGrams, archiveRecordID: record.id, - thumbnailID: record.thumbnailID + thumbnailID: record.thumbnailID, + totalProtein: result?.totalProtein, + totalFat: result?.totalFat, + totalFiber: result?.totalFiber, + totalCalories: result?.totalCalories ) } - // Merge and sort by date (most recent first) - self.mealEvents = (glucoseMatchedEvents + archiveEvents) - .sorted { $0.date > $1.date } + // Merge, deduplicate, and sort by date (most recent first). + // Dedup by date proximity (5 min) + foodType — keeps the version with more data. + let merged = (glucoseMatchedEvents + archiveEvents).sorted { $0.date > $1.date } + var seen: [(date: Date, foodType: String)] = [] + let deduplicated = merged.filter { event in + let isDup = seen.contains { existing in + abs(existing.date.timeIntervalSince(event.date)) < 300 && + existing.foodType == event.foodType + } + guard !isDup else { return false } + seen.append((event.date, event.foodType)) + return true + } + self.mealEvents = deduplicated self.foodPatterns = patterns self.isLoading = false } catch { diff --git a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift index 526bd33e3e..6d5431396f 100644 --- a/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift +++ b/Loop/Views/LoopInsights/LoopInsights_MealInsightsView.swift @@ -139,6 +139,25 @@ struct LoopInsights_MealInsightsView: View { } } + // Nutritional breakdown (when available from FoodFinder analysis) + if event.hasNutritionalData { + HStack(spacing: 12) { + if let protein = event.totalProtein { + nutrientLabel("P", value: protein, unit: "g") + } + if let fat = event.totalFat { + nutrientLabel("F", value: fat, unit: "g") + } + if let fiber = event.totalFiber { + nutrientLabel("Fb", value: fiber, unit: "g") + } + if let cal = event.totalCalories { + nutrientLabel("Cal", value: cal, unit: "") + } + Spacer() + } + } + if event.hasGlucoseData, let preMeal = event.preMealGlucose, let peak = event.peakGlucose, @@ -225,6 +244,17 @@ struct LoopInsights_MealInsightsView: View { .cornerRadius(12) } + private func nutrientLabel(_ label: String, value: Double, unit: String) -> some View { + HStack(spacing: 2) { + Text(label) + .font(.caption2) + .foregroundColor(.secondary) + Text(String(format: "%.0f%@", value, unit)) + .font(.caption2.weight(.medium)) + .foregroundColor(.primary) + } + } + private func glucoseStatPill(label: String, value: String, color: Color) -> some View { VStack(spacing: 2) { Text(label) From f5ed8be0ad8ae6e3a9494bc3d8ba270683604a2a Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 20 Feb 2026 14:48:32 -0800 Subject: [PATCH 35/36] Rewrite Meal Insights to archive-first data flow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The dual-source merge (carb entries + archive records → fragile dedup) was the root cause of duplicate cards. Carb entries use emoji foodTypes while archive records have full names, so string-based matching failed. New approach: MealArchive is the single source of truth for FoodFinder meals. Build events from archive records first, attach glucose data by date+carbs matching, then append leftover carb-only entries (manual meals without FoodFinder). No merge step, no dedup step needed. --- .../LoopInsights_MealInsightsViewModel.swift | 115 +++++++++--------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift b/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift index 563a6d5fa6..ed29ab9fcd 100644 --- a/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift +++ b/Loop/View Models/LoopInsights/LoopInsights_MealInsightsViewModel.swift @@ -53,7 +53,8 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { let carbEntries = try await coordinator.fetchCarbEntries(start: startDate, end: endDate) let glucoseSamples = try await coordinator.fetchGlucoseSamples(start: startDate, end: endDate) - let rawGlucoseEvents = LoopInsights_FoodResponseAnalyzer.buildRecentMealEvents( + // Glucose events from carb entries (used for glucose timeline matching only) + let glucoseEvents = LoopInsights_FoodResponseAnalyzer.buildRecentMealEvents( carbEntries: carbEntries, glucoseSamples: glucoseSamples ) @@ -62,70 +63,68 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { glucoseSamples: glucoseSamples ) - // Load FoodFinder MealArchive to get thumbnails + meals without glucose data + // --- Archive-first approach --- + // MealArchive is the single source of truth for FoodFinder meals. + // It has the real food name, thumbnail, and nutritional data. + // We attach glucose data to archive records by date+carbs matching, + // then add carb-only entries (non-FoodFinder meals) separately. + let archiveMeals = MealArchive.meals(from: startDate, to: endDate) + var consumedGlucoseEventIndices = Set() + var events: [LoopInsightsMealEvent] = [] - // Enrich glucose-matched events with thumbnail + nutrition from MealArchive - let glucoseMatchedEvents = rawGlucoseEvents.map { event -> LoopInsightsMealEvent in - let matchingRecord = archiveMeals.first { record in - abs(record.date.timeIntervalSince(event.date)) < 300 && - record.foodType == event.foodType - } - guard let record = matchingRecord else { return event } + // 1. Build events from archive records, attaching glucose data when available + for record in archiveMeals { let result = record.analysisResult - return LoopInsightsMealEvent( - date: event.date, - foodType: event.foodType, - carbs: event.carbs, - preMealGlucose: event.preMealGlucose, - peakGlucose: event.peakGlucose, - twoHourGlucose: event.twoHourGlucose, - glucoseTimeline: event.glucoseTimeline, - archiveRecordID: record.id, - thumbnailID: record.thumbnailID, - totalProtein: result?.totalProtein, - totalFat: result?.totalFat, - totalFiber: result?.totalFiber, - totalCalories: result?.totalCalories - ) - } - // Archive-only meals (no glucose match yet) - let archiveEvents = archiveMeals.compactMap { record -> LoopInsightsMealEvent? in - let isDuplicate = glucoseMatchedEvents.contains { event in - abs(event.date.timeIntervalSince(record.date)) < 300 && - event.foodType == record.foodType + // Find the glucose event that matches this archive record + let matchIdx = glucoseEvents.indices.first { idx in + !consumedGlucoseEventIndices.contains(idx) && + abs(glucoseEvents[idx].date.timeIntervalSince(record.date)) < 300 && + abs(glucoseEvents[idx].carbs - record.carbsGrams) < 1 } - guard !isDuplicate else { return nil } - let result = record.analysisResult - return LoopInsightsMealEvent( - date: record.date, - foodType: record.foodType, - carbs: record.carbsGrams, - archiveRecordID: record.id, - thumbnailID: record.thumbnailID, - totalProtein: result?.totalProtein, - totalFat: result?.totalFat, - totalFiber: result?.totalFiber, - totalCalories: result?.totalCalories - ) + if let idx = matchIdx { + consumedGlucoseEventIndices.insert(idx) + let ge = glucoseEvents[idx] + events.append(LoopInsightsMealEvent( + date: ge.date, + foodType: record.foodType, + carbs: ge.carbs, + preMealGlucose: ge.preMealGlucose, + peakGlucose: ge.peakGlucose, + twoHourGlucose: ge.twoHourGlucose, + glucoseTimeline: ge.glucoseTimeline, + archiveRecordID: record.id, + thumbnailID: record.thumbnailID, + totalProtein: result?.totalProtein, + totalFat: result?.totalFat, + totalFiber: result?.totalFiber, + totalCalories: result?.totalCalories + )) + } else { + // No glucose match yet — show archive record without glucose data + events.append(LoopInsightsMealEvent( + date: record.date, + foodType: record.foodType, + carbs: record.carbsGrams, + archiveRecordID: record.id, + thumbnailID: record.thumbnailID, + totalProtein: result?.totalProtein, + totalFat: result?.totalFat, + totalFiber: result?.totalFiber, + totalCalories: result?.totalCalories + )) + } } - // Merge, deduplicate, and sort by date (most recent first). - // Dedup by date proximity (5 min) + foodType — keeps the version with more data. - let merged = (glucoseMatchedEvents + archiveEvents).sorted { $0.date > $1.date } - var seen: [(date: Date, foodType: String)] = [] - let deduplicated = merged.filter { event in - let isDup = seen.contains { existing in - abs(existing.date.timeIntervalSince(event.date)) < 300 && - existing.foodType == event.foodType - } - guard !isDup else { return false } - seen.append((event.date, event.foodType)) - return true + // 2. Add remaining glucose events that didn't match any archive record + // (these are manual carb entries without FoodFinder) + for (idx, ge) in glucoseEvents.enumerated() where !consumedGlucoseEventIndices.contains(idx) { + events.append(ge) } - self.mealEvents = deduplicated + + self.mealEvents = events.sorted { $0.date > $1.date } self.foodPatterns = patterns self.isLoading = false } catch { @@ -226,7 +225,7 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { // MARK: - Helpers /// Find the MealArchive record that matches this meal event. - /// Uses archiveRecordID if available, otherwise falls back to date proximity + foodType. + /// Uses archiveRecordID if available, otherwise falls back to date + carb proximity. private func findArchiveRecord(for event: LoopInsightsMealEvent) -> FoodFinder_AnalysisRecord? { if let recordID = event.archiveRecordID { return MealArchive.loadAll().first { $0.id == recordID } @@ -234,7 +233,7 @@ final class LoopInsights_MealInsightsViewModel: ObservableObject { let windowStart = event.date.addingTimeInterval(-300) // 5 min tolerance let windowEnd = event.date.addingTimeInterval(300) let candidates = MealArchive.meals(from: windowStart, to: windowEnd) - return candidates.first { $0.foodType == event.foodType } + return candidates.first { abs($0.carbsGrams - event.carbs) < 1 } ?? candidates.first // Fall back to closest match } } From 8259c0e3693c882c420922381364c3f24298e0fd Mon Sep 17 00:00:00 2001 From: Taylor Date: Fri, 20 Feb 2026 15:03:14 -0800 Subject: [PATCH 36/36] Deduplicate MealArchive at read time to collapse existing duplicates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit loadAll() now filters records by date+carbs proximity, collapsing duplicate entries that accumulated before the write-side guard. This is the single chokepoint — every consumer of archive data gets clean results regardless of what the JSON file contains. --- .../FoodFinder_AnalysisHistoryStore.swift | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift b/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift index 1bbaaddb59..1308f732b1 100644 --- a/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift +++ b/Loop/Services/FoodFinder/FoodFinder_AnalysisHistoryStore.swift @@ -167,11 +167,24 @@ enum MealArchive { .sorted { $0.date > $1.date } } - /// Load the complete archive (all time). + /// Load the complete archive (all time), deduplicating by date+carbs proximity. + /// Keeps the first record in each cluster (which has the earliest write and + /// typically the most complete data). This collapses duplicates that were + /// created before the write-side guard was added. static func loadAll() -> [FoodFinder_AnalysisRecord] { guard FileManager.default.fileExists(atPath: archiveURL.path) else { return [] } guard let data = try? Data(contentsOf: archiveURL) else { return [] } - return (try? JSONDecoder().decode([FoodFinder_AnalysisRecord].self, from: data)) ?? [] + let raw = (try? JSONDecoder().decode([FoodFinder_AnalysisRecord].self, from: data)) ?? [] + var seen: [(date: Date, carbs: Double)] = [] + return raw.filter { record in + let isDup = seen.contains { existing in + abs(existing.date.timeIntervalSince(record.date)) < 300 && + abs(existing.carbs - record.carbsGrams) < 1 + } + guard !isDup else { return false } + seen.append((record.date, record.carbsGrams)) + return true + } } /// Total archived meal count.