Disputas de Crédito
Requisitos previos de acceso
- Permiso (módulo):
creditDispute(abrir/actualizar disputas). - 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 Disputas registra y resuelve impugnaciones vinculadas a un Cobro — por ejemplo, el deudor alega que ya pagó, que el cobro es fraudulento o duplicado. Cada disputa tiene tipo, motivo, quién la abrió, estado de avance y, en la resolución, quién la resolvió y las notas correspondientes.
Use esta pantalla para abrir una disputa contra un cobro específico y para actualizar/resolver disputas existentes (en revisión, resuelta válida, resuelta inválida).
Requisitos previos
- Permiso:
creditDispute(permiso doble — enum CPM + módulo dinámico en la DB). - Licencia/Feature:
CREDIT_INVESTMENTShabilitada. Sin ella el grupo ni siquiera aparece en el menú. - Dependencias de otras pantallas: es obligatorio seleccionar un Cobro existente (Cobros) — la disputa siempre se vincula por
chargeId.
Paso a paso
- Acceda al menú Crédito Tokenizado → Disputas.
- Busque y seleccione un Cobro (la búsqueda filtra por código de referencia/ID).
- Se cargan las disputas de ese cobro.
- Para abrir una nueva: elija el Tipo y describa el Motivo, luego haga clic en Crear disputa (confirma en el bottom-sheet).
- Para gestionar una existente: ⋮ → Actualizar abre el diálogo para cambiar el Estado y registrar las Notas de resolución.
Filtros y columnas
| Filtro/Columna | Qué muestra | Origen del dato |
|---|---|---|
| Cobro (selector) | Cobro seleccionado para listar sus disputas | búsqueda sobre getCharges(); obligatorio |
| Cobro (columna) | Código/ID del cobro | Dispute.chargeId (resuelto vía chargeMap) |
| Tipo | DEBTOR_CLAIM, FRAUD, DUPLICATE, OTHER | Dispute.disputeType |
| Estado | Avance: UNDER_REVIEW, RESOLVED_VALID, RESOLVED_INVALID (entre otros del backend) | Dispute.status |
| Abierta el | Fecha de apertura | Dispute.openedAt |
| Resuelta el | Fecha de resolución | Dispute.resolvedAt |
Campos (apertura de disputa)
| Campo | Qué es | ¿Obligatorio? | Efecto en el sistema/backend |
|---|---|---|---|
| Tipo | Naturaleza de la impugnación | Sí | Guardado en disputeType; default DEBTOR_CLAIM. |
| Motivo | Texto libre describiendo la disputa | No | Guardado en disputeReason. |
| Abierta por | Operador que la abrió | Automático | openedBy = ID del operador conectado (o system). |
Actualización (diálogo)
| Campo | Qué es | ¿Obligatorio? | Efecto en el sistema/backend |
|---|---|---|---|
| Estado | UNDER_REVIEW / RESOLVED_VALID / RESOLVED_INVALID | Sí | updateDispute(id, { status }); sin estado la actualización es bloqueada. |
| Notas de resolución | Justificación de la decisión | No | Guardado en resolutionNotes; resolvedBy = operador conectado. |
Acciones y modales
- Seleccionar cobro / Limpiar: define el
chargeIdque filtra/abre disputas. - Crear disputa:
createDispute(chargeId, { disputeType, disputeReason, openedBy })tras confirmación. Requiere cobro seleccionado. - Actualizar (diálogo):
updateDispute(id, { status, resolutionNotes, resolvedBy }); resolver comoRESOLVED_VALID/RESOLVED_INVALIDcierra la disputa.
Abrir/resolver disputas puede activar step-up (contraseña + MFA, X-Step-Up-Token) según el entorno.
Reglas de negocio / precauciones
Atención
- Cobro obligatorio. La disputa siempre es por cobro; sin seleccionarlo, la pantalla bloquea la creación/listado.
- Resolver es una decisión de fondo.
RESOLVED_VALID(la impugnación procede) vsRESOLVED_INVALID(no procede) tiene efectos distintos aguas abajo — registre las notas de resolución para auditoría. - Una resolución válida puede activar una recompra/ajuste. Una disputa válida de fraude/duplicidad frecuentemente lleva a una Recompra o cancelación del deal.