← Payments and SEPA: project and operational decisions
10 / 10 · 60 MIN

Workshop: SDD batches, exceptions, and recovery

Reconcile observations per collection, detect duplication, and communicate open items without confusing requests, movements, and technical recovery.

Define the population before summing

The fictional batch contains A=100, B=200, C=300, and D=400 euros. A and B have observed credits; C was rejected, and D has only submission. A debited return for A and a refund request for B then arrive. Observed net is 200 euros: 100+200−100. The pending request is not yet a debit. This teaching projection views creditor observations; it implements neither double-entry bookkeeping nor bank-statement validation. Retaining every identity in the result shows that a correct net can coexist with D still requiring clarification.

Preserve movements and states

Deleting credit when a refund request arrives loses the sequence needed for explanation. The model preserves credit, debit, and state separately. REFUND_REQUEST leaves B in REFUND_PENDING with zero debit. Only REFUND_DEBIT adds the corresponding movement in the fixture. RETURN_DEBIT preserves A’s original credit and records its later debit. Names are local DR labels, not ISO 20022 message codes. The lab permits only one full debit after credit. Partial processes, fees, interest, calendars, legal windows, and other sequences require further design; do not infer that every actual case fits this state machine.

Deduplicate along two dimensions

Receiving E1 twice with equal content retains one observation. Receiving E1 with a different amount produces conflict. However, the same effect can also arrive under E7: a new event key proves no new collection. The model rejects a second credit for B even under a different envelope. Comparing identity, amount, currency, and state per collection prevents discrepancies cancelling out in an aggregate. Values use integer cents in EUR fixtures; Decimal documentation explains why monetary equality should not depend on binary approximations. The code performs neither currency conversion, contractual rounding, nor generic currency validation.

Handle gaps without inventing outcomes

If a return arrives before evidence of its original credit, the local candidate is rejected for missing context. This does not prove the return invalid in its originating system. Investigate the sequence and obtain missing observation without generating artificial credit. Likewise, a timeout does not authorize resubmitting D under a new reference. The outcome may have occurred without local observation. The function prepares a separate candidate and returns no complete result on error. This in-memory preservation is useful for learning but demonstrates neither distributed transactions, durable storage, nor exactly-once financial execution.

Route exceptions to the correct layer

Misattributed cause can prolong an incident. ED05 directs investigation toward settlement failure; it is not proof of insufficient debtor-account balance. MS03 should not become a specific cause merely to simplify charts. R-transaction type, timing, participant, and code should accompany the case. The consulted guidance also normally links rejects, returns, and refunds to the original CSM unless participants agree otherwise. The PM should confirm the operational path and owners before rehearsal. The lab implements no CSM routing and does not reproduce every permitted combination.

Prepare recovery and communication

In the forty-five-minute workshop, calculate net, identify D as pending, replay an event, and introduce a conflicting identity. Then write an English note covering recovered scope, unresolved items, owner, next update, and expected evidence. The sponsor can discuss explicit partial closure; they should receive no declaration of full recovery based only on net or a health check. Retain the forty-check report and its limitations. Another participant can repeat the lab and explain outcomes. For individual practice, record self-assessment without claiming independent review or a bank’s operational acceptance.

DR original workshop / Oficina original DR: 45 minutes
Synthetic collection observations only; no actual accounts or payment execution.
Apenas observações sintéticas de cobranças; sem contas reais ou execução financeira.

0-10 min: Predict / Prever
A=100 EUR settled then returned; B=200 EUR settled then refund requested.
A=100 EUR com crédito e devolução; B=200 EUR com crédito e pedido de reembolso.
C=300 EUR rejected; D=400 EUR submitted with no financial result observed.
C=300 EUR rejeitada; D=400 EUR enviada sem resultado financeiro observado.
Expected net: 100+200-100=200 EUR. B pending refund; D pending outcome.
Líquido esperado: 100+200-100=200 EUR. B aguarda reembolso; D aguarda resultado.

10-20 min: Inject faults / Introduzir falhas
Replay E1 unchanged: no extra effect. Change its amount: identity conflict.
Repetir E1 sem alterações: sem efeito extra. Alterar montante: conflito de identidade.
Send a second B settlement under a new ID: duplicate economic effect.
Enviar segundo crédito de B com novo ID: efeito económico duplicado.
Return before original credit evidence: investigate missing context.
Devolução antes da evidência de crédito: investigar contexto em falta.

20-35 min: English recovery note / Nota de recuperação em inglês
Observed: the local batch projection reconciles to 200 EUR.
Open items: B has no refund debit observed; D has no financial outcome observed.
Action: nominate reconciliation owners and request evidence from authorized systems.
Next update: agree a specific time, impact and escalation trigger.
Boundary: synthetic observations; no claim of actual settlement or failover acceptance.
Limite: observações sintéticas; sem alegar liquidação ou aceitação de failover real.

35-45 min: Handover / Passagem à operação
Another participant reruns the model and explains each unknown and duplicate check.
Outro participante repete o modelo e explica os desconhecidos e controlos de duplicação.
Deliver code hash, input set, predictions, actual results and unresolved dependencies.
Entregar hash, entradas, previsões, resultados e dependências não resolvidas.
Solo execution records self-review, not independent acceptance.
Execução individual regista autoavaliação, não aceitação independente.
IN PRACTICE

Case: aggregate amounts match, but D has only submission and B awaits refund debit. Reporting retains both open items and movements already observed.

Common pitfalls

Request treated as movement; new technical ID as new obligation; correct sum as complete closure; resubmission after timeout; local rejection as proof of external impossibility.

Related topics: Mandates, Core, and B2B · Data and verification of payee · Changes and operational readiness

Take this idea with you

Recovery needs reconciled identities, movements, and open items; totals support control while each outcome still needs explanation.

Create account

Reference: Guidance on reason codes for SDD R-transactions · BigSavant Payments and SEPA professional assessment2026.10