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.

Reglas de diseño
  1. 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.
  2. Orden de cálculo: primero las promociones de TsPromos; después el recargo o descuento del plan, sobre el total post-promociones.
  3. Total del ticket = monto cotizado = importe autorizado por APICARD = suma de los movimientos PAGO.
  4. 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 backend cotiza cada plan y el AutoServicio autoriza el monto elegido El backend cotiza cada plan y el AutoServicio autoriza el monto elegido AutoServicio apidriver UltraHost TsTicket TsPromos APICARD Leer tarjeta BIN Planes con rec/desc Emisor y planes Cotizar planes Promos por plan Monto por ítem Monto final por plan Autorizar monto Autorizar Aprobado Aprobado Confirmar pago Suma rec/desc del plancomo post-promoción Cliente elige plan Aplica la cotización tal cualSin volver a TsPromosPAGO y CAE
Secuencia de punta a punta del pago con tarjeta.
  1. El AutoServicio le pide al apidriver la lectura de la tarjeta. El PINPAD la lee y el apidriver envía el BIN al UltraHost.
  2. El UltraHost devuelve el emisor y sus planes de pago. Cada plan puede traer un recargo o un descuento; es opcional.
  3. El apidriver devuelve ese listado al AutoServicio.
  4. El AutoServicio pide al backend que cotice los planes: envía el ticket, el emisor y los planes con su recargo o descuento.
  5. Para cada plan, TsTicket obtiene de TsPromos las promociones vigentes y aplica el recargo o descuento del plan sobre el total post-promociones.
  6. 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").
  7. El cliente elige un plan y el AutoServicio pide al apidriver autorizar ese monto.
  8. 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.

Con la cotización persistida, la medianoche no cambia el monto Con la cotización persistida, la medianoche no cambia el monto 23:59:58 · Cotiza23:59:59 · Autoriza00:00:01 · Imputa 00:00 · vence la promo Banco X Si se recalcula al imputarCon la cotización persistida Promo X vigenteMuestra $ 9.900 Cobra $ 9.900APICARD aprueba Recalcula: $ 11.000No cierra con lo cobrado Guarda cotizaciónPromo X y recargo Cobra $ 9.900APICARD aprueba Aplica la guardadaTicket $ 9.900
Pago antes de medianoche, imputación después · recalcular contra persistir.

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.

Cada plan se cotiza: promos primero, recargo del plan después Cada plan se cotiza: promos primero, recargo del plan después Post-promoción virtual por plan TicketLista $ 10.000 Promos TsPromosPor ítem, cliente, vigenciaSubtotal $ 9.000 1 pago · sin rec/descMonto final $ 9.000 3 cuotas · +5 %$ 9.000 + 5 % = $ 9.450 6 cuotas · +10 %$ 9.000 + 10 % = $ 9.900 RespuestaEmisor ymonto por plan TsPromos se evalúa por cada plan: una promo puede aplicar sólo a algunos planes del emisor. Recargo o descuento del plan (UltraHost, opcional), sobre el total post-promos
Cálculo por plan · promos de TsPromos y después el rec/desc del plan.

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íneaOrigenCómo se asigna a los ítems
Promociones vigentesTsPromosComo las calcula TsPromos (ítem, rubro, cliente, topes)
Post-promoción virtual del plan (PLAN_TARJETA)UltraHost: rec/desc del planEn 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:

PlanRec/desc del HostBase post-promos ($)Monto final ($)
1 pagoSin rec/desc9.000,009.000,00
3 cuotas+5 %9.000,009.450,00
6 cuotas+10 %9.000,009.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:

ÍtemIVALista ($)Promo TsPromos ($)Post-promos ($)Recargo plan ($)Final ($)Neto ($)IVA contenido ($)
Artículo 121 %4.000,00−571,433.428,57+342,863.771,433.116,88654,55
Artículo 210,5 %3.000,00−428,572.571,43+257,142.828,572.559,79268,78
Artículo 321 %2.000,000,002.000,00+200,002.200,001.818,18381,82
Artículo 4Exento1.000,000,001.000,00+100,001.100,001.100,000,00
Total10.000,00−1.000,009.000,00+900,009.900,008.594,851.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.

El monto se fija antes de autorizar; después sólo se aplica El monto se fija antes de autorizar; después sólo se aplica Denegado: elegir otro plan Ticket modificado: recotizar Falla: reintentar sin volver a cobrar Tarjeta leídaBIN al UltraHost Planes cotizadosUltraHost + TsPromos Plan elegidoMonto final fijo AutorizandoAPICARD AprobadoOrden pagada Ajuste pendientePersistido Ajuste aplicadoCotización del plan Ticket cerradoPAGO y CAE Pasos donde interviene la cotización · Punteado: transición de error
Estados del pago con tarjeta · 8 estados, 3 transiciones de error.

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.