Maurice
aa1f76ad11
fix(costs): leave out an expense no rate is known for instead of counting it 1:1
...
A foreign expense without a frozen rate is converted with today's rate.
When the server could not fetch rates itself, it counted the amount 1:1
in the trip currency, although the browser had the rates all along. A
VND bill on an AUD trip was settled as millions of AUD.
Such a row is now left out of the balances, flows, final budgets, trip
totals and per-person summaries. The settlement reports it under
`unconverted` and says which currency its figures are in; the trip
summary lists the ids and the budget prompt says how many are missing.
The browser lends the rates it already holds (`fallback_fx`) when it
saves an expense or a settle-up transfer, and to heal existing rows
through the new POST .../budget/freeze-rates route, which an editor's
Costs view calls for the rows the settlement left out. The server still
prefers its own rate, uses a lent one only while it is quoted against
the trip currency, and never replaces a frozen or explicit rate. The
settlement also takes the browser's display rate (`base_rate`) in place
of a display quote the server cannot fetch; the browser leaves out a
figure the query would refuse. The browser's own fetch gives up after
10 s.
Changing a row's currency while no rate is available no longer keeps
the old currency's rate; the row goes back to unfrozen.
MCP gets the same through the new freeze_budget_rates tool, which only
ever pins the server's own rate.
2026-09-26 13:19:26 +02:00
..
2026-08-07 21:07:14 +02:00
2026-08-07 22:18:14 +02:00
2026-09-23 22:35:01 +02:00
2026-08-07 16:00:12 +02:00
2026-09-20 13:54:31 +02:00
2026-09-23 17:41:25 +02:00
2026-08-22 11:33:55 +02:00
2026-08-22 11:33:55 +02:00
2026-08-07 19:58:12 +02:00
2026-08-17 14:48:23 +02:00
2026-09-26 11:22:19 +02:00
2026-08-11 20:28:49 +02:00
2026-08-23 11:59:12 +02:00
2026-09-01 17:18:10 +02:00
2026-09-20 13:54:31 +02:00
2026-09-23 11:28:24 +02:00
2026-08-10 17:08:54 +02:00
2026-06-16 22:22:45 +02:00
2026-09-21 22:14:44 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-08-09 20:54:39 +02:00
2026-08-10 19:54:46 +02:00
2026-09-21 22:14:44 +02:00
2026-09-18 22:44:45 +02:00
2026-08-22 11:33:55 +02:00
2026-06-16 22:22:45 +02:00
2026-07-25 15:12:38 +02:00
2026-09-19 19:24:38 +02:00
2026-09-23 11:28:24 +02:00
2026-08-17 14:48:23 +02:00
2026-09-15 21:36:34 +02:00
2026-08-13 14:06:35 +02:00
2026-09-26 04:22:50 +00:00
2026-07-27 22:34:41 +02:00
2026-08-23 11:59:12 +02:00
2026-09-01 17:18:10 +02:00
2026-08-28 15:23:05 +02:00
2026-08-07 15:14:14 +02:00
2026-09-07 14:05:33 +02:00
2026-08-22 11:33:55 +02:00
2026-08-22 11:33:55 +02:00
2026-09-26 02:26:39 +00:00
2026-09-26 13:19:26 +02:00
2026-09-26 13:19:26 +02:00
2026-09-26 13:19:26 +02:00
2026-09-26 04:22:50 +00:00
2026-08-22 11:33:55 +02:00
2026-09-20 13:54:31 +02:00
2026-08-10 19:54:46 +02:00
2026-07-26 15:28:55 +02:00
2026-09-06 15:02:58 +02:00
2026-08-10 19:54:46 +02:00
2026-09-14 13:20:21 +02:00
2026-08-12 14:14:37 +02:00
2026-09-09 00:11:00 +02:00
2026-09-06 15:02:58 +02:00
2026-09-19 21:01:45 +02:00
2026-09-23 20:32:41 +02:00
2026-09-23 20:32:41 +02:00
2026-08-25 19:26:38 +02:00
2026-06-16 22:22:45 +02:00
2026-09-01 17:18:10 +02:00
2026-08-10 21:49:27 +02:00
2026-07-25 18:14:37 +02:00
2026-07-25 18:14:37 +02:00
2026-09-20 13:54:31 +02:00
2026-09-14 10:39:49 +02:00
2026-09-20 13:54:31 +02:00
2026-09-14 10:39:49 +02:00
2026-09-14 23:00:57 +02:00
2026-09-14 10:39:49 +02:00
2026-09-14 23:00:57 +02:00
2026-09-14 10:39:49 +02:00
2026-09-20 13:54:31 +02:00
2026-09-11 22:28:03 +02:00
2026-08-11 22:14:12 +02:00
2026-09-23 22:40:47 +02:00
2026-09-23 22:40:46 +02:00
2026-09-23 22:40:46 +02:00
2026-08-07 18:42:53 +02:00
2026-09-22 12:12:41 +02:00
2026-08-22 11:33:55 +02:00
2026-08-11 16:42:49 +02:00
2026-08-11 22:23:51 +02:00
2026-08-11 11:15:32 +02:00
2026-09-08 23:15:26 +02:00
2026-09-08 23:15:26 +02:00
2026-09-16 11:08:07 +02:00
2026-09-12 12:24:33 +02:00
2026-09-20 13:54:31 +02:00
2026-09-01 17:18:10 +02:00
2026-08-23 11:59:12 +02:00
2026-09-23 17:41:26 +02:00
2026-08-23 11:59:12 +02:00
2026-09-15 15:31:59 +03:00
2026-09-13 23:49:00 +02:00
2026-08-20 15:43:27 +02:00
2026-09-03 10:47:08 +02:00
2026-09-03 10:47:08 +02:00
2026-09-13 18:45:57 +02:00
2026-09-26 04:22:50 +00:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-09-12 18:02:57 +02:00
2026-08-15 16:42:27 +02:00
2026-08-15 16:42:27 +02:00
2026-09-07 18:36:54 +02:00
2026-09-23 22:35:01 +02:00
2026-09-08 20:41:57 +02:00
2026-09-22 13:30:12 +02:00
2026-09-21 22:14:44 +02:00
2026-08-10 12:24:15 +02:00
2026-09-08 20:41:57 +02:00
2026-09-23 22:35:01 +02:00
2026-09-07 18:36:54 +02:00
2026-08-10 12:24:15 +02:00
2026-09-07 14:05:33 +02:00
2026-09-23 22:35:01 +02:00
2026-09-21 22:14:44 +02:00
2026-09-23 22:35:01 +02:00
2026-08-11 22:44:20 +02:00
2026-09-07 18:36:54 +02:00
2026-08-11 23:11:34 +02:00
2026-08-23 11:59:12 +02:00
2026-08-08 22:27:56 +02:00
2026-09-23 17:41:25 +02:00
2026-09-26 11:22:19 +02:00
2026-09-23 17:41:25 +02:00
2026-08-10 13:38:26 +02:00
2026-08-22 11:33:55 +02:00
2026-09-26 04:22:50 +00:00
2026-09-06 15:02:58 +02:00
2026-08-08 12:09:56 +02:00
2026-09-06 15:02:58 +02:00
2026-09-04 12:15:53 +02:00
2026-09-04 12:15:53 +02:00
2026-08-23 11:59:12 +02:00
2026-09-04 12:15:53 +02:00
2026-08-15 16:42:27 +02:00
2026-09-22 13:30:12 +02:00
2026-09-20 12:48:44 +02:00
2026-09-02 16:21:50 +02:00
2026-09-02 16:21:50 +02:00
2026-09-02 21:06:51 +02:00
2026-08-23 11:59:12 +02:00
2026-09-26 11:22:19 +02:00
2026-09-26 11:22:19 +02:00
2026-08-10 17:08:54 +02:00
2026-08-22 11:33:55 +02:00
2026-08-10 19:54:46 +02:00
2026-08-10 12:24:15 +02:00
2026-09-23 22:35:01 +02:00
2026-09-23 22:35:01 +02:00
2026-09-26 04:22:50 +00:00
2026-09-07 14:05:33 +02:00
2026-09-07 14:05:33 +02:00
2026-09-07 14:05:33 +02:00
2026-09-23 22:35:01 +02:00
2026-09-13 15:36:02 +02:00
2026-07-30 17:07:12 +02:00
2026-08-12 17:43:22 +02:00
2026-09-13 23:49:00 +02:00
2026-09-26 04:22:50 +00:00
2026-09-13 23:48:59 +02:00
2026-09-13 23:48:59 +02:00
2026-09-12 23:36:09 +02:00
2026-09-12 23:36:49 +02:00
2026-08-23 11:59:12 +02:00
2026-08-19 23:36:42 +02:00
2026-08-10 19:54:46 +02:00
2026-08-09 22:43:05 +02:00
2026-08-10 21:49:27 +02:00
2026-09-26 04:22:50 +00:00
2026-09-26 04:22:50 +00:00
2026-09-12 11:23:09 +02:00
2026-09-20 13:54:31 +02:00
2026-09-24 11:32:52 +02:00
2026-09-23 15:31:09 +02:00
2026-09-23 15:31:09 +02:00
2026-09-18 13:17:43 +02:00
2026-09-12 12:24:33 +02:00
2026-09-10 21:40:51 +02:00
2026-09-10 21:40:51 +02:00
2026-08-23 11:59:12 +02:00
2026-09-09 14:52:50 +02:00
2026-08-15 22:48:16 +02:00
2026-08-15 16:42:27 +02:00
2026-08-27 12:06:55 +02:00
2026-08-22 11:33:55 +02:00
2026-09-11 11:01:25 +02:00
2026-09-02 21:06:42 +02:00
2026-09-09 10:11:36 +02:00
2026-08-25 19:26:38 +02:00
2026-09-20 12:48:44 +02:00
2026-09-20 14:28:45 +02:00
2026-09-20 14:28:45 +02:00
2026-08-10 19:54:46 +02:00
2026-07-26 15:28:55 +02:00
2026-08-22 11:33:55 +02:00
2026-08-09 19:13:21 +02:00
2026-08-16 23:17:50 +02:00
2026-08-28 15:23:05 +02:00
2026-08-01 12:45:35 +02:00
2026-09-07 09:01:56 +02:00
2026-08-20 18:40:21 +02:00
2026-08-22 11:33:55 +02:00
2026-08-18 22:24:29 +02:00
2026-09-23 22:35:01 +02:00
2026-08-19 23:36:42 +02:00
2026-08-09 19:13:21 +02:00
2026-08-10 19:54:46 +02:00
2026-08-10 13:38:26 +02:00
2026-08-11 16:42:49 +02:00
2026-08-10 13:38:26 +02:00
2026-09-26 13:19:26 +02:00
2026-09-20 12:34:34 +02:00
2026-09-26 04:22:50 +00:00
2026-09-01 16:19:21 +02:00
2026-08-11 16:42:49 +02:00
2026-08-22 11:33:55 +02:00
2026-08-12 00:38:41 +02:00
2026-09-12 12:51:27 +02:00
2026-08-23 11:59:12 +02:00
2026-08-15 16:42:27 +02:00
2026-08-18 22:24:29 +02:00
2026-09-01 17:18:10 +02:00
2026-08-23 11:59:12 +02:00
2026-08-10 13:38:26 +02:00
2026-08-11 09:58:37 +02:00
2026-06-16 22:22:45 +02:00