Resumen
En Autoservicio, el precio final de una compra con tarjeta depende del plan de cuotas que elige el cliente. La propuesta es que el backend cotice cada plan antes de autorizar: primero aplica las promociones vigentes de TsPromos y, sobre ese total, el recargo o descuento que el UltraHost informa para el plan, si lo hay. El cliente ve el monto final de cada plan, se autoriza ese monto y TsTicket cierra el ticket exactamente por lo cobrado.
- El monto de cada plan se define antes de autorizar. Después de autorizar no se recalcula nada: se aplica la cotización del plan elegido.
- Orden de cálculo: primero las promociones de TsPromos; después el recargo o descuento del plan, sobre el total post-promociones.
- Total del ticket = monto cotizado = importe autorizado por APICARD = suma de los movimientos PAGO.
- Todo el ajuste queda en el ledger, por ítem: las promos como las asigna TsPromos y el recargo del plan repartido en proporción.
Alcance: consumidor final (Factura B), sin percepciones, un único pago con tarjeta por ticket, sin cashback.
Cómo funciona
El backend cotiza todos los planes antes de que el cliente elija. Después de la aprobación sólo se aplica la cotización del plan elegido.
- El AutoServicio le pide al apidriver la lectura de la tarjeta. El PINPAD la lee y el apidriver envía el BIN al UltraHost.
- El UltraHost devuelve el emisor y sus planes de pago. Cada plan puede traer un recargo o un descuento; es opcional.
- El apidriver devuelve ese listado al AutoServicio.
- El AutoServicio pide al backend que cotice los planes: envía el ticket, el emisor y los planes con su recargo o descuento.
- Para cada plan, TsTicket obtiene de TsPromos las promociones vigentes y aplica el recargo o descuento del plan sobre el total post-promociones.
- El backend devuelve el emisor con cada plan y su monto final, y persiste la cotización de cada plan (ver "Por qué se persiste la cotización").
- El cliente elige un plan y el AutoServicio pide al apidriver autorizar ese monto.
- Con la aprobación, el AutoServicio confirma el pago al backend. TsTicket aplica la cotización de ese plan tal cual, imputa el PAGO y cierra el ticket.
Condiciones del diseño:
- Cotización persistida: lo que se muestra es lo que se aplica. Al confirmar el pago, TsTicket toma la cotización guardada del plan elegido y no vuelve a calcular promociones.
- Ticket modificado: si se agrega o quita un ítem antes de autorizar, la cotización se descarta y se recotiza. Todavía no se cobró nada.
- Coherencia: si el importe autorizado no coincide con el monto cotizado del plan, es un error explícito, no una compensación.
- TsPromos sin respuesta: falla antes de cobrar. Se reintenta o se ofrecen los planes sólo con su recargo (decisión pendiente).
Por qué se persiste la cotización
Si el backend recalculara las promos al confirmar el pago, el resultado podría no coincidir con lo cobrado. Por ejemplo: el cliente paga a las 23:59:59 con una promo que vence a medianoche y la imputación llega a las 00:00:01. Al recalcular, la promo ya no está vigente (o entró otra) y el ticket no cierra contra el cobro.
Qué se persiste por cada plan, en el momento de cotizar:
- Las promociones aplicadas por TsPromos, con su importe por ítem.
- El recargo o descuento del plan (post-promoción virtual), con su reparto por ítem.
- El monto final, el emisor, el plan y las cuotas.
- El identificador de la cotización, que viaja con la autorización y con la confirmación del pago.
La vigencia de las promos se evalúa una sola vez, al cotizar. Al confirmar, TsTicket vuelca al ledger la cotización del plan elegido tal cual fue guardada.
Costo: una llamada más al backend antes de mostrar los planes. Cambian el apidriver y el AutoServicio (pedir la cotización y mostrarla), TsTicket (cotización por plan y su guardado) y TsPromos (evaluar las promos para cada plan).
Cómo se calcula cada plan
Cada plan de pago del emisor se cotiza por separado. El recargo o descuento que el UltraHost informa para el plan entra como una post-promoción virtual: una promoción más del ticket, que TsTicket aplica después de todas las de TsPromos y sobre su resultado. Es opcional: si el plan no trae recargo ni descuento, su monto final es el total post-promociones.
Por qué este orden:
- Un recargo del 10 % es sobre lo que el cliente efectivamente paga, no sobre el precio de lista.
- Las promos de TsPromos pueden depender del emisor, del plan o de los ítems; por eso se evalúan para cada plan.
- El UltraHost sólo conoce emisor y plan. La selectividad por ítem, cliente y vigencia queda en TsPromos.
Qué queda en el ledger del ticket, por ítem:
| Línea | Origen | Cómo se asigna a los ítems |
|---|---|---|
| Promociones vigentes | TsPromos | Como las calcula TsPromos (ítem, rubro, cliente, topes) |
Post-promoción virtual del plan (PLAN_TARJETA) | UltraHost: rec/desc del plan | En proporción al importe de cada ítem después de promociones |
Cada línea lleva emisor, plan, cuotas, importe con signo (negativo = descuento, positivo = recargo) y la referencia a la cotización y a la autorización de APICARD.
Reglas del reparto de la post-promoción virtual:
- Base: ítems elegibles, con su importe después de promociones. Los rubros excluidos de planes quedan afuera (lista a definir).
- Proporción: según el importe de cada ítem después de promociones.
- Redondeo: a 2 decimales; el centavo sobrante va al ítem de mayor importe.
- Cierre: la suma de las partes es exactamente el recargo o descuento del plan.
Ejemplo por ítem
Un ticket de $10.000 con cuatro artículos, pagado con una tarjeta del Banco X. Montos ilustrativos.
Promociones de TsPromos. El Banco X tiene 20 % de descuento en los rubros de los artículos 1 y 2, con tope de $1.000. El 20 % de $7.000 da $1.400; con el tope, el descuento es $1.000 y el total post-promociones queda en $9.000.
Planes que devuelve el UltraHost y monto final cotizado por el backend:
| Plan | Rec/desc del Host | Base post-promos ($) | Monto final ($) |
|---|---|---|---|
| 1 pago | Sin rec/desc | 9.000,00 | 9.000,00 |
| 3 cuotas | +5 % | 9.000,00 | 9.450,00 |
| 6 cuotas | +10 % | 9.000,00 | 9.900,00 |
El cliente elige 6 cuotas. El recargo de +$900 se reparte en proporción al importe post-promociones de cada ítem, y cada parte toma la alícuota de su ítem:
| Ítem | IVA | Lista ($) | Promo TsPromos ($) | Post-promos ($) | Recargo plan ($) | Final ($) | Neto ($) | IVA contenido ($) |
|---|---|---|---|---|---|---|---|---|
| Artículo 1 | 21 % | 4.000,00 | −571,43 | 3.428,57 | +342,86 | 3.771,43 | 3.116,88 | 654,55 |
| Artículo 2 | 10,5 % | 3.000,00 | −428,57 | 2.571,43 | +257,14 | 2.828,57 | 2.559,79 | 268,78 |
| Artículo 3 | 21 % | 2.000,00 | 0,00 | 2.000,00 | +200,00 | 2.200,00 | 1.818,18 | 381,82 |
| Artículo 4 | Exento | 1.000,00 | 0,00 | 1.000,00 | +100,00 | 1.100,00 | 1.100,00 | 0,00 |
| Total | 10.000,00 | −1.000,00 | 9.000,00 | +900,00 | 9.900,00 | 8.594,85 | 1.305,15 |
Total del ticket = monto cotizado = importe autorizado = $9.900; neto + IVA contenido = $9.900.
Ciclo de vida del pago
Todo lo que puede cambiar el monto pasa antes de autorizar; después de la aprobación sólo se aplica la cotización del plan elegido.
Cómo se manejan los fallos:
- Denegado: el cliente elige otro plan. No se registró nada en el ledger.
- Ticket modificado: se recotiza antes de autorizar.
- TsPromos sin respuesta: pasa antes de cobrar, así que no hay plata en juego.
- Falla después de aprobar (al aplicar la cotización, imputar o pedir el CAE): la orden queda pagada y el ajuste pendiente queda persistido. Se recupera esa misma orden; nunca se inicia otro cobro. Este mecanismo se mantiene del diseño anterior.
- En el kiosco no hay cajero: la pantalla confirma que el pago quedó registrado, y si la recuperación no termina se avisa al supervisor.