PROMO 7.0 - Manual de Integración - Colas de Mensajes




CONTENIDO


Acerca del manual

Propósito y alcance


El presente manual tiene como finalidad la capacitación al usuario que desee integrar su aplicación de ventas con ellos servicios que expone Promo y su integración mediante colas de mensajes.
Se provee una descripción detallada de los mensajes que deben ser enviados al mismo y de cómo interpretar los mensajes de respuesta que dará ante un requerimiento.


Introducción

Consideraciones en el uso de colas de mensajes


Actualmente las aplicaciones se disponen en la nube (SAS) y esto trajo nuevos paradigmas de soluciones de arquitectura.  Uno de ellos es el desacoplar dichas aplicaciones en pequeños componentes o bloques independientes que puedan ser más fáciles de desarrollar, implementar y a futuro mantener.  Obviamente tal arquitectura exige un mecanismo confiable y seguro de comunicación entre los mencionados bloques y sobre todo un mecanismo más flexible que la comunicación interproceso tradicional con las limitaciones que éstas imponen.


El uso de colas de mensajes nos brinda una alternativa válida para implementar la mencionada comunicación, y hasta la coordinación de dichos componentes.  Consideremos que la cola de mensajes es un arbitro que rompe el conocimiento o dependencia directa entre las partes ya que ella se ubica en medio siendo lo único que conocen y dependen consumidores y productores de mensajes.  Con ello el código de comunicación es menor en cada componente y la comunicación sigue un patrón standard como es el de Publisher-suscriber, o Listener DP, que es una solución probada y adoptada en la industria del software.


Otra ventaja en el uso de colas es que permiten implementar una comunicación asincrónica ya que como mencionamos anteriormente los productores y consumidores no interactúan entre si sino que lo hacen a través de la cola por lo cual los mensajes pueden ser enviados a la cola sin importar si existe alguien disponible escuchando los mismos o que los pueda procesar en ese mismo momento.  De igual forma un consumidor puede ir tomando o recibiendo mensajes desde la cola a su tiempo y poder de procesamiento.  De esta forma ningún componente depende directamente del otro, mejorando el flujo de datos.


De lo mencionado hasta aquí se desprende que la arquitectura es flexible respecto a su escalabilidad ya que acorde a la carga de trabajo, los nodos de la cola misma pueden escalarse, los productores pueden crecer en número y los consumidores de la misma forma, con lo cual permite crecer la capacidad del sistema de forma casi transparente.


Una gran ventaja a mencionar es que al ser la cola quien administra los datos, existe una mayor tolerancia a fallas, ya que si algún componente no se encuentra disponible es la misma cola la que realiza la persistencia de los datos y ella misma puede implementarse en un esquema de alta disponibilidad mejorando aun mas la tolerancia a errores.


Consideraciones particulares a Promo

Promo ha incorporado de forma estándar el uso de las colas mencionadas.

En la siguiente imagen se puede observar un diagrama de arquitectura simple:

Del diagrama se desprende que Promo como productor de la información que él administra (ej: Tarjetas de fidelidad), mientras que al mismo tiempo es un consumidor de la información provista por sistemas externos (ej. Catálogo de marcas).


De esta forma se obtienen todas las ventajas mencionadas en la primer parte del documento donde se elimina la interdependencia entre sistemas, y además el balanceo de carga y escalabilidad se hacen de forma transparente ya que tanto Promo como el sistema externo puede crecer independientemente del otro.  Al mismo tiempo la comunicación entre ambos sistemas es administrada por el servidor de colas homogeneizando la misma y eliminando la relación directa y por ende la posibilidad de fallas por no encontrar un componente disponible, o no responder en el tiempo estipulado.

¿Qué es RabbitMQ?

RabbitMQ es un software de encolado de mensajes llamado broker de mensajería o gestor de colas. Dicho de forma simple, es un software donde se pueden definir colas, las aplicaciones se pueden conectar a dichas colas y transferir/leer mensajes en ellas.

¿Cómo funciona?

La arquitectura básica de una cola de mensajes es simple. Hay aplicaciones clientes, llamadas productores, que crean mensajes y los entregan al intermediario (la cola de mensajes). Otras aplicaciones, llamadas consumidores, se conectan a la cola y se suscriben a los mensajes que se procesarán. Un mensaje puede incluir cualquier tipo de información.

Un software puede ser un productor, consumidor, o productor y consumidor de mensajes simultáneamente. Los mensajes colocados en la cola se almacenan hasta que el consumidor los recupera y procesa.


Requisitos

En el desarrollo de este manual se asume que se posee un servidor RabbitMQ instalado, disponible y configurado.

Para mayor información dirigirse a https://www.rabbitmq.com/


Promo como Consumidor

Promo posee funcionalidad de consumidor de colas RabbitMQ a los fines de recibir información sobre catálogos desde sistemas externos (productores).

Configuración

Los parámetros de configuración que activan y definen ésta funcionalidad se encuentran en Administración→Información de Configuración.  (Palabra clave RabbitMQ en la búsqueda).

Una vez que Promo recibe información desde la cola Rabbit correspondiente, la misma será derivada al monitor de Importación y será procesada por la tarea programada denominada "Importador de Entidades".


Para dar soporte a dicha funcionalidad, se debe configurar en el menú Administración, en la sección Información de configuración, las siguientes entradas:


ClaveTipo de DatoDescripción
rabbitMQ.enabledBooleanoPropiedad que indica si está habilitado RabbitMQ (true o false).  Si se fija en TRUE Promo se conectará al servidor RabbitMQ y quedará en escucha del mismo.  Si se fija en false se desconectará del mismo.
rabbitMQ.endpointNameAlfanuméricoNombre de la cola de RabbitMQ de la cual se consumirán los mensajes
rabbitMQ.uriAlfanumérico

URI de conexión completa RabbitMQ (amqp://<user>:<password>@<host>:<port>/<vhost>)

vhost: Opcional en caso de estar definido dentro del server RabbitMQ

Este parámetro contiene y excluye a los otros marcados con *

rabbitMQ.username*AlfanuméricoUsuario para acceder al RabbitMQ
rabbitMQ.password*AlfanuméricoPassword para acceder al RabbitMQ
rabbitMQ.host*AlfanuméricoDirección (host) del RabbitMQ server
rabbitMQ.virtualHost*AlfanuméricoVirtual Host al RabbitMQ
rabbitMQ.port*NuméricoPuerto del server RabbitMQ


Acorde a la tabla anterior tendremos 2 formas excluyentes de configurar, es decir o se utiliza el parámetro de URI o se utilizan sus componentes por separado.

Tendremos entonces por ejemplo:

1) Utilizando URI:

  • rabbitMQ.enabled: (true o false)

  • rabbitMQ.uri:amqp://<user>:<password>@<host>:<port>/<vhost(Opcional)>

  • rabbitMQ.endpointName:<nombreCola>


2) Utilizando los parámetros por separado:

  • rabbitMQ.enabled:(true o false) 

  • rabbitMQ.username:<user>

  • rabbitMQ.password:<pass>

  • rabbitMQ.host:<host>

  • rabbitMQ.virtualHost:<vhost>

  • rabbitMQ.port:<port>

  • rabbitMQ.endpointName:<nombreCola>


En la figura siguiente se observa la pantalla de Configuración:


Consumer por Empresa

Promo soporta solo un consumidor por compañía.

Una vez configurado las propiedades de las colas, el sistema intentara conectarse al servidor de RabbitMQ, de no lograr una conexión exitosa, el sistema intentara nuevamente cuando se ejecute el job de importación "JobService" (antes de realizar la llamada a la importación)



Formato de Mensajes de la Cola (Catálogos)

El formato del mensaje a recibir desde las colas sigue el siguiente patrón (JSON) general:

{
	"companyId": "<companyId>",
	"catalog": "<catalogName>",
	"params": [],
	"items": [{
			"operation": "I",
			"<fieldName>": "<name>",
			"<fieldCode>": "<code>"
		},
		{
			"operation": "U",
			"<fieldName>": "<name>",
			"<fieldCode>": "<code>"
		},
		{
			"operation": "D",
			"<fieldName>": "<name>",
			"<fieldCode>": "<code>"
		},
		{
			"operation": "I",
			"<fieldName>": "<name>",
			"<fieldCode>": "<code>"
		}
	]
}	 


Donde:

Propiedad

Tipo de dato

Descripción

companyId

Alfanumérico

Código de la compañía

catalog

Alfanumérico

Código que identifica el catalogo (VER TIPOS VALIDOS)

params

JSON 

Opcional. Datos auxiliares a definir los cuales se usaran para utilizar en la importación del catalogo

items

Array de Json

Son los ítems a importar del catalogo

operation

Alfabético

Operación a realizar sobre el registro (I ,U, D)

"I"  indica que el registro debe insertarse

"U" indica que el registro debe actualizarse

"D" indica que el registro debe eliminarse

"IU" indica que el registro será insertado en caso de no existir o bien actualizado si existe

<fieldName>
Alfanuméricocampos específicos del catalogo a importar


TIPOS VALIDOS DE CATÁLOGOS:


catalogDescripción
catalogCardCatálogo de Tarjetas de fidelidad
catalogBrandCatálogo de Marcas
catalogCategoryCatálogo de Categorías
catalogChannelCatálogo de Canales
catalogCreditCampaignCodeCatálogo de Campañas Crediticias
catalogCustomerCatálogo de Clientes
catalogCustomerTypeCatálogo de tipos de Clientes
catalogIdTypeCatalogo de tipo de identificador
catalogDepartmentCatálogo de Departamentos
catalogEventTransactionCatálogo de eventos
catalogEventTransactionTypeCatálogo de tipo de eventos
catalogExtendWarrantyCatálogo de Extensión de Garantías
catalogFamilyCatálogo de Familia de productos
catalogFormatCatálogo de Formatos
catalogInfoFinancialCatálogo de información financiera
catalogItemCatálogo de productos
catalogItemStockCatálogo de Stock de productos
catalogPaymentBankCatálogo de pagos Bancarios
catalogPaymentCodeCatálogo de código de pagos Bancarios
catalogPaymentPrefixCatálogo de Prefijos Bancarios
catalogPaymentTypeCatálogo de Tipo de pagos
catalogProfileCodeCatálogo de Código de Perfil del cliente
catalogStoreChainCatálogo de cadena de valor
catalogSubCategoryCatálogo de subcategoría
catalogSubZoneCatálogo de subzona
catalogSupplierCatálogo de proveedor
catalogZoneCatálogo de zonas
catalog<CodeFieldDynamic>Catálogo dinámico el nombre del mismo se forma con el String catalog concatenado con el código del campo dinámico generado en la consola



Ejemplos de carga de Catálogos


En el siguiente ejemplo se observa la inserción de 2 registros de tarjetas.

Tarjetas
{
	"companyId": "napse",
	"catalog": "catalogCard",
	"params": [],
	"items": [
		{
		"operation": "I",
		"code": "1234000000000",
		"type": "1234",
		"validFrom": "2019-06-01",
		"validTo": "2029-06-20",
		"cvv": "987",
		"customerId": 12134,
		"amount": 300000
		},
		{
		"operation": "I",
		"code": "1234000000001",
		"type": "1234",
		"validFrom": "2019-06-01",
		"validTo": "2029-06-22",
		"cvv": "879",
		"customerId": 2222,
		"amount": 60000
		},
	]
}

En versiones superiores a 6.5.14 y 7.0 se incorpora la posibilidad de realizar actualizaciones sobre el campo cvv.  En este caso dicho campo queda registrado como una actualización en el detalle de movimientos de tarjetas de fidelidad.


En el siguiente ejemplo se observa la inserción de 2 registros de Marcas:

Marcas
{
	"companyId": "napse",
	"catalog": "catalogBrand",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "coke",
			"name": "Coca-Cola Company"
		},
		{
			"operation": "I",
			"code": "pepsi",
			"name": "Pepsi"
		}
	]
}

Aquí se observa un ejemplo de insertar un registro de Categoría:

Categorias
{
	"companyId": "napse",
	"catalog": "catalogCategory",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "lineaBlanca",
			"name": "Linea Blanca",
            "familyCode":"Elect" 
		} 
	]
}
Canal
{
	"companyId": "napse",
	"catalog": "catalogChannel",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "web",
			"name": "WEB" 
		} ,{
			"operation": "I",
			"code": "POS",
			"name": "POINT OF SALE" 
		} 
	]
}
Campaña de Créditos
{
	"companyId": "napse",
	"catalog": "catalogCreditCampaignCode",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "campg1",
			"name": "Campania 1" 
		}   
	]
}
Clientes
{
	"companyId": "napse",
	"catalog": "catalogCustomer",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "abc29789456",
			"name": "Jose Luis",
			"lastName": "Martinez", 
			"email":"[email protected]",
		   	"identificationType":"DNI",
            "identifier":"29789456"
		}  
	]
}
Tipo de Clientes
{
	"companyId": "napse",
	"catalog": "catalogCustomerType",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "vip",
			"name": "VIP CLIENT" 
		}  
	]
}
Tipo de Identificador
{
	"companyId": "napse",
	"catalog": "catalogIdType",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "DNI",
			"name": "DOCUMENTO NACIONAL DE IDENTIDAD" 
		}  
	]
}
Departamentos
{
	"companyId": "napse",
	"catalog": "catalogDepartment",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "elec",
			"name": "Electronica" 
		}  
	]
}
Eventos
{
	"companyId": "napse",
	"catalog": "catalogEventTransaction",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "blFriday",
			"name": "Black Friday" 
		}  
	]
}
Tipo de Eventos
{
	"companyId": "napse",
	"catalog": "catalogEventTransactionType",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "bf2019",
			"name": "Black Friday 2019" 
		}  
	]
}


Garantia Extendida
{
	"companyId": "napse",
	"catalog": "catalogExtendWarranty",
	"params": [],
	"items": [{
		"operation": "I",
		"code": "sonyArg",
		"category": "lineaBlanca",
		"creditProduct": "40 por ciento",
		"profileCustomers": "vip",
		"store": "dot",
		"skuWarranty": "WAUKH78EX6A144617",
		"yearsWarranty": "2 años",
		"initDate": ,
		"endDate": ,
		"endPrice": 13999
	}]
}

Familia de Productos
{
	"companyId": "napse",
	"catalog": "catalogFamily",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "coc",
			"name": "Cocina" 
		}  
	]
}
Formatos
{
	"companyId": "napse",
	"catalog": "catalogFormat",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "dig",
			"name": "Digital" 
		}  
	]
}
Información Financiera
{
	"companyId": "napse",
	"catalog": "catalogInfoFinancial",
	"params": [],
	"items": [{
			"operation": "I",
			"code": "buss",
			"name": "Financial Bus" 
		}  
	]
}
Productos
{
	"companyId": "napse",
	"catalog": "catalogItem",
	"params": [],
	"items": [{
		"operation": "I",
		"code": "997551470-7",
		"name": "Disco sdd 256",
		"unitprice": 5000,
		"level1": "depart1",
		"level2": "family1",
		"level3": "category1",
		"level4": "subcategory1",
		"supplier": "tecno",
		"brand": "WesternDigital",
		"detail": "WesternDigital 512 gb",
		"detail2": "WesternDigital 512 gb sdd",
 		"<CodeFieldDynamic>":"<value>"
	}]
}


Catalogo de Ítem con campos Dinámicos

El catalogo de ítem soporta la inserción de los campos dinámicos, Se deberán enviar como un atributo más poniendo el código del campo entre comillas : y su valor entre comillas


Ejemplo de CatalogItem con dos campos dinámicos, por ejemplo si se tienen dos campos dinámicos con el código sublinea y otro color, el ejemplo seria el siguiente
Productos con campos Dinámicos

Catalogo Producto con campos Dinámicos
{
	"companyId": "napse",
    "catalog": "catalogItem",
    "params": [],
    "items": [{
        "operation": "I",
        "code": "997551470-7",
        "name": "Disco sdd 256",
        "unitprice": 5000,
        "level1": "depart1",
        "level2": "family1",
        "level3": "category1",
        "level4": "subcategory1",
        "supplier": "tecno",
        "brand": "WesternDigital",
        "detail": "WesternDigital 512 gb",
        "detail2": "WesternDigital 512 gb sdd",
        "sublinea":"miSublinea",
        "color": "azul"
    }]
}
Pagos bancarios
{
	"companyId": "napse",
	"catalog": "catalogPaymentBank",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "credit18",
		"name": "18 cuotas sin interes"
	}]
}
Código de Pago
{
	"companyId": "napse",
	"catalog": "catalogPaymentCode",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "paymentCode1",
		"name": "payment code 1"
	}]
}
Prefijo de Pago
{
	"companyId": "napse",
	"catalog": "catalogPaymentPrefix",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "perfix1",
		"name": "perfix1"
	}]
}
Tipo de Pago
{
	"companyId": "napse",
	"catalog": "catalogPaymentType",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "tarjeta",
		"name": "tarjeta de credito"
	}]
}
Perfil del Cliente
{
	"companyId": "napse",
	"catalog": "catalogProfileCode",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "abc1",
		"name": "clientes abc1"
	}]
}
Tipo de Pagos
{
	"companyId": "napse",
	"catalog": "catalogPaymentType",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "tarjeta",
		"name": "tarjeta de credito"
	}]
}
Paises
{
	"companyId": "napse",
	"catalog": "catalogStoreChain",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "chain1",
		"name": "chain1"
	}]
}
SubCategoria
{
	"companyId": "napse",
	"catalog": "catalogSubCategory",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "peqElec",
		"name": "Pequeños Electrodomesticos",
        "categoryCode": "ELECT"
	}]
}

Catalogo de Subcategoria

El atributo categoryCode del catalogo de Subcategorías, es el código de la categoría

SubZonas
{
	"companyId": "napse",
	"catalog": "catalogSubZone",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "conurb",
		"name": "conurbano bsas" 
	}]
}
Proveedores
{
	"companyId": "napse",
	"catalog": "catalogSupplier",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "sony",
		"name": "sony corporation" 
	}]
}
Zonas
{
	"companyId": "napse",
	"catalog": "catalogZone",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "bsnorte",
		"name": "zona norte bsas" 
	}]
}
Catalogo Dinámico
{
	"companyId": "napse",
	"catalog": "catalog<Dynamic>",
	"params": [],
	"items": [{
		"operation": "I", 
		"code": "code",
		"name": "name" 
	}]
}

Catalogos Dinamicos

Los catálogos dinámicos tendrán el nombre formado por catalog concatenado con el código del atributo dinámico creado en la consola. Por ejemplo si el atributo creado en la consola es color, la propiedad del Json deberá ser "catalog":"catalogColor"

Catálogos Asociados a Campos Dinámicos

La definición de los denominados campos dinámicos permite asociar los mismos con un catálogo.  Este catálogo puede ser también administrado vía colas.


Ejemplo de carga de catalogo DINÁMICO.

Pasos 

Ir al menú Administración en la opción Atributo de elementos, allí se creara el campo dinámico el cual tendrá que definirse como tipo AUTOCOMPLETADO POR CATALOGO. 

Paso 1 creación de campo dinámico


  1. Una vez creado el nuevo atributo, desde el Productor de RabbitMQ, ya se podrá enviar los datos asociados al nuevo catalogo




  2. Para poder acceder al resultado de la importación se tendrá que ver ir  en el menú SOPORTE la opción Monitor de Importación.






 3. En Administración, Importación de catálogos se podrán ver los datos ingresados.


4.En la promoción se podrá seleccionar los datos ingresados.





5. Para que el motor pueda evaluar la promoción se deberá distribuir el atributo creado en el paso (Dicha distribución precisa que se reinicie el motor).


6. Distribuir el mapa con la promoción para poder evaluar la misma.


Promo como Productor

Promo permite el envío de información mediante colas RabbitMQ (función productor).  Por defecto esta información es enviada cada 30 minutos (proceso background) al servidor de colas.


Configuración del Producer

Para dar soporte a dicha funcionalidad, se debe configurar en el menú Administración, en el sub-menú Información de configuración, las siguientes entradas:

ClaveTipo de DatoDescripción
rabbitMQ.producer.enabledBooleanoPropiedad que indica si está habilitado RabbitMQ para el posteo de datos (true o false)
rabbitMQ.promotion.endpointNameAlfanuméricoNombre de la cola de RabbitMQ para el posteo de promociones, la cual se encargara de recibir los mensajes para el posterior procesamiento por parte del Consumer
rabbitMQ.limitstatus.endpointNameAlfanuméricoNombre de la cola de RabbitMQ para el posteo del status de limites, la cual se encargara de recibir los mensajes para el posterior procesamiento por parte del Consumer

rabbitMQ.enginestatus.endpointName

AlfanuméricoNombre de la cola de RabbitMQ para el posteo del status de motor y consola.
rabbitMQ.producer.uriAlfanuméricoURI de conexión completa RabbitMQ para el posteo de datos (amqp://<user>:<password>@<host>:<port>/<vhost>)

vhost: Opcional en caso de estar definido dentro del server RabbitMQ

rabbitMQ.producer.usernameAlfanuméricoUsuario para acceder al RabbitMQ para el posteo de datos
rabbitMQ.producer.passwordAlfanuméricoPassword para acceder al RabbitMQ para el posteo de datos
rabbitMQ.producer.hostAlfanuméricoDirección (host) del RabbitMQ server para el posteo de datos
rabbitMQ.producer.virtualHostAlfanuméricoVirtual Host al RabbitMQ para el posteo de datos
rabbitMQ.producer.portNuméricoPuerto del server RabbitMQ para el posteo de datos
rabbitMQ.promotionsCache.endpointNameAlfanuméricoNombre de la cola RabbitMQ que recibirá los mensajes referentes al Cache de Promociones.  (Ver Cache de Promociones)

Nuevamente la configuración vía URI es excluyente a la configuración por parámetros separados.  Entonces tendremos dos configuraciones:

Configuración mediante URI:

  • rabbitMQ.producer.enabled: (true o false)

  • rabbitMQ.producer.uri:amqp://<user>:<password>@<host>:<port>/<vhost(Opcional)>

  • rabbitMQ.promotion.endpointName:<nombreCola para posteo de promociones>

  • rabbitMQ.limitstatus.endpointName:<nombreCola para posteo del status de limites>

  • rabbitMQ.cardhistory.endpointName: <Nombre de la cola de RabbitMQ para el posteo de datos de tipo CardHistory>

  • rabbitMQ.enginestatus.endpointName:<nombreCola para posteo del status del motor y consola>


Segunda o configuración por parámetros:

  • rabbitMQ.producer.enabled:(true o false) 

  • rabbitMQ.producer.username:<user>

  • rabbitMQ.producer.password:<pass>

  • rabbitMQ.producer.host:<host>

  • rabbitMQ.producer.virtualHost:<vhost>

  • rabbitMQ.producer.port:<port>

  • rabbitMQ.promotion.endpointName:<nombreCola para posteo de promociones>

  • rabbitMQ.limitstatus.endpointName:<nombreCola para posteo del status de limites>

  • rabbitMQ.cardhistory.endpointName: <nombreCola para posteo del CardHistory>

  • rabbitMQ.enginestatus.endpointName:<nombreCola para posteo del status del motor y consola>


RabbitMQ – Promociones

En Promo se implementa la funcionalidad de Producer de RabbitMQ, para el posteo de mensajes asociados a las promociones aprobadas nuevas y editadas, para dicho productor se deberá configurar toda la información necesaria para una conexión exitosa al servidor RabbitMQ, en Administración → Información de configuración, modulo: Promo, palabra a buscar: rabbitMQ.pro.

Cada Nueva promoción que se genere o cada cambio que se realice sobre una promoción generara un nuevo archivo json que será posteado para envío al servidor RabbitMQ. este archivo será procesado por un Job que se ejecutara cada 30 minutos, en caso de existir algún error en la conexión, el registro del posteo quedara en status ERROR, hasta que sea Reprocesado en el Monitor de exportación.

Estructura principal:

A modo de ejemplo, se expone la siguiente estructura.

Promociones
{
    "_id":"5d3fa315aa28381accc0665b",
    "active":true,
    "alwaysValid":true,
    "benefits":[
        {
            "_id":"5d40466eaa28381accc0bd44",
            "benefitApplicationMethod":{
                "_id":"5d3f134aaa28380af0b56459",
                "code":"resume",
                "name":"Resumen"
            },
            "benefitClass":{
                "_id":"5d3f1347aa28380af0b5641e",
                "benefitClassFields":[
                    {
                        "_id":"5d3f1344aa28380af0b563f5",
                        "benefitClassFieldOptions":null,
                        "code":"newprice",
                        "description":"Nuevo precio ($)",
                        "isRequired":true,
                        "name":"El siguiente precio ($)",
                        "type":"Double"
                    },
                    {
                        "_id":"5d3f1344aa28380af0b563f4",
                        "benefitClassFieldOptions":[
                            {
                                "_id":"5d3f1344aa28380af0b563ef",
                                "code":"qty",
                                "name":"Cantidad"
                            },
                            {
                                "_id":"5d3f1344aa28380af0b563f0",
                                "code":"magnitude",
                                "name":"Magnitud"
                            },
                            {
                                "_id":"5d3f1344aa28380af0b563f1",
                                "code":"na",
                                "name":"Todo"
                            }
                        ],
                        "code":"unit",
                        "isRequired":true,
                        "name":"Por cada unidad de",
                        "type":"List"
                    }
                ],
                "benefitClassLimitType":[
 
                ],
                "benefitRedeemWithOptions":null,
                "benefitType":"5d3f1345aa28380af0b5641c",
                "code":"NewPrice",
                "name":"Nuevo precio"
            },
            "benefitDivisionMethod":{
                "_id":"5d3f1348aa28380af0b56428",
                "code":"proportional",
                "name":"Proporcional"
            },
            "benefitDivisionPrice":{
                "_id":"5d3f1349aa28380af0b5642c",
                "code":"benefited-price",
                "name":"Precio beneficiado"
            },
            "benefitSetType":null,
            "benefitType":{
                "_id":"5d3f1345aa28380af0b5641c",
                "code":"monetary",
                "name":"Monetario"
            },
            "displayMessage":"3 items con nuevo precio",
            "elementSet":{
                "_id":"5d40466eaa28381accc0bd3c",
                "children":[
                    {
                        "_id":"5d40466eaa28381accc0bd3d",
                        "children":null,
                        "operator":"SIMPLE",
                        "setType":{
                            "_id":"5d3f1341aa28380af0b563c0",
                            "applyForCombo":true,
                            "code":"item",
                            "isActive":true,
                            "name":"Productos"
                        },
                        "setTypeAttribute":{
                            "_id":"5d3f1341aa28380af0b563c1",
                            "applyForEquivalenceAttribute":true,
                            "applyForInequivalenceAttribute":true,
                            "code":"code",
                            "disabledByDefault":false,
                            "entityCatalog":"CatalogItem",
                            "isPromoDefaultAttribute":true,
                            "isRequired":true,
                            "measurable":false,
                            "name":"Codigo (SKU)",
                            "setType":"5d3f1341aa28380af0b563c0",
                            "setTypeAttributeComparators":[
                                "5d3f1341aa28380af0b563bc",
                                "5d3f1341aa28380af0b563bf"
                            ],
                            "type":"autocomplete"
                        },
                        "setTypeAttributeComparator":{
                            "_id":"5d3f1341aa28380af0b563bc",
                            "code":"Into",
                            "name":"IGUAL"
                        },
                        "simple":true,
                        "value":"515418"
                    },
                    {
                        "_id":"5d40466eaa28381accc0bd3e",
                        "children":null,
                        "operator":"SIMPLE",
                        "setType":{
                            "_id":"5d3f1341aa28380af0b563c0",
                            "applyForCombo":true,
                            "code":"item",
                            "isActive":true,
                            "name":"Productos"
                        },
                        "setTypeAttribute":{
                            "_id":"5d3f1341aa28380af0b563c1",
                            "applyForEquivalenceAttribute":true,
                            "applyForInequivalenceAttribute":true,
                            "code":"code",
                            "disabledByDefault":false,
                            "entityCatalog":"CatalogItem",
                            "isPromoDefaultAttribute":true,
                            "isRequired":true,
                            "measurable":false,
                            "name":"Codigo (SKU)",
                            "setType":"5d3f1341aa28380af0b563c0",
                            "setTypeAttributeComparators":[
                                "5d3f1341aa28380af0b563bc",
                                "5d3f1341aa28380af0b563bf"
                            ],
                            "type":"autocomplete"
                        },
                        "setTypeAttributeComparator":{
                            "_id":"5d3f1341aa28380af0b563bc",
                            "code":"Into",
                            "name":"IGUAL"
                        },
                        "simple":true,
                        "value":"694205"
                    },
                    {
                        "_id":"5d40466eaa28381accc0bd3f",
                        "children":null,
                        "operator":"SIMPLE",
                        "setType":{
                            "_id":"5d3f1341aa28380af0b563c0",
                            "applyForCombo":true,
                            "code":"item",
                            "isActive":true,
                            "name":"Productos"
                        },
                        "setTypeAttribute":{
                            "_id":"5d3f1341aa28380af0b563c1",
                            "applyForEquivalenceAttribute":true,
                            "applyForInequivalenceAttribute":true,
                            "code":"code",
                            "disabledByDefault":false,
                            "entityCatalog":"CatalogItem",
                            "isPromoDefaultAttribute":true,
                            "isRequired":true,
                            "measurable":false,
                            "name":"Codigo (SKU)",
                            "setType":"5d3f1341aa28380af0b563c0",
                            "setTypeAttributeComparators":[
                                "5d3f1341aa28380af0b563bc",
                                "5d3f1341aa28380af0b563bf"
                            ],
                            "type":"autocomplete"
                        },
                        "setTypeAttributeComparator":{
                            "_id":"5d3f1341aa28380af0b563bc",
                            "code":"Into",
                            "name":"IGUAL"
                        },
                        "simple":true,
                        "value":"911899"
                    }
                ],
                "operator":"UNION",
                "setType":{
                    "_id":"5d3f1341aa28380af0b563c0",
                    "applyForCombo":true,
                    "code":"item",
                    "isActive":true,
                    "name":"Productos"
                },
                "setTypeAttribute":null,
                "setTypeAttributeComparator":null,
                "simple":false
            },
            "elementSetOrderCriteria":null,
            "elementSetTypeAttribute":null,
            "limits":null,
            "parameters":[
                {
                    "benefitClassField":{
                        "_id":"5d3f1344aa28380af0b563f5",
                        "benefitClassFieldOptions":null,
                        "code":"newprice",
                        "description":"Nuevo precio ($)",
                        "isRequired":true,
                        "name":"El siguiente precio ($)",
                        "type":"Double"
                    },
                    "benefitClassFieldOption":null,
                    "value":"100"
                },
                {
                    "benefitClassField":{
                        "_id":"5d3f1344aa28380af0b563f4",
                        "benefitClassFieldOptions":[
                            {
                                "_id":"5d3f1344aa28380af0b563ef",
                                "code":"qty",
                                "name":"Cantidad"
                            },
                            {
                                "_id":"5d3f1344aa28380af0b563f0",
                                "code":"magnitude",
                                "name":"Magnitud"
                            },
                            {
                                "_id":"5d3f1344aa28380af0b563f1",
                                "code":"na",
                                "name":"Todo"
                            }
                        ],
                        "code":"unit",
                        "isRequired":true,
                        "name":"Por cada unidad de",
                        "type":"List"
                    },
                    "benefitClassFieldOption":{
                        "_id":"5d3f1344aa28380af0b563f1",
                        "code":"na",
                        "name":"Todo"
                    }
                }
            ],
            "printerMessage":"3 items con nuevo precio",
            "replicateConditionSet":true,
            "tlogMessage":"3 items con nuevo precio"
        }
    ],
    "campaign":{
        "_id":"5d3f1a78aa2838089ca7b039",
        "companyId":"exito",
        "description":"BLACK FRIDAY",
        "endDate":{
            "$date":3081773400000
        },
        "isActive":true,
        "name":"BLACK FRIDAY",
        "startDate":{
            "$date":1564416600000
        }
    },
    "code":"10010",
    "combo":{
        "_id":"5d40466eaa28381accc0bd40",
        "components":[
            {
                "_id":"5d40466eaa28381accc0bd41",
                "conditionComboCriteriaOrder":null,
                "elementSet":{
                    "_id":"5d40466eaa28381accc0bd39",
                    "children":null,
                    "operator":"SIMPLE",
                    "setType":{
                        "_id":"5d3f1341aa28380af0b563c0",
                        "applyForCombo":true,
                        "code":"item",
                        "isActive":true,
                        "name":"Productos"
                    },
                    "setTypeAttribute":{
                        "_id":"5d3f1341aa28380af0b563c1",
                        "applyForEquivalenceAttribute":true,
                        "applyForInequivalenceAttribute":true,
                        "code":"code",
                        "disabledByDefault":false,
                        "entityCatalog":"CatalogItem",
                        "isPromoDefaultAttribute":true,
                        "isRequired":true,
                        "measurable":false,
                        "name":"Codigo (SKU)",
                        "setType":"5d3f1341aa28380af0b563c0",
                        "setTypeAttributeComparators":[
                            "5d3f1341aa28380af0b563bc",
                            "5d3f1341aa28380af0b563bf"
                        ],
                        "type":"autocomplete"
                    },
                    "setTypeAttributeComparator":{
                        "_id":"5d3f1341aa28380af0b563bc",
                        "code":"Into",
                        "name":"IGUAL"
                    },
                    "simple":true,
                    "value":"515418"
                },
                "elementSetType":{
                    "_id":"5d3f1341aa28380af0b563c0",
                    "applyForCombo":true,
                    "code":"item",
                    "isActive":true,
                    "name":"Productos"
                },
                "elementSetTypeEquivalenceAttribute":null,
                "elementSetTypeInequivalenceAttribute":null,
                "elementSetTypeMeasureUnitAttribute":{
                    "_id":"5d3f1342aa28380af0b563ca",
                    "applyForEquivalenceAttribute":false,
                    "applyForInequivalenceAttribute":true,
                    "code":"qty",
                    "disabledByDefault":false,
                    "isPromoDefaultAttribute":true,
                    "isRequired":true,
                    "measurable":true,
                    "name":"Cantidad",
                    "setType":"5d3f1341aa28380af0b563c0",
                    "setTypeAttributeComparators":[
                        "5d3f1341aa28380af0b563bc",
                        "5d3f1341aa28380af0b563bd",
                        "5d3f1341aa28380af0b563be"
                    ],
                    "type":"Integer"
                },
                "max":1.0,
                "min":1.0
            },
            {
                "_id":"5d40466eaa28381accc0bd42",
                "conditionComboCriteriaOrder":null,
                "elementSet":{
                    "_id":"5d40466eaa28381accc0bd3a",
                    "children":null,
                    "operator":"SIMPLE",
                    "setType":{
                        "_id":"5d3f1341aa28380af0b563c0",
                        "applyForCombo":true,
                        "code":"item",
                        "isActive":true,
                        "name":"Productos"
                    },
                    "setTypeAttribute":{
                        "_id":"5d3f1341aa28380af0b563c1",
                        "applyForEquivalenceAttribute":true,
                        "applyForInequivalenceAttribute":true,
                        "code":"code",
                        "disabledByDefault":false,
                        "entityCatalog":"CatalogItem",
                        "isPromoDefaultAttribute":true,
                        "isRequired":true,
                        "measurable":false,
                        "name":"Codigo (SKU)",
                        "setType":"5d3f1341aa28380af0b563c0",
                        "setTypeAttributeComparators":[
                            "5d3f1341aa28380af0b563bc",
                            "5d3f1341aa28380af0b563bf"
                        ],
                        "type":"autocomplete"
                    },
                    "setTypeAttributeComparator":{
                        "_id":"5d3f1341aa28380af0b563bc",
                        "code":"Into",
                        "name":"IGUAL"
                    },
                    "simple":true,
                    "value":"694205"
                },
                "elementSetType":{
                    "_id":"5d3f1341aa28380af0b563c0",
                    "applyForCombo":true,
                    "code":"item",
                    "isActive":true,
                    "name":"Productos"
                },
                "elementSetTypeEquivalenceAttribute":null,
                "elementSetTypeInequivalenceAttribute":null,
                "elementSetTypeMeasureUnitAttribute":{
                    "_id":"5d3f1342aa28380af0b563ca",
                    "applyForEquivalenceAttribute":false,
                    "applyForInequivalenceAttribute":true,
                    "code":"qty",
                    "disabledByDefault":false,
                    "isPromoDefaultAttribute":true,
                    "isRequired":true,
                    "measurable":true,
                    "name":"Cantidad",
                    "setType":"5d3f1341aa28380af0b563c0",
                    "setTypeAttributeComparators":[
                        "5d3f1341aa28380af0b563bc",
                        "5d3f1341aa28380af0b563bd",
                        "5d3f1341aa28380af0b563be"
                    ],
                    "type":"Integer"
                },
                "max":1.0,
                "min":1.0
            },
            {
                "_id":"5d40466eaa28381accc0bd43",
                "conditionComboCriteriaOrder":null,
                "elementSet":{
                    "_id":"5d40466eaa28381accc0bd3b",
                    "children":null,
                    "operator":"SIMPLE",
                    "setType":{
                        "_id":"5d3f1341aa28380af0b563c0",
                        "applyForCombo":true,
                        "code":"item",
                        "isActive":true,
                        "name":"Productos"
                    },
                    "setTypeAttribute":{
                        "_id":"5d3f1341aa28380af0b563c1",
                        "applyForEquivalenceAttribute":true,
                        "applyForInequivalenceAttribute":true,
                        "code":"code",
                        "disabledByDefault":false,
                        "entityCatalog":"CatalogItem",
                        "isPromoDefaultAttribute":true,
                        "isRequired":true,
                        "measurable":false,
                        "name":"Codigo (SKU)",
                        "setType":"5d3f1341aa28380af0b563c0",
                        "setTypeAttributeComparators":[
                            "5d3f1341aa28380af0b563bc",
                            "5d3f1341aa28380af0b563bf"
                        ],
                        "type":"autocomplete"
                    },
                    "setTypeAttributeComparator":{
                        "_id":"5d3f1341aa28380af0b563bc",
                        "code":"Into",
                        "name":"IGUAL"
                    },
                    "simple":true,
                    "value":"911899"
                },
                "elementSetType":{
                    "_id":"5d3f1341aa28380af0b563c0",
                    "applyForCombo":true,
                    "code":"item",
                    "isActive":true,
                    "name":"Productos"
                },
                "elementSetTypeEquivalenceAttribute":null,
                "elementSetTypeInequivalenceAttribute":null,
                "elementSetTypeMeasureUnitAttribute":{
                    "_id":"5d3f1342aa28380af0b563ca",
                    "applyForEquivalenceAttribute":false,
                    "applyForInequivalenceAttribute":true,
                    "code":"qty",
                    "disabledByDefault":false,
                    "isPromoDefaultAttribute":true,
                    "isRequired":true,
                    "measurable":true,
                    "name":"Cantidad",
                    "setType":"5d3f1341aa28380af0b563c0",
                    "setTypeAttributeComparators":[
                        "5d3f1341aa28380af0b563bc",
                        "5d3f1341aa28380af0b563bd",
                        "5d3f1341aa28380af0b563be"
                    ],
                    "type":"Integer"
                },
                "max":1.0,
                "min":1.0
            }
        ]
    },
    "companyId":"exito",
    "deploymentChannels":[
        {
            "_id":"5d3f1a78aa2838089ca7b03a",
            "code":"pos",
            "companyId":"napse",
            "name":"Punto de venta",
            "social":false
        }
    ],
    "evaluateConditionInCombo":false,
    "isWorkflowApproved":true,
    "isWorkflowRejected":false,
    "name":"3 items con nuevo precio-10010",
    "promotionStatus":"COMPLETE",
    "reportParticipants":false,
    "suggest":false,
    "workflow":"Workflow general",
    "workflowStep":"Captura",
    "promotionSubType":"Genérico",
    "promotionType":"Genérico",
    "promotionApplicationForm":"Genérico"
}

Consideraciones generales

El presente documento contiene los datos necesarios para la interpretación del JSON que se expondrá vía cola Rabbit MQ.

Deberán considerarse los siguientes puntos para la correcta interpretación de los datos:

  • Solo se genera el archivo JSON cuando la promoción pase a estado aprobado.
  • Solo se especifica el formato y dependencias de una promoción a modo de ejemplo, cada sección, dependiendo de la definición de la promoción podrá o no estar presente.
  • Como mínimo para dar por completa una promoción, deberá identificarse, los datos de la cabecera, una condición simple o combo y un beneficio.


Habilitacion de RabbitMQ (Producer)

La clave rabbitMQ.producer.enabled, una vez activa (TRUE) permitirá crear los json con el detalle de la Promoción cuando la misma sea Aprobada y en cada edición. De igual forma una vez que se ejecute el Job asociado al posteo de mensajes RabbitMQ intentará conectarse solo si las variables necesarias se encuentran correctamente configuradas.


Cabecera

CampoEjemplosTipo de datoDetalle
id5d3fa316aa28381accc06679StringIdentificación en Mongo de la promoción
activetrue/falseBooleanoIndica si la promoción esta activa
alwaysValidtrue/falseBooleanoIndica el tipo de vigencia definida en la promoción
baseTemplateEj.: "null"StringIndica la plantilla de promociones utilizada para el armado de la promoción.
cancelReasonEj.: "null"StringMensaje con el detalle del porqué de la cancelación
code10015Numérico EnteroIdentifica el código de la promoción
companyIdEj.: "napse"StringIdentifica la compañía a la que está asociada la promoción
descriptionEj.: "Promo 2X1 en almacén"StringDatos adicionales que ayudan a la comprensión del funcionamiento de la promoción.
evaluateConditionInCombotrue/falseBooleanoIndica si se activó en la promoción la opción de evaluar condición en combo
isWorkflowApprovedtrue/falseBooleanoIndica si la promoción está aprobada en el workflow al que esta asignada
isWorkflowRejectedtrue/falseBooleanoIndica si la promoción esta rechazada en el workflow al que esta asignada
lastUpdateEj.: "2020-06-09T17:43:06Z"StringIndica la última actualización realizada a la promoción.
nameEj.: "Promo 2X1 en gaseosas-10015"StringIndica el nombre asignado a la promoción
pictureToolTipEj.: "Gaseosas Promocionadas"StringDescripción de la imagen asignada a la promoción en la consola de Promo
picturePathEj.:”C:/synthesis/promo/images/promotion/5dd6d0ae44e91d06b8bfeb29.jpg”StringRuta donde se aloja de la imagen asignada a la promoción en la consola de Promo
promotionStatus"name": COMPLETE"StringIndica el estado de la promoción
reportParticipantstrue/falseBooleanoIndica si se activó en la promoción la opción de reportar participantes
suggesttrue/falseBooleanoIndica si se habilitaron las sugerencias en la promoción.
suggestMessageEj.: "Captura"StringMensaje de sugerencia
statusDescriptionEj.: "null"StringDetalles de validaciones de la promoción
startDateEj.: "2019-12-20T03:00:00Z"StringEn caso de que no sea siempre "alwaysValid" entonces tiene una fecha de inicio de vigencia de la promoción.
endDateEj.: "2041-01-21T02:59:00Z"StringEn caso de que no sea siempre "alwaysValid" entonces tiene una fecha de fin de vigencia de la promoción.
promotionType6410d47ca62e4318a8ba5e0fStringTipo de promoción.
promotionSubType6410d47ca62e4318a8ba5e10StringSubtipo de promoción.
promotionApplicationForm6410d47ca62e4318a8ba5e11StringForma de aplicación.


Campos adicionales en la cabecera ("hdrFlds"):

Aquí se listarán solo los campos de la cabecera que se encuentren habilitados. De no haberse habilitado ninguno, el tag hdrFlds estará vacío.  

CampoEjemplosTipo de datoDetalle
codeEj.: “field01”StringCódigo del campo adicional de la cabecera.
nameEj.: “Campo 1”StringNombre del campo adicional de la cabecera.
valueEj.: “campo adicional de la cabecera 1”Stringdescripción del campo adicional de la cabecera.


Campaña ("campaign"):

CampoEjemplosTipo de datoDetalle
id5d3f1a78aa2838089ca7b039StringIdentificación en Mongo de la campaña
companyIdEj.: "napse"StringIdentifica la compañía a la que está asociada la campaña
deploymentChannelsEj.: "[ ]"StringIndica el o los canales de distribución asociados a la campaña.
descriptionEj.: "BLACK FRIDAY"StringDescripción de la campaña
endDateEj.: "$date":3081773400000IntegerIdentifica la fecha de fin definida para la campaña
isActivetrue/falseBooleanoIndica si la campaña esta activa
nameEj.: "BLACK FRIDAY"StringIndica el nombre asignado a la campaña
promotionsEj.: "null"StringPromociones vinculadas a la campaña.
startDate"$date":1564416600000IntegerIdentifica la fecha de inicio definida para la campaña.


Canales de publicación ("deploymentChannels")

CampoEjemplosTipo de datoDetalle
id5d3f1a78aa2838089ca7b03aStringIdentificación en Mongo del canal de publicación.
codeEj.: "pos" // "facebook" // "twitter"StringCódigo del canal de publicación afectado.
companyIdEj.: "napse"StringIdentifica la compañía a la que está asociado el canal de publicación.
nameEj.: "Punto de venta" // "Facebook" // "Twitter"StringNombre del canal de publicación afectado.
socialtrue/falseBooleanoIndica si se trata de un canal de redes sociales.


Tipo de Promoción ("promotionType")

CampoEjemplosTipo de datoDetalle
id5dc95b0b44e91d16acff7a36StringIdentificación en Mongo del tipo de la promoción.
codeEj.: “1”IntegerCódigo del tipo de la promoción.
companyIdEj.: "napse"StringCompañía del tipo de la promoción.
createdAtEj.: “2019-11-11T12:58:51Z”StringFecha de creación del tipo de la promoción.
descriptionEj.: “Genérico”StringDescripción del tipo de la promoción.
isActivetrue/falseBooleanoIndica si el tipo de la promoción esta activo.
isDefaulttrue/falseBooleanoIndica si el tipo de promoción usado es el definido por default
isUsedtrue/falseBooleanoIndica si el tipo de la promoción está en uso.
nameEj.: “Genérico”StringNombre del tipo de la promoción.


Sub-Tipo de Promoción ("promotionSubType")

CampoEjemplosTipo de datoDetalle
id5dc95b0b44e91d16acff7a37StringIdentificación en Mongo del sub-tipo de la promoción.
codeEj.: “1”NuméricoCódigo del sub-tipo de la promoción.
companyIdEj.: “napse”StringCompañía del sub-tipo de la promoción.
createdAtEj.: “2019-11-11T12:58:51Z”StringFecha de creación del sub-tipo de la promoción.
descriptionEj.: “Genérico”StringDescripción del sub-tipo de la promoción.
isActivetrue/falseBooleanoIndica si el sub-tipo de la promoción esta activo.
isDefaulttrue/falseBooleanoIndica si el sub-tipo de promoción usado es el definido como default.
nameEj.: “Genérico”StringNombre del sub-tipo de la promoción.


Forma de aplicación ("promotionApplicationForm")

CampoEjemplosTipo de datoDetalle
id5dc95b0b44e91d16acff7a38StringIdentificación en Mongo de la forma de aplicación de la promoción.
codeEj.: “1”NuméricoCódigo de la forma de aplicación de la promoción.
companyIdEj.: “napse”StringCompañía de la forma de aplicación de la promoción.
createdAtEj.: “2019-11-11T12:58:51Z”StringFecha de creación de la forma de aplicación de la promoción.
descriptionEj.: “Genérico”StringDescripción de la forma de aplicación de la promoción.
isActivetrue/falseBooleanoIndica si de la forma de aplicación de la promoción esta activa.
isDefaulttrue/falseBooleanoIndica si la forma de aplicación usada es indicada como default.
nameEj.: “Genérico”StringNombre de la forma de aplicación de la promoción.


Workflow ("workflow")

CampoEjemplosTipo de datoDetalle
id5dc95b0a44e91d16acff79ffStringIdentificación en Mongo workflow.
companyIdEj.: “napse”StringCompañía a la que pertenece el wokflow.
descriptionEj.: “Pasos necesarios para poder aprobar una promoción”StringDescripción del wokflow.
nameEj.: "Workflow general"StringNombre del wokflow.
workflowHistoriesEj.: “ [ ] ”StringListado donde se reportan los pasos aprobados por el responsable. En caso de que la el WF tenga un solo paso este campo vendrá vacío.
appliesTo{"name":"PROMOTION_WORKFLOW"}{"name": "PROMOTION_CONDITION_BASE_WORKFLOW"}StringIndica sobre que elementos aplica el workflow.
workflowStepsEj.: “ [ ] ”StringVer “workflowSteps”. Referencia el workflowStep al que está asociado el workflow.


Pasos del Workflow ("workflowStep")

CampoEjemplosTipo de datoDetalle
id5dc95b0a44e91d16acff7a00StringIdentificación en Mongo workflowStep.
nameEj.: “Captura”StringNombre del wokflowStep.
orderEj.: “1”IntegerOrden del wokflowStep.
isInitialSteptrue/falseBooleanoIndica si es el paso inicial del workflow.
isFinalSteptrue/falseBooleanoIndica si es el paso final del workflow.
workflowEj.: “ [ ] ”StringVer “workflow”. Referencia el workflow al que está asociado el workflowStep.


Configuración de Roles ("secRole")

CampoEjemplosTipo de datoDetalle
idEj.: “1”StringIdentificación de la configuración de rol.
authorityEj.: "ROLE_ADMIN"StringQue rol tiene asignado el paso.
descriptionEj.: “Administrador”StringNombre del rol que tiene asignado el paso.
enabledtrue/falseBooleanoIndica si esta activo o no el paso.
weightEj.: “1”StringValor del paso.


Página de inicio ("homePage")

CampoEjemplosTipo de datoDetalle
idEj.: “1”StringIdentificación de la pagina de inicio del rol.
actionHomeAccessEj.: “index”StringLink de la página de inicio del rol.
codeEj.: “indexPromotion”StringCódigo de la página de inicio del rol.
controllerHomeAccessEj.: “Promotion”StringControl de acceso de la página de inicio del rol.
nameEj.: "Lista de promociones"StringNombre de la página de inicio del rol.


Condiciones de Rango Horario ("conditionTimeRange")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd40StringIdentificación en Mongo de la condición de rango horario
dateRangesEj.: "null"StringIndica el rango de Fechas


Rango de Fecha con Hora ("dateTimeRanges")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd40StringIdentificación en Mongo de la condición de rango de fecha con hora
end"2022-01-01T02:59:00.000Z"ISODateFecha y hora de fin
Init"2019-11-22T03:00:00.000Z"ISODateFecha y hora de inicio


Frecuencia ("frequency")

CampoEjemplosTipo de datoDetalle
_id5dd83e1944e91d120c4552c0StringIdentificación en Mongo de la condición de frecuencia
appliedEveryEj.: "3"Integer“Aplica cada”
daysEj.: "name”:”MONDAY", "name”:"WEDNESDAY", "name”:"FRIDAY"StringDías de aplicación definidos
startDate2019-11-22T03:00:00.000ZISODateFecha de inicio
typeEj.: " WEEKLY"StringDefinición de frecuencia


Rango de Hora ("hourRanges")

CampoEjemplosTipo de datoDetalle
_id5dd83e0244e91d120c4552bfStringIdentificación en Mongo del rango de Hora
end2019-11-22T20:59:00.000ZISODateHora de fin
Init2019-11-22T19:00:00.000ZISODateHora de inicio


Componentes ("components")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd41StringIdentificación en Mongo del componente del combo
max1.0IntegerOcurrencias mínimas
min1.0IntegerOcurrencias máximas


Criterios de ordenamiento ("conditionComboCriteriaOrder ")    

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd39StringIdentificación en Mongo del criterio de ordenamiento
coneEj.: " MoreExpensiveFirst "StringCódigo del criterio de ordenamiento.
nameEj.: " Los más caros primero "StringNombre del criterio de ordenamiento.


Criterios de equivalencias ("elementSetTypeEquivalenceAttribute ")

CampoEjemplosTipo de datoDetalle
id5dc95aa444e91d16acff7846StringIdentificación en Mongo del criterio de equivalencia
applyForEquivalenceAttributetrue/falseBooleanoIndica si aplica sobre atributos de equivalencia
applyForInequivalenceAttributetrue/falseBooleanoIndica si aplica sobre atributos de inequivalencia
chainValidationtrue/falseBooleanoCadena de validación del criterio de equivalencia
chainValidationChildFields“[]”
Campos de la cadena de validación del criterio de equivalencia
codeEj.: "unitprice"StringCódigo del criterio de equivalencia
disabledByDefaulttrue/falseBooleanoIndica si se encuentra deshabilitado por default.
entityCatalogEj.: "null"StringIndica si se ingresó por catalogo
isPromoDefaultAttributetrue/falseBooleanoIndica si se trata de un atributo estándar de promo.
isRequiredtrue/falseBooleanoIndica si es requerido o no.
measurabletrue/falseBooleanoIndica si es medible o no.
nameEj.: " Los más caros primero "StringNombre del criterio de equivalencia.
typeEj.: "Double"StringTipo de dato del criterio de equivalencia.


Tipo de conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c0StringIdentificación en Mongo del tipo de conjunto.
applyForCombotrue/falseBooleanoAplica en combo.
codeEj.: "item"StringCódigo del tipo de conjunto.
isActivetrue/falseBooleanoIndica si se encuentra activo.
nameEj.: "Productos"StringNombre del tipo de conjunto.


 Criterios de inequivalencias ("elementSetTypeInequivalenceAttribute ")

CampoEjemplosTipo de datoDetalle
id5dc95aa444e91d16acff784aStringIdentificación en Mongo del criterio de inequivalencia.
applyForEquivalenceAttributetrue/falseBooleanoIndica si aplica sobre atributos de inequivalencia.
applyForInequivalenceAttributetrue/falseBooleanoIndica si aplica sobre atributos de inequivalencia.
chainValidationtrue/falseBooleanoCadena de validación del criterio de inequivalencia
chainValidationChildFields“[]”StringCampos de la cadena de validación del criterio de inequivalencia
codeEj.: "level2"StringCódigo del criterio de inequivalencia.
disabledByDefaulttrue/falseBooleanoIndica si se encuentra deshabilitado por default.
entityCatalogEj.: "CatalogFamily"StringIndica si se ingresó por catálogo.
isPromoDefaultAttributetrue/falseBooleanoIndica si se trata de un atributo estándar de promo.
isRequiredtrue/falseBooleanoIndica si es requerido o no.
measurabletrue/falseBooleanoIndica si es medible o no.
nameEj.: "Familia"StringNombre del criterio de inequivalencia.
typeEj.: "autocomplete"StringTipo de dato del criterio de inequivalencia.


Tipo de conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c0StringIdentificación en Mongo del tipo de conjunto.
applyForCombotrue/falseBooleanoAplica en combo.
codeEj.: "item"StringCódigo del tipo de conjunto.
isActivetrue/falseBooleanoIndica si se encuentra activo.
nameEj.: "Productos"StringNombre del tipo de conjunto.


Unidad de medida ("elementSetTypeMeasureUnitAttribute")

CampoEjemplosTipo de datoDetalle
id5d3f1342aa28380af0b563caStringIdentificación en Mongo de los tipos de elementos medibles del conjunto
applyForEquivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de equivalencia.
applyForInequivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de inequivalencia.
chainValidationtrue/falseBooleanoCadena de validación del criterio de elementos medibles del conjunto
chainValidationChildFields“[]”StringCampos de la cadena de validación del criterio de elementos medibles del conjunto
CodeEj.: "qty"StringCódigo de los tipos de elementos medibles del conjunto.
disabledByDefaulttrue/falseBooleanoIndica si esta deshabilitado por default.
entityCatalogEj.: "null"StringIndica si se ingresó por catálogo.
isPromoDefaultAttributetrue/falseBooleanoIndica si se trata de un atributo estándar de promo.
isRequiredtrue/falseBooleanoIndica si es requerido.
Measurabletrue/falseBooleanoIndica si es medible/pesable.
nameEj.: "Cantidad"StringNombre del tipo de elemento medible del conjunto.
typeEj.: "Integer"StringIndicador del tipo de dato.


Tipo de conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c0StringIdentificación en Mongo del tipo de conjunto.
applyForCombotrue/falseBooleanoAplica en combo.
codeEj.: "item"StringCódigo del tipo de conjunto.
isActivetrue/falseBooleanoIndica si se encuentra activo.
nameEj.: "Productos"StringNombre del tipo de conjunto.


Elementos del conjunto ("elementSet")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd3bStringIdentificación en Mongo de los elementos del conjunto
children[ ]String--
operatorEj.: "name":"SIMPLE"StringOperador lógico entre conjuntos
simpletrue/falseBooleano--
value515418IntegerValor del elemento del conjunto


 Tipo de conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c0StringIdentificación en Mongo del tipo de conjunto
applyForCombotrue/falseBooleanoAplica en Combo
codeEj.: "item"StringIdentificador del tipo de conjunto
isActivetrue/falseBooleanoIndica si se encuentra activo
nameEj.: "Productos"StringNombre del tipo de conjunto


Atributos del tipo de conjunto ("setTypeAttribute")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c1StringIdentificación en Mongo de los atributos del tipo de conjunto
applyForEquivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de equivalencia
applyForInequivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de inequivalencia
chainValidation“[]”StringCadena de validación de los elementos.
chainValidationChildFieldstrue/falseBooleanoCampos de validación de los elementos.
codeEj.: "code"StringCódigo de los atributos del tipo de conjunto
disabledByDefaulttrue/falseBooleanoIndica si el atributo del tipo de conjunto se encuentra habilitado o no por default
entityCatalogEj.: "CatalogItem"StringCatalogo que lo alimenta
isPromoDefaultAttributetrue/falseBooleanoIndica si es un atributo default de promo
isRequiredtrue/falseBooleanoIndica si el atributo es requerido
measurabletrue/falseBooleanoIndica si el atributo es medible/pesable
nameEj.: "Código (SKU)"StringNombre del atributo
typeEj.: " autocomplete"StringIndicador del tipo de dato


Tipo de conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563bcStringIdentificación en Mongo de los comparadores de atributos del tipo de conjunto
applyForCombotrue/falseBooleanoIndica si el conjunto aplica a combo.
codeEj.: "Into"StringCódigo de los comparadores de atributos del tipo de conjunto
isActivetrue/falseBooleanoIndica si el conjunto esta activo.
nameEj.: "Igual"StringNombre de los comparadores de atributos del tipo de conjunto


Comparadores de Atributos del tipo de conjunto ("setTypeAttributeComparator")

CampoEjemplosTipo de datoDetalle
_id5d3f1341aa28380af0b563bcStringIdentificación en Mongo de los comparadores de atributos del tipo de conjunto
codeEj.: "Into"StringCódigo de los comparadores de atributos del tipo de conjunto
nameEj.: "Igual"StringNombre de los comparadores de atributos del tipo de conjunto


Tipos de Elementos del conjunto ("elementSetType")

CampoEjemplosTipo de datoDetalle
_id5d3f1341aa28380af0b563c0StringIdentificación en Mongo de los tipos de elementos del conjunto.
applyForCombotrue/falseBooleanoIndica si los tipos de elementos del conjunto aplican en combo.
codeEj.: "item"StringCódigo de los tipos de elementos del conjunto.
isActivetrue/falseBooleanoIndica si el tipo de elementos del conjunto.
nameEj.: "Productos"StringNombre de los tipos de elementos del conjunto.


Condiciones ("condition")

CampoEjemplosTipo de datoDetalle
id5d408186aa28381accc0c358StringIdentificación en Mongo de la condición
operatorEj.: "SIMPLE/AND/OR"StringOperador lógico que aplica a las condiciones
simpletrue/falseBooleano--


Anidados ("children")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd5cStringIdentificador en mongo de los anidados
childrenEj.: "null"String--
operatorEj.: "SIMPLE"StringOperador lógico que relaciona los conjuntos
simpletrue/falseBooleano--


El tag “children” podrá estar anidado dentro de otros “childrens”o “elementSet” junto con su “id” y “operador” dependiendo de la cantidad de condiciones que se hayan definido en la promoción.


Comparadores ("conditionComparator")

CampoEjemplosTipo de datoDetalle
id5d3f1340aa28380af0b563b7StringIdentificación en Mongo del comparador de la condición
codeEj.: "Exists"StringIdentifica el código del comparador de la condición
nameEj.: "SIN AGRUPACION"StringIndica el nombre asignado al comparador de la condición
valueEj.: “2233”StringValor asignado al componente anidado.


Conjuntos de Elementos ("elementSet")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd3bStringIdentificación en Mongo del conjunto de elementos
childrennullarraycampos anidados
operatorEj.: "SIMPLE/AND/OR"StringOperador lógico que relaciona los conjuntos
setType
StringColección de tipos de productos
setTypeAttribute
 String Colección de atributos de productos
setTypeAttributeComparatorEj.: "null"StringIdentificación en Mongo del comparador de conjunto de tipo de atributos
simpletrue/falseBooleano--
valueEj.: "all"StringValor del conjunto de elementos


Tipo de Conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd5bStringIdentificación en Mongo del tipo de conjunto
applyForCombotrue/falseBooleanoIndica si los tipos de elementos del conjunto aplican en combo
codeEj.: "ítem"StringCódigo del tipo de conjunto
isActivetrue/falseBooleanoIndica si el tipo de elementos del conjunto
nameEj.: "Productos"StringNombre de los tipos de elementos del conjunto


Atributos del tipo de conjunto ("setTypeAttribute")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c1StringIdentificación en Mongo del tipo de conjunto
applyForEquivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de equivalencia
applyForInequivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de inequivalencia
chainValidationtrue/falseBooleanoCadena de validación del conjunto de atributos
chainValidationChildFieldsEj.:”[]”StringCadena de validación del conjunto de campos de atributos
codeEj.: "all"StringCódigo de los atributos del tipo de conjunto
disabledByDefaulttrue/falseBooleanoIndica si el atributo del tipo de conjunto se encuentra habilitado o no por default
entityCatalogCatalogItemStringCatálogo que participa en la promoción
isPromoDefaultAttributetrue/falseBooleanoIndica si es un atributo default de promo
isRequiredtrue/falseBooleanoIndica si el atributo es requerido
measurabletrue/falseBooleanoIndica si el atributo es medible/pesable
nameEj.: "Aplica a TODOS"StringNombre del atributo
setType5d3f1341aa28380af0b563c0StringIdentificación en Mongo del conjunto de tipo de atributos
setTypeAtrtributeComparators[]
Identificación en Mongo del comparador de conjunto de tipo de atributos
typeEj.: "All"StringIndicador del tipo de dato


Tipo de Ticket ("ticketType")

CampoEjemplosTipo de datoDetalle
id5d3f3e51aa2838089ca7b18fStringIdentificación en Mongo del tipo de ticket
codeEj.: "cia"StringCódigo del tipo de ticket
companyIdEj.: "napse"StringId de la compañía
entityCatalogEj.: "catalogcia"StringCatalogo que lo alimenta
isActivetrue/falseBooleanoIndica si el tipo de ticket esta activo o no
isRequiredtrue/falseBooleanoIndica si el tipo de ticket es requerido
nameEj.: "CIA"StringNombre del tipo de ticket
typeEj.: "autocomplete"StringIndicador del tipo de dato


Condición de Comparador del Tipo de Ticket ("conditionTicketTypeComparators ")

CampoEjemplosTipo de datoDetalle
id5d3f1340aa28380af0b563aeStringIdentificación en Mongo del comparador del tipo de ticket
codeEj.: "Header" // "Distinct"StringCódigo del comparador del tipo de ticket
nameEj.: "IGUAL" //  "Distinct"StringNombre del comparador del tipo de ticket


Comparador del Tipo de Ticket ("ticketTypeComparator")

CampoEjemplosTipo de datoDetalle
_id5d3f1340aa28380af0b563aeStringIdentificación en Mongo del comparador del tipo de ticket
codeEj.: "Header"StringCodigo del comparador del tipo de ticket
nameEj.: "IGUAL"StringNombre del comparador del tipo de ticket


Beneficios (“benefits”)

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd44StringIdentificador en mongo del beneficio
accountEj.: "454"StringCuenta contable
benefitSetTypeEj.: "null"StringTipo de conjunto de beneficio
displayMessageEj.: "Promo 2X1 en gaseosas"StringMensaje para el display
elementSetOrderCriteriaEj.: name="MORE_EXPENSIVE_FIRST" // "LESS_EXPENSIVE_FIRST"StringCriterio de ordenamiento de los elementos del conjunto
maxApplicationValueEj.: "null"StringAplicación Máxima Valor
minApplicationValueEj.: "10000.0"StringAplicación Mínima Valor
printerMessageEj.: "Promo 2X1 en gaseosas"StringMensaje para la Impresora
numericIdEj.: "70"numéricoId del beneficio.
replicateConditionSettrue/falseBooleanoUtiliza elementos de la condición para formar el universo de aplicación.
tlogMessageEj.: "Promo 2X1 en gaseosas"StringMensaje para el Tlog
creditProvider-Mapa de datosVer sección: Proveedor del bien ("creditProvider")
financialProvider-Mapa de datosVer sección: Proveedor financiero ("financialProvider")
additionalProvider1-Mapa de datosVer sección: Proveedor adicional 1 ("additionalProvider1")
additionalProvider2-Mapa de datosVer sección: Proveedor adicional 2 ("additionalProvider2")


Proveedor del bien ("creditProvider")

CampoEjemplosTipo de datoDetalle
id5d3f134aaa28380af0b56459StringIdentificador en mongo del proveedor del bien
creditProviderName
Ej.: "PR1"StringCódigo del proveedor (código en CatalogSupplier)
creditProviderValueType
Ej.: "AMOUNT"Ej.: "PERCENTAGE"StringTipo de valor de aporte del proveedor (monto/porcentaje)
creditProviderValueEj.: "300"DoubleValor numérico asociado al tipo de valor


Proveedor financiero ("financialProvider")

CampoEjemplosTipo de datoDetalle
id5d3f134aaa28380af0b56469StringIdentificador en mongo del proveedor financiero
financialProviderName
Ej.: "PRF1"StringCódigo del proveedor (código en CatalogSupplier)
financialProviderValueType
Ej.: "AMOUNT"Ej.: "PERCENTAGE"StringTipo de valor de aporte del proveedor (monto/porcentaje)
financialProviderValueEj.: "300"DoubleValor numérico asociado al tipo de valor


Proveedor adicional 1 ("additionalProvider1")

CampoEjemplosTipo de datoDetalle
id5d3f134aaa28380af0b56410StringIdentificador en mongo del proveedor adicional 1
code
Ej.: "PRA1"StringCódigo del proveedor (código en CatalogSupplier)
typeEj.: "ADDITIONAL_PROVIDER_1"StringCódigo identificador del tipo de proveedor
valueType
Ej.: "AMOUNT"Ej.: "PERCENTAGE"StringTipo de valor de aporte del proveedor (monto/porcentaje)
valueEj.: "300"DoubleValor numérico asociado al tipo de valor (valueType)


Proveedor adicional 1 (additionalProvider1) en el Json de promociones:

Proveedor Adicional 1
{
 "id":"61ef53bb443819938c74d958",
 "active": true,
 "alwaysValid":false,
 "baseTemplate":{
    "id":"61ef521f443819938c74d949",
    "name": "Template con proveedores"
},
"benefits":[
   {
    "id":"61ef521f443819938c74d949",
    "account":null,
    "additionalProvider1":{
       "id":"61f2ed8af01dd297049a5509",
       "code":"PRA1",
       "type":{
          "name":"ADDITIONAL_PROVIDER_1"
               },
       "value":150.0,
       "valueType":{
          "name":"AMOUNT"
                   }
                         },
   "AdditionalProvider2:{


 Proveedor adicional 2 ("additionalProvider2")

CampoEjemplosTipo de datoDetalle
id5d3f134aaa28380af0b56411StringIdentificador en mongo del proveedor adicional 2
code
Ej.: "PRA2"StringCódigo del proveedor (código en CatalogSupplier)
typeEj.: "ADDITIONAL_PROVIDER_2"StringCódigo identificador del tipo de proveedor
valueType
Ej.: "AMOUNT"Ej.: "PERCENTAGE"StringTipo de valor de aporte del proveedor (monto/porcentaje)
valueEj.: "300"DoubleValor numérico asociado al tipo de valor (valueType)


Proveedor adicional 2 (additionalProvider2) en el Json de promociones:

"benefits":[
   {
    "id":"61ef521f443819938c74d949",
    "account":null,
    "additionalProvider1":{
       "id":"61f2ed8af01dd297049a5509",
       "code":"PRA1",
       "type":{
          "name":"ADDITIONAL_PROVIDER_1"
               },
       "value":150.0,
       "valueType":{
          "name":"AMOUNT"
                   }
                         },
   "AdditionalProvider2:{
      "id":"61f2ed8af01dd297049a550a",
       "code":"PRA2",
       "type":{
          "name":"ADDITIONAL_PROVIDER_2"
               },
       "value":280.0,
       "valueType":{
          "name":"AMOUNT"
                   }
                         },
   "benefitApplicationMethod:"{   


Método de Aplicación ("benefitApplicationMethod")

CampoEjemplosTipo de datoDetalle
id5d3f134aaa28380af0b56459StringIdentificador en mongo del método de aplicación
codeEj.: "resume"StringCódigo del método de aplicación
nameEj.: "Resumen"StringNombre del método de aplicación


Clases de Beneficios ("benefitClass")

CampoEjemplosTipo de datoDetalle
id5d3f1347aa28380af0b5641eStringIdentificador en mongo de la clase de beneficios
benefitClassFieldsEj.: " [ ] "StringIntegrantes de Clase de beneficio
benefitClassLimitTypeEj.: " [ ] "StringTipo de límite de clase de beneficio
benefitRedeemWithOptionsEj.: " [ ] "StringDatos del beneficio canje con opciones.
benefitType5d3f1345aa28380af0b5641cStringIdentificador del tipo de Beneficio
codeEj.: "NewPrice"StringCódigo de la clase del beneficio
nameEj.: "Nuevo precio"StringCódigo de la clase del beneficio


Tipo de beneficio ("benefitType ")

CampoEjemplosTipo de datoDetalle
id5d3f1344aa28380af0b563f7StringIdentificador en mongo de los campos de clases de beneficio
codeEj.: "monetary"StringCódigo de los campos de clases de beneficio
nameEj.: "Monetario"String


Campos de Clases de beneficio ("benefitClassFields")

CampoEjemplosTipo de datoDetalle
id5d3f1344aa28380af0b563f4StringIdentificador en mongo de los campos de clases de beneficio
benefitClassFieldOptions[]StringColección de opciones de clases de beneficios
codeEj.: "unit"StringCódigo de los campos de clases de beneficio
descriptionEj.: "Porcentaje (%)"StringDescripción de los campos de clases de beneficio
entityCatalogEj.: "null"StringIndica si se ingresa por catálogo.
isRequiredtrue/falseBooleanoIndica si el campo es requerido
nameEj.: "Por cada unidad de"StringNombre de los campos de clases de beneficio
typeEj.: "List"StringIndicador del tipo de dato


Método de distribución del Beneficios ("benefitDivisionMethod")

CampoEjemplosTipo de datoDetalle
_id5d3f1348aa28380af0b56428StringIdentificador en mongo del método de distribución del beneficio
codeEj.: "proportional"StringCódigo del método de distribución del beneficio
nameEj.: "Proporcional"StringNombre del método de distribución del beneficio


 Método de distribución del precio ("benefitDivisionPrice")

CampoEjemplosTipo de datoDetalle
id5d3f1349aa28380af0b5642cStringIdentificador en mongo del método de distribución del precio
codeEj.: "benefited-price"StringCódigo del método de distribución del precio
nameEj.: "Precio beneficiado"StringNombre del método de distribución del precio


Tipo de beneficio ("benefitType")

CampoEjemplosTipo de datoDetalle
id5d3f1345aa28380af0b5641cStringIdentificador en mongo del tipo de beneficio
codeEj.: "monetary"StringCódigo del tipo de beneficio
nameEj.: "Monetario"StringNombre del tipo de beneficio


Conjunto de elementos ("elementSet")

CampoEjemplosTipo de datoDetalle
id5d40466eaa28381accc0bd3cStringIdentificación en Mongo del conjunto de elementos
children[]StringColección de componentes del conjunto de elementos
operatorEj.: "SIMPLE"StringOperador lógico que relaciona los conjuntos
setTypeAttributeComparatorEj.: "null"StringIdentificación en Mongo del comparador de conjunto de tipo de atributos
simpletrue/falseBooleano--
valueEj.: "515418"StringValor del conjunto de elementos


Tipo de conjunto ("setType")

CampoEjemplosTipo de datoDetalle
id5d3f1341aa28380af0b563c0StringIdentificación en Mongo del tipo de conjunto
applyForCombotrue/falseBooleanoIndica si los tipos de elementos del conjunto aplican en combo
codeEj.: "ítem"StringCódigo del tipo de conjunto
isActivetrue/falseBooleanoIndica si el tipo de elementos del conjunto
nameEj.: "Productos"StringNombre de los tipos de elementos del conjunto


Atributos del Tipo de conjunto ("setTypeAttribute")

CampoEjemplosTipo de datoDetalle
_id5d3f1341aa28380af0b563c1 StringIdentificación en Mongo del tipo de conjunto
applyForEquivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de equivalencia
applyForInequivalenceAttributetrue/falseBooleanoIndica si aplica o no sobre criterios de inequivalencia
CodeEj.: "all"StringCódigo de los atributos del tipo de conjunto
disabledByDefaulttrue/falseBooleanoIndica si el atributo del tipo de conjunto se encuentra habilitado o no por default
entityCatalogCatalogItemstringCatálogo que participa en la promoción
isPromoDefaultAttributetrue/falseBooleanoIndica si es un atributo default de promo
IsRequiredtrue/falseBooleanoIndica si el atributo es requerido
Measurabletrue/falseBooleanoIndica si el atributo es medible/pesable
nameEj.: "Aplica a TODOS"StringNombre del atributo
setType5d3f1341aa28380af0b563c0StringIdentificación en Mongo del tipo de conjunto
setTypeAttributeComparators5d3f1341aa28380af0b563bcStringIdentificación en Mongo del comparador de conjunto de tipo de atributos
setTypeAttributeComparatorstypeEj.: "All"StringIdentificador del comparador del tipo de conjunto de tipo de atributos
type"autocomplete"StringTipo del conjunto


Limites ("limits")

CampoEjemplosTipo de datoDetalle
id5dd83e5c44e91d120c4552c8StringIdentificador en mongo del limite
limitPeriodEj.: "name":"DAY"StringDefinición del período de limite
limitScopeEj.: "name":"RETAILER"StringDefinición del scope del limite
limitTypeCodeEj.: "benefitAmount"StringCódigo del tipo de limite
limitTypeId5dc95aa644e91d16acff78c4StringIdentificador en mongo del tipo de limite
limitTypeNameEj.: "Cantidad de dinero"StringNombre del tipo de limite
numberDaysEj.: "30"StringCantidad de días para el reinicio del limite
storeEj: "napse"StringCódigo de la tienda asociada al usuario
valueEj.: "5000"StringValor del limite


Sección de Limites (limits) dentro del Json de la promoción:

"limits":[
   {
       "id":6202c0e04438190a90323893"
       "description":null,
       "limitPeriod":{
          "name":"UNDEFINED"
                     },
       "limitedScope":{
          "name": "STORE"
                      },
       "limitTypeCode":"benefitApplicationCount",
       "limitTypeId":"61e8538344381909f863ce0a",
       "limitTypeName":"Cantidad de aplicaciones",
       "numberDays":"0",
       "store":"napse",
       "value":"1"
   },
   {
       "id":6202c0e04438190a90323895"
       "description":null,
       "limitPeriod":{
          "name":"UNDEFINED"
                     },
       "limitedScope":{
          "name": "RETAILER"
                      },
       "limitTypeCode":"benefitApplicationCount",
       "limitTypeId":"61e8538344381909f863ce09",
       "limitTypeName":"Cantidad de dinero",
       "numberDays":"0",
       "value":"150"
   }
      ]


Parámetros ("parameters")

CampoEjemplosTipo de datoDetalle
value0IntegerValor del parámetro


Campos de la clase del beneficio ("benefitClassField ")

CampoEjemplosTipo de datoDetalle
id5d3f1344aa28380af0b563f5StringIdentificador en mongo de los campos de la clase del beneficio
codeEj.: "unit"StringCódigo de los campos de la clase del beneficio
descriptionEj.: "Porcentaje (%)"String
entityCatalogEj.: "null"String
isRequiredtrue/falseBooleanoIndica si el atributo es requerido
nameEj.: "Por cada unidad de"StringNombre de los campos de la clase del beneficio
typeEj.: "List"StringIndicador del tipo de dato


Opciones de Campos de la clase del beneficio ("benefitClassFieldOption")

CampoEjemplosTipo de datoDetalle
id5d3f1344aa28380af0b563efStringIdentificador en mongo de las opciones de campo de clase de beneficio
codeEj.: "qty"StringCódigo de las opciones de campo de clase de beneficio
nameEj.: "Cantidad"StringNombre de las opciones de campo de clase de beneficio


RabbitMQ – Historial de Tarjetas

La cola de mensaje disponibles para el envío del historial de tarjetas:

  • rabbitMQ.cardhistory.endpointName  >>  Nombre de la cola de RabbitMQ para el posteo de datos del historial de tarjetas.


Ejemplo del Json que se envía:

{
 "_id": "603d02251082e8369081744b",
 "amount": "0",
 "amountPrev": "0",
 "card": {
 "code": "9900000000000000",
 "status": "ENABLED",
 "type": "987"
 },
 "cardAction": "ACTIVATION",
 "companyId": "napse",
 "createdAt": "2021-03-01T15:03:01Z",
 "customerCode": null,
 "date": "2021-03-01T15:03:01Z",
 "reason": null,
 "reasonName": null,
 "storeCode": null,
 "terminalCode": null
}


Detalle de los campos:

Campo

Ejemplos

Tipo de Dato

Descripción

id

603d02251082e8369081744b

string

Id del registro de limite en Mongo.

amount

0

double

Monto actual asociado a la tarjeta de fidelidad

amountPrev

0

double

Monto previo de la tarjerta de fidelidad

card {}


array

Datos asociados a la tarjeta informada

codeNumero de la tarjeta de fidelidad
statusEstado de la tarjeta de fidelidad
typeTipo de la tarjeta de fidelidad

cardAction

ACTIVATION

string

Accion asociada al movimiento de tarjeta de fidelidad.

companyId

napse

string

Compañía desde la que se envía el movimiento de la tarjeta de fidelidad.

createdAt

2021-03-01T15:03:01Z

Isodate

Fecha de creación de la tarjeta de fidelidad.

customerCode

5

string

Cliente asociado a la tarjeta de fidelidad.

date

2021-03-01T15:03:01Z

Isodate

Fecha del movimiento que se informa de la tarjeta de fidelidad.

reason

razón 1

string

Código de la razón asociada al movimiento que se informa de la tarjeta de fidelidad.

reasonName

razón 1

string

Nombre de la razón asociada al movimiento que se informa de la tarjeta de fidelidad.

storeCode

1

string

Código de la tienda asociada al movimiento que se informa de la tarjeta de fidelidad.

terminalCode

1

string

Código de la terminal asociada al movimiento que se informa de la tarjeta de fidelidad.


RabbitMQ – Historial de Cupones


La cola de mensaje disponibles para el envío del historial de cupones:

  • rabbitMQ.couponhistory.endpointName   >>  Nombre de la cola de RabbitMQ para el posteo de datos del historial de cupones.


Ejemplo del Json que se envía:

couponHistory
{
	"companyId": "napse",
	"type": "coupon",
	"params": [],
	"items": [
		{
			"barcode": "101pse0016475",
			"customerCode": "12345678",
			"type": "cal",
			"name": "calculado",
			"description": "Descripción",
			"date-time": "2022-08-23T12:51:24",
			"store": "SVC",
			"terminal": "ADM",
			"validFrom": "08/06/2022",
			"validTo": "08/07/2032",
			"status": "CONSUMED",
			"action": "REDEEM",
			"transactionId": "SVC_CPN_20220823125124",
			"couponHistoryId": "6304f77c22854949b038fc19"
		}
	]
}


Detalle de los campos:

Campo Tipo de DatoDescripción

companyId

String

Código de empresa

type

String

Tipo de registro para envío a determinada cola

params

Array

(opcional) Parámetros opcionales

items

Array

Datos específicos del cupón

barcode

String

Código de barras generado para el cupón (según su tipo)

customerCode

String

(opcional) Mongo Id del cliente nominado

type

String

Código del tipo de cupón

name

String

Nombre del tipo de cupón

description

String

(opcional) Descripción del tipo de cupón

date-time

Date

Fecha de registro (formato default "locale" o "UTC" según configuración)

store

String

Código de la tienda

terminal

String

Código de la terminal

validFrom

Date

Fecha inicio de validez (formato "dd/MM/yyyy")

validTo

Date

Fecha fin de validez (formato "dd/MM/yyyy")

status

String

Estado del cupón

action

String

Acción realizada con el cupón

transactionId

String

(opcional) Mongo Id de la trx relacionada

couponHistoryId

String

Mongo Id


RabbitMQ – Estado de los limites

La cola de mensaje disponibles para el envío de estado de los limites es:

  • rabbitMQ.limitstatus.endpointName  >> Nombre de la cola de RabbitMQ para el posteo de datos de tipo LimitStatus (informara movimientos de todos los tipos de limites)


Ejemplo del Json que se envía:

{
                "_id": "603a36021082e83690816fe0",
                "promotionId": "603a2fa81082e83690816f81",
                "benefitId": "603a2fce1082e83690816f88",
                "promotionCode": null,
                "promotionName": "limite general",
                "limitId": "603a2fca1082e83690816f87",
                "scope": "RETAILER",
                "period": "UNDEFINED",
                "maxValue": 10.0,
                "customerId": "-",
                "storeId": "-",
                "numberDays": 0,
                "nextReset": "2021-02-27T03:00:00Z",
                "lastReset": "2021-02-27T03:00:00Z",
                "companyId": "napse",
                "limitTypeCode": "benefiedProductCount",
                "description": null,
                "lastUpdate": "2021-02-27T12:07:30Z",
                "active": true,
                "currentValue": 1.0
}


Detalle de los campos:

Campo

Descripción

id

Id del registro de limite en Mongo.

promotionId

Id de la promoción en Mongo.

benefitId

Id del beneficio en Mongo.

promotionCode

Código de la promoción.

promotionName

Nombre de la promoción.

limitId

Id del límite en Mongo.

scope

Tipo de limite a contabilizar (CUSTOMER, STORE, RETAILER).

period

Periodo a contabilizar.

maxValue

Valor máximo al que podrá llegar el limite definido en la promoción.

customerId

Cliente asociado al límite.

storeId

Id de la tienda donde se realizó el movimiento del límite.

numberDays

Cantidad de días definidos para el periodo a contabilizar.

nextReset

Próximo reseteo del límite.

lastReset

Ultimo reseteo realizado al límite.

limitTypeCode

Código del tipo de limite (benefitAmount, benefiedProductCount, benefitApplicationCount).

description

descripción ingresada en el límite.

lastUpdate

Ultima actualización del limite (desde consola a promociones con limite definido).

active

Indica si el limite está a activo (true) o consumido (false).

currentValue

Valor actual del límite.



RabbitMQ – Estado de Motor y Consola

La cola de mensaje disponibles para el envío de estado de de motor y consola es:

  • rabbitMQ.enginestatus.endpointName  >> Nombre de la cola de RabbitMQ para el posteo del status de motor y consola.


Aclaración

  • El Json del motor solo se enviará cuando haya un cambio de estado.
  • El Json de la consola se enviará cuando esté activa y operando (con cada ejecución del proceso).


Configuración

El Job por defecto se ejecutará cada 5 minutos, pudiendo modificar el tiempo de ejecución desde Administración ->Tareas programadas.


Configuración del archivo promoplus.properties

Para identificar a la consola se deberán configurar los siguientes parámetros : promo.general.id y promo.general.name. Si estos parámetros se encuentran vacíos o no se definen, se utilizará en los procesos en ambos parámetros la ip.

IMPORTANTE

Los valores ingresados en promo.general.id y en promo.general.name no deben coincidir con los parámetros id y name configurados en el motor de Promo.



Ejemplo del Json que se envía de RabbitMQ


{
    "engineId": "5",
    "engineName": "CONSOLE_5",
    "processDate": "16/03/2021 11:33",
    "startDate": "2021-03-12T03:00:00Z",
    "endDate": "2021-04-20T02:59:00Z",
    "keyMap": "napse",
    "mapVersion": "2",
    "stores": "napse",
    "statusMQ": "ONLINE",
    "timestamp": "16/03/2021 11:35"
    "isConsole":"false"
}


El Json de RabbitMQ, contendrá el siguiente formato:

CampoEjemplosTipo de datoDetalle
engineId"1"AlfanuméricoIdentificador del motor o consola.
engineName
"ENGINE1"AlfanuméricoNombre del motor o consola.
processDate
"16/03/2021 11:33"AlfanuméricoFecha y hora del ping del motor o consola. Formato : "dd/MM/yyyy HH:mm"
startDate
"2021-03-12T03:00:00Z"
AlfanuméricoFecha de inicio de vigencia del mapa, dato que se informa para el caso del motor si corresponde. Para consola vacío. Formato: "yyyy-MM-dd'T'HH:mm:ssXX"
endDate"2021-04-12T03:00:00Z"AlfanuméricoFecha fin de vigencia del mapa, dato que se informa para el caso del motor. Para consola vacío. Formato: "yyyy-MM-dd'T'HH:mm:ssXX"
keyMap
"napse"
AlfanuméricoIdentificador, dato que se informa para el caso del motor. Para consola vacío.
mapVersion
"2"AlfanuméricoVersión del mapa, para consola vacío.
stores
"napse"AlfanuméricoTiendas solo para motor, para consola vacío.
statusMQ"ONLINE"AlfanuméricoEstado del motor o consola. Valores posibles: ONLINE ,OFFLINE
timestamp
"16/03/2021 11:35"
AlfanuméricoFecha y hora de envío
isConsole"false"AlfanuméricoIdentifica si el origen es consola. Si es false indica que es motor




Mensajes: Cache de Promociones

El nombre de la cola RabbitMQ que recibirá los mensajes referentes al caché de promociones se debe configurar en  rabbitMQ.promotionsCache.endpointName, en el módulo de Administración/Información de Configuración.

Además se debe tener configurado en el xml del motor:

Configuración del motor:   config.xml →

<promotionCacheMode>true</promotionCacheMode>

Este modo en true, setea simulation también en true.

Cuando es ejecutado el proceso que evalúa y genera el cache de Promociones de Promo, se generan una serie de mensajes a la cola Rabbit con el siguiente formato general. 

Cada inicio de lote recibirá un primer mensaje del estilo:

SubZonas
{ 
   "promotionCode" : "0", 
   "promotionName" : "init promoCache lot number 1596140494623", 
   "SKU" : "0",
   "img": null
}


Donde:

Campo

Ejemplo

Tipo de dado

Detalle

promotionCode

“5ee0660409e1c768c13cba9”

String

Código de la promoción

promotionName

“Promo com SKU”

String

Nombre de la promoción

SKU

“123456”

String

SKU que forma parte de la condición de la promoción

Luego cada promoción asociada al producto llevará el siguiente formato:


SubZonas
{ 
   "promotionCode" : "p003", 
   "promotionName" : "Promo03", 
   "SKU" : "2734",
   "img": “http://myserverPromo:8080/assets/images/promonavidad.jpg”
}

Para generar la información en el Json, se precisa que:

  1. Los SKU de los cuales deseo obtener información en el Json, deben tener el flag "cache" habilitado.
  2. Los SKU deben ser parte de la condición de una promoción.
  3. Una promoción debe ser parte de un mapa.
  4. El mapa debe estar distribuido.




  • Sem rótulos