Olá a todos,
Ao tentar realizar a emissão de NFS-e para o provedor MegaSoft, estava me deparando com erros de validação tanto locais (MSXML) quanto no próprio webservice, rejeitando o lote gerado.
Erro retornado (Validação Local / Webservice):
Código : X800 / E160
Mensagem: Erro de Validação: --> 1871 - Element '{http://megasoftarrecadanet.com.br/xsd/nfse_v01.xsd}NumeroNbs': This element is not expected. Expected is ( {http://megasoftarrecadanet.com.br/xsd/nfse_v01.xsd}Exigibilidade ).
Após realizar alguns testes e re-testes com o webservice, identifiquei que a MegaSoft atualizou seu manual e os schemas oficiais, tornando a tag <Exigibilidade> obrigatória e alterando propriedades no XSD.
Fiz os ajustes nos fontes e nos arquivos de schema, o que resolveu o problema perfeitamente. Seguem as correções sugeridas para avaliação e possível commit no SVN:
1. Ajuste na Geração do XML (.pas)
Arquivo: \Fontes\ACBrDFe\ACBrNFSeX\Provedores\MegaSoft.GravarXml.pas
Procedure: TNFSeW_MegaSoft200.GerarServico
O que foi alterado:
Inclusão da tag <Exigibilidade> que estava ausente, antes de NumeroNbs.
Ajuste do tamanho da tag <NumeroNbs> de 9 para 12 caracteres.
Como ficou o código (trecho final da procedure):
Delphi
Result.AppendChild(AddNode(tcStr, '#31', 'CodigoTributacaoMunicipio', 1, 20, 0,
NFSe.Servico.CodigoTributacaoMunicipio, DSC_CSERVTRIBMUN));
// --- ALTERAÇÕES INICIAM AQUI ---
// 1. Exigibilidade (Obrigatória na nova versão)
Result.AppendChild(AddNode(tcStr, '#32', 'Exigibilidade', 1, 2, 1,
FpAOwner.ExigibilidadeISSToStr(NFSe.Servico.ExigibilidadeISS), 'Exigibilidade'));
// 2. NumeroNbs (Obrigatório, tamanho limite ajustado para 12)
Result.AppendChild(AddNode(tcStr, '#32', 'NumeroNbs', 1, 12, 1,
NFSe.Servico.CodigoNBS, DSC_CMUN));
// 3. Discriminacao
Result.AppendChild(AddNode(tcStr, '#32', 'Discriminacao', 1, 2000, 1,
StringReplace(NFSe.Servico.Discriminacao, Opcoes.QuebraLinha,
FpAOwner.ConfigGeral.QuebradeLinha, [rfReplaceAll]), 'Discriminacao'));
Result.AppendChild(AddNode(tcStr, '#39', 'InfAdicional', 1, 255, 0,
NFSe.Servico.InfAdicional, DSC_INFADICIONAL));
end;
2. Atualização dos Schemas (.xsd) do Repositório
Arquivo: \Exemplos\ACBrDFe\Schemas\NFSe\MegaSoft\2.00\nfse_v01.xsd
O arquivo atualmente presente no SVN do ACBr possui duas divergências em relação ao schema oficial publicado em http://megasoftarrecadanet.com.br/xsd/nfse_v01.xsd.
Divergência A: Falta a declaração do elemento Exigibilidade dentro de tcDadosServico.
Correção: Inserir <xsd:element name="Exigibilidade" type="tsExigibilidadeISS" minOccurs="1" maxOccurs="1"/> antes do NumeroNbs.
Divergência B: Erro de digitação (typo) na declaração do tipo do elemento Numero dentro de tcIdentificacaoNfse.
Correção: Alterar de type="tsNumerNfse" para type="tsNumeroNfse".
Após aplicar a alteração no .pas e substituir o nfse_v01.xsd local pelo atualizado, o validador local aprova a estrutura e o webservice processa a requisição normalmente
(retornando as validações normais de negócio, como L000 - Assinatura sem acesso ao webservice, atestando que a barreira estrutural foi vencida).
Gostaria de sugerir essas alterações para os próximos commits.
Agradeço a atenção e o excelente trabalho com o componente!
nfse_v01 - Atualizado.xsd
MegaSoft.GravarXml.pas