{# GET /admin/ecb — crate::pages::admin::ecb::ui::EcbPage #} {% extends "ui/base.html" %} {% block title %}Exchange rates{% endblock %} {% block content %}

Exchange rates

ECB reference rates

The importer fetches the ECB's published rates once a day and records every attempt. Conversions read only what it has verified, so coverage is what decides whether a foreign-currency amount can be posted at all.

{% include "pages/admin/ecb/status.html" %}

Import attempts {{ page.batches.len() }}

{% if page.batches.is_empty() %}

The importer has not recorded an attempt. It runs on startup and then daily, so an empty log means the server has not completed a run since this table was created.

{% else %}
{% for batch in page.batches %} {% endfor %}
StartedFinishedWindowResult ObservationsVerified through
{{ batch.started_at }} {%- if let Some(finished) = batch.completed_at %}{{ finished }} {%- else %}still running{% endif -%} {{ batch.window() }}
{{ batch.endpoint }}
{%- if batch.succeeded() %}succeeded {%- else if batch.running() %}running {%- else %}failed{% endif -%} {%- if let Some(message) = batch.error_message %}
{{ message }}
{% endif -%}
{{ batch.observations() }} {%- if let Some(date) = batch.verified_through_date %}{{ date }} {%- else %}{% endif -%}

Attempts are an audit record: they cannot be edited or deleted, and a batch that re-fetched a day an earlier one already owned inserts nothing, which is why the new count can be lower than the total.

{% endif %}
{% endblock %}