O que é a integração de notas?
De forma bem básica, é o envio de informações específicas das notas geradas pelo nosso sistema para uma API da Léo Gestão. Esta API envia as informações das notas à Léo Gestão, o qual utiliza tais informações no sistema interno de BI deles, o qual utiliza um front-end denominado Slice.
1 – DESCRIÇÃO DO PROCESSO
Atualmente a rede Leo possui um processo de integração entre todas as filiais e a matriz (Leo gestão). Neste processo, atualmente temos a sincronização de produtos da matriz para todas as filais e a sincronização das notas das filiais para a matriz. O ponto a ser tratado nesta tarefa é o segundo item, os envio das notas da filiais para a matriz. O processo de integração das notas, consiste no envio de notas emitidas nas filiais utilizando configurações de documentos específicas, para a API disponibilizada para matriz, a parametrização das configurações de documento é feita em uma tabela personalizada no Viasoft gerente. O responsável pela integração é um JOB executado no servidor XE, que faz a consulta das notas emitidas que estejam marcadas como “Não sincronizadas” e faz o envio (via JSON) para a API de recebimento de notas, assim que a nota é enviada o JOB marca esta nota sincronizada. 2 –
DESCRIÇÃO DO FATO GERADOR
Atualmente a API de recebimento de notas na matriz, possui um processo monitor, que faz o processo de triagem das notas recebidas. Este processo é executado afim de verificar inconsistências de cadastro, por exemplo: “Nota enviada com produto que não possui o código de referencia da fornecido pelo matriz. “ Cada nota que é pega pelo monitor, não é processada na matriz, deste forma não é considerada nos indicadores e também não fica disponível no programa de fidelidade “Leo Amigo”, o que gera problemas também para os clientes da Leo. Para que a nota seja liberada no monitor, o responsável na filial precisa resolver as inconsistências e reprocessar esta nota. Atualmente este processo é manual, onde toda a manhã a matriz, busca a lista de notas paralisadas no monitor, e envia por email para o responsável de cada filial, estes devem verificar na lista quais são as notas de sua empresa e realizadas os ajustes necessários, por exemplo: “Acessar o cadastro do produto e informar o código de referência correto fornecido pela matriz.” O problema em questão é que não se tem uma forma prática de reprocessar as notas que já foram enviadas, desta formar os responsáveis de cada filial precisam acionar o suporte, que via banco de dados, marcam as notas como não sincronizadas, para que o servidor de JOBs faça o reenvio. A matriz (Leo Gestão) disponibilizou uma API (https://apiqa.leomadeiras.com.br/viasoft/notasparadas) onde é possível consultar as notas que estão paralisadas no monitor, para que desta forma possamos fazer o reprocessamentos destas notas de forma automática, deste forma, conforme os responsáveis de cada filial foram realizando os ajustes de cadastros, o servidor de JOBs faz o reenvio das notas para a matriz. 3 –
NECESSIDADE DE AJUSTE
Criar um JOB no servidor XE para realizar o reprocessamento as notas paralisadas no monitor da matriz. O JOB deve consultar a lista de notas retornada pelo API https://apiqa.leomadeiras.com.br/viasoft/notasparadas Nesta lista, temos a chave única, composta pelo Estab e IdNota, e o motivo da paralisação no monitor, ex: [{"ChaveUnica":2303000000149735,"Motivo":"000000000000000000 - Produto(s) vindo com ID zero não correspondendo a nenhum Id de produto SAP."}] Ao buscar esta lista, o JOB deve filtrar somente as notas do Estab que competem a filial em que está sendo executada (Configuração Viasoft Gerente) e marcar esta no nota como “Não sincronizada”. Este processo pode ser feito através de um update na tabela NOTAMCP setando o campo NOTASINC como “N”, desta forma, o JOB atual de integração se encarrega de fazer o reprocessamento destas notas. Uma sugestão para configuração de execução de deste JOB, seria executar no início e ao final do dia, pois a lista de nota no monitor, somente é processada no inicio do dia, ou seja, se forem feitas várias consulta da API durante o dia, sempre será consultada a mesma lista de notas, mesmo que algum já tenha sido reprocessada. Também foi solicita que esta relação de notas com inconsistências, seja enviada por email, para o responsável. Este email, também fica configurada no Viasoft Gerente. Neste envio por email, deve ser criada uma validação para que o sistema somente faça o envio uma vez ao dia, evitando encher a caixa de email com informações duplicadas.
INFORMAÇÕES TECNICAS
No servidor XE foi criado um novo job “20007 - LeoReprocessaVendas” (Script para criação do Job disponível nas informações técnicas). Este job tem por função consultar a API da Leo Gestão, onde temos a lista de notas que estão paralisadas no monitor, se forçar o reprocessamento destas notas, no caso, é realizado um update da tabela NOTAMCP setando o campo NOTASINC como “N”, desta forma, assim que o job que envia as notas for executado, esta nota será enviada novamente. Neste job, também foi implementado o envio da lista de notas que estão com inconsistência (retornada pela API) para o e-mail do responsável uma vez ao dia, ou seja, na sua primeira execução. O e-mail do responsável fica na tabela personalizada (Gerente) de configurações de integração. Durante o desenvolvimento surgiu um novo requisito, que é o controle de notas excluídas, visando resolver a seguinte questão: Usuário lança uma nota, o job faz o envio desta nota para a API, depois o usuário exclui esta nota, desta forma temos uma inconsistência, pois na API, temos uma nota que não existe mais. Para resolver este caso, foi implementado o armazenamento das notas excluídas (via trigger) e o envio desta no Job atual de envio de notas, porém, quando se tratar de uma nota excluída, será enviado um registro com a chave única (Estab e IdNota) e no campo TipoNotaFiscal será enviada a informação “Excluida“, os demais campos será enviado Zerados/Vazios. Desta forma a API da Leo Gestão, recebe esta nota e faz os tratamentos necessário para não sejam mais consideradas nos indicadores; Obs: Este controle, exige que os ajustes de banco, sejam feitos manualmente no banco de cada filial; Todos os scripts e exemplos está nas informações técnicas. Criar a tabela LEONOTAEXCLUIDA; Criada uma trigger na tabela NOTA, para armazenar o Estab, IdNota, Situação e Configuração de documento na tabela LEONOTAEXCLUIDA; Alterar a view "VIASOFTMCP"."LEO_NOTAS", adicionando um UNION com esta tabela LEONOTAEXCLUIDA para retornar um registro; Na VsConsulta SEL_MCP_LEOSYNCNOTA, deve ser ajustado o caso do campo TIPONOTAFISCAL para enviar a informação “Excluida“; Nos jobs de Envio e Reprocessamento da Notas, foi ajustado os eventos que setam as notas como sincronizadas, para que o update seja feito tanto na tabela NOTAMCP como na tabela LEONOTAEXCLUIDA;
Script para criação do JOB ( Como é específico da Leo não vai no atualizador ): MERGE INTO VIASOFTBASE.JOBSERVER USING (SELECT 20007 AS ID FROM DUAL) SOURCE ON (SOURCE.ID = JOBSERVER.ID) WHEN NOT MATCHED THEN INSERT (ID, NOME, DESCRICAO) VALUES (20007, 'Leo Reprocessa Notas', 'Consulta a lista de notas paradas no monitor da Leo Gestão via API, e força o reprocessamento.'); Insert into AGENDADOR (ID,CRONEXPRESSION,ROTINA,INATIVO,LOGINDIVIDUAL,PARAMS) values ('7','0 * 8,18 * * * *','20007','N','N',null); Script para tabela de controle de notas excluídas: Alteração na View LEO_NOTAS Adicionar o seguinte UNION na view "VIASOFTMCP"."LEO_NOTAS": UNION ALL SELECT X.ESTAB, X.IDNOTA, NULL EMISSAO, NULL ESTABMATRIZ, NULL IDTIPOOPER, NULL IDPESS, NULL NUMDOC, NULL ULTALT, NULL NOTASINC, X.IDNOTACONF, NULL HORAGRAV, NULL TAXAPRAZO, X.SITUACAO, NULL ESTABPESSOAS CREATE TABLE VIASOFTMCP.LEONOTAEXCLUIDA ( ESTAB NUMBER(*,0) NOT NULL ENABLE, IDNOTA NUMBER(*,0) NOT NULL ENABLE, IDNOTACONF NUMBER(38,0) DEFAULT 0, SITUACAO NUMBER(*,0) DEFAULT 0, NOTASINC VARCHAR2(1 CHAR) ) TableSpace VS_DADOS; Alter Table VIASOFTMCP.LEONOTAEXCLUIDA Add Constraint LEONOTAEXCLUIDA01 PRIMARY KEY (ESTAB,IDNOTA) USING INDEX TableSpace VS_INDICES; create or replace TRIGGER LEO_NOTAMCP_EXCLUIDA BEFORE DELETE ON NOTAMCP REFERENCING OLD AS O FOR EACH ROW DECLARE V_IDNOTACONF integer; V_SITUACAO integer; BEGIN if (coalesce(:O NOTASINC 'N') = 'S') then FROM LEONOTAEXCLUIDA X LEFT JOIN U_INTEGRALEO UL ON (0=0) WHERE UL.ESTABSINC LIKE '%,'|| X.ESTAB ||',%' AND UL.NOTACONFSINC LIKE '%,'|| X.IDNOTACONF ||',%' AND (COALESCE(X.NOTASINC,'N') = 'N'); Na VsConsulta SEL_MCP_LEOSYNCNOTA O Seguinte campo deve ser alterado, para contemplar a novo opção “Excluida“: CASE WHEN N.IDPESS IS NULL THEN 'Excluida' WHEN N.IDTIPOOPER IN ('VD','RE','OS') THEN 'Venda' ELSE 'Devolução' END AS TIPONOTAFISCAL, --Tipo Nota Fiscal
O que deve ser feito caso seja necessário reenviar alguma nota à Léo Gestão?
Realizar conexão remota em cada filial do grupo Léo e ajuste em banco utilizando o script abaixo
--select * from NOTAMCP M --Primeiro SEMPRE consultar o Resultado, comparar a quantidade de registros com a planilha e estando ok, realizar o UPDATE
--update notamcp M set M.NOTASINC = 'N'
where exists (select 0 from NOTA N
where M.ESTAB = N.ESTAB
AND M.IDNOTA = N.IDNOTA
and n. estab = 0000 --aqui você informa o número do estab o qual será feito o ajuste
and n.numdoc in ( --aqui você informa o número das notas enviadas na planilha, considerando na planilha a coluna "Nota Fiscal" 7729,7729,124629,136086));