Class: BoletoBancario::Calculos::FatorVencimento

Inherits:
String
  • Object
show all
Defined in:
lib/boleto_bancario/calculos/fator_vencimento.rb

Overview

Classe responsável pelo cálculo de Fator de Vencimento do boleto bancário.

Descricão

Conforme Carta-circular 002926 do Banco Central do Brasil, de 24/07/2000, recomenda-se a indicação do Fator de Vencimento no Código de Barras. A partir de 02/04/2001, o Banco acolhedor/recebedor não será mais responsável por eventuais diferenças de recebimento de BOLETOs fora do prazo, ou sem a indicação do fator de vencimento.

Forma para obtenção do Fator de Vencimento

Calcula-se o número de dias corridos entre a data base (“Fixada” em 07/10/1997) e a do vencimento desejado:

Vencimento desejado:   04/07/2000
Data base          : - 07/10/1997
# => 1001

Atenção

Caso ocorra divergência entre a data impressa no campo “data de vencimento” e a constante no código de barras, o recebimento se dará da seguinte forma:

  • Quando pago por sistemas eletrônicos (Home-Banking, Auto-Atendimento, Internet, SISPAG, telefone, etc.), prevalecerá à representada no “código de barras”;

  • Quando quitado na rede de agências, diretamente no caixa, será considerada a data impressa no campo “vencimento” do BOLETO.

Examples:


FatorVencimento.new(Date.parse("2012-12-02"))
#=> "5535"

FatorVencimento.new(Date.parse("1997-10-08"))
#=> "0001"

FatorVencimento.new(Date.parse("2012-12-16"))
#=> "5549"

FatorVencimento.new(Date.parse("2014-12-15"))
#=> "6278"

Returns:

  • (String)

    retorna o resultado do cálculo. Deve conter 4 dígitos.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expiration_date, base_date = Date.new(1997, 10, 7)) ⇒ String

Returns retorna o resultado do cálculo. Deve conter 4 dígitos.

Examples:

FatorVencimento.new(Date.parse("2012-09-02"))
#=> "5444"

FatorVencimento.new(Date.parse("1999-10-01"))
#=> "0724"

FatorVencimento.new(Date.parse("2022-12-16"))
#=> "9201"

Parameters:

  • expiration_date (Date)
  • base_date (Date) (defaults to: Date.new(1997, 10, 7))


59
60
61
62
63
64
65
66
# File 'lib/boleto_bancario/calculos/fator_vencimento.rb', line 59

def initialize(expiration_date, base_date = Date.new(1997, 10, 7))
  @base_date       = base_date
  @expiration_date = expiration_date

  if @expiration_date.present?
    super(calculate)
  end
end

Instance Attribute Details

#base_dateObject (readonly)

Returns the value of attribute base_date.



45
46
47
# File 'lib/boleto_bancario/calculos/fator_vencimento.rb', line 45

def base_date
  @base_date
end

Instance Method Details

#calculateString

Cálculo da data de vencimento com a data base.

Returns:

  • (String)

    exatamente 4 dígitos



72
73
74
# File 'lib/boleto_bancario/calculos/fator_vencimento.rb', line 72

def calculate
  expiration_date_minus_base_date.to_s.rjust(4, '0')
end

#expiration_date_minus_base_dateInteger

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Cálculo da data de vencimento com a data base. Chamando #to_i para não retornar um Float.

Returns:

  • (Integer)

    diff between this two dates.



82
83
84
# File 'lib/boleto_bancario/calculos/fator_vencimento.rb', line 82

def expiration_date_minus_base_date
  (@expiration_date - @base_date).to_i
end