Class: BancoBrasil

Inherits:
Brcobranca::Boleto::Base show all
Defined in:
lib/brcobranca/boleto/banco_brasil.rb

Overview

Banco do Brasil

Instance Attribute Summary

Attributes inherited from Brcobranca::Boleto::Base

#aceite, #agencia, #banco, #carteira, #cedente, #codigo_servico, #conta_corrente, #convenio, #data_documento, #data_processamento, #dias_vencimento, #documento_cedente, #especie, #especie_documento, #instrucao1, #instrucao2, #instrucao3, #instrucao4, #instrucao5, #instrucao6, #instrucao7, #local_pagamento, #moeda, #numero_documento, #quantidade, #sacado, #sacado_documento, #sacado_endereco, #valor, #variacao

Instance Method Summary collapse

Methods inherited from Brcobranca::Boleto::Base

#codigo_barras, #data_vencimento, #nosso_numero, #valor_documento

Constructor Details

#initialize(campos = {}) ⇒ BancoBrasil

Responsável por definir dados iniciais quando se cria uma nova intância da classe BancoBrasil



5
6
7
8
9
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 5

def initialize(campos={})
  padrao={:carteira => "18", :banco => "001", :codigo_servico => false}
  campos = padrao.merge!(campos)
  super(campos)
end

Instance Method Details

#agencia_conta_boletoObject

Campo usado apenas na exibição no boleto

Deverá ser sobreescrito para cada banco


40
41
42
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 40

def agencia_conta_boleto
 "#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
end

#agencia_dvObject

Retorna digito verificador da agencia, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se ‘X’



17
18
19
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 17

def agencia_dv
  self.agencia.modulo11_9to2_10_como_x
end

#banco_dvObject

Retorna digito verificador do banco, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se ‘X’



12
13
14
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 12

def banco_dv
  self.banco.modulo11_9to2_10_como_x
end

#conta_corrente_dvObject

Retorna digito verificador da conta corrente, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se ‘X’



22
23
24
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 22

def conta_corrente_dv
  self.conta_corrente.modulo11_9to2_10_como_x
end

#monta_codigo_43_digitosObject

Responsavel por montar uma String com 43 caracteres que será usado na criacao do codigo de barras



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 45

def monta_codigo_43_digitos
  banco = self.banco.zeros_esquerda(:tamanho => 3)
  valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
  convenio = self.convenio.to_s
  fator = self.data_vencimento.fator_vencimento
  # A montagem é feita baseada na quantidade de dígitos do convênio.
  case convenio.size
  when 8 # Nosso Numero de 17 dígitos com Convenio de 8 dígitos e numero_documento de 9 dígitos
    numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 9)
    raise "Seu complemento está com #{numero_documento.size} dígitos. Com convênio de 8 dígitos, somente permite-se até 9 dígitos no numero_documento do nosso numero." if numero_documento.size > 9
    numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
  when 7 # Nosso Numero de 17 dígitos com Convenio de 7 dígitos e numero_documento de 10 dígitos
    numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 10)
    raise "Seu complemento está com #{numero_documento.size} dígitos. Com convênio de 7 dígitos, somente permite-se até 10 dígitos no numero_documento do nosso numero." if numero_documento.size > 10
    numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{convenio}#{numero_documento}#{self.carteira}"
  when 6 # Convenio de 6 dígitos
    if self.codigo_servico == false
      # Nosso Numero de 11 dígitos com Convenio de 6 dígitos e numero_documento de 5 digitos
      numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 5)
      raise "Seu numero_documento está com #{numero_documento.size} dígitos. Com convênio de 6 dígitos, somente permite-se até 5 dígitos no numero_documento do nosso numero. Para emitir boletos com nosso numero de 17 dígitos, coloque o atributo codigo_servico=true" if numero_documento.size > 5
      agencia = self.agencia.zeros_esquerda(:tamanho => 4)
      conta = self.conta_corrente.zeros_esquerda(:tamanho => 8)
      numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
    else
      # Nosso Numero de 17 dígitos com Convenio de 6 dígitos e sem numero_documento, carteira 16 e 18
      numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 17)
      raise "Seu numero_documento está com #{numero_documento.size} dígitos. Com convênio de 6 dígitos, somente permite-se até 17 dígitos no numero_documento do nosso numero." if (numero_documento.size > 17)
      raise "Só é permitido emitir boletos com nosso número de 17 dígitos com carteiras 16 ou 18. Sua carteira atual é #{self.carteira}" unless (["16","18"].include?(self.carteira))
      numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}21"
    end
  when 4 # Nosso Numero de 7 dígitos com Convenio de 4 dígitos e sem numero_documento
    numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
    raise "Seu numero_documento está com #{numero_documento.size} dígitos. Com convênio de 4 dígitos, somente permite-se até 7 dígitos no numero_documento do nosso numero." if numero_documento.size > 7
    agencia = self.agencia.zeros_esquerda(:tamanho => 4)
    conta = self.conta_corrente.zeros_esquerda(:tamanho => 8)
    numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{convenio}#{numero_documento}#{agencia}#{conta}#{self.carteira}"
  else
    numero = ""
  end

  numero.size == 43 ? numero : nil
end

#nosso_numero_boletoObject

Campo usado apenas na exibição no boleto

Deverá ser sobreescrito para cada banco


34
35
36
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 34

def nosso_numero_boleto
 "#{self.convenio}#{self.numero_documento}-#{self.nosso_numero_dv}"
end

#nosso_numero_dvObject

Retorna digito verificador do nosso numero, calculado com modulo11 de 9 para 2, porem em caso de resultado ser 10, usa-se ‘X’ Inclui ainda o numero do convenio no calculo



28
29
30
# File 'lib/brcobranca/boleto/banco_brasil.rb', line 28

def nosso_numero_dv
  "#{self.convenio}#{self.numero_documento}".modulo11_9to2_10_como_x
end