boleto_bancario 0.0.1.beta → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|