21127b38ab
Add repairOrphanedDoseIds() function that runs during app startup (after ALTER migrations) to fix dose tracking entries that became invalid when medication schedules were changed before PR #103. The function: - Generates valid schedule dates for each medication's current intakes - Detects dose_tracking entries whose dateOnlyMs doesn't match any valid schedule date - Remaps orphaned doses to the nearest valid schedule date within half the intake interval - Preserves person suffixes in dose IDs - Is idempotent (safe to run on every startup) This complements PR #103 which only migrates dose IDs on future edits. The startup repair fixes existing broken data in production databases. Includes 8 tests covering: valid doses unchanged, 1-day shift repair, person suffix preservation, out-of-range detection, idempotency, multi-medication handling, and legacy format fallback.