Páginas filhas
  • DSERTSS3-3549 - DT TRANSMITE - Refatorar API NFE

01. DADOS GERAIS

Produto:

TOTVS Transmite

Linha de Produto:

Linha Protheus

Segmento:

BackOffice

Módulo:TOTVS Transmite
Função:Não Há
País:Brasil
Ticket:Não Há
Requisito/Story/Issue (informe o requisito relacionado) :DSERTSS3-3549


02. SITUAÇÃO/REQUISITO

Atualmente as API's que atendem os documentos NF-e e CT-e estão apresentando cenários de falha em processos e travando com muita frequência, sendo necessária uma análise criteriosa em ambas, para constatar o que pode ser melhorado para evitar a queda dos serviços e tratar os incidentes indesejados (como a inserção de documentos em bases indevidas). Além da avaliação técnica, há a necessidade de avaliar a infraestrutura disponível para essas API's, redefinindo os parâmetros para aumentar a capacidade desta, se necessário. Ao final, espera-se que ambas API's se mantenham em funcionamento sem quedas e os cenários de falha deixem de ocorrer.

Para esta tarefa, que tem como escopo a API de NF-e, os pontos a guiar o desenvolvimento serão:

  • Manter a injeção de dependência da conexão do Mongo DB como Singleton;
  • Alterar a Injeção de dependência dos repositórios que utilizam a conexão com o Mongo DB, para escopo Transient;
  • Nesta injeção dos repositórios, respeitar a sessão TNF das chamadas, para devido posicionamento na base de dados do cliente;
  • Garantir a abertura e fechamento das sessões com o Mongo DB;
  • Garantir a limpeza de memória de referências à objetos não mais utilizados pelas conexões. 

03. SOLUÇÃO

Foi realizada uma análise inicial do projeto da API de NF-e, denominado transmit-portal-api. Devido ao escopo da solução ser amplo, atendendo todas as funcionalidades (detalhamento, impressão, importação dentre outros), do monitor para NF-e, tanto para notas emitidas quanto recebidas, a partir desta, nesse primeiro momento optou-se por tratar e acompanhar, os pontos de maior recorrência de incidentes, sendo estes o detalhamento, impressão e importação.

Além disso, como os ajustes necessários, nestes pontos, envolvem uma mudança estrutural na forma como consome-se o banco de dados, para que não se cause um colateral de aumento excessivo de consumo deste recurso, nessa fase de ajustes e acompanhamento, as alterações, neste primeiro momento irão abranger apenas o escopo de NF-e recebidas.

Tendo estes pontos de atenção ressaltados, as modificações realizadas foram:

  • Criação de novo modelo de repositório denominado BaseRepository, que foi preparado para ser usado em modalidade de escopo (a modalidade proposta no requisito, Transient, será adotada somente em último caso, uma vez que a mesma demandará ainda mais recursos do banco de dados), realizando a implementação da interface IDisposable, para devida limpeza do objeto após o uso pelo Garbage Collector do .NET;
  • Criação de novos modelos CompanyRepository, SefazServiceRepository, NFeRecebidaRepository e MdeParametrosRepository que herdam do BaseRepository, para utilizar estes nos fluxos que estão no escopo desta tarefa;
  • Nova injeção de dependência, para as classes acima, definindo a modalidade para Scoped, que passará a criar um objeto em cada requisição que entra na API, já realizando o posicionamento do repositório no banco de dados correspondente;
  • Alteração do fluxo de importação, para utilização de escopo e dos novos repositórios. Esta se limitou apenas a entrada de notas, eventos continuam passando pelo fluxo anterior;
  • Alteração do fluxo de detalhamento, para utilização de escopo e dos novos repositórios. Esta se limitou ao fluxo principal, não envolvendo a parte de ciência da operação automática e obtenção do documento completo junto a SEFAZ;
  • Alteração do fluxo de impressão, para utilização de escopo e dos novos repositórios. Além disso, aqui foi utilizada a implementação criada na tarefa DSERTSS3-3462, com relação a leitura do XML, para criação da DANFE.

04. DEMAIS INFORMAÇÕES

Não Há.

05. ASSUNTOS RELACIONADOS

Não Há.