Validar XMLs com XSDs
Quando falamos em emissão de documentos eletrônicos via web service, sempre teremos o envolvimento de um ou mais arquivos XML e de um ou mais arquivos XSD.
Os arquivos XMLs são os arquivos trocados entre os sistemas que estão efetuando a integração (exemplo: XML de envio do lote da NF-e para a SEFAZ, XML de retorno do envio do lote da NFS-e, etc.). Já os arquivos XSD (XML Schema Definition) são usados para descrever o formato/padrão que um arquivo XML deve seguir. Desta forma, para que um arquivo XML seja considerado válido ele deverá passar pela validação com base em um arquivo XSD.
Dica
XSD significa XML Schema Definition, desta forma, o termo Pacote de Schemas faz referência a um pacote de arquivos XSD que poderão ser utilizados para efetuar a validação dos arquivos XML
É de responsabilidade da empresa que disponibiliza o serviço (web service) para Integração a disponibilização dos arquivos XSD que permitirão a validação dos arquivos XMLs que precisam ser enviados e que serão recebidos como retorno. No caso de documentos eletrônicos que seguem leiautes nacionais (NF-e, CT-e, NFC-e, MDF-e), os XSDs são disponibilizados pela SEFAZ Nacional. No caso de documentos eletrônicos que seguem leiautes municipais (NFS-e), os XSDs são disponibilizados por cada Prefeitura (ou pelo fornecedor de software que a prefeitura utiliza).
A validação de um arquivo XML através de um arquivo XSD pode ser feita em diversas ocasiões. Seguem exemplos de situações onde a validação ajudará na identificação de problemas:
- Envio de algum arquivo XML para a SEFAZ, onde tenha sido retornada a rejeição genérica de Falha no Schema XML ou Arquivo XML não segue o formato exigido, sem especificar qual é a falha no Schema;
- Envio de arquivos XMLs para as Prefeituras onde sejam retornadas mensagens genéricas (que podem variar de acordo com cada fornecedor de software) ou mensagens de erro dos sistemas das Prefeituras que não foram tratadas (Exemplo: erros de programação Java que causem a mensagem java.lang.NullPointerException).
- Validar arquivos XMLs retornados pelas Prefeituras no caso de envio de NFS-e, onde o eDocs está considerando o XML de retorno como inválido.
Dica
Os validadores XML da SEFAZ (cujas informações podem ser encontradas no tópico Validador XML SEFAZ) já possuem validações de Schema embutidas, no entanto, em algumas situações nem todas as validações são efetivamente aplicadas.
Para efetuar a validação do arquivo XML através do arquivo XSD é necessário:
- O arquivo XML que será validado;
- O arquivo XSD que será usado como base para a validação;
- O aplicativo que efetue a validação.
Importante
A definição dos arquivos XSD pode mudar de acordo com a empresa responsável por definir os web services para integração. Desta forma, um fornecedor de software, por exemplo, pode encapsular todas as validações necessárias dentro de um único arquivo XSD (isso é comum para alguns fornecedores de NFS-e de Prefeituras), enquanto que outros fornecedores disponibilizarão vários arquivos XSD, um para cada tipo de informação que precisa ser validada (que é o padrão utilizado pela SEFAZ).
Nota
A Senior não distribui ou comercializa aplicativos que efetuem validação de Schemas. Aplicativos para estes fins poderão ser encontrados na internet. No entanto, já foram identificados problemas na validação de XMLs efetuado pelo aplicativo Notepad++ através de seu plugin XMLTools. Desta forma, este aplicativo não é recomendado para este tipo de validação.
Para exemplificarmos o processo de validação, utilizaremos cenários de envio de NFS-e para uma Prefeitura.
- O arquivo XML da NFS-e foi gerado pelo ERP e integrado corretamente no eDocs;
- O eDocs converteu o arquivo XML do ERP no padrão esperado pela Prefeitura e o enviou para a mesma, com isso o RPS ficou com status de Enviada;
- Logo após, identificou-se que o RPS não teve alteração do status, continuando no status Enviada;
- Identificou-se, pela consulta dos logs XML da NFS-e, que o eDocs estava enviando constantemente a consulta do envio do lote do RPS, onde a Prefeitura estava retornando um XML.
Neste caso, é possível identificar que o eDocs não está considerando o arquivo XML retornado pela Prefeitura como válido, pois ele está descartando o retorno enviado pela Prefeitura.
O arquivo XML retornado pela Prefeitura está exemplificado abaixo:
Ao ser efetuada a validação deste arquivo com base no XSD esRecepcionarLoteRpsResposta_v01.xsd disponibilizado pela própria Prefeitura, a seguinte mensagem de erro é gerada como retorno: O atributo 'class' não pode aparecer no elemento 'listaErros'.
Observação
Esta mensagem de retorno da validação poderá variar de acordo com o aplicativo validador utilizado.
Nesta situação, o suporte do fornecedor da Prefeitura deve ser acionado para tratar o erro no XML retornado. Isso porque, o atributo class (destacado na imagem acima) realmente não pode existir no XML de retorno da Prefeitura (pode-se observar no XML indicado acima de que este atributo está inserido no XML).
- O arquivo XML da NFS-e foi gerado pelo ERP e integrado corretamente no eDocs;
- O eDocs converteu o arquivo XML do ERP no padrão esperado pela Prefeitura e o enviou para a mesma, com isso o RPS ficou com status de Enviada;
- Logo após, o RPS foi rejeitado pelo motivo Arquivo enviado fora da estrutura do arquivo XML de entrada.
Ao ser efetuada a validação deste arquivo com base no XSD servico_enviar_lote_rps_envio_v03.xsd disponibilizado pela própria Prefeitura, a seguinte mensagem de erro é gerada como retorno: 112,95' não é um valor válido para 'decimal'.
Ao localizar o valor 112,95 no arquivo XML gerado, é possível identificar que ele está definido na tag <ValorLiquidoNfse>. Neste caso, o separador de decimal não pode ser "," (vírgula), e sim "." (ponto) (conforme pode ser observado no campo <BaseCalculo>).
Nesta situação, é possível identificar de que há um problema na geração do XML através do eDocs. No entanto, é importante salientar que, eventuais parametrizações no ambiente podem afetar a geração do arquivo XML (neste caso, parametrizações Regionais do Windows).
Importante
Em casos de rejeições para documentos enviados aos órgãos autorizadores, a validação do arquivo XML a ser efetuada sempre deve ser baseada no arquivo XML enviado para a SEFAZ/Prefeitura. Sendo assim, deve-se coletar os arquivos XMLs via rotina de Logs XML ou Log em Debug no eDocs.
Em casos onde o problema esteja na integração do XML gerado pelo ERP no eDocs, a validação deverá ser efetuada com base no arquivo XML gerado pelo ERP.
Como este tópico tem como objetivo apenas indicar de como efetuar a validação do arquivo XML conforme o XSD, para cada situação de erro de validação identificada, uma análise detalhada da situação deverá ser efetuada.