{% extends "base.html" %} {% block title %}{{ t('payment_preview.title') }} — painfree{% endblock %} {% block body %}

{{ t('payment_preview.heading') }}

{{ t('payment_preview.lede') }}

{# The misreading this page exists to prevent. A document that builds and passes the official schema has proved exactly that; no key has been opened, nothing has been signed, and the bank has not been asked. Saying so here is cheaper than an operator concluding from a clean preview that a refusal later is painfree's fault. #}
{{ t('payment_preview.nothing_sent') }}

{{ t('payment_preview.nothing_sent_body') }}

{# The scheme is a decision, not an echo: what was asked for and what this connection can actually do are different questions, and a downgrade is the answer to the second one. #} {% if preview.profile.payment_type_summary() %} {% endif %}
{{ t('common.connection') }} {{ connection.connection_id }}
{{ t('payment_preview.amount') }} {{ preview.control_sum }} {{ preview.currency }}
{{ t('payment_preview.to') }} {{ entered.creditor_name }}
{{ entered.creditor_iban }}
{{ t('payment_preview.from') }} {{ entered.debtor_name }}
{{ entered.debtor_iban }} {# Noted, not enforced. The bank's published account list may be incomplete or stale, so this is a thing worth looking at twice rather than a reason to stop -- and `none` means nobody asked. #} {% if debit_published is false %}
{{ t('payment_preview.debit_not_published') }} {{ t('payment_preview.debit_not_published_why') }} {% endif %}
{{ t('payment_preview.execution_date') }} {{ entered.requested_execution_date }}
{{ t('payment_preview.transfers') }} {{ preview.transaction_count }}
{{ t('payment_preview.scheme') }} {{ preview.decision.effective.value }} {% if preview.decision.downgraded %} {{ t('payment_preview.downgraded') }} {% endif %}
{{ t('scheme_reason.' ~ preview.decision.reason) }}
{{ t('payment_preview.btf') }} {{ preview.profile.payment_type_summary() }}

{{ t('payment_preview.document') }}

{# Indented here and nowhere else. The bytes that get signed carry no line breaks, so this is a rendering of the document rather than the document -- and the hint says which is which, because a page that showed a formatted copy while claiming to show what is sent is how somebody validates the wrong bytes. #}

{{ t('payment_preview.document_hint') }}

{{ document | pretty_xml }}

{{ t('payment_preview.send') }}

{# Every field again, so this post is judged by the same parser that judged the preview rather than by a copy of its conclusion. #} {% for name, value in entered.items() %} {% endfor %} {# Minted when the preview was rendered, not when this is pressed: a second press is then the same payment replayed, not a second one made. #}

{{ t('payment_preview.confirm_title') }}

{{ t('payment_preview.confirm_body') }}

{{ t('payment_preview.back') }}
{% endblock %}