Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...


Como se mencionó anteriormente, los mensajes que se envíen al Motor de Promociones serán en XML. El elemento raíz de ese mensaje XML deberá ser la etiqueta <message>, siendo esta etiqueta a la que se le llamará encabezado, y contendrá una serie de atributos que serán utilizados por el Motor de Promociones para conocer el momento y lugar de la transacción, si debe o no iniciar una nueva sesión, etc. Contenidos dentro de esta etiqueta se encontrarán los comandos que quieran ejecutarse en el Motor, los cuales formarán el cuerpo del mensaje, tema desarrollado en la sección siguiente.
Los atributos que puede poseer el encabezado son:

Propiedad

Tipo de dato

Descripción

Requerido

Valor ante ausencia

companyId

Alfanumérico

Identifica la compañía que envía el mensaje

SI


store

Alfanumérico

Identifica el local que envía el mensaje.


channelAlfanuméricoIdentifica el canal donde asociado a la transacción.No""

terminal

Numérico

Identifica la terminal emisora


date-time

YYYY-MM-DD HH:MM:SS

Fecha y hora del mensaje. (date-time="2017-03-21 15:20:26")


messageId

Numérico positivo

Identifica cada uno de los mensajes enviados por la terminal, siendo este número utilizado por el Motor de Promociones como identificador cuando envíe una respuesta.


void-trx

Booleano

Indica si la transacción es una devolución.

No

"false"

response

Booleano

Indica si se desea que el Motor dé una respuesta ante el mensaje enviado.

No

"false"

init-tck

Booleano

Indica si con este mensaje se debe iniciar una nueva sesión.

No

"false"

evaluate

Booleano

Le indica al motor que calcule las promociones utilizando los elementos ingresado hasta ese momento.

No

"false"

status

Alfanumérico

Indica en que estado se encuentra el punto de venta

  • sales
  • total
  • payment
    Existen valores específicos de esta propiedad que serán presentados en la sección de Fidelidad

No

""

msg-version

Alfanumérico

Indica la versión del mensaje en cuestión

No

""

map-version

Entero positivo

Indica al motor que mapa utilizar. Tendrá sentido sólo si el valor de "void-trx" es verdadero.

No

""

suggest

Booleano

Le indica al motor si debe sugerir promociones o no. Si suggest-seq y suggest-seq-type no están presentes se tomará todo el contexto para realizar la sugerencia.

No

"false"

suggest-seq

Numérico

Indica el número de secuencia sobre el que el motor realizará la sugerencia en caso de que el atributo suggest="true". Este atributo será acompañado por el suggest-seq-type, que de no ser especificado, se asumirá suggest-seq-type="item"

No

"1" o null

suggest-seq-type

Alfabético

Indica el tipo de línea sobre la que deberá hacerse la sugerencia en caso de que el atributo suggest="true". Este atributo será acompañado por el suggest-seq, que de no estar especificado, se asumirá sugget-seq="1". Los valores que puede tomar este atributo son: item, coupon, payment, event, customer.

No

"item" o null

suggest-per-type

Booleano

Le indica al motor si deben sugerir promociones teniendo en cuenta el tipo de los conjuntos participantes de la promoción o no. Si suggest-filter-type no está presente se sugerirán todas las promociones que estén disponibles para sugerencia teniendo en cuenta el atributo suggest del mapa y las promociones. Si está presente y en verdadero, los atributos suggest, suggest-seq y suggest-seq-type serán ignorados.

No

"false"

suggest-filter-type

Alfabético

Indica el tipo de conjunto participante de la promoción que deberá tenerse en cuenta para la sugerencia en caso de que el atributo suggest-per-type="true". Los valores que puede tomar este atributo son: item, coupon, payment, event, customer. Si no estuviera presente, se asume todos los tipos de conjuntos.

No

"null"

suggest-extended

Booleano

Le indica al motor si debe mostrar la información de los beneficios de cada promoción sugerida. Si suggest es false, el valor de este campo no tiene relevancia.

No

"false"

offline

Booleano

Le indica al motor que la transacción será tratada en modo offline, es decir ante una contingencia de comunicación con PROMO Central se almacenará para su posterior envío (ver nota debajo "Comportamiento de Promo en modo offline").

No

"false"

originalTransaction

Alfabético

Para el caso de un valor de status = requestTransaction, esta propiedad indicará la transacción que se requiere consultar

No

""

chosenOptionEntero positivioEn el caso de que el resultado de la evaluación haya resultado en una serie de opciones (varios bloques "optional") este atributo permite que el sistema externo informe al motor de Promo, cual de esas opciones fue la que finalmente se han aplicado u otorgado al cliente.  El valor es basado en 0, es decir la primer opción es la número 0, la siguiente la número 1 y así sucesivamente.No0
storeChainAlfabéticoIdentificador de la "Cadena" a la que pertenece la tienda (Store) de la transacción.  Puede ser utilizada en la condición de una promoción.No""
formatAlfabéticoIdentificador del Formato al cual pertenece la tienda (Store) de la transacción.  Puede ser utilizada en la condición de una promoción.No""
zoneAlfabéticoIdentificador de la Zona a la cual pertenece la tienda (Store) de la transacción.  Puede ser utilizada en la condición de una promoción.No""
subZoneAlfabéticoIdentificador de la SubZona a la cual pertenece la tienda (Store) de la transacción.  Puede ser utilizada en la condición de una promoción.No""
tenderGroupCodeAlfabéticoCuando se utilice preciadores, si se envía el valor "cr" retornara el precio a crédito, en caso de otro valor o de no enviarlo retornara el precio de venta.No""
currencyCodeAlfabéticoCódigo de la moneda en la cual se está realizando la transacción. Puede ser utilizada en la condición de una promoción, por ejemplo para condicionar la entrega de puntos a esa moneda.No""
limitBalancesBooleanoCuando se envíe en 'true' se devolverá en la respuesta del motor al POS los saldos de limites de Tienda y General (retail) que tengan definido las promociones que hayan participado de la transacción en curso. Valor por defecto "false" (A partir de Promo 7.0.2)No"false"

...


El cuerpo del mensaje que se envía al Motor de Promociones estará compuesto por los comandos que se quieran ejecutar. Básicamente, los comandos pueden ser de dos tipos:

Acción

Descripción

add

Agrega el elemento a la sesión.

void

Elimina el elemento de la sesión. El elemento se identifica por el número de secuencia.


Estos comandos pueden ser utilizados sobre los distintos elementos que pueden pertenecer a un ticket. A su vez, estos elementos pueden ser tipificados en 5 clases:

Elemento

Descripción

item

Identifica a los artículos.

coupon

Identifica a los cupones.

loyaltycard

Identifica a los elementos de fidelidad loyalty.

payment

Identifica a los medios de pago.

event

Identifica a los eventos u otros elementos no representables mediante los otros tipos.

customer

Identifica a los clientes.

benefitIdentifica a los beneficios externos

...


Cada uno de los comandos que se envían Motor de Promociones posee diversos atributos, los cuales identifican al elemento que se está enviando y definen diversas propiedades que poseen los mismos. Tanto add, como void poseerán un número de secuencia, el cual identifica cada elemento unívocamente:

Propiedad

Tipo de dato

Descripción

Requerido

seq

Entero positivo

Número identificador único del elemento dentro de la transacción.

...


Este será el único atributo que poseerán los comandos del tipo void, siendo este el atributo que indica el elemento que se desea eliminar.
Por otro lado, el comando add poseerá una serie de atributos que definirán las distintas propiedades del elemento que se está agregando (además del número de secuencia antes mencionado). Dependiendo del elemento en cuestión, los atributos serán los siguientes:

Elemento

Propiedad

Tipo de dato

Descripción

Requerido

Valor ante ausencia

Ítem

unitprice

Numérico positivo

Precio unitario del artículo en cuestión.

Si



xprice

Numérico positivo

Precio extendido del artículo en cuestión. Es igual a la cantidad por el precio unitario.

Si



qty

Entero positivo

Cantidad de artículos en la línea.

Si

1


magnitude

Numérico positivo

Si el artículo es mensurable por otro unidad que no sea la cantidad, deberá ser expresad en esta propiedad.

No

0


code

Alfanumérico

Código propio del artículo.

No

"-"


productcodeAlfanumérico

Código del Producto.

A partir de Promo 7.2.6 soporta múltiples valores.

No

barcodeAlfanumérico

Código de Barras del Producto.

A partir de Promo 7.2.6 soporta múltiples valores.

No


brand

Alfanumérico

Marca del artículo.

No

"-"


supplier

Alfanumérico

Proveedor al que pertenece el artículo.

No

"-"


discountable

Alfanumérico

Si el artículo es puede recibir descuentos o no.

No

"-"


level1

Alfanumérico

Nivel 1 de categorización del artículo. Anteriormente este nivel se conocía con el nombre de Departamento.

A partir de Promo 7.2.6 soporta múltiples valores.

No

"-"


level2

Alfanumérico

Nivel 2 de categorización del artículo. Anteriormente este nivel se conocía como la Familia del artículo.

A partir de Promo 7.2.6 soporta múltiples valores.

No

"-"


level3

Alfanumérico

Nivel 3 de categorización del artículo. Anteriormente este nivel se conocía como la Categoría del artículo.

A partir de Promo 7.2.6 soporta múltiples valores.

No

"-"


level4

Alfanumérico

Nivel 4 de categorización del artículo. Anteriormente este nivel se conocía como la subcategoría del artículo.

A partir de Promo 7.2.6 soporta múltiples valores.

No

"-"


discontinuousbooleanoDetermina si el producto es un producto discontinuoNofalse

lowTurnoverbooleanoDetermina si el producto es un producto de baja rotaciónNofalse

keyProductbooleanoDetermina si el producto es un producto estrellaNofalse

applyCatalogRedeembooleanoDetermina si el producto participa en el Canje de Puntos por CatálogoNofalse

taxesNumérico positivoValor de los impuestos discriminados respecto al precio unitario. (Ver atributo valueWithTaxes)No0

qty2

Entero positivo

(Versión > 7.EP2.1) Cantidad del producto a superar para otorgar el precio 2 (price2).  Solo para Promociones de Nuevo Precio que indican usar monto externo.No0

price2

Numérico positivo

(Versión > 7.EP2.1) Precio una vez superada la cantidad 2 (qty2). Solo para Promociones de Nuevo Precio que indican usar monto externo.No0

qty3

Entero positivo

(Versión > 7.EP2.1) Cantidad del producto a superar para otorgar el precio 3 (price3). Solo para Promociones de Nuevo Precio que indican usar monto externo.No0

price3

Numérico positivo

(Versión > 7.EP2.1) Precio una vez superada la cantidad 3 (qty3). Solo para Promociones de Nuevo Precio que indican usar monto externo.No0

redeemOptionAlfanumérico(Versión > 7.EP2.1) Beneficio "Canje con opciones" - informara las opciones entre las que puede elegir el cliente para acceder a un determinado beneficio canjeando una determinada cantidad de puntos (del cliente y/o elemento de fidelidad) Mas detalle en Apéndice I - Canje con opcionesNo

Coupon

amount

Numérico positivo

Se utiliza para indicar el valor monetario del cupón. Si no tiene no se utiliza.

No

0


type

Alfanumérico

Tipo de cupón (Aclaración: el tipo de cupón externo son cupones no administrados por PROMO. Este tipo de cupón es emitido y/o redimido por un sistema externo a PROMO).

No

"-"


qty

Entero positivo

Cantidad

No

1


id

Alfanumérico

Identificador del cupón.

No

"-"

LoyaltyCard

type

Alfanumérico

Tipo de elemento de fidelidad loyalty

No

"-"


id

Alfanumérico

Idenficiador del elemento de fidelidad loyalty

Si

"-"


amount

Numérico positivo

Saldo del elemento de fidelidad loyalty

No

0


chargeAmount

Numérico positivo

Saldo a acreditar a un elemento de fidelidad loyalty

No

0


consumeAmount

Numérico positivo

Saldo a debitar a un elemento de fidelidad loyalty

No

0


status

Alfanumérico

ENABLED o DISABLED para habilitar o deshabilitar un elemento de fidelidad  (solo valido en status LoyatyActivation)

ENABLED para habilitar un elemento de fidelidad (solo valido en status FINISH)

No

"ENABLED"


nextExpDate

NuméricoFecha de la próxima expiración de puntos en format YYYYmmdd.  Solo es informado en elementos de fidelidad que posean vencimiento de carga definido.No"-"

nextExpValue

NuméricoCantidad de puntos que vencerán en el próximo vencimiento (nextExpDate) y se informa solo si el elemento de fidelidad posee vencimiento de carga definido.No"-"

reason

Alfanumérico

Código del motivo por el cual se está realizando el chargeAmount o consumeAmount pertinente.  Este código corresponde a los valores de motivos definidos en la consola de PromoNo"-"

cvv

Alfanumérico

Corresponde al código de seguridad o cvv asociado al elemento de fidelidad.No"-"

validFromAlfanuméricoFecha de inicio de vigencia . Formato "YYYY-MM-DD" (Año-Mes-Dia) .Ejemplo"2021-07-16"No"-"

validToAlfanuméricoFecha de fin de vigencia . Formato "YYYY-MM-DD" (Año-Mes-Dia) .Ejemplo"2021-07-16"No"-"

Customer

type

Alfanumérico

Tipo de cliente.

No

"-"


id

Alfanumérico

Identifica al cliente a través del Código.

No

"-"


remainingAmount

Numérico positivo

Propiedad que se puede utilizar para indicar el saldo a favor o en contra del cliente en cuestión. (compatibilidad con PROMO 4 y versiones anteriores)

No

0


points

Entero positivo

Saldo que posee el cliente. (compatibilidad con PROMO 4 y versiones anteriores)

No

0


email

Alfanumérico

Atributo incluido para la consulta de clientes

No

""


name

Alfanumérico

Atributo incluido para la consulta de clientes

No

""


lastName

Alfanumérico

Atributo incluido para la consulta de clientes

No

""


Identifier

Numérico positivo

Atributo incluido para la consulta de clientes

No

""


cardNumber

Numérico positivo

Atributo incluido para la consulta de clientes

No

""


creditCampaignCode

Alfanumérico

Código de la Campaña crediticia

No

""


profileCode

Alfanumérico

Código del perfil del cliente

No

""


limitedBenefits

Alfanumérico

Consiste en un listado de Limites asociados a Convenios.  El mismo es del tipo: limitedBenefits:"limite1:valor1;limite2:valor2;limite3:valor3.....".  Estos valores pueden ser informados desde el Punto de Venta o bien son obtenidos mediante una respuesta a LoyaltyValidation y reinjectados por parte del Puntos de venta como han sido recibidos.

No

""

segmentAlfanuméricoLista de Códigos de Segmento a los cuales pertenece el cliente, separados por ;. Se listarán tanto los segmentos internos como los externos.No""

amountNumérico positivoPropiedad que se puede utilizar para indicar el saldo correspondiente a un clienteNo0

raffleData

Alfanumérico

Datos para imprimir en cupones informativos, orientado principalmente a sorteos.  Ver Manual de Usuario para información sobre cupones Informativos.No"-"

"Payment Los atributos amount e itemamount son excluyentes y su uso depende de la versión de la promoción codificada que se
configure en el motor para manejar los pagos parciales.

type

Alfanumérico

Tipo de medio de pago.

No

"-"


id

Alfanumérico

Identificador del pago.

No

"-"


plan

Alfanumérico

Plan del medio de pago.

No

"-"


amount

Numérico positivo

Dinero que se utiliza con ese medio de pago. Dado que el monto del pago (PA) se calcula como PA = PIA  (1 - %desc) o PA = PIA * (1+%recargo)*
se obtiene que el monto de los ítems que se desea pagar (PIA) se calcula como PIA = PA / (1 - %desc) o PIA = PA / (1+%recargo)

No

0


bank

Alfanumérico

Banco relacionado con el medio de pago.

No

"-"


itemamount

Numérico positivo

Dinero que representa el monto de ítems que se desea pagar.

No

0


balance

Booleano

Indica si con este medio de pago se cancela el saldo de la transacción. Si el valor es true, entonces no es necesario enviar el amount o itemaount.

No

false


pointsTypeAlfanuméricoIdentifica el tipo de pago con puntos (ver manual de usuario Final Promo 7 - "Ignorar pago con Puntos" - Ver también beneficio PromotionPaidInPoints)No""

installmentsNumérico positivo

Indica la cantidad de cuotas asociadas al pago

No""

prefixAlfanuméricoIndica el Prefijo asociado al pagoNo""

pocketAlfanuméricoIndica el Bolsillo asociado al pago No""

prefixGroupAlfanuméricoIndica el grupo de Prefijos asociado al pagoNo""

payCreditCampaignAlfanuméricoIndica la Campaña Crediticia asociada al pagoNo""

Event

type

Alfanumérico

Tipo de evento.

No

"-"


id

Alfanumérico

Identificador del evento.

No

"-"


value

Alfanumérico

Valor que representa el evento.

No

"-"

BenefitidAlfanumérico

Identificador del beneficio externo.

Si

typeAlfanumérico

Tipo de beneficio externo.

Si

amountNumérico positivo

Se utiliza para indicar el monto a descontar o el porcentaje de descuento (de acuerdo al benefitType).

Si

benefitTypeAlfanumérico

Indica el tipo de beneficio a generar.

  • desc: aplica el descuento sobre los ítem. Valor por defecto.
  • porc: porcentaje de descuento
No"desc"

seqItemAlfanumérico

Número de secuencia de los ítems a los cuales hay que aplicar el descuento. Si no viene el atributo o viene vacío se asume que es para todo el ticket. En caso de tener varios secuencias, las mismas deben venir separados por coma. Si algún alguna secuencia tiene mas de una cantidad, se debe concatenar con un =. Ejemplo: 1=2,2,3=3 (indica que el descuento se aplica a dos elementos de la secuencia uno, uno de la secuencia dos y tres la secuencia 3

No

...

Nota
Nota: El número de secuencia debe ser único para cada tipo de elemento, pudiendo existir, por ejemplo, un cliente y un ítem la misma secuencia; pero nunca dos elementos con el mismo número de secuencia.


Aviso
Importante: Si se agrega un elemento al contexto con un número de secuencia ya utilizado por un elemento del mismo tipo, el último enviado reemplazará al anterior.


Aviso
titleIMPORTANTE

Si el ítem es mensurable, se debe colocar el valor de magnitude, no es necesario colocar qty. Pero en el caso de ponerlo, este valor debe ser qty= 1. El motor prevalecerá el valor de Magnitud al valor de cantidad.



Ejemplo:
A continuación se presenta un ejemplo de un mensaje que agrega a la sesión del Motor de Promociones un ítem y un medio de pago (ambos con secuencia "1"), y elimina un cupón (de secuencia "2"):

...

Informações
titleResponse de Benecicio con Balance - JSON

{
  "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"
            }]
          }
        }]
      }]
    }]
  }
}

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:

Bloco de código
languagexml
themeEmacs
titleRequest con tag balances - xml
<message companyId="napse" store="napse" 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>

...


Al igual que en el mensaje de solicitud el elemento raíz de la respuesta será la etiqueta <message>, siendo esta también lo que se denominará encabezado de la respuesta. Contendrá atributos que indican la tienda y terminal a la que va dirigido, identificación del mensaje, versión del mapa y del Motor con el que se realizó la evaluación, y código de retorno (acknowledge); siendo todos ellos enviados con obligatoriedad:

Propiedad

Tipo de dato

Descripción

mapversion

Alfanumérico

Versión del mapa utilizado para la evaluación de las promociones.

companyId

Alfanumérico

El mismo que se envió en el en el mensaje de solicitud.

store

Alfanumérico

El mismo que se envió en el en el mensaje de solicitud.

terminal

Entero

El mismo que se envió en el en el mensaje de solicitud.

messageId

Entero

El mismo que se envió en el en el mensaje de solicitud.

engine

Alfanumérico

Versión del Motor de promociones que realizó la evaluación.

ack

entero

Código de retorno (ver apartado siguiente).

transaction

Alfanumérico

Código que identifica la transacción en PROMO central (solo se informa con la respuesta a un status de Loyalty)
transaction="1_1_20170321152000" (toma los datos de data-time del request para armar el nro de transaccion en PROMO central)

...


El atributo ack Del inglés acknowledge. es un atributo dentro del encabezado del mensaje de respuesta que indica la existencia o no de errores en la recepción y/o procesamiento del mensaje de solicitud. Dependiendo del tipo de error o si el mensaje fue recibido correctamente, este atributo tendrá un valor particular:

Valor de ack

Descripción

Acción recomendada

0

No existieron errores.

Utilizar la respuesta.

1

Error de comunicación o el mensaje es ilegible.

Reenviar el mensaje y si el error persiste re validar su formato.

2

La sesión no fue inicializada o no existe dicha sesión.

Iniciar sesión como se indica en "Manejo de sesiones".

3

Error de validación en el mensaje.

Revalidar el formato del mensaje. También puede consultarse el archivo de log del Motor establecer con mayor exactitud cuál fue el error.

2001

Error de evaluación.

Comunicarse con el administrador del Motor de Promociones para que, por medio del archivo de log, se establezca cuál fue el error.

2002

No existe un mapa válido para el cálculo del ticket o mensaje recibido.

Utilizar un mapa previo existente o no aplicar promociones.

2003

La sesión se encuentra en uso.

Esperar unos 3 segundos aproximadamente y reintentar el envío.

2004

Error general de instanciamiento de la sesión.

Comunicarse con el administrador del Motor de Promociones para monitorear el equipo donde esté en funcionamiento el Motor.

2005

Time out de la sesión. La sesión expiró.

Si durante la evaluación de la sesión, la misma termina por time out, se envía un mensaje con ack 2005. Esperar y reintentar el envío.

4001

El motor se encuentra en proceso de inicialización.

Esperar porque el motor está arrancando y cargando la información.

8296Existen errores en la validaciónEste error se da con Status=loyaltyvalidationex y FinishEx, debera analizarse el archivo de log a fin de establecer cual fue el error. Este error de validacion sera informado dentro del tag </errors> en el cuerpo de la respuesta con el ACK="8296".

8297

Se indica cuerpo del message es vacío.

Este error se da con Status=LoyaltyValidation, LoyaltyActivation y LoyaltyTransfer, y ocurre cuando el tag message no contienen ningún elemento de fidelidad.

Âncora
_Toc102963346
_Toc102963346
Âncora
_Toc102964100
_Toc102964100
8298

Si solicita recuperar la transacción original pero no envía cual es.

Revisar la conformación del mensaje que se envía del pos a PROMO Central a fin de chequear la existencia del atributo originalTransaction.

8299

Error genérico en el envío a PROMO central.

Comunicarse con el administrador de PROMO para monitorear el equipo donde esté en funcionamiento la consola de PROMO.

Âncora
_Toc147131984
_Toc147131984


A continuación se detalla una serie de errores 9xxx los cuales aplican a Errores producidos en el procesamiento de la Consola de PROMO Central:

1

Valor de ack

Descripción

Acción recomendada

2

9000

El mensaje no posee un ticket asociado.

Reenviar el mensaje y si el error persiste re validar su formato. Verificar la secuencia que mensajes que se está enviando.

3

9001

Existe una transacción pendiente. Se ha recibido una nueva transacción para ser procesada pero existe una anterior que se encuentra pendiente.

Se debe enviar un mensaje con status=commit/rollback para finalizar la transacción anterior.

4

9002

No existe transacción pendiente. Se ha recibido un mensaje con status=commit o rollback pero no existía una transacción previa pendiente.

Revisar la mensajería que se está enviando al motor, mayormente en su secuencia lógica.

5

9003

Se ha solicitado la información de una transacción previa pero no se ha informado el identificador de la misma.

Verificar que la propiedad originalTransaction tenga un valor y sea válido.

6

9004

Se ha solicitado la información de una transacción previa pero la transacción no existe.

Verificar el identificador de la transacción original que se está informando.

7

9005

Indica que la Consola está en modo Offline

En algunos casos como loyaltyTransfer, si la consola está en modo Offline, esta operación no se puede realizar. Contactar al administrador de PROMO para que chequee el equipo donde se encuentra corriendo la consola de PROMO.

8

9006

Job de Finalización de Transacciones

Contactar al administrador de la aplicación y revisar las configuraciones de la consola para restablecer el servicio.

9

9007

No se indica "CompanyId" en el header del mensaje.

Verificar los datos enviados

109008

Se obtiene este valor cuando se detecta una devolución parcial hecha previamente para la transacción que se trata de hacer la devolución total sin escaneo de items.

Verificar que no existan este tipo de transacciones pendientes.

11

9101

No se ha encontrado el Cupón

Verificar los datos solicitados

12

9102

Cupón Consumido

Verificar que el cupón no haya sido utilizado

13

9103

Cupón Inactivo

Verificar que el cupón solicitado se encuentre activo.

14

9104

No se ha encontrado el tipo de cupón

Verificar valor informado en el mensaje.

15

9105

El Cupón ha expirado.

La fecha de vencimiento del cupón se ha alcanzado, con lo cual verificar dicha situación.

16

9106

Se ha alcanzado el máximo número de usos

Verificar dicha situación

17

9107

El cupón es nominado y no se ha informado un cliente o bien el cliente informado no se corresponde con el cliente asociado al cupón

Verificar dicha situación

18

9108

El tipo de cupón no está activo

Verificar el tipo de cupón

19

9109

El monto enviado no corresponde al monto del cupón

Verificar monto del cupón

20

9110

Cupón no usado

El cupón ingresado a la transacción no ha participado de ninguna promoción.

21

9111

Cupón utilizado ParcialmenteIndica que el cupón no adminte uso parcial pero se está intentando usar parcialmente.  En este caso si un commit es enviado confirmando la transaccion el cupón será consumido (Detección de Fraudes).
22

9112

El cupón es "Sin Expiración"Cuando en la mensajería se pone un valor en el campo validTo. También si se quiere actualizar un cupón, se pone una valor en el campo validTo, pero el estado del cupón no es inactivo/activo/expirado.
23

9113

El rango validTo y validFrom de un cupón es anterior a la fecha inicio de vigenciaCuando se quiere actualizar un cupon y la fecha del campo validTo y la fecha de fin de validez son anteriores a la fecha de inicio de vigencia.
24

9114

Barcode duplicadoYa existe un cupón con el mismo barcode.
25

9201

No se encontró el encabezado de la transacción.

Normalmente debido a un error interno, consultar con el administrador del sistema.

26

9500

No se encontró el elemento de fidelidad loyalty

Verificar los datos solicitados

27

9501

Elemento de fidelidad inhabilitada

Verificar los datos solicitados. Para algunas acciones, solo se puede procesar Elementos de fidelidad habilitadas

28

9502

Elemento de fidelidad cancelada

Verificar los datos solicitados. No se puede interactuar con elementos de fidelidad canceladas

29

9503

No se encontró el Tipo de elemento de fidelidad loyalty

Verificar los datos solicitados

30

9504

Tipo de elemento de fidelidad no activa

Verificar los datos solicitados. No se puede interactuar con tipos de elementos de fidelidad inactivos

31

9505

Tipo de fidelidad no recargable

Verificar los datos solicitados. Para opciones de Carga o Recarga, el tipo de elemento de fidelidad debe ser recargable

32

9506

El elemento de fidelidad ya tiene un cliente asociado

Verificar que el elemento de fidelidad en la activación el customer enviado.

33

9507

El estado enviado del elemento de fidelidad no existe.

Verificar que se haya enviado un estado del elemento de fidelidad, en la activación, valido (ENABLED, DISABLED) – En Mayúscula –

34

9508

El elemento de fidelidad no aplica al beneficio

Verificar que el tipo de elemento de fidelidad sea recargable o que el elemento de fidelidad este habilitada. Otro error puede ser que el tipo de elemento de fidelidad con el que se armó el beneficio, este inactivo o no exista en la transacción.

35

9509

El elemento de fidelidad requiere un cliente

Verificar si el tipo de elemento de fidelidad es requerido, en la transacción debe viajar al menos un cliente.

36

9510

Elemento de fidelidad no autorizado

Existen varias situaciones en las que se puede obtener este codigo de error:

  1. El cvv es requerido y no se ha informado o es erróneo.
  2. El tipo de elemento de fidelidad es nominada con asignación desde archivo y se intenta asignar desde el punto de venta (motor).
  3. El elemento de fidelidad está vencido o cancelado.
  4. El elemento de fidelidad no es nominado y se intenta asignar un cliente.
37

9511

Amount invalido

Cuando se intenta descontar un amount que es mayor al total del amount del elemento de fidelidad, este mensaje aparecerá. Verificar que el amount sea menor al total.
Se informara este error cuando el tipo de elemento de fidelidad exija consumo total del monto en una sola transacción y se esté enviando un amount con valor menor
Se informara este error cuando el tipo de elemento de fidelidad exija transferencia total del monto a otro elemento del mismo tipo y se esté enviando un chargeAmount con valor menor.

38

9512

Se requiere al menos dos elementos de fidelidad

Este mensaje se utiliza para las transferencias. Se requiere que haya dos tarjetas en el mensaje. La de origen en la Seq="1" y la de destino en la Seq="2"

39

9513

El elemento de fidelidad no admite transferencia.

Verificar que el elemento de fidelidad origen admita Transferencia. Ya sea parcial o total.

40

9514

El elemento de fidelidad destino esta activo

Verificar que el elemento de fidelidad destino esta inactiva para realizar una transferencia total.

41

9515

Los tipos de elementos de fidelidad no son iguales

Verificar que los tipos de elemento de fidelidad sean iguales, es decir, el mismo.

42

9516

El saldo ingresado es mayor al tope de saldo

Verificar que el valor ingresado para la carga de un elemento de fidelidad, no sea mayor al Tope de saldo del tipo de elemento de fidelidad.

43

9517

El tipo de elemento de fidelidad no admite asignación de clientesEste error es especifico del servicio de próximo número del elemento de fidelidad tarjeta cuando el tipo de elemento de fidelidad no tarjeta es nominado por archivo de alta masiva.
44

9518

No se ha especificado el parámetro companyIdEste error es especifico del servicio de próximo número cuando no se informa el identificador de la empresa que realiza el pedido.
45

9519

CompanyId inválidoNo se ha podido encontrar el companyId especificado.
46

9520

Operación InválidaLa operación solicitada no corresponde a una operación válida
47

9521

Rango inválido en  elemento de fidelidadCuando se quiere crear un elemento de fidelidad, cuyo tipo está vencido; o cuando el tipo tiene rango de vigencia y se trata de crear un elemento con el rango invertido ( validFrom <validTo).
48

9603

Cliente inexistente

Verificar datos de cliente ingresado en la transacción

49

9610

identificador de cliente vacío

Verificar datos de cliente ingresado en la transacción

50

9611

Nombre de cliente vacío

Verificar datos de cliente ingresado en la transacción

51

9612

Apellido de cliente vacío

Verificar datos de cliente ingresado en la transacción

52

9613

ID de cliente Vacío

Verificar datos de cliente ingresado en la transacción

53

9614

No se recibieron parámetros del cliente

Verificar datos de cliente ingresado en la transacción

54

9620

Cliente ya existente

Verificar datos de cliente ingresado en la transacción

55

9629

Cliente inactivo

Verificar datos de cliente ingresado en la transacción

56

9901

Error de Cupón inesperado.

Todo error relacionado al procesamiento de cupones que no se encuentre tipificado en los códigos anteriores. Consultar al administrador del sistema.

57

9999

Error inesperado

Todo error en el procesamiento de PROMO Central que no se encuentre tipificado en los casos anteriores.

...


Como se mencionó anteriormente, cada una de las opciones contendrá una o más promociones.
Estas estarán identificadas por su nombre, siendo este su único atributo.
Las promociones estarán representadas con la etiqueta <promo>, teniendo el atributo id representando su nombre:

Propiedad

Tipo de dato

Descripción

id

Alfanumérico

Nombre de la promoción.

nro

Alfanumérico

Identificador de la base de datos de la promoción

...

A su vez, cada promoción podrá informar una serie de elementos participantes de condición y beneficios, ambos detallados en las secciones siguientes.


Âncora
_Toc513731663
_Toc513731663
Participantes de condición

...


Dentro de cada promoción existirá uno o más beneficios. Los beneficios son los elementos más importantes de la respuesta y definen la ventaja (económica o no) que debe darse al cliente, correspondientes a la promoción a la que pertenecen. Se definirán a través de la etiqueta <benefit>.
Existen beneficios de diversos tipos, cada uno con diferentes características. Es por ello que dependiendo del beneficio que se trate variarán los atributos correspondientes a la etiqueta <benefit> que lo representa. No obstante, existen algunos atributos que son comunes a todos ellos:

Propiedad

Tipo de dato

Descripción

order

Entero positivo

Número que identifica unívocamente al beneficio dentro del mensaje de respuesta. Su valor surge del orden en que se realizó su aplicación al realizar la evaluación.

benefitType

Alfanumérico

Tipo de beneficio que se trata.

displayMessage

Alfanumérico

Mensaje a mostrar por display en el punto de venta.

printerMessage

Alfanumérico

Mensaje a imprimir en la boleta o ticket al finalizar la compra.

applicationMethod

Alfanumérico

Forma de mostrar el beneficio. Puede poseer dos valores:

  • "lineByLine" (el beneficio debe mostrarse luego de cada artículo beneficiado)
  • "resume" (el beneficio debe mostrarse al final del ticket)

baseAmount

Real positivo

Indica el monto total sobre el cual se calculó el beneficio en cuestión.

TLOGMessage

Alfanumérico

Mensaje a guardar en el TLOG

account

Alfanumérico

Cuenta contable a la cual será imputado el beneficio.

nro

Alfanumérico

Identificador de la base de datos del beneficio.

name

Alfanumérico

Identificador de la base de datos de la promoción que contiene al beneficio.

...

Como se mencionó en párrafos anteriores, cada tipo de beneficio tendrá atributos propios. Cada uno de estos atributos representa un parámetro específico del beneficio al que pertenece (indicado en benefitType). En la siguiente tabla se enumeran dichos atributos y en la columna "Requerido" se indica si el atributo estará siempre presente en la respuesta ("Si") o bien dependerá de su valor para ser incluido o no en la misma ("No")

Beneficio

Propiedad

Tipo de dato

Requerido

Descripción

FixedDiscount

unit

Alfanumérico

No

El valor de "unit" indicará si el descuento estará aplicado sobre todo el conjunto o sobre cada unidad de la propiedad seleccionada. Los valores posibles son:

  • "qty" (se aplica el descuento a cada unidad de cantidad)
  • "magnitude" (se aplica el descuento a cada unidad de cantidad)
    Si no se informase la unidad (atributo vacío), la aplicación es sobre todo el conjunto de aplicados (ver "Elementos aplicados").


discountAmount

Real positivo

Si

Descuento que se realizará sobre los elementos aplicados. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.


prorationMethod

Alfanumérico

Si

Método que se utilizará para prorratear el beneficio entre los elementos aplicados, pudiendo ser:

  • "default"
  • "proportional" (prorratea el beneficio proporcionalmente al precio)
  • "most-expensive-first" (aplica el beneficio al artículo más caro)
  • "cheapest-first" (aplica el beneficio al artículo más barato)

PercentageDiscount

unit

Alfanumérico

No

Indicará si debe aplicarse el porcentaje de descuento a cada unidad o al total. Los valores que puede tener son los indicados anteriormente.


discountPercentage

Real positivo

Si

Porcentaje de descuento que se realizará sobre los elementos participantes. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.


name

Alfanumérico

No

Nombre de la promoción que ha originado el beneficio.


prorationMethod

Alfanumérico

Si

Método que se utilizará para prorratear el beneficio entre los elementos aplicados. Los valores que a tomar son los mismos indicados anteriormente.

NewPrice

unit

Alfanumérico

No

Indicará si debe aplicarse el nuevo precio a cada unidad o al total. Los valores que puede tener son los indicados anteriormente.


newPrice

Real positivo

Si

Descuento fijo que se realizará sobre los elementos participantes. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.


prorationMethod

Alfanumérico

Si

Método que se utilizará para prorratear el beneficio entre los elementos aplicados. Los valores que puede tomar son los mismos indicados anteriormente.

TenderDiscountBenefit

tender

Alfanumérico

Si

Medio/s de pago que se pueden utilizar. Puede ser una lista separada por comas.


limit

Real positivo

No

Indica el máximo que se podrá abonar con el medio de pago. Este tope sólo tendrá utilidad en el punto de venta sin afectar los calculos del Motor de Promociones. Si este valor es vacío significa que el monto es ilimitado.


planId

Alfanumérico

Si

Identificador del plan que se otorga.


Type

Alfanumérico

No

Tipo de medio de pago.


Bank

Alfanumérico

No

Banco asociado al medio de pago.


Percent

Real positivo

Si

Porcentaje de descuento o recargo que se realizará sobre los elementos participantes.


percenttype

Alfanumérico

No

Indica si el porcentaje es un descuento (valor=discount) o recargo (valor=surcharge).


tenderseq

Entero positivo

Si

Número identificador único del elemento medio de pago (payment) dentro de la transacción.


amount

Real positivo

Si

Dinero que se utiliza con ese medio de pago


itemamount

Real positivo

Si

Dinero que representa el monto de ítems que se desea pagar.


paymentAmount

Real positivo

Si

Indica el monto total sobre el cual se calculó el beneficio en cuestión.


installments

Real positivo

No

Indica la cantidad de cuotas asociadas al plan de pago


benefitedamount

Real positivo

Si

Descuento que se realizará sobre los elementos aplicados.

RedeemPointsBenefit

Type

Alfanumérico

Si

Indica el tipo de elemento de fidelidad a la que se aplicara el beneficio


factor

Real positivo

Si

Indica el factor de conversión para el cálculo del descuento en base al monto informado en el amount


usedPoints

Real positivo

Si

Indica la cantidad de saldo (punto, dinero, etc.) que será utilizado para la aplicación de dicho beneficio


discountAmount

Real positivo

Si

Descuento que se realizará sobre los elementos aplicados. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.


prorationMethod

Alfanumérico

Si

Método que se utilizará para prorratear el beneficio entre los elementos aplicados. Los valores que puede tomar son los mismos indicados anteriormente.


unit

Alfanumérico

Si

Indicará si debe aplicarse el nuevo precio a cada unidad o al total. Los valores que puede tener son los indicados anteriormente.

CalculatedCouponApplicationBenefit

discountAmount

Real positivo

Si

Descuento que se realizará sobre los elementos aplicados. El valor a descontar a cada artículo variará dependiendo de la unidad de aplicación.


couponId

Alfanumérico

Si

Identificador del cupón a redimir.


usedCoupons

AlfanuméricoSiConsiste en una cadena con valores separados por coma indicando cada uno de los códigos de cupón utilizados en la redención.  Este dato es basado en los cupones utilizados para cubrir el monto de redención.  Ejemplo usedCoupons=A645746566, BCD8383, P39393A9393

PaymentPlanBenefit

tender

Alfanumérico

Si

Medio/s de pago que se pueden utilizar. Puede ser una lista separada por comas. Cuando en el request de una transacción no se especifica el Id y/o el nombre, y/o cuotas, y/o tipos, y/o plan, y/o prefijo y/o pocket del plan de pago; el mismo igual se aplica.


limitAmount

Real positivo

No

Indica el máximo que se podrá abonar con el medio de pago. Este tope sólo tendrá utilidad en el punto de venta sin afectar los cálculos del Motor de Promociones. Si este valor es vacío significa que el monto es ilimitado.


planid

Alfanumérico

Si

Identificador del plan que se otorga.


type

Alfanumérico

No

Tipo de medio de pago.


bank

Alfanumérico

Si

Banco asociado al medio de pago.


percent

Real positivo

No

Porcentaje de descuento o recargo que se realizará sobre los elementos participantes. El descuento o recargo será informado como un beneficio TenderDiscountBenefit


percenttype

Alfanumérico

No

Indica si el porcentaje es un descuento (valor=discount) o recargo (valor=surcharge).


installments

Real positivo

No

Indica la cantidad de cuotas asociadas al plan de pago


paymentAmount

Real positivo

Si

Indica el monto total sobre el cual se calculó el beneficio en cuestión.

CouponBenefit

couponId

Alfanumérico

Si

Identificador del cupón a otorgar.


amount

Real positivo

Si

Indicara el monto asociado a un cupón cuyo monto fue calculado


qty

Entero positivo

Si

Cantidad de cupones a otorgar.


infoPos

Alfanumérico

NoEn el caso de Cupones Informativos existe la posibilidad de enviar al Punto de Venta la opción seleccionada de las disponibles para configurar por el usuario.  Ver manual de Usuario para Cupones Informativos.

GiftBenefit

giftid

Alfanumérico

Si

Identificador del regalo a entregar. En caso de que sea un producto en stock, puede representar el código del artículo a regalar.


giftType

Alfanumérico

Si

Tipo de regalo a entregar. Puede ser vacío.


qty

Entero positivo

Si

Cantidad de regalos con el identificador indicado.

LoyaltyBenefit

type

Alfanumérico

Si

Tipo de valor (puntos, dinero, millas, etc.) de fidelidad que se están otorgando.


amount

Entero positivo

Si

Cantidad de puntos, dinero, millas, etc. a otorgar del tipo especificado en el atributo anterior.


unit

Alfanumérico

Si

Indicará si debe aplicarse la cantidad de puntos, dinero, millas, etc. a cada unidad o al total. Los valores que puede tener son los indicados anteriormente.


totalpoints

Real positivo

Si

Indica la cantidad total de puntos, dinero, millas, etc. que otorga el beneficio luego de ser calculado.

FactorLoyaltyBenefit

type

Alfanumérico

Si

Tipo de puntos, dinero, millas, etc. de fidelidad que se están otorgando.


factor

Real positivo

Si

Factor multiplicador a utilizar para el cálculo de los puntos, dinero, millas, etc.

PercentLoyaltyBenefit

type

Alfanumérico

Si

Tipo de puntos, dinero, millas, etc. de fidelidad que se están otorgando.


percent

Real positivo

Si

Porcentaje de puntos, dinero, millas, etc., que se aplica sobre el xprice u originalXPrice para calcular la cantidad de puntos, dinero, millas, etc. que corresponden otorgar.


totalpoints

Real positivo

Si

Indica la cantidad total de puntos, dinero, millas, etc. que otorga el beneficio luego de ser calculado.

CalculatedCouponBenefit

couponId

Alfanumérico

Si

Identificador del cupón a otorgar.


amount

Entero positivo

Si

Indicara el monto asociado a un cupón cuyo monto fue calculado


Percentage

Alfanumérico

Si

Indica el porcentaje en base al cual fue calculado el monto del cupón


qty

Entero positivo

Si

Cantidad de cupones a otorgar.

PromotionPaidInPointsqty

Entero positivo

Si

Cantidad de ítems a beneficiar.


pointsAlfanuméricoSiCantidad de puntos a descontar del beneficio que ha entregado puntos en la transacción en curso (informado en el apply) Se informara cuando en el pago se envíe el atributo pointsType="" (ver manual de usuario final Promo 7 - Ingnorar pago con puntos.)

...

Por ejemplo: en la siguiente respuesta se puede observar que a los productos de secuencia 1 y 2 se le ha aplicado el escalon escalón con valor 2 por lo cual se utilizaron 400 puntos para canjear por el descuento de 200 en total.

...


Los beneficios siempre son aplicados sobre artículos. Para representar esto el Motor de Promociones al informar beneficios utiliza la etiqueta <apply>, donde se enumerarán los artículos sobre los cuales debe aplicarse el beneficio. Debido a que los beneficios solo pueden ser aplicados sobre artículos, los elementos contenidos en <apply> serán siempre <item>.
A diferencia de los elementos que se informan en los participantes (ya sean de condición, como de combo), los elementos <item> que se encontrarán dentro de <apply> poseerán los siguientes atributos:

Propiedad

Tipo de dato

Descripción

seq

Entero positivo

Número que identifica al elemento dentro de la transacción al que se aplica el beneficio.

value

Número En caso que se asigne a un ítem un nuevo precio que sea mayor al precio de venta informado, este valor puede tomar un valor negativo. Por este motivo deberán implementarse rutinas para el manejo de este tipo de valores.

Monto total a descontar al elemento indicado por el atributo seq.

valueWithTaxesNúmero (ver value)Monto total a descontar al elemento indicado por el atributo seq, pero considerando impuestos (ver atributo taxes).

qty

Entero positivo

Cantidad de ítems afectados entre los cuales deberá repartirse el descuento expresado en value.

magnitude

Real positivo

Magnitud afectada sobre la que deberá aplicarse el descuento expresado en value. Si no se definió una magnitud para el ítem, se informará como "0.0". Cuando se calculen puntos, dinero, millas, etc., si este valor es "0.0" entonces no se informará.

points

Real positivo

Cantidad total de puntos, dinero, millas, etc. que otorga la secuencia identificada por seq. Aparece siempre que el elemento de aplicación forme parte de un beneficio LoyaltyBenefit o PercentLoyaltyBenefit para los cuales se calculan los puntos, dinero, millas, etc.

xprice

Real positivo

Xprice o precio original de la secuencia en el momento en que se calculó el beneficio. El que sea xprice o precio original dependerá de cómo esté configurado el beneficio y sobre cuál de estos dos valores aplique (a partir de versión 2.8.0).

...

Las opciones que propone el beneficio "canje con opciones" (RedeemWithOptionsBenefit) tienen los siguientes atributos


atributotipo

Atributo

Tipo

Descripción

idAlfanuméricoIdentificador de la opción**
requiredPointsNuméricoPuntos requeridos a canjear para aplicar el beneficio
cardTypeAlfanuméricoTipo de elemento de fidelidad a la cual se puede hacer el canje de puntos de tarjeta (cardPoints)
cardPointsNuméricoPuntos de elementos de fidelidad requeridos a canjear para aplicar el beneficio
benefitTypeAlfanuméricoTipo de calculo a aplicar (fixedDiscount percentageDiscount newPrice)
unitAlfanuméricoUnidad de Medida a aplicar en el calculo (qty / magnitude)
valueNumérico

Valor aplicar en el calculo según el benefitType (fixedDiscount:DescuentoFijo, percentageDiscount:porcentaje, newPrice: nuevoPrecio)

a su vez a este valor se le restara el valuePoints del item-apply

...

Informações
titleRedeemOptions JSON

{
  "redeemOptions": {
    "option": [
      {
        "benefitType": "percentageDiscount",
        "cardPoints": "200.0",
        "cardType": "089",
        "id": "5e567f0506773d1c14528761_0",
        "requiredPoints": "100.0",
        "unit": "qty",
        "value": "10.0"
      },
      {
        "benefitType": "percentageDiscount",
        "cardPoints": "1000.0",
        "cardType": "089",
        "id": "5e567f0506773d1c14528761_2",
        "requiredPoints": "0.0",
        "unit": "qty",
        "value": "20.0"
      },
      {
        "benefitType": "percentageDiscount",
        "cardPoints": "0.0",
        "cardType": "-",
        "id": "5e567f0506773d1c14528761_3",
        "requiredPoints": "500.0",
        "unit": "qty",
        "value": "20.0"
      }
    ]
  }
}

Para mas Información sobre el beneficio ver Anexo I - Canje como opciones en este documento.



Âncora
_Toc513731668
_Toc513731668
Sugerencias

...


Como se mencionó anteriormente, cada una de las sugerencias contendrá una o más promociones. Estas estarán identificadas por su nombre. Las promociones estarán representadas con la etiqueta <promo>, teniendo el atributo id representando su nombre.

Propiedad

Tipo de dato

Descripción

id

Alfanumérico

Nombre de la promoción.

descriptor

Alfanumérico

Descripción de sugerencia de la promoción. Puede no estar en la etiqueta si no fue especificado para la promoción que se sugiere.

item-seq

Lista de números

Las secuencias de tipo ítem que hacen posible que la promoción sea sugerida. Si no hubiera secuencias de este tipo para la promoción, entonces este atributo no se incluye en la etiqueta.

payment-seq

Lista de números

Las secuencias de tipo medio de pago que hacen posible que la promoción sea sugerida. Si no hubiera secuencias de este tipo para la promoción, entonces este atributo no se incluye en la etiqueta.

customer-seq

Lista de números

Las secuencias de tipo cliente que hacen posible que la promoción sea sugerida. Si no hubiera secuencias de este tipo para la promoción, entonces este atributo no se incluye en la etiqueta.

event-seq

Lista de números

Las secuencias de tipo evento que hacen posible que la promoción sea sugerida. Si no hubiera secuencias de este tipo para la promoción, entonces este atributo no se incluye en la etiqueta.

coupon-seq

Lista de números

Las secuencias de tipo cupón que hacen posible que la promoción sea sugerida. Si no hubiera secuencias de este tipo para la promoción, entonces este atributo no se incluye en la etiqueta.

loyaltycard-seq

Lista de Elementos de fidelidad de Fidelidad

Las secuencias de tipo elementos de fidelidad de fidelidad que hacen posible que la promoción sea sugerida. Si no hubiera secuencias de este tipo para la promoción, entonces este atributo no se incluye en la etiqueta.

...

    1. Buscar si existe el archivo de stock configurado, si no existe, la promocion promoción no sera sugerida.
    2. Si el archivo de stock existe, si ningún producto en el conjunto de aplicación (SKUs) posee stock (figura en el archivo), no será sugerida.

...

  1. Creación de clientes:  Si se envía información de cliente completa (es decir email o identifier) y el cliente no existe en Promo, el mismo será dado de alta automáticamente.


Aviso
titleIMPORTANTE

A partir de 7.2.7 si se envía el teléfono y el cliente no existe en Promo, el mismo será dado de alta automáticamente.


  1. Actualización de clientes: Si se recibe información de un cliente completa y el cliente existe, entonces se considera que la validación no es una mera consulta de datos sino que al enviar datos como el "nombre del cliente" se requiere hacer una actualización de los mismos.

...

Por ejemplo, el último número de elemento activo para el tipo "aaa" es el 3330000000000000078 es el 3000000003, al realizar la consulta solo con el tipo de elemento, Promo devolverá el id de tarjeta 333000000000000008 3000000004 que corresponde al próximo número de elemento inactivo y sin cliente disponible.

Bloco de código
languagexml
themeEmacs
titleInput Message XML
<?xml version="1.0" encoding="UTF-8"?>
<message><message companyId="2" store="13" terminal="21" date-time="2023-0410-1005 12:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyvalidation" evaluate="true" tckpath="Y" suggest="falsetrue">
<loyaltycard-add seq="1" type="18" />
</message>


Informações
titleInput Message JSON

{
  "message": {
    "companyId": "2",
    "store": "13",
    "terminal": "21",
    "date-time": "2023-0410-10 05 12:00:00",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyvalidation",
    "evaluate": "true",
    "tckpath": "Y",
    "suggest": "false",
    "loyaltycard-add": [{
      "seq": "1",
      "type": "18"
    }]
  }
}


Bloco de código
languagexml
themeEmacs
titleOutput Message XML
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.2.4#2647#288" mapversion="0130" messageId="1" store="13" terminal="21" transaction="2_1_21_2023041013000020231005120000">
  <loyalty>
    <loyaltycards/><loyaltycards>
    <coupons/>
    <errors>
      <error <loyaltycard ack="95000" cardTypeid="13000000004" info="1" seq="1" type="QUERY8"/>
    </errors>/loyaltycards>
    <coupons/>
    <customers><errors/>
    <customers/>
   <customer code="1" email="[email protected]" identifier="12345" lastName="perez" limitedBenefits="" name="juan" segment="" seq="1" type="empleado">
        <coupon ack="0" amount="0.00" barcode="1010010016471" couponId="1"/>
        <coupon ack="0" amount="0.00" barcode="1020010016470" couponId="2"/>
        <loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" contract="" id="1000000009" status="Activa" type="1" usePartial="true"/>
      </customer>
    </customers>
    <redeemTable/>
  </loyalty>
</message>
Informações
titleOutput Message JSON
{
  "message": {
    "ack": "0",
    "companyId": "2",
    "engine": "7.2.4#264",
    "mapversion": "0",
    "messageId": "1",
    "store"
 <redeemTable/>
  </loyalty>
</message>


Informações
titleOutput Message JSON

{
  "message": {
    "ack": "0",
    "companyId": "2",
    "engine": "7.2.7#288",
    "mapversion": "130",
    "messageId": "1",
    "store": "3",
    "terminal": "1",
    "terminal": "2",
    "transaction": "2_1_21_2023041013000020231005120000",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {
        "error": [{
          "ack": "95000",
          "cardType": "18",
          "info": "1",
          "seq": "1",
          "type": "QUERY"
        }]
      },
      "customers": {
        "customer": [{
          "code": "1",
          "email": "promonapse@gmail.com",
          "identifier": "12345",
          "lastName": "perez",
          "limitedBenefits": "",
          "name": "juan",
          "segment": "",
          "seq": "1",
          "type": "empleado",
          "coupon": [
            {
              "ack": "0",
              "amount": "0.00",
              "barcode": "1010010016471",
              "couponId": "1"
            },
            {
              "ack": "0",
              "amount": "0.00",
              "barcode": "1020010016470",
              "couponId": "2"
            }
          ],
          "loyaltycard": [{
            "ack": "0",
            "amount": "0.00",
            "amountChargeLimit": "0.00",
            "contract": "",
            "id": "10000000093000000004",
            "status": "Activa",
            "type": "18",
            "usePartial": "true"
          }]
        }]
      },
      "redeemTable": {}
    }
  }
}

...


Aviso

...

title

...

Importante

Esta funcionalidad aplica a tipos de tarjetas de fidelidad que sean nominadas por api (canal de ventas) y no nominadas( a partir de 7.2.8).

Ej. para un tipo de Tarjeta de Fidelidad, no nominada. El último número de tarjeta activa para el tipo "13" (no nominada) es el 4300000000, al realizar la consulta solo con el tipo de tarjeta, Promo devolverá el id de tarjeta 4300000001 que corresponde al próximo número de tarjeta inactivo y sin cliente disponible. 

<message
Bloco de código
languagexml
themeEmacs
titleRequest XML
<?xml version="1.0" encoding="UTF-8"?><message companyId="2" store="13" terminal="1" date-time="2023-0410-1005 12:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyactivationloyaltyvalidation" evaluate="true" suggest="falsetrue">
<loyaltycard-add seq="1" idtype="401000000013" />
</message>


{
Informaçõescode
titlelanguageRequest JSONxml
themeEmacs
titleResponse
----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.2.7#288" mapversion="130" messageId="1" store="3" terminal="1" transaction="2_1_1_20231005120000">
  <loyalty>
    <loyaltycards>
      <loyaltycard ack="0" id="4300000001" seq="1" type="13"/>
    </loyaltycards>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>


Âncora
_LoyaltyActivation
_LoyaltyActivation
LoyaltyActivation

Realiza la activación de un elemento de fidelidad.
Para activar un elemento de fidelidad que se encuentre en estado inactiva podrá enviarse un mensaje con Status="loyaltyActivation".
Deberá enviarse con el formato y atributos que se muestran en los siguientes ejemplos.

Bloco de código
languagexml
themeEmacs
titleRequest XML
<message companyId="2" store="1" terminal="1" date-time="2023-04-10 12:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyactivation" evaluate="true" suggest="false">
<loyaltycard-add seq="1" id="4010000000"/>
</message>


Informações
titleRequest JSON

{
  "message": {
    "companyId": "2",
    "store": "1",
    "terminal": "1",
    "date-time": "2023-04-10 12:00:00",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyactivation",
    "evaluate": "true",
    "suggest": "false",
    "loyaltycard-add": [{
      "seq": "1",
      "id": "4010000000"
    }]
  }
}

...

Adicionalmente si se desea dar una carga inicial se puede agregar la propiedad "chargeAmount" del elemento loyaltyCard.   De esta forma ademas además de crearlo, se cargara iniciamente inicialmente ese saldo.

Luego procedemos a crear un segundo con saldo:

...

Expandir
titleCVVCHANGE

Para el cambio de CVV se deberá enviar en el status="loyaltyActivation" el tag <loyaltycard/> el status "CVVCHANGE"

Ejemplo de envio de cambio de CVV

Bloco de código
languagexml
themeEmacs
titleRequest XML
<message status="loyaltyActivation" companyId="napse" date-time="2023-07-11 12:00:00" evaluate="true" init-tck="true" messageId="1" offline="false" response="true" store="3" terminal="1" void-trx="false">
<loyaltycard-add seq="1" id="1600000014" status="CVVCHANGE" cvv="1234" />
</message>


Informações
titleRequest JSON

{
  "message": {
    "status": "loyaltyActivation",
    "companyId": "napse",
    "date-time": "2023-07-11 12:00:00",
    "evaluate": "true",
    "init-tck": "true",
    "messageId": "1",
    "offline": "false",
    "response": "true",
    "store": "3",
    "terminal": "1",
    "void-trx": "false",
    "loyaltycard-add": [{
      "seq": "1",
      "id": "1600000014",
      "status": "CVVCHANGE",
      "cvv": "1234"
    }]
  }
}


Cuando la operación termine de manera satisfactoria se obtendrá la siguiente respuesta:

Bloco de código
languagexml
themeEmacs
titleResponse XML
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="napse" engine="7.2.6#282" mapversion="71" messageId="1" store="3" terminal="1" transaction="2_3_1_20230711120000">
  <loyalty>
    <loyaltycards>
      <loyaltycard ack="0" id="1600000004" seq="1" type="-"/>
    </loyaltycards>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>


Informações
titleResponse JSON

{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "7.2.6#282",
    "mapversion": "71",
    "messageId": "1",
    "store": "3",
    "terminal": "1",
    "transaction": "2_3_1_20230711120000",
    "loyalty": {
      "loyaltycards": {
        "loyaltycard": [{
          "ack": "0",
          "id": "1600000004",
          "seq": "1",
          "type": "7"
        }]
      },
      "coupons": {},
      "errors": {},
      "customers": {},
      "redeemTable": {}
    }
  }
}


En caso de error en el proceso de cambio de CVV se devolverá la siguiente respuesta:

Bloco de código
languagexml
themeEmacs
titleResponse XML
--- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="napse" engine="7.2.6#282" mapversion="71" messageId="1" store="3" terminal="1" transaction="2_3_1_20230711120000">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors>
      <error ack="9500" id="1600000014" info="1600000014" seq="1" type="loyaltycard-activation"/>
    </errors>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>


Informações
titleResponse JSON

{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "7.2.6#282",
    "mapversion": "71",
    "messageId": "1",
    "store": "3",
    "terminal": "1",
    "transaction": "2_3_1_20230711120000",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {
        "error": [{
          "ack": "9500",
          "id": "1600000014",
          "info": "1600000014",
          "seq": "1",
          "type": "loyaltycard-activation"
        }]
      },
      "customers": {},
      "redeemTable": {}
    }
  }
}

En este caso se informa que el elemento no existe en la Base de Promol.


Al realizarse un cambio de CVV, podrá observarse el movimiento en el detalle del elemento de la siguiente forma:


...

En el caso del Tag "errors", la respuesta dependerá del elemento de fidelidad informado.   En el caso particular de Elementos de fidelidad se informaran junto a las propiedades comunes, las propiedades amount, cardType, id, customer, contract, amountChargeLimit, nextExpDate, nextExpValue y usePartial solo en los casos en que esta información se encuentre disponible (es decir se pueda recuperar el tipo de elemento de fidelidad por ejemplo) tal como sucede en el caso de respuesta sin errores (ack=0).


Nota

Nota: Cuando el elemento de fidelidad que se consulte este inactiva, se informara en el atributo "amount" el saldo del elemento de fidelidad al momento de la consulta y en "cardType" el tipo de elemento.
(ver también Engine Request – loyaltyValidation)

...

Las propiedades de cada elemento cupón será:

Propiedad

Tipo de dato

Descripción

barcode

Alfanumérico

Código de barras del cupón, o lo que es lo mismo, el identificador unívoco del mismo.

ack

entero

Código de retorno

couponId

Alfanumérico

Identificador del tipo de cupón.

format

Alfanumérico

Formato del cupón. Los valores posibles son: PRINTED (impreso), ELECTRONIC (Electrónico), THIRD_PARTY (de terceros), EXTERNAL (Externo), PRE_PRINTED (Pre impreso).

encoding

Alfanumérico

Formato en que deberá imprimirse el barcode (EAN13 - UPCA – CODE128)

promotionName

Alfanumérico

Es el nombre que se le dio a la promoción que aplica el beneficio

promotionNro

Alfanumérico

Identifica a la promoción que aplica el beneficio.

benefitNro

Alfanumérico

Identifica al beneficio que aplica la promoción

amount

Entero positivo

Indicara el monto asociado a un cupón cuyo monto fue calculado

...


Las propiedades de cada elemento de fidelidad será:

Propiedad

Tipo de dato

Descripción

Id

Alfanumérico

Número identificador del Elemento de fidelidad

Type

Alfanumérico

Identificador del tipo de elemento de fidelidad.

ack

entero

Código de retorno

amount

Número positivo

Saldo con el que quedaría el elemento de fidelidad

cardType

Alfanumérico

Informa el tipo del elemento de fidelidad (se informara solo en el tag <errors/> cuando el ACK sea 9501 – tarjeta inactiva)

...

Informações
titleResponse JSON

{
  "message": {
    "ack": "0",
    "companyId": "2",
    "engine": "7.2.4#264",
    "mapversion": "8",
    "messageId": "1",
    "store": "1",
    "terminal": "2",
    "transaction": "2_1_2_20230410120000",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {
        "error": [{
          "ack": "9517",
          "cardType": "3",
          "info": "3",
          "seq": "1",
          "type": "QUERY"
        }]
      },
      "customers": {},
      "redeemTable": {}
    }
  }
}

(Ver también Engine Request - LoyaltyActivation)

Âncora
_Response_-_Activación
_Response_-_Activación

...

Âncora
_Toc513731687
_Toc513731687

(Ver también Engine Request – FINISH)

Âncora
_Response_-_LoyaltyTransfer
_Response_-_LoyaltyTransfer
Âncora
_Toc513731688
_Toc513731688
Response - LoyaltyTransfer

...

Informações
titleResponse JSON

{
  "message": {
    "ack": "0",
    "engine": "2.6",
    "mapversion": "1",
    "messageId": "11",
    "companyId": "sts",
    "store": "00001",
    "terminal": "010",
    "transaction": "00001_010_20170530130305",
    "loyalty": {
      "loyaltycards": {
        "loyaltycard": [
          {
            "ack": "0",
            "amount": "296.0",
            "id": "2220000000000",
            "seq": "1",
            "type": "2"
          },
          {
            "ack": "0",
            "amount": "4.0",
            "id": "2220000000001",
            "seq": "2",
            "type": "2"
          }
        ]
      },
      "coupons": {},
      "errors": {},
      "customers": {},
      "redeemTable": {}
    }
  }
}


Nota
Nota: Deberá de enviarse un mensaje con status "Commit" para que los saldos sean imputados.


Response– No OK (Ver capítulo 3.1.1 Valores del atributo "ack")

...

Informações
titleResponse JSON

{
  "message": {
    "ack": "0",
    "engine": "2.6",
    "mapversion": "1",
    "messageId": "11",
    "companyId": "sts",
    "store": "00001",
    "terminal": "010",
    "transaction": "00001_010_20170530132245",
    "loyalty": {
      "loyaltycards": {
        "loyaltycard": [{
          "ack": "0",
          "amount": "10.0",
          "id": "2220000000001",
          "seq": "2",
          "type": "2"
        }]
      },
      "coupons": {},
      "errors": {},
      "customers": {},
      "redeemTable": {}
    }
  }
}


Nota
Nota: Deberá de enviarse un mensaje con status "Commit" para que los saldos sean imputados.


Nota
Nota 2: En el atributo "amount" se informara el saldo con que quedara el elemento de fidelidad luego de realizado el commit.

...

Informações
titleResponse OK JSON

{
  "message": {
    "ack": "0",
    "engine": "2.6",
    "mapversion": "1",
    "messageId": "1",
    "companyId": "sts",
    "store": "1",
    "terminal": "1",
    "transaction": "1_1_20170515152511",
    "loyalty": {
      "loyaltycards": {
        "loyaltycard": [{
          "ack": "0",
          "amount": "18.0",
          "id": "2220000000002",
          "seq": "2",
          "type": "gold"
        }]
      },
      "coupons": {},
      "errors": {},
      "redeemTable": {}
    }
  }
}


Nota
Nota: Deberá de enviarse un mensaje con status "Commit" para que los saldos sean imputados.


Nota
Nota 2: En el atributo "amount" se informara el saldo con que quedara el elemento de fidelidad luego de realizado el commit.

...

Las propiedades de los elementos informados en el Tag <Errors/> son:

Propiedad

Tipo de dato

Descripción

type

Alfanumérico

Informa el tipo de transacción asociado. Valores actuales son: "coupon-create", "coupon-redeem", "loyalty-redeem", "loyalty-sale", "loyalty-activation"

ack

Alfanumérico

El valor del código de error como se ha descripto en los valores de la propiedad ack antes en este documento. Ver capítulo 3.1.1 Valores del atributo "ACK"

id

Alfanumérico

En el caso de Cupones y Elementos de Fidelidad aquí se informa el id/barcode de los mismos

info

Alfanumérico

Información adicional que depende del valor del campo "type". Por ejemplo puede ser el valor del tipo de cupón a generarse, el valor del barcode informado para su redención, etc.
En el caso de los elementos de fidelidad, el valor será el id del elemento informado

description

Alfanumérico

Es un atributo extra para dar una mejor lectura al error ocurrido. En el caso de los elementos de fidelidad, se puede identificar el nombre de la promociones + el número de beneficio donde ocurrió el error

amount

Numérico

Opcional – Solo se mostrara este atributo cuando se esté informando un error para la consulta de validación (loyaltyValidation)

seq

Entero positivo

Número que identifica al elemento dentro de la transacción al que se aplica el beneficio.

...

Consiste en un mensaje que unifica o realiza lo conocido en Finish y dependiendo de la evaluación de este, un commit (respuesta de finish exitosa) o rollback (finish reporta un error) automático.

Caso: Se envía el siguiente mensaje para finalizar la transacción

Bloco de código
languagexml
themeEmacs
titleRequest XML
<message companyId="test2" store="test3" terminal="0011" date-time="20202023-1210-2809 11:2515:00:20" init-tck="false" messageId="00111" void-trx="false" response="true" init-tckstatus="truefinishex" evaluate="true" statussuggest="finishexfalse">
<customer-add seq="1" id="1234511" />
<coupon-add seq="1" id="1010BCup10000x" />
<item-add seq="1" qty="1" code="111" magnitude="0" xprice="5000" unitprice="5000" />
</message> </message>


Informações
titleRequest JSON

{
  "message": {
    "companyId": "test2",
    "store": "test3",
    "terminal": "0011",
    "date-time": "20202023-12-28 11:2510-09 15:00:20",
    "messageId": "00111",
    "void-trx": "false",
    "response": "true",
    "init-tck": "truefalse",
    "evaluate": "true",
    "status": "finishex",
    "customer-add": [{
      "seq": "1",
      "id": "1234511"
    }],
    "coupon-add": [{
      "seq": "1",
      "id": "1010BCup10000x"
    }],
    "item-add": [{
      "seq": "1",
      "qty": "1",
      "code": "111",
      "magnitude": "0",
      "xprice": "5000",
      "unitprice": "5000"
    }]
  }
}

...

<message
Bloco de código
languagexml
themeEmacs
titleRequest XML
Response XML
----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="test2" engine="7.2.68#740" mapversion="2135" messageId="00141" store="test3" terminal="0011" transaction="test2_test1_0011_2020122811280220231009150600">
<loyalty><loyaltycards/>
<coupons/>
<errors/>
<customers/>
<redeemTable/>
  <loyalty>
    <loyaltycards/>
    <coupons>
      <coupon ack="0" amount="0.00" barcode="1060BC0074766" benefitNro="64db6a1992889f3a2c4d49ac" couponId="10" encoding="EAN13" format="PRINTED" promotionName="Promo Obtene tu cupon" promotionNro="64db69e192889f3a2c4d49a6"><![CDATA[1050010012356
15/08/2023 00:00
31/12/2023 23:59]]></coupon>
    </coupons>
    <errors/>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>


Informações
titleRequest JSON

{
  "message": {
    "ack": "0",
    "companyId": "test2",
    "engine": "2.6",
    "mapversion": "2135",
    "messageId": "00141",
    "store": "test3",
    "terminal": "0011",
    "transaction": "test2_test1_0011_2020122811280220231009150600",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {},
      "customers": {},
      "redeemTable": {}
    }
  }
}

...

Bloco de código
languagexml
themeEmacs
titleRequest xml
<message----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="8296" companyId="test2" engine="7.2.68#740" mapversion="2135" messageId="00111" store="test3" terminal="0011" transaction="test2_test1_0011_2020122811250120231009133066">
  <loyalty>
    <loyaltycards/>
<coupons/>
<errors>

    <coupons>
    </coupons>
    <errors>
      <error ack="9101" id="1010BCup10000x" info="1010BCup10000x" seq="1" type="coupon-redeem"/>
<    </errors>
<customers>
<customer code="123456" email="[email protected]" identifier="1" lastName="perez" limitedBenefits="" name="jorge" segment="" seq="1" type="
test"/>
</customers>
 <customers/>
    <redeemTable/>
  </loyalty>
</message>
 


Informações
titleRequest JSON

{
  "message": {
    "ack": "8296",
    "companyId": "test2",
    "engine": "2.6",
    "mapversion": "2135",
    "messageId": "00111",
    "store": "test3",
    "terminal": "0011",
    "transaction": "test2_test1_0011_2020122811250120231009133066",
    "loyalty": {
      "loyaltycards": {},
      "coupons": {},
      "errors": {
        "error": [{
          "ack": "9101",
          "id": "1010BCup10000x",
          "info": "1010BCup10000x",
          "seq": "1",
          "type": "coupon-redeem"
        }]
      },
      "customers": {
        "customer": [{
          "code": "12345611",
          "email": "jorge.perez@correo.com",
          "identifier": "128710944",
          "lastName": "perez",
          "limitedBenefits": "",
          "name": "jorge",
          "segment": "",
          "seq": "1",
          "type": "\ntestempleado"
        }]
      },
      "redeemTable": {}
    }
  }
}

...

Para habilitar los cambios realizados se agregaron las siguiente propiedades en los archivos correspondientes al logging tanto del lado consola como del motor:

Habilitar logueo en consola, ir  ir a : ..\synthesis\promo\appserver\modules\system\layers\base\com\synthesis\configuration\main\log4j.xml

...

Informações
titleImportante

Para que el alta de clientes pueda efectuarse al momento de procesarse una transacción, deberá de habilitarse en el archivo de configuraciones de la Consola de Promo (“promoplus.properties”) el siguiente atributo:


# Habilita el alta de clientes on the fly
promo.allowNonExistingCustomers = true


Una vez actualizado, deberá de reiniciarse el Wildfly para que los cambios sean tomados correctamente.

...

Informações
titleCode JSON

{
  "message": {
    "companyId": "napse",
    "store": "1",
    "terminal": "10",
    "date-time": "2018-08-09 10:51:50",
    "init-tck": "true",
    "messageId": "1",
    "void-trx": "false",
    "response": "true",
    "status": "loyaltyValidation",
    "evaluate": "true",
    "offline": "false",
    "customer-add": [{
      "seq": "1",
      "id": "10090504",
      "identifier": "10090504",
      "type": "test",
      "limitedBenefits": "5b7044246491fa1604a6d15b:200.00;",
      "name": "pepe",
      "lastName": "rodrigues",
      "identifierType": "cpf"
    }]
  }
}



La respuesta aun contiene datos por defecto:

Bloco de código
languagexml
themeEmacs
firstline1
titleResponse XML
linenumberstrue
<message ack="0" companyId="napse" engine="6.4.6" mapversion="1" messageId="1" store="1" terminal="10" transaction="napse_1_10_20180809105150">
<loyalty>
<loyaltycards/>
<coupons/>
<errors/>
<customers>
<customer code="10090504" email="-" identifier="10090504" lastName="rodrigues" limitedBenefits="" name="pepe" segment="" seq="1"/>
</customers>
<redeemTable/>   
</loyalty></message>

...

Âncora
_Toc513731704
_Toc513731704
Operatoria (en base a los posibles escenarios):

OperatoOria

GiftCard

Monedero

Tarj de Puntos

Gift - Único Uso

Alta de tarjeta

Por ArchivoINACTIVAS

Por Archivo/ManualInactivas o Activas

Por ArchivoINACTIVAS

Por ArchivoINACTIVAS

Consulta de Tarjetas

Se informara en tag Errors (por estar inactiva)el Amount - Type

Se informara en tag Errors, si esta inactiva o en tag LoyaltyCard si esta activaType - Amount

Se informara en tag Errors (por estar inactiva)Amount –Customer-Type

Se informara en tag Errors (por estar inactiva)Amount - Type

Activación de Tarjeta

Deberá activarse por medio del mensaje "Loyaltyactivation" o "finish" Valida CVV

Podrá activarse por el mensaje "Loyaltyactivation", "finish" o cuando se realiza su primera recarga

Podrá activarse por el mensaje "Loyaltyactivation", "finish" o cuando se realiza su primera recarga Si se envía Cliente lo validará

Podrá activarse por el mensaje "Loyaltyactivation", "finish" o cuando se realiza su primera recarga. Valida CVV

Transferencia

Admite solo transferencia de saldo totales - Una vez transferido el saldo total de la tarjeta, ésta se cancela. Valida CVV

Admite transferencias parciales sin alterar el estado del elemento.

No admite transferencia de ningún tipo.

No admite transferencia de ningún tipo.

Imputación de Saldo

No admite recarga de saldo.

Admite recargas hasta un valor máximo.

Admite recargas sin tope. Si se envía cliente se validara.

Admite recargas sin tope. Valida CVV.

Consumo de Saldo

Admite consumir el saldo en más de una transacción sin alterar el estado de la tarjeta. Valida CVV

Admite consumir el saldo en más de una transacción sin alterar el estado de la tarjeta

Admite consumir el saldo en más de una transacción sin alterar el estado de la tarjeta Si se envía cliente se validara

Solo permite un único consumo de saldo ya sea total o parcial, luego de ese único consumo el elemento de fidelidad se INACTIVA. Valida CVV

Saldos por convenios

Cuando el beneficio tenga limites de saldos por convenios y por clientes, la operatoria del motor deberá ser la siguiente:

Para poder operar con limites de saldos por convenios el primer mensaje enviado desde el pos debe ser un status loyaltyValidation con el elemento customer, para poder cargar los limites del cliente antes de realizar la transacción.
En caso que existan limites para beneficios de convenio; éstos vendrán en el atributo limitedBenefits,Los límites de clientes que no sean de convenio, la consola informa sólo al motor.


Aviso

Importante: Para cargar el limite del cliente en el motor, se deberá hacer un loyaltyValidation con init-tck="true" con el elemento customer, debe ser el primer mensaje a operar.


Nota
titleEjemplo para los mensajes de Limites
Nota: En este ejemplo se definió una promoción con un beneficio fijo monetario de 100, y con un limite monetario de 300 por cliente, es decir para este caso si el cliente realiza mas de 3 transacciones, en la 4 ya No aplicara por haber superado el limite configurado en la promoción.

A continuación se muestra como se debe operar:

...

Luego al final de la evaluación del ticket, cuando se arma la respuesta al POS en EngineResponse.toXml()  se llama al  createLimitsResponse() para generar la lista de saldos de limites e insertarla dentro de la respuesta.

Ejemplo de Ejemplo de respuesta del motor con los saldos de limites: 
Response del motor con saldo de límites:


Bloco de código
languagejava
themeEmacs
titleXML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="napse" engine="7.0.0-SNAPSHOT" mapversion="65" messageId="4524" store="napse" terminal="1">
  <optional>
    <promo code="marzo27c" id="marzo27c" nro="5e7e04b78fc4c24a14491daa">
      <benefit TLOGMessage="marzo27c" account="" applicationMethod="resume" baseAmount="300.00" benefitType="PercentageDiscount" discountPercentage="15.00" displayMessage="marzo27c" hasLimit="true" name="5e7e04b78fc4c24a14491daa" nro="5e7e05588fc4c24a14491db1" order="1" printerMessage="marzo27c" prorationMethod="PROPORTIONAL" unit="qty">
        <apply>
          <item magnitude="0.000" qty="3.000" seq="1" value="45.00" valueWithTaxes="45.00" xprice="300.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
  <limitBalances>
    <limit amount="22.00" id="5e7e0e878fc4c2219049697e" max="25000.00" promotionName="marzo27c"/>
    <limit amount="4369.00" id="5e7e0f9b8fc4c22190496980" max="12000.00" promotionName="marzo27c"/>
    <limit amount="1681.00" id="5e8251f2b85cf77dbc714f32" max="50000.00" promotionName="marzo27c"/>
  </limitBalances>
</message>


Informações
titleJSON

{
  "message": {
    "ack": "0",
    "companyId": "napse",
    "engine": "7.0.0-SNAPSHOT",
    "mapversion": "65",
    "messageId": "4524",
    "store": "napse",
    "terminal": "1",
    "optional": [{
      "promo": [{
        "code": "marzo27c",
        "id": "marzo27c",
        "nro": "5e7e04b78fc4c24a14491daa",
        "benefit": [{
          "TLOGMessage": "marzo27c",
          "account": "",
          "applicationMethod": "resume",
          "baseAmount": "300.00",
          "benefitType": "PercentageDiscount",
          "discountPercentage": "15.00",
          "displayMessage": "marzo27c",
          "hasLimit": "true",
          "name": "5e7e04b78fc4c24a14491daa",
          "nro": "5e7e05588fc4c24a14491db1",
          "order": "1",
          "printerMessage": "marzo27c",
          "prorationMethod": "PROPORTIONAL",
          "unit": "qty",
          "apply": {
            "item": [{
              "magnitude": "0.000",
              "qty": "3.000",
              "seq": "1",
              "value": "45.00",
              "valueWithTaxes": "45.00",
              "xprice": "300.00"
            }]
          }
        }]
      }]
    }],
    "limitBalances": {
      "limit": [
        {
          "amount": "22.00",
          "id": "5e7e0e878fc4c2219049697e",
          "max": "25000.00",
          "promotionName": "marzo27c"
        },
        {
          "amount": "4369.00",
          "id": "5e7e0f9b8fc4c22190496980",
          "max": "12000.00",
          "promotionName": "marzo27c"
        },
        {
          "amount": "1681.00",
          "id": "5e8251f2b85cf77dbc714f32",
          "max": "50000.00",
          "promotionName": "marzo27c"
        }
      ]
    }
  }
}


...

Las propiedades de los elementos informados en el Tag <Prices/> son:

Propiedad

Tipo de dato

Descripción

lastUpdate

Fecha con hora

Informa la fecha de la ultima actualización de precios (la consola se comunico con el motor para informar precios.)

discountable

Booleano

Determina si el ítem admite descuento

manualDiscount

Booleano

Determina si el ítem admite descuento manual

priceLastUpdate

Alfanumérico

Fecha en la que fue actualizado el precio del ítem

priceListId

Alfanumérico

Es el código de la empresa mas el código de la lista de precio del cual se calculo el precio <codigoEmpresa>_<codigoListaDePrecios>

qtyEntero positivoNúmero que identifica la Cantidad del ítem

seq

Entero positivo

Número que identifica al elemento dentro de la transacción

supplierFinancialAlfanuméricoOpcional. Es el código del proveedor financiero del ítem
supplierFinancialAmount

Numérico

Opcional. Es el monto que el proveedor Financiero reconoce
supplierItemAlfanuméricoOpcional. Es el código del proveedor del ítem
supplierItemAmount

Numérico

Opcional. Es el monto que el proveedor reconoce
unitprice

Numérico

Es precio del ítem consultado al motor
xprice

Numérico

Es el precio del ítem multiplicado por la el atributo qty

...

Las Opciones disponibles tienen los siguientes atributos

atributotipo
AtributoTipoDescripción
idAlfanuméricoIdentificador de la opción**
requiredPointsNuméricoPuntos requeridos a canjear para aplicar el beneficio
cardTypeAlfanuméricoTipo de elemento a la cual se puede hacer el canje de puntos de elemento (cardPoints)
cardPointsNuméricoPuntos de elementos de fidelidad requeridos a canjear para aplicar el beneficio
benefitTypeAlfanuméricoTipo de calculo a aplicar (fixedDiscount / percentageDiscount / newPrice)
unitAlfanuméricoUnidad de Medida a aplicar en el calculo (qty / magnitude)
valueNumérico

Valor aplicar en el calculo según el benefitType (fixedDiscount:DescuentoFijo, percentageDiscount:porcentaje, newPrice: nuevoPrecio)

a su vez a este valor se le restara el valuePoints del item-apply


Aviso
titleId del elemento Option
**El Identificador id del elemento option se genera desde el motor con el id del beneficio concatenado con "_" mas un indice (por ejemplo "5db9b4afa171f2314ce5704e_1", en donde el código 5db9b4afa171f2314ce5704e es el identificador de beneficio y el 1 representa a la segunda opción del mismo comienza desde 0), se definió así para evitar, que el ítem del mensaje se aplique a dos opciones simultáneamente. Ya que en la generación del código fuente del beneficio en el motor, no hay un identificador por promoción que permita la unicidad de promocion_beneficio_opcion

...

Las Opciones disponibles tienen los siguientes atributos


atributotipo
AtributoTipoDescripción
redeemOption
AlfanuméricoIdentificador la opción seleccionada (Cuando no se quiera seleccionar ninguna opción el valor debe ser "0" )|
usedPoints
NuméricoPuntos canjeados para aplicar el beneficio(xprice*requiredPoints)
cardTypeAlfanuméricoTipo de elemento la cual se canjearon puntos
cardUsedPointsNuméricoPuntos de elementos de fidelidad canjeados
benefitTypeOption
AlfanuméricoTipo de calculo a aplicar (fixedDiscount / percentageDiscount / newPrice)
benefitUnitOption
AlfanuméricoUnidad de Medida a aplicar en el calculo (qty / magnitude)
valuePoints
NuméricoEquivalente en pesos de los puntos canjeados ( usedPoints * redeemPointsPriceFactor)
priceInPoints
NuméricoValor del ítem en puntos (xprice/redeemPointsPriceFactor)
nominalDiscount
NuméricoEs el Descuento Nominal (value +valuePoints)
percentageDiscountNuméricoValor a aplicar en el descuento cuando el benefitTypeOption = percentageDiscount)
fixedDiscountNuméricoValor a aplicar en el descuento cuando el benefitTypeOption =fixedDiscount
newPriceNuméricoValor a aplicar en el descuento cuando el benefitTypeOption =newPrice

...

Aviso
titleValidaciones no cumplidas
De no cumplirse con las 6 validaciones anteriores, el calculo del beneficio será 0 para dicho ítem (value="0")

Alta del Elemento de Fidelidad asociada al cliente identificado en la transacción (al momento de  aplicar el beneficio de acumulación)

Para la asignación y carga de un elemento de fidelidad que acumule puntos de fidelidad deberá considerarse la siguiente secuencia entre el pos y Promo: 

  • Pre-Requisitos:

Para que el alta de clientes pueda efectuarse al momento de procesarse una transacción, deberá de habilitarse en el archivo de configuraciones de la Consola de Promo (“promoplus.properties”) el siguiente atributo:

 # Habilita el alta de clientes on the fly

promo.allowNonExistingCustomers = true

Una vez actualizado, deberá de reiniciarse el Wildfly para que los cambios sean tomados correctamente.

  • Alta de Cliente

Los clientes serán creados utilizando el estado "loyaltyValidation" en el caso de enviarse los datos mínimos y al mismo tiempo Promo detecte que el cliente no existe.  Los datos mínimos mencionados son (marcados en Negrita):

<customer-add seq="1" id="10" identifier="47001517" type="test" name="bruno" lastName="Lopez" identifierType="dni" email="mimail@test.com" />

Bloco de código
languagexml
themeEmacs
titleRequest
<?xml version="1.0" encoding="UTF-8"?>
<message companyId="2" store="3" terminal="1" date-time="2023-09-21 09:00:00" init-tck="true" messageId="1" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="true">
<customer-add seq="1" id="10" identifier="47001517" type="test" name="bruno" lastName="Lopez" identifierType="dni" email="[email protected]" />
</message>




Bloco de código
languagexml
themeEmacs
titleResponse
----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.2.7#288" mapversion="110" messageId="1" store="3" terminal="1" transaction="2_3_1_20230921090000">
  <loyalty>
    <loyaltycards/>
    <coupons/>
    <errors/>
    <customers>
      <customer code="10" email="[email protected]" identifier="47001517" lastName="lopez" limitedBenefits="" name="bruno" segment="" seq="1" type="test"/>
    </customers>
    <redeemTable/>
  </loyalty>
</message>


  • Ingreso de ítem


    Bloco de código
    languagexml
    themeEmacs
    titleRequest
    <?xml version="1.0" encoding="UTF-8"?>
    <message companyId="2" store="3" terminal="1" date-time="2023-09-21 09:05:00" init-tck="false" messageId="1" void-trx="false" response="true" status="sales" evaluate="true" suggest="true">
    <customer-add seq="1" id="10" email="[email protected]" identifier="47001517" lastName="lopez" limitedBenefits="" name="bruno" segment=""  type="test" />
    <item-add seq="1" qty="1" code="111" xprice="612" unitprice="612" />
    </message>




Bloco de código
languagexml
themeEmacs
titleResponse
---- message ------
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<message ack="0" companyId="2" engine="7.2.7#288" mapversion="111" messageId="1" store="3" terminal="1">
  <optional>
    <promo id="Promo puntos de fidelidad" nro="650c31b2a62e435174288615">
      <benefit TLOGMessage="Promo puntos de fidelidad" account="" applicationMethod="resume" baseAmount="612.00" benefitType="LoyaltyBenefit" displayMessage="Promo puntos de fidelidad" name="650c31b2a62e435174288615" nro="650c31d2a62e435174288619" order="1" printerMessage="Promo puntos de fidelidad" totalpoints="10.00" type="1" unit="qty" value="10.00">
        <apply>
          <item magnitude="0.000" points="10.00" qty="1.000" seq="1" value="0.00" valueWithTaxes="0.00" xprice="612.00"/>
        </apply>
      </benefit>
    </promo>
  </optional>
</message>

Dado que el cliente no tiene elementos asociados, se deberá dar de alta en Promo un nro. de elemento del mismo tipo que recibe el beneficio informado, y asociarla al cliente.

Nota

Los beneficios del tipo Loyalty que informen en su tipo (“type”) la palabra “external”, corresponderán a tipos de elementos no gestionadas por promo, las cuales no participan en las promociones que otorguen puntos de fidelidad.

Actualización: Se utilizara, para el alta de elementos durante la transacción el status “loyaltyActivation”, enviando el tag <loyaltyCard-add/> el parámetro status=”CREATE”, el campo Type del mismo tag deberá corresponderse con el tipo de elemento que es beneficiado durante la transacción, y en el campo id deberá indicarse el numero de elemento que se desea asignar.

Este número no necesariamente debe corresponderse con el largo y prefijo indicado en el tipo de elemento, podrá indicarse un código libre y se controlará que para dicho tipo de elemento no existan dos números de elementos iguales.

Bloco de código
languagexml
themeEmacs
titleRequest
<?xml version="1.0" encoding="UTF-8"?>
<message companyId="2" store="3" terminal="1" date-time="2023-09-21 9:30:00" init-tck="false" messageId="1" void-trx="false" response="true" status="loyaltyActivation" evaluate="true" suggest="true">
<loyaltycard-add id="1000000014" seq="1" type="1" status="CREATE"/>
</message>


Bloco de código
languagexml
themeEmacs
titleResponse
----- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.2.7#288" mapversion="111" messageId="1" store="3" terminal="1" transaction="2_3_1_20230921093000">
  <loyalty>
    <loyaltycards>
      <loyaltycard ack="0" amount="0.00" id="1000000015" seq="1" type="1"/>
    </loyaltycards>
    <coupons/>
    <errors/>
    <customers/>
    <redeemTable/>
  </loyalty>
</message>

Esta operación no requiere FINISH ni COMMIT.

Para confirmar la correcta asociación, deberá realizarse un LoyaltyValidation del cliente y aquí deberá de modificarse el TimeStamp de la transacción a fin de que los puntos otorgados luego por el beneficio sean asignados correctamente al elemento recientemente creado.

Bloco de código
languagexml
themeEmacs
titleRequest
<?xml version="1.0" encoding="UTF-8"?>
<message companyId="2" store="3" terminal="1" date-time="2023-09-21 09:30:00" init-tck="true" messageId="2" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="true">
<customer-add seq="1" id="10" email="[email protected]" identifier="47001517" lastName="lopez" limitedBenefits="" name="bruno" segment="" type="test"/>
<loyaltycard-add seq="1" id="1000000015" type="1" amount="0.00" />
</message>


Bloco de código
languagexml
themeEmacs
titleResponse
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.2.7#288" mapversion="111" messageId="2" store="3" terminal="1" transaction="2_3_1_20230921093000">
  <loyalty>
    <loyaltycards>
      <loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" contract="" customer="10" id="1000000015" seq="1" type="1" usePartial="true" validFrom="20230317" validTo="20240317"/>
    </loyaltycards>
    <coupons/>
    <errors/>
    <customers>
      <customer code="10" email="[email protected]" identifier="47001517" lastName="lopez" limitedBenefits="" name="bruno" segment="" seq="1" type="test">
        <loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" contract="" id="1000000015" status="Activa" type="1" usePartial="true" validFrom="20230317" validTo="20240317"/>
      </customer>
    </customers>
    <redeemTable/>
  </loyalty>
</message>

Una vez que el cliente ya tiene el elemento asociado y activo, podrá ingresarse ésta en la transacción para así asignarle los puntos otorgados por el beneficio.

Bloco de código
languagexml
themeEmacs
titleRequest
<?xml version="1.0" encoding="UTF-8"?>
<message companyId="2" store="3" terminal="1" date-time="2023-09-21 09:30:00" init-tck="true" messageId="2" void-trx="false" response="true" status="loyaltyValidation" evaluate="true" suggest="true">
<customer-add seq="1" id="10" email="[email protected]" identifier="47001517" lastName="lopez" limitedBenefits="" name="bruno" segment="" type="test"/>
<loyaltycard-add seq="1" id="1000000015" type="1" amount="0.00" />
<item-add seq="1" qty="1" code="111" xprice="612" unitprice="612" />
</message>


Bloco de código
languagexml
themeEmacs
titleResponse
---- message ------
<?xml version="1.0" encoding="UTF-8"?><message ack="0" companyId="2" engine="7.2.7#288" mapversion="111" messageId="2" store="3" terminal="1" transaction="2_3_1_20230921093000">
  <loyalty>
    <loyaltycards>
      <loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" contract="" customer="10" id="1000000015" seq="1" type="1" usePartial="true" validFrom="20230317" validTo="20240317"/>
    </loyaltycards>
    <coupons/>
    <errors/>
    <customers>
      <customer code="10" email="[email protected]" identifier="47001517" lastName="lopez" limitedBenefits="" name="bruno" segment="" seq="1" type="test">
        <loyaltycard ack="0" amount="0.00" amountChargeLimit="0.00" contract="" id="1000000015" status="Activa" type="1" usePartial="true" validFrom="20230317" validTo="20240317"/>
      </customer>
    </customers>
    <redeemTable/>
  </loyalty>
</message>