Guillem Arias
8e9a697b1f
fix(goals): months_remaining uses day-precision
...
PF audit edge case. Calendar-month math undercounted near the
deadline: May 30 with a June 1 target returned `1` ("save $5k
this month"), then June 1 morning returned `0` (falls through to
`remaining_amount` charged as one-month-required). Users saw a
$5k/mo required rate for a 2-day window, then $5k flat on
deadline day — a cliff that doesn't match reality.
Replace calendar-month delta with `(target_date - Date.current) / 30.0`
so a 2-day-out deadline reports ~0.07 months and `monthly_target_amount`
scales proportionally. `[..., 0.0].max` keeps the past-due case
zero-clamped.
2026-05-14 21:50:54 +02:00
..
2026-05-14 21:42:02 +02:00
2026-05-13 21:05:11 +02:00
2026-05-14 16:07:14 +02:00
2026-05-13 21:27:50 +02:00
2026-05-07 17:31:16 +02:00
2026-04-08 22:23:15 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-01-21 22:56:39 +01:00
2026-01-21 22:56:39 +01:00
2026-04-11 21:37:07 +02:00
2026-04-01 20:25:06 +02:00
2026-04-11 21:37:07 +02:00
2026-05-13 18:13:48 +02:00
2026-05-14 19:48:32 +02:00
2026-05-13 14:03:37 +02:00
2026-05-12 00:17:49 +02:00
2026-05-13 17:54:09 +02:00
2026-02-06 18:04:03 +01:00
2026-04-13 00:51:23 +02:00
2026-05-13 20:07:00 +02:00
2026-05-14 21:50:01 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-13 20:07:00 +02:00
2026-04-10 23:19:48 +02:00
2026-04-27 18:33:22 +02:00
2026-04-27 18:33:22 +02:00
2026-01-09 13:03:40 +01:00
2026-05-12 00:22:37 +02:00
2026-05-12 00:22:37 +02:00
2026-01-12 15:35:14 -05:00
2026-02-19 18:58:01 +01:00
2026-01-23 00:53:24 +01:00
2026-01-09 19:38:04 +01:00
2026-01-22 20:37:07 +01:00
2026-01-22 20:37:07 +01:00
2026-01-22 20:37:07 +01:00
2026-03-25 17:47:04 +01:00
2026-01-10 20:11:00 +01:00
2026-03-13 08:11:51 +01:00
2026-05-13 18:13:48 +02:00
2026-03-23 12:34:43 +01:00
2026-05-12 00:37:47 +02:00
2026-03-25 17:47:04 +01:00
2026-04-10 15:43:22 +02:00
2026-05-13 18:17:10 +02:00
2026-01-16 12:34:06 +01:00
2026-04-18 09:50:34 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 12:17:00 +02:00
2026-04-19 11:16:04 +02:00
2026-04-19 11:16:04 +02:00
2026-05-09 21:55:20 +02:00
2026-04-09 18:33:59 +02:00
2026-05-12 23:45:19 +02:00
2026-04-08 21:05:58 +02:00
2026-03-20 17:01:31 +01:00
2026-05-13 20:07:00 +02:00
2026-01-07 15:59:04 +01:00
2026-03-25 10:50:23 +01:00
2026-05-13 21:05:11 +02:00
2026-05-14 19:12:28 +02:00
2026-02-06 21:25:52 +01:00
2026-03-14 20:14:18 +01:00
2026-05-03 20:33:29 +02:00
2026-05-11 20:08:32 +02:00
2026-05-01 13:31:32 +02:00
2026-03-25 10:50:23 +01:00
2026-04-07 14:43:17 +02:00
2026-04-07 14:43:17 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-04-13 20:03:55 +02:00
2026-04-23 21:28:38 +02:00
2026-05-05 01:12:48 +02:00
2026-04-01 20:27:29 +02:00
2026-05-03 20:33:29 +02:00
2026-03-19 15:17:55 +01:00
2026-04-07 16:28:01 +02:00
2026-04-01 20:25:06 +02:00
2026-04-01 20:25:06 +02:00
2026-05-13 18:13:48 +02:00
2026-01-21 22:56:39 +01:00
2026-03-25 10:50:23 +01:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-04-10 23:19:48 +02:00
2026-04-10 23:19:48 +02:00
2026-02-01 23:48:54 +01:00
2026-05-09 12:36:41 +02:00
2026-03-29 17:30:12 +02:00
2026-04-13 00:51:23 +02:00
2026-02-11 15:22:56 +01:00
2026-01-09 19:38:04 +01:00
2026-01-21 17:16:51 +01:00
2026-05-14 21:23:15 +02:00
2026-05-11 20:08:32 +02:00
2026-05-14 19:12:28 +02:00
2026-05-14 21:50:54 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-12 23:45:19 +02:00
2026-05-13 20:07:00 +02:00
2026-03-25 17:47:04 +01:00
2026-03-19 15:17:55 +01:00
2026-02-10 23:42:22 +01:00
2026-03-25 10:50:23 +01:00
2026-04-11 15:09:59 +02:00
2026-05-05 01:04:29 +02:00
2026-03-25 10:50:23 +01:00
2026-01-23 22:05:28 +01:00
2026-05-12 00:22:37 +02:00
2026-05-12 00:22:37 +02:00
2026-04-18 00:06:24 +02:00
2026-03-19 15:17:55 +01:00
2026-05-12 12:18:17 +02:00
2026-04-09 18:33:59 +02:00
2026-03-19 15:17:55 +01:00
2026-05-03 10:56:31 +02:00
2026-05-03 20:33:29 +02:00
2026-05-12 00:00:49 +02:00
2026-02-06 18:04:29 +01:00
2026-05-12 21:55:22 +02:00
2026-05-05 01:12:48 +02:00
2026-04-21 19:02:41 +02:00
2026-03-19 15:17:55 +01:00
2026-02-10 23:42:22 +01:00
2026-05-05 01:04:29 +02:00
2026-05-13 18:13:48 +02:00
2026-05-13 18:13:48 +02:00
2026-05-05 01:12:48 +02:00
2026-05-12 00:37:47 +02:00
2026-05-05 01:12:48 +02:00
2026-04-07 11:24:50 +02:00
2026-04-10 17:42:16 +02:00
2026-01-23 22:05:28 +01:00
2026-04-15 18:45:24 +02:00
2026-04-18 09:50:34 +02:00
2026-02-10 23:42:22 +01:00
2026-03-20 14:52:09 +01:00
2026-05-03 10:28:31 +02:00
2026-05-09 21:55:20 +02:00
2026-05-09 21:55:20 +02:00
2026-05-05 00:47:45 +02:00
2026-02-10 23:14:58 +01:00
2026-01-23 18:55:51 +01:00
2026-05-12 00:00:49 +02:00
2026-05-06 22:02:21 +02:00
2026-02-23 17:43:00 -05:00
2026-05-13 20:07:00 +02:00
2026-05-12 23:45:19 +02:00
2026-05-13 20:07:00 +02:00
2026-05-12 23:45:19 +02:00
2026-01-12 15:35:14 -05:00
2026-05-03 20:33:29 +02:00
2026-05-05 01:20:57 +02:00
2026-02-11 15:22:56 +01:00
2026-05-03 22:13:28 +02:00