mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
A weekly injectable (e.g. a GLP-1 dose) with real recorded intakes reported 0% compliance on the medication card across every window (7 / 30 / 90 days). The web reads the server-computed rate verbatim, so the server value itself was wrong. The intake-to-slot matcher used a fixed +/-12h pairing radius. That is correct for a daily cadence (24h inter-slot gap) but far too tight for a once-weekly dose: a real intake is rarely logged within 12h of the schedule's configured time-of-day, because the user takes the shot on whichever day and time of the dosing week suits them. Those intakes fell outside the radius, every weekly slot read "missed", and the rate collapsed to 0% while the matching intakes were orphaned. Scale the pairing radius with the cadence gap. `pairDoses` now derives a per-slot radius from half the distance to its nearer neighbouring slot (so two adjacent slots never double-claim one intake), floored at the 12h base so daily and multi-dose-daily cadences keep their exact prior behaviour. `buildCadenceTimeline` additionally probes the schedule's intrinsic cadence over a padded window and passes half the minimum inter-slot gap as a radius floor, so a window holding a single expected slot (a weekly med over a 7-day window) widens correctly too. A weekly cadence now pairs an intake logged anywhere in the dosing week to that week's slot, reporting the true rate. Daily-cadence matching is unchanged. Adds unit coverage for the widened radius and a real-Postgres integration test mirroring the weekly-injectable row + off-time intakes.