Como fazer o download do XML da NF-e via Webservice
Introdução
Entre as principais dificuldades decorrentes da implantação da NF-e pode-se citar a obtenção do arquivo XML como uma das tarefas que mais atrapalham o processo de recebimento. O arquivamento dos arquivos XML válidos e com o protocolo de autorização é um requerimento legal e observamos diversas dificuldades entre clientes e fornecedores: falta do envio do arquivo, envio do arquivo XML sem o respectivo protocolo de autorização, envio de arquivos corrompidos, arquivos com erro na assinatura digital, entre outros.
Diante deste cenário sabemos que a SEFAZ centraliza as informações de todos os emissores e destinatários de NF-e então por quê não disponibilizar o download de todos os XMLs emitidos contra um CNPJ? Por diversos motivos, entre eles a infraestrutura necessária, pois o tráfego de arquivos iria consumir mais recursos tecnológicos.
Este desejo compartilhado por diversas empresas recentemente foi atendido por meio da Nota Técnica 2012/002 – Manifestação do Destinatário e que permite o download da NF-e via webservices diretamente da SEFAZ. Esta Nota Técnica pode ser visualizada no seguinte endereço: https://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=bUBJ/PmtKQo=.
Contexto
A SEFAZ disponibilizou o webservice que permite do download do XML da NF-e por parte do destinatário, porém exigiu que haja uma manifestação do destinatário como premissa para o download. Dessa forma é necessário enviar um evento de “Ciência da Operação” para ter acesso ao arquivo.
Após o download o arquivo podemos enviar novos eventos como a “Confirmação da Operação”, o “Desconhecimento da Operação” ou “Operação não realizada”. Esta última quando o recebimento da mercadoria foi recusado e neste caso é necessário enviar uma justificativa.
Solução Standard SAP
Ainda não encontrei uma solução standard pelo produto SAP GRC 1.0. Procurei por apresentações e no roadmap e só encontrei a nota 1721007 que dispõe sobre o evento de confirmação.
Primeiras Impressões
A Nota Técnica adverte que o uso indevido seria bloqueado devido ao alto consumo do WebService com o código ““656–Rejeição: Consumo Indevido”.”. Dessa forma resolvi fazer um pequeno teste.
Este teste será mostrado a seguir.
Como baixar o XML via WebService
O teste foi feito em ambiente de homologação utilizando um report ABAP e o PI para transmissão. Nenhuma das interfaces do produto SAP foi utilizada para simplificar o teste, dispensando o uso de Integration Processes e criação de mapeamentos adicionais.
1- Criando uma interface do tipo SOAP-Envelope no PI
O primeiro passo é criar uma interface do tipo SOAP-Envelope. O PI implementa o protocolo SOAP por standard com todas as suas especificações, porém não permite mudar o header, então vamos importar a interface para criar tipos de mensagens genéricas que iremos popular diretamente no ABAP.
Baixe o arquivo disponível em https://www.w3.org/2003/05/soap-envelope/ e salve como envelope.xsd
Importe este arquivo no Integration Repository em um namespace de sua preferência como External Definition.
Em seguida crie duas Message Interfaces com o nome MI_RecepcaoEvento e outra com o nome MI_DownloadNF.
Atribua o tipo Envelope que foi importado tanto para a mensagem Inbound quanto para a mensagem Outbound.
Salve e ative a change list.
2-Configurar os canais de comunicação
Primeiro crie os canais de comunicação para a SEFAZ Ambiente Nacional, caso ainda não possua.
Estes são iguais aos da NF-e com autenticação por certificado digital e com as URLS:
https://hom.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx
https://hom.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx
Em seguida crie 2 Receiver Determinations entregando as mensagens do tipo MI_DownloadNF e MI_RecepcaoEvento para o Parceiro criado
O próximo passo é criar 2 Interface Determinations para dizer que a SEFAZ irá receber a mesma interface. Você pode criar mapeamentos, mas este não é nosso objetivo neste teste, uma vez que iremos mandar todos os dados diretamente em ABAP.
A última etapa é a criação dos Receiver Agreements que fazem a ligação entre a interface de destino e os webservices propriamente ditos.
3 – Criar os ABAP Proxies para chamada das interfaces
Utilize um usuário desenvolvedor na instância ABAP e chame a transação SPROXY.
Expanda o namespace escolhido na guia Integration Repository até abrir as Interfaces de Serviço. Clique com o botão direito sobre cada uma e vá em “Criar Proxy”. Salve e ative os proxies.
4-Registrando um Evento de Ciência da Operação
Crie um report ABAP com o nome de sua preferência.
Usaremos um conjunto simples de variáveis, descritas a seguir:
Em seguida definiremos um conjunto de subprogramas, o primeiro define o cabeçalho da mensagem SOAP, note que o valor para o parâmetro cUF está “hardcode” e deve ser substituído pelo código da UF Correspondente e em seguida a string deve ser convertida para o formato XSTRING.
O próximo subprograma monta um XML de acordo com as especificações. Novamente todos os dados estão “hardcode” para ilustrar melhor a estrutura do arquivo. Note que o campo tpEvento contém 210210, que é o código do evento “Ciência da Operação”.
O próximo subprograma assina o XML em ABAP utilizando o módulo de função standard do produto SAP NF-e.
Em seguida basta completar a mensagem XML e transmitir. Note que o tipo de dados do objeto Proxy é a classe gerada pela transação SPROXY. Essa classe já contém toda a implementação para entregar a mensagem ao PI.
O resultado pode ser visto na transação SXI_MONITOR. Note que o evento pode ser rejeitado por quaisquer motivos e isto deve ser tratado na aplicação.
4-Fazendo o download do XML
A etapa final de nosso estudo envolve o download do XML que confirmamos a operação. Maisuma vez iremos gerar o cabeçalho da mensagem SOAP utilizando um subprograma.
Em seguida montamos a mensagem XML de acordo com os manuais da SEFAZ. A grande vantagem desta mensagem de download é que ela não necessita assinatura digital.
A última etapa é fazer a chamada ao WebService e em seguida o download para a máquina local.
Um detalhe importante é que o XML retornado não é exatamente do formato esperado, mas contém mais tags que o necessário, no que se refere à conclusão da transação, então utilizamos a instrução FIND REGEX para extrair a tag procNFe por meio de expressões regulares e em seguida baixar para a máquina local.
Conclusão
Este programa é válido para fins de teste e não pode ser comparado a uma solução como o NFE 10.0 Entradas mas pode ser usado para ilustrar e testar o processo, que é novidade para todos.
Uma solução de qualidade deve conter somente as chamadas com objetos do dicionário de dados e deixar o trabalho de montagem do XML e protocolo SOAP para o PI, além disso é necessário implementar o tratamento das exceções e também rejeições e outras mensagens de erro que podem ser retornadas por parte da SEFAZ.
Espero que possa servir de apoio para o desenvolvimento de suas próprias soluções enquanto a SAP não libera a solução Standard
Até a próxima,
Fabio Purcino Aragão
New NetWeaver Information at SAP.com
Very Helpfull