Atualmente a emissão de nota fiscal eletrônica tem se tornado cada vez mais comum nos estabelecimentos comerciais do nosso país. Esse cenário reflete no aumento da busca por softwares capazes de realizar a emissão de documentos fiscais.
Em meio a tantos contribuintes emitindo nota fiscal a todo momento, por mais que a sua aplicação seja robusta e consiga fazer as devidas validações, ainda existe a possibilidade de, ao enviar uma nota a SEFAZ, receber a rejeição com o motivo “Rejeição: Falha no Schema XML […]”.
Neste artigo, vamos te explicar o que é Schema XML e te ensinar como identificar os dados incorretos no XML para que a sua nota seja emitida com sucesso.
O que é Schema XML
XML Schema Definition, também conhecida como XSD, é uma linguagem utilizada para validar a estrutura de documentos com formato XML através de blocos ou nós.
Utilizando o Schema XML, é possível definir quais atributos o documento poderá receber, em qual ordem os elementos devem estar, quais os tipos de dados serão permitidos, dentre outros. Dessa forma, é mais fácil verificar, por exemplo, se o conteúdo de um determinado campo está de acordo com o padrão predefinido ou se o tipo de dado está correto.
O objetivo da utilização da XSD é garantir a clareza e padronização dos dados, para que o entendimento do conteúdo seja mútuo entre remetente e destinatário.
Estrutura do XML da NFC-e
A NFC-e segue o mesmo conceito da uma NF-e e, por isso, é necessário respeitar os padrões previstos na legislação estadual e nacional.
Um ponto importante sobre esse tema, é que algumas validações da NFC-e ficam a critério do estado emitente, portanto, pode ocorrer a situação em que contribuintes que usam a mesma aplicação para emitir notas Estados diferentes, não obtenham o mesmo retorno.
Como funcionam as validações do XML
A comunicação com o Web Service da SEFAZ é feita através de arquivos no formato XML.
Ao tentar emitir uma nota fiscal eletrônica pela sua aplicação, o que está de fato acontece é:
- A sua aplicação envia uma requisição para o Web Service da SEFAZ, com um arquivo XML;
- O Web Service irá validar se o XML está válido e dentro do padrão definido no Schema XML (XSD);
- Se for encontrada alguma inconsistência na estrutura do arquivo, ele será rejeitado por falha no Schema XML.
Quando ocorre a falha no Schema em uma NF-e/NFC-e?
A falha no Schema XML pode ocorrer pelos seguinte motivos:
Valor informado inválido
Acontece quando o valor de uma tag é informado fora do padrão aceitável.
Por exemplo: o campo cUF que se refere ao código da UF do emitente do documento fiscal recebe obrigatoriamente dois caracteres. Se o contribuinte enviar mais de dois caracteres, ou dois caracteres que não correspondam a uma UF válida, a nota será rejeitada.
Clique aqui para consultar a tabela de códigos das UFs de acordo com o Instituto Brasileiro de Geografia e Estatística – IBGE.
Não informar elemento (campo) obrigatório
Ocorre quando não é informado um elemento obrigatório dentro de um determinado nó.
Por exemplo: o campo nItem corresponde ao número do item, ele é um elemento filho obrigatório do grupo de Detalhamento de Produtos e Serviços da NFe. Se esse campo não for informado, será retornada a rejeição.
Informar elemento (campo) em bloco (nó) incorreto
Ocorre quando o campo pertence a um determinado bloco e foi informado em outro bloco no XML.
Por exemplo: o contribuinte utilizou o “Grupo Tributação do ICMS= 00” e informou o campo modBCST, que se refere a Modalidade de determinação da BC do ICMS ST. Porém, o grupo ICMS= 00 permite apenas os campos:
- orig (Origem da mercadoria);
- CST(Código de Situação Tributária);
- modBC (Modalidade de determinação da BC do ICMS);
- vBC (Valor da BC do ICMS);
- pICMS (Alíquota do ICMS);
- vICMS (Valor do ICMS);
- pFCP (Percentual do ICMS relativo ao Fundo de Combate à Pobreza (FCP));
- vFCP (Valor do Fundo de Combate à Pobreza (FCP)).
Onde encontrar as regras de validação da NF-e/NFC-e
Para identificar o padrão que a SEFAZ espera receber um arquivo XML de uma Nota Fiscal Eletrônica – NF-e (modelo 55) ou de uma Nota Fiscal do Consumidor Eletrônica – NFC-e (modelo 65), é necessário conhecer o Manual de Orientação ao Contribuinte e acompanhar as Notas Técnicas com as atualizações.
O manual do contribuinte contém uma visão geral do Sistema Nota Fiscal Eletrônica. Ele deve ser a fonte primária de consulta do contribuinte, porque é através dele que obtemos todas as informações relacionadas a validação, estrutura, fluxo, leiaute etc.
Quando a SEFAZ deseja alterar ou criar uma nova regra, ela publica uma Nota Técnica sobre o tema e disponibiliza um novo pacote de liberação de esquemas com as informações atualizadas.
Essas documentações são encontradas no Portal da Nota Fiscal Eletrônica, na aba Documentos.
Como validar o XML
Se você teve uma Nota Fiscal Eletrônica – NF-e (modelo 55) rejeitada por falha no Schema XML, você pode validar o XML da nota no validador da SEFAZ RS (Validador de Mensagens do Projeto NF-e) ou no Auditor Fiscal da Tecnospeed, para identificar o que originou a rejeição. Dessa forma, será possível identificar o que está incorreto com mais rapidez.
É importante citar que o validador da SEFAZ pode ser utilizado tanto para NF-e quanto para NFC-e.
Utilizaremos a seguir o mesmo XML de uma NF-e rejeitada por falha no Schema, validando-o nas duas aplicações para que consiga visualizar a diferença entre os retornos.
Auditor Fiscal da Tecnospeed
O Auditor Fiscal da Tecnospeed tem um certo cuidado ao retornar a mensagem de erro tratada, para que o usuário consiga identificar com maior facilidade a falha ocorrida no XML.
- Para utilizar, acesse em seu navegador pelo link: validador.nfe.tecnospeed.com.br
Aparecerá a seguinte tela:
- Cole o XML da nota;
- Clique na opção Validar.
Do lado direito, no Resultado, será apresentada a mensagem explicativa sobre o erro encontrado no XML, conforme o exemplo na imagem abaixo:
Validador de Mensagens do Projeto NF-e
O Validador de Mensagens do Projeto NF-e retorna os erros no idioma inglês, o que pode ser uma barreira para o entendimento do usuário. Segue o passo a passo para utilizá-lo:
- Acesse em seu navegador preferido o link: www.sefaz.rs.gov.br/nfe/NFE-VAL.aspx
Aparecerá a seguinte tela:
- Cole o XML da nota;
- Clique na opção Validar.
Logo abaixo do campo onde foi colado o XML, será retornado o Resultado da Validação do Schema e de Regras de Negócio com os erros encontrados, conforme a imagem abaixo.
Como interpretar as mensagens e corrigir os erros de falha no Schema por não informar elemento obrigatório ou informar elemento em nó incorreto
Usaremos como exemplo o XML validado nos dois passos anteriores. Para facilitar a nossa análise, destacamos aqui os elementos citados nos retornos e vamos utilizar apenas o nó do XML abaixo para identificar onde está o erro:
<total>
<ICMSTot>
<vBC>0.00</vBC>
<vICMS>0.00</vICMS>
<vBCST>0.00</vBCST>
<vST>0.00</vST>
<vProd>5160.00</vProd>
<vFrete>0.00</vFrete>
<vSeg>0.00</vSeg>
<vDesc>0.00</vDesc>
<vII>1.00</vII>
<vIPI>0.00</vIPI>
<vPIS>32.00</vPIS>
<vOutro>0.00</vOutro>
<vNF>5200.00</vNF>
</ICMSTot>
</total>
O Auditor Fiscal retornou:
O Validador de Mensagens do Projeto NF-e retornou:
“Schema XML: The element ‘ICMSTot’ in namespace ‘http://www.portalfiscal.inf.br/nfe’ has invalid child element ‘vOutro’ in namespace ‘http://www.portalfiscal.inf.br/nfe’. List of possible elements expected: ‘vCOFINS’ in namespace ‘http://www.portalfiscal.inf.br/nfe‘. Caminho: nfeProc/NFe[1]/infNFe/total/ICMSTot/vOutro/”.
Os dois retornos, tanto o do Auditor Fiscal quanto o do Validador de Mensagens do Projeto NF-e, estão citando os elementos ICMSTot, vOutro e vCOFINS. Porém, o elemento vCOFINS não foi informado no nó ICMSTot.
Dessa forma, vamos verificar no XML se o nó ICMSTot está correto, de acordo com o Manual de Orientação ao Contribuinte:
O Manual de Orientação ao Contribuinte indica que a ordem dos elementos no XML deve ser: vPIS, vCOFINS e vOutro, conforme a imagem abaixo:
Como podemos ver, no XML não foi informado o campo vCOFINS. Então, para resolver esse problema, basta adicioná-lo. Assim, a estrutura correta ficaria da seguinte maneira:
<total>
<ICMSTot>
<vBC>0.00</vBC>
<vICMS>0.00</vICMS>
<vBCST>0.00</vBCST>
<vST>0.00</vST>
<vProd>5160.00</vProd>
<vFrete>0.00</vFrete>
<vSeg>0.00</vSeg>
<vDesc>0.00</vDesc>
<vII>1.00</vII>
<vIPI>0.00</vIPI>
<vPIS>32.00</vPIS>
<vCOFINS>0.00</vCOFINS>
<vOutro>0.00</vOutro>
<vNF>5200.00</vNF>
</ICMSTot>
</total>
Como interpretar as mensagens e corrigir os erros de falha no schema por informar valor inválido
Se enviarmos o mesmo XML com o <vCOFINS>0.000</vCOFINS>, a nota será rejeitada, porque esse campo recebe até 13 caracteres antes da vírgula e 2 após a vírgula (13v2). Validando o XML, obtemos os seguintes retornos:
O Auditor Fiscal retornou:
Falha de Esquema: Campo ‘vCOFINS’ possui valor inválido: ‘0.000’. O campo deve de Tipo Decimal com 15 dígitos, sendo 13 de corpo e 2 decimais separadas por ‘.’. Exemplo: ‘10.00’.
O Validador de Mensagens do Projeto NF-e retornou:
The ‘http://www.portalfiscal.inf.br/nfe:vCOFINS’ element is invalid – The value ‘0.000’ is invalid according to its datatype ‘http://www.portalfiscal.inf.br/nfe:TDec_1302’ – The Pattern constraint failed.
Caminho: nfeProc/NFe[1]/infNFe/total/ICMSTot/vCOFINS/
Para corrigir o erro, basta alterar o valor para que atenda o padrão de validação, que ficaria desta forma: <vCOFINS>0.00</vCOFINS> .
Porque é importante que sua aplicação valide os campos antes de enviar uma nota para a SEFAZ?
As documentações disponibilizadas pela SEFAZ são claras em relação às regras de validação e de padronização. Isso permite que o desenvolvedor torne o seu software mais inteligente e contribui com a redução de custos de suporte aos usuários.
Se você deseja reduzir as rejeições por falha no esquema, pegue esta dica e implemente na sua aplicação: formate o tamanho do campo, defina quais elementos pertencem a um determinado nó e defina quais campos são obrigatórios. Assim, estará eliminando a possibilidade de o usuário errar.