PROMO 7.2 - Circuito para Uso de Balances
Definición de Balance
El Balance se implementa en los beneficios monetarios, el cual es un limite externo que se inyecta en el motor para poder limitar a los beneficios que tengan configurado dicho balance.
El balance es como un limite externo, que se inyecta en el pos a través del atributo balances, previamente la promoción deberá tener un beneficio monetario que tenga seteado el balance y de coincidir ambos hará la restricción. En caso de no enviar el balance en el request, el motor no dará el beneficio.
Pre-Condiciones
Es necesario tener cargado el catalogo catalogBalance.catalog
{ "companyId": "napse", "catalog": "catalogBalance", "params": [], "items": [ { "code": "bal1", "name": "balance1", "operation": "I" }, { "code": "bal2", "name": "balance2", "operation": "I" } ] }
Cuando se define una promoción con un beneficio monetario, se deberá completar el campo balance:
<message companyId="napse" store="napse" terminal="8" date-time="2022-07-06 11:16:30" init-tck="true" messageId="1" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="7002"> <item-add seq="1" code="1" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balances="30:1000" balance2="20000" /> </message>
<message ack="0" companyId="napse" engine="7.2.3-SNAPSHOT" mapversion="7002" messageId="1" store="napse" terminal="8"> <optional> <promo code="jmm_x1" id="jmm_x1" nro="62c5a109677f912b04181c2d"> <benefit TLOGMessage="jmm_x1" account="" applicationMethod="resume" balance="30" baseAmount="10000.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="jmm_x1" name="62c5a109677f912b04181c2d" nro="62c5a07d677f912b04181c18" order="1" printerMessage="jmm_x1" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="1.000" seq="1" value="1000.00" valueWithTaxes="1000.00" xprice="10000.00"/> </apply> </benefit> </promo> </optional> </message>
En este ejemplo se ve que se aplica el limite del balance ya que el valor de descuento seria 1500 (value) que es el 15% de 10000, como el beneficio tiene configurado para el balance con código 30 y el customer se envía el tag balances con el código del balance 30 y su saldo de 1000.
Ejemplo de balances:
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-01 11:16:30" init-tck="true" messageId="7" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="5469"> <item-add seq="1" code="5" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balances="2:100;3:3500" /> </message>
Por compatibilidad se sigue soportando el envio de balance1 y balance2
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-01 11:16:30" init-tck="true" messageId="7" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="5469"> <item-add seq="1" code="5" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balance1="100" balance2="3500" /> </message>
el mensaje anterior es similar a
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-01 11:16:30" init-tck="true" messageId="7" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="5469"> <item-add seq="1" code="5" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balances="balance1:100;balance2:3500" /> </message>
En caso de combinar el tag balances con balance1 y balance2
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-01 11:16:30" init-tck="true" messageId="7" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="5469"> <item-add seq="1" code="5" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balances="3:100;4:3500" balance1="100" balance2="300" /> </message>
En este ultimo caso es similar a
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-01 11:16:30" init-tck="true" messageId="7" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="5469"> <item-add seq="1" code="5" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balances="balance1:100;balance2:300;3:100;4:3500" /> </message>
En el caso que se realice el siguiente caso
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-01 11:16:30" init-tck="true" messageId="7" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="5469"> <item-add seq="1" code="5" qty="1" magnitud="0" xprice="10000" unitprice="10000" /> <customer-add seq="1" id="1" type="vip" balances="balance1:50;balance2:800;3:100;4:3500" balance1="100" balance2="300" /> </message>
solo se considerará balances="balance1:50;balance2:800;3:100;4:3500" ignorando balance1="100" balance2="300"
Consideración del balance
Cuando el beneficio tiene configurado un balance y no se enviá en el request no se dará el beneficio.
Consideración del balance con saldo 0 o ya consumido por otro beneficio
Cuando el balance informado tenga saldo 0 o exista en la mismo mapa a evaluar promociones que apliquen al mismo balance y el saldo del mismo no alcanza para todos los beneficios solo se dará los beneficios que alcancen.
Ejemplo de convivencia entre limites y balance
Consideración de limites y balances
Siempre aplicará el recorte por limite primero y luego aplicará el recorte por balance, es decir si el límite es menor al beneficio dado recortara el mismo, mas allá de que el balance sea suficiente, si el límite es superior al descuento pero el balance es menor a este último, se aplicará el recorte del balance.
Se configura una promoción que tiene como límite 1000 por cantidad de dinero y se define un balance balance1 en el mismo beneficio
En este ejemplo se realizaron varias transacciones hasta que el límite solo le quedan 250 por consumir.
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-14 11:16:32" init-tck="false" messageId="5" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="1"> <item-add seq="1" code="321" qty="4" magnitud="0" xprice="400" unitprice="100"/> <item-add seq="2" code="123" qty="4" magnitud="0" xprice="200" unitprice="200"/> <item-add seq="2" code="1234" qty="4" magnitud="0" xprice="4000" unitprice="4000"/> <customer-add seq="1" id="cod1" type="vip" balances="balance1:1000" /> </message>
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="napse" engine="7.2.3-SNAPSHOT" mapversion="1" messageId="5" store="test2" terminal="8"> <optional> <promo code="test" id="test" nro="62cf2c296ef35a0b84c18538"> <benefit TLOGMessage="test" account="" applicationMethod="resume" balance="balance1" baseAmount="4400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="test" hasLimit="true" limitApplied="true" name="62cf2c296ef35a0b84c18538" nro="62d0285a6ef35a0aac785743" order="1" printerMessage="test" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="4.000" seq="1" value="60.00" valueWithTaxes="60.00" xprice="400.00"/> <item magnitude="0.000" qty="4.000" seq="2" value="190.00" valueWithTaxes="190.00" xprice="4000.00"/> </apply> </benefit> </promo> </optional> </message>
En esta última respuesta se ve como se esta aplicando el recorte por el límite ya que otorga hasta 250 de descuento
<message companyId="napse" store="test2" terminal="8" date-time="2022-07-14 11:16:33" init-tck="false" messageId="5" void-trx="false" response="true" status="sales" evaluate="true" offline="false" suggest="false" map-version="1"> <item-add seq="1" code="321" qty="4" magnitud="0" xprice="400" unitprice="100"/> <item-add seq="2" code="123" qty="4" magnitud="0" xprice="200" unitprice="200"/> <item-add seq="2" code="1234" qty="4" magnitud="0" xprice="4000" unitprice="4000"/> <customer-add seq="1" id="cod1" type="vip" balances="balance1:10" /> </message>
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="napse" engine="7.2.3-SNAPSHOT" mapversion="1" messageId="5" store="test2" terminal="8"> <optional> <promo code="test" id="test" nro="62cf2c296ef35a0b84c18538"> <benefit TLOGMessage="test" account="" applicationMethod="resume" balance="balance1" baseAmount="4400.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="test" hasLimit="true" limitApplied="true" name="62cf2c296ef35a0b84c18538" nro="62d0285a6ef35a0aac785743" order="1" printerMessage="test" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="4.000" seq="1" value="60.00" valueWithTaxes="60.00" xprice="400.00"/> <item magnitude="0.000" qty="4.000" seq="2" value="40.00" valueWithTaxes="40.00" xprice="4000.00"/> </apply> </benefit> </promo> </optional> </message>
En esta ultima respuesta se ve como se esta aplicando el recorte por el limite y también el del balance ya que el balance1 es de 100 y el descuento es de 100.
Ejemplo de Auditoria del campo balance
Ejemplo de reporte de transacciones con recorte de balance