Merge remote-tracking branch 'origin/release/v1.46.0' into fix/status-parity-flake

This commit is contained in:
Marc-André Bombeck committed 2026-10-24 23:16:47 +02:00
commit 3984ceb01c
236 files changed
+2987 -277

No files matched your search

@@ -335,7 +335,7 @@
"reorderLeadDays": 3,
"externalSource": "WEB",
"externalId": "rt-Medication-externalId",
"updatedAt": "2026-05-01T11:51:00.000Z",
"updatedAt": "2026-05-01T11:52:00.000Z",
"categoryUpdatedAt": "2026-05-01T21:22:00.000Z",
"name": "Round-trip tablet",
"dose": "5 mg",
@@ -344,7 +344,7 @@
"autoMarkTaken": true,
"autoMarkTakenSince": "2026-06-30T12:34:56.789Z",
"category": "custom:5f0c6a52-6a43-4f63-9b39-0c1f4d7e2a10",
"createdAt": "2026-05-01T11:50:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"schedules": [
{
"id": "<id:7>",
@@ -428,18 +428,20 @@
{
"startsOn": "2026-03-01",
"endsOn": "2026-03-07",
"endedAt": null,
"note": null,
"noteEncrypted": "<sealed:v1:the March flu>",
"updatedAt": "2026-05-02T00:47:00.000Z",
"createdAt": "2026-05-02T00:46:00.000Z"
"updatedAt": "2026-05-02T00:48:00.000Z",
"createdAt": "2026-05-02T00:47:00.000Z"
},
{
"startsOn": "2026-06-10",
"endsOn": "2026-06-16",
"endedAt": "2026-06-16T09:30:00.000Z",
"note": null,
"noteEncrypted": null,
"updatedAt": "2026-05-02T00:47:01.000Z",
"createdAt": "2026-05-02T00:46:01.000Z"
"updatedAt": "2026-05-02T00:48:01.000Z",
"createdAt": "2026-05-02T00:47:01.000Z"
}
],
"doseChanges": [
@@ -2772,8 +2774,8 @@
"reorderLeadDays": 3,
"externalSource": "WEB",
"externalId": "rt-Medication-externalId",
"createdAt": "2026-05-01T11:50:00.000Z",
"updatedAt": "2026-05-01T11:51:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"updatedAt": "2026-05-01T11:52:00.000Z",
"schedules": [
{
"id": "<id:7>",
@@ -2995,18 +2997,20 @@
{
"startsOn": "2026-03-01",
"endsOn": "2026-03-07",
"endedAt": null,
"note": null,
"noteEncrypted": "<sealed:v1:the March flu>",
"createdAt": "2026-05-02T00:46:00.000Z",
"updatedAt": "2026-05-02T00:47:00.000Z"
"createdAt": "2026-05-02T00:47:00.000Z",
"updatedAt": "2026-05-02T00:48:00.000Z"
},
{
"startsOn": "2026-06-10",
"endsOn": "2026-06-16",
"endedAt": "2026-06-16T09:30:00.000Z",
"note": null,
"noteEncrypted": null,
"createdAt": "2026-05-02T00:46:01.000Z",
"updatedAt": "2026-05-02T00:47:01.000Z"
"createdAt": "2026-05-02T00:47:01.000Z",
"updatedAt": "2026-05-02T00:48:01.000Z"
}
]
}
@@ -199,7 +199,7 @@
"autoMarkTaken": true,
"autoMarkTakenSince": "2026-06-30T12:34:56.789Z",
"category": "custom:5f0c6a52-6a43-4f63-9b39-0c1f4d7e2a10",
"createdAt": "2026-05-01T11:50:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"schedules": [
{
"windowStart": "08:00",
@@ -250,14 +250,16 @@
{
"startsOn": "2026-03-01",
"endsOn": "2026-03-07",
"endedAt": null,
"note": "the March flu",
"createdAt": "2026-05-02T00:46:00.000Z"
"createdAt": "2026-05-02T00:47:00.000Z"
},
{
"startsOn": "2026-06-10",
"endsOn": "2026-06-16",
"endedAt": "2026-06-16T09:30:00.000Z",
"note": null,
"createdAt": "2026-05-02T00:46:01.000Z"
"createdAt": "2026-05-02T00:47:01.000Z"
}
],
"doseChanges": [
@@ -1850,7 +1852,7 @@
"autoMarkTaken": true,
"autoMarkTakenSince": "2026-06-30T12:34:56.789Z",
"category": "custom:5f0c6a52-6a43-4f63-9b39-0c1f4d7e2a10",
"createdAt": "2026-05-01T11:50:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"schedules": [
{
"windowStart": "08:00",
@@ -2022,14 +2024,16 @@
{
"startsOn": "2026-03-01",
"endsOn": "2026-03-07",
"endedAt": null,
"note": "the March flu",
"createdAt": "2026-05-02T00:46:00.000Z"
"createdAt": "2026-05-02T00:47:00.000Z"
},
{
"startsOn": "2026-06-10",
"endsOn": "2026-06-16",
"endedAt": "2026-06-16T09:30:00.000Z",
"note": null,
"createdAt": "2026-05-02T00:46:01.000Z"
"createdAt": "2026-05-02T00:47:01.000Z"
}
]
}
@@ -614,6 +614,7 @@
"snoozedUntil": "2026-06-30T12:34:56.789Z",
"startsOn": "2026-06-10T00:00:00.000Z",
"endsOn": "2026-06-16T00:00:00.000Z",
"endedAt": "2026-06-16T09:30:00.000Z",
"oneShot": true,
"asNeeded": true,
"trackIntake": false,
@@ -633,8 +634,8 @@
"reorderLeadDays": 3,
"externalSource": "WEB",
"externalId": "rt-Medication-externalId",
"createdAt": "2026-05-01T11:50:00.000Z",
"updatedAt": "2026-05-01T11:51:00.000Z"
"createdAt": "2026-05-01T11:51:00.000Z",
"updatedAt": "2026-05-01T11:52:00.000Z"
}
],
"MedicationSchedule": [
@@ -805,9 +806,10 @@
"userId": "round-trip-owner",
"startsOn": "2026-03-01T00:00:00.000Z",
"endsOn": "2026-03-07T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": "<sealed:v1:the March flu>",
"createdAt": "2026-05-02T00:46:00.000Z",
"updatedAt": "2026-05-02T00:47:00.000Z"
"createdAt": "2026-05-02T00:47:00.000Z",
"updatedAt": "2026-05-02T00:48:00.000Z"
},
{
"id": "<id:19>",
@@ -815,9 +817,10 @@
"userId": "round-trip-owner",
"startsOn": "2026-06-10T00:00:00.000Z",
"endsOn": "2026-06-16T00:00:00.000Z",
"endedAt": "2026-06-16T09:30:00.000Z",
"noteEncrypted": null,
"createdAt": "2026-05-02T00:46:01.000Z",
"updatedAt": "2026-05-02T00:47:01.000Z"
"createdAt": "2026-05-02T00:47:01.000Z",
"updatedAt": "2026-05-02T00:48:01.000Z"
}
],
"MedicationIngredient": [
@@ -3237,7 +3240,7 @@
"reorderLeadDays": 3,
"externalSource": "WEB",
"externalId": "rt-Medication-externalId",
"updatedAt": "2026-05-01T11:51:00.000Z",
"updatedAt": "2026-05-01T11:52:00.000Z",
"categoryUpdatedAt": "2026-05-01T21:22:00.000Z",
"name": "Round-trip tablet",
"dose": "5 mg",
@@ -3246,7 +3249,7 @@
"autoMarkTaken": true,
"autoMarkTakenSince": "<now>",
"category": "custom:5f0c6a52-6a43-4f63-9b39-0c1f4d7e2a10",
"createdAt": "2026-05-01T11:50:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"schedules": [
{
"id": "<id:7>",
@@ -3330,18 +3333,20 @@
{
"startsOn": "2026-03-01",
"endsOn": "2026-03-07",
"endedAt": null,
"note": null,
"noteEncrypted": "<sealed:v1:the March flu>",
"updatedAt": "2026-05-02T00:47:00.000Z",
"createdAt": "2026-05-02T00:46:00.000Z"
"updatedAt": "2026-05-02T00:48:00.000Z",
"createdAt": "2026-05-02T00:47:00.000Z"
},
{
"startsOn": "2026-06-10",
"endsOn": "2026-06-16",
"endedAt": "2026-06-16T09:30:00.000Z",
"note": null,
"noteEncrypted": null,
"updatedAt": "2026-05-02T00:47:01.000Z",
"createdAt": "2026-05-02T00:46:01.000Z"
"updatedAt": "2026-05-02T00:48:01.000Z",
"createdAt": "2026-05-02T00:47:01.000Z"
}
],
"doseChanges": [
@@ -681,6 +681,7 @@
"snoozedUntil": null,
"startsOn": "2026-06-10T00:00:00.000Z",
"endsOn": "2026-06-16T00:00:00.000Z",
"endedAt": "2026-06-16T09:30:00.000Z",
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -698,7 +699,7 @@
"reorderLeadDays": null,
"externalSource": null,
"externalId": null,
"createdAt": "2026-05-01T11:50:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"updatedAt": "<now>"
}
],
@@ -843,8 +844,9 @@
"userId": "round-trip-owner",
"startsOn": "2026-03-01T00:00:00.000Z",
"endsOn": "2026-03-07T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": "<sealed:v2:the March flu>",
"createdAt": "2026-05-02T00:46:00.000Z",
"createdAt": "2026-05-02T00:47:00.000Z",
"updatedAt": "<now>"
},
{
@@ -853,8 +855,9 @@
"userId": "round-trip-owner",
"startsOn": "2026-06-10T00:00:00.000Z",
"endsOn": "2026-06-16T00:00:00.000Z",
"endedAt": "2026-06-16T09:30:00.000Z",
"noteEncrypted": null,
"createdAt": "2026-05-02T00:46:01.000Z",
"createdAt": "2026-05-02T00:47:01.000Z",
"updatedAt": "<now>"
}
],
@@ -2596,7 +2599,7 @@
"autoMarkTaken": true,
"autoMarkTakenSince": "<now>",
"category": "custom:5f0c6a52-6a43-4f63-9b39-0c1f4d7e2a10",
"createdAt": "2026-05-01T11:50:00.000Z",
"createdAt": "2026-05-01T11:51:00.000Z",
"schedules": [
{
"windowStart": "08:00",
@@ -2647,14 +2650,16 @@
{
"startsOn": "2026-03-01",
"endsOn": "2026-03-07",
"endedAt": null,
"note": "the March flu",
"createdAt": "2026-05-02T00:46:00.000Z"
"createdAt": "2026-05-02T00:47:00.000Z"
},
{
"startsOn": "2026-06-10",
"endsOn": "2026-06-16",
"endedAt": "2026-06-16T09:30:00.000Z",
"note": null,
"createdAt": "2026-05-02T00:46:01.000Z"
"createdAt": "2026-05-02T00:47:01.000Z"
}
],
"doseChanges": [
@@ -570,6 +570,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -521,6 +521,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -555,6 +556,7 @@
"snoozedUntil": null,
"startsOn": "2026-07-01T00:00:00.000Z",
"endsOn": "2026-08-01T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -652,6 +654,7 @@
"userId": "round-trip-owner",
"startsOn": "2026-07-01T00:00:00.000Z",
"endsOn": "2026-08-01T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<now>",
"updatedAt": "<now>"
@@ -1480,6 +1483,7 @@
{
"startsOn": "2026-07-01",
"endsOn": "2026-08-01",
"endedAt": null,
"note": null,
"noteEncrypted": null,
"updatedAt": "<now>",
@@ -212,6 +212,7 @@
"snoozedUntil": "2026-06-30T12:34:56.789Z",
"startsOn": "2026-06-10T00:00:00.000Z",
"endsOn": "2026-06-16T00:00:00.000Z",
"endedAt": "2026-06-16T09:30:00.000Z",
"oneShot": true,
"asNeeded": true,
"trackIntake": false,
@@ -231,8 +232,8 @@
"reorderLeadDays": 3,
"externalSource": "WEB",
"externalId": "rt-Medication-externalId",
"createdAt": "2026-05-01T11:50:00.000Z",
"updatedAt": "2026-05-01T11:51:00.000Z"
"createdAt": "2026-05-01T11:51:00.000Z",
"updatedAt": "2026-05-01T11:52:00.000Z"
}
],
"MedicationSchedule": [
@@ -403,9 +404,10 @@
"userId": "round-trip-owner",
"startsOn": "2026-03-01T00:00:00.000Z",
"endsOn": "2026-03-07T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": "<sealed:v1:the March flu>",
"createdAt": "2026-05-02T00:46:00.000Z",
"updatedAt": "2026-05-02T00:47:00.000Z"
"createdAt": "2026-05-02T00:47:00.000Z",
"updatedAt": "2026-05-02T00:48:00.000Z"
},
{
"id": "<id:19>",
@@ -413,9 +415,10 @@
"userId": "round-trip-owner",
"startsOn": "2026-06-10T00:00:00.000Z",
"endsOn": "2026-06-16T00:00:00.000Z",
"endedAt": "2026-06-16T09:30:00.000Z",
"noteEncrypted": null,
"createdAt": "2026-05-02T00:46:01.000Z",
"updatedAt": "2026-05-02T00:47:01.000Z"
"createdAt": "2026-05-02T00:47:01.000Z",
"updatedAt": "2026-05-02T00:48:01.000Z"
}
],
"MedicationIngredient": [
+5 -1
View File
@@ -190,7 +190,9 @@ export async function seedEveryTwoEndedModel(
});
// Two courses with a gap, and the window the row projects from them (the
// latest). The earlier course exists nowhere else once it has ended.
// latest). The earlier course exists nowhere else once it has ended. The
// latest was ended with "End course" (#1280), so the instant has to come
// back with it.
const medication = await prisma.medication.create({
data: {
userId: OWNER_ID,
@@ -198,6 +200,7 @@ export async function seedEveryTwoEndedModel(
dose: "5 mg",
startsOn: AT("2026-06-10T00:00:00.000Z"),
endsOn: AT("2026-06-16T00:00:00.000Z"),
endedAt: AT("2026-06-16T09:30:00.000Z"),
schedules: {
create: { windowStart: "08:00", windowEnd: "09:00", label: "Morning" },
},
@@ -213,6 +216,7 @@ export async function seedEveryTwoEndedModel(
userId: OWNER_ID,
startsOn: AT("2026-06-10T00:00:00.000Z"),
endsOn: AT("2026-06-16T00:00:00.000Z"),
endedAt: AT("2026-06-16T09:30:00.000Z"),
},
],
},
+31
View File
@@ -708,6 +708,37 @@ export async function seedContractAccount(
});
if (ingested.kind === "stored") ids.document = ingested.document.id;
else failures.push(`document: ingest answered ${ingested.kind}`);
// A second document, deleted the way the delete route tombstones one, so
// Recently deleted answers with a row.
const deleted = await ingestDocument({
userId: CONTRACT_USER_ID,
scoped: false,
ipAddress: null,
bytes: Buffer.concat([pdf, Buffer.from("% deleted\n")]),
filename: "deleted.pdf",
title: "Deleted letter",
kind: null,
documentDate: dayKey(daysAgo(12)),
episodeIds: [],
encounterIds: [],
sourceSystem: null,
sourceId: null,
sourceInstance: null,
aiDeferred: true,
sourceKeyChecked: false,
limits: { maxFileBytes: 10 * 1024 * 1024, quotaBytes: 100 * 1024 * 1024 },
documentAi: async () => ({
available: false,
reason: "no_provider",
onDeviceAllowed: false,
}),
});
if (deleted.kind === "stored") {
await prisma.inboundDocument.update({
where: { id: deleted.document.id },
data: { deletedAt: daysAgo(2) },
});
} else failures.push(`deleted document: ingest answered ${deleted.kind}`);
// A chat about that document, as the document sheet starts one.
if (ids.document) {
const documentChat = await createConversation({
@@ -217,6 +217,7 @@ async function readDisplayDue(medId: string, now: Date): Promise<Date | null> {
id: med.id,
startsOn: med.startsOn,
endsOn: med.endsOn,
endedAt: null,
oneShot: med.oneShot,
createdAt: med.createdAt,
},
@@ -585,6 +585,7 @@ describe("remindersActive — the published value is the gate", () => {
trackIntake: boolean;
asNeeded: boolean;
endsOn: Date | null;
endedAt: Date | null;
}> = [];
for (let bits = 0; bits < 64; bits++) {
combos.push({
@@ -595,6 +596,7 @@ describe("remindersActive — the published value is the gate", () => {
asNeeded: (bits & 16) !== 0,
// A course that ended the day before.
endsOn: (bits & 32) !== 0 ? new Date("2026-06-09T00:00:00.000Z") : null,
endedAt: null,
});
}
const ids: string[] = [];
@@ -0,0 +1,488 @@
/**
* "End course" (#1280) against a real Postgres, through the shipped routes,
* the reminder worker, the today projector and the auto-miss pass.
*
* What the file pins:
* - the medication's PUT takes `endsOn` as a date (the request the End
* button used to send as a full instant was refused with 422), and an
* end date set that way keeps meaning the whole day;
* - `POST /courses/end` ends the running course at that moment: the last
* day is today on the person's clock and `endedAt` the instant, and the
* reads serve it ENDED with `canEndCourse` false at once;
* - a dose slot later that day is not due (no placeholder on the today
* list), not reminded and never missed, while a dose taken earlier that
* day still counts in compliance;
* - `canEndCourse` is true only while a course runs, and the action refuses
* an ended or upcoming course with 409;
* - an edit that moves the end clears the instant.
*
* The person lives in Europe/Berlin (UTC+2 in June). The medication doses at
* 08:00 and 20:00 local, 06:00Z and 18:00Z.
*/
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { NextRequest } from "next/server";
import { cookieJar, headerJar } from "./mock-next-headers";
import { getPrismaClient, truncateAllTables } from "./setup";
vi.mock("next/headers", async () => {
const { cookieJar, headerJar } = await import("./mock-next-headers");
return {
headers: vi.fn(async () => ({
get: (name: string) => headerJar.get(name.toLowerCase()) ?? null,
})),
cookies: vi.fn(async () => ({
get: (name: string) => {
const value = cookieJar.get(name);
return value ? { name, value } : undefined;
},
set: (name: string, value: string) => cookieJar.set(name, value),
delete: (name: string) => cookieJar.delete(name),
})),
};
});
vi.mock("@/lib/db-compat", () => ({
ensureDbCompatibility: vi.fn().mockResolvedValue(undefined),
}));
vi.mock("@/lib/notifications/dispatcher", () => ({
dispatchNotification: vi.fn().mockResolvedValue({
dispatched: true,
channelsAttempted: 1,
channelsSucceeded: 1,
}),
}));
vi.mock("@/lib/notifications/medication-intake-sync", () => ({
queueMedicationIntakeSync: vi.fn(),
}));
const { dispatchNotification } = await import("@/lib/notifications/dispatcher");
const { runIntakeAutoSkipPass } = await import("@/lib/jobs/intake-auto-skip");
const { handleReminderCheck } =
await import("@/lib/jobs/reminder/medication-reminder-check");
const TZ = "Europe/Berlin";
const MORNING = "2026-06-10T06:00:00.000Z";
const EVENING = "2026-06-10T18:00:00.000Z";
const ENDED_AT = "2026-06-10T10:00:00.000Z";
type Handler = (
request: NextRequest,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
context: { params: Promise<any> },
) => Promise<Response>;
function at(iso: string): void {
vi.setSystemTime(new Date(iso));
}
function req(method: string, path: string, body?: unknown) {
return new NextRequest(`http://localhost${path}`, {
method,
headers: { "content-type": "application/json" },
...(body === undefined ? {} : { body: JSON.stringify(body) }),
});
}
async function call(
modulePath: string,
method: "GET" | "POST" | "PUT" | "PATCH",
path: string,
params: Record<string, string>,
body?: unknown,
) {
const route = (await import(/* @vite-ignore */ modulePath)) as Record<
string,
Handler
>;
const res = await route[method](req(method, path, body), {
params: Promise.resolve(params),
});
return { status: res.status, body: await res.json() };
}
const endCourse = (id: string) =>
call(
"@/app/api/medications/[id]/courses/end/route",
"POST",
`/api/medications/${id}/courses/end`,
{ id },
);
const putMedication = (id: string, body: unknown) =>
call(
"@/app/api/medications/[id]/route",
"PUT",
`/api/medications/${id}`,
{ id },
body,
);
const detail = async (id: string) =>
(
await call(
"@/app/api/medications/[id]/route",
"GET",
`/api/medications/${id}`,
{ id },
)
).body.data;
async function makeUser(): Promise<string> {
const prisma = getPrismaClient();
const user = await prisma.user.create({
data: {
username: "course-end",
email: "course-end@example.test",
timezone: TZ,
locale: "en",
},
});
const session = await prisma.session.create({
data: {
userId: user.id,
expiresAt: new Date("2030-01-01T00:00:00.000Z"),
},
});
cookieJar.set("healthlog_session", session.id);
return user.id;
}
/** Twice a day, 08:00 and 20:00, created early on the 10th. */
async function seedTwiceDaily(
userId: string,
window: { startsOn?: Date; endsOn?: Date } = {},
): Promise<string> {
const medication = await getPrismaClient().medication.create({
data: {
userId,
name: "Amoxicillin",
dose: "500 mg",
createdAt: new Date("2026-06-10T03:00:00.000Z"),
notificationsEnabled: true,
...window,
schedules: {
create: {
windowStart: "08:00",
windowEnd: "08:00",
timesOfDay: ["08:00", "20:00"],
rrule: "FREQ=DAILY",
scheduleType: "SCHEDULED",
},
},
},
select: { id: true },
});
return medication.id;
}
async function takeMorningDose(userId: string, medicationId: string) {
await getPrismaClient().medicationIntakeEvent.create({
data: {
userId,
medicationId,
scheduledFor: new Date(MORNING),
takenAt: new Date("2026-06-10T06:10:00.000Z"),
source: "WEB",
},
});
}
async function liveRowsOn(medicationId: string, scheduledFor: string) {
return getPrismaClient().medicationIntakeEvent.findMany({
where: {
medicationId,
deletedAt: null,
scheduledFor: new Date(scheduledFor),
},
});
}
function dispatchedFor(medicationId: string): number {
return vi
.mocked(dispatchNotification)
.mock.calls.filter(
([arg]) =>
(arg as { metadata?: { medicationId?: string } }).metadata
?.medicationId === medicationId,
).length;
}
beforeEach(async () => {
vi.useFakeTimers({ toFake: ["Date"] });
vi.mocked(dispatchNotification).mockClear();
cookieJar.clear();
headerJar.clear();
await truncateAllTables(getPrismaClient());
});
afterEach(() => {
vi.useRealTimers();
});
describe("the medication PUT takes the end as a date (#1280)", () => {
it("answers 200 for a date and 422 for the full instant the button used to send", async () => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
const instant = await putMedication(id, { endsOn: ENDED_AT });
expect(instant.status).toBe(422);
const date = await putMedication(id, { endsOn: "2026-06-10" });
expect(date.status, JSON.stringify(date.body)).toBe(200);
// An end date written this way is the whole day: still running, still
// offering End, no instant recorded.
const read = await detail(id);
expect(read.courseStatus).toBe("CURRENT");
expect(read.canEndCourse).toBe(true);
expect(read.endedAt).toBeNull();
expect(read.courses[0]).toMatchObject({
endsOn: "2026-06-10",
endedAt: null,
});
});
});
describe("POST /courses/end ends the course now", () => {
it("records today and the instant, and the reads serve it ended at once", async () => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
expect((await detail(id)).canEndCourse).toBe(true);
const res = await endCourse(id);
expect(res.status, JSON.stringify(res.body)).toBe(200);
expect(res.body.data).toEqual({
startsOn: "2026-06-10",
endsOn: "2026-06-10",
endedAt: ENDED_AT,
});
const course = await getPrismaClient().medicationCourse.findFirstOrThrow({
where: { medicationId: id },
});
expect(course.endedAt?.toISOString()).toBe(ENDED_AT);
const read = await detail(id);
expect(read).toMatchObject({
endedAt: ENDED_AT,
courseStatus: "ENDED",
canEndCourse: false,
intakeActionable: false,
remindersActive: false,
canStartCourse: true,
});
expect(read.courses[0]).toMatchObject({
status: "ENDED",
endsOn: "2026-06-10",
endedAt: ENDED_AT,
});
// A second press finds nothing running.
const again = await endCourse(id);
expect(again.status).toBe(409);
expect(again.body.meta.errorCode).toBe("medications.course.notRunning");
});
it("drops the evening dose: not listed, not reminded, never missed", async () => {
at("2026-06-10T09:00:00.000Z");
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
// The today list mints both placeholders before the course is ended.
const today = () =>
call(
"@/app/api/medications/intake/route",
"GET",
"/api/medications/intake?scope=today",
{},
);
expect((await today()).status).toBe(200);
expect(await liveRowsOn(id, EVENING)).toHaveLength(1);
at(ENDED_AT);
expect((await endCourse(id)).status).toBe(200);
expect(await liveRowsOn(id, EVENING)).toHaveLength(0);
// The today list does not bring it back.
at("2026-06-10T12:00:00.000Z");
expect((await today()).status).toBe(200);
expect(await liveRowsOn(id, EVENING)).toHaveLength(0);
// Through the evening window and its follow-ups: no reminder, no
// missed-dose placeholder.
for (const tick of [
"2026-06-10T18:00:00.000Z",
"2026-06-10T18:45:00.000Z",
"2026-06-10T19:30:00.000Z",
"2026-06-10T21:00:00.000Z",
]) {
at(tick);
await handleReminderCheck([]);
}
expect(dispatchedFor(id)).toBe(0);
expect(await liveRowsOn(id, EVENING)).toHaveLength(0);
// Two days on, the auto-miss pass stamps the morning dose, which fell
// due while the course ran and was never taken, and nothing after the
// end.
await runIntakeAutoSkipPass(getPrismaClient(), {
nowMs: Date.parse("2026-06-12T12:00:00.000Z"),
});
const missed = await getPrismaClient().medicationIntakeEvent.findMany({
where: { medicationId: id, autoMissed: true },
select: { scheduledFor: true },
});
expect(missed.map((r) => r.scheduledFor.toISOString())).toEqual([MORNING]);
});
it("lists no evening dose when the day's list is first read after the end", async () => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
expect((await endCourse(id)).status).toBe(200);
const today = await call(
"@/app/api/medications/intake/route",
"GET",
"/api/medications/intake?scope=today",
{},
);
expect(today.status).toBe(200);
expect(await liveRowsOn(id, MORNING)).toHaveLength(1);
expect(await liveRowsOn(id, EVENING)).toHaveLength(0);
});
it("keeps the morning dose taken before the end in compliance", async () => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
await takeMorningDose(userId, id);
expect((await endCourse(id)).status).toBe(200);
at("2026-06-11T08:00:00.000Z");
const compliance = await call(
"@/app/api/medications/[id]/compliance/route",
"GET",
`/api/medications/${id}/compliance`,
{ id },
);
expect(compliance.status).toBe(200);
expect(compliance.body.data.compliance7).toMatchObject({
totalExpected: 1,
taken: 1,
missed: 0,
rate: 100,
});
const history = await call(
"@/app/api/medications/[id]/dose-history/route",
"GET",
`/api/medications/${id}/dose-history?from=2026-06-10T00:00:00.000Z`,
{ id },
);
expect(history.status).toBe(200);
const slots = (
history.body.data.rows as Array<{
kind: string;
at: string;
status: string;
}>
).filter((r) => r.kind === "slot");
expect(slots.map((r) => [r.at, r.status])).toEqual([
[MORNING, "taken_on_time"],
]);
});
it("ends a medication without dates from its creation day", async () => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
expect(
await getPrismaClient().medicationCourse.count({
where: { medicationId: id },
}),
).toBe(0);
expect((await endCourse(id)).status).toBe(200);
const row = await getPrismaClient().medication.findUniqueOrThrow({
where: { id },
select: { startsOn: true, endsOn: true, endedAt: true },
});
expect(row.startsOn?.toISOString().slice(0, 10)).toBe("2026-06-10");
expect(row.endsOn?.toISOString().slice(0, 10)).toBe("2026-06-10");
expect(row.endedAt?.toISOString()).toBe(ENDED_AT);
});
});
describe("canEndCourse follows the course", () => {
it.each([
["running (no dates)", {}, true],
[
"running (dated)",
{ startsOn: new Date("2026-06-01T00:00:00.000Z") },
true,
],
["upcoming", { startsOn: new Date("2026-06-20T00:00:00.000Z") }, false],
[
"ended",
{
startsOn: new Date("2026-05-01T00:00:00.000Z"),
endsOn: new Date("2026-05-31T00:00:00.000Z"),
},
false,
],
] as const)("%s → %s", async (_label, window, expected) => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId, window);
expect((await detail(id)).canEndCourse).toBe(expected);
const list = await call(
"@/app/api/medications/route",
"GET",
"/api/medications",
{},
);
const entry = (
list.body.data as Array<{ id: string; canEndCourse: boolean }>
).find((m) => m.id === id);
expect(entry?.canEndCourse).toBe(expected);
const res = await endCourse(id);
expect(res.status).toBe(expected ? 200 : 409);
});
});
describe("an edit that moves the end clears the instant", () => {
it("reopens the course to the end of its new last day", async () => {
at(ENDED_AT);
const userId = await makeUser();
const id = await seedTwiceDaily(userId);
expect((await endCourse(id)).status).toBe(200);
const course = await getPrismaClient().medicationCourse.findFirstOrThrow({
where: { medicationId: id },
});
// Same last day, only the note: the instant stays.
const note = await call(
"@/app/api/medications/[id]/courses/[courseId]/route",
"PATCH",
`/api/medications/${id}/courses/${course.id}`,
{ id, courseId: course.id },
{ note: "Stopped after the morning dose" },
);
expect(note.status, JSON.stringify(note.body)).toBe(200);
expect((await detail(id)).endedAt).toBe(ENDED_AT);
// A later last day: a whole-day end again, running once more.
const moved = await call(
"@/app/api/medications/[id]/courses/[courseId]/route",
"PATCH",
`/api/medications/${id}/courses/${course.id}`,
{ id, courseId: course.id },
{ endsOn: "2026-06-12" },
);
expect(moved.status, JSON.stringify(moved.body)).toBe(200);
const read = await detail(id);
expect(read).toMatchObject({
endedAt: null,
courseStatus: "CURRENT",
canEndCourse: true,
});
});
});
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": 3,
"stockDosesRemaining": 3,
"runwayDays": 21,
@@ -116,6 +118,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -150,6 +153,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -184,6 +188,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -218,6 +223,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -252,6 +258,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -286,6 +293,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -320,6 +328,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -492,6 +501,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -502,6 +512,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -89,6 +90,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -127,6 +129,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -161,6 +164,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -195,6 +199,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -229,6 +234,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -263,6 +269,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -297,6 +304,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -331,6 +339,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -503,6 +512,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -513,6 +523,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -69,6 +70,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": false,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -107,6 +109,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -141,6 +144,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -175,6 +179,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -209,6 +214,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -243,6 +249,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -277,6 +284,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -311,6 +319,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -483,6 +492,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -493,6 +503,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -410,6 +417,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -420,6 +428,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": 3,
"stockDosesRemaining": 3,
"runwayDays": 21,
@@ -116,6 +118,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -150,6 +153,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -184,6 +188,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -218,6 +223,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -252,6 +258,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -286,6 +293,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -320,6 +328,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -492,6 +501,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -502,6 +512,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -105,6 +107,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -139,6 +142,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -173,6 +177,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -207,6 +212,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -241,6 +247,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -413,6 +420,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -423,6 +431,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -89,6 +90,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -127,6 +129,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -161,6 +164,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -195,6 +199,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -229,6 +234,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -263,6 +269,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -297,6 +304,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -331,6 +339,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -503,6 +512,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -513,6 +523,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -135,6 +137,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -169,6 +172,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -203,6 +207,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -237,6 +242,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -271,6 +277,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -305,6 +312,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -339,6 +347,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -563,6 +572,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -573,6 +583,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -561,6 +570,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -571,6 +581,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -561,6 +570,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -571,6 +581,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": false,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -570,6 +579,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -580,6 +590,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -570,6 +579,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -580,6 +590,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -570,6 +579,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -580,6 +590,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -570,6 +579,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -580,6 +590,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -135,6 +137,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -169,6 +172,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -203,6 +207,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -237,6 +242,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -271,6 +277,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -305,6 +312,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -339,6 +347,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -572,6 +581,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -582,6 +592,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -570,6 +579,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -580,6 +590,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -471,6 +478,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -481,6 +489,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -69,6 +70,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": false,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -111,6 +113,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -145,6 +148,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -179,6 +183,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -213,6 +218,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -247,6 +253,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -281,6 +288,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -315,6 +323,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -548,6 +557,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -558,6 +568,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -109,6 +111,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -143,6 +146,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -177,6 +181,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -211,6 +216,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -245,6 +251,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -279,6 +286,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -313,6 +321,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -556,6 +565,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -566,6 +576,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -69,6 +70,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": false,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -110,6 +112,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -144,6 +147,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -178,6 +182,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -212,6 +217,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -246,6 +252,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -280,6 +287,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -314,6 +322,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -585,6 +594,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -595,6 +605,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -509,6 +516,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -519,6 +527,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -108,6 +110,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -142,6 +145,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -176,6 +180,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -210,6 +215,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -244,6 +250,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -278,6 +285,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -312,6 +320,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -613,6 +622,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -623,6 +633,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -539,6 +546,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -549,6 +557,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -46,6 +47,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -86,6 +88,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -120,6 +123,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -154,6 +158,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -188,6 +193,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -222,6 +228,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -256,6 +263,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -290,6 +298,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -599,6 +608,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -609,6 +619,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -547,6 +554,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -557,6 +565,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -547,6 +554,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -557,6 +565,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -64,6 +65,7 @@
"id": "<id:4>",
"startsOn": "2026-10-20",
"endsOn": "2026-10-20",
"endedAt": null,
"status": "UPCOMING",
"takenDoses": 0,
"note": null
@@ -77,6 +79,7 @@
"nextDueOverdue": false,
"courseStatus": "UPCOMING",
"intakeActionable": false,
"canEndCourse": false,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -117,6 +120,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -151,6 +155,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -185,6 +190,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -219,6 +225,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -253,6 +260,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -287,6 +295,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -321,6 +330,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -658,6 +668,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -668,6 +679,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -678,6 +690,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -575,6 +582,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -585,6 +593,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -595,6 +604,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -575,6 +582,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -585,6 +593,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -595,6 +604,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -64,6 +65,7 @@
"id": "<id:4>",
"startsOn": "2026-08-01",
"endsOn": "2026-08-31",
"endedAt": null,
"status": "ENDED",
"takenDoses": 0,
"note": null
@@ -72,6 +74,7 @@
"id": "<id:5>",
"startsOn": "2026-10-01",
"endsOn": "2026-12-31",
"endedAt": null,
"status": "CURRENT",
"takenDoses": 0,
"note": null
@@ -85,6 +88,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -123,6 +127,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -157,6 +162,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -191,6 +197,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -225,6 +232,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -259,6 +267,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -293,6 +302,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -327,6 +337,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -664,6 +675,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -674,6 +686,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -684,6 +697,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": 3,
"stockDosesRemaining": 1,
"runwayDays": 10,
@@ -123,6 +125,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -157,6 +160,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -191,6 +195,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -225,6 +230,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -259,6 +265,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -293,6 +300,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -327,6 +335,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -664,6 +673,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -674,6 +684,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -684,6 +695,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -53,6 +53,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -87,6 +88,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -121,6 +123,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -155,6 +158,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -189,6 +193,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -223,6 +228,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -257,6 +263,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -594,6 +601,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -604,6 +612,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -614,6 +623,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -238,6 +244,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -575,6 +582,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -585,6 +593,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -595,6 +604,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -107,6 +109,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -141,6 +144,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -175,6 +179,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -209,6 +214,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -243,6 +249,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -580,6 +587,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -590,6 +598,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -600,6 +609,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -15,6 +15,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -95,6 +96,7 @@
"nextDueOverdue": false,
"courseStatus": "CURRENT",
"intakeActionable": true,
"canEndCourse": true,
"stockUnitsRemaining": null,
"stockDosesRemaining": null,
"runwayDays": null,
@@ -133,6 +135,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -167,6 +170,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -201,6 +205,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -235,6 +240,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -269,6 +275,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -303,6 +310,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -337,6 +345,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -674,6 +683,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -684,6 +694,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -694,6 +705,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -105,6 +107,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -139,6 +142,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -173,6 +177,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -207,6 +212,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -241,6 +247,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -578,6 +585,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -588,6 +596,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -598,6 +607,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -43,6 +43,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -77,6 +78,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -111,6 +113,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -145,6 +148,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -179,6 +183,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -213,6 +218,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -530,6 +536,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -540,6 +547,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -550,6 +558,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -102,6 +104,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -136,6 +139,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -170,6 +174,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -204,6 +209,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -521,6 +527,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -531,6 +538,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -541,6 +549,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -107,6 +109,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -141,6 +144,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -175,6 +179,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -209,6 +214,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -526,6 +532,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -536,6 +543,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -546,6 +554,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -105,6 +107,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -139,6 +142,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -173,6 +177,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -207,6 +212,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -524,6 +530,7 @@
"userId": "<id:2>",
"startsOn": "2026-08-01T00:00:00.000Z",
"endsOn": "2026-08-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -534,6 +541,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": "2026-12-31T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -544,6 +552,7 @@
"userId": "<id:2>",
"startsOn": "2026-10-20T00:00:00.000Z",
"endsOn": "2026-10-20T00:00:00.000Z",
"endedAt": null,
"noteEncrypted": null,
"createdAt": "<createdAt>",
"updatedAt": "<updatedAt>"
@@ -231,6 +231,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -265,6 +266,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -302,6 +304,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -336,6 +339,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -219,6 +219,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -253,6 +254,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -290,6 +292,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -324,6 +327,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -90,6 +90,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -124,6 +125,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -161,6 +163,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -195,6 +198,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -89,6 +89,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -123,6 +124,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -160,6 +162,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -194,6 +197,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -36,6 +36,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -70,6 +71,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -107,6 +109,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -141,6 +144,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -54,6 +54,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -88,6 +89,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -125,6 +127,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -159,6 +162,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -36,6 +36,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -70,6 +71,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -107,6 +109,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -141,6 +144,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -92,6 +92,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -126,6 +127,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -163,6 +165,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -197,6 +200,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -108,6 +110,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -142,6 +145,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -110,6 +112,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -144,6 +147,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": true,
"trackIntake": true,
@@ -108,6 +110,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -142,6 +145,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +71,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -105,6 +106,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -75,6 +75,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -109,6 +110,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -66,6 +66,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +101,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -66,6 +66,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +101,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -66,6 +66,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +101,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -66,6 +66,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +101,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -55,6 +55,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -89,6 +90,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -66,6 +66,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +101,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -48,6 +48,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -82,6 +83,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -47,6 +47,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -81,6 +82,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -68,6 +69,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +74,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -48,6 +48,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -82,6 +83,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": true,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -85,6 +85,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -122,6 +123,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -156,6 +158,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -190,6 +193,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +73,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -110,6 +111,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -144,6 +146,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -178,6 +181,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -73,6 +73,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -110,6 +111,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -144,6 +146,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -178,6 +181,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -53,6 +53,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -90,6 +91,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -124,6 +126,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -158,6 +161,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -85,6 +85,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -122,6 +123,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -156,6 +158,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -190,6 +193,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -37,6 +37,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -74,6 +75,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -108,6 +110,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -142,6 +145,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +100,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -137,6 +138,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -171,6 +173,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -205,6 +208,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +100,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -137,6 +138,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -171,6 +173,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -205,6 +208,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -100,6 +100,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -137,6 +138,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -171,6 +173,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -205,6 +208,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -39,6 +39,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -76,6 +77,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -110,6 +112,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -144,6 +147,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -94,6 +94,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -131,6 +132,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -165,6 +167,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -199,6 +202,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -76,6 +76,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -113,6 +114,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -147,6 +149,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -181,6 +184,7 @@
"snoozedUntil": "2026-10-15T13:00:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -76,6 +76,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -113,6 +114,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -147,6 +149,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -181,6 +184,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -105,6 +107,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -139,6 +142,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -105,6 +107,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -139,6 +142,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -34,6 +34,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -71,6 +72,7 @@
"snoozedUntil": null,
"startsOn": null,
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": false,
@@ -105,6 +107,7 @@
"snoozedUntil": null,
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
@@ -139,6 +142,7 @@
"snoozedUntil": "2026-10-15T12:30:00.000Z",
"startsOn": "2026-10-01T00:00:00.000Z",
"endsOn": null,
"endedAt": null,
"oneShot": false,
"asNeeded": false,
"trackIntake": true,
Loaded 100 of 236 files, more files were not shown because too many files have changed in this diff. Show more