API Technical Docs

Mantente al día con las innovaciones tecnológicas que están transformando el mercado.

Expiración y pagos tardíos

Estado documental: Contrato propuesto. La duración exacta de la observación posterior depende de la configuración y del servicio contratado.

Qué es un pago tardío

Un pago tardío es un ingreso identificado después de que la experiencia de cobro dejó de estar activa.

Puede ocurrir después de:

  • vencer una sesión de Web Checkout;
  • expirar la vigencia operativa;
  • cancelar una orden;
  • cerrar un turno;
  • informar al comprador que la ventana terminó.
Sesión vencida
≠ imposibilidad de recibir dinero

Orden cancelada
≠ desaparición de un ingreso posterior

El vencimiento no elimina la operación financiera

YUPY puede continuar identificando ingresos posteriores asociados con una orden vencida o cancelada.

La documentación no promete un periodo universal. La ventana aplicable se define por configuración y contrato.

Flujo

Orden creada
        ↓
Checkout vence o la orden se cancela
        ↓
Comprador paga después
        ↓
YUPY identifica el ingreso
        ↓
No reactiva automáticamente la venta
        ↓
Genera un caso pendiente
        ↓
Alerta a la empresa

Estado separado

{
  "state": {
    "operational": "expired",
    "financial": "late_detected"
  }
}

Una orden puede estar operativamente vencida y, al mismo tiempo, tener dinero identificado.

Acciones de YUPY

YUPY debe:

  • conservar la relación con la orden original;
  • registrar el resultado financiero;
  • identificar que ocurrió fuera de la ventana;
  • crear un pendiente;
  • alertar a los responsables configurados;
  • mostrarlo en los reportes;
  • entregar la información necesaria para resolverlo.

YUPY no debe:

  • reactivar automáticamente la venta;
  • entregar automáticamente el producto;
  • aceptar comercialmente el pago en nombre de la empresa;
  • devolver automáticamente el dinero.

Decisión de la empresa

aceptar el pago tardío
continuar la venta
reprogramar el servicio
mantener el caso pendiente
rechazar la operación comercial
crear un caso de devolución

Toda decisión debe quedar auditada.

Comunicación al comprador

Detectamos un pago realizado después de la vigencia
de la operación.

La empresa debe revisar el caso.
Conserva tu código de transacción.

YUPY no comunica que el pago fue aceptado comercialmente hasta que la empresa lo determine.

Alertas

La empresa puede configurar alertas para:

  • vendedor;
  • supervisor;
  • responsable del dispositivo;
  • administrador;
  • otra persona autorizada.

Canales posibles:

WhatsApp
correo electrónico
chat operativo
consola
webhook

Webhook relacionado

Este ejemplo reutiliza el evento y el sobre canónico documentados en API y Webhooks.

{
  "event_id": "evt_01J007",
  "event_type": "payment.late_detected",
  "event_version": "1.0",
  "created_at": "2026-07-20T15:10:00-05:00",
  "data": {
    "payment_order_uid": "pay_01JXYZ",
    "external_transaction_id": "ORDER-10482",
    "expected_amount": "85.50",
    "detected_amount": "85.50",
    "currency": "PEN",
    "detected_at": "2026-07-20T15:10:00-05:00",
    "state": {
      "operational": "expired",
      "financial": "late_detected"
    },
    "action_required": "client_review"
  }
}

Pago posterior a una cancelación

cancelled
+ ingreso identificado
→ cancelled_order_with_payment
→ pending case

La cancelación no se elimina ni se transforma silenciosamente.

Reportes

Los pagos tardíos deben aparecer en:

  • reporte de pagos tardíos;
  • bandeja de pendientes;
  • reporte de transacciones;
  • reporte de conciliación;
  • reporte de canceladas con pago;
  • resumen operativo correspondiente;
  • exportaciones programadas cuando estén configuradas.

Criterios de aceptación

  1. La expiración no borra la orden.
  2. La cancelación no oculta ingresos posteriores.
  3. El pago tardío se asocia con la orden original.
  4. No se reactiva automáticamente la venta.
  5. Se crea un pendiente.
  6. Se alerta a la empresa.
  7. La empresa decide la resolución comercial.
  8. Una devolución sigue siendo ejecutada por la empresa.
  9. El caso conserva trazabilidad.
  10. El caso aparece en reportes y auditoría.

Payment Order / API Engine v1.0

Quién define el timeout de la Payment Order

El caller no controla la vigencia de la Payment Order enviando expires_in_seconds. Para Web Checkout, YUPY resuelve la duración efectiva desde la policy canónica aplicable al cliente autenticado, Counter, canal y payment_method; el instrumento concreto se resuelve internamente.

cliente autenticado
+ Counter resuelto
+ channel
+ payment_method
        ↓
master_data policy
        ↓
instrumento resuelto por YUPY
timeout_seconds
        ↓
Payment Order / expires_at

Esto permite que la política cambie en el futuro sin alterar retroactivamente la vigencia que fue aplicada a una Payment Order ya creada.

Payment Order y checkout session tienen relojes distintos

payment_order.expires_at
≠
checkout_session.expires_at

payment_order.expires_at controla el lifecycle de la orden y la ocupación de su Counter. checkout_session.expires_at controla la sesión, token o experiencia Web. Una sesión Web puede vencer sin borrar la Payment Order, y una nueva sesión puede ser posible mientras el lifecycle de la Payment Order lo permita.

Qué ocurre al expirar o cancelar la Payment Order

Cuando la Payment Order alcanza expired o cancelled, se considera terminal: YUPY registra closed_at y libera inmediatamente el Counter que estaba adquirido en exclusividad.

Payment Order abierta
Counter adquirido
        ↓
expires_at o cancelación
        ↓
expired / cancelled
closed_at
COUNTER_RELEASED
ORDER_CLOSED

El Counter queda disponible para nuevas Payment Orders. La observación financiera posterior de la orden histórica continúa sin mantener ocupado ese recurso operativo.

Pago detectado después del cierre

Si Reconciliation o una fuente financiera identifica posteriormente un ingreso asociado a la Payment Order histórica, YUPY conserva el estado terminal operativo original y registra la evidencia tardía en la dimensión financiera.

Payment Order = expired o cancelled
Counter = released
        ↓
ingreso identificado después
        ↓
late_detected
payment.late_detected
        ↓
pending case / client_review

El pago tardío no reabre la Payment Order original. Tampoco elimina closed_at, no cambia silenciosamente expired o cancelled a confirmed y no vuelve a ocupar el Counter ya liberado.

La evidencia financiera queda asociada a la Payment Order original para trazabilidad, conciliación, reportes y revisión. La empresa decide la resolución comercial posterior, incluyendo aceptación, ajuste, nueva venta o devolución según corresponda.

Webhook público

Se conserva payment.late_detected como evento público. El payload utiliza payment_order_uid para identificar la Payment Order histórica y external_transaction_id para correlacionarla con el sistema origen.

Métricas

Cuando los timestamps estén disponibles, YUPY puede distinguir el tiempo operativo de presentación del tiempo financiero de confirmación o detección:

presented_at
confirmed_at
detected_at
closed_at

En un pago tardío puede existir detected_at > closed_at. Esa relación temporal es normal y no implica reapertura del recurso operativo.

Changelog — Payment Order / API Engine

2026-08-09 — Payment Order / API Engine v1.0: se renombró en esta página la identidad canónica pública yupy_transaction_id a payment_order_uid; se estableció que el timeout de la Payment Order proviene de una política de YUPY y no de expires_in_seconds enviado por el caller; se separaron payment_order.expires_at y checkout_session.expires_at; se documentó que expired y cancelled registran closed_at y liberan el Counter; y se fijó que payment.late_detected conserva la evidencia histórica sin reabrir ni reocupar la Payment Order original.