Refunds & Notifications · Article 6.3
Reembolso SEPA / fuera de la plataforma: cuando la automatización no puede ayudar
Cuando el anticipo original se pagó mediante transferencia bancaria SEPA (o cualquier canal que no sea Stripe), Clozo no puede reembolsar automáticamente — la API de Stripe no tiene nada que reembolsar. Usted emite la transferencia SEPA manualmente desde su banco y luego hace clic en `Marcar como reembolsado` para actualizar la nota de crédito y notificar al cliente.
Las transferencias bancarias SEPA son habituales en la UE, especialmente en Alemania, los Países Bajos y Austria, donde el pago de cuenta a cuenta es rutinario para B2B. Clozo admite SEPA en el anticipo original a través del código QR EPC en la factura de anticipo — pero Stripe no tiene ningún papel en esa transacción, por lo que cuando se necesita un reembolso en un anticipo pagado por SEPA, Stripe no puede hacer nada. El flujo recurre al manual: usted transfiere los fondos y luego registra la transferencia en Clozo para que la nota de crédito refleje la realidad y el cliente reciba la confirmación.
Step by step
Reciba el activador post-firma.
Después de que el cliente firme la enmienda Δ_REEMBOLSO, la nota de crédito aparece con estado
pendingy motivo «Pago manual del autónomo requerido».Busque el IBAN del cliente.
Ya sea de sus registros (si lo guardó durante el anticipo SEPA original), del correo de la factura de anticipo (el cliente le envió los fondos; su IBAN está en el extracto bancario), o enviando un correo al cliente para confirmar que el IBAN de destino es el mismo que usó para pagar.
Emita la transferencia SEPA desde su banco.
Use el número de la nota de crédito como referencia (p. ej., «Reembolso CRN-2026-0007»). La mayoría de los bancos de la UE procesan SEPA el mismo día o el siguiente día hábil; el SEPA Instant transfronterizo suele completarse en segundos.
Haga clic en
Marcar como reembolsadoen la nota de crédito.Desde el banner de Reembolso de la página de la propuesta, la página de notas de crédito (
/credit-notes) o la fila de la nota de crédito en el menú desplegable de Documentos.Proporcione un motivo.
Mínimo 1 carácter; típico: número de referencia bancaria («Sparkasse ref 9XK7-2026-0511») o una nota breve. Se almacena permanentemente en la fila de la nota de crédito.
Confirme — la nota de crédito pasa a
manual.El correo se envía al cliente; la propuesta se cierra a
Pagadasi corresponde.
El banner de Reembolso muestra «Reembolso manual iniciado» con los datos de la nota de crédito, su cuenta bancaria enmascarada y un botón Confirmar Reembolso Completado. Después de hacer clic y proporcionar un motivo, el banner cambia a «Reembolso completado mediante transferencia manual el [fecha]» con el texto del motivo incluido.
Why this works this way
La transición ocurre dentro de _trigger_stripe_refund (amendment_postsign.py:472):
``
if not payment:
credit_note.refund_status = REFUND_PENDING
credit_note.refund_failure_reason = (
"No Stripe PaymentIntent found — likely SEPA flow. "
"Manual freelancer payout required."
)
``
Esto configura la nota de crédito para mostrar la interfaz de reembolso manual. El banner de la propuesta muestra «Reembolso manual iniciado — confirme la transferencia bancaria» con los datos de la nota de crédito y un CTA para marcar el reembolso como completado.
La acción del autónomo (CreditNoteMarkRefundedView en amendment_views.py:686):
1. Validar que la nota de crédito no esté ya en succeeded (idempotente — devuelve 409 si lo está).
2. Requerir un campo reason en el cuerpo (1–500 caracteres) — normalmente un número de referencia bancaria, fecha de pago o nota breve. Se almacena como manual_refund_reason para la auditoría.
3. Establecer refund_status=manual, refund_completed_at=now, guardar.
4. Llamar a close_proposal_if_settled para cambiar la propuesta a Pagada si no quedan otras obligaciones pendientes.
5. Encolar send_credit_note_refund_completed_email — la misma plantilla de correo que la ruta de reembolso completado de Stripe; la experiencia del cliente es idéntica.
El estado manual (frente a succeeded) preserva la distinción de auditoría: succeeded significa que el webhook de Stripe lo confirmó; manual significa que el autónomo certifica que el reembolso se emitió fuera de la plataforma. Ambos cierran la nota de crédito a efectos contables; solo el registro de auditoría rastrea la diferencia.
Troubleshooting
Keep reading
Refunds & Notifications
When refunds happen: the Δ_REFUND amendment branches
A refund in Clozo is always tied to a Δ_REFUND amendment branch — partial (revised total smaller than deposit paid) or full (revised total at zero). The amendment is the legal trigger; the refund is the cash consequence.
Refunds & Notifications
Mark refunded manually — for SEPA and out-of-band proof
When a refund is issued outside Stripe — SEPA bank transfer, cash, PayPal, mailed cheque — `Mark refunded` is how you record it in Clozo. Reason field is mandatory (typically a bank reference). The credit note moves to `manual` status and the client receives a confirmation email.
Refunds & Notifications
Stripe automatic refund (Direct Charges via Connect)
When the original deposit was paid via Stripe, the refund is automatic. Clozo issues a Refund on the freelancer's connected account, watches for the `refund.updated` webhook, and flips the credit note to `succeeded` once Stripe confirms — typically within 3–5 business days for the cash to reach the client.
Refunds & Notifications
Failed refunds & recovery — common Stripe failure reasons
A `failed` credit note has a `refund_failure_reason` string from Stripe. Most reasons fall into a small set; here's what each means and the recommended recovery.