painfree 0.3.2
The EBICS request a bank refuses is now kept, and checked against the official H005 schemas.
091113 EBICS_INVALID_REQUEST_CONTENT names no element, and the request was discarded the moment the exchange ended — so an operator holding that code had no next step inside the product, and the only party who could still see the document was the bank. Diagnosing one meant reading source and telephoning.
The request is now captured where it is still in hand, stored on the order, and validated at the same moment. The order page shows the verdict and offers the document as a file, because the next thing anybody does with it is put it somewhere else.
A clean result is a finding, not an exoneration, and the console says so. A schema can answer is this well-formed EBICS; nothing can answer will this bank accept it. What clean does tell you is that the disagreement is about content rather than shape — which is what to ask the bank about.
Nothing sensitive is stored: an upload's initialisation carries the electronic signature and a transaction key wrapped to the bank's own public half. The payment file travels in the transfer phase, which a refusal at initialisation never reaches — and there is a test asserting the stored bytes contain no CstmrCdtTrfInitn and no IBAN.
The nine H005 schemas are vendored for the same reason the pain.001 one is: they run at runtime, and a validator that reads a directory next to the repository is silently absent in a container. Verbatim from the same MIT source, with their sha256s recorded.
Also: the console uses the width of the window. The page carried a 1120px cap that kept prose legible and squeezed every table into it, so the orders table scrolled sideways while a third of the window sat empty. The reading measure now lives on the prose, where it belongs.
Migration 0018_refused_request adds two nullable columns. No backfill: the requests already refused are gone, and an existing deployment migrates to not captured, which the console says in those words.