FAQ – WebService da GINFES para NFS-e

Depois que publiquei o artigo “30 dias com o WebService” no final de 2012, recebi muitos e-mails sobre dúvidas e dificuldades de configuração e acesso ao WebService da GINFES pelo Delphi. Procurei respondê-los na medida do possível, mas observei a oportunidade de elaborar um artigo complementar sobre este assunto com as dúvidas mais comuns.

1) Por onde devo começar o desenvolvimento da aplicação que irá consumir o WebService?

A primeira instrução que recebi foi ler o Manual de Integração da GINFES, disponível no próprio site do WebService. Lá tem a maioria da regra de negócio necessária, desde a tecnologia utilizada na comunicação do WebService até os tipos de dados e tamanhos dos campos que devem compor o XML. É um passo inicial para começar a arquitetar a funcionalidade da aplicação. Mesmo lendo o material, devo confessar que ainda fiquei com algumas dúvidas, mas que foram sanadas posteriormente. Aos poucos, comecei a montar o esqueleto do aplicativo e fazer alguns testes para concatenar os valores com as tags do arquivo XML, mais ou menos nesse sentido:

Em seguida, procurei manter contato com o setor financeiro da empresa, principalmente para compreender os valores de impostos e alíquotas que eram exigidos na composição XML. Além disso, fui concebido de criar uma tabela com os códigos dos municípios fornecidos pelo IBGE, já que no XML este código deve ser informado ao invés do nome da cidade.

2) Quando tento utilizar o WSDL Importer, recebo a mensagem “Empty Document”.

Essa mensagem significa que o conteúdo está vazio, ou seja, o retorno foi nulo. Faça um teste: tente abrir o link do WSDL no navegador. Se você receber a mensagem “A página não foi encontrada” ou “A página não pode ser exibida”, provavelmente há alguma restrição na sua conexão com a Internet que está bloqueando o acesso ao WSDL.

Isso normalmente acontece em ambientes corporativos, onde há uma política de controle de acesso a Internet. Eu cheguei à essa conclusão depois que levei o Certificado Digital pra casa e funcionou normalmente no meu computador particular. No outro dia, pedi para o setor de Infraestrutura me conceder acesso total à Internet temporariamente. Na primeira tentativa, a importação funcionou.

3) Já verifiquei minha conexão com a Internet, mas ainda recebo a mensagem “Empty Document”.

Verifique a instalação da hierarquia das cadeias de certificados disponíveis no site do Certificado Digital (como Serasa ou Certisign). Aqui vale frisar uma observação importante: procure instalar essas cadeias de certificados no repositório de “Autoridades de Certificação Raiz Confiáveis” durante a importação. Outra solução é checar se o Certificado Digital está válido e ativo. No site da Serasa, por exemplo, há um link para testar a assinatura e validade do Certificado Digital.

Além das sugestões acima, pode ser necessário verificar as configurações de segurança e avançadas do Internet Explorer, em especial os ajustes relacionados à verificação e revogação de certificados.

4) Ao enviar o arquivo XML, recebo a mensagem “E160 – Arquivo fora da estrutura”.

Passei alguns dias trabalhando pra montar a estrutura correta do XML. Eis que aqui lhe deixo algumas dicas:

  • Não deixe nenhuma tag do XML em branco (nulo);
  • Confira se o tamanho dos valores não está passando o limite informado no Manual de Integração. Por exemplo, suponha que no Manual é informado que a Razão Social deve ter no máximo 60 caracteres. Se você concatenar um valor com 61 caracteres, o XML será rejeitado pelo WebService;
  • As tags do XML são Case Insensitive, ou seja, diferenciam maiúsculas de minúsculas. Eu me lembro que o WebService rejeitava meu arquivo porque eu estava concatenando “<UF>” ao invés de “<Uf>”;
  • Todas as tags devem ser fechadas com uma barra, assim como acontece na linguagem HTML.
  • Os valores monetários devem ser informados com pontos (.) ao invés de vírgulas (,). Por exemplo: 1498.15;
  • Retire os espaços em branco à esquerda e à direita dos valores antes de concatená-los no arquivo XML. No Delphi isso pode ser feito com o comando Trim.
  • Utilize o site W3C Markup Validation Service para validar a estrutura do arquivo XML e identificar possíveis falhas nas tags

5) Como devo proceder para chamar a função de envio do RPS?

Considerando que você adicionou um componente do tipo THTTPRIO no seu formulário, a função deve ser chamada da seguinte forma:

Observe que além do arquivo XML, você também precisa atribuir um cabeçalho pré-definido pela GINFES. Na aplicação que desenvolvi, utilizei o cabeçalho abaixo:

No entanto, eventualmente esse cabeçalho pode ser diferente.
A “Resposta” que citei no código-fonte acima pode ser um componente do tipo TMemo.

6) Como posso obter o número da NFS-e gerada?

Infelizmente a resposta do envio do XML não traz o número da NFS-e. Isso ocorre porque quando o arquivo é enviado ao WebService, ele entra em uma fila de processamento para ser “transformado” em NFS-e. Portanto, é necessário fazer o envio e logo em seguida realizar uma consulta do lote para obter o número da NFS-e. Inclusive, na época, entramos em contato com a GINFES e sugerimos a possibilidade de enviar e processar o arquivo XML e obter o número em uma mesma solicitação ao WebService, mas nosso pedido foi desconsiderado.

O suporte da GINFES informou que o intervalo entre o envio e processamento do arquivo XML é de aproximadamente 20 segundos. Esse tempo pode variar de acordo com o número de arquivos que estão na fila de processamento. Algumas vezes, principalmente em horários de pico, esse intervalo pode demorar de 5 a 10 minutos.

7) Ao consultar o lote, recebo a mensagem “E4 – Esse RPS não foi enviado para a nossa base de dados”.

Este erro ocorre justamente pelo motivo do tópico anterior. Se você tentar realizar a consulta de um lote que ainda não foi processado pelo WebService, receberá essa mensagem. Mas atenção: isso não significa que o XML não foi enviado, ok? Ele foi enviado sim, mas permanece em uma fila de processamento para gerar a NFS-e.

 

Pessoal, essas são as dúvidas que normalmente recebo por e-mail sobre este assunto. Espero que os tópicos acima possam ajudar desenvolvedores que estejam iniciando o desenvolvimento de uma aplicação para essa finalidade. Mesmo assim, fui notificado de que a comunidade do AcBR já está desenvolvendo um componente exclusivo para envios de NFS-e. Quando este componente estiver disponível, com certeza vai facilitar bastante.

Em caso de mais dúvidas, erros ou dificuldades, deixe um comentário abaixo ou entre em contato por e-mail, ok?
Abraço, pessoal! Até mais!


André Celestino