Class: BancoItau

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

Overview

Banco Itaú

Instance Attribute Summary collapse

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

#agencia_dv, #banco_dv, #codigo_barras, #conta_corrente_dv, #data_vencimento, #nosso_numero, #valor_documento

Constructor Details

#initialize(campos = {}) ⇒ BancoItau

Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoItau



7
8
9
10
11
# File 'lib/brcobranca/boleto/banco_itau.rb', line 7

def initialize(campos={})
  padrao={:carteira => "175", :banco => "341"}
  campos = padrao.merge!(campos)
  super(campos)
end

Instance Attribute Details

#seu_numeroObject

Usado somente em carteiras especiais com registro para complementar o número do cocumento



4
5
6
# File 'lib/brcobranca/boleto/banco_itau.rb', line 4

def seu_numero
  @seu_numero
end

Instance Method Details

#agencia_conta_boletoObject

Campo usado apenas na exibição no boleto

Deverá ser sobreescrito para cada banco


41
42
43
# File 'lib/brcobranca/boleto/banco_itau.rb', line 41

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

#agencia_conta_corrente_dvObject

Calcula o dígito verificador para conta corrente do Itau. Retorna apenas o dígito verificador da conta ou nil caso seja impossível calcular.



29
30
31
# File 'lib/brcobranca/boleto/banco_itau.rb', line 29

def agencia_conta_corrente_dv
  "#{self.agencia}#{self.conta_corrente}".modulo10
end

#monta_codigo_43_digitosObject

Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras.



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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/brcobranca/boleto/banco_itau.rb', line 46

def monta_codigo_43_digitos
  valor_documento_formatado = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
  fator_vencimento = self.data_vencimento.fator_vencimento
  numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 8)
  return nil if numero_documento.size != 8

  # Monta a String baseado no tipo de carteira
  case self.carteira.to_i
  when 126, 131, 146, 150, 168
    # CARTEIRAS 126 131 146 150 168
    # 01 a 03 03 9(03) Código do Banco na Câmara de Compensação = '341'
    # 04 a 04 01 9(01) Código da Moeda = '9'
    # 05 a 05 01 9(01) DAC código de Barras MOD 11-2a9
    # 06 a 09 04 9(04) Fator de Vencimento
    # 10 a 19 10 9(08)V(2) Valor
    # 20 a 22 03 9(03) Carteira
    # 23 a 30 08 9(08) Nosso Número
    # 31 a 31 01 9(01) DAC [Carteira/Nosso Número] MOD 10
    # 32 a 35 04 9(04) N.º da Agência cedente
    # 36 a 40 05 9(05) N.º da Conta Corrente
    # 41 a 41 01 9(01) DAC [Agência/Conta Corrente] MOD 10
    # 42 a 44 03 9(03) Zeros
    codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
    codigo << "#{numero_documento}#{self.nosso_numero_dv}#{self.agencia}#{self.conta_corrente}#{self.agencia_conta_corrente_dv}000"
    codigo
    codigo.size == 43 ? codigo : nil
  when 198, 106, 107, 122, 142, 143, 195, 196
    # CARTEIRAS 198, 106, 107,122, 142, 143, 195 e 196
    # 01 a 03 03 9(3) Código do Banco na Câmara de Compensação = ‘341’
    # 04 a 04 01 9(1) Código da Moeda = '9'
    # 05 a 05 01 9(1) DAC do Código de Barras MOD 11-2a9
    # 06 a 09 04 9(04) Fator de Vencimento
    # 10 a 19 10 9(08) V(2) Valor
    # 20 a 22 03 9(3) Carteira
    # 23 a 30 08 9(8) Nosso Número
    # 31 a 37 07 9(7) Seu Número (Número do Documento)
    # 38 a 42 05 9(5) Código do Cliente (fornecido pelo Banco)
    # 43 a 43 01 9(1) DAC dos campos acima (posições 20 a 42) MOD 10
    # 44 a 44 01 9(1) Zero
    seu_numero = self.seu_numero.zeros_esquerda(:tamanho => 7)
    return nil if seu_numero.size != 7
    convenio = self.convenio.zeros_esquerda(:tamanho => 5)
    return nil if convenio.size != 5
    dv = "#{self.carteira}#{numero_documento}#{seu_numero}#{convenio}".modulo10

    codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
    codigo << "#{numero_documento}#{seu_numero}#{convenio}#{dv}0"
    codigo
    codigo.size == 43 ? codigo : nil
  else
    # DEMAIS CARTEIRAS
    # 01 a 03 03 9(03) Código do Banco na Câmara de Compensação = '341'
    # 04 a 04 01 9(01) Código da Moeda = '9'
    # 05 a 05 01 9(01) DAC código de Barras MOD 11-2a9
    # 06 a 09 04 9(04) Fator de Vencimento
    # 10 a 19 10 9(08)V(2) Valor
    # 20 a 22 03 9(03) Carteira
    # 23 a 30 08 9(08) Nosso Número
    # 31 a 31 01 9(01) DAC [Agência /Conta/Carteira/Nosso Número] MOD 10
    # 32 a 35 04 9(04) N.º da Agência cedente
    # 36 a 40 05 9(05) N.º da Conta Corrente
    # 41 a 41 01 9(01) DAC [Agência/Conta Corrente] MOD 10
    # 42 a 44 03 9(03) Zeros
    codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
    codigo << "#{numero_documento}#{self.nosso_numero_dv}#{self.agencia}#{self.conta_corrente}#{self.agencia_conta_corrente_dv}000"
    codigo
    codigo.size == 43 ? codigo : nil
  end
end

#nosso_numero_boletoObject

Campo usado apenas na exibição no boleto

Deverá ser sobreescrito para cada banco


35
36
37
# File 'lib/brcobranca/boleto/banco_itau.rb', line 35

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

#nosso_numero_dvObject

Retorna dígito verificador do nosso número, calculado com modulo10. Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados “AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO”, calculado pelo criterio do Modulo 10. A excecao, estão as carteiras 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos dados “CARTEIRA/NOSSO NUMERO”.



18
19
20
21
22
23
24
25
# File 'lib/brcobranca/boleto/banco_itau.rb', line 18

def nosso_numero_dv
  if %w(126 131 146 150 168).include?(self.carteira)
    "#{self.carteira}#{self.numero_documento}".modulo10
  else
    numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 8)
    "#{self.agencia}#{self.conta_corrente}#{self.carteira}#{numero_documento}".modulo10
  end
end