Integração Notas Fiscais

Descrição

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.


Índice


Passo a passo

Descrição do Processo

  1. 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 envios das notas das 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 marcadas como “Não sincronizadas” e realiza o envio (via JSON) para a API de recebimento de notas, assim que a nota é enviada o JOB marca esta nota sincronizada.

Descrição do Fato Gerador

  1. 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 a fim de verificar inconsistências de cadastro, por exemplo: “Nota enviada com produto que não possui o código de referência da fornecida pelo matriz. “ Cada nota 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 os 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.

Necessidade de Ajuste

  1. 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 Técnicas

  1. 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;

  2. Script para criação do JOB (Como é específico da Leo não vai ao 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?

  1. Realizar conexão remota em cada filial do grupo Léo e ajuste em banco utilizando o script abaixo

    1. --select * from NOTAMCP M --Primeiro SEMPRE consultar o Resultado, comparar a quantidade de registros com a planilha e estando ok, realizar o UPDATE

    2. --update notamcp M set M.NOTASINC = 'N' 

    3. where exists (select 0 from NOTA N

    4. where M.ESTAB = N.ESTAB

    5. AND M.IDNOTA = N.IDNOTA

    6. and n. estab = 0000 --aqui você informa o número do estab o qual será feito o ajuste

    7. 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));


Versão

Versão da Documentação

Autor/Revisor

Versão da Documentação

Autor/Revisor

1.0

Autor: Thallys Vinicius

1.1

Revisor(a): Debora Damasceno