Olá, senhores.
Estou tendo problemas com a leitura de um arquivo de retorno do banco Bradesco, modelo CNAB-400, em resposta a uma alteração de vencimento.
Apenas para contextualização:
Foi emitido um boleto e enviado ao banco Bradesco que confirmou seu registro normalmente, com a motivação "P1" (Registrado com QR CODE PIX)
Dias depois, foi enviado em uma nova remessa, uma solicitação para alteração de vencimento, com a motivação "06" (Alteração de Vencimento)
O retorno do banco trouxe dois registros para o mesmo boleto, sendo uma ocorrência "14" (Vencimento Alterado) e outro registro com ocorrência "33" (Confirmação Pedido Alteração Outros Dados), ambas com a motivação "P8" (Alteração não Permitida - QR CODE Pago ou Cancelado)
Para variar, existe esse retorno do banco que parecem ser dois registros redundantes, mas no que diz respeito à nossa parte técnica, existe uma falha no procedimento ACBrBoleto.LerRetorno400(), especificamente no trecho abaixo:
CodMotivo := IfThen(copy(Linha,MotivoLinha,2) = ' ','00',copy(Linha,MotivoLinha,2));
...
{Somente estas ocorrencias possuem motivos 00}
if(CodOcorrencia in [02, 06, 09, 10, 12 ,13, 14, 15 ,17])then
begin
MotivoRejeicaoComando.Add(IfThen(copy(Linha,MotivoLinha,2) = ' ','00',copy(Linha,MotivoLinha,2)));
if VarIsNumeric(CodMotivo) then
DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo,Integer(CodMotivo)))
else
DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo,VarToStr(CodMotivo)));
end
else
begin
if(CodMotivo = 0)then
...
end;
Quando a ocorrência é "33", o algoritmo não atende ao if do conjunto, logo, o else é executado, fazendo com que seja levantada uma exceção, na comparação do valor de CodMotivo, que assume no momento o valor string "P8" com o valor integer "0", levantando uma exceção.
Nessa situação, acredito que será necessário um ajuste nos fontes, simplesmente incluindo a ocorrência "33" na validação do conjunto:
if(CodOcorrencia in [02, 06, 09, 10, 12 ,13, 14, 15, 17, 33])then
Assim o variant receberá sua tratativa e evitaremos o levantamento da exceção.
Obs.: O Manual de Procedimentos Operacionais para Troca de Arquivos (Bradesco) trata dessa informação na Página 46, e foi utilizado a versão mais recente, localizado no próprio svn: ..\tools\Bancos\237-Bradesco\CNAB400_Cobranca_2022_VER003.pdf