tulios-brcobranca-rails2 2.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +29 -0
- data/Manifest.txt +54 -0
- data/PostInstall.txt +4 -0
- data/README.rdoc +75 -0
- data/Rakefile +41 -0
- data/brcobranca.gemspec +43 -0
- data/lib/brcobranca/arquivos/logos/banespa.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/bb.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/bradesco.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/caixa.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/hsbc.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/itau.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/real.jpg +0 -0
- data/lib/brcobranca/arquivos/logos/unibanco.jpg +0 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/boleto/banco_banespa.rb +85 -0
- data/lib/brcobranca/boleto/banco_bradesco.rb +44 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +88 -0
- data/lib/brcobranca/boleto/banco_caixa.rb +118 -0
- data/lib/brcobranca/boleto/banco_hsbc.rb +77 -0
- data/lib/brcobranca/boleto/banco_itau.rb +115 -0
- data/lib/brcobranca/boleto/banco_real.rb +70 -0
- data/lib/brcobranca/boleto/banco_unibanco.rb +79 -0
- data/lib/brcobranca/boleto/base.rb +154 -0
- data/lib/brcobranca/boleto/template/rghost.rb +153 -0
- data/lib/brcobranca/boleto/template/util.rb +34 -0
- data/lib/brcobranca/config.rb +9 -0
- data/lib/brcobranca/core_ext.rb +287 -0
- data/lib/brcobranca/currency.rb +67 -0
- data/lib/brcobranca/retorno/base.rb +43 -0
- data/lib/brcobranca/retorno/retorno_cbr643.rb +44 -0
- data/lib/brcobranca.rb +43 -0
- data/spec/arquivos/CBR64310.RET +28 -0
- data/spec/brcobranca/banco_banespa_spec.rb +195 -0
- data/spec/brcobranca/banco_bradesco_spec.rb +179 -0
- data/spec/brcobranca/banco_brasil_spec.rb +353 -0
- data/spec/brcobranca/banco_caixa_spec.rb +192 -0
- data/spec/brcobranca/banco_hsbc_spec.rb +216 -0
- data/spec/brcobranca/banco_itau_spec.rb +202 -0
- data/spec/brcobranca/banco_real_spec.rb +145 -0
- data/spec/brcobranca/banco_unibanco_spec.rb +193 -0
- data/spec/brcobranca/base_spec.rb +240 -0
- data/spec/brcobranca/core_ext_spec.rb +275 -0
- data/spec/brcobranca/currency_spec.rb +81 -0
- data/spec/brcobranca/retorno_cbr643_spec.rb +69 -0
- data/spec/brcobranca/rghost_spec.rb +36 -0
- data/spec/brcobranca/template/rghost_spec.rb +65 -0
- data/spec/brcobranca/template/util_spec.rb +42 -0
- data/spec/brcobranca_spec.rb +8 -0
- data/spec/rcov.opts +2 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +10 -0
- data/tasks/rcov.rake +12 -0
- data/tasks/rspec.rake +21 -0
- metadata +202 -0
@@ -0,0 +1,118 @@
|
|
1
|
+
# Banco Caixa
|
2
|
+
class BancoCaixa < Brcobranca::Boleto::Base
|
3
|
+
|
4
|
+
#validates_length_of :convenio, :is => 11, :message => "deve ser igual a 11 dígitos (operacao (3) + convênio (8))."
|
5
|
+
|
6
|
+
CARTEIRAS = {
|
7
|
+
14 => 'SR' # Cobranca sem Registro
|
8
|
+
}
|
9
|
+
|
10
|
+
# Nova instancia da CaixaEconomica
|
11
|
+
# @param (see Brcobranca::Boleto::Base#initialize)
|
12
|
+
def initialize(campos={})
|
13
|
+
campos = {:carteira => CARTEIRAS[14]}.merge!(campos)
|
14
|
+
super(campos)
|
15
|
+
end
|
16
|
+
|
17
|
+
def fator_vencimento
|
18
|
+
self.data_vencimento.fator_vencimento.to_s.rjust(4,'0')
|
19
|
+
end
|
20
|
+
|
21
|
+
# Valor total do documento
|
22
|
+
# @return [String] 10 caracteres numéricos.
|
23
|
+
def valor_documento_formatado
|
24
|
+
self.valor_documento.limpa_valor_moeda.to_s.rjust(10,'0')
|
25
|
+
end
|
26
|
+
|
27
|
+
alias :valor_carteira :carteira
|
28
|
+
def carteira
|
29
|
+
# Em caso de número, formatar para sigla
|
30
|
+
return CARTEIRAS[self.valor_carteira] if self.valor_carteira.is_number?
|
31
|
+
self.valor_carteira
|
32
|
+
end
|
33
|
+
|
34
|
+
# Codigo do banco emissor (3 dígitos sempre)
|
35
|
+
#
|
36
|
+
# @return [String] 3 caracteres numéricos.
|
37
|
+
def banco
|
38
|
+
"104"
|
39
|
+
end
|
40
|
+
|
41
|
+
def banco_dv
|
42
|
+
self.banco.modulo10
|
43
|
+
end
|
44
|
+
|
45
|
+
# Número da agência/codigo_cedente do cliente para exibir no boleto.
|
46
|
+
# @return [String]
|
47
|
+
# @example
|
48
|
+
# boleto.agencia_conta_boleto #=> "2391/44335511-5"
|
49
|
+
def agencia_conta_boleto
|
50
|
+
"#{self.agencia}/#{self.conta_corrente}-#{self.conta_corrente_dv}"
|
51
|
+
end
|
52
|
+
|
53
|
+
# Número seqüencial utilizado para identificar o boleto.
|
54
|
+
# Carteira 14 - SR - Cobranca sem Registro:
|
55
|
+
# Fixo 2 mais 8 dígitos (ex: 8200000001)
|
56
|
+
# @raise [Brcobranca::NaoImplementado] Caso o tipo de convênio não seja suportado pelo Brcobranca.
|
57
|
+
#
|
58
|
+
def numero_documento
|
59
|
+
case self.carteira
|
60
|
+
when 'SR'
|
61
|
+
"82#{@numero_documento.to_s.rjust(8, '0')}"
|
62
|
+
else
|
63
|
+
raise Brcobranca::NaoImplementado.new("Tipo de convênio não implementado.")
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# Dígito verificador do nosso número.
|
68
|
+
# @return [String] 1 caracteres numéricos.
|
69
|
+
# @see BancoBrasil#numero_documento
|
70
|
+
def nosso_numero_dv
|
71
|
+
self.numero_documento.modulo11_2to9
|
72
|
+
end
|
73
|
+
|
74
|
+
# Nosso número para exibir no boleto.
|
75
|
+
# (numero_documento + nosso_numero_dv)
|
76
|
+
# @return [String]
|
77
|
+
# @example
|
78
|
+
# boleto.nosso_numero_boleto #=> "12345678904"
|
79
|
+
def nosso_numero_boleto
|
80
|
+
"#{self.numero_documento}#{self.nosso_numero_dv}"
|
81
|
+
end
|
82
|
+
|
83
|
+
def monta_codigo_43_digitos
|
84
|
+
"#{codigo_barras_primeira_parte}#{codigo_barras_segunda_parte}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def codigo_barras
|
88
|
+
codigo = super()
|
89
|
+
raise Brcobranca::BoletoInvalido.new unless codigo
|
90
|
+
codigo
|
91
|
+
end
|
92
|
+
|
93
|
+
def codigo_barras_primeira_parte
|
94
|
+
"#{self.banco}#{self.moeda}#{self.fator_vencimento}#{valor_documento_formatado}"
|
95
|
+
end
|
96
|
+
|
97
|
+
def codigo_barras_segunda_parte
|
98
|
+
self.campo_livre
|
99
|
+
end
|
100
|
+
|
101
|
+
# Para as posições do Campo Livre, informar:
|
102
|
+
# - Se carteira Sem Registro: Nosso número com 10 posições e Código do Cedente, ambos
|
103
|
+
# sem o DV.
|
104
|
+
#
|
105
|
+
# Ex.: 82NNNNNNNN AAAA YYYXXXXXXXX
|
106
|
+
#
|
107
|
+
# Onde: 82 - Identificador da carteira Sem Registro
|
108
|
+
# NNNNNNNN - Nosso número do Cliente
|
109
|
+
# AAAA - CNPJ da Agência Cedente
|
110
|
+
# YYY - Operação Código
|
111
|
+
# XXXXXXXX - Código fornecido pela Agência
|
112
|
+
#
|
113
|
+
# Nota: A operação + o código fornecido pela agência = convênio
|
114
|
+
def campo_livre
|
115
|
+
"#{self.numero_documento}#{self.agencia}#{self.convenio}"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# Banco HSBC
|
2
|
+
class BancoHsbc < Brcobranca::Boleto::Base
|
3
|
+
|
4
|
+
# Responsável por definir dados iniciais quando se cria uma nova intância da classe BancoBrasil
|
5
|
+
def initialize(campos={})
|
6
|
+
padrao={:carteira => "CNR", :banco => "399"}
|
7
|
+
campos = padrao.merge!(campos)
|
8
|
+
super(campos)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Número sequencial utilizado para distinguir os boletos na agência
|
12
|
+
def nosso_numero
|
13
|
+
if self.data_vencimento.kind_of?(Date)
|
14
|
+
self.codigo_servico = 4
|
15
|
+
dia = self.data_vencimento.day.to_s.zeros_esquerda(:tamanho => 2)
|
16
|
+
mes = self.data_vencimento.month.to_s.zeros_esquerda(:tamanho => 2)
|
17
|
+
ano = self.data_vencimento.year.to_s[2..3]
|
18
|
+
data = "#{dia}#{mes}#{ano}"
|
19
|
+
|
20
|
+
numero_documento = "#{self.numero_documento.to_s}#{self.numero_documento.to_s.modulo11_9to2_10_como_zero}#{self.codigo_servico.to_s}"
|
21
|
+
soma = numero_documento.to_i + self.conta_corrente.to_i + data.to_i
|
22
|
+
numero = "#{numero_documento}#{soma.to_s.modulo11_9to2_10_como_zero}"
|
23
|
+
numero
|
24
|
+
else
|
25
|
+
self.codigo_servico = 5
|
26
|
+
numero_documento = "#{self.numero_documento.to_s}#{self.numero_documento.to_s.modulo11_9to2_10_como_zero}#{self.codigo_servico.to_s}"
|
27
|
+
soma = numero_documento.to_i + self.conta_corrente.to_i
|
28
|
+
numero = "#{numero_documento}#{soma.to_s.modulo11_9to2_10_como_zero}"
|
29
|
+
numero
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Campo usado apenas na exibição no boleto
|
34
|
+
# Deverá ser sobreescrito para cada banco
|
35
|
+
def nosso_numero_boleto
|
36
|
+
"#{self.nosso_numero}"
|
37
|
+
end
|
38
|
+
|
39
|
+
# Campo usado apenas na exibição no boleto
|
40
|
+
# Deverá ser sobreescrito para cada banco
|
41
|
+
def agencia_conta_boleto
|
42
|
+
"#{self.conta_corrente}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
|
46
|
+
def monta_codigo_43_digitos
|
47
|
+
banco = self.banco.zeros_esquerda(:tamanho => 3)
|
48
|
+
valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
|
49
|
+
convenio = self.convenio.to_s
|
50
|
+
conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
|
51
|
+
|
52
|
+
# Montagem é baseada no tipo de carteira e na presença da data de vencimento
|
53
|
+
if self.carteira == "CNR"
|
54
|
+
if self.data_vencimento.kind_of?(Date)
|
55
|
+
raise "numero_documento pode ser de no máximo 13 caracteres." if (self.numero_documento.to_s.size > 13)
|
56
|
+
fator = self.data_vencimento.fator_vencimento
|
57
|
+
dias_julianos = self.data_vencimento.to_juliano
|
58
|
+
self.codigo_servico = 4
|
59
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
|
60
|
+
numero = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{conta}#{numero_documento}#{dias_julianos}2"
|
61
|
+
numero.size == 43 ? numero : nil
|
62
|
+
else
|
63
|
+
# TODO
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
else
|
67
|
+
# TODO
|
68
|
+
# raise "numero_documento pode ser de no máximo 6 caracteres." if (self.numero_documento.to_s.size > 6)
|
69
|
+
# numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 6)
|
70
|
+
# nosso_numero = self.nosso_numero.zeros_esquerda(:tamanho => 9)
|
71
|
+
# self.codigo_servico = 5
|
72
|
+
|
73
|
+
nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# Banco Itaú
|
2
|
+
class BancoItau < Brcobranca::Boleto::Base
|
3
|
+
# Usado somente em carteiras especiais com registro para complementar o número do cocumento
|
4
|
+
attr_accessor :seu_numero
|
5
|
+
|
6
|
+
# Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoItau
|
7
|
+
def initialize(campos={})
|
8
|
+
padrao={:carteira => "175", :banco => "341"}
|
9
|
+
campos = padrao.merge!(campos)
|
10
|
+
super(campos)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Retorna dígito verificador do nosso número, calculado com modulo10.
|
14
|
+
# Para a grande maioria das carteiras, são considerados para a obtenção do DAC/DV, os dados
|
15
|
+
# "AGENCIA(sem DAC/DV)/CONTA(sem DAC/DV)/CARTEIRA/NOSSO NUMERO", calculado pelo criterio do Modulo 10.
|
16
|
+
# A excecao, estão as carteiras 126, 131, 146, 150 e 168 cuja obtenção esta baseada apenas nos
|
17
|
+
# dados "CARTEIRA/NOSSO NUMERO".
|
18
|
+
def nosso_numero_dv
|
19
|
+
if %w(126 131 146 150 168).include?(self.carteira)
|
20
|
+
"#{self.carteira}#{self.numero_documento}".modulo10
|
21
|
+
else
|
22
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 8)
|
23
|
+
"#{self.agencia}#{self.conta_corrente}#{self.carteira}#{numero_documento}".modulo10
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Calcula o dígito verificador para conta corrente do Itau.
|
28
|
+
# Retorna apenas o dígito verificador da conta ou nil caso seja impossível calcular.
|
29
|
+
def agencia_conta_corrente_dv
|
30
|
+
"#{self.agencia}#{self.conta_corrente}".modulo10
|
31
|
+
end
|
32
|
+
|
33
|
+
# Campo usado apenas na exibição no boleto
|
34
|
+
# Deverá ser sobreescrito para cada banco
|
35
|
+
def nosso_numero_boleto
|
36
|
+
"#{self.carteira}/#{self.numero_documento}-#{self.nosso_numero_dv}"
|
37
|
+
end
|
38
|
+
|
39
|
+
# Campo usado apenas na exibição no boleto
|
40
|
+
# Deverá ser sobreescrito para cada banco
|
41
|
+
def agencia_conta_boleto
|
42
|
+
"#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras.
|
46
|
+
def monta_codigo_43_digitos
|
47
|
+
valor_documento_formatado = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
|
48
|
+
fator_vencimento = self.data_vencimento.fator_vencimento
|
49
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 8)
|
50
|
+
return nil if numero_documento.size != 8
|
51
|
+
|
52
|
+
# Monta a String baseado no tipo de carteira
|
53
|
+
case self.carteira.to_i
|
54
|
+
when 126, 131, 146, 150, 168
|
55
|
+
# CARTEIRAS 126 131 146 150 168
|
56
|
+
# 01 a 03 03 9(03) Código do Banco na Câmara de Compensação = '341'
|
57
|
+
# 04 a 04 01 9(01) Código da Moeda = '9'
|
58
|
+
# 05 a 05 01 9(01) DAC código de Barras MOD 11-2a9
|
59
|
+
# 06 a 09 04 9(04) Fator de Vencimento
|
60
|
+
# 10 a 19 10 9(08)V(2) Valor
|
61
|
+
# 20 a 22 03 9(03) Carteira
|
62
|
+
# 23 a 30 08 9(08) Nosso Número
|
63
|
+
# 31 a 31 01 9(01) DAC [Carteira/Nosso Número] MOD 10
|
64
|
+
# 32 a 35 04 9(04) N.º da Agência cedente
|
65
|
+
# 36 a 40 05 9(05) N.º da Conta Corrente
|
66
|
+
# 41 a 41 01 9(01) DAC [Agência/Conta Corrente] MOD 10
|
67
|
+
# 42 a 44 03 9(03) Zeros
|
68
|
+
codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
|
69
|
+
codigo << "#{numero_documento}#{self.nosso_numero_dv}#{self.agencia}#{self.conta_corrente}#{self.agencia_conta_corrente_dv}000"
|
70
|
+
codigo
|
71
|
+
codigo.size == 43 ? codigo : nil
|
72
|
+
when 198, 106, 107, 122, 142, 143, 195, 196
|
73
|
+
# CARTEIRAS 198, 106, 107,122, 142, 143, 195 e 196
|
74
|
+
# 01 a 03 03 9(3) Código do Banco na Câmara de Compensação = ‘341’
|
75
|
+
# 04 a 04 01 9(1) Código da Moeda = '9'
|
76
|
+
# 05 a 05 01 9(1) DAC do Código de Barras MOD 11-2a9
|
77
|
+
# 06 a 09 04 9(04) Fator de Vencimento
|
78
|
+
# 10 a 19 10 9(08) V(2) Valor
|
79
|
+
# 20 a 22 03 9(3) Carteira
|
80
|
+
# 23 a 30 08 9(8) Nosso Número
|
81
|
+
# 31 a 37 07 9(7) Seu Número (Número do Documento)
|
82
|
+
# 38 a 42 05 9(5) Código do Cliente (fornecido pelo Banco)
|
83
|
+
# 43 a 43 01 9(1) DAC dos campos acima (posições 20 a 42) MOD 10
|
84
|
+
# 44 a 44 01 9(1) Zero
|
85
|
+
seu_numero = self.seu_numero.zeros_esquerda(:tamanho => 7)
|
86
|
+
return nil if seu_numero.size != 7
|
87
|
+
convenio = self.convenio.zeros_esquerda(:tamanho => 5)
|
88
|
+
return nil if convenio.size != 5
|
89
|
+
dv = "#{self.carteira}#{numero_documento}#{seu_numero}#{convenio}".modulo10
|
90
|
+
|
91
|
+
codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
|
92
|
+
codigo << "#{numero_documento}#{seu_numero}#{convenio}#{dv}0"
|
93
|
+
codigo
|
94
|
+
codigo.size == 43 ? codigo : nil
|
95
|
+
else
|
96
|
+
# DEMAIS CARTEIRAS
|
97
|
+
# 01 a 03 03 9(03) Código do Banco na Câmara de Compensação = '341'
|
98
|
+
# 04 a 04 01 9(01) Código da Moeda = '9'
|
99
|
+
# 05 a 05 01 9(01) DAC código de Barras MOD 11-2a9
|
100
|
+
# 06 a 09 04 9(04) Fator de Vencimento
|
101
|
+
# 10 a 19 10 9(08)V(2) Valor
|
102
|
+
# 20 a 22 03 9(03) Carteira
|
103
|
+
# 23 a 30 08 9(08) Nosso Número
|
104
|
+
# 31 a 31 01 9(01) DAC [Agência /Conta/Carteira/Nosso Número] MOD 10
|
105
|
+
# 32 a 35 04 9(04) N.º da Agência cedente
|
106
|
+
# 36 a 40 05 9(05) N.º da Conta Corrente
|
107
|
+
# 41 a 41 01 9(01) DAC [Agência/Conta Corrente] MOD 10
|
108
|
+
# 42 a 44 03 9(03) Zeros
|
109
|
+
codigo = "#{self.banco}#{self.moeda}#{fator_vencimento}#{valor_documento_formatado}#{self.carteira}"
|
110
|
+
codigo << "#{numero_documento}#{self.nosso_numero_dv}#{self.agencia}#{self.conta_corrente}#{self.agencia_conta_corrente_dv}000"
|
111
|
+
codigo
|
112
|
+
codigo.size == 43 ? codigo : nil
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# Banco REAL
|
2
|
+
class BancoReal < Brcobranca::Boleto::Base
|
3
|
+
# Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoReal
|
4
|
+
def initialize(campos={})
|
5
|
+
padrao={:carteira => "57", :banco => "356"}
|
6
|
+
campos = padrao.merge!(campos)
|
7
|
+
super(campos)
|
8
|
+
end
|
9
|
+
|
10
|
+
# Campo usado apenas na exibição no boleto
|
11
|
+
# Deverá ser sobreescrito para cada banco
|
12
|
+
def nosso_numero_boleto
|
13
|
+
"#{self.numero_documento}-#{self.nosso_numero_dv}"
|
14
|
+
end
|
15
|
+
|
16
|
+
# Campo usado apenas na exibição no boleto
|
17
|
+
# Deverá ser sobreescrito para cada banco
|
18
|
+
def agencia_conta_boleto
|
19
|
+
"#{self.agencia}-#{self.agencia_dv} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
|
20
|
+
end
|
21
|
+
|
22
|
+
# CALCULO DO DIGITO:
|
23
|
+
# APLICA-SE OS PESOS 2,1,2,1,.... AOS ALGARISMOS DO NUMERO COMPOSTO POR:
|
24
|
+
# NUMERO DO BANCO : COM 7 DIGITOS P/ COBRANCA REGISTRADA
|
25
|
+
# ATE 15 DIGITOS P/ COBRANCA SEM REGISTRO
|
26
|
+
# CODIGO DA AGENCIA: 4 DIGITOS
|
27
|
+
# NUMERO DA CONTA : 7 DIGITOS
|
28
|
+
def agencia_conta_corrente_nosso_numero_dv
|
29
|
+
case self.carteira.to_i
|
30
|
+
when 57
|
31
|
+
#agencia é 4 digitos
|
32
|
+
agencia = self.agencia.zeros_esquerda(:tamanho => 4)
|
33
|
+
#conta é 7 digitos
|
34
|
+
conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
|
35
|
+
#nosso número com maximo de 13 digitos
|
36
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
|
37
|
+
"#{numero_documento}#{agencia}#{conta}".modulo10
|
38
|
+
else
|
39
|
+
#agencia é 4 digitos
|
40
|
+
agencia = self.agencia.zeros_esquerda(:tamanho => 4)
|
41
|
+
#conta é 7 digitos
|
42
|
+
conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
|
43
|
+
#nosso número com maximo de 13 digitos
|
44
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
|
45
|
+
"#{numero_documento}#{agencia}#{conta}".modulo10
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
|
50
|
+
def monta_codigo_43_digitos
|
51
|
+
banco = self.banco.zeros_esquerda(:tamanho => 3)
|
52
|
+
valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
|
53
|
+
conta = self.conta_corrente.zeros_esquerda(:tamanho => 7)
|
54
|
+
agencia = self.agencia.zeros_esquerda(:tamanho => 4)
|
55
|
+
fator = self.data_vencimento.fator_vencimento
|
56
|
+
# Montagem é baseada no tipo de carteira, com registro e sem registro
|
57
|
+
case self.carteira.to_i
|
58
|
+
# Carteira sem registro
|
59
|
+
when 57
|
60
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 13)
|
61
|
+
codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{agencia}#{conta}#{self.agencia_conta_corrente_nosso_numero_dv}#{numero_documento}"
|
62
|
+
codigo.size == 43 ? codigo : nil
|
63
|
+
else
|
64
|
+
# TODO verificar com o banco, pois não consta na documentação
|
65
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 7)
|
66
|
+
codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}000000#{agencia}#{conta}#{self.agencia_conta_corrente_nosso_numero_dv}#{numero_documento}"
|
67
|
+
codigo.size == 43 ? codigo : nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# Banco UNIBANCO
|
2
|
+
class BancoUnibanco < Brcobranca::Boleto::Base
|
3
|
+
# Responsável por definir dados iniciais quando se cria uma nova intancia da classe BancoUnibanco
|
4
|
+
# Com Registro 4
|
5
|
+
# Sem Registro 5
|
6
|
+
def initialize(campos={})
|
7
|
+
padrao={:carteira => "5", :banco => "409"}
|
8
|
+
campos = padrao.merge!(campos)
|
9
|
+
super(campos)
|
10
|
+
end
|
11
|
+
|
12
|
+
def nosso_numero_dv
|
13
|
+
self.numero_documento.modulo11_2to9
|
14
|
+
end
|
15
|
+
|
16
|
+
# Campo usado apenas na exibição no boleto
|
17
|
+
# Deverá ser sobreescrito para cada banco
|
18
|
+
def nosso_numero_boleto
|
19
|
+
"#{self.numero_documento.zeros_esquerda(:tamanho => 14)}-#{self.nosso_numero_dv}"
|
20
|
+
end
|
21
|
+
|
22
|
+
# Campo usado apenas na exibição no boleto
|
23
|
+
# Deverá ser sobreescrito para cada banco
|
24
|
+
def agencia_conta_boleto
|
25
|
+
"#{self.agencia} / #{self.conta_corrente}-#{self.conta_corrente_dv}"
|
26
|
+
end
|
27
|
+
|
28
|
+
# Responsável por montar uma String com 43 caracteres que será usado na criação do código de barras
|
29
|
+
def monta_codigo_43_digitos
|
30
|
+
banco = self.banco.zeros_esquerda(:tamanho => 3)
|
31
|
+
fator = self.data_vencimento.fator_vencimento
|
32
|
+
valor_documento = self.valor_documento.limpa_valor_moeda.zeros_esquerda(:tamanho => 10)
|
33
|
+
carteira = self.carteira.zeros_esquerda(:tamanho => 1)
|
34
|
+
|
35
|
+
case carteira.to_i
|
36
|
+
when 5
|
37
|
+
|
38
|
+
# Cobrança sem registro (CÓDIGO DE BARRAS)
|
39
|
+
# Posição Tamanho Descrição
|
40
|
+
# 1 a 3 3 número de identificação do Unibanco: 409 (número FIXO)
|
41
|
+
# 4 1 código da moeda. Real (R$)=9 (número FIXO)
|
42
|
+
# 5 1 dígito verificador do CÓDIGO DE BARRAS
|
43
|
+
# 6 a 9 4 fator de vencimento
|
44
|
+
# 10 a 19 10 valor do título com zeros à esquerda
|
45
|
+
# 20 1 código para transação CVT: 5 (número FIXO)(5=7744-5)
|
46
|
+
# 21 a 27 7 número do cliente no CÓDIGO DE BARRAS + dígito verificador
|
47
|
+
# 28 a 29 2 vago. Usar 00 (número FIXO)
|
48
|
+
# 30 a 43 14 Número de referência do cliente
|
49
|
+
# 44 1 Dígito verificador
|
50
|
+
|
51
|
+
convenio = self.convenio.zeros_esquerda(:tamanho => 6)
|
52
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 14)
|
53
|
+
codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}#{carteira}#{convenio}00#{numero_documento}#{self.nosso_numero_dv}"
|
54
|
+
codigo.size == 43 ? codigo : nil
|
55
|
+
when 4
|
56
|
+
|
57
|
+
# Cobrança com registro (CÓDIGO DE BARRAS)
|
58
|
+
# Posição Tamanho Descrição
|
59
|
+
# 1 a 3 3 Número de identificação do Unibanco: 409 (número FIXO)
|
60
|
+
# 4 1 Código da moeda. Real (R$)=9 (número FIXO)
|
61
|
+
# 5 1 dígito verificador do CÓDIGO DE BARRAS
|
62
|
+
# 6 a 9 4 fator de vencimento em 4 algarismos, conforme tabela da página 14
|
63
|
+
# 10 a 19 10 valor do título com zeros à esquerda
|
64
|
+
# 20 a 21 2 Código para transação CVT: 04 (número FIXO) (04=5539-5)
|
65
|
+
# 22 a 27 6 data de vencimento (AAMMDD)
|
66
|
+
# 28 a 32 5 Código da agência + dígito verificador
|
67
|
+
# 33 a 43 11 “Nosso Número” (NNNNNNNNNNN)
|
68
|
+
# 44 1 Super dígito do “Nosso Número” (calculado com o MÓDULO 11 (de 2 a 9))
|
69
|
+
|
70
|
+
data = self.data_vencimento.strftime('%y%m%d')
|
71
|
+
agencia = self.agencia.zeros_esquerda(:tamanho => 4)
|
72
|
+
numero_documento = self.numero_documento.zeros_esquerda(:tamanho => 11)
|
73
|
+
codigo = "#{banco}#{self.moeda}#{fator}#{valor_documento}0#{carteira}#{data}#{agencia}#{self.agencia_dv}#{numero_documento}#{self.nosso_numero_dv}"
|
74
|
+
codigo.size == 43 ? codigo : nil
|
75
|
+
else
|
76
|
+
nil
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|