Pessoal, eu abri este tópico para a gente discutir uma melhoria no retorno da CEF, referente a posição 214 do tipo T, no padrão CNAB 240.
O arquivo do layout podem pegar aqui http://www.caixa.gov.br/downloads/cobranca-caixa-manuais/LEIAUTE_CNAB_240_SIGCB_COBRANCA_CAIXA.pdf
O campo na posição 214 serve é para Motivo da Ocorrência Identificação para Rejeições, Tarifas, Custas, Liquidação e Baixas, tem 10 posições e a tabela referência dele é a *C047.
Porém o ACBR utiliza os valores de forma genérica, para o código de Liquidação não validando o Código de movimento retorno, que vem na posição 16.
O correto seria validar os valores da C047, conforme o registro 07.3T, da posição 16. Exemplo:
No meu arquivo vem: 020102, e o item na posição 16 é 06
Atualmente o resultado do ACBR é: 02-Casa Lotérica,01 - Outros Motivos,02-Casa Lotérica
Entendo que deveria ser: 02-Casa Lotérica,01 - Dinheiro
Pois o segundo item está vinculado C047, item D, que diz: D - Para as liquidações associadas aos códigos 02, 03 e 08 (posição 216) Somente não sei para que serve o último 02.
Meu raciocino está certo, ou estou entendendo errado?
Fonte abaixo aonde é verificado este itens:
CodigoLiquidacao := Copy(Linha,214,02);
CodigoLiquidacaoDescricao := CodigoLiquidacao_Descricao( StrToIntDef(CodigoLiquidacao,0) );
// prevenir quando o seunumero não vem informado no arquivo
wSeuNumero := StringReplace(SeuNumero, '0','',[rfReplaceAll]);
if (AnsiSameText(wSeuNumero, EmptyStr)) then
begin
SeuNumero := NossoNumero;
NumeroDocumento := NossoNumero
end;
MotivoLinha := 214;
for I := 0 to 4 do
begin
CodMotivo := StrToIntDef(IfThen(Copy(Linha, MotivoLinha, 2) = '00', '00', Copy(Linha, MotivoLinha, 2)), 0);
if CodMotivo <> 0 then
begin
MotivoRejeicaoComando.Add(IfThen(Copy(Linha, MotivoLinha, 2) = '00', '00', Copy(Linha, MotivoLinha, 2)));
DescricaoMotivoRejeicaoComando.Add(CodMotivoRejeicaoToDescricao(OcorrenciaOriginal.Tipo, CodMotivo));
end;
MotivoLinha := MotivoLinha + 2; // Incrementa a coluna dos motivos.
end;