Saltar a contenido

RF-001 — Pago por transferencia bancaria

Estado En producción (main, staging)
Tipo Payment provider propio
Ubicación src/modules/bank-transfer/ · identificador bank_transfer
Depende de Módulo Payment de Medusa — RF-000

Requisito

Permitir cerrar un pedido sin cobro confirmado, dejando el importe pendiente de verificación manual contra el extracto bancario, y habilitar la captura del pago desde el dashboard una vez validada la acreditación. Registrar la solicitud de reembolso sin ejecutar devolución automática.

Solución adoptada

Implementar un payment provider que cubra la interfaz completa de Medusa sin integración externa: modelar la máquina de estados del pago en el campo data de la sesión y delegar la verificación del dinero al equipo comercial.

stateDiagram-v2
    [*] --> pending: initiatePayment
    pending --> authorized: authorizePayment · completar carrito
    authorized --> captured: capturePayment · acción manual en el dashboard
    pending --> canceled: cancelPayment
    authorized --> canceled: cancelPayment
    captured --> [*]
    canceled --> [*]

Comportamiento por operación

Operación Efecto
initiatePayment Generar identificador de sesión y persistir importe, moneda y estado pending
updatePayment Reflejar el cambio de importe o moneda sobre la sesión existente
authorizePayment Marcar authorized sin validar fondos — habilita la creación del pedido
capturePayment Marcar captured — se invoca desde el dashboard tras verificar la transferencia
cancelPayment Marcar canceled
refundPayment Registrar nota con importe y moneda; la devolución se procesa fuera del sistema
getWebhookActionAndData Devolver not_supported — el proveedor no recibe confirmaciones externas

Reglas de negocio

  • Autorizar siempre, sin comprobación de acreditación: el pedido se crea con el pago autorizado y no capturado.
  • Reservar la captura al operador, como constancia explícita de que el dinero fue verificado.
  • No emitir ni consumir webhooks.

Configuración

Registrar el provider en medusa-config.ts bajo el módulo Payment. No requiere variables de entorno ni credenciales.

Criterios de aceptación

# Criterio
1 Ofrecer «Transferencia bancaria» como método de pago en el checkout de la región habilitada
2 Completar el carrito y generar el pedido con el pago en estado autorizado
3 Capturar el pago desde el detalle del pedido en el dashboard y reflejar el estado captured
4 Cancelar la sesión de pago sin dejar el pedido en estado inconsistente

Limitaciones conocidas

  • No conciliar automáticamente contra el banco: la verificación es manual y sin plazo modelado.
  • No expirar el pedido cuando la transferencia nunca se acredita.
  • No ejecutar reembolsos: refundPayment solo deja constancia en la sesión.