Skip to content

ECB overview

The server converts foreign-currency accounting amounts to EUR using official European Central Bank reference rates. Its main goal is not only to calculate a number, but to keep that number explainable later.

Rates are downloaded in the background and stored locally. Posting therefore never waits for the ECB website and never depends on the ECB being online at that moment.

Synchronization starts with the server. A new database initially downloads the most recent 90 days; older rates are available through a separate historical backfill extending to 4 January 1999.

The server then checks for new rates daily after 17:00 Bratislava time. Each synchronization overlaps the previous 90 days so that later ECB corrections are discovered. Temporary failures are retried, and only one importer can run at a time.

Downloaded data is accepted only when the requested period is complete and valid. A failed request or incomplete response does not create partial coverage. Dates already verified remain usable.

ECB observations are immutable. If the ECB corrects a rate, the correction becomes a new observation while the original remains available.

For example, a posting may have used 1 EUR = 1.18 USD. If the ECB later corrects that day to 1.17 USD, future conversions use 1.17; the earlier posting still points to the 1.18 rate it actually used.

A committed conversion records the original amount, its currency, the selected rate and date, the EUR result, and the source of the rate. This evidence is saved with the accounting value and is not reconstructed afterwards.

For a foreign-currency journal line, the complete workflow is:

  1. Select the exact publication date and requested rate source.
  2. Convert the foreign amount to an unrounded EUR value.
  3. Save the evidence and journal line in the same transaction.
  4. Store the rounded EUR amount while retaining the original amount and currency.

If saving either the line or its evidence fails, neither is committed.

A preview shows what would be used now, but it is not a reservation and saves no evidence. It must use the same official-or-custom choice as the eventual posting. Posting performs the conversion again and records the exact observation used at that moment.

Committed evidence can be inspected later for a specific money value. Its history is immutable and returned newest first. An empty history is not reconstructed from the current rate; it means that workflow did not save conversion evidence for that value.

See rate selection through examples →