PROMO 7.4 - Circuito para Uso de Balances




CONTENIDO





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


Request con balance
{
    "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:

Request con 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>
Response de beneficio con balance
<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:

Request con tag 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 envío de balance1 y balance2 

Request con tags 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

Request con tag 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="balance1:100;balance2:3500" />
</message>

En caso de combinar el tag balances con balance1 y balance2

Request con tag 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="3:100;4:3500" balance1="100" balance2="300" />
</message>

En este ultimo caso es similar a  

Request con tag 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="balance1:100;balance2:300;3:100;4:3500" />
</message>

En el caso que se realice el siguiente caso 

Request con tag balances, balance1 y balance2 sobreescritos
<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 envía 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.

Request con limites y balances suficientes
<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>
Response con limites y balances suficiente
<?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

Request con limites y balances Insuficientes
<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>
Response con limites y balances Insuficiente
<?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

  • Sem rótulos