Páginas filhas
  • DSERTSS3-3553 - DT TRANSMITE - Refatorar API de CTe/CTe OS

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-3553


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 CT-e e CT-e OS, 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 Scoped;
  • 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

Após os ajustes realizados na tarefa DSERTSS3-3549, e do acompanhamento realizado após a aplicação das alterações em ambiente produtivo, é possível afirmar que os pontos modificados surtiram o efeito desejado. Partindo desta premissa o escopo desta tarefa é propagar as melhorias para a API de CT-e e CT-e OS, só que desta vez, de uma maneira ampla, para todas as funcionalidades em todas as modalidades (Emitidos e Recebidos).

A partir disto, as modificações realizadas foram:

  • Criação de novos modelos CTeRepository, CTeRecebidoRepository, CTeOsRepository e CTeOsRecebidoRepository 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 fluxos de listagem e contagem, para utilização de escopo e dos novos repositórios;
  • Alteração do fluxo de importação, para utilização de escopo e dos novos repositórios;
  • Alteração do fluxo de detalhamento, para utilização de escopo e dos novos repositórios;
  • Alteração do fluxo de impressão, para utilização de escopo e dos novos repositórios;
  • Alteração do fluxo de exportação individual, para utilização de escopo e dos novos repositórios;
  • Alteração do fluxo de desacordo, para utilização de escopo e dos novos repositórios;
  • Alteração de fluxos de exportação e envio de e-mail, para utilização de escopo e dos novos repositórios;

Além disso, em todos os pontos cabíveis, foi utilizada a implementação criada na tarefa DSERTSS3-3462, com relação a leitura do XML, visando melhora de performance.

Para os processos de importação e desacordo, foram incluídos 5 novos templates XSLT, para a substituição do processo de serialização de XML que usava o XmlDocument

Mapeamento Evento
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
	<xsl:template match="/">
		<xsl:text>{</xsl:text>
		<xsl:text>"StatusEvento":"</xsl:text>
		<xsl:value-of select="//infEvento/cStat"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"COrgao":"</xsl:text>
		<xsl:value-of select="//infEvento/cOrgao"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"XMotivo":"</xsl:text>
		<xsl:value-of select="//infEvento/xMotivo"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"XEvento":"</xsl:text>
		<xsl:value-of select="//infEvento/xEvento"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"NSeqEvento":"</xsl:text>
		<xsl:value-of select="//infEvento/nSeqEvento"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"NProt":"</xsl:text>
		<xsl:value-of select="//nProt"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"DataEvento":"</xsl:text>
		<xsl:value-of select="//infEvento/dhRegEvento"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"XJust":"</xsl:text>
		<xsl:value-of select="//infEvento/xJust"/>
		<xsl:text>"}</xsl:text>
	</xsl:template>
</xsl:stylesheet>
Mapeamento Documento OS Importação
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
	<xsl:template match="/">
		<xsl:text>{</xsl:text>
		<xsl:text>"CodigoFilial":"</xsl:text>
		<xsl:value-of select="//CodigoFilial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Filial":"</xsl:text>
		<xsl:value-of select="//Filial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Ambiente":"</xsl:text>
		<xsl:value-of select="//ide/tpAmb"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Modalidade":"</xsl:text>
		<xsl:value-of select="//ide/tpEmis"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"TipoDocumento":"</xsl:text>
		<xsl:value-of select="//ide/tpCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Emissao":"</xsl:text>
		<xsl:value-of select="//ide/dhEmi"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Serie":</xsl:text>
		<xsl:value-of select="//ide/serie"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"Numero":</xsl:text>
		<xsl:value-of select="//ide/nCT"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"ChaveCTeOs":"</xsl:text>
		<xsl:value-of select="//infProt/chCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Status":"6",</xsl:text>
		<xsl:text>"CteOsId":"</xsl:text>
		<xsl:value-of select="concat(//ide/serie, //ide/nCT)"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Mensagem":"</xsl:text>
		<xsl:value-of select="//infProt/xMotivo"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Protocolo":"</xsl:text>
		<xsl:value-of select="//infProt/nProt"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Email":"</xsl:text>
		<xsl:value-of select="//dest/email"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"CnpjCpfDest":"</xsl:text>
		<xsl:value-of select="//dest/CNPJ | //dest/CPF"/>
		<xsl:text>"}</xsl:text>
	</xsl:template>
</xsl:stylesheet>
Mapeamento Documento OS Recebido Importação
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
	<xsl:template match="/">
		<xsl:text>{</xsl:text>
		<xsl:text>"CodigoFilial":"</xsl:text>
		<xsl:value-of select="//CodigoFilial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Filial":"</xsl:text>
		<xsl:value-of select="//Filial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Ambiente":"</xsl:text>
		<xsl:value-of select="//ide/tpAmb"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Modalidade":"</xsl:text>
		<xsl:value-of select="//ide/tpEmis"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"TipoDocumento":"</xsl:text>
		<xsl:value-of select="//ide/tpCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Emissao":"</xsl:text>
		<xsl:value-of select="//ide/dhEmi"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Serie":</xsl:text>
		<xsl:value-of select="//ide/serie"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"Numero":</xsl:text>
		<xsl:value-of select="//ide/nCT"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"ChaveCTeOs":"</xsl:text>
		<xsl:value-of select="//infProt/chCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Status":"6",</xsl:text>
		<xsl:text>"CteOsId":"</xsl:text>
		<xsl:value-of select="concat(//ide/serie, //ide/nCT)"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Mensagem":"</xsl:text>
		<xsl:value-of select="//infProt/xMotivo"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Protocolo":"</xsl:text>
		<xsl:value-of select="//infProt/nProt"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Email":"</xsl:text>
		<xsl:value-of select="//dest/email"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"CnpjCpfDest":"</xsl:text>
		<xsl:value-of select="//dest/CNPJ | //dest/CPF"/>
		<xsl:text>"}</xsl:text>
	</xsl:template>
</xsl:stylesheet>
Mapeamento Documento Importação
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
	<xsl:template match="/">
		<xsl:text>{</xsl:text>
		<xsl:text>"CodigoFilial":"</xsl:text>
		<xsl:value-of select="//CodigoFilial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Filial":"</xsl:text>
		<xsl:value-of select="//Filial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Ambiente":"</xsl:text>
		<xsl:value-of select="//ide/tpAmb"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Modalidade":"</xsl:text>
		<xsl:value-of select="//ide/tpEmis"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"TipoDocumento":"</xsl:text>
		<xsl:value-of select="//ide/tpCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Emissao":"</xsl:text>
		<xsl:value-of select="//ide/dhEmi"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Serie":</xsl:text>
		<xsl:value-of select="//ide/serie"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"Numero":</xsl:text>
		<xsl:value-of select="//ide/nCT"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"ChaveCTe":"</xsl:text>
		<xsl:value-of select="//infProt/chCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Status":"6",</xsl:text>
		<xsl:text>"CteId":"</xsl:text>
		<xsl:value-of select="concat(//ide/serie, //ide/nCT)"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Mensagem":"</xsl:text>
		<xsl:value-of select="//infProt/xMotivo"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Protocolo":"</xsl:text>
		<xsl:value-of select="//infProt/nProt"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Email":"</xsl:text>
		<xsl:value-of select="//dest/email"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"CnpjCpfDest":"</xsl:text>
		<xsl:value-of select="//dest/CNPJ | //dest/CPF"/>
		<xsl:text>"}</xsl:text>
	</xsl:template>
</xsl:stylesheet>
Mapeamento Documento Recebido Importação
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	<xsl:output omit-xml-declaration="yes" indent="yes" encoding="UTF-8"/>
	<xsl:template match="/">
		<xsl:text>{</xsl:text>
		<xsl:text>"CodigoFilial":"</xsl:text>
		<xsl:value-of select="//CodigoFilial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Filial":"</xsl:text>
		<xsl:value-of select="//Filial"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Ambiente":"</xsl:text>
		<xsl:value-of select="//ide/tpAmb"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Modalidade":"</xsl:text>
		<xsl:value-of select="//ide/tpEmis"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"TipoDocumento":"</xsl:text>
		<xsl:value-of select="//ide/tpCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Emissao":"</xsl:text>
		<xsl:value-of select="//ide/dhEmi"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Serie":</xsl:text>
		<xsl:value-of select="//ide/serie"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"Numero":</xsl:text>
		<xsl:value-of select="//ide/nCT"/>
		<xsl:text>,</xsl:text>
		<xsl:text>"ChaveCTe":"</xsl:text>
		<xsl:value-of select="//infProt/chCTe"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Status":"6",</xsl:text>
		<xsl:text>"CteId":"</xsl:text>
		<xsl:value-of select="concat(//ide/serie, //ide/nCT)"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Mensagem":"</xsl:text>
		<xsl:value-of select="//infProt/xMotivo"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Protocolo":"</xsl:text>
		<xsl:value-of select="//infProt/nProt"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Email":"</xsl:text>
		<xsl:value-of select="//dest/email"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"CnpjCpfDest":"</xsl:text>
		<xsl:value-of select="//dest/CNPJ | //dest/CPF"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"CnpjCpfEmi":"</xsl:text>
		<xsl:value-of select="//emit/CNPJ | //emit/CPF"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Emissor":"</xsl:text>
		<xsl:value-of select="//emit/xNome"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"DhRecbto":"</xsl:text>
		<xsl:value-of select="//infProt/dhRecbto"/>
		<xsl:text>",</xsl:text>
		<xsl:text>"Destinatario":"</xsl:text>
		<xsl:value-of select="//dest/xNome"/>
		<xsl:text>"}</xsl:text>
	</xsl:template>
</xsl:stylesheet>


04. DEMAIS INFORMAÇÕES

Não Há.

05. ASSUNTOS RELACIONADOS

Não Há.