Recompras (Buybacks)
Requisitos previos de acceso
- Permiso (módulo):
repurchaseTokens(ejecutar recompra). Visualizar requiere acceso al grupo (viewCredits). - Licencia/Feature:
CREDIT_INVESTMENTShabilitada en la licencia del tenant (Vault). - Contenedor del menú: TOKENIZACIÓN → grupo Crédito Tokenizado
Qué es / cuándo usar
La pantalla de Recompras gestiona las solicitudes de buyback — cuando el originador (o la casa) necesita recomprar la posición en un Deal, devolviendo el capital al inversor. Las recompras surgen de eventos como violación de contrato, fraude, cuentas por cobrar inválidas o liquidación anticipada.
Use esta pantalla para localizar un deal, listar sus solicitudes de recompra y ejecutar las que están aprobadas/pendientes, disparando la devolución financiera al inversor y la baja de la posición (incluyendo la quema de las unidades tokenizadas, cuando corresponda).
Requisitos previos
- Permiso:
repurchaseTokens(permiso doble — enum CPM + módulo dinámico en la BD). - Licencia/Feature:
CREDIT_INVESTMENTShabilitada. Sin ella el grupo ni siquiera aparece en el menú. - Dependencias de otras pantallas: es necesario seleccionar un Deal existente; la solicitud de recompra debe existir (originada por el flujo del deal/cuenta por cobrar).
Paso a paso
- Acceda al menú Crédito Tokenizado → Recompras.
- Busque y seleccione un Deal en el campo de búsqueda (la lista carga los deals; filtra por número/ID).
- Las solicitudes de recompra de ese deal se cargan.
- Para una solicitud ejecutable, use Ejecutar → confirme en el bottom-sheet.
Filtros y columnas
| Filtro/Columna | Qué muestra | Origen del dato |
|---|---|---|
| Deal (selector) | Deal seleccionado para listar sus recompras | búsqueda sobre getDeals(); obligatorio |
| Deal (columna) | Número/ID del deal de la solicitud | BuybackRequest.dealId (resuelto via dealMap) |
| Originador | Cedente asociado | BuybackRequest.originatorId (resuelto via originatorMap) |
| Valor | Monto a recomprar | BuybackRequest.buybackAmount (BigNumber) |
| Motivo | CONTRACT_VIOLATION, FRAUD, INVALID_RECEIVABLES, EARLY_SETTLEMENT, OTHER | BuybackRequest.reason (+ reasonDetails) |
| Estado | REQUESTED, PENDING, APPROVED, EXECUTED, REJECTED, FAILED | BuybackRequest.status |
| Creado en | Fecha de la solicitud | BuybackRequest.createdAt |
Acciones y modales
- Seleccionar deal / Limpiar: define el
dealIdque filtra las solicitudes; sin deal seleccionado la pantalla advierte que es obligatorio. - Ejecutar:
executeBuyback(requestId, approvedBy)tras confirmación (bottom-sheet). ElapprovedByes el ID del operador logueado (osystem). Mueve la solicitud aEXECUTED, devolviendo el capital al inversor y dando de baja la posición.
Por ser una operación financiera sensible (devolución + quema de posición), la ejecución puede disparar step-up (contraseña + MFA, X-Step-Up-Token, ventana de 5 min) según el entorno — reconfirmación de identidad, no aprobación 4-eyes.
Reglas de negocio / consideraciones
Atención
- Deal obligatorio. La lista de recompras solo carga después de seleccionar un deal; no existe vista global de todas las recompras en esta pantalla.
- El motivo importa para la auditoría.
reason/reasonDetailsexplican la recompra (fraude, violación, etc.) y deben coincidir con el eventual Cancelamiento del deal.
Irreversible
- Ejecutar una recompra es definitivo. Dispara la devolución financiera al inversor y la baja/quema de las unidades tokenizadas de la posición. No existe rollback — una recompra equivocada requiere un nuevo evento financiero compensatorio.
- Valores financieros:
buybackAmountes BigNumber en el backend; verifique los decimales antes de confirmar. - Idempotencia: la devolución financiera pasa por FinLib y es idempotente por externalId — si se reprocesa, el error
E00021("already processed") significa éxito (ya liquidado), no falla. Ver [[reference_finlib_idempotency]].