Fix cross-midnight adaptive dose creating false missed reminders
When adaptive timing shifts a late-night dose past midnight (e.g. 23:00 → 00:42), the scheduler would create a new pending schedule on the next day even if the dose was already taken. The proximity window was too narrow to match the take log against the shifted time. - Skip creating schedules for doses already taken/skipped (checks today + yesterday logs against base_time) - Fix midnight wraparound in proximity check for should_send_nag - Display base_time (actual dose time) in reminders instead of the internal adjusted_time Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -342,14 +342,20 @@ def check_adaptive_medication_reminders():
|
||||
if already_handled:
|
||||
continue
|
||||
|
||||
# Send notification
|
||||
# Send notification — display base_time to the user
|
||||
base_display = sched.get("base_time")
|
||||
if isinstance(base_display, time_type):
|
||||
base_display = base_display.strftime("%H:%M")
|
||||
elif base_display is not None:
|
||||
base_display = str(base_display)[:5]
|
||||
|
||||
user_settings = notifications.getNotificationSettings(user_uuid)
|
||||
if user_settings:
|
||||
offset = sched.get("adjustment_minutes", 0)
|
||||
if offset > 0:
|
||||
msg = f"⏰ Time to take {med['name']} ({med['dosage']} {med['unit']}) · {check_time} (adjusted +{offset}min)"
|
||||
msg = f"⏰ Time to take {med['name']} ({med['dosage']} {med['unit']}) · {base_display} (adjusted +{offset}min)"
|
||||
else:
|
||||
msg = f"⏰ Time to take {med['name']} ({med['dosage']} {med['unit']}) · {check_time}"
|
||||
msg = f"⏰ Time to take {med['name']} ({med['dosage']} {med['unit']}) · {base_display}"
|
||||
|
||||
notifications._sendToEnabledChannels(
|
||||
user_settings, msg, user_uuid=user_uuid
|
||||
@@ -443,12 +449,9 @@ def check_nagging():
|
||||
if not should_nag:
|
||||
continue
|
||||
|
||||
# Get the time to display
|
||||
adaptive_enabled = settings.get("adaptive_timing_enabled")
|
||||
if adaptive_enabled:
|
||||
display_time = sched.get("adjusted_time")
|
||||
else:
|
||||
display_time = sched.get("base_time")
|
||||
# Always display the base_time (the user's actual dose time),
|
||||
# not the internal adjusted_time used for scheduling.
|
||||
display_time = sched.get("base_time")
|
||||
# Normalize TIME objects for display
|
||||
if isinstance(display_time, time_type):
|
||||
display_time = display_time.strftime("%H:%M")
|
||||
|
||||
Reference in New Issue
Block a user