PROMO 7.2 - Manual de Integración - Colas de Mensajes
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: Elementos 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 dirijirse a https://www.rabbitmq.com/
Variable rabbitMq.date.UTC
A traves de la variable rabbitmq.date.UTC todos los mensajes que se devuelven a alguna de las consultas via Rest disponible en Promo, se informen con el formato del locale configurado en el servidor.; la cual por default es GMT
Colas de mensajes afectadas:
- Promociones: rabbitMQ.promotion.endpointName
- Historial de Elementos de Fidelidad: rabbitMQ.cardhistory.endpointName
- Historial de cupones: rabbitMQ.couponHistory.endpointName
- Estado de los limites: rabbitMQ.limitstatus.endpointName
- Estado de motor y consola: rabbitMQ.enginestatus.endpointName
Nota
Tener en cuenta la configuración descripta en Información de Configuración
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:
Clave | Tipo de Dato | Descripción |
---|---|---|
rabbitMQ.enabled | Booleano | Propiedad 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.endpointName | Alfanumérico | Nombre de la cola de RabbitMQ de la cual se consumirán los mensajes |
rabbitMQ.uri | Alfanumé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érico | Usuario para acceder al RabbitMQ |
rabbitMQ.password* | Alfanumérico | Password para acceder al RabbitMQ |
rabbitMQ.host* | Alfanumérico | Dirección (host) del RabbitMQ server |
rabbitMQ.virtualHost* | Alfanumérico | Virtual Host al RabbitMQ |
rabbitMQ.port* | Numérico | Puerto 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érico | campos específicos del catalogo a importar |
Tipos validos de catálogos:
Catalog | Descripción |
---|---|
catalogCard | Catálogo de Elementos de fidelidad |
catalogBrand | Catálogo de Marcas |
catalogCategory | Catálogo de Categorías |
catalogChannel | Catálogo de Canales |
catalogCreditCampaignCode | Catálogo de Campañas Crediticias |
catalogCustomer | Catálogo de Clientes |
catalogCustomerType | Catálogo de tipos de Clientes |
catalogIdType | Catalogo de tipo de identificador |
catalogDepartment | Catálogo de Departamentos |
catalogEventTransaction | Catálogo de eventos |
catalogEventTransactionType | Catálogo de tipo de eventos |
catalogExtendWarranty | Catálogo de Extensión de Garantías |
catalogFamily | Catálogo de Familia de productos |
catalogFormat | Catálogo de Formatos |
catalogInfoFinancial | Catálogo de información financiera |
catalogItem | Catálogo de productos |
catalogItemStock | Catálogo de Stock de productos |
catalogPaymentBank | Catálogo de pagos Bancarios |
catalogPaymentCode | Catálogo de código de pagos Bancarios |
catalogPaymentPrefix | Catálogo de Prefijos Bancarios |
catalogPaymentType | Catálogo de Tipo de pagos |
catalogProfileCode | Catálogo de Código de Perfil del cliente |
catalogStoreChain | Catálogo de cadena de valor |
catalogStore | Catálogo de tiendas |
catalogSubCategory | Catálogo de subcategoría |
catalogSubZone | Catálogo de subzona |
catalogSupplier | Catálogo de proveedor |
catalogZone | Catá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 elementos de fidelidad.
{ "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 }, ] }
Existe 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 elementos de fidelidad.
En el siguiente ejemplo se observa la inserción de 2 registros de Marcas:
{ "companyId": "napse", "catalog": "catalogBrand", "params": [], "items": [{ "operation": "I", "code": "coke", "name": "Coca-Cola Company" }, { "operation": "I", "code": "pepsi", "name": "Pepsi" } ] }
Aqui se observa un ejemplo de insertar un registro de Categoría:
{ "companyId": "napse", "catalog": "catalogCategory", "params": [], "items": [{ "operation": "I", "code": "lineaBlanca", "name": "Linea Blanca", "familyCode":"Elect" } ] }
{ "companyId": "napse", "catalog": "catalogChannel", "params": [], "items": [{ "operation": "I", "code": "web", "name": "WEB" } ,{ "operation": "I", "code": "POS", "name": "POINT OF SALE" } ] }
{ "companyId": "napse", "catalog": "catalogCreditCampaignCode", "params": [], "items": [{ "operation": "I", "code": "campg1", "name": "Campania 1" } ] }
{ "companyId": "napse", "catalog": "catalogCustomer", "params": [], "items": [{ "operation": "I", "code": "abc29789456", "name": "Jose Luis", "lastName": "Martinez", "email":"[email protected]", "identificationType":"DNI", "identifier":"29789456" } ] }
{ "companyId": "napse", "catalog": "catalogCustomerType", "params": [], "items": [{ "operation": "I", "code": "vip", "name": "VIP CLIENT" } ] }
{ "companyId": "napse", "catalog": "catalogIdType", "params": [], "items": [{ "operation": "I", "code": "DNI", "name": "DOCUMENTO NACIONAL DE IDENTIDAD" } ] }
{ "companyId": "napse", "catalog": "catalogDepartment", "params": [], "items": [{ "operation": "I", "code": "elec", "name": "Electronica" } ] }
{ "companyId": "napse", "catalog": "catalogEventTransaction", "params": [], "items": [{ "operation": "I", "code": "blFriday", "name": "Black Friday" } ] }
{ "companyId": "napse", "catalog": "catalogEventTransactionType", "params": [], "items": [{ "operation": "I", "code": "bf2019", "name": "Black Friday 2019" } ] }
{ "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 }] }
{ "companyId": "napse", "catalog": "catalogFamily", "params": [], "items": [{ "operation": "I", "code": "coc", "name": "Cocina" } ] }
{ "companyId": "napse", "catalog": "catalogFormat", "params": [], "items": [{ "operation": "I", "code": "dig", "name": "Digital" } ] }
{ "companyId": "napse", "catalog": "catalogInfoFinancial", "params": [], "items": [{ "operation": "I", "code": "buss", "name": "Financial Bus" } ] }
{ "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:
{ "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" }] }
{ "companyId": "napse", "catalog": "catalogPaymentBank", "params": [], "items": [{ "operation": "I", "code": "credit18", "name": "18 cuotas sin interes" }] }
{ "companyId": "napse", "catalog": "catalogPaymentCode", "params": [], "items": [{ "operation": "I", "code": "paymentCode1", "name": "payment code 1" }] }
{ "companyId": "napse", "catalog": "catalogPaymentPrefix", "params": [], "items": [{ "operation": "I", "code": "perfix1", "name": "perfix1" }] }
{ "companyId": "napse", "catalog": "catalogPaymentType", "params": [], "items": [{ "operation": "I", "code": "tarjeta", "name": "tarjeta de credito" }] }
{ "companyId": "napse", "catalog": "catalogProfileCode", "params": [], "items": [{ "operation": "I", "code": "abc1", "name": "clientes abc1" }] }
{ "companyId": "napse", "catalog": "catalogPaymentType", "params": [], "items": [{ "operation": "I", "code": "tarjeta", "name": "tarjeta de credito" }] }
{ "companyId": "napse", "catalog": "catalogStoreChain", "params": [], "items": [{ "operation": "I", "code": "chain1", "name": "chain1" }] }
{ "companyId": "napse", "catalog": "catalogStore", "params": [], "items": [{ "operation": "I", "code": "dot", "name": "tienda dot bs as" }] }
{ "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
{ "companyId": "napse", "catalog": "catalogSubZone", "params": [], "items": [{ "operation": "I", "code": "conurb", "name": "conurbano bsas" }] }
{ "companyId": "napse", "catalog": "catalogSupplier", "params": [], "items": [{ "operation": "I", "code": "sony", "name": "sony corporation" }] }
{ "companyId": "napse", "catalog": "catalogZone", "params": [], "items": [{ "operation": "I", "code": "bsnorte", "name": "zona norte bsas" }] }
{ "companyId": "napse", "catalog": "catalog<Dynamic>", "params": [], "items": [{ "operation": "I", "code": "code", "name": "name" }] }
Catalogos Dinamicos
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.
- Una vez creado el nuevo atributo, desde el Productor de RabbitMQ, ya se podrá enviar los datos asociados al nuevo catalogo
- 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.
4. En Administración, Importación de catálogos se podrán ver los datos ingresados.
5. En la promoción se podrá seleccionar los datos ingresados.
6 .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).
7. Distribuir el mapa con la promoción para poder evaluar la misma.
Borrado de atributos en catálogos en PROMO
A partir de la versión 7.2.3 de Promo, la aplicación permite borrar de ciertos catálogos, algunos atributos con solo enviar el id de dicho atributo que se le envíe en el Json, utilizando el proceso de colas RabbitMQ.
No es necesario enviar el id y la descripción. Con enviar sólo el código se puede realizar el borrado.
Los catálogos que cumplen con este criterio son:
Catálogos dinámicos,
"CatalogAdditionalField00", "CatalogAdditionalField01", "CatalogAdditionalField02", "CatalogAdditionalField03",
"CatalogAdditionalField04", "CatalogAdditionalField05", "CatalogAdditionalField06", "CatalogAdditionalField07",
"CatalogAdditionalField08", "CatalogAdditionalField09", "CatalogAdditionalField10", "CatalogAdditionalField11",
"CatalogAdditionalField12", "CatalogAdditionalField13", "CatalogAdditionalField14", "CatalogAdditionalField15",
"CatalogAdditionalField16", "CatalogAdditionalField17", "CatalogAdditionalField18", "CatalogAdditionalField19",
"CatalogBrand", "CatalogChannel", "CatalogCreditCampaignCode",
"CatalogCurrencyCode", "CatalogCustomerType", "CatalogDepartment", "CatalogEventTransaction",
"CatalogEventTransactionType", "CatalogFamily", "CatalogFormat",
"CatalogPaymentBank", "CatalogPaymentCode", "CatalogPaymentPrefix", "CatalogItem", "CatalogSubCategory",
"CatalogPaymentType", "CatalogPocket", "CatalogProductBarcode", "CatalogProductCode", "CatalogCustomer",
"CatalogProfileCode", "CatalogStoreChain", "CatalogStore", "CatalogSubZone", "CatalogSupplier", "CatalogZone",
"CatalogGender", "CatalogIdType", "CatalogContractPriceList", "CatalogCountry", "CatalogCategory",
De los anteriores, estos no admiten repetición de registros:
"CatalogGender", "CatalogIdType", "CatalogContractPriceList", "CatalogCountry",
"CatalogCustomerType", "CatalogItem", "CatalogCustomer"
Y estos no son código-nombre pero igual cumplirán con el requerimiento porque su clave primaria incluye sólamente companyId y code
"CatalogItem", "CatalogCustomer", "CatalogSubCategory"
"CatalogCategory"
Estos catálogos no fueron afectados:
"Card", "CatalogCity" ,"CatalogState", "CatalogInfoFinancial", "CatalogItemStock" (si bien tiene clave primaria companyId-code, no tiene un campo name), "CatalogExtendWarranty" (idem anterior), "CatalogRedeemBenefit"
Proceso
Para ello en RabbitMq se debe crear la cola de catálogo y se pueden presentar las siguientes situaciones:
- En cualquier catálogo que tenga formato Código, Nombre, que se pueda borrar un registro enviando el code y name (coincidirán ambos campos para el borrado).
En la consola se observa:
Se envía el mensaje:
Se debe ejecutar el Job importación de entidades y en la consola se elimina el registro.
2. En cualquier catálogo que tenga formato Código, Nombre, que se pueda borrar un registro enviando solo el code.
En la consola:
O:
Luego de ejecutar el job Job importación de entidades, se habrá borrado el primer registro encontrado de código canal.
3. En cualquier catálogo que tenga formato Código, Nombre, que se pueda borrar un registro enviando solo el code, pero habiendo registros duplicados solo borrará uno.
En la consola:
En la consola se observará, que ya no se encuentra más el registro:
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:
Clave | Tipo de Dato | Descripción |
---|---|---|
rabbitMQ.producer.enabled | Booleano | Propiedad que indica si está habilitado RabbitMQ para el posteo de datos (true o false) |
rabbitMQ.promotion.endpointName | String | Nombre 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.endpointName | String | Nombre 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 | String | Nombre de la cola de RabbitMQ para el posteo del status de motor y consola. |
rabbitMQ.producer.uri | String | URI 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.username | String | Usuario para acceder al RabbitMQ para el posteo de datos |
rabbitMQ.producer.password | String | Password para acceder al RabbitMQ para el posteo de datos |
rabbitMQ.producer.host | String | Dirección (host) del RabbitMQ server para el posteo de datos |
rabbitMQ.producer.virtualHost | String | Virtual Host al RabbitMQ para el posteo de datos |
rabbitMQ.producer.port | Integer | Puerto del server RabbitMQ para el posteo de datos |
rabbitMQ.promotionsCache.endpointName | String | Nombre 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>
- rabbitMQ.segments.endpointName:<nombreCola para posteo de segmentos> (a partir de 7.2.6)
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.segments.endpointName:<nombreCola para posteo de segmentos> (a partir de 7.2.6)
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.
{ "_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
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3fa316aa28381accc06679 | String | Identificación en Mongo de la promoción |
active | true/false | Booleano | Indica si la promoción esta activa |
alwaysValid | true/false | Booleano | Indica el tipo de vigencia definida en la promoción |
baseTemplate | Ej.: "null" | String | Indica la plantilla de promociones utilizada para el armado de la promoción. |
cancelReason | Ej.: "null" | String | Mensaje con el detalle del porqué de la cancelación |
code | 10015 | Numérico Entero | Identifica el código de la promoción |
companyId | Ej.: "napse" | String | Identifica la compañía a la que está asociada la promoción |
description | Ej.: "Promo 2X1 en almacén" | String | Datos adicionales que ayudan a la comprensión del funcionamiento de la promoción. |
evaluateConditionInCombo | true/false | Booleano | Indica si se activó en la promoción la opción de evaluar condición en combo |
isWorkflowApproved | true/false | Booleano | Indica si la promoción está aprobada en el workflow al que esta asignada |
isWorkflowRejected | true/false | Booleano | Indica si la promoción esta rechazada en el workflow al que esta asignada |
lastUpdate | Ej.: "2020-06-09T17:43:06Z" | String | Indica la última actualización realizada a la promoción. |
name | Ej.: "Promo 2X1 en gaseosas-10015" | String | Indica el nombre asignado a la promoción |
pictureToolTip | Ej.: "Gaseosas Promocionadas" | String | Descripción de la imagen asignada a la promoción en la consola de Promo |
picturePath | Ej.:”C:/synthesis/promo/images/promotion/5dd6d0ae44e91d06b8bfeb29.jpg” | String | Ruta donde se aloja de la imagen asignada a la promoción en la consola de Promo |
promotionStatus | "name": COMPLETE" | String | Indica el estado de la promoción |
reportParticipants | true/false | Booleano | Indica si se activó en la promoción la opción de reportar participantes |
suggest | true/false | Booleano | Indica si se habilitaron las sugerencias en la promoción. |
suggestMessage | Ej.: "Captura" | String | Mensaje de sugerencia |
statusDescription | Ej.: "null" | String | Detalles de validaciones de la promoción |
startDate | Ej.: "2019-12-20T03:00:00Z" | String | En caso de que no sea siempre "alwaysValid" entonces tiene una fecha de inicio de vigencia de la promoción. |
endDate | Ej.: "2041-01-21T02:59:00Z" | String | En caso de que no sea siempre "alwaysValid" entonces tiene una fecha de fin de vigencia de la promoción. |
promotionType | 6410d47ca62e4318a8ba5e0f | String | Tipo de promoción. |
promotionSubType | 6410d47ca62e4318a8ba5e10 | String | Subtipo de promoción. |
promotionApplicationForm | 6410d47ca62e4318a8ba5e11 | String | Forma 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.
Campo | Ejemplos | Tipo de dato | Detalle |
code | Ej.: “field01” | String | Código del campo adicional de la cabecera. |
name | Ej.: “Campo 1” | String | Nombre del campo adicional de la cabecera. |
value | Ej.: “campo adicional de la cabecera 1” | String | descripción del campo adicional de la cabecera. |
Campaña ("campaign"):
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1a78aa2838089ca7b039 | String | Identificación en Mongo de la campaña |
companyId | Ej.: "napse" | String | Identifica la compañía a la que está asociada la campaña |
deploymentChannels | Ej.: "[ ]" | String | Indica el o los canales de distribución asociados a la campaña. |
description | Ej.: "BLACK FRIDAY" | String | Descripción de la campaña |
endDate | Ej.: "$date":3081773400000 | Integer | Identifica la fecha de fin definida para la campaña |
isActive | true/false | Booleano | Indica si la campaña esta activa |
name | Ej.: "BLACK FRIDAY" | String | Indica el nombre asignado a la campaña |
promotions | Ej.: "null" | String | Promociones vinculadas a la campaña. |
startDate | "$date":1564416600000 | Integer | Identifica la fecha de inicio definida para la campaña. |
Canales de publicación ("deploymentChannels")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1a78aa2838089ca7b03a | String | Identificación en Mongo del canal de publicación. |
code | Ej.: "pos" // "facebook" // "twitter" | String | Código del canal de publicación afectado. |
companyId | Ej.: "napse" | String | Identifica la compañía a la que está asociado el canal de publicación. |
name | Ej.: "Punto de venta" // "Facebook" // "Twitter" | String | Nombre del canal de publicación afectado. |
social | true/false | Booleano | Indica si se trata de un canal de redes sociales. |
Tipo de Promoción ("promotionType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95b0b44e91d16acff7a36 | String | Identificación en Mongo del tipo de la promoción. |
code | Ej.: “1” | Integer | Código del tipo de la promoción. |
companyId | Ej.: "napse" | String | Compañía del tipo de la promoción. |
createdAt | Ej.: “2019-11-11T12:58:51Z” | String | Fecha de creación del tipo de la promoción. |
description | Ej.: “Genérico” | String | Descripción del tipo de la promoción. |
isActive | true/false | Booleano | Indica si el tipo de la promoción esta activo. |
isDefault | true/false | Booleano | Indica si el tipo de promoción usado es el definido por default |
isUsed | true/false | Booleano | Indica si el tipo de la promoción está en uso. |
name | Ej.: “Genérico” | String | Nombre del tipo de la promoción. |
Sub-Tipo de Promoción ("promotionSubType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95b0b44e91d16acff7a37 | String | Identificación en Mongo del sub-tipo de la promoción. |
code | Ej.: “1” | Numérico | Código del sub-tipo de la promoción. |
companyId | Ej.: “napse” | String | Compañía del sub-tipo de la promoción. |
createdAt | Ej.: “2019-11-11T12:58:51Z” | String | Fecha de creación del sub-tipo de la promoción. |
description | Ej.: “Genérico” | String | Descripción del sub-tipo de la promoción. |
isActive | true/false | Booleano | Indica si el sub-tipo de la promoción esta activo. |
isDefault | true/false | Booleano | Indica si el sub-tipo de promoción usado es el definido como default. |
name | Ej.: “Genérico” | String | Nombre del sub-tipo de la promoción. |
Forma de aplicación ("promotionApplicationForm")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95b0b44e91d16acff7a38 | String | Identificación en Mongo de la forma de aplicación de la promoción. |
code | Ej.: “1” | Numérico | Código de la forma de aplicación de la promoción. |
companyId | Ej.: “napse” | String | Compañía de la forma de aplicación de la promoción. |
createdAt | Ej.: “2019-11-11T12:58:51Z” | String | Fecha de creación de la forma de aplicación de la promoción. |
description | Ej.: “Genérico” | String | Descripción de la forma de aplicación de la promoción. |
isActive | true/false | Booleano | Indica si de la forma de aplicación de la promoción esta activa. |
isDefault | true/false | Booleano | Indica si la forma de aplicación usada es indicada como default. |
name | Ej.: “Genérico” | String | Nombre de la forma de aplicación de la promoción. |
Workflow ("workflow")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95b0a44e91d16acff79ff | String | Identificación en Mongo workflow. |
companyId | Ej.: “napse” | String | Compañía a la que pertenece el wokflow. |
description | Ej.: “Pasos necesarios para poder aprobar una promoción” | String | Descripción del wokflow. |
name | Ej.: "Workflow general" | String | Nombre del wokflow. |
workflowHistories | Ej.: “ [ ] ” | String | Listado 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"} | String | Indica sobre que elementos aplica el workflow. |
workflowSteps | Ej.: “ [ ] ” | String | Ver “workflowSteps”. Referencia el workflowStep al que está asociado el workflow. |
Pasos del Workflow ("workflowStep")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95b0a44e91d16acff7a00 | String | Identificación en Mongo workflowStep. |
name | Ej.: “Captura” | String | Nombre del wokflowStep. |
order | Ej.: “1” | Integer | Orden del wokflowStep. |
isInitialStep | true/false | Booleano | Indica si es el paso inicial del workflow. |
isFinalStep | true/false | Booleano | Indica si es el paso final del workflow. |
workflow | Ej.: “ [ ] ” | String | Ver “workflow”. Referencia el workflow al que está asociado el workflowStep. |
Configuración de Roles ("secRole")
Campo | Ejemplos | Tipo de dato | Detalle |
id | Ej.: “1” | String | Identificación de la configuración de rol. |
authority | Ej.: "ROLE_ADMIN" | String | Que rol tiene asignado el paso. |
description | Ej.: “Administrador” | String | Nombre del rol que tiene asignado el paso. |
enabled | true/false | Booleano | Indica si esta activo o no el paso. |
weight | Ej.: “1” | String | Valor del paso. |
Página de inicio ("homePage")
Campo | Ejemplos | Tipo de dato | Detalle |
id | Ej.: “1” | String | Identificación de la pagina de inicio del rol. |
actionHomeAccess | Ej.: “index” | String | Link de la página de inicio del rol. |
code | Ej.: “indexPromotion” | String | Código de la página de inicio del rol. |
controllerHomeAccess | Ej.: “Promotion” | String | Control de acceso de la página de inicio del rol. |
name | Ej.: "Lista de promociones" | String | Nombre de la página de inicio del rol. |
Condiciones de Rango Horario ("conditionTimeRange")
Campo | Ejemplos | Tipo de dato | Detalle | |
id | 5d40466eaa28381accc0bd40 | String | Identificación en Mongo de la condición de rango horario | |
dateRanges | Ej.: "null" | String | Indica el rango de Fechas |
Rango de Fecha con Hora ("dateTimeRanges")
Campo | Ejemplos | Tipo de dato | Detalle | |
id | 5d40466eaa28381accc0bd40 | String | Identificación en Mongo de la condición de rango de fecha con hora | |
end | "2022-01-01T02:59:00.000Z" | ISODate | Fecha y hora de fin | |
Init | "2019-11-22T03:00:00.000Z" | ISODate | Fecha y hora de inicio |
Frecuencia ("frequency")
Campo | Ejemplos | Tipo de dato | Detalle | |
_id | 5dd83e1944e91d120c4552c0 | String | Identificación en Mongo de la condición de frecuencia | |
appliedEvery | Ej.: "3" | Integer | “Aplica cada” | |
days | Ej.: "name”:”MONDAY", "name”:"WEDNESDAY", "name”:"FRIDAY" | String | Días de aplicación definidos | |
startDate | 2019-11-22T03:00:00.000Z | ISODate | Fecha de inicio | |
type | Ej.: " WEEKLY" | String | Definición de frecuencia |
Rango de Hora ("hourRanges")
Campo | Ejemplos | Tipo de dato | Detalle | |
_id | 5dd83e0244e91d120c4552bf | String | Identificación en Mongo del rango de Hora | |
end | 2019-11-22T20:59:00.000Z | ISODate | Hora de fin | |
Init | 2019-11-22T19:00:00.000Z | ISODate | Hora de inicio |
Componentes ("components")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd41 | String | Identificación en Mongo del componente del combo |
max | 1.0 | Integer | Ocurrencias mínimas |
min | 1.0 | Integer | Ocurrencias máximas |
Criterios de ordenamiento ("conditionComboCriteriaOrder ")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd39 | String | Identificación en Mongo del criterio de ordenamiento |
cone | Ej.: " MoreExpensiveFirst " | String | Código del criterio de ordenamiento. |
name | Ej.: " Los más caros primero " | String | Nombre del criterio de ordenamiento. |
Criterios de equivalencias ("elementSetTypeEquivalenceAttribute ")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95aa444e91d16acff7846 | String | Identificación en Mongo del criterio de equivalencia |
applyForEquivalenceAttribute | true/false | Booleano | Indica si aplica sobre atributos de equivalencia |
applyForInequivalenceAttribute | true/false | Booleano | Indica si aplica sobre atributos de inequivalencia |
chainValidation | true/false | Booleano | Cadena de validación del criterio de equivalencia |
chainValidationChildFields | “[]” | Campos de la cadena de validación del criterio de equivalencia | |
code | Ej.: "unitprice" | String | Código del criterio de equivalencia |
disabledByDefault | true/false | Booleano | Indica si se encuentra deshabilitado por default. |
entityCatalog | Ej.: "null" | String | Indica si se ingresó por catalogo |
isPromoDefaultAttribute | true/false | Booleano | Indica si se trata de un atributo estándar de promo. |
isRequired | true/false | Booleano | Indica si es requerido o no. |
measurable | true/false | Booleano | Indica si es medible o no. |
name | Ej.: " Los más caros primero " | String | Nombre del criterio de equivalencia. |
type | Ej.: "Double" | String | Tipo de dato del criterio de equivalencia. |
Tipo de conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del tipo de conjunto. |
applyForCombo | true/false | Booleano | Aplica en combo. |
code | Ej.: "item" | String | Código del tipo de conjunto. |
isActive | true/false | Booleano | Indica si se encuentra activo. |
name | Ej.: "Productos" | String | Nombre del tipo de conjunto. |
Criterios de inequivalencias ("elementSetTypeInequivalenceAttribute ")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dc95aa444e91d16acff784a | String | Identificación en Mongo del criterio de inequivalencia. |
applyForEquivalenceAttribute | true/false | Booleano | Indica si aplica sobre atributos de inequivalencia. |
applyForInequivalenceAttribute | true/false | Booleano | Indica si aplica sobre atributos de inequivalencia. |
chainValidation | true/false | Booleano | Cadena de validación del criterio de inequivalencia |
chainValidationChildFields | “[]” | String | Campos de la cadena de validación del criterio de inequivalencia |
code | Ej.: "level2" | String | Código del criterio de inequivalencia. |
disabledByDefault | true/false | Booleano | Indica si se encuentra deshabilitado por default. |
entityCatalog | Ej.: "CatalogFamily" | String | Indica si se ingresó por catálogo. |
isPromoDefaultAttribute | true/false | Booleano | Indica si se trata de un atributo estándar de promo. |
isRequired | true/false | Booleano | Indica si es requerido o no. |
measurable | true/false | Booleano | Indica si es medible o no. |
name | Ej.: "Familia" | String | Nombre del criterio de inequivalencia. |
type | Ej.: "autocomplete" | String | Tipo de dato del criterio de inequivalencia. |
Tipo de conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del tipo de conjunto. |
applyForCombo | true/false | Booleano | Aplica en combo. |
code | Ej.: "item" | String | Código del tipo de conjunto. |
isActive | true/false | Booleano | Indica si se encuentra activo. |
name | Ej.: "Productos" | String | Nombre del tipo de conjunto. |
Unidad de medida ("elementSetTypeMeasureUnitAttribute")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1342aa28380af0b563ca | String | Identificación en Mongo de los tipos de elementos medibles del conjunto |
applyForEquivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de equivalencia. |
applyForInequivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de inequivalencia. |
chainValidation | true/false | Booleano | Cadena de validación del criterio de elementos medibles del conjunto |
chainValidationChildFields | “[]” | String | Campos de la cadena de validación del criterio de elementos medibles del conjunto |
Code | Ej.: "qty" | String | Código de los tipos de elementos medibles del conjunto. |
disabledByDefault | true/false | Booleano | Indica si esta deshabilitado por default. |
entityCatalog | Ej.: "null" | String | Indica si se ingresó por catálogo. |
isPromoDefaultAttribute | true/false | Booleano | Indica si se trata de un atributo estándar de promo. |
isRequired | true/false | Booleano | Indica si es requerido. |
Measurable | true/false | Booleano | Indica si es medible/pesable. |
name | Ej.: "Cantidad" | String | Nombre del tipo de elemento medible del conjunto. |
type | Ej.: "Integer" | String | Indicador del tipo de dato. |
Tipo de conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del tipo de conjunto. |
applyForCombo | true/false | Booleano | Aplica en combo. |
code | Ej.: "item" | String | Código del tipo de conjunto. |
isActive | true/false | Booleano | Indica si se encuentra activo. |
name | Ej.: "Productos" | String | Nombre del tipo de conjunto. |
Elementos del conjunto ("elementSet")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd3b | String | Identificación en Mongo de los elementos del conjunto |
children | [ ] | String | -- |
operator | Ej.: "name":"SIMPLE" | String | Operador lógico entre conjuntos |
simple | true/false | Booleano | -- |
value | 515418 | Integer | Valor del elemento del conjunto |
Tipo de conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del tipo de conjunto |
applyForCombo | true/false | Booleano | Aplica en Combo |
code | Ej.: "item" | String | Identificador del tipo de conjunto |
isActive | true/false | Booleano | Indica si se encuentra activo |
name | Ej.: "Productos" | String | Nombre del tipo de conjunto |
Atributos del tipo de conjunto ("setTypeAttribute")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c1 | String | Identificación en Mongo de los atributos del tipo de conjunto |
applyForEquivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de equivalencia |
applyForInequivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de inequivalencia |
chainValidation | “[]” | String | Cadena de validación de los elementos. |
chainValidationChildFields | true/false | Booleano | Campos de validación de los elementos. |
code | Ej.: "code" | String | Código de los atributos del tipo de conjunto |
disabledByDefault | true/false | Booleano | Indica si el atributo del tipo de conjunto se encuentra habilitado o no por default |
entityCatalog | Ej.: "CatalogItem" | String | Catalogo que lo alimenta |
isPromoDefaultAttribute | true/false | Booleano | Indica si es un atributo default de promo |
isRequired | true/false | Booleano | Indica si el atributo es requerido |
measurable | true/false | Booleano | Indica si el atributo es medible/pesable |
name | Ej.: "Código (SKU)" | String | Nombre del atributo |
type | Ej.: " autocomplete" | String | Indicador del tipo de dato |
Tipo de conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563bc | String | Identificación en Mongo de los comparadores de atributos del tipo de conjunto |
applyForCombo | true/false | Booleano | Indica si el conjunto aplica a combo. |
code | Ej.: "Into" | String | Código de los comparadores de atributos del tipo de conjunto |
isActive | true/false | Booleano | Indica si el conjunto esta activo. |
name | Ej.: "Igual" | String | Nombre de los comparadores de atributos del tipo de conjunto |
Comparadores de Atributos del tipo de conjunto ("setTypeAttributeComparator")
Campo | Ejemplos | Tipo de dato | Detalle |
_id | 5d3f1341aa28380af0b563bc | String | Identificación en Mongo de los comparadores de atributos del tipo de conjunto |
code | Ej.: "Into" | String | Código de los comparadores de atributos del tipo de conjunto |
name | Ej.: "Igual" | String | Nombre de los comparadores de atributos del tipo de conjunto |
Tipos de Elementos del conjunto ("elementSetType")
Campo | Ejemplos | Tipo de dato | Detalle |
_id | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo de los tipos de elementos del conjunto. |
applyForCombo | true/false | Booleano | Indica si los tipos de elementos del conjunto aplican en combo. |
code | Ej.: "item" | String | Código de los tipos de elementos del conjunto. |
isActive | true/false | Booleano | Indica si el tipo de elementos del conjunto. |
name | Ej.: "Productos" | String | Nombre de los tipos de elementos del conjunto. |
Condiciones ("condition")
Campo | Ejemplos | Tipo de dato | Detalle | |
id | 5d408186aa28381accc0c358 | String | Identificación en Mongo de la condición | |
operator | Ej.: "SIMPLE/AND/OR" | String | Operador lógico que aplica a las condiciones | |
simple | true/false | Booleano | -- |
Anidados ("children")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd5c | String | Identificador en mongo de los anidados |
children | Ej.: "null" | String | -- |
operator | Ej.: "SIMPLE" | String | Operador lógico que relaciona los conjuntos |
simple | true/false | Booleano | -- |
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")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1340aa28380af0b563b7 | String | Identificación en Mongo del comparador de la condición |
code | Ej.: "Exists" | String | Identifica el código del comparador de la condición |
name | Ej.: "SIN AGRUPACION" | String | Indica el nombre asignado al comparador de la condición |
value | Ej.: “2233” | String | Valor asignado al componente anidado. |
Conjuntos de Elementos ("elementSet")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd3b | String | Identificación en Mongo del conjunto de elementos |
children | null | array | campos anidados |
operator | Ej.: "SIMPLE/AND/OR" | String | Operador lógico que relaciona los conjuntos |
setType | String | Colección de tipos de productos | |
setTypeAttribute | String | Colección de atributos de productos | |
setTypeAttributeComparator | Ej.: "null" | String | Identificación en Mongo del comparador de conjunto de tipo de atributos |
simple | true/false | Booleano | -- |
value | Ej.: "all" | String | Valor del conjunto de elementos |
Tipo de Conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd5b | String | Identificación en Mongo del tipo de conjunto |
applyForCombo | true/false | Booleano | Indica si los tipos de elementos del conjunto aplican en combo |
code | Ej.: "item" | String | Código del tipo de conjunto |
isActive | true/false | Booleano | Indica si el tipo de elementos del conjunto |
name | Ej.: "Productos" | String | Nombre de los tipos de elementos del conjunto |
Atributos del tipo de conjunto ("setTypeAttribute")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c1 | String | Identificación en Mongo del tipo de conjunto |
applyForEquivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de equivalencia |
applyForInequivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de inequivalencia |
chainValidation | true/false | Booleano | Cadena de validación del conjunto de atributos |
chainValidationChildFields | Ej.:”[]” | String | Cadena de validación del conjunto de campos de atributos |
code | Ej.: "all" | String | Código de los atributos del tipo de conjunto |
disabledByDefault | true/false | Booleano | Indica si el atributo del tipo de conjunto se encuentra habilitado o no por default |
entityCatalog | CatalogItem | String | Catálogo que participa en la promoción |
isPromoDefaultAttribute | true/false | Booleano | Indica si es un atributo default de promo |
isRequired | true/false | Booleano | Indica si el atributo es requerido |
measurable | true/false | Booleano | Indica si el atributo es medible/pesable |
name | Ej.: "Aplica a TODOS" | String | Nombre del atributo |
setType | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del conjunto de tipo de atributos |
setTypeAtrtributeComparators | [] | Identificación en Mongo del comparador de conjunto de tipo de atributos | |
type | Ej.: "All" | String | Indicador del tipo de dato |
Tipo de Ticket ("ticketType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f3e51aa2838089ca7b18f | String | Identificación en Mongo del tipo de ticket |
code | Ej.: "cia" | String | Código del tipo de ticket |
companyId | Ej.: "napse" | String | Id de la compañía |
entityCatalog | Ej.: "catalogcia" | String | Catalogo que lo alimenta |
isActive | true/false | Booleano | Indica si el tipo de ticket esta activo o no |
isRequired | true/false | Booleano | Indica si el tipo de ticket es requerido |
name | Ej.: "CIA" | String | Nombre del tipo de ticket |
type | Ej.: "autocomplete" | String | Indicador del tipo de dato |
Condición de Comparador del Tipo de Ticket ("conditionTicketTypeComparators ")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1340aa28380af0b563ae | String | Identificación en Mongo del comparador del tipo de ticket |
code | Ej.: "Header" // "Distinct" | String | Código del comparador del tipo de ticket |
name | Ej.: "IGUAL" // "Distinct" | String | Nombre del comparador del tipo de ticket |
Comparador del Tipo de Ticket ("ticketTypeComparator")
Campo | Ejemplos | Tipo de dato | Detalle |
_id | 5d3f1340aa28380af0b563ae | String | Identificación en Mongo del comparador del tipo de ticket |
code | Ej.: "Header" | String | Codigo del comparador del tipo de ticket |
name | Ej.: "IGUAL" | String | Nombre del comparador del tipo de ticket |
Beneficios (“benefits”)
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd44 | String | Identificador en mongo del beneficio |
account | Ej.: "454" | String | Cuenta contable |
benefitSetType | Ej.: "null" | String | Tipo de conjunto de beneficio |
displayMessage | Ej.: "Promo 2X1 en gaseosas" | String | Mensaje para el display |
elementSetOrderCriteria | Ej.: name="MORE_EXPENSIVE_FIRST" // "LESS_EXPENSIVE_FIRST" | String | Criterio de ordenamiento de los elementos del conjunto |
maxApplicationValue | Ej.: "null" | String | Aplicación Máxima Valor |
minApplicationValue | Ej.: "10000.0" | String | Aplicación Mínima Valor |
printerMessage | Ej.: "Promo 2X1 en gaseosas" | String | Mensaje para la Impresora |
numericId | Ej.: "70" | numérico | Id del beneficio. |
replicateConditionSet | true/false | Booleano | Utiliza elementos de la condición para formar el universo de aplicación. |
tlogMessage | Ej.: "Promo 2X1 en gaseosas" | String | Mensaje para el Tlog |
creditProvider | - | Mapa de datos | Ver sección: Proveedor del bien ("creditProvider") |
financialProvider | - | Mapa de datos | Ver sección: Proveedor financiero ("financialProvider") |
additionalProvider1 | - | Mapa de datos | Ver sección: Proveedor adicional 1 ("additionalProvider1") |
additionalProvider2 | - | Mapa de datos | Ver sección: Proveedor adicional 2 ("additionalProvider2") |
Proveedor del bien ("creditProvider")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f134aaa28380af0b56459 | String | Identificador en mongo del proveedor del bien |
creditProviderName | Ej.: "PR1" | String | Código del proveedor (código en CatalogSupplier) |
creditProviderValueType | Ej.: "AMOUNT"Ej.: "PERCENTAGE" | String | Tipo de valor de aporte del proveedor (monto/porcentaje) |
creditProviderValue | Ej.: "300" | Double | Valor numérico asociado al tipo de valor |
Proveedor financiero ("financialProvider")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f134aaa28380af0b56469 | String | Identificador en mongo del proveedor financiero |
financialProviderName | Ej.: "PRF1" | String | Código del proveedor (código en CatalogSupplier) |
financialProviderValueType | Ej.: "AMOUNT"Ej.: "PERCENTAGE" | String | Tipo de valor de aporte del proveedor (monto/porcentaje) |
financialProviderValue | Ej.: "300" | Double | Valor numérico asociado al tipo de valor |
Proveedor adicional 1 ("additionalProvider1")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f134aaa28380af0b56410 | String | Identificador en mongo del proveedor adicional 1 |
code | Ej.: "PRA1" | String | Código del proveedor (código en CatalogSupplier) |
type | Ej.: "ADDITIONAL_PROVIDER_1" | String | Código identificador del tipo de proveedor |
valueType | Ej.: "AMOUNT"Ej.: "PERCENTAGE" | String | Tipo de valor de aporte del proveedor (monto/porcentaje) |
value | Ej.: "300" | Double | Valor numérico asociado al tipo de valor (valueType) |
Proveedor adicional 1 (additionalProvider1) en el Json de promociones:
{ "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")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f134aaa28380af0b56411 | String | Identificador en mongo del proveedor adicional 2 |
code | Ej.: "PRA2" | String | Código del proveedor (código en CatalogSupplier) |
type | Ej.: "ADDITIONAL_PROVIDER_2" | String | Código identificador del tipo de proveedor |
valueType | Ej.: "AMOUNT"Ej.: "PERCENTAGE" | String | Tipo de valor de aporte del proveedor (monto/porcentaje) |
value | Ej.: "300" | Double | Valor 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")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f134aaa28380af0b56459 | String | Identificador en mongo del método de aplicación |
code | Ej.: "resume" | String | Código del método de aplicación |
name | Ej.: "Resumen" | String | Nombre del método de aplicación |
Clases de Beneficios ("benefitClass")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1347aa28380af0b5641e | String | Identificador en mongo de la clase de beneficios |
benefitClassFields | Ej.: " [ ] " | String | Integrantes de Clase de beneficio |
benefitClassLimitType | Ej.: " [ ] " | String | Tipo de límite de clase de beneficio |
benefitRedeemWithOptions | Ej.: " [ ] " | String | Datos del beneficio canje con opciones. |
benefitType | 5d3f1345aa28380af0b5641c | String | Identificador del tipo de Beneficio |
code | Ej.: "NewPrice" | String | Código de la clase del beneficio |
name | Ej.: "Nuevo precio" | String | Código de la clase del beneficio |
Tipo de beneficio ("benefitType ")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1344aa28380af0b563f7 | String | Identificador en mongo de los campos de clases de beneficio |
code | Ej.: "monetary" | String | Código de los campos de clases de beneficio |
name | Ej.: "Monetario" | String | Nombre del tipo de beneficio |
Campos de Clases de beneficio ("benefitClassFields")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1344aa28380af0b563f4 | String | Identificador en mongo de los campos de clases de beneficio |
benefitClassFieldOptions | [] | String | Colección de opciones de clases de beneficios |
code | Ej.: "unit" | String | Código de los campos de clases de beneficio |
description | Ej.: "Porcentaje (%)" | String | Descripción de los campos de clases de beneficio |
entityCatalog | Ej.: "null" | String | Indica si se ingresa por catálogo. |
isRequired | true/false | Booleano | Indica si el campo es requerido |
name | Ej.: "Por cada unidad de" | String | Nombre de los campos de clases de beneficio |
type | Ej.: "List" | String | Indicador del tipo de dato |
Método de distribución del Beneficios ("benefitDivisionMethod")
Campo | Ejemplos | Tipo de dato | Detalle |
_id | 5d3f1348aa28380af0b56428 | String | Identificador en mongo del método de distribución del beneficio |
code | Ej.: "proportional" | String | Código del método de distribución del beneficio |
name | Ej.: "Proporcional" | String | Nombre del método de distribución del beneficio |
Método de distribución del precio ("benefitDivisionPrice")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1349aa28380af0b5642c | String | Identificador en mongo del método de distribución del precio |
code | Ej.: "benefited-price" | String | Código del método de distribución del precio |
name | Ej.: "Precio beneficiado" | String | Nombre del método de distribución del precio |
Tipo de beneficio ("benefitType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1345aa28380af0b5641c | String | Identificador en mongo del tipo de beneficio |
code | Ej.: "monetary" | String | Código del tipo de beneficio |
name | Ej.: "Monetario" | String | Nombre del tipo de beneficio |
Conjunto de elementos ("elementSet")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d40466eaa28381accc0bd3c | String | Identificación en Mongo del conjunto de elementos |
children | [] | String | Colección de componentes del conjunto de elementos |
operator | Ej.: "SIMPLE" | String | Operador lógico que relaciona los conjuntos |
setTypeAttributeComparator | Ej.: "null" | String | Identificación en Mongo del comparador de conjunto de tipo de atributos |
simple | true/false | Booleano | -- |
value | Ej.: "515418" | String | Valor del conjunto de elementos |
Tipo de conjunto ("setType")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del tipo de conjunto |
applyForCombo | true/false | Booleano | Indica si los tipos de elementos del conjunto aplican en combo |
code | Ej.: "ítem" | String | Código del tipo de conjunto |
isActive | true/false | Booleano | Indica si el tipo de elementos del conjunto |
name | Ej.: "Productos" | String | Nombre de los tipos de elementos del conjunto |
Atributos del Tipo de conjunto ("setTypeAttribute")
Campo | Ejemplos | Tipo de dato | Detalle |
_id | 5d3f1341aa28380af0b563c1 | String | Identificación en Mongo del tipo de conjunto |
applyForEquivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de equivalencia |
applyForInequivalenceAttribute | true/false | Booleano | Indica si aplica o no sobre criterios de inequivalencia |
Code | Ej.: "all" | String | Código de los atributos del tipo de conjunto |
disabledByDefault | true/false | Booleano | Indica si el atributo del tipo de conjunto se encuentra habilitado o no por default |
entityCatalog | CatalogItem | string | Catálogo que participa en la promoción |
isPromoDefaultAttribute | true/false | Booleano | Indica si es un atributo default de promo |
IsRequired | true/false | Booleano | Indica si el atributo es requerido |
Measurable | true/false | Booleano | Indica si el atributo es medible/pesable |
name | Ej.: "Aplica a TODOS" | String | Nombre del atributo |
setType | 5d3f1341aa28380af0b563c0 | String | Identificación en Mongo del tipo de conjunto |
setTypeAttributeComparators | 5d3f1341aa28380af0b563bc | String | Identificación en Mongo del comparador de conjunto de tipo de atributos |
setTypeAttributeComparatorstype | Ej.: "All" | String | Identificador del comparador del tipo de conjunto de tipo de atributos |
type | "autocomplete" | String | Tipo del conjunto |
Limites ("limits")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5dd83e5c44e91d120c4552c8 | String | Identificador en mongo del limite |
limitPeriod | Ej.: "name":"DAY" | String | Definición del período de limite |
limitScope | Ej.: "name":"RETAILER" | String | Definición del scope del limite |
limitTypeCode | Ej.: "benefitAmount" | String | Código del tipo de limite |
limitTypeId | 5dc95aa644e91d16acff78c4 | String | Identificador en mongo del tipo de limite |
limitTypeName | Ej.: "Cantidad de dinero" | String | Nombre del tipo de limite |
numberDays | Ej.: "30" | String | Cantidad de días para el reinicio del limite |
store | Ej: "napse" | String | Código de la tienda asociada al usuario |
value | Ej.: "5000" | String | Valor 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")
Campo | Ejemplos | Tipo de dato | Detalle |
value | 0 | Integer | Valor del parámetro |
Campos de la clase del beneficio ("benefitClassField ")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1344aa28380af0b563f5 | String | Identificador en mongo de los campos de la clase del beneficio |
code | Ej.: "unit" | String | Código de los campos de la clase del beneficio |
description | Ej.: "Porcentaje (%)" | String | |
entityCatalog | Ej.: "null" | String | |
isRequired | true/false | Booleano | Indica si el atributo es requerido |
name | Ej.: "Por cada unidad de" | String | Nombre de los campos de la clase del beneficio |
type | Ej.: "List" | String | Indicador del tipo de dato |
Opciones de Campos de la clase del beneficio ("benefitClassFieldOption")
Campo | Ejemplos | Tipo de dato | Detalle |
id | 5d3f1344aa28380af0b563ef | String | Identificador en mongo de las opciones de campo de clase de beneficio |
code | Ej.: "qty" | String | Código de las opciones de campo de clase de beneficio |
name | Ej.: "Cantidad" | String | Nombre de las opciones de campo de clase de beneficio |
RabbitMQ – Historial de Elementos de Fidelidad
La cola de mensaje disponibles para el envío del historial de elementos de fidelidad:
- rabbitMQ.cardhistory.endpointName >> Nombre de la cola de RabbitMQ para el posteo de datos del historial de elementos de fidelidad.
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 al elemento de fidelidad | ||||||
amountPrev | 0 | double | Monto previo del elemento de fidelidad | ||||||
card {} | array | Datos asociados al elemento informada
| |||||||
cardAction | Activation | string | Acción asociada al movimiento del elemento de fidelidad. | ||||||
companyId | 2 | string | Compañía desde la que se envía el movimiento de elemento de fidelidad. | ||||||
createdAt | 2021-03-01T15:03:01Z | Isodate | Fecha de creación del elemento de fidelidad. | ||||||
customerCode | 1 | string | Cliente asociado al elemento de fidelidad. | ||||||
date | 2021-03-01T15:03:01Z | Isodate | Fecha del movimiento que se informa del elemento de fidelidad. | ||||||
reason | Razón 1 | string | Código de la razón asociada al movimiento que se informa del elemento de fidelidad. | ||||||
reasonName | Razón 1 | string | Nombre de la razón asociada al movimiento que se informa del elemento de fidelidad. | ||||||
storeCode | 1 | string | Código de la tienda asociada al movimiento que se informa del elemento de fidelidad. | ||||||
terminalCode | 1 | string | Código de la terminal asociada al movimiento que se informa del elemento 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:
{ "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 Dato | Descripció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 cupon |
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 – Tipos de Elementos de Fidelidad y Tipos de Cupones
La cola de mensaje disponibles para el envío del tipo de Elementos de fidelidad y del tipo de cupones:
- rabbitMQ.loyaltyType.endpointName >> Nombre de la cola de RabbitMQ para el posteo de datos para el tipo de cupones/Elementos de Fidelidad. en el siguiente formato:
Se debe crear una nueva Cola Rabbit que va a postear los tipos de elementos de fidelidad y los tipos de cupones. Tendrá un campo para indicar si es elemento de fidelidad o cupón (recordType
).
Ej de Json para cada tipo de cupón:
{ _id: "635acc9e58b2340d70baa8b9", code: "604", name:"cuponInf", description:"", validFrom: 2022-10-27T00:00:00-03:00, validTo: 2022-11-27T00:00:00-03:00, activationFromEmissionInDays: 0, expirationFromActivationInDays: 0, couponValidityFromType: "1", couponValidityToType: "WITHOUTEXPIRATION", isNominated: false, campaign: "61a670cd0cbfc43fac12cf52", couponFormat:"INFORMATIVE", // PRINTED, ELECTRONIC,EXTERNAL, PRE_PRINTED, INFORMATIVE, maxUsageTimes: 0, isActive: true, isExternal: false, prefix: "1", coding:"EAN13", // EAN13,UPCA,CODE128, CUSTOM customCoding: "", couponTemplate:"63598df90c80634c0c3315f7", calculated:false, useTotalAmount: false, recordType: "COUPON", prefixLenght: 0 }
El Json de RabbitMQ, contendrá el siguiente formato:
Campo | Descripción |
---|---|
id | identificador único del cupón |
code | código del cupón |
name | nombre del cupón |
description | descripción del cupón |
validFrom | Fecha de inicio de validez del cupón( formato ISO o Locale acorde a configuración de exportación |
validTo | Fecha de fin de validez del cupón(formato ISO o Locale acorde a configuración de exportación) |
activationFromEmissionInDays | días desde la activación (Ej.: date, days, emmited) |
expirationFromActivationInDays | días desde la expiración (Ej.: date, days, whitoutexpiration) |
couponValidityFromType | Fecha de inicio de validez del tipo de cupón |
couponValidityToType | Fecha de fin de validez del tipo de cupón |
isNominated | identifica si el tipo de cupón es nominado o no |
campaign | id de campaña |
couponFormat | formato de cupón (Ej.: impreso, electrónico, externo, pre-impreso, informativo) |
maxUsageTimes | Tiempo máximo de uso |
isActive | indica si el tipo de cupón está activo o no |
isExternal | Indica si el tipo de cupón es externo o no |
prefix | Prefijo |
coding | codificación. Ej.: (EAN13,UPCA,CODE128, CUSTOM) |
customCoding | código custom |
couponTemplate | código de plantilla de tipo de cupón. Se obtiene desde coupontemplate.code |
calculated | Indica si el tipo de cupón es calculado o no |
useTotalAmount | Indica si se puede consumir total o parcialmente el tipo de cupón |
recordType | Indica el tipo de registro |
prefixLenght | longitud del prefijo. Se obtiene de type.prefix.toString().length() |
Ej de Json para cada tipo de Elemento de Fidelidad:
{ _id: "633db03058b2341c688b6a33", code: "600", name: "Tipo Elemento de Fidelidad de Prueba", description: "", cardValidityType: "RANGE", cardPreChargeCustomValue: 0, isRechargeable: true, isNominated: false, cardTransferable: "", isCVVRequired: true, campaign: "", //campaign.code cvvExceptionChannel: "", pointsExpirationType:"", isExternal:false, cardNumberLength:"10" daysFromActivation = 0 validFrom:2022-10-05T00:00:00-03:00 validTo:2035-12-30T23:59:59-03:00 cardTypePrefixRange = [ { prefixStart:0, prefixEnd: 0, }, ] amountChargeLimit:0, usePartialAmount:true, isActive:true, createdAt: fecha, customerValidation = "", recordType: "CARD", catalogPaymentCode: "", catalogPaymentCodeType: "", prefixLength: 0, }
Campo | Descripción |
---|---|
id | identificador único del elemento de fidelidad |
code | código del elemento de fidelidad |
name | nombre del elemento de fidelidad |
description | descripción del elemento de fidelidad |
cardValidityType | Tipo de validez del elemento de fidelidad (WITHOUTEXPIRATION, RANGE,DAYSFROM) |
cardPreChargeCustomValue | Valor de precarga de la tarjeta |
validFrom | Fecha de inicio de validez del elemento de fidelidad( formato ISO o Locale acorde a configuración de exportación |
validTo | Fecha de fin de validez del elemento de fidelidad(formato ISO o Locale acorde a configuración de exportación) |
activationFromEmissionInDays | días desde la activación (Ej.: date, days, emmited) |
couponValidityFromType | Fecha de inicio de validez del tipo de cupón |
couponValidityToType | Fecha de fin de validez del tipo de cupón |
isRechargeable | identifica si el tipo de elemento de fidelidad es recargable o no |
isNominated | identifica si el tipo de elemento de fidelidad es nominado o no |
cardTransferable | identifica si el tipo de elemento de fidelidad es transferible o no. Ej.: NO,TOTAL, PARTIAL |
isCVVRequired | Indica si se requiere código de seguridad del elemento de fidelidad |
campaign | id de campaña |
cvvExceptionChannel | Canal de excepción de CVV |
pointsExpirationType | Tipo de expiración de los puntos. Ej.:NO_EXPIRE, FROM_DAYS, FROM_DATE,NUMBER_DAYS, FREQUENCY |
isExternal | Indica si el tipo de elemento de fidelidad es externo o no |
cardNumberLength | Longitud del número del elemento de fidelidad |
cardTypePrefixRange | Tipo de rango de prefijos |
prefixStart | Prefijo de inicio |
prefixEnd | prefijo de fin |
amountChargeLimit | monto límite de consumo |
usePartialAmount | indica si se puede consumir el saldo parcialmente |
isActive | indica si la tarjeta está activa o no |
createdAt | Fecha de creación |
customerValidation | Validación del cliente. Ej: NO,FILE,API |
recordType | Indica el tipo de registro. En esta caso es CARD |
catalogPaymentCode | indica el código de tipo de pago. Se obtiene de catalogpaymentcode.code |
catalogPaymentCodeType | Indica el nombre del tipo de pago. Se obtiene de catalogpayemtncode.codetype |
prefixLength | Indica la longitud del prefijo. Se obtiene de cardType.prefixStart.toString().length() |
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:
Campo | Ejemplos | Tipo de dato | Detalle |
---|---|---|---|
engineId | "1" | Alfanumérico | Identificador del motor o consola. |
engineName | "ENGINE1" | Alfanumérico | Nombre del motor o consola. |
processDate | "16/03/2021 11:33" | Alfanumérico | Fecha y hora del ping del motor o consola. Formato : "dd/MM/yyyy HH:mm" |
startDate | "2021-03-12T03:00:00Z" | Alfanumérico | Fecha 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érico | Fecha 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érico | Identificador, dato que se informa para el caso del motor. Para consola vacío. |
mapVersion | "2" | Alfanumérico | Versión del mapa,para consola vacio. |
stores | "napse" | Alfanumérico | Tiendas solo para motor,para consola vacio. |
statusMQ | "ONLINE" | Alfanumérico | Estado del motor o consola. Valores posibles:ONLINE ,OFFLINE |
timestamp | "16/03/2021 11:35" | Alfanumérico | Fecha y hora de envío |
isConsole | "false" | Alfanumérico | Identifica 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:
{ "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:
{ "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:
- Los SKU de los cuales deseo obtener información en el Json, deben tener el flag "cache" habilitado.
- Los SKU deben ser parte de la condición de una promoción.
- Una promoción debe ser parte de un mapa.
- El mapa debe estar distribuido.
Importante
La descripcion en los Json de listas negras que se envíen por colas RabbitMQ, se informara debajo del "code" que se informa en los Json. El campo no será requerido. en caso de no cargarse podrá informarse en blanco. Deberá informarse esta descripción en el Json de Promociones debajo del "code" que se informa en el los Json.
RabbitMQ- Detalle de Transacciones
La cola de mensaje disponible para recibir el detalle de las transacciones a medida que se van registrando en el sistema es:
rabbitMQ.transaction.endopintName >> Nombre de la cola de RabbitMQ para el posteo de datos de transacciones.
El Json de la consola se enviará cuando esté activa y operando (con cada ejecución del proceso).
La configuración de Rabbit se realizará de acuerdo a lo indicado en: Configuración
Al realizar una transacción, la respuesta de la cola Rabbit tiene un formato, como el ejemplo:
{ "companyId": "napse", "transactionId": "napse_napse_1_20230809143015", "transactionType": "SALE", "offline": false, "originalTransactionId": "", "terminalCode": "1", "storeCode": "3", "zoneCode": "", "subZoneCode": "", "storeChainCode": "", "storeTerminal": "1", "channelCode": "", "mapVersion": 6208, "engineVersion": "7.2.6#6HF2", "messageId": "1", "iDate": 20230809, "iHour": 14, "iTime": 143015, "transactionDate": "2023-08-09T17:30:15Z", "processDate": "2023-08-09T17:33:09Z", "headerExtraFields": { "autoCards": "all", "autoCommit": false, "processed": false, "headerExtension": {}, "formatCode": "", "tenderGroupCode": "", "currencyCode": "", "externalReferenceId": "napse_napse_1_20230809143015", "extendedResponse": false, "_id": "64d3cd8513ccef4474a49011" }, "benefitTotal": 0.0, "subtotal": 10.0, "total": 10.0, "promotions": [ { "promoId": "64d11b98f486ff29b088519f", "promoName": "promocupon10", "campaingName": "BLACK FRIDAY", "promoCode": "promocupon10", "benefits": [ { "benefitNro": "64d3cbd213ccef4474a49000", "benefitType": "CalculatedCouponBenefit", "hasLimit": false, "qty": "1.000", "value": 0.0, "valueWithTaxes": 0.0, "TLOGMessage": "promocupon10", "account": null, "order": "1", "applicationMethod": "resume", "displayMessage": "promocupon10", "printerMessage": "promocupon10", "baseAmount": "10.00", "nro": "64d3cbd213ccef4474a49000", "name": "64d11b98f486ff29b088519f", "amountApplicationType": "fixedAmount", "calculatedCouponValue": "10", "accumulateInSingleCoupon": "false", "couponId": "002", "amount": "10.00", "amountCoupon": "10.00" } ], "discount": 0.0 } ], "events": [], "customers": [ { "cardNumber": "-", "sequence": 1, "balances": {}, "valuesAsMap": {}, "id": "10001782", "points": 0.0, "POINTS": 0, "creditCampaignCode": null, "hasLimitsError": false, "name": "-", "raffleData": null, "REMAININGAMOUNT": 1, "type": "-", "redeemPointsPriceFactor": 0.0, "identifierType": "-", "lastName": "-", "AMOUNT": 2, "segment": [], "amount": 0.0, "balance1": 0.0, "profileCode": null, "limitedBenefits": "", "email": "-", "identifier": "-", "externalId": "10001782", "remainingAmount": 0.0, "balance2": 0.0 } ], "payments": [], "coupons": [], "loyaltycards": [], "items": [ { "magnitude": 0.0, "supplierItemAmount": 0.0, "priceListId": null, "qty": 1.0, "sequence": 1, "taxes": 0.0, "code": "111", "level4": "-", "discountable": "true", "lowTurnover": false, "redeemOption": null, "level1": "1", "xpriceOriginal": 10.0, "supplier": "-", "qty3": 1.0, "XPRICE": 0, "qty2": 1.0, "supplierFinancial": null, "priceResponseFields": { "code": "111", "xprice": "10.00", "qty": "1.00", "unitprice": "10.00", "magnitude": "0.00", "seq": "1", "priceLastUpdate": "-", "priceListId": null, "discountable": "true", "originalDiscountable": "true", "manualDiscount": "false" }, "MAGNITUDE": 2, "unitprice3": 0.0, "level2": "-", "unitXPriceOriginal": 10.0, "unitCostPrice": 0.0, "valuesAsMap": { "markDown": "-", "stock": "0" }, "brand": "-", "applyCatalogRedeem": false, "supplierItem": null, "unitprice": 10.0, "calCouponVal": 0.0, "priceListLastUpdate": null, "barcode": "-", "level3": "-", "stock": 0, "unitprice2": 0.0, "productCode": "-", "discontinuous": false, "markDown": "-", "xprice": 10.0, "seqOriginalQty": 1.0, "QTY": 1, "originalDiscountable": "true", "supplierFinancialAmount": 0.0, "seqOriginalXprice": 0.0, "PRICE_WITH_TAXES": 3, "priceWithTaxes": 10.0, "seqOriginalXpriceOriginal": 0.0, "keyProduct": false, "manualDiscount": false, "externalId": null, "seqOriginal": 1, "benefitApplies": [ { "type": null, "hasLimit": false, "qty": 1.0, "benefitNro": "64d3cbd213ccef4474a49000", "transactionComboParticipants": [], "additionalData": { "TLOGMessage": "promocupon10", "account": null, "order": "1", "benefitType": "CalculatedCouponBenefit", "applicationMethod": "resume", "displayMessage": "promocupon10", "printerMessage": "promocupon10", "baseAmount": "10.00", "qty": "1.000", "nro": "64d3cbd213ccef4474a49000", "name": "64d11b98f486ff29b088519f", "amountApplicationType": "fixedAmount", "calculatedCouponValue": "10", "accumulateInSingleCoupon": "false", "couponId": "002", "amount": "10.00", "amountCoupon": "10.00" }, "promotionName": "promocupon10", "benefitType": "CalculatedCouponBenefit", "transactionBenefitApplies": [ { "magnitude": 0.0, "value": 0.0, "stagger": null, "valueWithTaxes": 0.0, "xprice": 10.0, "seq": 1, "qty": 1.0, "points": 0.0, "balanceApplied": false, "minimumApplied": "" } ], "promotionNro": "64d11b98f486ff29b088519f", "promotionCode": "promocupon10" } ], "participants": [ { "promoId": "64d11b98f486ff29b088519f", "promoName": "promocupon10", "campaingName": "BLACK FRIDAY", "qty": "1.0", "magnitude": "0.0", "xprice": "10.0" } ] } ], "totalItemsSold": 1.0, "emittedCoupons": [ { "_id": "64d3cd8513ccef4474a49010", "barcode": "101rco0011179", "amount": 10.0 } ] }
A partir de 7.2.6 se detallan:
- Los campos y cupones en el beneficio
2. Los detalles de los beneficios de la promoción
RabbitMQ- Envío de Movimientos de Elementos de Fidelidad
Cuando se procese en Promo una transacción que involucre una creación y/o movimiento en un elemento de fidelidad deberán enviarse las novedades vía RabbitMQ a la cola que se configure para tal fin.
El archivo a enviar será Json:
Movimientos de Elementos de Fidelidad
{ "_id":"5e3c7196bec9884af49e5401", "amount":321.0, "amountPrev":1085.0, "card":{ "code":"880000000007", "status":"ENABLED", "type":"tarfd" }, "customerCode":"6666", "cardAction":"AMOUNT_UPDATE", "companyId":"napse", "createdAt":"2020-02-06T20:05:42Z", "date":"2020-02-06T20:05:31Z", "reason":"PQS", "storeCode":"Napse", "terminalCode":"34" }
card.type contiene el código del tipo de elemento, reason contiene el código del motivo
posibles valores para card.status:
ENABLED,
DISABLED,
CANCELED,.
BLOCKED,
EXPIRED
posibles valores de cardAction:
ACTIVATION,//Activación
INACTIVATION,//Inactivación
ASSIGN_CUSTOMER,//Asociar a Cliente
REMOVE_CUSTOMER,//Quitar un Cliente
CANCEL,//Cancelación
QUERY,//Consulta
CHARGE,//Carga Inicial
RECHARGE,//Recarga
AMOUNT_UPDATE,//Modificación de Saldo
SALE,//Venta
CONSUME,//Redención o consumo de puntos
PARTIAL_REDEMPTION,//Redención parcial
TOTAL_REDEMPTION,//Redención total
TRANSFER,//Transferencia
ROLLBACK,//Transferencia
EXPIRED,//Vencimiento//ARE_51_2016
EXTENDED_POINTS, //Extensión de vigencia //18P_62_FID_RE_051
ASSIGN_CONTRACT
Los datos que se exponen son: (definición sujeta a validación Técnica)
Campo | Descripción | Ejemplos |
_id | Identificador en Mongo del elemento de fidelidad que se informa | 59a99439caec3625e84476f8 |
amount | Saldo acumulado del elemento de fidelidad que se informa | 254 |
code | Numero identificatorio del elemento de fidelidad que se informa | 2220000000001 |
created | Fecha de creación del elemento de fidelidad que se informa | 2017-09-01T17:09:13Z |
status | Indica el estado del elemento de fidelidad que se informa | ENABLED |
transactionId | Identificador en Mongo de la transacción de creación del elemento de fidelidad que se informa. | BLC_201709011409677 |
type | Tipo del elemento de fidelidad que se informa | 2 |
validFrom | Inicio de vigencia del elemento de fidelidad que se informa | 2017-09-01T03:00:00Z |
validTo | Fin de vigencia del elemento de fidelidad que se informa | 2018-09-01T03:00:00Z |
customerId | ID de cliente al que pertenece el elemento de fidelidad que se informa | 8575 |
Detalle de los movimientos: Este bloque se repetirá tantas veces como movimientos tenga el elemento.
Campo | Descripción | Ejemplos |
amount | Monto que se sumara o restara en base a lo indicado en el campo "cardAction" | 254 |
cardAction | Acción que se realizo sobre el elemento (creación, cancelación, suma, resta o reemplazo de saldo) | AMOUNT_UPDATE |
date | Fecha en que se realizo el movimiento. | 2017-09-01T17:09:44Z |
Importante
Especificar en el campo cardAction cuales son los valores posibles que pueden presentarse en base a si se suma resta o pisa el monto del elemento de fidelidad.
RabbitMQ- Envío de Segmentos
A partir de 7.2.6, cuando se cree o se modifique un segmento (tanto por consola, como por servicio Rest), se recibirá el mensaje en RabbitMQ, a la cola configurada para tal fin.
La cola se denomina segments. El mensaje recibido será en formato Json.
Ej:
{ "_id" : "6494b0ad28dbef37842bba71", "code" : "111", "name" : "1212", "createDate" : "2023-06-22T20:35:57Z", "updateDate" : "2023-06-22T20:36:11Z", "companyId" : "napse" }
Los datos que se exponen son:
Cabecera:
Campo | Detalle | Tipo de dato | Ejemplo |
_id | Identificador en Mongo del segmento que se informa | string | 6494b0ad28dbef37842bba71 |
code | Numero identificatorio del segmento que se informa | string | 111 |
name | Nombre del segmento que se informa | string | 1212 |
createDate | Fecha de creación del segmento que se informa | ISODate | 2023-06-22T20:35:57Z |
updateDate | Fecha de modificación del segmento que se informa | ISODate | 2023-06-22T20:36:11Z |
companyId | Código de empresa | String | napse |
Importante
En la cola sólo se envía la información de la cabecera del segmento.