No momento do envio de uma NF-e para a Sefaz (Secretaria de Estado da Fazenda), é comum que as notas recebam o retorno em apenas alguns segundos. No entanto, quando esse retorno não é importado para o Shop dentro do esperado, a nota fica com o status 'Aguardando Retorno da Sefaz'. Isso pode ocorrer devido a uma instabilidade na Sefaz ou a problemas com o certificado. Para auxiliar na resolução do problema, entenda melhor como identificar sua origem.

Um primeiro passo simples, mas que, em casos de leve instabilidade pode resolver, é atualizar o status da nota. Para isso, acesse o movimento de estoque e clique em Atualizar Status.


Se a nota permanecer aguardando retorno, veja alguns procedimentos que podem ser realizados.

Tipos de Integração com a Sefaz

O Shop não se comunica diretamente com a Sefaz, sua função é gerar o XML (arquivo é padronizado pela Receita Federal, utilizado para registrar e transmitir dados fiscais de forma digital). E o responsável por enviar o XML e receber o retorno da Sefaz com a autorização ou Rejeição, é o NFeasy.

O NFeasy pode ser utilizado como aplicativo ou integrar por DLL. Identificar o tipo de integração usada é fundamental para saber como agir para enviar a nota. E podemos constatar diretamente no Movimento de Estoque.
Acesse a opção Configurar NF-e e na aba Geral, verifique a configuração.

NFeasy por DLL

A integração pelo NFeasy DLL poderá ser utilizada apenas por empresas que possuem Certificado Digital A1 e que não fazem emissão de MDF-e (Manifesto Eletrônico de Documentos Fiscais) .

Na aba Opções de Empresa, verifique:

  1. Se há um Certificado Digital vinculado. Caso não haja, você pode importar e armazenar o arquivo na base de dados (necessário o arquivo do certificado com extensão .pfx e a senha) ou poderá selecionar um certificado que já esteja instalado no Windows. Veja  como instalar seu certificado.
     
  2. Se o certificado está válido ou expirado. Caso esteja expirado e houver um novo, basta instalar e vincular conforme o tópico 1.

  3. Realize um teste de comunicação com o certificado.

Na aba Integração NF-easy DLL, realize os testes de conexão com a Internet, SVC, Sefaz e Alterdata.


NFeasy Integrador

A integração pelo NFeasy Integrador não tem restrições de modelos de nota fiscal ou de certificado. Ele é um sistema a parte do Shop e precisa ser instalado e configurado na implantação. Seu aplicativo fica minimizado na bandeja do Windows quando está em execução.

  1. O NFeasy Integrador poderá estar instalado apenas em 1 computador. Se a empresa possuir diversos terminais, é necessário identificar qual a máquina que possui o aplicativo instalado. Esta máquina precisa estar compartilhada em rede para que outros computadores possam emitir NF-e.

  2. Se o aplicativo do NFeasy não estiver na bandeja do Windows, inicie-o dando um duplo clique em seu ícone na área de trabalho.

  3. Ao localizá-lo na bandeja do Windows, clique com o botão direito do mouse e selcione "forçar envio".

    Retorne ao Movimento de Estoque, selecione a NF-e que está aguardando retorno e clique em Atualizar status NF-e.

  4. Se seu certificado for físico (A3 ou token), retire-o da máquina, aguarde 30 seg. e insira novamente. Caso utilize algum leitora (adaptador para o cartão do certificado), verifique se não está com mal funcionamento.

  5. Clique com o botão direito do mouse sobre o NFeasy e selcione "Abrir tela principal", aqui poderá ser constatado se há alguma mensagem de alerta e se o agendamento está iniciado. Caso o agendamento esteja paralisado, clique em Iniciar Agendamento.

  6. Na opção Empresas, poderá ser validada a comunicação da empresa com a Alterdata.
  7. Em Empresas → Editar,  poderemos ver se o certificado digital vinculado está correto e válido. Se precisar, poderá selecionar um certificado que já esteja instalado no Windows. Veja  como instalar seu certificado.


Autor do artigo: Daniela.imp.shop

Descreva o passo a passo para o cliente seguindo os padrões de escrita de artigos, como:

  1. Escreva na voz ativa,
  2. Numere o passo a passo,
  3. Evite utilização de imagens,
  4. Escreva no tempo presente, na primeira pessoa e no imperativo (em passo a passos).


Essas informações não se tornam parte do conteúdo em sua nova página, elas ficam ocultas e só aparecem para usuário logado e se o artigo/dica estiver em modo de edição!

(Não remova esse quadro)
Essas informações não se tonam parte do conteúdo em sua nova página, elas ficam ocultas e só aprecem para usuário logado e se o artigo/dica estiver em modo de edição! 
<div id="text-end"></div>




<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-193974933-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag2(){dataLayer.push(arguments);}
  gtag2('js', new Date());

  gtag2('config', 'UA-193974933-1');


  function gtagevents (action,category) {
     console.log(category + ':' + action);
     gtag2('event',action,{event_category:category,event_label: document.title});
  };

</script>

<script src="https://player.vimeo.com/api/player.js"></script>
<script>
    (function(){
        // RASTREIO DE USO DO VÍDEO
        function gtagvideo(action){
           gtagevents(action,'Video')
        }

        var iframe = document.querySelector('iframe');
        var player = new Vimeo.Player(iframe);

        var seeking = false;
        var priorTime = 0;
        var currentTime = 0;
        var reportouFinalDoConteudo = false;

        // se pausar o play é acionado também.
        player.on('play', function(data) {
            if(data.seconds == 0){ 
              gtagvideo('video-iniciado');
            }
            priorTime = data.seconds;             
        });

        player.on('ended', function() {
            gtagvideo('video-finalizado');
        });

        //seeking e timeupdate são disparados juntos, logo o tempo dos 2 é atualizado também. Preciso garantir que a variavel starttime seja atualizada ordenadamente (sempre antes ou após o seeking).
        // pra isso preciso setar uma variavel no timeupdate e ler no seeking para garantir a ordem. Se ela estiver false será alterada na próxima iteração.
        player.on('seeking', function(data) {               
            seeking = true;
        });


        player.on('pause',function(data){
            gtagvideo('video-pausado');    
        });

        player.on('timeupdate', function(data) {
            if(seeking){
                if(currentTime < priorTime){
                    gtagvideo('video-voltando');    
                }
                if(currentTime > priorTime){
                    gtagvideo('video-avancando')
                }
                seeking = false;
            }
            priorTime = currentTime;
            currentTime = data.seconds;


           var finalDoConteudo = (data.duration - data.seconds) < 5;
           if(finalDoConteudo && !reportouFinalDoConteudo){
            gtagvideo('conteudo-finalizado')
            reportouFinalDoConteudo = true;
           }
        });

        player.on('fullscreenchange', function() {
            gtagvideo('video-fullscreen');
        });
    })();
</script>

<script>
 // RASTREIO DO USO DE AUDIO
 (function(){
    function gtagaudio(action){
           gtagevents(action,'Audio')
    }            

    var audio = document.querySelector("audio");

    var seeking = false;
    var priorTime = 0;
    var currentTime = 0;

    audio.addEventListener('play',function(){
        if(audio.currentTime == 0){
          gtagaudio('audio-iniciado');
        }
        priorTime = audio.currentTime;        
    });

    audio.addEventListener('ended',function(){
        gtagaudio('audio-finalizado');
    });

    audio.addEventListener('pause',function(){
        gtagaudio('audio-pausado');
    });

    audio.addEventListener('seeking', function(data) {               
        seeking = true;
    });

    audio.addEventListener('timeupdate', function(data) {               
        if(seeking){
                if(currentTime < priorTime){
                    gtagaudio('audio-voltando');    
                }
                if(currentTime > priorTime){
                    gtagaudio('audio-avancando')
                }
                seeking = false;
            }
            priorTime = currentTime;
            currentTime = audio.currentTime;
    });    
 })();
 </script>

<script>
    (function(){
        var terminou = false;
        //RASTREIO DE LEITURA ATÉ O FINAL DA PÁGINA
        document.addEventListener('scroll',() => {
            if(document.getElementById('text-end').getBoundingClientRect().top < window.innerHeight){
                if(!terminou){
                    terminou = true;
                    gtagevents('artigo-lido','Pagina')
                }
            }else{
                terminou = false;
            }
                
        });
    })();
 </script>