class VerificadorBoletoBr::Slip::Arrecadation::Validity

Attributes

digitable_line[RW]
errors[RW]
kind[RW]

Public Class Methods

new(cod) click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 14
def initialize(cod)
  @digitable_line = cod
  raise ArgumentError, 'Expected String'              unless @digitable_line.class.eql?(String)
  raise ArgumentError, 'Invalid Digitable Line'       unless clean_digitable_line.size == 48
  raise ArgumentError, 'Boleto Não é de Arrecadação'  unless @digitable_line[0] == '8'

  @errors = []
  @kind = :arrecadation_slip
end

Public Instance Methods

bacen_module() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 79
def bacen_module
  case clean_digitable_line[2]
  when '6'
    'modulo10'
  when '7'
    'modulo10'
  when '8'
    'modulo11'
  when '9'
    'modulo11'
  else
    raise ArgumentError, 'Invalid Digitable Line'
  end
end
clean_digitable_line() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 24
def clean_digitable_line
  clean_masks(@digitable_line)
end
digitable_line_without_dvs() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 129
def digitable_line_without_dvs
  grouped_digitable_line.map { |group| group[:num] }.join
end
due_date() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 42
def due_date
  begin
    Date.parse(digitable_line_without_dvs[-6..-1])
  rescue
    nil
  end
end
global_validity() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 115
def global_validity
  send(bacen_module, digitable_line_without_dvs[0..2] + digitable_line_without_dvs[4..-1]) == verification_digit
end
grouped_digitable_line() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 119
def grouped_digitable_line
  clean_digitable_line.scan(/.{1,12}/).each_with_index.map do |group, index|
    {
      group: index,
      num: group[0..-2],
      dv: group[-1]
    }
  end
end
groups_validity() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 103
def groups_validity
  grouped_digitable_line.map do |group|
    dv = send(bacen_module, group[:num]).to_s
    valid = dv.eql?(group[:dv])
    errors << "Campo #{group[:group]}" unless valid
    {
      group: group[:group],
      valid: valid
    }
  end
end
identification() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 71
def identification
  identification_str = JSON.parse(File.read(File.join( File.dirname(__FILE__), '../../data/Dealerships.json')))
                         .select { |d| d['code'] == clean_digitable_line[16..19] && d['segment'] == clean_digitable_line[1].to_i }&.dig(0,"dealership")
  return identification_str unless identification_str.nil?

  "Boleto de #{segment}"
end
segment() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 50
def segment
  case clean_digitable_line[1]
  when '1'
    'Prefeitura'
  when '2'
    'Saneamento'
  when '3'
    'Energia Elétrica e Gás'
  when '4'
    'Telefonia'
  when '5'
    'Órgãos Governamentais'
  when '6'
    'Empresas / Órgãos com CNPJ.'
  when '7'
    'Multa de trânsito'
  when '9'
    'Uso exclusivo do banco'
  end
end
valid?() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 94
def valid?
  global_validity && !groups_validity.map { |group| group[:valid] }.include?(false)
end
valid_without_global?() click to toggle source

Duplicate just for mantaining module methods

# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 99
def valid_without_global?
  valid?
end
value() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 37
def value
  return nil unless valid?
  value_in_cents.to_f / 100
end
value_in_cents() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 32
def value_in_cents
  return nil unless valid?
  digitable_line_without_dvs[4..14].to_i
end
verification_digit() click to toggle source
# File lib/verificador_boleto_br/slip/arrecadation/validity.rb, line 28
def verification_digit
  clean_digitable_line[3].to_i
end