boleto_bancario 0.0.1.beta → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -2
- data/.travis.yml +10 -0
- data/Changelog.markdown +4 -0
- data/Gemfile +1 -1
- data/Planning.markdown +18 -86
- data/README.markdown +107 -55
- data/Rakefile +7 -1
- data/TODO.markdown +15 -1
- data/boleto_bancario.gemspec +7 -3
- data/lib/boleto_bancario.rb +27 -15
- data/lib/boleto_bancario/calculos/modulo11_fator_de9a2.rb +65 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +5 -51
- data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
- data/lib/boleto_bancario/core/banco_brasil.rb +30 -5
- data/lib/boleto_bancario/core/banrisul.rb +182 -0
- data/lib/boleto_bancario/core/boleto.rb +67 -34
- data/lib/boleto_bancario/core/bradesco.rb +28 -16
- data/lib/boleto_bancario/core/caixa.rb +233 -0
- data/lib/boleto_bancario/core/hsbc.rb +170 -0
- data/lib/boleto_bancario/core/itau.rb +20 -10
- data/lib/boleto_bancario/core/real.rb +177 -0
- data/lib/boleto_bancario/core/santander.rb +19 -22
- data/lib/boleto_bancario/core/sicoob.rb +172 -0
- data/lib/boleto_bancario/core/sicredi.rb +290 -0
- data/lib/boleto_bancario/version.rb +1 -2
- data/spec/boleto_bancario/calculos/modulo10_spec.rb +4 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +6 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_spec.rb +31 -0
- data/spec/boleto_bancario/calculos/modulo_numero_de_controle_spec.rb +37 -0
- data/spec/boleto_bancario/core/banco_brasil_spec.rb +59 -65
- data/spec/boleto_bancario/core/banrisul_spec.rb +129 -0
- data/spec/boleto_bancario/core/boleto_spec.rb +148 -32
- data/spec/boleto_bancario/core/bradesco_spec.rb +29 -36
- data/spec/boleto_bancario/core/caixa_spec.rb +111 -0
- data/spec/boleto_bancario/core/hsbc_spec.rb +72 -0
- data/spec/boleto_bancario/core/itau_spec.rb +33 -36
- data/spec/boleto_bancario/core/real_spec.rb +104 -0
- data/spec/boleto_bancario/core/santander_spec.rb +26 -24
- data/spec/boleto_bancario/core/sicoob_spec.rb +111 -0
- data/spec/boleto_bancario/core/sicredi_spec.rb +149 -0
- data/spec/inheritance/banco_brasil_spec.rb +22 -0
- data/spec/inheritance/banrisul_spec.rb +22 -0
- data/spec/inheritance/boleto_spec.rb +15 -0
- data/spec/inheritance/bradesco_spec.rb +22 -0
- data/spec/inheritance/caixa_spec.rb +22 -0
- data/spec/inheritance/hsbc_spec.rb +22 -0
- data/spec/inheritance/itau_spec.rb +22 -0
- data/spec/inheritance/real_spec.rb +22 -0
- data/spec/inheritance/santander_spec.rb +22 -0
- data/spec/inheritance/sicoob_spec.rb +22 -0
- data/spec/inheritance/sicredi_spec.rb +22 -0
- data/spec/shared_examples/boleto_bancario_shared_example.rb +21 -34
- data/spec/spec_helper.rb +2 -2
- metadata +119 -47
- data/.rvmrc +0 -1
@@ -12,10 +12,7 @@ module BoletoBancario
|
|
12
12
|
# * Internacionalização;
|
13
13
|
# * Nomes das classes para serem manipuladas;
|
14
14
|
#
|
15
|
-
include ActiveModel::
|
16
|
-
include ActiveModel::Conversion
|
17
|
-
extend ActiveModel::Naming
|
18
|
-
extend ActiveModel::Translation
|
15
|
+
include ActiveModel::Model
|
19
16
|
|
20
17
|
# Nome/Razão social que aparece no campo 'Cedente' no boleto.
|
21
18
|
#
|
@@ -84,20 +81,10 @@ module BoletoBancario
|
|
84
81
|
#
|
85
82
|
attr_accessor :agencia
|
86
83
|
|
87
|
-
# Dígito da agência. Campo auto explicativo.
|
88
|
-
# Alguns bancos tem o agência, enquanto outros não possuem.
|
89
|
-
#
|
90
|
-
attr_accessor :digito_agencia
|
91
|
-
|
92
84
|
# Número da Conta corrente. Campo auto explicativo.
|
93
85
|
#
|
94
86
|
attr_accessor :conta_corrente
|
95
87
|
|
96
|
-
# Dígito da conta corrente. Campo auto explicativo.
|
97
|
-
# Alguns bancos tem o dígito da conta corrente outros não.
|
98
|
-
#
|
99
|
-
attr_accessor :digito_conta_corrente
|
100
|
-
|
101
88
|
# Código da moeda. Campo auto explicativo.
|
102
89
|
# Padrão '9' (Real).
|
103
90
|
#
|
@@ -168,24 +155,46 @@ module BoletoBancario
|
|
168
155
|
#
|
169
156
|
attr_accessor :local_pagamento
|
170
157
|
|
171
|
-
#
|
158
|
+
# Aceitar após o vencimento.
|
159
|
+
# Nessa gem utilizamos o campo aceite como Boolean.
|
160
|
+
# Obviamente, true para 'S' e false/nil para 'N'.
|
161
|
+
#
|
162
|
+
attr_accessor :aceite
|
163
|
+
|
164
|
+
# Campos de instruções.
|
165
|
+
# São permitidas até seis linhas de instruções a serem mostradas no boleto
|
166
|
+
|
167
|
+
attr_accessor :instrucoes1,
|
168
|
+
:instrucoes2,
|
169
|
+
:instrucoes3,
|
170
|
+
:instrucoes4,
|
171
|
+
:instrucoes5,
|
172
|
+
:instrucoes6
|
173
|
+
|
174
|
+
# Caminho do logo do banco.
|
175
|
+
#
|
176
|
+
attr_accessor :logo
|
177
|
+
|
178
|
+
# Tamanho maximo do valor do documento do boleto.
|
179
|
+
# Acredito que não existirá valor de documento nesse valor,
|
180
|
+
# <b>porém a biblioteca precisa manter a consistência</b>.
|
181
|
+
#
|
182
|
+
# No código de barras o valor do documento precisa
|
183
|
+
# ter um tamanho de 8 caracteres para os reais (acrescentando zeros à esquerda),
|
184
|
+
# e 2 caracteres nos centavos (acrescentando zeros à esquerda).
|
185
|
+
#
|
186
|
+
# @return [Float] 99999999.99
|
172
187
|
#
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
# Instruções
|
177
|
-
# Código de barras como imagem (usar a gem Barby)
|
178
|
-
# Data do vencimento formatado
|
179
|
-
# Data do documento
|
180
|
-
# Data do documento formatado
|
181
|
-
# Data do processamento
|
182
|
-
# Data do processamento formatado
|
188
|
+
def self.valor_documento_tamanho_maximo
|
189
|
+
99999999.99
|
190
|
+
end
|
183
191
|
|
184
192
|
# Validações de todos os boletos
|
185
193
|
#
|
186
194
|
validates :carteira, :valor_documento, :numero_documento, :data_vencimento, presence: true
|
187
195
|
validates :cedente, :endereco_cedente, presence: true
|
188
196
|
validates :sacado, :documento_sacado, presence: true
|
197
|
+
validates :valor_documento, numericality: { less_than_or_equal_to: ->(object) { object.class.valor_documento_tamanho_maximo } }
|
189
198
|
validate :data_vencimento_deve_ser_uma_data
|
190
199
|
|
191
200
|
# Passing the attributes as Hash or block
|
@@ -197,7 +206,6 @@ module BoletoBancario
|
|
197
206
|
# @option options [String] :documento_cedente
|
198
207
|
# @option options [String] :endereco_cedente
|
199
208
|
# @option options [String] :conta_corrente
|
200
|
-
# @option options [String] :digito_conta_corrente
|
201
209
|
# @option options [String] :agencia
|
202
210
|
# @option options [Date] :data_vencimento
|
203
211
|
# @option options [String] :numero_documento
|
@@ -253,6 +261,7 @@ module BoletoBancario
|
|
253
261
|
# bradesco.especie = 'outra_especie_que_nao_seja_em_reais'
|
254
262
|
# bradesco.especie_documento = 'outra_especie_do_documento'
|
255
263
|
# bradesco.data_documento = Date.tomorrow
|
264
|
+
# bradesco.aceite = false
|
256
265
|
# end
|
257
266
|
#
|
258
267
|
# @return [Hash] Código da Moeda sendo '9' (real). Espécie sendo 'R$' (real).
|
@@ -263,7 +272,8 @@ module BoletoBancario
|
|
263
272
|
:especie => 'R$',
|
264
273
|
:especie_documento => 'DM',
|
265
274
|
:local_pagamento => 'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO',
|
266
|
-
:data_documento => Date.today
|
275
|
+
:data_documento => Date.today,
|
276
|
+
:aceite => true
|
267
277
|
}
|
268
278
|
end
|
269
279
|
|
@@ -336,7 +346,17 @@ module BoletoBancario
|
|
336
346
|
# @return [String] Precisa retornar 10 dígitos para o código de barras (incluindo os centavos).
|
337
347
|
#
|
338
348
|
def valor_formatado_para_codigo_de_barras
|
339
|
-
valor_documento.
|
349
|
+
valor_documento_formatado = (Integer(valor_documento.to_f * 100) / Float(100))
|
350
|
+
real, centavos = valor_documento_formatado.to_s.split(/\./)
|
351
|
+
"#{real.rjust(8, '0')}#{centavos.ljust(2, '0')}"
|
352
|
+
end
|
353
|
+
|
354
|
+
# Força a carteira a retornar o valor como string
|
355
|
+
#
|
356
|
+
# @return [String]
|
357
|
+
#
|
358
|
+
def carteira
|
359
|
+
@carteira.to_s if @carteira.present?
|
340
360
|
end
|
341
361
|
|
342
362
|
# Embora o padrão seja mostrar o número da carteira no boleto,
|
@@ -349,6 +369,19 @@ module BoletoBancario
|
|
349
369
|
carteira
|
350
370
|
end
|
351
371
|
|
372
|
+
# Se o aceite for 'true', retorna 'S'.
|
373
|
+
# Retorna 'N', caso contrário.
|
374
|
+
#
|
375
|
+
# @return [String]
|
376
|
+
#
|
377
|
+
def aceite_formatado
|
378
|
+
if @aceite.present?
|
379
|
+
'S'
|
380
|
+
else
|
381
|
+
'N'
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
352
385
|
# Fator de vencimento que é calculado a partir de uma data base.
|
353
386
|
# Veja <b>FatorVencimento</b> para mais detalhes.
|
354
387
|
#
|
@@ -469,7 +502,7 @@ module BoletoBancario
|
|
469
502
|
false
|
470
503
|
end
|
471
504
|
|
472
|
-
#
|
505
|
+
# Método usado para verificar se deve realizar a validação de tamanho do campo 'agência'.
|
473
506
|
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
474
507
|
#
|
475
508
|
# @return [True]
|
@@ -478,7 +511,7 @@ module BoletoBancario
|
|
478
511
|
true
|
479
512
|
end
|
480
513
|
|
481
|
-
#
|
514
|
+
# Método usado para verificar se deve realizar a validação de tamanho do campo 'conta_corrente'.
|
482
515
|
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
483
516
|
#
|
484
517
|
# @return [True]
|
@@ -487,7 +520,7 @@ module BoletoBancario
|
|
487
520
|
true
|
488
521
|
end
|
489
522
|
|
490
|
-
#
|
523
|
+
# Método usado para verificar se deve realizar a validação de tamanho do campo 'codigo_cedente'.
|
491
524
|
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
492
525
|
#
|
493
526
|
# @return [True]
|
@@ -496,7 +529,7 @@ module BoletoBancario
|
|
496
529
|
true
|
497
530
|
end
|
498
531
|
|
499
|
-
#
|
532
|
+
# Método usado para verificar se deve realizar a validação de tamanho do campo 'numero_documento'.
|
500
533
|
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
501
534
|
#
|
502
535
|
# @return [True]
|
@@ -505,7 +538,7 @@ module BoletoBancario
|
|
505
538
|
true
|
506
539
|
end
|
507
540
|
|
508
|
-
#
|
541
|
+
# Método usado para verificar se deve realizar a validação do campo 'carteira'.
|
509
542
|
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
510
543
|
#
|
511
544
|
# @return [True]
|
@@ -522,4 +555,4 @@ module BoletoBancario
|
|
522
555
|
end
|
523
556
|
end
|
524
557
|
end
|
525
|
-
end
|
558
|
+
end
|
@@ -42,7 +42,7 @@ module BoletoBancario
|
|
42
42
|
# Bradesco.new do |boleto|
|
43
43
|
# boleto.conta_corrente = '89755'
|
44
44
|
# boleto.agencia = '0097'
|
45
|
-
# boleto.carteira = '
|
45
|
+
# boleto.carteira = '03'
|
46
46
|
# boleto.numero_documento = '12345678'
|
47
47
|
# boleto.codigo_cedente = '909014'
|
48
48
|
# end
|
@@ -112,29 +112,26 @@ module BoletoBancario
|
|
112
112
|
11
|
113
113
|
end
|
114
114
|
|
115
|
-
#
|
116
|
-
# O tamanho máximo é justamente 2 porque no código de barras só é permitido 2 posições para este campo.
|
115
|
+
# <b>Carteiras suportadas.</b>
|
117
116
|
#
|
118
|
-
# <b>Método criado
|
117
|
+
# <b>Método criado para validar se a carteira informada é suportada.</b>
|
119
118
|
#
|
120
|
-
# @return [
|
119
|
+
# @return [Array]
|
121
120
|
#
|
122
|
-
def self.
|
123
|
-
|
121
|
+
def self.carteiras_suportadas
|
122
|
+
%w[03 06 09 19 21 22]
|
124
123
|
end
|
125
124
|
|
126
125
|
validates :agencia, :digito_agencia, :conta_corrente, :digito_conta_corrente, presence: true
|
127
126
|
|
128
|
-
# Validações
|
127
|
+
# Validações para os campos abaixo:
|
129
128
|
#
|
130
129
|
# * Agencia
|
131
|
-
# * Digito verificador da agencia
|
132
130
|
# * Conta corrente
|
133
|
-
# * Digito verificador da conta corrente
|
134
131
|
# * Número do documento
|
135
132
|
# * Carteira
|
136
133
|
#
|
137
|
-
# Se você quiser sobrescrever os
|
134
|
+
# Se você quiser sobrescrever os metodos, ficará a sua responsabilidade.
|
138
135
|
# Basta você sobrescrever os métodos de validação:
|
139
136
|
#
|
140
137
|
# class Bradesco < BoletoBancario::Core::Bradesco
|
@@ -150,8 +147,8 @@ module BoletoBancario
|
|
150
147
|
# 9
|
151
148
|
# end
|
152
149
|
#
|
153
|
-
# def self.
|
154
|
-
#
|
150
|
+
# def self.carteiras_suportadas
|
151
|
+
# %w[03 06 09 19 21 22]
|
155
152
|
# end
|
156
153
|
# end
|
157
154
|
#
|
@@ -159,12 +156,11 @@ module BoletoBancario
|
|
159
156
|
# Você precisará analisar o efeito no #codigo_de_barras, #nosso_numero e na
|
160
157
|
# #linha_digitável (ambos podem ser sobreescritos também).
|
161
158
|
#
|
162
|
-
validates :digito_agencia, length: { maximum: 1 }
|
163
|
-
validates :digito_conta_corrente, length: { maximum: 1 }
|
164
159
|
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
165
160
|
validates :conta_corrente, length: { maximum: tamanho_maximo_conta_corrente }, if: :deve_validar_conta_corrente?
|
166
161
|
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
167
|
-
|
162
|
+
|
163
|
+
validates :carteira, inclusion: { in: ->(object) { object.class.carteiras_suportadas } }, if: :deve_validar_carteira?
|
168
164
|
|
169
165
|
# @return [String] 7 caracteres
|
170
166
|
#
|
@@ -220,6 +216,22 @@ module BoletoBancario
|
|
220
216
|
'2'
|
221
217
|
end
|
222
218
|
|
219
|
+
# Dígito do código da agência. Precisa mostrar esse dígito no boleto.
|
220
|
+
#
|
221
|
+
# @return [String] Dígito da agência calculado usando o Modulo11FatorDe9a2.
|
222
|
+
#
|
223
|
+
def digito_agencia
|
224
|
+
Modulo11FatorDe9a2.new(agencia)
|
225
|
+
end
|
226
|
+
|
227
|
+
# Dígito da conta corrente. Precisa mostrar esse dígito no boleto.
|
228
|
+
#
|
229
|
+
# @return [String] Dígito da conta corrente calculado apartir do Modulo11FatorDe9a2.
|
230
|
+
#
|
231
|
+
def digito_conta_corrente
|
232
|
+
Modulo11FatorDe9a2.new(conta_corrente)
|
233
|
+
end
|
234
|
+
|
223
235
|
# Campo preenchido com:
|
224
236
|
#
|
225
237
|
# - Agência com 4 caracteres - digito da agência / Conta de Cobrança com 7 caracteres - Digito da Conta
|
@@ -0,0 +1,233 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BoletoBancario
|
3
|
+
module Core
|
4
|
+
# Implementação de emissão de boleto bancário pela Caixa Econômica Federal.
|
5
|
+
#
|
6
|
+
# === Documentação Implementada
|
7
|
+
#
|
8
|
+
# A documentação na qual essa implementação foi baseada está localizada na pasta
|
9
|
+
# 'documentacoes_dos_boletos/caixa' dentro dessa biblioteca.
|
10
|
+
# === Carteiras suportadas
|
11
|
+
#
|
12
|
+
# Segue abaixo as carteiras suportadas da Caixa Econômica Federal <b>seguindo a documentação</b>:
|
13
|
+
#
|
14
|
+
# _________________________________________________________________________
|
15
|
+
# | Carteira | Descrição | Testada/Homologada no banco |
|
16
|
+
# | 14 | Cobrança Simples com registro | Esperando Contribuição |
|
17
|
+
# | 24 | Cobrança Simples sem registro | Esperando Contribuição |
|
18
|
+
# |_________________________________________________________________________|
|
19
|
+
#
|
20
|
+
class Caixa < Boleto
|
21
|
+
# Tamanho máximo de uma agência na Caixa Econômica Federal.
|
22
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
23
|
+
#
|
24
|
+
# @return [Fixnum] 4
|
25
|
+
#
|
26
|
+
def self.tamanho_maximo_agencia
|
27
|
+
4
|
28
|
+
end
|
29
|
+
|
30
|
+
# Tamanho máximo do código do cedente emitido no Boleto.
|
31
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
32
|
+
#
|
33
|
+
# @return [Fixnum] 6
|
34
|
+
#
|
35
|
+
def self.tamanho_maximo_codigo_cedente
|
36
|
+
6
|
37
|
+
end
|
38
|
+
|
39
|
+
# <b>Carteiras suportadas.</b>
|
40
|
+
# <b>Método criado para validar se a carteira informada é suportada.</b>
|
41
|
+
#
|
42
|
+
# @return [Array]
|
43
|
+
#
|
44
|
+
def self.carteiras_suportadas
|
45
|
+
%w[14 24]
|
46
|
+
end
|
47
|
+
|
48
|
+
# Tamanho máximo do número do documento emitido no Boleto.
|
49
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
50
|
+
#
|
51
|
+
# @return [Fixnum] 15
|
52
|
+
#
|
53
|
+
def self.tamanho_maximo_numero_documento
|
54
|
+
15
|
55
|
+
end
|
56
|
+
|
57
|
+
# Tamanho maximo do valor do documento do boleto.
|
58
|
+
# O valor maximo descrito na decumentação é de 9999999.99
|
59
|
+
#
|
60
|
+
# @return [Float] 9999999.99
|
61
|
+
#
|
62
|
+
def self.valor_documento_tamanho_maximo
|
63
|
+
9999999.99
|
64
|
+
end
|
65
|
+
|
66
|
+
# Validações para os campos abaixo:
|
67
|
+
#
|
68
|
+
# * Agencia
|
69
|
+
# * Conta Corrente
|
70
|
+
# * Carteira
|
71
|
+
# * Número do documento
|
72
|
+
#
|
73
|
+
# Se você quiser sobrescrever os metodos, <b>ficará a sua responsabilidade.</b>
|
74
|
+
# Basta você sobrescrever os métodos de validação:
|
75
|
+
#
|
76
|
+
# class Santander < BoletoBancario::Core::Santander
|
77
|
+
# def self.tamanho_maximo_agencia
|
78
|
+
# 5
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# def self.tamanho_maximo_codigo_cedente
|
82
|
+
# 7
|
83
|
+
# end
|
84
|
+
#
|
85
|
+
# def self.tamanho_maximo_numero_documento
|
86
|
+
# 10
|
87
|
+
# end
|
88
|
+
#
|
89
|
+
# def self.carteiras_suportadas
|
90
|
+
# %w[10 53]
|
91
|
+
# end
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
95
|
+
# Talvez você precise analisar o efeito no #codigo_de_barras e na #linha_digitável (ambos podem ser
|
96
|
+
# sobreescritos também).
|
97
|
+
#
|
98
|
+
validates :agencia, :codigo_cedente, presence: true
|
99
|
+
|
100
|
+
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
101
|
+
validates :codigo_cedente, length: { maximum: tamanho_maximo_codigo_cedente }, if: :deve_validar_codigo_cedente?
|
102
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
103
|
+
|
104
|
+
validates :carteira, inclusion: { in: ->(object) { object.class.carteiras_suportadas } }, if: :deve_validar_carteira?
|
105
|
+
|
106
|
+
# @return [String] 4 caracteres
|
107
|
+
#
|
108
|
+
def agencia
|
109
|
+
@agencia.to_s.rjust(4, '0') if @agencia.present?
|
110
|
+
end
|
111
|
+
|
112
|
+
# @return [String] 6 caracteres
|
113
|
+
#
|
114
|
+
def codigo_cedente
|
115
|
+
@codigo_cedente.to_s.rjust(6, '0') if @codigo_cedente.present?
|
116
|
+
end
|
117
|
+
|
118
|
+
# @return [String] 15 caracteres
|
119
|
+
#
|
120
|
+
def numero_documento
|
121
|
+
@numero_documento.to_s.rjust(15, '0') if @numero_documento.present?
|
122
|
+
end
|
123
|
+
|
124
|
+
# Formata a carteira dependendo se ela é registrada ou não.
|
125
|
+
#
|
126
|
+
# Para cobrança COM registro usar: <b>RG</b>
|
127
|
+
# Para Cobrança SEM registro usar: <b>SR</b>
|
128
|
+
#
|
129
|
+
# @return [String]
|
130
|
+
#
|
131
|
+
def carteira_formatada
|
132
|
+
if @carteira.to_s.in?(carteiras_com_registro)
|
133
|
+
"RG"
|
134
|
+
else
|
135
|
+
'SR'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# Retorna as carteiras com registro da Caixa Econômica Federal.
|
140
|
+
# <b>Você pode sobrescrever esse método na subclasse caso exista mais
|
141
|
+
# carteiras com registro na Caixa Econômica Federal.</b>
|
142
|
+
#
|
143
|
+
# @return [Array]
|
144
|
+
#
|
145
|
+
def carteiras_com_registro
|
146
|
+
%w(14)
|
147
|
+
end
|
148
|
+
|
149
|
+
def tipo_cobranca
|
150
|
+
carteira.first if carteira.present?
|
151
|
+
end
|
152
|
+
|
153
|
+
def identificador_de_emissao
|
154
|
+
carteira.last if carteira.present?
|
155
|
+
end
|
156
|
+
|
157
|
+
# @return [String] Código do Banco descrito na documentação.
|
158
|
+
#
|
159
|
+
def codigo_banco
|
160
|
+
'104'
|
161
|
+
end
|
162
|
+
|
163
|
+
# @return [String] Dígito do código do banco descrito na documentação.
|
164
|
+
#
|
165
|
+
def digito_codigo_banco
|
166
|
+
'0'
|
167
|
+
end
|
168
|
+
|
169
|
+
# Campo Agência / Código do Cedente (Número fornecido pelo Banco)
|
170
|
+
#
|
171
|
+
# @return [String]
|
172
|
+
#
|
173
|
+
def agencia_codigo_cedente
|
174
|
+
"#{agencia} / #{codigo_cedente}-#{codigo_cedente_dv}"
|
175
|
+
end
|
176
|
+
|
177
|
+
def codigo_cedente_dv
|
178
|
+
Modulo11FatorDe2a9RestoZero.new(codigo_cedente)
|
179
|
+
end
|
180
|
+
|
181
|
+
# Mostra o campo nosso número calculando o dígito verificador do nosso número.
|
182
|
+
#
|
183
|
+
# @return [String]
|
184
|
+
#
|
185
|
+
def nosso_numero
|
186
|
+
"#{carteira}#{numero_documento}-#{nosso_numero_dv}"
|
187
|
+
end
|
188
|
+
|
189
|
+
def nosso_numero_dv
|
190
|
+
Modulo11FatorDe2a9RestoZero.new("#{carteira}#{numero_documento}")
|
191
|
+
end
|
192
|
+
|
193
|
+
def nosso_numero_de3a5
|
194
|
+
nosso_numero[2..4] if nosso_numero.present?
|
195
|
+
end
|
196
|
+
|
197
|
+
def nosso_numero_de6a8
|
198
|
+
nosso_numero[5..7] if nosso_numero.present?
|
199
|
+
end
|
200
|
+
|
201
|
+
def nosso_numero_de9a17
|
202
|
+
nosso_numero[8..16] if nosso_numero.present?
|
203
|
+
end
|
204
|
+
|
205
|
+
|
206
|
+
# === Código de barras do banco
|
207
|
+
#
|
208
|
+
# ________________________________________________________________________________________
|
209
|
+
# | Posição | Tamanho | Descrição |
|
210
|
+
# |----------|---------|------------------------------------------------------------------|
|
211
|
+
# | 20 - 25 | 06 | Código do Beneficiário |
|
212
|
+
# | 26 - 26 | 01 | DV do Código do Beneficiário |
|
213
|
+
# | 27 – 29 | 03 | Nosso Número - 3ª a 5ª posição do Nosso Número |
|
214
|
+
# | 30 – 30 | 01 | Constante 1, tipo de cobrança (1-Registrada / 2-Sem Registro) |
|
215
|
+
# | 31 – 33 | 03 | Nosso Número - 6ª a 8ª posição do Nosso Número |
|
216
|
+
# | 34 – 34 | 01 | Constante 2, identificador de emissão do boleto (4-Beneficiário) |
|
217
|
+
# | 35 – 43 | 09 | Nosso Número - 9ª a 17ª posição do Nosso Número |
|
218
|
+
# | 44 – 44 | 01 | DV do Campo Livre |
|
219
|
+
# -----------------------------------------------------------------------------------------
|
220
|
+
#
|
221
|
+
# @return [String]
|
222
|
+
#
|
223
|
+
def codigo_de_barras_do_banco
|
224
|
+
codigo = "#{codigo_cedente}#{codigo_cedente_dv}#{nosso_numero_de3a5}#{tipo_cobranca}#{nosso_numero_de6a8}"
|
225
|
+
codigo << "#{identificador_de_emissao}#{nosso_numero_de9a17}"
|
226
|
+
|
227
|
+
codigo_dv = Modulo11FatorDe2a9RestoZero.new(codigo)
|
228
|
+
|
229
|
+
"#{codigo}#{codigo_dv}"
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|