PROMO 7.1 - Manual de
...
Integración - Colas de Mensajes
...
Painel | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
|
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
Acerca del manual
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
Âncora | ||||
---|---|---|---|---|
|
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
CONSIDERACIOENS EN EL USO DE COLAS DE MENSAJES
...
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.
...
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.
...
Del diagrama se desprende que Promo como productor de la información que él administra (ej: Tarjetas de fidelidad), mientras que al mismo tiempo es un consumidor de la información provista por sistemas externos (ej. Catálogo de marcas).
De esta forma se obtienen todas las ventajas mencionadas en la primer parte del documento donde se elimina la interdependencia entre sistemas, y además el balanceo de carga y escalabilidad se hacen de forma transparente ya que tanto Promo como el sistema externo puede crecer independientemente del otro. Al mismo tiempo la comunicación entre ambos sistemas es administrada por el servidor de colas homogeneizando la misma y eliminando la relación directa y por ende la posibilidad de fallas por no encontrar un componente disponible, o no responder en el tiempo estipulado.
...
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.
...
En la figura siguiente se observa la pantalla de Configuración:
Aviso | ||
---|---|---|
| ||
Promo soporta solo un consumidor por compañía. |
...
El formato del mensaje a recibir desde las colas sigue el siguiente patrón (JSON) general:
Bloco de código | ||||
---|---|---|---|---|
| ||||
{ "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 |
Âncora | ||||
---|---|---|---|---|
|
catalog | Descripción |
---|---|
catalogCard | Catálogo de Tarjetas 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 |
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 tarjetas.
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "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 }, ] } |
Informações |
---|
En versiones superiores a 6.5.14 y 7.0 se incorpora Se incorporó la posibilidad de realizar actualizaciones sobre el campo cvv. En este caso dicho campo queda registrado como una actualización en el detalle de movimientos de tarjetas de fidelidad. |
...
En el siguiente ejemplo se observa la inserción de 2 registros de Marcas:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogBrand", "params": [], "items": [{ "operation": "I", "code": "coke", "name": "Coca-Cola Company" }, { "operation": "I", "code": "pepsi", "name": "Pepsi" } ] } |
Aqui Aquí se observa un ejemplo de insertar un registro de Categoría:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogCategory", "params": [], "items": [{ "operation": "I", "code": "lineaBlanca", "name": "Linea Blanca", "familyCode":"Elect" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogChannel", "params": [], "items": [{ "operation": "I", "code": "web", "name": "WEB" } ,{ "operation": "I", "code": "POS", "name": "POINT OF SALE" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogCreditCampaignCode", "params": [], "items": [{ "operation": "I", "code": "campg1", "name": "Campania 1" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogCustomer", "params": [], "items": [{ "operation": "I", "code": "abc29789456", "name": "Jose Luis", "lastName": "Martinez", "email":"[email protected]", "identificationType":"DNI", "identifier":"29789456" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogCustomerType", "params": [], "items": [{ "operation": "I", "code": "vip", "name": "VIP CLIENT" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogIdType", "params": [], "items": [{ "operation": "I", "code": "DNI", "name": "DOCUMENTO NACIONAL DE IDENTIDAD" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogDepartment", "params": [], "items": [{ "operation": "I", "code": "elec", "name": "Electronica" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogEventTransaction", "params": [], "items": [{ "operation": "I", "code": "blFriday", "name": "Black Friday" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogEventTransactionType", "params": [], "items": [{ "operation": "I", "code": "bf2019", "name": "Black Friday 2019" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "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 }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogFamily", "params": [], "items": [{ "operation": "I", "code": "coc", "name": "Cocina" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogFormat", "params": [], "items": [{ "operation": "I", "code": "dig", "name": "Digital" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogInfoFinancial", "params": [], "items": [{ "operation": "I", "code": "buss", "name": "Financial Bus" } ] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "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>" }] } |
...
Aviso | ||
---|---|---|
| ||
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
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "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" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogPaymentBank", "params": [], "items": [{ "operation": "I", "code": "credit18", "name": "18 cuotas sin interes" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogPaymentCode", "params": [], "items": [{ "operation": "I", "code": "paymentCode1", "name": "payment code 1" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogPaymentPrefix", "params": [], "items": [{ "operation": "I", "code": "perfix1", "name": "perfix1" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogPaymentType", "params": [], "items": [{ "operation": "I", "code": "tarjeta", "name": "tarjeta de credito" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogProfileCode", "params": [], "items": [{ "operation": "I", "code": "abc1", "name": "clientes abc1" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogPaymentType", "params": [], "items": [{ "operation": "I", "code": "tarjeta", "name": "tarjeta de credito" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogStoreChain", "params": [], "items": [{ "operation": "I", "code": "chain1", "name": "chain1" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"companyId": "napse",
"catalog": "catalogStore",
"params": [],
"items": [{
"operation": "I",
"code": "dot",
"name": "tienda dot bs as"
}]
} | ||||||
Bloco de código | ||||||
| ||||||
{ "companyId": "napse", "catalog": "catalogSubCategory", "params": [], "items": [{ "operation": "I", "code": "peqElec", "name": "Pequeños Electrodomesticos", "categoryCode": "ELECT" }] } |
...
Informações | ||
---|---|---|
| ||
El atributo categoryCodedel catalogo de Subcategorías, es el código de la categoría |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogSubZone", "params": [], "items": [{ "operation": "I", "code": "conurb", "name": "conurbano bsas" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogSupplier", "params": [], "items": [{ "operation": "I", "code": "sony", "name": "sony corporation" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalogZone", "params": [], "items": [{ "operation": "I", "code": "bsnorte", "name": "zona norte bsas" }] } |
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId": "napse", "catalog": "catalog<Dynamic>", "params": [], "items": [{ "operation": "I", "code": "code", "name": "name" }] } |
...
Aviso | ||
---|---|---|
| ||
Los catálogos dinámicos tendrán el nombre formado por catalog concatenado con el código del atributo dinámico creado en la consola. Por ejemplo si el atributo creado en la consola es color, lapropiedad del Json deberá ser "catalog":"catalogColor" |
...
Catálogos Asociados a Campos Dinámicos
La definición de los denominados campos dinámicos permite asociar los mismos con un catálogo. Este catálogo puede ser también administrado vía colas.
Ejemplo de carga de catalogo DINÁMICO.
Pasos
Ir al menú Administración en la opción Atributo de elementos, allí se creara el campo dinámico el cual tendrá que definirse como tipo AUTOCOMPLETADO POR CATALOGO.
- 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 3. En Administración, Importación de catálogos se podrán ver los datos ingresados.
54. En la promoción se podrá seleccionar los datos ingresados.
6 5. Para que el motor pueda evaluar la promoción se deberá distribuir el atributo creado en el paso (Dicha distribución precisa que se reinicie el motor).
76. Distribuir el mapa con la promoción para poder evaluar la misma.
...
Promo como Productor
Promo permite el envío de información mediante colas RabbitMQ (función productor). Por defecto esta información es enviada cada 30 minutos (proceso background) al servidor de colas.
...
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 | Alfanumérico | 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 | Alfanumérico | 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 | Alfanumérico | Nombre de la cola de RabbitMQ para el posteo del status de motor y consola. |
rabbitMQ.producer.uri | Alfanumérico | 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 | Alfanumérico | Usuario para acceder al RabbitMQ para el posteo de datos |
rabbitMQ.producer.password | Alfanumérico | Password para acceder al RabbitMQ para el posteo de datos |
rabbitMQ.producer.host | Alfanumérico | Dirección (host) del RabbitMQ server para el posteo de datos |
rabbitMQ.producer.virtualHost | Alfanumérico | Virtual Host al RabbitMQ para el posteo de datos |
rabbitMQ.producer.port | Numérico | Puerto del server RabbitMQ para el posteo de datos |
rabbitMQ.promotionsCache.endpointName | Alfanumérico | Nombre de la cola RabbitMQ que recibirá los mensajes referentes al Cache de Promociones. (Ver Cache de Promociones) |
Nuevamente la configuración via URI es excluyente a la configuración por parámetros separados. Entonces tendremos dos configuraciones:
...
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 –
...
La cola de mensaje disponibles para el envío del historial de tarjetas:
- rabbitMQ.cardhistory.endpointName >> Nombre de la cola de RabbitMQ para el posteo de datos del historial de tarjetas.
Ejemplo del Json que se envía:
Bloco de código | ||
---|---|---|
| ||
{
"_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
...
Descripción
...
id
...
Id del registro de limite en Mongo.
...
amount
...
Monto actual asociado a la tarjeta de fidelidad
...
amountPrev
...
Monto previo de la tarjerta de fidelidad
...
card {}
Datos asociados a la tarjeta informada
code | Numero de la tarjeta de fidelidad |
status | Estado de la tarjeta de fidelidad |
type | Tipo de la tarjeta de fidelidad |
...
cardAction
...
Accion asociada al movimiento de tarjeta de fidelidad.
...
companyId
...
Compañía desde la que se envia el movimiento de la tarjeta de fidelidad.
...
createdAt
...
Fecha de creacion de la tarjeta de fidelidad.
...
customerCode
...
Cliente asociado a la tarjeta de fidelidad.
...
date
...
Fecha del movimiento que se informa de la tarjeta de fidelidad.
...
reason
...
Código de la razón asociada al movimiento que se informa de la tarjeta de fidelidad.
...
reasonName
...
Nombre de la razón asociada al movimiento que se informa de la tarjeta de fidelidad.
...
storeCode
...
Código de la tienda asociada al movimiento que se informa de la tarjeta de fidelidad.
...
terminalCode
...
Código de la terminal asociada al movimiento que se informa de la tarjeta de fidelidad.
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:
...
theme | Emacs |
---|
...
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.
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"_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.
Nota |
---|
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 | -- |
Nota |
---|
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:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"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:
Bloco de código | ||||
---|---|---|---|---|
| ||||
"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 |
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:
Bloco de código | ||||
---|---|---|---|---|
| ||||
"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 | Descripción de la clase de beneficio |
entityCatalog | Ej.: "null" | String | nombre del catalogo de entidad |
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 Tarjetas
La cola de mensaje disponibles para el envío del historial de tarjetas:
- rabbitMQ.cardhistory.endpointName >> Nombre de la cola de RabbitMQ para el posteo de datos del historial de tarjetas.
Ejemplo del Json que se envía:
Bloco de código | ||||
---|---|---|---|---|
| ||||
{
"_id": "603d02251082e8369081744b",
"amount": "0",
"amountPrev": "0",
"card": {
"code": "9900000000000000",
"status": "ENABLED",
"type": "987"
},
"cardAction": "ACTIVATION",
"companyId": "napse",
"createdAt": "2021-03-01T15:03:01Z",
"customerCode": null,
"date": "2021-03-01T15:03:01Z",
"reason": null,
"reasonName": null,
"storeCode": null,
"terminalCode": null
} |
Detalle de los campos:
Campo | Ejemplos | Tipo de Dato | Descripción | ||||||
id | 603d02251082e8369081744b | string | Id del registro de limite en Mongo. | ||||||
amount | 0 | double | Monto actual asociado a la tarjeta de fidelidad | ||||||
amountPrev | 0 | double | Monto previo de la tarjeta de fidelidad | ||||||
card {} | array | Datos asociados a la tarjeta informada
| |||||||
cardAction | Activation | string | Acción asociada al movimiento de tarjeta de fidelidad. | ||||||
companyId | 2 | string | Compañía desde la que se envía el movimiento de la tarjeta de fidelidad. | ||||||
createdAt | 2021-03-01T15:03:01Z | IsoDate | Fecha de creación de la tarjeta de fidelidad. | ||||||
customerCode | 1 | string | Cliente asociado a la tarjeta de fidelidad. | ||||||
date | 2021-03-01T15:03:01Z | IsoDate | Fecha del movimiento que se informa de la tarjeta de fidelidad. | ||||||
reason | Razón 1 | string | Código de la razón asociada al movimiento que se informa de la tarjeta de fidelidad. | ||||||
reasonName | Razón 1 | string | Nombre de la razón asociada al movimiento que se informa de la tarjeta de fidelidad. | ||||||
storeCode | 1 | string | Código de la tienda asociada al movimiento que se informa de la tarjeta de fidelidad. | ||||||
terminalCode | 1 | string | Código de la terminal asociada al movimiento que se informa de la tarjeta de fidelidad. |
RabbitMQ – Historial de Cupones
La cola de mensaje disponibles para el envío del historial de cupones:
- rabbitMQ.couponhistory.endpointName >> Nombre de la cola de RabbitMQ para el posteo de datos del historial de cupones.
Ejemplo del Json que se envía:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"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 cupón |
barcode | String | Código de barras generado para el cupón (según su tipo) |
customerCode | String | (opcional) Mongo Id del cliente nominado |
type | String | Código del tipo de cupón |
name | String | Nombre del tipo de cupón |
description | String | (opcional) Descripción del tipo de cupón |
date-time | Date | Fecha de registro (formato default "locale" o "UTC" según configuración) |
store | String | Código de la tienda |
terminal | String | Código de la terminal |
validFrom | Date | Fecha inicio de validez (formato "dd/MM/yyyy") |
validTo | Date | Fecha fin de validez (formato "dd/MM/yyyy") |
status | String | Estado del cupón |
action | String | Acción realizada con el cupón |
transactionId | String | (opcional) Mongo Id de la trx relacionada |
couponHistoryId | String | Mongo Id |
RabbitMQ – Estado de los limites
La cola de mensaje disponibles para el envío de estado de los limites es:
- rabbitMQ.limitstatus.endpointName >> Nombre de la cola de RabbitMQ para el posteo de datos de tipo LimitStatus (informara movimientos de todos los tipos de limites)
Ejemplo del Json que se envía:
Bloco de código | ||||
---|---|---|---|---|
| ||||
{
"_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.
Informações | ||
---|---|---|
| ||
|
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.
Informações | ||
---|---|---|
| ||
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
Bloco de código | ||||
---|---|---|---|---|
| ||||
{
"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 vacío. |
stores | "napse" | Alfanumérico | Tiendas solo para motor, para consola vacío. |
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:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"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:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"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.
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.
Informações |
---|
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
Cada vez que se realiza una transacción, se detalla en la consola:
y la respuesta de la cola Rabbit tiene un formato, como el ejemplo:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{ "companyId" : "farme", "transactionId" : "farme_0079_6_20210217112812", "transactionType" : "SALE", "offline" : false, "originalTransactionId" : "", "terminalCode" : "6", "storeCode" : "0079", "zoneCode" : "", "subZoneCode" : "", "storeChainCode" : "003", "storeTerminal" : "farme_0079_6", "channelCode" : "", "mapVersion" : 958, "engineVersion" : "7.0.0-FP1", "messageId" : "0001", "iDate" : 20210217, "iHour" : 11, "iTime" : 112812, "transactionDate" : "2021-02-17T14:28:12Z", "processDate" : "2022-06-22T19:22:13Z", "headerExtraFields" : { "processed" : false, "headerExtension" : { }, "formatCode" : "", "tenderGroupCode" : "", "currencyCode" : "", "externalReferenceId" : "farme_0079_6_20210217112812", "_id" : "60478417939d591f28df2a73" }, "benefitTotal" : 1.292, "subtotal" : 4.23, "total" : 2.9380000000000006, "promotions" : [ { "promoId" : "60398ad1cff31c19a864f0b8", "promoName" : null, "campaingName" : null, "promoCode" : null, "benefits" : [ { "benefitNro" : "60398ad1cff31c19a864f0b6", "benefitType" : "CalculatedCouponApplicationBenefit", "hasLimit" : false, "qty" : 0.0, "value" : 1.292, "valueWithTaxes" : 1.292, "tipoPromo" : "DV", "reqdig" : "NO", "rqdevpremio" : "NO", "lpcobro" : "PVP", "cobrounidad" : "NO", "fecha_fin_promo" : "2021/12/31", "ajus_pvp_pc" : "NO", "couponId" : "tqa006" } ], "discount" : 1.292 } ], "events" : [], "customers" : [ { "cardNumber" : "0", "sequence" : 1, "valuesAsMap" : { }, "id" : "1000938173", "points" : 0.0, "POINTS" : 0, "creditCampaignCode" : null, "hasLimitsError" : false, "name" : "guevara arturo ", "raffleData" : null, "REMAININGAMOUNT" : 1, "type" : "c", "redeemPointsPriceFactor" : 0.0, "identifierType" : "c", "lastName" : "guevara arturo ", "AMOUNT" : 2, "segment" : [], "amount" : 0.0, "balance1" : 0.0, "profileCode" : null, "limitedBenefits" : "", "email" : "[email protected]", "identifier" : "1000938173", "externalId" : "1000938173", "remainingAmount" : 0.0, "balance2" : 0.0 } ], "payments" : [ { "plan" : "-", "sequence" : 1, "id" : "efe", "valuesAsMap" : { }, "balance" : false, "prefix" : "-", "payCreditCampaign" : "-", "type" : "efe", "AMOUNT" : 0, "bank" : "-", "amount" : 3.98, "prefixGroup" : [], "prefixGroupStr" : "-", "installments" : "-", "itemamount" : 0.0, "externalId" : "efe", "pocket" : "-" } ], "coupons" : [ { "type" : "tqa006", "QTY" : 1, "qty" : 0.0, "sequence" : 1, "valuesAsMap" : { }, "id" : "0016150041992", "AMOUNT" : 0, "amount" : 1.292, "externalId" : "0016150041992", "participants" : [ { "promoId" : "60398ad1cff31c19a864f0b8", "promoName" : null, "campaingName" : null, "qty" : "0.0", "magnitude" : null, "xprice" : null } ] } ], "loyaltycards" : [], "items" : [ { "magnitude" : 0.0, "supplierFinancial" : null, "supplierItemAmount" : 0.0, "priceResponseFields" : { "code" : "0000132311", "xprice" : "4.2300", "qty" : "1.0000", "unitprice" : "4.2300", "magnitude" : "0.0000", "seq" : "1", "priceLastUpdate" : "-", "priceListId" : null, "discountable" : "true", "originalDiscountable" : "true", "manualDiscount" : "false" }, "MAGNITUDE" : 2, "priceListId" : null, "level2" : "34", "unitXPriceOriginal" : 4.23, "qty" : 1.0, "unitCostPrice" : 0.0, "sequence" : 1, "valuesAsMap" : { }, "taxes" : 0.0, "code" : "0000132311", "brand" : "5491", "applyCatalogRedeem" : false, "level4" : "623", "supplierItem" : null, "unitprice" : 4.23, "discountable" : "true", "calCouponVal" : 0.0, "priceListLastUpdate" : null, "lowTurnover" : false, "level3" : "299", "discontinuous" : false, "xprice" : 4.23, "redeemOption" : null, "QTY" : 1, "supplierFinancialAmount" : 0.0, "originalDiscountable" : "true", "PRICE_WITH_TAXES" : 3, "priceWithTaxes" : 4.23, "level1" : "5", "xpriceOriginal" : 4.23, "supplier" : "-", "XPRICE" : 0, "keyProduct" : false, "externalId" : null, "manualDiscount" : false, "benefitApplies" : [ { "type" : null, "hasLimit" : false, "qty" : 0.0, "benefitNro" : "60398ad1cff31c19a864f0b6", "transactionComboParticipants" : [], "additionalData" : { "tipoPromo" : "DV", "reqdig" : "NO", "rqdevpremio" : "NO", "lpcobro" : "PVP", "cobrounidad" : "NO", "fecha_fin_promo" : "2021/12/31", "ajus_pvp_pc" : "NO", "couponId" : "tqa006" }, "promotionName" : "TPV3-Redencion cupon impreso no nominado si calculado cod 0000132311 probar consumo total (tqa006)", "benefitType" : "CalculatedCouponApplicationBenefit", "transactionBenefitApplies" : [ { "_idmagnitude" : "603a36021082e83690816fe0", 0.0, "promotionIdvalue" : "603a2fa81082e83690816f81",1.292, "benefitId": "603a2fce1082e83690816f88", "promotionCodevalueWithTaxes" : null1.292, "promotionName": "limite general", "limitIdxprice" : "603a2fca1082e83690816f87",4.23, "scope": "RETAILER", "periodseq" : "UNDEFINED"1, "maxValue": 10.0, "customerIdqty" : "-",1.0, "storeId": "-", "numberDayspoints" : 0.0, "nextReset": "2021-02-27T03:00:00Z", "lastResetminimumApplied" : "2021-02-27T03:00:00Z", " "companyId": "napse", } "limitTypeCode": "benefiedProductCount", "description": null, ], "promotionNro" : "60398ad1cff31c19a864f0b8", "lastUpdatepromotionCode" : "2021-02-27T12:07:30Z", 3377" } ], "participants" : "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.
Informações | ||
---|---|---|
| ||
|
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.
Informações | ||
---|---|---|
| ||
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
Bloco de código | ||
---|---|---|
| ||
{
"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:
...
Mensajes: Cache de Promociones
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:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"promotionCode" : "0",
"promotionName" : "init promoCache lot number 1596140494623",
"SKU" : "0",
"img": null
} |
Luego cada promoción asociada al producto llevará el siguiente formato:
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"promotionCode" : "p003",
"promotionName" : "Promo03",
"SKU" : "2734",
"img": “http://myserverPromo:8080/assets/images/promonavidad.jpg”
} |
Gestión de Errores
En el caso de existir registros de posteos a server RabbitMQ con ERROR, se mostrara un aviso (banner) en la cabecera de Promo, indicando de forma general la incidencia.
...
{ "promoId" : "60398ad1cff31c19a864f0b8",
"promoName" : null, "campaingName" : null,
"qty" : "1.0",
"magnitude" : "0.0",
"xprice" : "4.23"
}
]
}
],
"totalItemsSold" : 1.0
}
|
RabbitMQ- Envío de Movimientos de Tarjetas de Fidelidad
Cuando se procese en Promo una transacción que involucre una creación y/o movimiento en una tarjeta 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 Tarjetas de Fidelidad
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
{
"_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 tarjeta, reason contiene el código del motivo.
posibles valores para card.status:
ENABLED,
DISABLED,
CANCELED,.
BLOCKED,
EXPIRED
p
osibles 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):
Cabecera:
Campo | Descripción | Ejemplos |
_id | Identificador en Mongo de la tarjeta de fidelidad que se informa | 59a99439caec3625e84476f8 |
amount | Saldo acumulado de la tarjeta de fidelidad que se informa | 254 |
code | Numero identificatorio de la tarjeta de fidelidad que se informa | 2220000000001 |
created | Fecha de creación de la tarjeta de fidelidad que se informa | 2017-09-01T17:09:13Z |
status | Indica el estado de la tarjeta de fidelidad que se informa | ENABLED |
transactionId | Identificador en Mongo de la transacción de creación de la tarjeta de fidelidad que se informa. | BLC_201709011409677 |
type | Tipo de la tarjeta de fidelidad que se informa | 2 |
validFrom | Inicio de vigencia de la tarjeta de fidelidad que se informa | 2017-09-01T03:00:00Z |
validTo | Fin de vigencia de la tarjeta de fidelidad que se informa | 2018-09-01T03:00:00Z |
customerId | ID de cliente al que pertenece la tarjeta de fidelidad que se informa | 8575 |
Detalle de los movimientos: Este bloque se repetirá tantas veces como movimientos tenga la tarjeta.
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 la tarjeta (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 |
Aviso | ||
---|---|---|
| ||
Especificar en el campo cardAction cuales son los valores posibles que pueden presentarse en base a si se suma resta o pisa el monto de la tarjeta de fidelidad. |