Exchange Rates and Currency Conversion¶
Strawly stores every cost figure in USD. When a currency other than USD is selected for display, the app converts USD amounts using a table of monthly exchange rates. This page explains how those rates are stored and refreshed, which rate a given recommendation uses, and the specific cases where a converted value can still change after a recommendation has been acted on.
Display currency¶
The display currency is a single setting that applies to every user, set from Settings > Global Settings. Selecting a currency other than USD requires an exchange rate to already exist for the current month. Changing the display currency does not change any stored data. It only changes which currency amounts are converted into on the next read.
How exchange rates are stored¶
Each currency has exactly one exchange rate per calendar month, in YYYY-MM form. There is never more than one rate for the same currency and month. Each rate is tagged with how it was produced:
| Source | How it is produced |
|---|---|
| Auto | Fetched from the Frankfurter exchange rate API, which republishes European Central Bank data. The rate for a given month is the average of the last two days the ECB published rates for, in the month before it. |
| Manual | Entered directly by an admin for a specific month. |
Setting a manual rate for a month replaces whatever value was stored for that month, whether it was auto or manual before. An automatic refresh, whether the monthly job, Run now, or Backfill history, never overwrites a month that already has a manual rate. It skips that month and leaves the manual value in place.
Keeping rates current¶
A scheduled job runs at 03:00 UTC on the 1st of every month and fetches the current month's auto rate for every configured currency. You can also fetch a single currency's current-month rate immediately with the Run now button in the Currencies section of Global Settings. Run now only affects the current month, and does nothing if the current month already has a manual override.
Backfilling history¶
Adding a currency only produces a rate for the current month. To fill in earlier months, for example after adding a currency partway through the year, use Backfill history in the Currencies section. Choose a starting month and Strawly fetches the auto rate for every month from that point through the current month, for every configured currency.
Backfill never overwrites a month that already has a rate, auto or manual. It only fills months with no rate at all.
The Rate history table below the current rates shows every stored month for every currency, most recent first, with the rate, whether it is Auto or Manual, and the two ECB sample days averaged to produce that rate.
Overriding a rate¶
You can set a manual rate for the current month from the main Currencies table, or for any specific past month from its row in the Rate history table. Overriding a month only affects that one month; it does not change any other month's rate.
Clearing an override removes the stored rate for that month entirely. It does not reveal a previous auto-fetched value underneath, since setting the override replaced it. To get an auto rate back for that month, clear the override and run Backfill history again, or use Run now if it is the current month.
Which month a recommendation converts at¶
Recommendations do not all convert at the same month's rate. Each recommendation resolves its own conversion month, in this order:
- A pinned month, if one has been set (see below).
- Otherwise, the month of its last engine check.
- Otherwise, the month it was identified, for a recommendation the engine has not yet evaluated.
The engine updates a recommendation's last-checked timestamp on every run, for every status, so an unpinned recommendation's conversion month keeps moving forward with each check. If no exchange rate exists for the resolved month, for example a month that has not been backfilled, that recommendation's amount is shown in USD instead of the display currency, while other recommendations on the same page convert normally.
Recommendation totals, including initiative totals, are the sum of each member's own converted amount, not a single total converted once at one rate.
Pinning a recommendation's rate month¶
The first time a recommendation moves to In Review, its conversion month is pinned to whatever month it last resolved to at that moment. From then on, that recommendation always converts at the pinned month, no matter how many months pass or how many more times the engine checks it. The pin is cleared only by moving the recommendation back to New, at which point the next move to In Review pins it again at the then-current month.
This is what keeps a savings figure stable once it has been shared with a team: the number does not shift every time the exchange rate updates for a new month.
Recommendations moved directly to Snoozed or Ignored, without ever passing through In Review, are not pinned. Their USD savings figure is frozen by the engine, as described in Recommendation Statuses, but their converted display value is not. It keeps moving to whichever month the engine last checked them in, the same as an active recommendation.
Editing a past month's rate¶
Pinning fixes which month a recommendation converts at. It does not fix the rate itself. If a past month's rate changes later, whether by clearing a bad value and letting Backfill history or Run now fetch a fresh one, or by setting a manual override, every recommendation pinned to that month is recalculated against the new rate the next time it is displayed. This applies even to recommendations already Implemented or Dismissed.
In practice this only matters if a rate is edited after a recommendation has already been pinned to it and shared with a team. Treat exchange rate history as something to correct only when a rate was genuinely wrong, not as a routine adjustment.
Realized savings¶
Strawly does not yet calculate realized savings, the actual amount saved once a change is confirmed in place. The savings figure shown on every recommendation, at every status, is the estimated monthly savings recalculated from current pricing and the resolved exchange rate. There is no separate figure that locks in once a recommendation reaches Implemented.