Para as aplicações que utilizam a conexão direta com o Manager SaaS, existe a necessidade de se implementar o fluxo de contingência.
O objetivo da contingência é principalmente para casos onde o estabelecimento se encontra sem internet, mas mesmo em aplicações web, essa rotina deve ser implementada. Isso porque os servidores da SEFAZ podem sofrer oscilações e, nesses casos, a aplicação pode continuar emitindo as notas, usando o modo Contingência Offline.
Realizando o envio em Contingência Offline
O fluxograma acima representa o passos que devem ser executados para que se possa enviar uma nota em modo de Contingência Offline.
No início da operação, deve-se disparar uma requisição de verificação do Status do Serviço. Ela serve para testar a conexão com a SEFAZ. Tendo recebido o retorno "Serviço em Operação", basta então gerar o envio em modo normal, utilizando a rota de envio.
A contingência deve ser enviada, quando o retorno vier diferente de "Serviço em Operação", podendo ser um outro retorno da SEFAZ, ou um timeout.
Quando isso ocorrer, deve-se disparar uma requisição de configuração para o Manager SaaS, utilizando a rota MODO, informando o parâmetro modo=10. Isso faz com que o modo de envio do Manager SaaS mude de Normal para Contingência Offline. A seguir, pegue o TX2/XML de envio, incrementando a numeração e adicionando as tags de contingência (tpEmis=9, dhCont e xJust) e mande isso para a rota de envio.
Após o envio, solicite novamente a rota MODO, mas agora passando modo=1, isso fara com que o modo de envio volte de Contingência Offline, para Normal. A seguir sua aplicação deve disparar uma requisição na rota RESOLVE para obter o status final da nota.
Observações e Recomendações
A primeira observação é a de que pode acontecer de o Status do Serviço retornar Serviço em Operação, mas o envio da nota receber timeout. Nesse caso, também deve-se acionar a Contingência Offline, usando o mesmo cNF, incrementando o nNF (em caso onde o controle da numeração não é feito pelo SaaS).
A segunda observação é a de que em casos de oscilação da SEFAZ, a solução da nota pendente, também pode apresentar timeout. Nesse caso, deve-se incrementar uma rotina para que fique consultando a situação dessa nota, usando rota de CONSULTA, até que venha uma situação final (rejeitada ou autorizada). A verificação deve ser feita pelo menos a cada 30 segundos
E a recomendação a ser realizada, é no momento antes de enviar o modo=1. Não existe a necessidade de se realizar essa troca de configuração a cada envio. Nesse caso, pode se implementar um timeout para verificar o Status do Serviço a cada 5 minutos, por exemplo e só trocar o modo de envio, quando vier uma resposta diferente da anterior.
Comentários
1 comentário
Perfeita a orientação!
Por favor, entre para comentar.