Manual de Integração -
PROMO Filas de Mensagens v7.2





Índice




Sobre o manual

Finalidade e âmbito


O objetivo deste manual é treinar o usuário que deseja integrar seu aplicativo de vendas com os serviços que o Promo expõe e sua integração por meio de filas de mensagens.
É fornecida uma descrição detalhada das mensagens que lhe devem ser enviadas e como interpretar as mensagens de resposta que dará a um pedido.


Introdução

CONSIDERAÇÕES NO USO DE FILAS DE MENSAGENS


Atualmente as aplicações estão disponíveis na nuvem (SAS) e isso trouxe novos paradigmas de arquitetura de soluções. Uma delas é desacoplar esses aplicativos em pequenos componentes ou blocos independentes que podem ser mais fáceis de desenvolver, implementar e manter no futuro. Obviamente, tal arquitetura requer um mecanismo de comunicação confiável e seguro entre os blocos mencionados e, acima de tudo, um mecanismo mais flexível do que a comunicação inter processos tradicional com as limitações que eles impõem.


A utilização de filas de mensagens oferece-nos uma alternativa válida para implementar a referida comunicação, e mesmo a coordenação dos referidos componentes. Consideremos que a fila de mensagens é um árbitro que quebra o conhecimento ou a dependência direta entre as partes, pois está localizada no meio, sendo a única coisa que os consumidores e produtores de mensagens conhecem e dependem. Com isso, o código de comunicação é menor em cada componente e a comunicação segue um padrão padrão como Publisher-subscriber, ou Listener DP, que é uma solução comprovada e adotada na indústria de software.


Outra vantagem do uso de filas é que elas permitem que a comunicação assíncrona seja implementada, pois, como mencionamos anteriormente, produtores e consumidores não interagem entre si, mas sim por meio da fila, de modo que as mensagens podem ser enviadas para a fila independentemente de se há alguém disponível para ouvi-los ou que possa processá-los naquele exato momento. Da mesma forma, um consumidor pode pegar ou receber mensagens da fila em seu próprio tempo e poder de processamento. Dessa forma, nenhum componente depende diretamente do outro, melhorando o fluxo de dados.


Do que foi dito até agora, pode-se deduzir que a arquitetura é flexível no que diz respeito à sua escalabilidade, pois de acordo com a carga de trabalho, os nós da própria fila podem ser dimensionados, os produtores podem crescer em número e os consumidores no mesma forma, com a qual permite que a capacidade do sistema cresça de forma quase transparente.


Uma grande vantagem a referir é que sendo a fila que gere os dados, existe uma maior tolerância a falhas, pois se algum componente não estiver disponível é a mesma fila que efetua a persistência dos dados e ela própria pode ser implementado em um esquema de alta disponibilidade, melhorando ainda mais a tolerância a erros.


CONSIDERAÇÕES ESPECÍFICAS PARA A PROMOÇÃO

Promo incorporou o uso das filas mencionadas como padrão.

Na imagem a seguir, você pode ver um diagrama de arquitetura simples:

Do diagrama pode-se deduzir que Promo é um produtor da informação que gere (ex: Elementos de Fidelidade), ao mesmo tempo que é um consumidor da informação fornecida por sistemas externos (ex: Catálogo de Marcas).


Desta forma, obtêm-se todas as vantagens mencionadas na primeira parte do documento, onde a interdependência entre sistemas é eliminada, e também o balanceamento de carga e escalabilidade são feitos de forma transparente, já que tanto o Promo quanto o sistema externo podem crescer independentemente um do outro. Ao mesmo tempo, a comunicação entre ambos os sistemas é gerenciada pelo servidor de filas, homogeneizando-o e eliminando a relação direta e, portanto, a possibilidade de falhas por não encontrar um componente disponível, ou por não responder no tempo estipulado.

O que é RabbitMQ?

RabbitMQ  é  um software  de enfileiramento de mensagens chamado corretor de mensagens ou gerenciador de filas. Simplificando, é  um software  onde as filas podem ser definidas, os aplicativos podem se conectar a essas filas e colocar/ler mensagens nelas.

Como funciona?

A arquitetura básica de uma fila de mensagens é simples. Existem aplicações clientes, chamadas de produtores, que criam mensagens e as entregam ao broker (a fila de mensagens). Outros aplicativos, chamados consumidores, conectam-se à fila e assinam as mensagens a serem processadas. Uma mensagem pode incluir qualquer tipo de informação.

Um  software  pode ser produtor, consumidor ou produtor e consumidor de mensagens simultaneamente. As mensagens colocadas na fila são armazenadas até serem recuperadas e processadas pelo consumidor.


Requisitos

No desenvolvimento deste manual assume-se que você possui um servidor RabbitMQ instalado, disponível e configurado.

Para mais informações, acesse https://www.rabbitmq.com/

variável RabbitMq.date.UTC

Através da variável .date.UTC rabbitmq , todas as mensagens que são retornadas para qualquer uma das consultas via Rest disponíveis no Promo, são reportadas com o formato de localidade configurado no servidor; que por padrão é GMT

Filas de mensagens afetadas :

  • Promoções: rabbitMQ. promoção .endpointName
  • Histórico de itens de fidelidade: rabbitMQ. cardhistory .endpointName
  • Histórico de cupons: rabbitMQ. cupomHistory .endpointName
  • Estado limite: rabbitMQ. limitstatus .endpointName
  • Status do mecanismo e do console: rabbitMQ. enginestatus .endpointName

Nota

Leve em consideração a configuração descrita em  Informações de configuração



Promoção como consumidor

Promo possui funcionalidade de consumidor de fila RabbitMQ com a finalidade de receber informações sobre catálogos de sistemas externos (produtores).

Contexto

Os parâmetros de configuração que ativam e definem esta funcionalidade encontram-se em Administração→Informações de configuração. (Palavra-chave RabbitMQ na pesquisa).

Assim que o Promo receber as informações da fila correspondente do Rabbit, elas serão transferidas para o monitor de Importação e serão processadas pela tarefa agendada denominada "Importador de Entidade".


Para suportar esta funcionalidade, as seguintes entradas devem ser configuradas no menu Administração , na seção Informações de configuração :


dicaTipo de dadosDescrição
rabbitMQ.enabledboleanoPropriedade que indica se o RabbitMQ está ativado (verdadeiro ou falso). Se definido como TRUE Promo se conectará ao servidor RabbitMQ e o ouvirá. Se for definido como falso, ele se desconectará dele.
RabbitMQ.endpointNamealfanuméricoNome da fila RabbitMQ da qual as mensagens serão consumidas
RabbitMQ.urialfanumérico

URI completo da conexão RabbitMQ ( amqp://<user>:<password>@<host>:<port>/<vhost> )

vhost: Opcional se definido no servidor RabbitMQ

Este parâmetro contém e exclui os outros marcados com *

RabbitMQ.nome de usuário*alfanuméricoUsuário para acessar o RabbitMQ
RabbitMQ.senha*alfanuméricoSenha para acessar o RabbitMQ
RabbitMQ.host*alfanuméricoEndereço (host) do servidor RabbitMQ
RabbitMQ.virtualHost*alfanuméricoHost Virtual para RabbitMQ
RabbitMQ.port*NuméricoPorta do servidor RabbitMQ


Conforme a tabela anterior teremos 2 formas exclusivas de configurar, ou seja, ou é utilizado o parâmetro URI ou seus componentes são utilizados separadamente.

Teremos então por exemplo:

1) Usando URIs:

  • rabbitMQ.enabled : (verdadeiro ou falso)

  • rabbitMQ.uri :amqp://<usuário>:<senha>@<host>:<porta>/<vhost( Opcional) >

  • rabbitMQ.endpointName :<queueName>


2) Usando os parâmetros separadamente:

  • rabbitMQ.enabled :(verdadeiro ou falso) 

  • RabbitMQ.username :<usuário>

  • RabbitMQ.senha: <senha>

  • RabbitMQ.host :<host>

  • RabbitMQ.virtualHost :<vhost>

  • rabbitMQ.port :<porta>

  • rabbitMQ.endpointName :<queueName>


A figura a seguir mostra a tela de Configuração:



Consumer por Empresa

A Promo suporta apenas um consumidor por empresa.



Uma vez configuradas as propriedades da fila, o sistema tentará se conectar ao servidor RabbitMQ, caso não obtenha sucesso na conexão, o sistema tentará novamente quando o job de importação "JobService" for executado (antes de fazer a chamada de importação ) .



Formato de mensagem de fila (catálogos)

O formato da mensagem a ser recebida das filas segue o seguinte padrão geral (JSON):

{
	"companyId": "<companyId>",
	"catálogo": "<nome do catálogo>",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"<nome do campo>": "<nome>",
			"<fieldCode>": "<code>"
		},
		{
			"operação": "U",
			"<nome do campo>": "<nome>",
			"<fieldCode>": "<code>"
		},
		{
			"operação": "D",
			"<nome do campo>": "<nome>",
			"<fieldCode>": "<code>"
		},
		{
			"operação": "eu",
			"<nome do campo>": "<nome>",
			"<fieldCode>": "<code>"
		}
	]
}	 


Onde:

Propriedade

Tipo de dados

Descrição

ID da empresa

alfanumérico

Código da companhia

Catálogo

alfanumérico

Código que identifica o catálogo (VER TIPOS VÁLIDOS)

parâmetros

JSON 

Opcional. Dados auxiliares para definir quais serão usados ​​para importar o catálogo

Unid

matriz json

São os itens a importar do catálogo

cirurgia

alfabética

Operação a realizar no registro ( I , U , D )

"I"   indica que o registro deve ser inserido

"U" indica que o registro precisa ser atualizado

"D" indica que o registro deve ser excluído

"UI" indica que o registro será inserido se não existir ou atualizado se existir

<fieldName>
alfanuméricocampos específicos do catálogo a importar





TIPOS DE CATÁLOGOS VÁLIDOS:


CatálogoDescrição
catalogCardCatálogo de elementos de fidelidade
catálogoMarcaCatálogo de marcas
catálogoCategoriaCatálogo de categorias
catálogocanalCatálogo de Canais
catalogCreditCampaignCodeCatálogo de Campanhas de Crédito
catálogoClienteCatálogo de Clientes
catálogoCustomerTypeCatálogo de tipos de Clientes
catalogIdTypeCatálogo de Tipos de Identificadores
departamentodecatálogoCatálogo de Departamentos
catalogEventTransactioncatálogo de eventos
catalogEventTransactionTypeCatálogo de tipo de evento
catálogoEstenderGarantiaCatálogo de extensão de garantia
catálogoFamíliaCatálogo de família de produtos
formato de catálogoCatálogo de formatos
catalogInfoFinancialCatálogo de Informações Financeiras
catalogItemCatálogo de produtos
catalogItemEstoqueCatálogo de Estoque de Produtos
catálogoPagamentoBancoCatálogo de pagamentos bancários
catalogPaymentCodeCatálogo de códigos de pagamento bancário
catalogPaymentPrefixCatálogo de Prefixos Bancários
catalogPaymentTypeCatálogo de Tipos de Pagamento
catalogProfileCodeCatálogo de códigos de perfil do cliente
catalogStoreChainCatálogo da cadeia de valor
catálogoLojaCatálogo da loja
catálogoSubcategoriacatálogo de subcategorias
catálogoSubZonacatálogo de subzona
catálogofornecedorcatálogo de fornecedores
catalogZonecatálogo de zonas
catálogo<CodeFieldDynamic>Catálogo dinâmico o nome do mesmo é formado com o Catálogo String concatenado com o código do campo dinâmico gerado no console





Exemplos de carregamento de Catálogos


O exemplo a seguir mostra a inserção de 2 registros de elementos de fidelidade.

Elementos de Fidelidad
{
	"companyId": "napse",
	"catálogo": "cartão de catálogo",
	"parâmetros": [],
	"Unid": [
		{
		"operação": "eu",
		"código": "1234000000000",
		"tipo": "1234",
		"validFrom": "2019-06-01",
		"validTo": "2029-06-20",
		"cvv": "987",
		"ID do cliente": 12134,
		"quantia": 300.000
		},
		{
		"operação": "eu",
		"código": "1234000000001",
		"tipo": "1234",
		"validFrom": "2019-06-01",
		"validTo": "2029-06-22",
		"cvv": "879",
		"ID do cliente": 2222,
		"quantia": 60000
		},
	]
}

Nas versões superiores a 6.5.14 e 7.0, é incorporada a possibilidade de fazer atualizações no campo cvv. Neste caso, o referido campo é registado como atualização no detalhe dos movimentos dos elementos de fidelização.


O exemplo a seguir mostra a inserção de 2 registros de marca registrada:

Marcas
{
	"companyId": "napse",
	"catálogo": "catálogoMarca",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "coca",
			"nome": "Empresa Coca-Cola"
		},
		{
			"operação": "eu",
			"código": "pepsi",
			"nome": "Pepsi"
		}
	]
}

Aqui está um exemplo de inserção de um registro de categoria:

Categorias
{
	"companyId": "napse",
	"catálogo": "catálogoCategoria",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "linha branca",
			"nome": "Linha Branca",
            "familyCode":"Eleger"
		}
	]
}
Canal
{
	"companyId": "napse",
	"catálogo": "catalogChannel",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "web",
			"nome": "Web"
		} ,{
			"operação": "eu",
			"código": "POS",
			"nome": "PONTO DE VENDA"
		}
	]
}
Campaña de Créditos
{
	"companyId": "napse",
	"catalog": "catalogCreditCampaignCode",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "campg1",
			"nome": "Campânia 1"
		}   
	]
}
Clientes
{
	"companyId": "napse",
	"catálogo": "catálogoCliente",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "abc29789456",
			"nome": "José Luís",
			"lastName": "Martinez",
			"email":"[email protected]",
		   	"tipo de identificação":"ID",
            "identificador":"29789456"
		}  
	]
}
Tipo de Clientes
{
	"companyId": "napse",
	"catálogo": "catálogoCustomerType",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "vip",
			"nome": "CLIENTE VIP"
		}  
	]
}
Tipo de Identificador
{
	"companyId": "napse",
	"catálogo": "catalogIdType",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "ID",
			"nome": "DOCUMENTO DE IDENTIDADE NACIONAL"
		}  
	]
}
Departamentos
{
	"companyId": "napse",
	"catálogo": "departamento de catálogo",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "elec",
			"nome": "Eletrônica"
		}  
	]
}
Eventos
{
	"companyId": "napse",
	"catálogo": "catálogoEventTransação",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "blFriday",
			"nome": "Sexta-feira negra"
		}  
	]
}
Tipo de Eventos
{
	"companyId": "napse",
	"catálogo": "catalogEventTransactionType",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "bf2019",
			"nome": "Sexta-feira Negra 2019"
		}  
	]
}


Garantia Extendida
{
	"companyId": "napse",
	"catalog": "catalogExtendWarranty",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "sonyArg",
		"categoria": "linha branca",
		"creditProduct": "40%",
		"perfilClientes": "vip",
		"loja": "ponto",
		"skuWarranty": "WAUKH78EX6A144617",
		"anos de garantia": "2 anos",
		"initData": ,
		"data final": ,
		"endPrice": 13999
	}]
}

Familia de Productos
{
	"companyId": "napse",
	"catálogo": "catálogoFamília",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "coco",
			"nome": "Cozinha"
		}  
	]
}
Formatos
{
	"companyId": "napse",
	"catálogo": "formatocatálogo",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "escavar",
			"nome": "Digital"
		}  
	]
}
Información Financiera
{
	"companyId": "napse",
	"catalog": "catalogInfoFinancial",
	"parâmetros": [],
	"Unid": [{
			"operação": "eu",
			"código": "ônibus",
			"name": "Ônibus Financeiro"
		}  
	]
}
Productos
{
	"companyId": "napse",
	"catalog": "catalogItem",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "997551470-7",
		"nome": "Disco sdd 256",
		"preço unitário": 5000,
		"level1": "partida1",
		"nível2": "família1",
		"nível3": "categoria1",
		"level4": "subcategoria1",
		"fornecedor": "tecno",
		"marca": "WesternDigital",
		"detalhe": "Western Digital 512gb",
		"detail2": "WesternDigital 512gb sdd",
 		"<CodeFieldDynamic>":"<valor>"
	}]
}


Catalogo de Ítem con campos Dinámicos

O catálogo de itens suporta a inserção de campos dinâmicos, eles devem ser enviados como mais um atributo, colocando o código do campo entre aspas: e seu valor entre aspas


Exemplo de CatalogItem com dois campos dinâmicos, por exemplo se houver dois campos dinâmicos com o código de sublinhado e outra cor, o exemplo seria o seguinte
Produtos com campos dinâmicos

Catalogo Producto con campos Dinámicos
{
	"companyId": "napse",
    "catalog": "catalogItem",
    "parâmetros": [],
    "Unid": [{
        "operação": "eu",
        "código": "997551470-7",
        "nome": "Disco sdd 256",
        "preço unitário": 5000,
        "level1": "partida1",
        "nível2": "família1",
        "nível3": "categoria1",
        "level4": "subcategoria1",
        "fornecedor": "tecno",
        "marca": "WesternDigital",
        "detalhe": "Western Digital 512gb",
        "detail2": "WesternDigital 512gb sdd",
        "sublinha":"meuSublinha",
        "cor azul"
    }]
}
Pagos bancarios
{
	"companyId": "napse",
	"catalog": "catalogPaymentBank",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "crédito18",
		"name": "18x sem juros"
	}]
}
Código de Pago
{
	"companyId": "napse",
	"catalog": "catalogPaymentCode",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "pagamentoCode1",
		"nome": "código de pagamento 1"
	}]
}
Prefijo de Pago
{
	"companyId": "napse",
	"catalog": "catalogPaymentPrefix",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "perfix1",
		"nome": "perfix1"
	}]
}
Tipo de Pago
{
	"companyId": "napse",
	"catalog": "catalogPaymentType",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "cartão",
		"nome": "cartão de crédito"
	}]
}
Perfil del Cliente
{
	"companyId": "napse",
	"catálogo": "catálogoProfileCode",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "abc1",
		"nome": "clientes abc1"
	}]
}
Tipo de Pagos
{
	"companyId": "napse",
	"catalog": "catalogPaymentType",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "cartão",
		"nome": "cartão de crédito"
	}]
}
Paises
{
	"companyId": "napse",
	"catálogo": "catalogStoreChain",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "cadeia1",
		"nome": "cadeia1"
	}]
}
Tiendas
{
	"companyId": "napse",
	"catalog": "catalogStore",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "ponto",
		"name": "ponto bs como loja"
	}]
}
SubCategoria
{
	"companyId": "napse",
	"catálogo": "catálogoSubCategoria",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "pequenoElec",
		"nome": "Pequenos Eletrodomésticos",
        "categoryCode": "ELECT"
	}]
}

Catalogo de Subcategoria

O atributo categoryCode do catálogo Subcategorias é o código da categoria

SubZonas
{
	"companyId": "napse",
	"catálogo": "catálogoSubZona",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "conurbe",
		"nome": "conurbano bsas"
	}]
}
Proveedores
{
	"companyId": "napse",
	"catálogo": "catálogoFornecedor",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "sony",
		"nome": "corporação sony"
	}]
}
Zonas
{
	"companyId": "napse",
	"catálogo": "zona de catálogo",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "bsnorte",
		"nome": "zona norte bsas"
	}]
}
Catalogo Dinámico
{
	"companyId": "napse",
	"catálogo": "catálogo<Dinâmico>",
	"parâmetros": [],
	"Unid": [{
		"operação": "eu",
		"código": "código",
		"nome nome"
	}]
}

Catalogos Dinamicos

Os catálogos dinâmicos terão o nome formado por catálogo concatenado com o código do atributo dinâmico criado no console. Por exemplo, se o atributo criado no console for color, a propriedade Json deverá ser "catalog":"catalogColor"

Catálogos Associados a Campos Dinâmicos

A definição dos chamados campos dinâmicos permite que sejam associados a um catálogo. Este catálogo também pode ser gerenciado por meio de filas.


Exemplo de carregamento de um catálogo DINÂMICO.

Passos 

Acesse o menu Administração na opção Atributo do Elemento, ali será criado o campo dinâmico que deverá ser definido como o tipo AUTOCOMPLETE BY CATALOG. 

Etapa 1 criação de campo dinâmico




  1. Uma vez criado o novo atributo, desde o RabbitMQ Producer, será possível enviar os dados associados ao novo catálogo




  2. Para acessar o resultado da importação, você deverá visualizar a opção Monitor de Importação no menu SUPORTE.








 4. Em Administração, Importação de Catálogo, você pode ver os dados inseridos.



5. Na promoção você pode selecionar os dados inseridos.






6. Para que o mecanismo avalie a promoção, o atributo criado na etapa deve ser distribuído ( Esta distribuição requer que o mecanismo seja reiniciado ).


7. Distribua o mapa com a promoção para poder avaliá-la.

Exclusão de atributos nos catálogos PROMO

A partir desta versão, Promo permite deletar alguns atributos de determinados catálogos simplesmente enviando o id do referido atributo que é enviado a ele no Json, utilizando o processo de fila RabbitMQ.

Não é necessário enviar id e descrição. Enviando apenas o código, a exclusão pode ser realizada.

Os catálogos que atendem a esse critério são:

catálogos dinâmicos,

 "CatalogAdditionalField00", "CatalogAdditionalField01", "CatalogAdditionalField02", "CatalogAdditionalField03", "CatalogAdditionalField04", "CatalogAdditionalField05", "CatalogAdditionalField06", "CatalogAdditionalField07", "CatalogAdditionalField
d08", "Catálogo CampoAdicional09" , "CampoAdicionalCatalog10"
, "CampoAdicionalCatalogo11",
" CatalogAdditionalField12 ", "CatalogAdditionalField13", "CatalogAdditionalField14", "CatalogAdditionalField15",
"CatalogAdditionalField16", "CatalogAdditionalField17", "CatalogAdditionalField18", "CatalogAdditionalField19",
"CatalogBrand", "CatalogChannel", "CatalogCreditCampaignCode",
"CatalogCurrencyCode", "CatalogCustomerType", "CatalogDepartment", "CatalogEventTransaction",
"CatalogEventTransactionType", "CatalogFamily", "CatalogFormat",
"CatalogPaymentBank", "CatalogPaymentCode", "CatalogPaymentPrefix", "CatalogItem", "CatalogSubCategory",
"CatalogPaymentType", "CatalogPocket", "CatalogProductBarcode", "CatalogProductCode", "CatalogCusto " sea ",
"CatalogProfileCode", "CatalogStoreChain", "CatalogStore", "CatalogSubZone", "CatalogSupplier", "CatalogZone", "CatalogGender", "CatalogIdType", " CatalogContractPriceList", "CatalogCountry", "CatalogCategory"
,

Dos itens acima, estes não suportam repetição de registro:

"CatalogGender", "CatalogIdType", "CatalogContractPriceList", "CatalogCountry",
"CatalogCustomerType", "CatalogItem", "CatalogCustomer"


E estes não são nomes de código, mas ainda atenderão ao requisito porque sua chave primária inclui apenas companyId e code

 "CatalogItem", "CatalogCustomer", "CatalogSubCategory"
"CatalogCategory"

Estes catálogos não foram afetados:

"Card", "CatalogCity" ,"CatalogState", "CatalogInfoFinancial", "CatalogItemStock" (apesar de possuir uma chave primária companyId-code, não possui um campo de nome), "CatalogExtendWarranty" (o mesmo acima), "CatalogRedeemBenefit"

Processo

Para isso, a fila do catálogo deve ser criada no RabbitMq e podem ocorrer as seguintes situações:

  1. Em qualquer catálogo que tenha o formato Código, Nome, um registro pode ser excluído enviando o código e o nome (ambos os campos corresponderão para exclusão).

No console você vê:

A mensagem é enviada:

O Job de importação da entidade deve ser executado e o registro deletado no console.

2. Em qualquer catálogo que tenha o formato Código, Nome, um registro pode ser excluído enviando apenas o código.

Na consola:

Após executar o trabalho de importação de entidade, o primeiro registro de código de canal encontrado terá sido deletado.

2. Em qualquer catálogo que tenha o formato Código, Nome, um registro pode ser excluído enviando apenas o código, mas ter registros duplicados excluirá apenas um.

Na consola:

{
  
   "companyId": "napse",
   "catálogo": "catalogChannel",
   "parâmetros": [],
   "Unid": [
        {
           "código": "canal2",
           "nome": "nome2",
           "operação": "D"
        }
     ]

}


No console será observado que o registro não foi mais encontrado:






Promoção como Produtor

Promo permite o envio de informações via filas do RabbitMQ (função de produtor). Por padrão, essas informações são enviadas a cada 30 minutos (processo em segundo plano) para o servidor de filas.


Configuração do Produtor

Para suportar esta funcionalidade, as seguintes entradas devem ser configuradas no menu Administração , no  submenu Informações de configuração :

dicaTipo de dadosDescrição
RabbitMQ.produtor.enabledboleanoPropriedade que indica se o RabbitMQ está habilitado para postagem de dados (verdadeiro ou falso)
RabbitMQ. promoção. endpointNamealfanuméricoNome da fila RabbitMQ para postagem de promoções, que se encarregará de receber as mensagens para posterior processamento pelo Consumidor
RabbitMQ. limitstatus. endpointNamealfanuméricoNome da fila do RabbitMQ para postagem do status limite, que se encarregará de receber as mensagens para posterior processamento pelo Consumidor

RabbitMQ.enginestatus.endpointName

alfanuméricoNome da fila RabbitMQ para postagem do status do mecanismo e do console.
RabbitMQ. produtor. urialfanuméricoURI de conexão RabbitMQ completo para postagem de dados (amqp://<user>:<password>@<host>:<port>/<vhost>)

vhost: Opcional se definido no servidor RabbitMQ

RabbitMQ. produtor. nome de usuárioalfanuméricoUsuário para acessar o RabbitMQ para postagem de dados
RabbitMQ. produtor. senhaalfanuméricoSenha para acessar o RabbitMQ para postagem de dados
RabbitMQ. produtor. hospedaralfanuméricoEndereço (host) do servidor RabbitMQ para postagem de dados
RabbitMQ. produtor. virtualHostalfanuméricoVirtual Host para RabbitMQ para postagem de dados
RabbitMQ. produtor. portaNuméricoPorta do servidor RabbitMQ para postagem de dados
RabbitMQ.promotionsCache.endpointNamealfanuméricoNome da fila do RabbitMQ que receberá as mensagens referentes ao Cache de Promoções. (Ver Cache de Promoções)

Novamente a configuração via URI é exclusiva da configuração por parâmetros separados. Assim teremos duas configurações:

Configuração via URI:

  • RabbitMQ. produtor. ativado : (verdadeiro ou falso)

  • RabbitMQ. produtor. uri :amqp://<usuário>:<senha>@<host>:<porta>/<vhost( Opcional) >

  • RabbitMQ. promoção. endpointName :<nombreCola para postar promoções>

  • rabbitMQ.limitstatus.endpointName : <nombreQueue para postagem de status de limite>

  • rabbitMQ.cardhistory.endpointName:  < Nome da fila RabbitMQ para postagem de dados CardHistory >

  • rabbitMQ.enginestatus.endpointName : <nome da fila para postar status do mecanismo e console>


Segundo ou configuração por parâmetros:

  • RabbitMQ. produtor. habilitado :(verdadeiro ou falso) 

  • RabbitMQ. produtor. nome de usuário : <nome de usuário>

  • RabbitMQ. produtor. senha: <senha>

  • RabbitMQ. produtor. host : <host>

  • RabbitMQ. produtor. virtualHost :<vhost>

  • RabbitMQ. produtor. porta :<porta>

  • RabbitMQ. promoção. endpointName :<nombreCola para postar promoções>

  • rabbitMQ.limitstatus.endpointName : <nombreQueue para postagem de status de limite>

  • rabbitMQ.cardhistory.endpointName: <nome da fila de postagens do CardHistory>

  • rabbitMQ.enginestatus.endpointName : <nome da fila para postar status do mecanismo e console>


RabbitMQ – Histórico de itens de fidelidade

A fila de mensagens disponível para envio do histórico de elementos de fidelidade:

  • RabbitMQ. cardhistory.endpointName   >> Nome da fila RabbitMQ para postagem de dados do histórico do elemento de fidelidade.


Exemplo do Json que é enviado:

{
 "_id": "603d02251082e8369081744b",
 "quantia": "0",
 "quantiaAnterior": "0",
 "cartão": {
 "código": "9900000000000000",
 "estado": "ATIVADO",
 "tipo": "987"
 },
 "cardAction": "ATIVAÇÃO",
 "companyId": "napse",
 "createdAt": "2021-03-01T15:03:01Z",
 "códigocliente": nulo,
 "data": "2021-03-01T15:03:01Z",
 "motivo": nulo,
 "razãoNome": nulo,
 "storeCode": nulo,
 "terminalCode": null
}


Detalhe dos campos:

Campo

Descrição

eu ia

Id do registro de limite no Mongo.

quantia

Valor atual associado ao elemento de fidelidade

montanteAnterior

Valor anterior do elemento de fidelidade

cartões {}

Dados associados ao elemento relatado

códigoNúmero do elemento de fidelidade
statusStatus do item de fidelidade
tipoTipo de item de fidelidade

cardAction

Ação associada ao movimento do elemento de fidelidade.

ID da empresa

Empresa de onde é enviado o movimento do elemento de fidelização.

criado em

Data de criação do elemento de fidelidade.

Código do Consumidor

Cliente associado ao elemento de fidelização.

data

Data do movimento em que o elemento fidelidade é informado.

razão

Código do motivo associado ao movimento que é informado do elemento fidelização .

razãoNome

Nome do motivo associado ao movimento que é reportado para o elemento fidelidade .

storeCode

Código da loja associada ao movimento que reporta o artigo de fidelização .

TerminalCode

Código do terminal associado ao movimento que é informado do elemento de fidelização .



RabbitMQ – Histórico de cupons


A fila de mensagens disponível para envio do histórico de cupons:

  • RabbitMQ. cupomhistory.endpointName   >> Nome da fila RabbitMQ para postagem de dados do histórico de cupons.


Exemplo do Json que é enviado:

couponHistory
{
	"companyId": "napse",
	"tipo": "cupom",
	"parâmetros": [],
	"Unid": [
		{
			"código de barras": "101pse0016475",
			"códigocliente": "12345678",
			"tipo": "cal",
			"nome": "calculado",
			"descrição": "Descrição",
			"data-hora": "2022-08-23T12:51:24",
			"loja": "SVC",
			"terminal": "ADM",
			"validFrom": "06/08/2022",
			"validTo": "08/07/2032",
			"estado": "CONSUMIDO",
			"ação": "RESGATE",
			"transactionId": "SVC_CPN_20220823125124",
			"couponHistoryId": "6304f77c22854949b038fc19"
		}
	]
}

Detalhe dos campos:

Campo Descrição

ID da empresa

Corda

Código da companhia

tipo

Corda

Tipo de registro para enviar para uma determinada fila

parâmetros

variedade

(opcional) Parâmetros opcionais

Unid

variedade

Payload com dados de cupom

código de barras

Corda

Código de barras gerado para o cupom (dependendo do seu tipo)

Código do Consumidor

Corda

(opcional) Mongo Id do cliente indicado

tipo

Corda

Código do tipo de cupom

inhame

Corda

Nome do tipo de cupom

descrição

Corda

(opcional) Descrição do tipo de cupom

data hora

data

Data de registro (formato padrão "locale" ou "UTC" de acordo com a configuração)

loja

Corda

código da loja

terminal

Corda

código do terminal

válido de

data

Data de início da validade (formato "dd/MM/aaaa")

valido para

data

Fim da data de validade (formato "dd/MM/aaaa")

status

Corda

status do cupom

Ação

Corda

Ação realizada com o cupom

ID da transação

Corda

(opcional) Mongo Id do trx relacionado

cupomHistoryId

Corda

id mongo

RabbitMQ – Estado dos limites

A fila de mensagens disponível para envio do status dos limites é:

  • rabbitMQ.limitstatus.endpointName   >> Nome da fila RabbitMQ para postagem de dados do tipo LimitStatus (ela relatará movimentos de todos os tipos de limites)


Exemplo do Json que é enviado:

{
                "_id": "603a36021082e83690816fe0",
                "promotionId": "603a2fa81082e83690816f81",
                "benefitId": "603a2fce1082e83690816f88",
                "códigopromoção": nulo,
                "promotionName": "limite geral",
                "limitId": "603a2fca1082e83690816f87",
                "escopo": "VAREJISTA",
                "período": "INDEFINIDO",
                "maxValue": 10,0,
                "Identificação do Cliente": "-",
                "storeId": "-",
                "númeroDias": 0,
                "nextReset": "2021-02-27T03:00:00Z",
                "lastReset": "2021-02-27T03:00:00Z",
                "companyId": "napse",
                "limitTypeCode": "benefiedProductCount",
                "descrição": null,
                "lastUpdate": "2021-02-27T12:07:30Z",
                "ativo": verdadeiro,
                "valoratual": 1,0
}


Detalhe dos campos:

Campo

Descrição

eu ia

Id do registro de limite no Mongo.

ID da promoção

Id da promoção no Mongo.

id de benefício

Id de lucro em Mongo.

Código de promoção

Código de promoção.

nome da promoção

Nome da promoção.

id limite

Id do limite em Mongo.

escopo

Tipo de limite a postar (CLIENTE, LOJA, VAREJISTA ).

período

Período a ser contabilizado.

Valor máximo

Valor máximo que o limite definido na promoção pode atingir.

Identificação do Cliente

Cliente associado ao limite.

storeId

Id da loja onde foi feita a movimentação do limite.

númeroDias

Número de dias definido para o período a ser contado.

nextReset

Próxima redefinição de limite.

lastReset

Última redefinição feita ao limite.

limitTypeCode

Código do tipo de limite (benefitAmount, BenefitedProductCount, BenefitApplicationCount).

descrição

descrição inserida no limite.

última atualização

Última atualização do limite (do console para promoções com limite definido).

ativar

Indica se o limite está ativo (verdadeiro) ou consumido (falso).

valor atual

Valor atual do limite.



RabbitMQ –  Status do mecanismo e do console

A fila de mensagens disponível para enviar o status do mecanismo e do console é:

  • rabbitMQ.enginestatus.endpointName   >>  Nome da fila RabbitMQ para postagem do status do mecanismo e do console.


Aclaración

  • O Json da engine só será enviado quando houver mudança de estado.
  • O Json do console será enviado quando ele estiver ativo e operando (a cada execução do processo).


Contexto

O Job por padrão será executado a cada 5 minutos, podendo modificar o tempo de execução em  Administração -> Tarefas agendadas .


Configurando o arquivo promoplus.properties

Para identificar o console, os seguintes parâmetros devem ser configurados: promo.general.id e promo.general.name . Caso esses parâmetros estejam vazios ou não definidos, o  ip será utilizado nos processos em ambos os parâmetros .

IMPORTANTE

Os valores inseridos em promo.general.id e promo.general.name não devem corresponder aos parâmetros id e name configurados no motor Promo.



Exemplo do Json que é enviado do RabbitMQ


{
    "ID do motor": "5",
    "nome do mecanismo": "CONSOLE_5",
    "processDate": "16/03/2021 11:33",
    "startDate": "2021-03-12T03:00:00Z",
    "endDate": "2021-04-20T02:59:00Z",
    "keyMap": "napso",
    "mapaVersão": "2",
    "lojas": "napse",
    "statusMQ": "ONLINE",
    "timestamp": "16/03/2021 11:35"
    "isConsole":"falso"
}


O RabbitMQ Json conterá o seguinte formato:

CampoexemplosTipo de dadosDetalhe
ID do motor"1"alfanuméricoIdentificador do motor ou console.
engineName
"MOTOR1"alfanuméricoNome do mecanismo ou console.
data de processo
"16/03/2021 11:33"alfanuméricoData e hora do ping do mecanismo ou console. Formato: "dd/MM/aaaa HH:mm"
data de início
"2021-03-12T03:00:00Z"
alfanuméricoData efetiva do mapa, dados relatados para o caso do motor, se aplicável. Para console vazio. Formato: "aaaa-MM-dd'T'HH:mm:ssXX"
data final"2021-04-12T03:00:00Z"alfanuméricoData de fim de validade do mapa, dados informados para o caso do motor. Para console vazio. Formato: "aaaa-MM-dd'T'HH:mm:ssXX"
mapa de teclas
"cochilo"
alfanuméricoIdentificador, dados que são informados para o caso do motor. Para console vazio.
mapVersion
"2"alfanuméricoVersão do mapa, para console vazio.
lojas
"cochilo"alfanuméricoArmazena apenas para motor, para console vazio.
status MQ"ON-LINE"alfanuméricoStatus do motor ou console. Valores possíveis: ONLINE , OFFLINE
carimbo de data/hora
"16/03/2021 11:35"
alfanuméricoEnviar data e hora
isConsolefalsoalfanuméricoIdentifica se a fonte é console. Se for falso, indica que é um motor




Mensagens: Cache de Promoções

Quando o processo que avalia e gera o cache Promo Promotions é executado, uma série de mensagens são geradas para a fila Rabbit com o seguinte formato geral. 

Cada início de lote receberá uma primeira mensagem do estilo:

SubZonas
{
   "código da promoção": "0",
   "promotionName": "inicializar promoCache número de lote 1596140494623",
   "SKU": "0",
   "img": nulo
}


Então cada promoção associada ao produto terá o seguinte formato:


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

RabbitMQ- Detalhe da Transação


A fila de mensagens disponível para receber os detalhes das transações conforme elas são registradas no sistema é:


  • rabbitMQ.transaction.endopintName   >> Nome da fila RabbitMQ para postagem de dados de transação.


O Json do console será enviado quando ele estiver ativo e operando (a cada execução do processo).


A configuração do Rabbit será feita conforme indicado em: Configuração


Toda vez que uma transação é feita, ela é detalhada no console:


e a resposta Rabbit tail tem um formato, como no exemplo:

Detalle de Transacciones
{
 "companyId" : "farma",
 "transactionId": "farme_0079_6_20210217112812",
 "transactionType": "VENDA",
 "off-line": falso,
 "originalTransactionId": "",
 "terminalCode": "6",
 "storeCode": "0079",
 "zoneCode": "",
 "subZoneCode": "",
 "storeChainCode": "003",
 "storeTerminal": "farme_0079_6",
 "canalCode": "",
 "mapaVersão" : 958,
 "engineVersion": "7.0.0-FP1",
 "mensagemId": "0001",
 "iData": 20210217,
 "iHour": 11,
 "iTime": 112812,
 "transactionDate": "2021-02-17T14:28:12Z",
 "processDate": "2022-06-22T19:22:13Z",
 "cabeçalhoExtraFields":
                      {
                       "processado" : falso,
                       "headerExtension": { },
                       "formatCode": "",
                       "tenderGroupCode": "",
                       "Código da moeda": "",
                       "externalReferenceId": "farme_0079_6_20210217112812",
                       "_id": "60478417939d591f28df2a73"
                      },
 "total de benefícios": 1.292,
 "subtotal": 4,23,
 "total": 2,9380000000000006,
 "promoções":
               [
                {
                  "promoId": "60398ad1cff31c19a864f0b8",
                  "promoNome": null,
                  "campingName": null,
                  "código promocional": null,
                  "benefícios":
                              [
                               { "benefitNro" : "60398ad1cff31c19a864f0b6",
                                 "benefitType": "CalculatedCouponApplicationBenefit",
                                 "hasLimit": falso,
                                 "quantidade": 0,0,
                                 "valor": 1.292,
                                 "valueWithTaxes": 1.292,
                                 "tipoPromo" : "DV",
                                 "reqdig" : "NÃO",
                                 "rqdevpremio" : "NÃO",
                                 "lpcobro" : "PVP",
                                 "coleção": "NÃO",
                                 "promo_fin_date": "2021/12/31",
                                 "adjus_pvp_pc": "NÃO",
                                 "couponId" : "tqa006"
                               }
                              ],
              "desconto": 1.292
             }
            ],
 "eventos" : [],
 "clientes" :
              [
               { "cartão": "0",
                 "sequência": 1,
                 "valoresAsMap": { },
                 "id": "1000938173",
                 pontos: 0,0,
                 "PONTOS": 0,
                 "creditCampaignCode": nulo,
                 "hasLimitsError": falso,
                 "nome": "arturo guevara",
                 "raffleData": null,
                 "MONTANTE RESTANTE": 1,
                 "tipo": "c",
                 "redeemPointsPriceFactor": 0,0,
                 "tipo de identificador": "c",
                 "lastName": "arturo guevara",
                 "MONTANTE": 2,
                 "segmento" : [],
                 "quantia" : 0,0,
                 "saldo1": 0,0,
                 "profileCode": nulo,
                 "benefícios limitados": "",
                 "email" : "[email protected]",
                 "identificador": "1000938173",
                 "externalId": "1000938173",
                 "valor restante": 0,0,
                 "saldo2": 0,0
                }
               ],
  "pagamentos":
              [
               {
                "plano" : "-",
                "sequência": 1,
                "id" : "efe",
                "valoresAsMap": { },
                "equilíbrio" : falso,
                "prefixo": "-",
                "payCreditCampaign" : "-",
                "tipo": "efe",
                "MONTANTE": 0,
                "banco" : "-",
                "quantia" : 3,98,
                "prefixGroup": [],
                "prefixGroupStr": "-",
                "parcelas" : "-",
                "quantia do item" : 0,0,
                "externalId": "efe",
                "bolso" : "-"
               }
              ],
 "cupom":
            [
             { "tipo": "tqa006",
               "QTD": 1,
               "quantidade": 0,0,
               "sequência": 1,
               "valoresAsMap": { },
               "id": "0016150041992",
               "MONTANTE": 0,
               "quantia" : 1.292,
               "externalId": "0016150041992",
               "participantes":
                               [
                                {
                                 "promoId": "60398ad1cff31c19a864f0b8",
                                 "promoNome": null,
                                 "campingName": null,
                                 "quantidade": "0,0",
                                 "magnitude": nulo,
                                 "xpreço": null
                                }
                               ]
            }
           ],
 "cartões de fidelidade" : [],
 "Unid" :
          [
           { "magnitude" : 0,0,
             "fornecedorFinancial": nulo,
             "fornecedorItemAmount": 0,0,
             "priceResponseFields":
                                    { "código": "0000132311",
                                      "xpreço": "4.2300",
                                      "quantidade": "1,0000",
                                      "preço unitário": "4,2300",
                                      "magnitude": "0,0000",
                                      "seq": "1",
                                      "priceLastUpdate": "-",
                                      "priceListId": nulo,
                                      "descontável": "verdadeiro",
                                      "originalDiscountable": "verdadeiro",
                                      "desconto manual": "falso"
                                     },
  "MAGNITUDE" : 2,
  "priceListId": nulo,
  "level2": "34",
  "unitXPriceOriginal": 4,23,
  "quantidade": 1,0,
  "unitCostPrice": 0,0,
  "sequência": 1,
  "valoresAsMap": { },
  "impostos" : 0,0,
  "código": "0000132311",
  "marca": "5491",
  "applyCatalogRedeem": falso,
  "level4": "623",
  "fornecedorItem": null,
  "preço unitário": 4,23,
  "descontável": "verdadeiro",
  "calCouponVal" : 0,0,
  "priceListLastUpdate": null,
  "baixa rotatividade": falso,
  "level3": "299",
  "descontínuo" : falso,
  "xpreço": 4,23,
  "redeemOption": null,
  "QTD": 1,
  "fornecedorFinancialAmount": 0,0,
  "originalDiscountable": "verdadeiro",
  "PRICE_WITH_TAXES": 3,
  "preçoComTaxas": 4,23,
  "level1": "5",
  "xpriceOriginal": 4,23,
  "fornecedor": "-",
  "XPREÇO": 0,
  "produtochave": falso,
  "externalId": nulo,
  "desconto manual": falso,
  "benefitApplies":
                    [
                     { "tipo": nulo,
                       "hasLimit": falso,
                       "quantidade": 0,0,
                       "benefitNro": "60398ad1cff31c19a864f0b6",
                       "transactionComboParticipants": [],
                       "dados adicionais":
                                         {
                                          "tipoPromo" : "DV",
                                          "reqdig" : "NÃO",
                                          "rqdevpremio" : "NÃO",
                                          "lpcobro" : "PVP",
                                          "coleção": "NÃO",
                                          "promo_fin_date": "2021/12/31",
                                          "adjus_pvp_pc": "NÃO",
                                          "couponId" : "tqa006"
                                         },
 "promotionName": "TPV3-Cupom impresso de resgate não nomeado se calculado cod 0000132311 comprova consumo total (tqa006)",
 "benefitType": "CalculatedCouponApplicationBenefit",
 "transactionBenefitApplies":
                              [
                               { "magnitude" : 0,0,
                                 "valor": 1.292,
                                 "valueWithTaxes": 1.292,
                                 "xpreço": 4,23,
                                 "seq": 1,
                                 "quantidade": 1,0,
                                 pontos: 0,0,
                                 "mínimo aplicado": ""
                                }
                               ],
 "promotionNro": "60398ad1cff31c19a864f0b8",
 "promotionCode": "3377"
 }
],
"participantes":
                [
                 { "promoId" : "60398ad1cff31c19a864f0b8",
                   "promoName": nulo, "campaingName": nulo,
                   "quantidade": "1,0",
                   "magnitude": "0,0",
                   "xpreço": "4,23"
                 }
                ]
 }
],
 "totalItemsSold": 1,0
}


RabbitMQ- Enviando Movimentos de Elementos de Lealdade


Quando uma transação que envolve a criação e/ou movimentação de um elemento de fidelidade é processada no Promo, a notícia deve ser enviada via RabbitMQ para a fila configurada para esse fim.

O arquivo a ser enviado será Json:
Loyalty Item Movements

Movimientos de Elementos de Fidelidad
{
  "_id":"5e3c7196bec9884af49e5401",
  "quantia": 321,0,
  "valor anterior": 1085,0,
  cartão:{
       "código":"880000000007",
       "status":"ATIVADO",
       "tipo":"tarfd"   
  },
  "códigocliente":"6666",
  "cardAction":"AMOUNT_UPDATE",
  "companyId":"napse",
  "createdAt":"2020-02-06T20:05:42Z",
  "data":"2020-02-06T20:05:31Z",
  "motivo":"PQS",
  "storeCode":"Napse",
  "terminalCode":"34"
}

card.type contém o código do tipo de elemento, reason contém o código do motivo

valores possíveis para card.status:

ATIVADO,
DESATIVADO,
CANCELADO.
BLOQUEADO,
EXPIRADO

possíveis valores de cardAction:

ACTIVATION,//Ativação
INACTIVATION,//Inativação
ASSIGN_CUSTOMER,//Associar Cliente
REMOVE_CUSTOMER,//Remover um Cliente
CANCEL,//Cancelamento
QUERY,//Consulta
CHARGE,//Cobrança Inicial
RECHARGE,//Recarregar
AMOUNT_UPDATE,//Modificação Saldo SALE
,//Venda
CONSUME,//Resgate ou consumo de pontos
PARTIAL_REDEMPTION,//Resgate parcial
TOTAL_REDEMPTION,//Resgate total
TRANSFER,//Transferência
ROLLBACK,//Transferência
EXPIRED,//Expiração//ARE_51_2016
EXTENDED_POINTS, // Extensão de validade //18P_62_FID_RE_051
ASSIGN_CONTRACT



Os dados expostos são:  (definição sujeita a validação técnica)

cabeçalho :

_eu ia
Identificador em Mongo do item de fidelidade que está sendo reportado59a99439caec3625e84476f8
quantia
Saldo acumulado do elemento de fidelização que é reportado 254
códigoNúmero de identificação do elemento de fidelização que é comunicado 2220000000001
criadaData de criação do elemento de fidelidade relatado 2017-09-01T17:09:13Z
statusIndica o status do item de fidelidade que está sendo relatado HABILITADO
ID da transaçãoIdentificador no Mongo da transação de criação do item de fidelidade do relatório . BLC_201709011409677
tipoTipo de elemento de fidelidade sendo relatado 2
válido deInício da validade do elemento de fidelidade informado 2017-09-01T03:00:00Z
valido paraFim da validade  do elemento de fidelidade informado2018-09-01T03:00:00Z
Identificação do ClienteID do cliente ao qual pertence  o item de fidelidade relatado8575


Detalhe do movimento:  Este bloco será repetido quantas vezes o elemento tiver movimentos.

quantiaValor que será adicionado ou subtraído com base no que for indicado no campo " cardAction "254
cardActionAção realizada no elemento  (criação, cancelamento, adição, subtração ou substituição de saldo)AMOUNT_UPDATE
dataData em que o movimento foi feito.2017-09-01T17:09:44Z

Importante

Especifique no campo cardAction quais são os possíveis valores que podem ser apresentados dependendo se o valor do elemento de fidelidade é adicionado, subtraído ou pisado.   



Gerenciamento de erros

Caso haja registros de postagens no servidor RabbitMQ com ERRO, será exibido um banner no cabeçalho da Promo, indicando a ocorrência em geral.


  1. Banner com detalhes do incidente. 
    - Para saber o detalhe do incidente, pressione Ver mais detalhes .




  2. Lista de processos de exportação com falha.
    - No campo Descrição: pode ser visualizada a causa do erro
    - Uma vez corrigido o erro que causa falha no envio de mensagens ao servidor RabbitMQ, deve-se pressionar o botão Reprocessar




  3. Se o processamento das falhas relacionadas à postagem de dados via RabbitMQ for bem-sucedido, a grade deverá ficar sem registros para Reprocessamento.







  • Sem rótulos