Retorno HSBC - Valor de juros

09/02/2006

0

Bom dia.

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

Bico

Responder

Posts

10/02/2006

Bico

Sobe


Responder

10/02/2006

Weber

Você pode pegar a data de pagamento e verificar se foi pago em dia, se sim não há juros caso contrário ai sim é só pegar o campo juros.

Não li o manual do hsbc mas acredito que essa ´gambiarra´ funcione.


Responder

10/02/2006

Bico

Bom dia Weber.

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


Responder

10/02/2006

Weber

Para saber se é feriado, sabado domingo é mole.
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;



Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar