# Buenas prácticas: que la venta nunca se frene.

> Fuente: https://bonuxo.com/developers/buenas-practicas
> Buenas prácticas para integrar una caja con la API POS de Bonuxo: la venta nunca se frena, reintentos sin duplicar, carga diferida. Guía oficial Bonuxo.

Cómo tiene que reaccionar la caja cuando la conexión falla, cuando se reintenta y cuando el cliente quiere pagar con puntos.

## Cada situación, qué hace la caja

Situación

Qué hace la caja

La API no responde a tiempo

Cobra igual y reintenta acreditar los puntos más tarde, con la misma referencia. Nunca hace esperar al cliente en la fila.

Hay que reenviar un pedido

Usa la misma clave de idempotencia, generada una única vez del lado de la caja: reenviar el mismo pedido nunca lo ejecuta dos veces.

La caja estuvo sin conexión

Registra las ventas después, indicando la fecha real en que ocurrieron, hasta 30 días hacia atrás.

El cliente paga con puntos

Espera la confirmación de Bonuxo antes de aplicar el descuento.

## La venta nunca se frena

Acreditar puntos es algo que puede pasar un rato después de la venta. Si la API no responde a tiempo, la caja cobra con normalidad y reintenta más tarde con la misma referencia. El ticket es la clave de idempotencia: reintentar no duplica los puntos.

## El canje es la excepción

A diferencia de una venta, un canje de puntos sí necesita confirmación de Bonuxo antes de aplicar el descuento en la caja: no hay forma segura de "prometer" un canje sin esa confirmación.

**Un canje sin confirmar se anula solo.** Por defecto el canje queda pendiente hasta que la caja lo confirma con el ticket de la venta. Si nadie lo confirma en 30 minutos, se anula y el cliente recupera sus puntos.

## Ventas atrasadas y saldos de otro sistema

Para lo que no entra por la caja en el momento, existen las cargas por archivo CSV (lotes): ventas atrasadas de hasta 2 años y el saldo de apertura migrado de otro sistema (una sola vez por cliente). Pasan por el mismo motor e idempotencia que la API.

Hoy los lotes los sube el equipo de Bonuxo; el comercio ve el resultado y descarga las filas con error en **Integraciones › API › Cargas por lote**.
