fix(reminders): an ended course reads as not reminding

The worker expands no slot past endsOn, so it never reminds for a
course that has ended, but remindersActive still read true for it. The
reminder gate now includes the course end on the person's clock, so the
published value, the worker and the admin check make the same decision.
This commit is contained in:
Marc-André Bombeck committed 2026-10-11 15:16:54 +02:00
1 parent 1ba422b87c
commit 24f06884b3
9 files changed
+142 -29

No files matched your search

+9 -8
View File
@@ -47714,10 +47714,10 @@ components:
remindersActive:
type: boolean
description: "v1.42.2 — whether the server sends dose reminders for this medication: true only when
`notificationsEnabled` is on, the medication is `active`, its intake is tracked (`trackIntake`), it is not
`asNeeded`, and `autoMarkTaken` is off. The same decision gates every server-side reminder send. A client
that arms local reminders arms them from this, not from `notificationsEnabled`. Read-only — computed, not
stored."
`notificationsEnabled` is on, the medication is `active`, its course has not ended (`endsOn` is today or
later on the person's clock, or unset), its intake is tracked (`trackIntake`), it is not `asNeeded`, and
`autoMarkTaken` is off. The same decision gates every server-side reminder send. A client that arms local
reminders arms them from this, not from `notificationsEnabled`. Read-only — computed, not stored."
nextDueAt:
anyOf:
- type: string
@@ -83031,10 +83031,11 @@ components:
- type: "null"
remindersActive:
description: "Present on the READ paths only (list and single GET). v1.42.2 — whether the server sends dose reminders
for this medication: true only when `notificationsEnabled` is on, the medication is `active`, its intake is
tracked (`trackIntake`), it is not `asNeeded`, and `autoMarkTaken` is off. The same decision gates every
server-side reminder send. A client that arms local reminders arms them from this, not from
`notificationsEnabled`. Read-only — computed, not stored."
for this medication: true only when `notificationsEnabled` is on, the medication is `active`, its course has
not ended (`endsOn` is today or later on the person's clock, or unset), its intake is tracked
(`trackIntake`), it is not `asNeeded`, and `autoMarkTaken` is off. The same decision gates every server-side
reminder send. A client that arms local reminders arms them from this, not from `notificationsEnabled`.
Read-only — computed, not stored."
type: boolean
nextDueAt:
description: "Present on the READ paths only — the list and single GET compute it; the create / update responses return