PROMO 7.4 - Circuito para Uso de Promociones con Descuento por Convenios
Definición de Convenio
Un convenio es un acuerdo establecido entre dos o más entidades con la finalidad de dar beneficios a los clientes.
Pre-Condiciones
Para utilizar el beneficio "Descuento por Convenios" en una promoción ,es necesario:
- Crear en la consola el/los convenios que van a intervenir en la promoción:
2. Asociar el/los convenio/s a un elemento de fidelidad y a un cliente:
El archivo debe contener la siguiente información:
- Número de elemento de fidelidad
- Código de Cliente
- Saldo
Ej:
el nombre debe ser de tipo: tipodeelemento_codigodeconvenio_timestap.catalog: 3_1_20230629091300.catalog
Una vez procesado el archivo se detallará en la consola:
Importante
Un cliente sólo podrá tener un tipo de elemento de fidelidad asociado a un mismo convenio. Es decir un cliente no podrá poseer dos o más elementos de fidelidad de fidelidad que estén asociadas a un mismo convenio.
Se trató de procesar el archivo,
donde el cliente 1 tiene asociado dos elementos de fidelidad a un mismo convenio:
Al procesarlo, la consola arroja el siguiente error:
Crear la Promoción:
En la consola se crea la promoción cuyo beneficio será el descuento por convenio:
- Se debe agregar un convenio:
2. luego seleccionar clase de beneficio: "Descuento por Convenio" y completar el porcentaje de descuento:
3. Se debe agregar un límite, por cliente y por cantidad de dinero:
Importante
Si falta cualquiera de estos tres puntos , la promoción no se aplicará.
Resumen de la promoción:
Se realiza primeramente un loyaltyValidation:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="loyaltyvalidation" evaluate="true" suggest="false"> <customer-add seq="1" id="1"/> </message>
----- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629100000"> <loyalty> <loyaltycards/> <coupons/> <errors/> <customers> <customer age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:20000.00;" name="juan" segment="Seg1" seq="1" type="empleado"> <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" id="2010000019" status="Activa" type="3" usePartial="true"/> </customer> </customers> <redeemTable/> <goalsPrograms/> </loyalty> </message>
En la respuesta se observa el id del convenio, asociado a la tarjeta:
<loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" id="2010000019" status="Activa" type="3" usePartial="true"/>
Luego se hace la venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" type="3" contract="1"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:20000.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="4000" xprice="4000" qty="1" code="Coca-Cola" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1"> <optional> <promo id="Promo Descuento por Convenio" nro="649d77c463ca194ebc8dbe70"> <benefit TLOGMessage="Promo Descuento por Convenio" account="" applicationMethod="resume" baseAmount="4000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Descuento por Convenio" hasLimit="true" name="649d77c463ca194ebc8dbe70" nro="649d780063ca194ebc8dbe7c" order="1" printerMessage="Promo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="1.000" seq="1" value="2000.00" valueWithTaxes="2000.00" xprice="4000.00"/> </apply> </benefit> </promo> </optional> </message>
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="finish" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" type="3" contract="1"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:20000.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="4000" xprice="4000" qty="1" code="Coca-Cola" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629100000"> <loyalty> <loyaltycards/> <coupons/> <errors/> <customers/> <redeemTable/> <goalsPrograms/> </loyalty> </message>
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:00:00" init-tck="false" messageId="1" void-trx="false" response="true" status="commit" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" type="3" contract="1"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:20000.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="4000" xprice="4000" qty="1" code="Coca-Cola" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629100000"/>
Se realiza otra venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" type="3" contract="1"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:20000.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="8000" xprice="8000" qty="1" code="36" discountable="true"/> <item-add seq="2" unitprice="1000" xprice="1000" qty="1" code="92" discountable="true"/> <item-add seq="3" unitprice="2000" xprice="2000" qty="1" code="75" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1"> <optional> <promo id="Promo Descuento por Convenio" nro="649d77c463ca194ebc8dbe70"> <benefit TLOGMessage="Promo Descuento por Convenio" account="" applicationMethod="resume" baseAmount="11000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Descuento por Convenio" hasLimit="true" name="649d77c463ca194ebc8dbe70" nro="649d780063ca194ebc8dbe7c" order="1" printerMessage="Promo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="1.000" seq="1" value="4000.00" valueWithTaxes="4000.00" xprice="8000.00"/> <item magnitude="0.000" qty="1.000" seq="2" value="500.00" valueWithTaxes="500.00" xprice="1000.00"/> <item magnitude="0.000" qty="1.000" seq="3" value="1000.00" valueWithTaxes="1000.00" xprice="2000.00"/> </apply> </benefit> </promo> </optional> </message>
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"> <loyalty> <loyaltycards/> <coupons/> <errors/> <customers/> <redeemTable/> <goalsPrograms/> </loyalty> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"/>
Por último realizamos otra venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" type="3" contract="1"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:20000.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="18000" xprice="18000" qty="1" code="Parlantes" discountable="true"/> </message>
----- message ------ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1"> <optional> <promo id="Promo Descuento por Convenio" nro="649d77c463ca194ebc8dbe70"> <benefit TLOGMessage="Promo Descuento por Convenio" account="" applicationMethod="resume" baseAmount="18000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Descuento por Convenio" hasLimit="true" name="649d77c463ca194ebc8dbe70" nro="649d780063ca194ebc8dbe7c" order="1" printerMessage="Promo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="1.000" seq="1" value="9000.00" valueWithTaxes="9000.00" xprice="18000.00"/> </apply> </benefit> </promo> </optional> </message>
Por último se hace otra venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyvalidation" evaluate="true" suggest="false"> <customer-add seq="1" id="1"/> </message>
----- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"> <loyalty> <loyaltycards/> <coupons/> <errors/> <customers> <customer age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:12500.00;" name="juan" segment="Seg1" seq="1" type="empleado"> <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" id="2010000019" status="Activa" type="3" usePartial="true"/> </customer> </customers> <redeemTable/> <goalsPrograms/> </loyalty> </message>
Se observa que el limite para descuentos ha disminuido:
limitedBenefits="649d780063ca194ebc8dbe7c:12500.00
Venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" contract="1" type="3" /> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:12500.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="10000" xprice="40000" qty="4" code="Pantalla-Video" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1"> <optional> <promo id="Promo Descuento por Convenio" nro="649d77c463ca194ebc8dbe70"> <benefit TLOGMessage="Promo Descuento por Convenio" account="" applicationMethod="resume" baseAmount="40000.00" benefitType="ContractPercentageDiscount" discountPercentage="50.00" displayMessage="Promo Descuento por Convenio" hasLimit="true" name="649d77c463ca194ebc8dbe70" nro="649d780063ca194ebc8dbe7c" order="1" printerMessage="Promo Descuento por Convenio" prorationMethod="PROPORTIONAL" unit="qty"> <apply> <item magnitude="0.000" qty="4.000" seq="1" value="12500.00" valueWithTaxes="12500.00" xprice="40000.00"/> </apply> </benefit> </promo> </optional> </message>
Se observa que se dió el descuento; sólo hasta los $12500, del limite que restaba.
<item magnitude="0.000" qty="4.000" seq="1" value="12500.00" valueWithTaxes="12500.00" xprice="40000.00"/>
Finish:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="finish" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" contract="1" type="3" /> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:12500.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="10000" xprice="40000" qty="4" code="Pantalla-Video" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"> <loyalty> <loyaltycards/> <coupons/> <errors/> <customers/> <redeemTable/> <goalsPrograms/> </loyalty> </message>
Commit:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="commit" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" contract="1" type="3" /> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="649d780063ca194ebc8dbe7c:12500.00;" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="10000" xprice="40000" qty="4" code="Pantalla-Video" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="9002" companyId="2" engine="7.3.0RC3#71" mapversion="63" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"/>
Ejemplo de casos erróneos:
Caso 1: La promoción no tiene como condición simple el convenio
Se realiza primeramente el LoyaltyValidation:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="false"> <customer-add seq="1" id="1"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="64" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"> <loyalty> <loyaltycards> <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" customer="1" id="2010000019" seq="1" type="3" usePartial="true"/> </loyaltycards> <coupons/> <errors/> <customers/> <redeemTable/> <goalsPrograms/> </loyalty> </message>
Se observa que no trae los datos del cliente, porque el convenio está relacionado a la tarjeta de fidelidad.
Caso 2: La promoción tiene como condición simple el convenio, pero al beneficio se le quita el limite
LoyaltyValidation:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="false"> <customer-add seq="1" id="1"/> </message>
----- message ------ <?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="65" messageId="1" store="3" terminal="1" transaction="2_3_1_20230629103000"> <loyalty> <loyaltycards> <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" customer="1" id="2010000019" seq="1" type="3" usePartial="true"/> </loyaltycards> <coupons/> <errors/> <customers> <customer age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="" name="juan" segment="Seg1" seq="1" type="empleado"> <loyaltycard ack="0" amount="200000.00" amountChargeLimit="0.00" contract="1" id="2010000019" status="Activa" type="3" usePartial="true"/> <event id="" type="ev" value="El producto del mes es Pañales Pampers, por su compra recibis 2 x 1"/> <event id="" type="ev" value="Si completas tus datos recibirás un regalo"/> <event id="" type="ev" value="Por pertenecer al segmento 1 tenes un 20% de descuento"/> </customer> </customers> <redeemTable/> <goalsPrograms/> </loyalty> </message>
Venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" contract="1" type="3"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="400" xprice="400" qty="1" code="Coca-Cola" discountable="true"/> </message>
---- message ------ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="65" messageId="1" store="3" terminal="1"/>
Se observa que el beneficio no fue otorgado.
Caso 3: Se aplica una condición simple a un cliente y no a un producto
Al crear una promoción sin condición simple por producto:
Venta:
<message companyId="2" store="3" terminal="1" date-time="2023-06-29 10:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sale" evaluate="true" suggest="false"> <loyaltycard-add seq="1" id="2010000019" contract="1" type="3"/> <customer-add seq="1" id="1" age="123" birthday="false" code="1" email="[email protected]" identifier="12345" incompleteData="true" lastName="perez" limitedBenefits="" name="juan" segment="Seg1" type="empleado"/> <item-add seq="1" unitprice="400" xprice="400" qty="1" code="Coca-Cola" discountable="true"/> </message>
----- message ------ <?xml version="1.0" encoding="UTF-8" standalone="no"?> <message ack="0" companyId="2" engine="7.3.0RC3#71" mapversion="65" messageId="1" store="3" terminal="1"/>