BeneficiosCenter Propuesta comercial y técnica Tipre · septiembre 2026
Tipre
paraSuper MaMi DINODINI

Beneficios por medio de pago, decididos en milisegundos y configurados sin programar.

Un servicio central que le dice al GatewayQR qué descuento corresponde a cada tipo de cuenta DINI antes de autorizar el pago. Supermercados DINO lo configura desde una consola web; el POS no cambia su forma de cobrar.

Primer clienteSupermercados DINO · Córdoba
Medio de pagoDINI (Negocios y Gift Card)
IntegraciónGatewayQR de Tipre
Respuesta objetivomenos de 20 ms (p99)

El problema

Hoy un descuento por billetera QR implica tocar código en el POS y coordinar con la billetera cada vez que Marketing cambia la campaña. No hay un lugar único donde ver qué beneficio se ofreció, a quién y cuándo.

La propuesta

BeneficiosCenter concentra las reglas: qué porcentaje, para qué tipo de cuenta DINI, en qué sucursales, en qué franja de fechas y horarios, y desde qué monto de ticket. El GatewayQR lo consulta en cada pago y adjunta el resultado a la intención que viaja al autorizador.

Regla de oro del contrato: la respuesta trae un solo porcentaje por tipo de cliente. Si dos beneficios compiten por la misma cuenta, gana el de mayor prioridad. Nunca se acumulan.

Qué incluye

  • API de resolución para el GatewayQR, autenticada por API key, con auditoría de cada consulta y su respuesta.
  • Consola web con dos roles: Administrador configura; Operador consulta lo procesado sin poder modificar.
  • ABM de tipos de cliente, cada uno atado al payment_method_id de DINI (990 Negocios, 991 Gift Card, y los que vengan).
  • ABM de beneficios: porcentaje, vigencia, días y horarios, sucursales, monto mínimo, tope opcional, prioridad, tipos de cliente asociados.
  • Marca blanca: logo, color y nombre del cliente se cargan por configuración, sin recompilar.

Qué no hace

  • No autoriza ni mueve dinero. Solo informa.
  • No decide por producto ni por línea del ticket. Trabaja sobre el total.
  • No reemplaza las promociones propias del POS ni las de la billetera.

Stack y arquitectura

Backend: Java 21 y Spring Boot 4, base SQL Server con migraciones Flyway, un único jar desplegable con la consola embebida. Mismo pipeline de calidad que el Sistema de Premios: cobertura JaCoCo, análisis estático y CI en cada cambio.

Consola: React 18 con Vite y TypeScript, componentes shadcn sobre Tailwind, modo claro y oscuro, instalable como PWA.

Velocidad por diseño: la configuración activa vive en memoria y se recarga al guardar. La ruta caliente no consulta la base. La auditoría se escribe fuera del camino de respuesta, con virtual threads y cola acotada, así una base lenta nunca frena un cobro.

Método de trabajo: primero se fijan contrato, invariantes y criterios de aceptación medibles con DINO y el equipo del gateway; el código se construye con TDD estricto contra esos criterios.

BeneficiosCenter Flujo de un pago y contrato de la API

El flujo de punta a punta

Seis mensajes. BeneficiosCenter participa solo en el segundo y el tercero, y el GatewayQR sigue adelante aunque no responda.

POS GatewayQR BeneficiosCenter Autorizador DINI RUTA CALIENTE · OBJETIVO MENOS DE 20 ms 1 Intención de pago: monto, fecha, sucursal, POS, tipo factura, CUIT/CUIL 2 POST /api/v1/beneficios/resolver 3 Lista: un porcentaje por tipo de cliente 4 Intención Prisma con los beneficios adjuntos 5 Autorización: cuenta usada (990 / 991), monto final y descontado 6 importe_final, importe_recdesc Si en 2 vence el timeout, el gateway sigue en 4 sin beneficios y lo registra.
El autorizador aplica el único porcentaje que coincide con la cuenta que efectivamente pagó. El POS recibe los mismos campos que ya interpreta hoy.

Simulación: lo que manda el GatewayQR

POST /api/v1/beneficios/resolverX-Api-Key: •••• · Content-Type: application/json
{
  "requestId": "GW-20260903-000123",
  "transaction": { "datetime": "2026-09-03T18:42:10-03:00", "amount": 100000.00, "currency": "ARS" },
  "merchant":    { "branchId": "SUC-014", "posId": 7, "salesPointId": 3 },
  "invoice":     { "type": "B", "taxIdKind": "CUIL", "taxId": "27123456784", "extraCustomerTypeId": null }
}

Simulación: lo que responde BeneficiosCenter

200 OK · jueves 18:42, sucursal 14, ticket de $100.000, factura BelapsedMs: 4
{
  "requestId": "GW-20260903-000123",
  "evaluatedAt": "2026-09-03T18:42:10.084-03:00",
  "benefits": [
    { "customerTypeCode": "DINI_NEGOCIOS", "paymentMethodId": "990", "percentage": 10.0,
      "benefitId": 41, "description": "Jueves Dini Negocios 10%", "maxDiscountAmount": 15000.00 },
    { "customerTypeCode": "DINI_GIFTCARD", "paymentMethodId": "991", "percentage": 5.0,
      "benefitId": 37, "description": "Gift Card 5% todo septiembre", "maxDiscountAmount": null }
  ],
  "elapsedMs": 4
}

Sin beneficios aplicables la lista vuelve vacía con 200. Un 401 indica API key inválida; un 400 detalla el campo que falló. El GatewayQR fija un timeout corto y, si vence, continúa sin beneficios: el cobro nunca depende de nosotros.

BeneficiosCenter Consola de gestión y casos de uso

Cómo se ve la consola

Misma familia visual que el gestor del Sistema de Premios: barra lateral fija, tablas limpias, un solo color de acento que toma la marca del cliente. Para DINO la consola arranca con el lima de DINI.

Consultas hoy12.480
Con beneficio38 %
p99 respuesta6 ms

Beneficios

Nuevo beneficio
EstadoNombre%Tipos de clienteVigenciaFranjaSucursalesMín.Prio.
ActivoJueves Dini Negocios 10%10Negocios01/09 – 30/09Jue 00–24Todas$ 20.00010
ActivoGift Card 5% todo septiembre5Gift Card01/09 – 30/09Todos los díasTodas50
ProgramadoAniversario 15% Córdoba centro15Negocios, Gift Card10/10 – 12/1009–21SUC-001, 014, 022$ 50.0001
InactivoAgosto Negocios 8%8Negocios01/08 – 31/08Todos los díasTodas$ 15.00020

El Operador ve la misma consola con las acciones ocultas y la sección Auditoría como pantalla principal: cada consulta con su request, su respuesta, los beneficios evaluados y por qué cada uno aplicó o no.

Casos de uso

IdSituaciónResultado esperado
CU-01Mismo porcentaje para Negocios y Gift Card.Dos entradas en la lista, ambas con el mismo porcentaje.
CU-02Porcentaje distinto por tipo de cuenta.Dos entradas, cada una con su porcentaje.
CU-03Beneficio solo para Dini Negocios.Una entrada, código 990. Gift Card no aparece.
CU-04Beneficio solo para Dini Gift Card.Una entrada, código 991.
CU-05Ticket por debajo del monto mínimo del beneficio.Lista vacía. Se audita igual con el motivo.
CU-06Consulta fuera de la franja horaria o del rango de fechas.Lista vacía. Decide la fecha y hora que manda el gateway, en zona horaria de Córdoba.
CU-07Beneficio restringido a ciertas sucursales.Aplica solo si la sucursal del request está en la lista.
CU-08Factura A excluida por configuración del beneficio.Ese beneficio no entra; los demás siguen evaluándose.
CU-09Dos beneficios vigentes coinciden en el mismo tipo de cliente.Gana el de mayor prioridad; a igual prioridad, el porcentaje mayor. Nunca se suman.
CU-10Tope de descuento configurado.La respuesta incluye el tope para que el autorizador o el POS lo respeten.
CU-11BeneficiosCenter caído o lento.El GatewayQR agota el timeout y autoriza sin beneficios. Queda registrado del lado del gateway.
CU-12El Administrador publica un cambio de configuración.Rige en la próxima consulta, sin reinicio ni despliegue.
CU-13El Operador busca qué se ofreció en un ticket.Filtra por fecha, sucursal, POS o request y ve la traza completa. No puede editar.
CU-14Se incorpora un nuevo tipo de cuenta DINI.Alta en el ABM con su payment_method_id. Sin cambios de código.

Puntos a cerrar antes de construir

Son decisiones que cambian el contrato y conviene fijarlas con DINI y con el equipo del gateway antes de escribir la primera línea.