Bom dia a todos, verificando as units dos bancos onde se calcula o nosso numero e digito verificador notei que a do HSBS esta pegando o NumeroDocumento na função "CalcularDigitoVerificador"
e nos outros bancos nossoNumero, no entanto os boletos para aprovação que estava enviando para o banco HSBC estavam sendo reprovado dizendo que o calculo do digito(s) verificador estavam incorretos, então mudei para o NossoNumero e calculo passou a ser feito conforme exemplificou o banco, vou enviar novamente para o banco, qualquer coisa posto aqui.
Duvida: O correto é conforme está na unit original (NumeroDocumento) ou NossoNumero ?, porque para que o cálculo seja feito corretamente tenho que passar no numeroDocumento o NossoNumero igual, me desculpem se estiver dizendo besteira...
segue o trecho do código que alterei:
function TACBrBancoHSBC.CalcularDigitoVerificador(const ACBrTitulo: TACBrTitulo ): String;
var
ANumeroDoc, ANumeroBase, ADigito1: AnsiString;
ADigito2, ADigito: AnsiString;
Numero, Cedente, Vencimento: Extended;
function CalcularDigito(const ANumero: AnsiString): AnsiString;
begin
Modulo.CalculoPadrao;
Modulo.Documento := AnsiString(ANumero);
Modulo.Calcular;
Result := AnsiString(IntToStr(Modulo.DigitoFinal));
end;
begin
Result := '0';
// numero base para o calculo do primeiro e segundo digitos
// ANumeroDoc := padR(AnsiString(ACBrTitulo.NumeroDocumento),13,'0'); - Original
ANumeroDoc := padR(AnsiString(ACBrTitulo.NossoNumero),13,'0'); - Alterado
// Calculo do primeiro digito
ANumeroBase := ANumeroDoc;
ADigito := CalcularDigito(ANumeroDoc);
ADigito1 := ADigito + '4';
// calculo do segundo digito
Vencimento := StrToFloat(FormatDateTime('ddmmyy', ACBrTitulo.Vencimento));
Cedente := StrToFloat(Self.ACBrBanco.ACBrBoleto.Cedente.CodigoCedente);
Numero := StrToFloat(ANumeroBase + ADigito1);
ANumeroBase := FloatToStr(Numero + Cedente+ Vencimento);
ADigito2 := CalcularDigito(ANumeroBase);
// digito final 3 posicoes = digito 1 + '4' + digito 2
Result := ADigito1 + ADigito2;
end;