Remit console

Drives a running Remit from the browser. Source of truth: src/Services/Remit.Funding/wwwroot/console/index.html in the Remit repo.

Targets
1 · Deposit
2 · Provider webhook (signed in the browser)
depositproviderreference
3 · Ledger
4 · Withdrawal
5 · Reconciliation

The one check that does not trust the provider. This service has its own record, built from the events above — it never reads Funding's tables. Give it the provider's statement and it matches on the reference alone; every difference becomes an exception it will not fix. A person resolves those, with a reason.

Raise each exception on purpose
  • matched — deposit → settled webhook → Build → POST
  • AmountMismatch — same, but change one amount in the CSV first
  • UnknownAtPsp — add a row whose reference was never issued
  • MissingAtPsp — settle a deposit, then delete its row before posting
  • SettledButNotFinal — skip the webhook, but leave the reference in the CSV: the provider settled it, we never heard
  • Stuck — deposit, no webhook, wait for the window, then run the sweep

Download the statement, break a line in a spreadsheet, load it back and post it — that is the loop a finance team actually runs. Post the same statement twice and nothing new is raised: one open exception per kind, provider and reference, because month-end files get re-sent.

How it fits together INTERNET clients · providers · TLS REMIT one PostgreSQL schema per service · one trace per movement · no card data anywhere Client app web · mobile Payment provider tokenises cards PCI scope ends here Funding Requested Submitted Settled closed edges — no double settle idempotency_keys — replay · 409 · 422 deposit + outbox row — one transaction relay — SKIP LOCKED, publisher confirms webhook verified before parsing (Countersign) PSP routed by currency, then observed health RabbitMQ topic exchange outbox → relay → publish traceparent in headers Ledger inbox — message id, same tx journal — balanced entries balance = Σ postings Reconciliation movements from events statement ⇄ reference only exceptions — humans resolve stuck sweep POST /deposits Idempotency-Key charge Accepted · Rejected · Unavailable webhook — HMAC over raw bytes per-provider secret · 5-min window settled funding.# month-end statement (CSV) — matched on the provider reference, differences become exceptions

One deposit through Remit. Orange is the money-carrying event; dashed lines cross a trust boundary. Every button on the left drives one of these arrows.