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:
refundPaymentsolo deja constancia en la sesión.