Boa tarde.
Ao realizar a validação de uma nota, notei que a mensagem de alerta gerada na Unit ACBrNFeNotasFiscais está exibindo a tag %TAGNIVEL% de forma literal para o usuário final. Estamos implementando um controle melhor das mensagens de rejeição e identifiquei essa situação no momento em que a Unit ACBrNfeNotasFiscais faz a verificação se a nota é valida.
if EstaVazio(AXML) then
begin
Erro := ACBrStr('NFe não encontrada no XML');
NotaEhValida := False;
end
else
NotaEhValida := SSL.Validar(AXML, GerarNomeArqSchema(ALayout, VerServ), Erro);
if not NotaEhValida then
begin
FErroValidacao := ACBrStr('Falha na validação dos dados da nota: ') +
IntToStr(NFe.Ide.nNF) + sLineBreak + FAlertas;
FErroValidacaoCompleto := FErroValidacao + sLineBreak + Erro;
raise EACBrNFeException.CreateDef(
IfThen(Configuracoes.Geral.ExibirErroSchema, ErroValidacaoCompleto,
ErroValidacao));
end;
Identificação: No constructor da classe TACBrXmlWriterOptions.Create, a variável FFormatoAlerta é inicializada com: 'TAG:%TAGNIVEL% ID:%ID%/%TAG%(%DESCRICAO%) - %MSG%.'
No entanto, na procedure wAlerta, o processamento da mensagem não realiza o StringReplace para a tag %TAGNIVEL%, resultando em mensagens "sujas" como no exemplo abaixo:
Msg: Falha na validação... TAG:%TAGNIVEL% ID:X17/cMunFG(Código do Município FG) - Conteúdo inválido.
Sugestão de Melhoria: Alterar o valor padrão de FFormatoAlerta no constructor para um formato que utilize apenas as tags que são efetivamente tratadas pelo componente, tornando a leitura mais amigável.
Novo Formato Sugerido: FFormatoAlerta := 'TAG: %TAG% (ID:%ID%) - %DESCRICAO% -> %MSG%';
Resultado esperado com a alteração: Msg: Falha na validação... TAG: cMunFG (ID:X17) - Código do Município FG -> Conteúdo inválido.
Obrigado e tenha um ótimo dia.