El plugin soporta transferencias y reembolsos intra-PSP. Los liquida internamente y reporta cada uno a BACEN a través de TRCK002.
Detección
El plugin marca una transferencia como intra-PSP cuando el ISPB de destino coincide con tu
PIX_ISPB configurado:
La detección es interna. La respuesta de iniciación y el estado del cashout coinciden con los de una transferencia externa. El plugin enruta una transferencia intra-PSP por la ruta de liquidación interna en lugar de BTG.
Modelo de procesamiento
Una transferencia intra-PSP usa el mismo enrutamiento de Midaz que una transferencia externa, a través de la cuenta de tránsito
@external. El comportamiento del libro mayor es idéntico. El plugin liquida la transferencia de forma síncrona y no espera los webhooks de BTG.
El plugin crea dos transacciones de Midaz por transferencia:
- Cashout —
source → @external(pending: false) - Cashin —
@external → destination(pending: false)
CashinApprovalCommand y CashinSettlementCommand que un cash-in externo. Estos pipelines ejecutan la validación de alias de CRM, las verificaciones de saldo, la titularidad de la clave PIX, la finalización del cobro y el cálculo de tarifas.
Flujo
El cashout responde con
PROCESSING, como un cashout externo que espera a BTG. El plugin entrega el estado final (COMPLETED o FAILED) de forma asíncrona a través de un webhook saliente. El endpoint intra-PSP es idempotente, por lo que los reintentos del worker nunca duplican transacciones.Reporte regulatorio TRCK002
El plugin reporta cada transacción intra-PSP exitosa a BACEN a través del endpoint TRCK002 de BTG.
- El reporte TRCK002 es no bloqueante. Una falla de reporte nunca revierte la transacción de Midaz ni la finalización de la transferencia. El plugin reintenta un reporte fallido.
- El plugin crea un
TransactionReportpor cada transacción. Después de que BTG acepta el envío, el estado del reporte pasa aPROCESSINGy lleva unpactualId. - BTG envía las actualizaciones de estado del reporte a través de un webhook CAMT025, de tipo
PIX_INTERNAL_TRANSACTIONS_REPORT. El webhook mueve el reporte aCONFIRMED(terminal) oERROR(recuperable). - También puedes consultar un reporte por end-to-end ID o por identificación de devolución cuando un webhook no llega.
Reembolsos intra-PSP
El plugin también procesa un reembolso de forma interna cuando el cash-in original fue intra-PSP:
- El plugin detecta intra-PSP a partir de la transferencia original, cuando su ISPB de origen y de destino coinciden.
- Debita al solicitante del reembolso (
requester → @external). Luego entrega el cash-in del reembolso al remitente original a través del mismo patrón de cola y endpoint. - El plugin reporta el reembolso a TRCK002 con un
returnIdentification. - El plugin persiste un webhook saliente
REFUND(flujo DICT) para notificar al solicitante, y la liquidación de cash-in intra-PSP encolacashin.completedpara el remitente original.
Motivos de falla
El plugin entrega una falla de validación de cash-in de forma asíncrona a través del webhook
cashout.failed. Para una falla intra-PSP, el webhook lleva el motivo INTRA_PSP_REJECTED y un mensaje saneado. Mensajes comunes:
Próximos pasos
- Webhooks — Envoltorio de eventos, reintentos y enrutamiento
- Operaciones de reembolso — Reembolsos distribuidos y desbloqueo
- Configurar la integración — Configuración de ISPB y del worker
- Referencia de API — Documentación completa de la API

