boleto_bancario 0.0.1.beta
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.
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.rvmrc +1 -0
- data/Changelog.markdown +6 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/Planning.markdown +131 -0
- data/README.markdown +208 -0
- data/Rakefile +9 -0
- data/TODO.markdown +5 -0
- data/boleto_bancario.gemspec +25 -0
- data/documentacoes_dos_boletos/Bradesco/Manual_BRADESCO.PDF +0 -0
- data/lib/boleto_bancario/calculos/digitos.rb +35 -0
- data/lib/boleto_bancario/calculos/fator_vencimento.rb +87 -0
- data/lib/boleto_bancario/calculos/fatores_de_multiplicacao.rb +67 -0
- data/lib/boleto_bancario/calculos/linha_digitavel.rb +158 -0
- data/lib/boleto_bancario/calculos/modulo10.rb +83 -0
- data/lib/boleto_bancario/calculos/modulo11.rb +54 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de2a7.rb +97 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de2a9.rb +83 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero.rb +29 -0
- data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +101 -0
- data/lib/boleto_bancario/core/banco_brasil.rb +532 -0
- data/lib/boleto_bancario/core/boleto.rb +525 -0
- data/lib/boleto_bancario/core/bradesco.rb +285 -0
- data/lib/boleto_bancario/core/itau.rb +455 -0
- data/lib/boleto_bancario/core/santander.rb +274 -0
- data/lib/boleto_bancario/version.rb +4 -0
- data/lib/boleto_bancario.rb +83 -0
- data/spec/boleto_bancario/calculos/digitos_spec.rb +19 -0
- data/spec/boleto_bancario/calculos/fator_vencimento_spec.rb +59 -0
- data/spec/boleto_bancario/calculos/fatores_de_multiplicacao_spec.rb +69 -0
- data/spec/boleto_bancario/calculos/linha_digitavel_spec.rb +57 -0
- data/spec/boleto_bancario/calculos/modulo10_spec.rb +49 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a7_spec.rb +43 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_resto_zero_spec.rb +39 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +61 -0
- data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x_spec.rb +37 -0
- data/spec/boleto_bancario/calculos/modulo11_spec.rb +19 -0
- data/spec/boleto_bancario/core/banco_brasil_spec.rb +383 -0
- data/spec/boleto_bancario/core/boleto_spec.rb +102 -0
- data/spec/boleto_bancario/core/bradesco_spec.rb +170 -0
- data/spec/boleto_bancario/core/itau_spec.rb +336 -0
- data/spec/boleto_bancario/core/santander_spec.rb +135 -0
- data/spec/shared_examples/boleto_bancario_shared_example.rb +164 -0
- data/spec/spec_helper.rb +14 -0
- metadata +221 -0
@@ -0,0 +1,532 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BoletoBancario
|
3
|
+
module Core
|
4
|
+
# Implementação de emissão de boleto bancário pelo Banco do Brasil.
|
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/banco_brasil' dentro dessa biblioteca.
|
10
|
+
#
|
11
|
+
# === Experimental
|
12
|
+
#
|
13
|
+
# O Boleto do Banco do Brasil ainda está categorizado como experimental. POr favor ajude a validar e homologar
|
14
|
+
# esse banco para as carteiras suportadas conforme descrito abaixo.
|
15
|
+
#
|
16
|
+
# === Contrato das classes de emissão de boletos
|
17
|
+
#
|
18
|
+
# Para ver o "<b>contrato</b>" da Emissão de Boletos (geração de código de barras, linha digitável, etc) veja
|
19
|
+
# a classe BoletoBancario::Core::Boleto.
|
20
|
+
#
|
21
|
+
# === Carteiras suportadas
|
22
|
+
#
|
23
|
+
# Segue abaixo as carteiras suportadas do Banco do Brasil <b>seguindo a documentação</b>:
|
24
|
+
#
|
25
|
+
# ________________________________________________________________________________________________________
|
26
|
+
# | Carteira | Descrição | Testada/Homologada no banco |
|
27
|
+
# | 12 | Código do cedente de 6 dígitos | Esperando Contribuição |
|
28
|
+
# | 16 | Código do cedente de 6 dígitos e nosso numero com 17 dígitos | Esperando Contribuição |
|
29
|
+
# | 16 | Código do cedente de 4 dígitos | Esperando Contribuição |
|
30
|
+
# | 16 | Código do cedente de 6 dígitos | Esperando Contribuição |
|
31
|
+
# | 17 | Código do cedente de 7 dígitos | Esperando Contribuição |
|
32
|
+
# | 17 | Código do cedente de 8 dígitos | Esperando Contribuição |
|
33
|
+
# | 18 | Código do cedente de 4 dígitos | Esperando Contribuição |
|
34
|
+
# | 18 | Código do cedente de 6 dígitos | Esperando Contribuição |
|
35
|
+
# | 18 | Código do cedente de 6 dígitos e nosso numero com 17 dígitos | Esperando Contribuição |
|
36
|
+
# | 18 | Código do cedente de 7 dígitos | Esperando Contribuição |
|
37
|
+
# | 18 | Código do cedente de 8 dígitos | Esperando Contribuição |
|
38
|
+
# ---------------------------------------------------------------------------------------------------------
|
39
|
+
#
|
40
|
+
# # <b>OBS.: Seja um contribuidor dessa gem. Contribua para homologar os boletos e as
|
41
|
+
# devidas carteiras junto ao banco Bradesco.</b>
|
42
|
+
#
|
43
|
+
class BancoBrasil < Boleto
|
44
|
+
# Tamanho máximo de uma agência no Banco do Brasil.
|
45
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
46
|
+
#
|
47
|
+
# @return [Fixnum] 4
|
48
|
+
#
|
49
|
+
def self.tamanho_maximo_agencia
|
50
|
+
4
|
51
|
+
end
|
52
|
+
|
53
|
+
# Tamanho máximo de uma conta corrente no Banco do Brasil.
|
54
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
55
|
+
#
|
56
|
+
# @return [Fixnum] 8
|
57
|
+
#
|
58
|
+
def self.tamanho_maximo_conta_corrente
|
59
|
+
8
|
60
|
+
end
|
61
|
+
|
62
|
+
# <b>Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 4 dígitos.</b>
|
63
|
+
#
|
64
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
65
|
+
#
|
66
|
+
# @return [Fixnum] 7
|
67
|
+
#
|
68
|
+
def self.tamanho_maximo_numero_documento_com_codigo_cedente_quatro_digitos
|
69
|
+
7
|
70
|
+
end
|
71
|
+
|
72
|
+
# <b>Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 6 dígitos.</b>
|
73
|
+
#
|
74
|
+
# === Convenção
|
75
|
+
#
|
76
|
+
# Sempre que você for usar o número do documento com 17 dígitos nas carteiras 16 ou 18 com
|
77
|
+
# código cedente de 6 dígitos, <b>fica a seu cargo colocar os 17 dígitos do número do documento</b>.
|
78
|
+
#
|
79
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
80
|
+
#
|
81
|
+
# @return [Fixnum] 17 ou 5
|
82
|
+
#
|
83
|
+
#
|
84
|
+
def self.tamanho_maximo_numero_documento_com_codigo_cedente_seis_digitos
|
85
|
+
5
|
86
|
+
end
|
87
|
+
|
88
|
+
# <b>Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 7 dígitos.</b>
|
89
|
+
#
|
90
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
91
|
+
#
|
92
|
+
# @return [Fixnum] 10
|
93
|
+
#
|
94
|
+
def self.tamanho_maximo_numero_documento_com_codigo_cedente_sete_digitos
|
95
|
+
10
|
96
|
+
end
|
97
|
+
|
98
|
+
# <b>Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 8 dígitos.</b>
|
99
|
+
#
|
100
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
101
|
+
#
|
102
|
+
# @return [Fixnum] 9
|
103
|
+
#
|
104
|
+
def self.tamanho_maximo_numero_documento_com_codigo_cedente_oito_digitos
|
105
|
+
9
|
106
|
+
end
|
107
|
+
|
108
|
+
# <b>Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 6 dígitos,
|
109
|
+
# ser carteira 16 ou 18 e ter o nosso número com 17 dígitos.</b>
|
110
|
+
#
|
111
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
112
|
+
#
|
113
|
+
# @return [Fixnum] 9
|
114
|
+
#
|
115
|
+
def self.tamanho_maximo_numero_documento_dezessete_digitos
|
116
|
+
17
|
117
|
+
end
|
118
|
+
|
119
|
+
validates :codigo_cedente, :agencia, :digito_agencia, :conta_corrente, :digito_conta_corrente, presence: true
|
120
|
+
|
121
|
+
validates :digito_agencia, length: { maximum: 1 }
|
122
|
+
validates :digito_conta_corrente, length: { maximum: 1 }
|
123
|
+
|
124
|
+
# Validações de Agencia e Conta corrente.
|
125
|
+
#
|
126
|
+
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
127
|
+
validates :conta_corrente, length: { maximum: tamanho_maximo_conta_corrente }, if: :deve_validar_conta_corrente?
|
128
|
+
|
129
|
+
# Validações do número do documento.
|
130
|
+
#
|
131
|
+
# === Número do Documento e Código do Cedente.
|
132
|
+
#
|
133
|
+
# A validação do número do documento, varia, dependendo da quantidade de dígitos do código do cedente.
|
134
|
+
#
|
135
|
+
# <b>Para mais detalhes, veja o método #numero_documento, para entender essas validações</b>.
|
136
|
+
#
|
137
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento_com_codigo_cedente_quatro_digitos }, if: :deve_validar_com_codigo_cedente_quatro_digitos?
|
138
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento_com_codigo_cedente_sete_digitos }, if: :deve_validar_com_codigo_cedente_sete_digitos?
|
139
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento_com_codigo_cedente_oito_digitos }, if: :deve_validar_com_codigo_cedente_oito_digitos?
|
140
|
+
|
141
|
+
# Possui 2 tipos de validações de código do cedente com 6 dígitos:
|
142
|
+
#
|
143
|
+
# 1) Quando for nosso número com onze posições (6 do código cedente + 5 do número do documento).
|
144
|
+
# 2) Quando for nosso número com dezessete posições (17 do número do documento).
|
145
|
+
#
|
146
|
+
#
|
147
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento_com_codigo_cedente_seis_digitos }, if: :deve_validar_com_codigo_cedente_seis_digitos?
|
148
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento_dezessete_digitos }, if: :deve_validar_com_nosso_numero_dezessete_digitos?
|
149
|
+
|
150
|
+
validate :validacao_tamanho_de_digitos_codigo_cedente, if: :deve_validar_codigo_cedente?
|
151
|
+
|
152
|
+
# @return [String] 4 caracteres
|
153
|
+
#
|
154
|
+
def agencia
|
155
|
+
@agencia.to_s.rjust(4, '0') if @agencia.present?
|
156
|
+
end
|
157
|
+
|
158
|
+
# @return [String] 8 caracteres
|
159
|
+
#
|
160
|
+
def conta_corrente
|
161
|
+
@conta_corrente.to_s.rjust(8, '0') if @conta_corrente.present?
|
162
|
+
end
|
163
|
+
|
164
|
+
# === Número do Documento VS. Código do Cedente
|
165
|
+
#
|
166
|
+
# No caso do Banco do Brasil, o tamanho do código do cedente ditará o tamanho do número do documento.
|
167
|
+
# Ou seja, <b>quando o código do cedente for X, o tamanho do número do documento deverá ser Y</b>.
|
168
|
+
# Segue abaixo:
|
169
|
+
#
|
170
|
+
# ______________________________________________________________
|
171
|
+
# | Tamanho do Código Cedente | Tamanho do Número do documento |
|
172
|
+
# |----------------------------|--------------------------------|
|
173
|
+
# | 04 | 07 |
|
174
|
+
# | 06 | 05 |
|
175
|
+
# | 07 | 10 |
|
176
|
+
# | 08 | 09 |
|
177
|
+
# ---------------------------------------------------------------
|
178
|
+
#
|
179
|
+
# <b>OBS.: Quando o tamanho do código do cedente for 6, o número do documento
|
180
|
+
# pode ter 17 dígitos, se for usado com a carteira 16 ou 18.</b>
|
181
|
+
#
|
182
|
+
# @return [String]
|
183
|
+
#
|
184
|
+
def numero_documento
|
185
|
+
if @numero_documento.present?
|
186
|
+
@numero_documento.to_s.rjust(numero_documento_esperado[tamanho_codigo_cedente], '0')
|
187
|
+
else
|
188
|
+
@numero_documento
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
# Para ficar documentado preferi criar um método onde retorna o tamanho esperado
|
193
|
+
# do número do documento dependendo do tamanho do código do cedente.
|
194
|
+
#
|
195
|
+
# <b>Para mais detalhes veja o método #numero_documento dessa classe.</b>
|
196
|
+
#
|
197
|
+
# @return [Hash] As chaves significam o tamanho do código cedente e o valor o tamanho esperado do número do documento.
|
198
|
+
#
|
199
|
+
def numero_documento_esperado
|
200
|
+
{ 0 => 0, 4 => 7, 6 => 5, 7 => 10, 8 => 9 }
|
201
|
+
end
|
202
|
+
|
203
|
+
# @return [String] Código do Banco descrito na documentação.
|
204
|
+
#
|
205
|
+
def codigo_banco
|
206
|
+
'001'
|
207
|
+
end
|
208
|
+
|
209
|
+
# Dígito do código do banco. Precisa mostrar esse dígito no boleto.
|
210
|
+
#
|
211
|
+
# @return [String] Dígito do código do banco descrito na documentação.
|
212
|
+
#
|
213
|
+
def digito_codigo_banco
|
214
|
+
'9'
|
215
|
+
end
|
216
|
+
|
217
|
+
# Campo Agencia / Código do Cedente
|
218
|
+
# Retorna formatado a agência, digito da agência, número da conta corrente e dígito da conta.
|
219
|
+
#
|
220
|
+
# @return [String]
|
221
|
+
#
|
222
|
+
def agencia_codigo_cedente
|
223
|
+
"#{agencia}-#{digito_agencia} / #{conta_corrente}-#{digito_conta_corrente}"
|
224
|
+
end
|
225
|
+
|
226
|
+
# === Composição do nosso número
|
227
|
+
#
|
228
|
+
# ==== Código do Cedente de 4 dígitos
|
229
|
+
#
|
230
|
+
# ___________________________________________________________
|
231
|
+
# | Posição | Tamanho | Descrição |
|
232
|
+
# |----------|---------|-------------------------------------|
|
233
|
+
# | 01-04 | 04 | Código do cedente de 4 dígitos |
|
234
|
+
# | 05-11 | 07 | Nosso número livre do cliente |
|
235
|
+
# | 12 | 01 | Dígito Verificador do Nosso número |
|
236
|
+
# ------------------------------------------------------------
|
237
|
+
#
|
238
|
+
# ==== Código do Cedente de 6 dígitos
|
239
|
+
#
|
240
|
+
# ___________________________________________________________
|
241
|
+
# | Posição | Tamanho | Descrição |
|
242
|
+
# |----------|---------|-------------------------------------|
|
243
|
+
# | 01-06 | 06 | Código do cedente de 6 dígitos |
|
244
|
+
# | 07-11 | 05 | Nosso número livre do cliente |
|
245
|
+
# | 12 | 01 | Dígito Verificador do Nosso número |
|
246
|
+
# ------------------------------------------------------------
|
247
|
+
#
|
248
|
+
# ==== Código do Cedente de 7 dígitos
|
249
|
+
#
|
250
|
+
# ___________________________________________________________
|
251
|
+
# | Posição | Tamanho | Descrição |
|
252
|
+
# |----------|---------|-------------------------------------|
|
253
|
+
# | 01-07 | 07 | Código do cedente de 7 dígitos |
|
254
|
+
# | 08-17 | 10 | Nosso número livre do cliente |
|
255
|
+
# ------------------------------------------------------------
|
256
|
+
#
|
257
|
+
# <b>Obs.: Não existe Dígito Verificador na composição do nosso-número para convênios
|
258
|
+
# de sete posições.</b>
|
259
|
+
#
|
260
|
+
# ==== Código do Cedente de 8 dígitos
|
261
|
+
#
|
262
|
+
# ___________________________________________________________
|
263
|
+
# | Posição | Tamanho | Descrição |
|
264
|
+
# |----------|---------|-------------------------------------|
|
265
|
+
# | 01-08 | 08 | Código do cedente de 7 dígitos |
|
266
|
+
# | 09-17 | 09 | Nosso número livre do cliente |
|
267
|
+
# ------------------------------------------------------------
|
268
|
+
#
|
269
|
+
# <b>Obs.: Não existe Dígito Verificador na composição do nosso-número para convênios
|
270
|
+
# de oito posições.</b>
|
271
|
+
#
|
272
|
+
# @return [String] Nosso número que será mostrado no boleto
|
273
|
+
#
|
274
|
+
def nosso_numero
|
275
|
+
if codigo_cedente_oito_digitos? or codigo_cedente_sete_digitos?
|
276
|
+
"#{codigo_cedente}#{numero_documento}"
|
277
|
+
else
|
278
|
+
"#{codigo_cedente}#{numero_documento}-#{digito_nosso_numero}"
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
# Para o cálculo do dígito, será necessário acrescentar o código do cedente e
|
283
|
+
# Nosso Número (número do documento), e aplicar o módulo 11, com fatores de 9 a 2
|
284
|
+
# verificando o resto da divisão.
|
285
|
+
#
|
286
|
+
# <b>Para mais detalhes de como o cálculo é feito veja a classe Modulo11FatorDe9a2RestoX.</b>
|
287
|
+
#
|
288
|
+
# @return [String] Retorno do cálculo do módulo 11 com os fatores (9,8,7,6,5,4,3,2).
|
289
|
+
#
|
290
|
+
def digito_nosso_numero
|
291
|
+
Modulo11FatorDe9a2RestoX.new("#{codigo_cedente}#{numero_documento}")
|
292
|
+
end
|
293
|
+
|
294
|
+
# === Código do cedente com 4 dígitos
|
295
|
+
#
|
296
|
+
# Quando o código do cedente possui 4 dígitos o formato do código de barras deve ficar assim:
|
297
|
+
#
|
298
|
+
# __________________________________________________________________________
|
299
|
+
# | Posição | Tamanho | Descrição |
|
300
|
+
# |----------|---------|----------------------------------------------------|
|
301
|
+
# | 20-30 | 11 | Nosso-Número, sem dígito verificador |
|
302
|
+
# | 20-23 | Código do cedente fornecido pelo Banco (4 dígitos) |
|
303
|
+
# | 24-30 | Nosso-Número, sem dígito verificador (7 dígitos) |
|
304
|
+
# | 31-34 | 04 | Agência (sem o dígito) |
|
305
|
+
# | 35-42 | 08 | Conta corrente (sem o dígito) |
|
306
|
+
# | 43-44 | 02 | Carteira |
|
307
|
+
# ---------------------------------------------------------------------------
|
308
|
+
#
|
309
|
+
# === Código do cedente com 6 dígitos
|
310
|
+
#
|
311
|
+
# Quando o código do cedente possui 6 dígitos o formato do código de barras deve ficar assim:
|
312
|
+
#
|
313
|
+
# __________________________________________________________________________
|
314
|
+
# | Posição | Tamanho | Descrição |
|
315
|
+
# |----------|---------|----------------------------------------------------|
|
316
|
+
# | 20-30 | 11 | Nosso-Número, sem dígito verificador |
|
317
|
+
# | 20-25 | Código do cedente fornecido pelo Banco (6 dígitos) |
|
318
|
+
# | 26-30 | Nosso-Número, sem dígito verificador (5 dígitos) |
|
319
|
+
# | 31-34 | 04 | Agência (sem o dígito) |
|
320
|
+
# | 35-42 | 08 | Conta corrente (sem o dígito) |
|
321
|
+
# | 43-44 | 02 | Carteira |
|
322
|
+
# ---------------------------------------------------------------------------
|
323
|
+
#
|
324
|
+
# === Código do cedente com 7 dígitos
|
325
|
+
#
|
326
|
+
# Quando o código do cedente possui 7 dígitos o formato do código de barras deve ficar assim:
|
327
|
+
#
|
328
|
+
# __________________________________________________________________________
|
329
|
+
# | Posição | Tamanho | Descrição |
|
330
|
+
# |----------|---------|----------------------------------------------------|
|
331
|
+
# | 20-30 | 17 | Nosso-Número, sem dígito verificador |
|
332
|
+
# | 20-32 | Código do cedente fornecido pelo Banco (7 dígitos) |
|
333
|
+
# | 33-42 | Nosso-Número, sem dígito verificador (10 dígitos) |
|
334
|
+
# | 43-44 | 02 | Carteira |
|
335
|
+
# ---------------------------------------------------------------------------
|
336
|
+
#
|
337
|
+
# === Código do cedente com 8 dígitos
|
338
|
+
#
|
339
|
+
# Quando o código do cedente possui 8 dígitos o formato do código de barras deve ficar assim:
|
340
|
+
#
|
341
|
+
# __________________________________________________________________________
|
342
|
+
# | Posição | Tamanho | Descrição |
|
343
|
+
# |----------|---------|----------------------------------------------------|
|
344
|
+
# | 20-30 | 17 | Nosso-Número, sem dígito verificador |
|
345
|
+
# | 20-33 | Código do cedente fornecido pelo Banco (8 dígitos) |
|
346
|
+
# | 34-42 | Nosso-Número, sem dígito verificador (9 dígitos) |
|
347
|
+
# | 43-44 | 02 | Carteira |
|
348
|
+
# ---------------------------------------------------------------------------
|
349
|
+
#
|
350
|
+
# === Carteiras 16 e 18, código do cedente de 6 posições, nosso número com 17 dígitos.
|
351
|
+
#
|
352
|
+
# Código do cedente possui 6 dígitos, nosso número com 17 dígitos e a carteira for 16 ou 18,
|
353
|
+
# o formato do código de barras deve ficar assim:
|
354
|
+
#
|
355
|
+
# ___________________________________________________________
|
356
|
+
# | Posição | Tamanho | Descrição |
|
357
|
+
# |----------|---------|-------------------------------------|
|
358
|
+
# | 20-25 | 6 | Código do cedente de 6 dígitos |
|
359
|
+
# | 26-42 | 17 | Nosso número livre do cliente |
|
360
|
+
# | 43-44 | 02 | "21" Tipo da modalidade de cobranca |
|
361
|
+
# ------------------------------------------------------------
|
362
|
+
#
|
363
|
+
def codigo_de_barras_do_banco
|
364
|
+
if nosso_numero_dezessete_posicoes?
|
365
|
+
return codigo_de_barras_codigo_cedente_seis_posicoes_nosso_numero_dezessete_posicoes
|
366
|
+
end
|
367
|
+
|
368
|
+
if codigo_cedente_quatro_digitos? or codigo_cedente_seis_digitos?
|
369
|
+
return codigo_de_barras_codigo_cedente_quatro_ou_seis_digitos
|
370
|
+
end
|
371
|
+
|
372
|
+
if codigo_cedente_sete_digitos? or codigo_cedente_oito_digitos?
|
373
|
+
codigo_de_barras_codigo_cedente_sete_ou_oito_digitos
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
377
|
+
# Retorna o código de barras do campo livre para emissão de boletos com:
|
378
|
+
#
|
379
|
+
# <b>Nosso número de 11 posições - EXCLUSIVO PARA CONVÊNIOS DE SEIS POSIÇÕES.</b>
|
380
|
+
#
|
381
|
+
# @return [String]
|
382
|
+
#
|
383
|
+
def codigo_de_barras_codigo_cedente_quatro_ou_seis_digitos
|
384
|
+
"#{codigo_cedente}#{numero_documento}#{agencia}#{conta_corrente}#{carteira}"
|
385
|
+
end
|
386
|
+
|
387
|
+
# Retorna o código de barras do campo livre para emissão de boletos com:
|
388
|
+
#
|
389
|
+
# <b>Carteira 17 e 18 - VINCULADOS À CONVÊNIOS COM NUMERAÇÃO SUPERIOR A 1.000.000 (um milhão).</b>
|
390
|
+
#
|
391
|
+
# @return [String]
|
392
|
+
#
|
393
|
+
def codigo_de_barras_codigo_cedente_sete_ou_oito_digitos
|
394
|
+
"000000#{codigo_cedente}#{numero_documento}#{carteira}"
|
395
|
+
end
|
396
|
+
|
397
|
+
# Retorna o código de barras do campo livre para emissão de bloquetos com:
|
398
|
+
#
|
399
|
+
# <b>Nosso número de 17 posições - EXCLUSIVO PARA AS CARTEIRAS 16 E 18, VINCULADAS À CONVÊNIOS COM SEIS POSIÇÕES.</b>
|
400
|
+
#
|
401
|
+
# @return [String]
|
402
|
+
#
|
403
|
+
def codigo_de_barras_codigo_cedente_seis_posicoes_nosso_numero_dezessete_posicoes
|
404
|
+
"#{codigo_cedente}#{numero_documento}#{modalidade_de_cobranca}"
|
405
|
+
end
|
406
|
+
|
407
|
+
# Modalidade de cobranca definida pelo Banco do Brasil para ser mostrado no código de barras
|
408
|
+
# com código de cedente de seis posições e nosso número de 17 posições, carteira 16 e 18.
|
409
|
+
#
|
410
|
+
# @return [String] 21
|
411
|
+
#
|
412
|
+
def modalidade_de_cobranca
|
413
|
+
"21"
|
414
|
+
end
|
415
|
+
|
416
|
+
# Verifica se o código do cedente possui 4 dígitos.
|
417
|
+
#
|
418
|
+
# @return [true, false]
|
419
|
+
#
|
420
|
+
def codigo_cedente_quatro_digitos?
|
421
|
+
tamanho_codigo_cedente == 4
|
422
|
+
end
|
423
|
+
|
424
|
+
# Verifica se o código do cedente possui 6 dígitos.
|
425
|
+
#
|
426
|
+
# @return [true, false]
|
427
|
+
#
|
428
|
+
def codigo_cedente_seis_digitos?
|
429
|
+
tamanho_codigo_cedente == 6
|
430
|
+
end
|
431
|
+
|
432
|
+
# Verifica se o código do cedente possui 7 dígitos.
|
433
|
+
#
|
434
|
+
# @return [true, false]
|
435
|
+
#
|
436
|
+
def codigo_cedente_sete_digitos?
|
437
|
+
tamanho_codigo_cedente == 7
|
438
|
+
end
|
439
|
+
|
440
|
+
# Verifica se o código do cedente possui 8 dígitos.
|
441
|
+
#
|
442
|
+
# @return [true, false]
|
443
|
+
#
|
444
|
+
def codigo_cedente_oito_digitos?
|
445
|
+
tamanho_codigo_cedente == 8
|
446
|
+
end
|
447
|
+
|
448
|
+
# Retorna o tamanho do campo código do cedente.
|
449
|
+
# Super importante para o número do documento e e para o código de barras
|
450
|
+
#
|
451
|
+
# @return [Fixnum] Tamanho do campo código do cedente.
|
452
|
+
#
|
453
|
+
def tamanho_codigo_cedente
|
454
|
+
codigo_cedente.to_s.size
|
455
|
+
end
|
456
|
+
|
457
|
+
# Verifica se:
|
458
|
+
#
|
459
|
+
# * Número do documento possui 17 dígitos
|
460
|
+
# * Carteira está habilitada para usar 17 dígitos do número documento.
|
461
|
+
# * Código do Cedente está habilitado para usar 17 dígitos do número documento (se tiver 6 dígitos).
|
462
|
+
#
|
463
|
+
# @return [true, false]
|
464
|
+
#
|
465
|
+
def nosso_numero_dezessete_posicoes?
|
466
|
+
codigo_cedente_seis_digitos? and carteira.to_s.in?(carteiras_nosso_numero_dezessete_posicoes) and numero_documento.to_s.size == 17
|
467
|
+
end
|
468
|
+
|
469
|
+
# Retorna as carteiras que aceitam nosso número com 17 posições.
|
470
|
+
#
|
471
|
+
# @return [Array]
|
472
|
+
#
|
473
|
+
def carteiras_nosso_numero_dezessete_posicoes
|
474
|
+
%w(16 18)
|
475
|
+
end
|
476
|
+
|
477
|
+
# Verifica se o campo código do cedente tem o tamanho suportado pelo Banco do Brasil.
|
478
|
+
#
|
479
|
+
def validacao_tamanho_de_digitos_codigo_cedente
|
480
|
+
errors.add(:codigo_cedente, :invalid) unless tamanho_codigo_cedente.in?(tamanhos_codigo_cedente_suportado)
|
481
|
+
end
|
482
|
+
|
483
|
+
# Retorna os tamanhos do código do cedente suportados pelo Banco do Brasil.
|
484
|
+
#
|
485
|
+
# @return [Array]
|
486
|
+
#
|
487
|
+
def tamanhos_codigo_cedente_suportado
|
488
|
+
[4, 6, 7, 8]
|
489
|
+
end
|
490
|
+
|
491
|
+
# Método que pode ser sobrescrito na subclasse se você <b>não quiser</b> que essa validação ocorra.
|
492
|
+
#
|
493
|
+
# <b>Lembre-se que fica a seu critério, mudar as validações da gem</b>.
|
494
|
+
#
|
495
|
+
def deve_validar_com_codigo_cedente_quatro_digitos?
|
496
|
+
deve_validar_codigo_cedente? and codigo_cedente_quatro_digitos?
|
497
|
+
end
|
498
|
+
|
499
|
+
# Método que pode ser sobrescrito na subclasse se você <b>não quiser</b> que essa validação ocorra.
|
500
|
+
#
|
501
|
+
# <b>Lembre-se que fica a seu critério, mudar as validações da gem</b>.
|
502
|
+
#
|
503
|
+
def deve_validar_com_codigo_cedente_seis_digitos?
|
504
|
+
deve_validar_codigo_cedente? and codigo_cedente_seis_digitos? and not nosso_numero_dezessete_posicoes?
|
505
|
+
end
|
506
|
+
|
507
|
+
# Método que pode ser sobrescrito na subclasse se você <b>não quiser</b> que essa validação ocorra.
|
508
|
+
#
|
509
|
+
# <b>Lembre-se que fica a seu critério, mudar as validações da gem</b>.
|
510
|
+
#
|
511
|
+
def deve_validar_com_nosso_numero_dezessete_digitos?
|
512
|
+
deve_validar_codigo_cedente? and codigo_cedente_seis_digitos? and nosso_numero_dezessete_posicoes?
|
513
|
+
end
|
514
|
+
|
515
|
+
# Método que pode ser sobrescrito na subclasse se você <b>não quiser</b> que essa validação ocorra.
|
516
|
+
#
|
517
|
+
# <b>Lembre-se que fica a seu critério, mudar as validações da gem</b>.
|
518
|
+
#
|
519
|
+
def deve_validar_com_codigo_cedente_sete_digitos?
|
520
|
+
deve_validar_codigo_cedente? and codigo_cedente_sete_digitos?
|
521
|
+
end
|
522
|
+
|
523
|
+
# Método que pode ser sobrescrito na subclasse se você <b>não quiser</b> que essa validação ocorra.
|
524
|
+
#
|
525
|
+
# <b>Lembre-se que fica a seu critério, mudar as validações da gem</b>.
|
526
|
+
#
|
527
|
+
def deve_validar_com_codigo_cedente_oito_digitos?
|
528
|
+
deve_validar_codigo_cedente? and codigo_cedente_oito_digitos?
|
529
|
+
end
|
530
|
+
end
|
531
|
+
end
|
532
|
+
end
|