Saltar al contenido principal

Negociación y acuerdos

Un acuerdo consolida una o más deudas del cliente en un plan de cuotas, con o sin descuento, dentro de las condiciones que tú autorizaste. Puede nacer de dos maneras: propuesto por el operador (dashboard o API) o aceptado por el propio deudor en el portal de autoservicio.

Detalle de un acuerdo

Anatomía de un acuerdo​

CampoSignificado
Valor originalSuma de los valores actualizados de los cobros incluidos
DescuentoValor rebajado (limitado por la oferta/campaña activa)
Valor finalOriginal − descuento: es lo que se pagará
CuotasCantidad y valor de cada cuota mensual
Primera cuotaFecha de vencimiento de la cuota 1
Términos aceptadosTexto de los términos al momento de la aceptación
IP de la aceptaciónDirección IP registrada como evidencia de la aceptación

Ciclo de vida​

proposed ──► accepted ──► active ──► completed
│ │ ├──► defaulted ──► active (regularizado)
└──► cancelled ◄─────────┘
  • Propuesto (proposed) — la propuesta existe, a la espera de aceptación. Solo las propuestas pueden ser aceptadas.
  • Aceptado (accepted) — aceptación registrada (con fecha, IP y términos); las cuotas se generan en este momento.
  • Activo (active) — acuerdo en pago.
  • Completado (completed) — todas las cuotas saldadas. Estado final. La conclusión es automática: pagar la última cuota completa el acuerdo, y la verificación diaria también completa acuerdos cuyas cuotas fueron todas liquidadas por otro camino.
  • Incumplido (defaulted) — acuerdo incumplido, detectado automáticamente: una verificación diaria marca las cuotas vencidas y da el acuerdo por incumplido cuando la más atrasada excede el período de gracia (por defecto: 5 días naturales, ajustable por acuerdo). Los cobros vuelven a la regla de cobranza en ese mismo momento. Puede regularizarse (vuelve a active) o cancelarse — ver Cuotas e incumplimiento.
  • Cancelado (cancelled) — cerrado sin conclusión; las cuotas pendientes se cancelan junto con él. Estado final.

Consulta los efectos del incumplimiento en Cuotas e incumplimiento.

Flujo del operador​

  1. En Acuerdos → Nuevo Acuerdo, elige el cliente, el valor, el descuento, el número de cuotas (hasta 120 vía API) y la fecha de la primera cuota. El acuerdo nace proposed.
  2. Cuando el cliente confirme, usa Aceptar Acuerdo: el sistema cambia el status a accepted, registra la fecha y el IP de la aceptación y genera las cuotas automáticamente.

:::note La aceptación es idempotente Solo un acuerdo proposed puede ser aceptado. Aceptar un acuerdo que ya salió de ese estado — porque ya fue aceptado o porque dos solicitudes corrieron al mismo tiempo — devuelve 409 (CONFLICT) sin efecto colateral: las cuotas nunca se generan por duplicado. :::

Flujo del portal (autoservicio)​

En el portal, el deudor selecciona los cobros, simula el plan de cuotas y acepta. Aquí está la protección más importante del flujo:

:::info Validación server-side de la propuesta El descuento y el plan de cuotas nunca se aceptan desde el navegador. En la aceptación, el servidor verifica la propuesta contra la oferta de negociación activa (campaña u oferta de la regla de cobranza): un descuento por encima de lo autorizado o cuotas más allá del tope son rechazados con error, y el intento queda registrado en el log de acceso como propuesta adulterada. Sin ninguna oferta activa, no hay descuento y el plan se limita a 12 cuotas. :::

En el portal, la primera cuota vence en 10 días y el plan de cuotas llega hasta el tope de la oferta (máximo absoluto de 24 cuotas). La aceptación registra IP, términos y una interacción en la línea de tiempo del cliente.

Efecto en la regla de cobranza​

El motor trata el acuerdo aceptado como salida exitosa de la regla de cobranza: el cobro pasa al status negotiated, el enrollment se concluye con el motivo agreement_accepted y los envíos pendientes se cancelan. La revalidación previa al envío garantiza que ningún mensaje de cobro salga hacia un cobro negociado — el deudor que cerró un acuerdo no sigue siendo cobrado por la deuda original.

Eventos e integración​

Los webhooks agreement.accepted (y demás eventos de acuerdo) notifican a tus sistemas en tiempo real — útil para emitir los boletos de las cuotas en tu ERP o gateway. Consulta la referencia de la API en /v1/agreements.