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,455 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module BoletoBancario
|
3
|
+
module Core
|
4
|
+
# Implementação de emissão de boleto bancário pelo Itaú.
|
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/itau' dentro dessa biblioteca.
|
10
|
+
#
|
11
|
+
# === Contrato das classes de emissão de boletos
|
12
|
+
#
|
13
|
+
# Para ver o "<b>contrato</b>" da Emissão de Boletos (geração de código de barras, linha digitável, etc) veja
|
14
|
+
# a classe BoletoBancario::Core::Boleto.
|
15
|
+
#
|
16
|
+
# === Carteiras suportadas
|
17
|
+
#
|
18
|
+
# Segue abaixo as carteiras suportadas do itáu <b>seguindo a documentação</b>:
|
19
|
+
#
|
20
|
+
# _______________________________________________________________________________________________________
|
21
|
+
# | Carteira | Descrição | Testada/Homologada no banco |
|
22
|
+
# | 107 | Sem registro com emissão integral – 15 posições | Esperando Contribuição |
|
23
|
+
# | 109 | Direta eletrônica sem emissão – simples | Esperando Contribuição |
|
24
|
+
# | 174 | Sem registro emissão parcial com protesto borderô | Esperando Contribuição |
|
25
|
+
# | 175 | Sem registro sem emissão com protesto eletrônico | Esperando Contribuição |
|
26
|
+
# | 196 | Sem registro com emissão e entrega – 15 posições | Esperando Contribuição |
|
27
|
+
# | 198 | Sem registro sem emissão 15 dígitos | Esperando Contribuição |
|
28
|
+
# | 126, 131, 146 | -------------------------------------------------- | Esperando Contribuição |
|
29
|
+
# | 122, 142, 143 | -------------------------------------------------- | Esperando Contribuição |
|
30
|
+
# | 150, 168 | -------------------------------------------------- | Esperando Contribuição |
|
31
|
+
# --------------------------------------------------------------------------------------------------------
|
32
|
+
#
|
33
|
+
# <b>OBS.: Seja um contribuidor dessa gem. Contribua para homologar os boletos e as
|
34
|
+
# devidas carteiras junto ao banco Itaú.</b>
|
35
|
+
#
|
36
|
+
# === Exemplos
|
37
|
+
#
|
38
|
+
# O recomendado é criar uma subclasse de BoletoBancario::Itau
|
39
|
+
#
|
40
|
+
# class BoletoItau < BoletoBancario::Itau
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# === Criando um boleto
|
44
|
+
#
|
45
|
+
# boleto_itau = BoletoItau.new do |boleto|
|
46
|
+
# boleto.conta_corrente = '89755'
|
47
|
+
# boleto.agencia = '0097'
|
48
|
+
# boleto.carteira = '198'
|
49
|
+
# boleto.numero_documento = '12345678'
|
50
|
+
# boleto.codigo_cedente = '909014'
|
51
|
+
# end
|
52
|
+
#
|
53
|
+
# === Validações
|
54
|
+
#
|
55
|
+
# A classe Itaú possui suas próprias validações.
|
56
|
+
# Primeiramente, <b>antes de renderizar qualquer boleto você precisar verificar se esse o boleto é válido</b>:
|
57
|
+
#
|
58
|
+
# if boleto_itau.valid?
|
59
|
+
# # render boleto_itau
|
60
|
+
# else
|
61
|
+
# # ...
|
62
|
+
# end
|
63
|
+
#
|
64
|
+
# === Campos do Boleto
|
65
|
+
#
|
66
|
+
# boleto_itau.codigo_de_barras
|
67
|
+
#
|
68
|
+
# boleto_itau.linha_digitavel
|
69
|
+
#
|
70
|
+
# boleto_itau.nosso_numero
|
71
|
+
#
|
72
|
+
# boleto_itau.agencia_codigo_cedente
|
73
|
+
#
|
74
|
+
# boleto_itau.carteira_formatada # Formata a carteira, para mostrar no boleto.
|
75
|
+
#
|
76
|
+
# boleto_itau.numero_documento
|
77
|
+
#
|
78
|
+
# boleto_itau.valor_documento
|
79
|
+
#
|
80
|
+
# === Sobrescrevendo validações
|
81
|
+
#
|
82
|
+
# Se você quiser sobrescrever alguma validação dessa classe a gem de boleto bancário
|
83
|
+
# possui alguns modos de fazer isso.
|
84
|
+
#
|
85
|
+
# Caso você precise mudar as validações, você pode sobrescrever alguns métodos que possuem <b>"Magic numbers"</b>.
|
86
|
+
# Foi colocado dessa forma, já que os bancos mudam bastante esse tipo de validação.
|
87
|
+
# Por exemplo, atualmente a conta corrente é validado com <b>'5' como máximo de tamanho</b>.
|
88
|
+
# Caso você queira que valide como 6, mude conforme abaixo:
|
89
|
+
#
|
90
|
+
# class BoletoItau < BoletoBancario::Itau
|
91
|
+
# def self.tamanho_maximo_conta_corrente
|
92
|
+
# 6
|
93
|
+
# end
|
94
|
+
# end
|
95
|
+
#
|
96
|
+
# Ou você pode desativar as validações que são feitas, sobrescrevendo os métodos de validação:
|
97
|
+
#
|
98
|
+
# class BoletoItau < BoletoBancario::Itau
|
99
|
+
# def deve_validar_agencia?
|
100
|
+
# false
|
101
|
+
# end
|
102
|
+
#
|
103
|
+
# def deve_validar_conta_corrente?
|
104
|
+
# false
|
105
|
+
# end
|
106
|
+
#
|
107
|
+
# def deve_validar_codigo_cedente?
|
108
|
+
# false
|
109
|
+
# end
|
110
|
+
#
|
111
|
+
# def deve_validar_numero_documento?
|
112
|
+
# false
|
113
|
+
# end
|
114
|
+
#
|
115
|
+
# def deve_validar_carteira?
|
116
|
+
# false
|
117
|
+
# end
|
118
|
+
# end
|
119
|
+
#
|
120
|
+
# <b>Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
121
|
+
# Talvez você precise analisar o efeito no #codigo_de_barras e na #linha_digitável (ambos podem ser
|
122
|
+
# sobreescritos também).</b>
|
123
|
+
#
|
124
|
+
# Caso exista algum cenário de sobrescrita de validação contate o dono dessa gem pelo github e conte um
|
125
|
+
# pouco mais sobre esses cenários.
|
126
|
+
#
|
127
|
+
class Itau < Boleto
|
128
|
+
# Usado somente em carteiras especiais para complementar o número do documento.
|
129
|
+
#
|
130
|
+
attr_accessor :seu_numero
|
131
|
+
|
132
|
+
# Tamanho máximo de uma conta corrente no Banco Itaú.
|
133
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
134
|
+
#
|
135
|
+
# @return [Fixnum] 5
|
136
|
+
#
|
137
|
+
def self.tamanho_maximo_conta_corrente
|
138
|
+
5
|
139
|
+
end
|
140
|
+
|
141
|
+
# Tamanho máximo de uma agência no Banco Itaú.
|
142
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
143
|
+
#
|
144
|
+
# @return [Fixnum] 4
|
145
|
+
#
|
146
|
+
def self.tamanho_maximo_agencia
|
147
|
+
4
|
148
|
+
end
|
149
|
+
|
150
|
+
# Tamanho máximo do número do documento emitido no Boleto.
|
151
|
+
# O tamanho máximo é justamente 8 porque no código de barras só é permitido 8 posições para este campo.
|
152
|
+
#
|
153
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
154
|
+
#
|
155
|
+
# @return [Fixnum] 8
|
156
|
+
#
|
157
|
+
def self.tamanho_maximo_numero_documento
|
158
|
+
8
|
159
|
+
end
|
160
|
+
|
161
|
+
# Tamanho máximo do código do cedente emitido no Boleto.
|
162
|
+
# O tamanho máximo é justamente 5 porque no código de barras só é permitido 5 posições para este campo.
|
163
|
+
#
|
164
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
165
|
+
#
|
166
|
+
# @return [Fixnum] 5
|
167
|
+
#
|
168
|
+
def self.tamanho_maximo_codigo_cedente
|
169
|
+
5
|
170
|
+
end
|
171
|
+
|
172
|
+
# Tamanho máximo do seu número emitido no Boleto.
|
173
|
+
# O tamanho máximo é justamente 7 porque no código de barras só é permitido 7 posições para este campo.
|
174
|
+
#
|
175
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
176
|
+
#
|
177
|
+
# @return [Fixnum] 7
|
178
|
+
#
|
179
|
+
def self.tamanho_maximo_seu_numero
|
180
|
+
7
|
181
|
+
end
|
182
|
+
|
183
|
+
# Tamanho máximo da carteira.
|
184
|
+
# O tamanho máximo é justamente 3 porque no código de barras só é permitido 3 posições para este campo.
|
185
|
+
#
|
186
|
+
# <b>Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
|
187
|
+
#
|
188
|
+
# @return [Fixnum] 3
|
189
|
+
#
|
190
|
+
def self.tamanho_maximo_carteira
|
191
|
+
3
|
192
|
+
end
|
193
|
+
|
194
|
+
# Campos obrigatórios
|
195
|
+
#
|
196
|
+
# * Agencia
|
197
|
+
# * Conta Corrente
|
198
|
+
# * Dígito da conta corrente
|
199
|
+
#
|
200
|
+
validates :agencia, :conta_corrente, :digito_conta_corrente, presence: true
|
201
|
+
validates :digito_conta_corrente, length: { maximum: 1 }
|
202
|
+
|
203
|
+
# Validações de tamanho para os campos abaixo:
|
204
|
+
#
|
205
|
+
# * Número do documento
|
206
|
+
# * Conta Corrente
|
207
|
+
# * Agencia
|
208
|
+
# * Carteira
|
209
|
+
#
|
210
|
+
# Se você quiser sobrescrever os tamanhos permitidos, ficará a sua responsabilidade.
|
211
|
+
# Basta você sobrescrever os métodos de validação:
|
212
|
+
#
|
213
|
+
# class BoletoItau < BoletoBancario::Core::Itau
|
214
|
+
# def self.tamanho_maximo_agencia
|
215
|
+
# 5
|
216
|
+
# end
|
217
|
+
#
|
218
|
+
# def self.tamanho_maximo_conta_corrente
|
219
|
+
# 6
|
220
|
+
# end
|
221
|
+
#
|
222
|
+
# def self.tamanho_maximo_numero_documento
|
223
|
+
# 9
|
224
|
+
# end
|
225
|
+
# end
|
226
|
+
#
|
227
|
+
# Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si.
|
228
|
+
# Talvez você precise analisar o efeito no #codigo_de_barras e na #linha_digitável (ambos podem ser
|
229
|
+
# sobreescritos também).
|
230
|
+
#
|
231
|
+
validates :numero_documento, length: { maximum: tamanho_maximo_numero_documento }, if: :deve_validar_numero_documento?
|
232
|
+
validates :conta_corrente, length: { maximum: tamanho_maximo_conta_corrente }, if: :deve_validar_conta_corrente?
|
233
|
+
validates :agencia, length: { maximum: tamanho_maximo_agencia }, if: :deve_validar_agencia?
|
234
|
+
validates :carteira, length: { maximum: tamanho_maximo_carteira }, if: :deve_validar_carteira?
|
235
|
+
|
236
|
+
# Campos obrigatórios e validações de tamanho para os campos:
|
237
|
+
#
|
238
|
+
# * Código do cedente
|
239
|
+
# * Seu número
|
240
|
+
#
|
241
|
+
# <b>Obs.: Essas validações só ocorrerão se a carteira do boleto for especial.</b>
|
242
|
+
# Para mais detalhes veja o método carteiras especiais dessa classe.
|
243
|
+
#
|
244
|
+
validates :codigo_cedente, :seu_numero, presence: true, :if => :carteira_especial?
|
245
|
+
validates :codigo_cedente, length: { maximum: tamanho_maximo_codigo_cedente }, :if => :deve_validar_codigo_cedente_carteira_especial?
|
246
|
+
validates :seu_numero, length: { maximum: tamanho_maximo_seu_numero }, :if => :deve_validar_seu_numero_carteira_especial?
|
247
|
+
|
248
|
+
# <b>Nosso número</b> é a identificação do título no banco.
|
249
|
+
# Eu diria que há uma diferença bem sutil entre esse campo e o seu número.
|
250
|
+
#
|
251
|
+
# @return [String] 8 caracteres.
|
252
|
+
#
|
253
|
+
def numero_documento
|
254
|
+
@numero_documento.to_s.rjust(8, '0') if @numero_documento.present?
|
255
|
+
end
|
256
|
+
|
257
|
+
# <b>Seu número</b> é a identificação do documento na empresa emitida.
|
258
|
+
# <b>OBS.:</b> Campo usado somente para as <b>carteiras_especiais</b>.
|
259
|
+
#
|
260
|
+
# @return [String] 7 caracteres.
|
261
|
+
#
|
262
|
+
def seu_numero
|
263
|
+
@seu_numero.to_s.rjust(7, '0') if @seu_numero.present?
|
264
|
+
end
|
265
|
+
|
266
|
+
# @return [String] 4 caracteres
|
267
|
+
#
|
268
|
+
def agencia
|
269
|
+
@agencia.to_s.rjust(4, '0') if @agencia.present?
|
270
|
+
end
|
271
|
+
|
272
|
+
# @return [String] 5 caracteres.
|
273
|
+
#
|
274
|
+
def conta_corrente
|
275
|
+
@conta_corrente.to_s.rjust(5, '0') if @conta_corrente.present?
|
276
|
+
end
|
277
|
+
|
278
|
+
# <b>Código do Cedente</b> é o código do cliente, fornecido pelo banco.
|
279
|
+
# <b>OBS.:</b> Campo usado somente para as <b>carteiras_especiais</b>.
|
280
|
+
#
|
281
|
+
# @return [String] 5 caracteres.
|
282
|
+
#
|
283
|
+
def codigo_cedente
|
284
|
+
@codigo_cedente.to_s.rjust(5, '0') if @codigo_cedente.present?
|
285
|
+
end
|
286
|
+
|
287
|
+
# @return [String] Código do Banco descrito na documentação (Pag. 49).
|
288
|
+
#
|
289
|
+
def codigo_banco
|
290
|
+
'341'
|
291
|
+
end
|
292
|
+
|
293
|
+
# Dígito do código do banco. Precisa mostrar esse dígito no boleto.
|
294
|
+
#
|
295
|
+
# @return [String] Dígito do código do banco descrito na documentação (Pag. 49).
|
296
|
+
#
|
297
|
+
def digito_codigo_banco
|
298
|
+
'7'
|
299
|
+
end
|
300
|
+
|
301
|
+
# Agência, conta corrente and dígito da conta corrente formatado.
|
302
|
+
#
|
303
|
+
# @return [String] Campo descrito na documentação (Pag. 50).
|
304
|
+
#
|
305
|
+
def agencia_codigo_cedente
|
306
|
+
"#{agencia} / #{conta_corrente}-#{digito_conta_corrente}"
|
307
|
+
end
|
308
|
+
|
309
|
+
# Nosso Número descrito na documentação (Pag. 53).
|
310
|
+
#
|
311
|
+
# @return [String] Carteira, número do documento e calculo do dígito do nosso número.
|
312
|
+
#
|
313
|
+
def nosso_numero
|
314
|
+
"#{carteira}/#{numero_documento}-#{digito_nosso_numero}"
|
315
|
+
end
|
316
|
+
|
317
|
+
# Para a grande maioria das carteiras, são considerados para a obtenção do dígito do nosso número,
|
318
|
+
# os dados “AGÊNCIA / CONTA (sem dígito) / CARTEIRA / NOSSO NÚMERO”,
|
319
|
+
# calculado pelo critério do Módulo 10 (veja a classe Modulo10 para mais detalhes).
|
320
|
+
#
|
321
|
+
# À exceção, estão as carteiras 126 - 131 - 146 - 150 e 168 cuja obtenção
|
322
|
+
# está baseada apenas nos dados “CARTEIRA/NOSSO NÚMERO” da operação.
|
323
|
+
#
|
324
|
+
# @return [String]
|
325
|
+
#
|
326
|
+
def digito_nosso_numero
|
327
|
+
if carteira.in?(carteiras_com_calculo_junto_com_numero_documento)
|
328
|
+
Modulo10.new("#{carteira}#{numero_documento}")
|
329
|
+
else
|
330
|
+
Modulo10.new("#{agencia}#{conta_corrente}#{carteira}#{numero_documento}")
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
# Carteiras que devem ser calculadas o módulo 10 usando carteira e número do documento.
|
335
|
+
# Você pode sobrescrever esse método na subclasse caso for necessário
|
336
|
+
# <b>para incluir mais carteiras nesse cenário</b>.
|
337
|
+
#
|
338
|
+
# @return [Array] Carteiras.
|
339
|
+
#
|
340
|
+
def carteiras_com_calculo_junto_com_numero_documento
|
341
|
+
%w(126 131 146 150 168)
|
342
|
+
end
|
343
|
+
|
344
|
+
# Formata a <b>segunda posição do código de barras</b>.
|
345
|
+
#
|
346
|
+
# A carteira de cobrança 198 é uma carteira especial, sem registro, na qual são utilizadas 15 posições
|
347
|
+
# numéricas para identificação do título liquidado (8 do Nosso Número e 7 do Seu Número).
|
348
|
+
# Nessa mesma situação estão as carteiras 107, 122, 142, 143 e 196.
|
349
|
+
#
|
350
|
+
# === Carteiras 107, 122, 142, 143, 196 e 198
|
351
|
+
#
|
352
|
+
# Para essas carteiras o formato do código de barras é o seguinte:
|
353
|
+
#
|
354
|
+
# ________________________________________________________________
|
355
|
+
# | Posição | Tamanho | Descrição |
|
356
|
+
# |----------|---------|------------------------------------------|
|
357
|
+
# | 20-22 | 03 | Carteira |
|
358
|
+
# | 23-30 | 08 | Nosso Número (Número do documento) |
|
359
|
+
# | 31-37 | 07 | Seu número |
|
360
|
+
# | 38-42 | 05 | Código do Cliente (fornecido pelo banco) |
|
361
|
+
# | 43 | 01 | DAC dos campos acima (posições 20 a 42) |
|
362
|
+
# | 44 | 01 | Zero |
|
363
|
+
# -----------------------------------------------------------------
|
364
|
+
#
|
365
|
+
# === Demais Carteiras
|
366
|
+
#
|
367
|
+
# Para as demais carteiras o formato do código de barras é o seguinte:
|
368
|
+
#
|
369
|
+
# _________________________________________________________________________________________
|
370
|
+
# | Posição | Tamanho | Descrição |
|
371
|
+
# |----------|---------|-------------------------------------------------------------------|
|
372
|
+
# | 20-22 | 03 | Carteira |
|
373
|
+
# | 23-30 | 08 | Nosso Número (Número do documento) |
|
374
|
+
# | 31 | 01 | DAC Modulo 10 (Agencia/Conta Corrente/Carteira/Nosso Número) |
|
375
|
+
# | 32-35 | 04 | Agência |
|
376
|
+
# | 36-40 | 05 | Número da conta corrente |
|
377
|
+
# | 41 | 01 | DAC Modulo 10 [Agência/Conta Corrente] (Digito da Conta Corrente) |
|
378
|
+
# | 42-44 | 03 | Zeros |
|
379
|
+
# ------------------------------------------------------------------------------------------
|
380
|
+
#
|
381
|
+
# Algumas observações sobre as demais carteiras:
|
382
|
+
#
|
383
|
+
# * O campo DAC na posição 31 se refere ao método #digito_nosso_numero pois calcula o
|
384
|
+
# dígito verificador baseado na carteira.
|
385
|
+
#
|
386
|
+
# * O campo DAC na posição 41 se refere ao método #digito_conta_corrente pois calcula o
|
387
|
+
# dígito verificador baseado na agencia + conta corrente.
|
388
|
+
#
|
389
|
+
# * A posição 41 se refere ao dígito verificador da conta corrente.
|
390
|
+
#
|
391
|
+
def codigo_de_barras_do_banco
|
392
|
+
if carteira.in?(carteiras_especiais)
|
393
|
+
codigo = "#{carteira}#{numero_documento}#{seu_numero}#{codigo_cedente}"
|
394
|
+
"#{codigo}#{Modulo10.new(codigo)}0"
|
395
|
+
else
|
396
|
+
"#{carteira}#{numero_documento}#{digito_nosso_numero}#{agencia}#{conta_corrente}#{digito_conta_corrente}000"
|
397
|
+
end
|
398
|
+
end
|
399
|
+
|
400
|
+
# As carteiras de cobrança <b>107, 122, 142, 143, 196 e 198 são carteiras especiais</b>,
|
401
|
+
# na qual são utilizadas 15 posições numéricas para identificação do título
|
402
|
+
# liquidado (8 do Nosso Número e 7 do Seu Número).
|
403
|
+
#
|
404
|
+
# <b>Você pode sobrescrever esse método na subclasse caso haja mais carteiras nessa posição descrita acima</b>.
|
405
|
+
#
|
406
|
+
# @return [Array] Carteiras especiais que calculam o código barras usando 'Seu número' e 'Código do Cedente'.
|
407
|
+
#
|
408
|
+
def carteiras_especiais
|
409
|
+
%w(107 122 142 143 196 198)
|
410
|
+
end
|
411
|
+
|
412
|
+
# Verifica se a carteira é especial.
|
413
|
+
# Para mais detalhes veja o método #carteiras_especiais.
|
414
|
+
#
|
415
|
+
# @return [True, False]
|
416
|
+
#
|
417
|
+
def carteira_especial?
|
418
|
+
carteira.to_s.in?(carteiras_especiais)
|
419
|
+
end
|
420
|
+
|
421
|
+
# Verifica se deve validar o código do cedente e se a carteira é especial.
|
422
|
+
#
|
423
|
+
# Métodos usado para verificar se deve realizar a validação do campo 'codigo_cedente'.
|
424
|
+
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
425
|
+
#
|
426
|
+
# @return [True]
|
427
|
+
#
|
428
|
+
def deve_validar_codigo_cedente_carteira_especial?
|
429
|
+
deve_validar_codigo_cedente? and carteira_especial?
|
430
|
+
end
|
431
|
+
|
432
|
+
# Verifica se deve validar o seu número e se a carteira é especial.
|
433
|
+
#
|
434
|
+
# Métodos usado para verificar se deve realizar a validação do campo 'codigo_cedente'.
|
435
|
+
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
436
|
+
#
|
437
|
+
# @return [True]
|
438
|
+
#
|
439
|
+
def deve_validar_seu_numero_carteira_especial?
|
440
|
+
deve_validar_seu_numero? and carteira_especial?
|
441
|
+
end
|
442
|
+
|
443
|
+
# Verifica se deve validar o seu número. O padrão é validar o seu número.
|
444
|
+
#
|
445
|
+
# Métodos usado para verificar se deve realizar a validação do campo 'seu_numero'.
|
446
|
+
# <b>Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações</b>.
|
447
|
+
#
|
448
|
+
# @return [True] true
|
449
|
+
#
|
450
|
+
def deve_validar_seu_numero?
|
451
|
+
true
|
452
|
+
end
|
453
|
+
end
|
454
|
+
end
|
455
|
+
end
|