Gestionar Retiros
Requisitos previos de acceso
- Permiso (módulo):
viewWithdrawals(para ver el listado). Las acciones de aprobar/rechazar exigen también los módulosapproveWithdrawalycancelWithdrawal. - Licencia/Feature:
WITHDRAWAL_HANDLING. La pestaña Banco Digital (retiro fiduciario interno) solo aparece cuando la featureDIGITAL_BANKINGtambién está habilitada. - Contenedor del menú: GENERAL → grupo Operaciones
Qué es / cuándo usar
Pantalla central de aprobación de retiros solicitados por los usuarios. Las solicitudes se separan por tipo de destino en pestañas: Fiduciario (FIAT — retiro bancario externo), Banco Digital (INTERNAL_FIAT — transferencia interna entre cuentas digitales) y Bitcoin/ETH (cripto on-chain). El operador revisa los datos de la solicitud (cuenta destino, clave PIX, dirección de billetera y los campos personalizados por token), aprueba — lo que dispara la salida efectiva del dinero — o rechaza, devolviendo el importe reservado.
Requisitos previos
- Permiso:
viewWithdrawalspara ver;approveWithdrawal/cancelWithdrawalpara actuar (permiso doble — enum CPM + módulo dinámico en DB). - Licencia/Feature:
WITHDRAWAL_HANDLINGhabilitada;DIGITAL_BANKINGpara la pestaña Banco Digital. - Dependencias de otras pantallas: el usuario objetivo debe estar
APPROVED(KYC) y tener saldo reservado. Los retiros de billeteras en estado de captación (IN_CAPTATION) quedan bloqueados por la propia reserva. Solo es posible actuar sobre solicitudes en Pendiente.
Paso a paso
- Acceda al menú Operaciones → Gestionar retiros.
- Elija la pestaña de destino: Fiduciario, Banco Digital o Bitcoin/ETH (la pestaña seleccionada se guarda en la sesión).
- Filtre por estado (Todos, Aprobado, Cancelado, Pendiente) y busque por nombre.
- Haga clic en el ícono de detalles (info) para abrir el modal con todos los datos de la solicitud, incluidos los campos personalizados por token y los valores sensibles enmascarados.
- Apruebe para liberar el dinero o rechace para devolver el importe a la billetera. Confirme en el bottom-sheet.
Filtros y columnas
| Filtro/Columna | Qué muestra | Origen del dato |
|---|---|---|
| Pestaña (tipo) | FIAT / INTERNAL_FIAT / BTC-ETH | type de la solicitud; pestaña persistida en MANAGE_WITHDRAWAL_TABLETYPE |
| Búsqueda | Filtro local por nombre del solicitante | name |
| Estado | Pendiente / Aprobado / Cancelado / Todos | status |
| Fecha | Fecha de la solicitud | when (ordenado DESC) |
| ID / Identificador | ID de la solicitud y CPF/CNPJ/pasaporte | id / identifier (resuelto por userId) |
| Importe | Monto solicitado | amount (BigNumber) |
| Estado | Estado de la solicitud | status |
Modal de detalles
Muestra: nombre, importe + unidad, banco, agencia, cuenta, clave PIX, identificador, estado, fecha y la lista de campos personalizados definidos por el token. Los campos marcados como secure aparecen enmascarados (••••••); los booleanos se convierten en Sí/No; las fechas se formatean. Estos campos provienen del schema withdrawal_custom_fields del token y son revalidados en el backend (tipo, regex, rangos, opciones de select).
Acciones y modales
- Aprobar: bottom-sheet de confirmación →
updateWithdrawal(id, 'APPROVED'). El backend (FMS – Withdrawal) ejecuta la salida efectiva del dinero (transferencia bancaria, transferencia interna o broadcast on-chain según el tipo). La página se recarga. - Rechazar: bottom-sheet →
updateWithdrawal(id, 'CANCELLED'). Devuelve el importe reservado a la billetera del usuario. - Abrir usuario: navega a los detalles del usuario por correo electrónico.
- Guía de ayuda (auto_stories): abre el modal de solución de problemas de la pantalla.
Reglas de negocio / precauciones
Atención
- Aprobar/rechazar solo está disponible para solicitudes en Pendiente.
- La pestaña Banco Digital depende de la feature
DIGITAL_BANKING; sin ella, solo aparecen Fiduciario y Bitcoin/ETH. - Verifique los campos personalizados (ej.: dirección de billetera externa, clave PIX) antes de aprobar — contienen el destino real del dinero.
Irreversible
- Aprobar dispara la salida efectiva del dinero (transferencia bancaria / on-chain). Una vez confirmado, no hay rollback — un envío on-chain o una transferencia bancaria no pueden deshacerse desde la plataforma.
- Valores financieros: tratados como BigNumber — sin redondeo; verificar los decimales del token/moneda.
- Idempotencia: la liquidación del retiro en FinLib es idempotente por
externalId. Si el backend devuelveE00021"already processed" (ej.: reintento tras timeout/crash), el retiro ya fue procesado — trátelo como éxito, no reenvíe. - Status APPROVED: el usuario objetivo debe estar
APPROVED.
Ejemplos
Escenario 1 — Retiro fiduciario (FIAT) via PIX a banco externo
- Pestaña Fiduciario, estado Pendiente.
- Abra los detalles y verifique nombre, importe, banco, agencia, cuenta y clave PIX.
- Compare el nombre del titular con el del usuario (prevención de retiro a terceros).
- Aprobar → el FMS activa la transferencia bancaria externa. Resultado: el estado pasa a
APPROVED, el importe sale de la casa y la reserva se consume.
Escenario 2 — Retiro interno entre cuentas digitales (Banco Digital)
- Pestaña Banco Digital (requiere
DIGITAL_BANKING). - El destino es otra cuenta digital del ecosistema — no hay transferencia bancaria externa.
- Aprobar → el FMS realiza la transferencia interna
INTERNAL_FIAT. Liquidación inmediata, sin ventana bancaria.
Escenario 3 — Retiro cripto (BTC/ETH) con dirección en campo personalizado
- Pestaña Bitcoin/ETH.
- En los detalles, la dirección de la billetera de destino aparece en los campos personalizados definidos por el token (validados por regex en el schema del token).
- Verifique la dirección con cuidado — el envío on-chain es definitivo.
- Aprobar → broadcast on-chain. Si hay un reintento y el backend devuelve
E00021, la transacción ya fue enviada; no reenvíe.