Retorno HSBC - Valor de juros
09/02/2006
0
Estamos desenvolvendo um sistema de ERP que faz integração bancária, enviando remessas e processando retornos.
Estamos com problema no processamento de retornos do HSBC. Mesmo que o cliente pague o título no dia do vencimento, no retorno, na posição 98 até a posição 110 (valor de juros) vem um valor. Sendo que não foi cobrado juros sobre o título...
Já li o manual várias vezes e não encontro o que pode estar causando este erro. Caso alguém já passou por este problema ou envia remessas e processa arquivos de retorno do HSBC e pode me dar uma mão, agradeceria muito...
Atenciosamente,
Fernando.
Bico
Posts
10/02/2006
Weber
Não li o manual do hsbc mas acredito que essa ´gambiarra´ funcione.
10/02/2006
Bico
Também tinha pensado em fazer alguma coisa desse tipo.
Só que me ocorreu a seguinte idéia: O título pode vencer no final de semana e o cara pagar só na segunda. Poderia fazer uma rotina para ver se o dia de vencimento do título é no final de semana e ignorar os juros neste caso. Mas acontece que o dia de vencimento do título também pode cair em um feriado. Neste caso o cliente pagaria o título no dia seguinte e aí o procedimento acima estaria ´furado´.
Acredito que o banco esteja informando outro valor na posição do campo de juros. Sei lá, tipo em algum tipo de operação ou tipo de situação a posição do campo juros serve para informar outro valor que, não tenho nem idéia do que pode ser.
Atenciosamente,
Fernando
10/02/2006
Weber
Esta função retornar a quantidade de dias em atrazo.
function CalcDiasVencto(DtAtual, DtVencto: ShortString): Integer; var dDtTemp: TDateTime; function VerFeriados(DtAtual, DtVencto: ShortString): Boolean; var Ano, Mes, Dia: Currency; c,n,k,i,j,l: Currency; cFeriados: TStringList; dDtTemp: TDateTime; nI, nY: Integer; begin Ano := StrToInt(Trim(Copy(DtAtual,7,4))); c := Trunc(Ano / 100); n := Ano - (19 * Trunc(Ano / 19)); k := Trunc((c - 17) / 25); i := c - Trunc((c/4)) - Trunc((c-k)/3) + (19*n) + 15; i := i - (30*Trunc(i/30)); i := i - (Trunc(i/28)*(1-Trunc(i/28))*Trunc(29/(i+1))*Trunc((21-n)/11)); j := Ano + Trunc(Ano / 4) + i + 2 -c + Trunc(c/4); j := j - (7*Trunc(j/7)); l := i - j; Mes := 3 + Trunc((l+40)/44); Dia := l + 28 - (31*Trunc(Mes/4)); cFeriados := TStringList.Create; cFeriados.Add(FormatDateTime(´dd/mm´,StrToDate(CurrToStr(Dia)+´/´+CurrToStr(Mes)))); //Pascoa cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]), -2))); //6.Santa cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]),-47))); //Carnaval cFeriados.Add(FormatDateTime(´dd/mm´,IncDay(StrToDate(cFeriados[0]), 60))); //Corpus Crhist cFeriados.Add(´01/01´); //Ano Novo cFeriados.Add(´21/04´); //Tiradentes cFeriados.Add(´01/05´); //Trabalho cFeriados.Add(´07/09´); //Indenpencia cFeriados.Add(´12/10´); //N.Senhora cFeriados.Add(´02/11´); //Finados cFeriados.Add(´15/11´); //Replublica cFeriados.Add(´25/12´); //Natal cFeriados.Add(´10/05´); //Aniversario de Maringa cFeriados.Add(´15/08´); //Padroeira de Maringa dDtTemp := StrToDate(DtAtual); dDtTemp := IncDay(dDtTemp, -1); while dDtTemp >= StrToDate(DtVencto) do //domingos e sabado if (DayOfWeek(dDtTemp) = 7) or (DayOfWeek(dDtTemp) = 1) then begin cFeriados.Add(FormatDateTime(´dd/mm´,dDtTemp)); dDtTemp := IncDay(dDtTemp, -1); end else Break; Result := False; dDtTemp := StrToDate(DtVencto); for nI := 0 to cFeriados.Count -1 do if cFeriados[nI] = FormatDateTime(´dd/mm´,dDtTemp) then begin for nY := 0 to cFeriados.Count -1 do if cFeriados[nY] = FormatDateTime(´dd/mm´,IncDay(StrToDate(DtAtual), -1)) then begin Result := True; Break; end; if Result then Break; end; cFeriados.Free; end; begin Result := DaysBetween(StrToDate(DtAtual), StrToDate(DtVencto)); if StrToDate(DtAtual) <= StrToDate(DtVencto) then Result := 0 else begin dDtTemp := StrToDate(DtVencto); while StrToDate(DtAtual) > dDtTemp do begin if VerFeriados(DtAtual,DateToStr(dDtTemp)) then begin Result := Result - 1; dDtTemp := IncDay(dDtTemp, 1); end else Break; end; end; end;
Clique aqui para fazer login e interagir na Comunidade :)