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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +3 -2
  3. data/.travis.yml +10 -0
  4. data/Changelog.markdown +4 -0
  5. data/Gemfile +1 -1
  6. data/Planning.markdown +18 -86
  7. data/README.markdown +107 -55
  8. data/Rakefile +7 -1
  9. data/TODO.markdown +15 -1
  10. data/boleto_bancario.gemspec +7 -3
  11. data/lib/boleto_bancario.rb +27 -15
  12. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2.rb +65 -0
  13. data/lib/boleto_bancario/calculos/modulo11_fator_de9a2_resto_x.rb +5 -51
  14. data/lib/boleto_bancario/calculos/modulo_numero_de_controle.rb +117 -0
  15. data/lib/boleto_bancario/core/banco_brasil.rb +30 -5
  16. data/lib/boleto_bancario/core/banrisul.rb +182 -0
  17. data/lib/boleto_bancario/core/boleto.rb +67 -34
  18. data/lib/boleto_bancario/core/bradesco.rb +28 -16
  19. data/lib/boleto_bancario/core/caixa.rb +233 -0
  20. data/lib/boleto_bancario/core/hsbc.rb +170 -0
  21. data/lib/boleto_bancario/core/itau.rb +20 -10
  22. data/lib/boleto_bancario/core/real.rb +177 -0
  23. data/lib/boleto_bancario/core/santander.rb +19 -22
  24. data/lib/boleto_bancario/core/sicoob.rb +172 -0
  25. data/lib/boleto_bancario/core/sicredi.rb +290 -0
  26. data/lib/boleto_bancario/version.rb +1 -2
  27. data/spec/boleto_bancario/calculos/modulo10_spec.rb +4 -0
  28. data/spec/boleto_bancario/calculos/modulo11_fator_de2a9_spec.rb +6 -0
  29. data/spec/boleto_bancario/calculos/modulo11_fator_de9a2_spec.rb +31 -0
  30. data/spec/boleto_bancario/calculos/modulo_numero_de_controle_spec.rb +37 -0
  31. data/spec/boleto_bancario/core/banco_brasil_spec.rb +59 -65
  32. data/spec/boleto_bancario/core/banrisul_spec.rb +129 -0
  33. data/spec/boleto_bancario/core/boleto_spec.rb +148 -32
  34. data/spec/boleto_bancario/core/bradesco_spec.rb +29 -36
  35. data/spec/boleto_bancario/core/caixa_spec.rb +111 -0
  36. data/spec/boleto_bancario/core/hsbc_spec.rb +72 -0
  37. data/spec/boleto_bancario/core/itau_spec.rb +33 -36
  38. data/spec/boleto_bancario/core/real_spec.rb +104 -0
  39. data/spec/boleto_bancario/core/santander_spec.rb +26 -24
  40. data/spec/boleto_bancario/core/sicoob_spec.rb +111 -0
  41. data/spec/boleto_bancario/core/sicredi_spec.rb +149 -0
  42. data/spec/inheritance/banco_brasil_spec.rb +22 -0
  43. data/spec/inheritance/banrisul_spec.rb +22 -0
  44. data/spec/inheritance/boleto_spec.rb +15 -0
  45. data/spec/inheritance/bradesco_spec.rb +22 -0
  46. data/spec/inheritance/caixa_spec.rb +22 -0
  47. data/spec/inheritance/hsbc_spec.rb +22 -0
  48. data/spec/inheritance/itau_spec.rb +22 -0
  49. data/spec/inheritance/real_spec.rb +22 -0
  50. data/spec/inheritance/santander_spec.rb +22 -0
  51. data/spec/inheritance/sicoob_spec.rb +22 -0
  52. data/spec/inheritance/sicredi_spec.rb +22 -0
  53. data/spec/shared_examples/boleto_bancario_shared_example.rb +21 -34
  54. data/spec/spec_helper.rb +2 -2
  55. metadata +119 -47
  56. 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::Validations
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
- # O que falta:
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
- # Logo
174
- # Formatacao documento (CPF/CNPJ)
175
- # Aceite
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.to_s.gsub(/\,|\./, '').rjust(10, '0')
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
- # Métodos usado para verificar se deve realizar a validação de tamanho do campo 'agência'.
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
- # Métodos usado para verificar se deve realizar a validação de tamanho do campo 'agência'.
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
- # Métodos usado para verificar se deve realizar a validação de tamanho do campo 'codigo_cedente'.
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
- # Métodos usado para verificar se deve realizar a validação de tamanho do campo 'numero_documento'.
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
- # Métodos usado para verificar se deve realizar a validação de tamanho do campo 'carteira'.
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 = '198'
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
- # Tamanho máximo da carteira.
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 justamente para ficar documentado o tamanho máximo aceito até a data corrente.</b>
117
+ # <b>Método criado para validar se a carteira informada é suportada.</b>
119
118
  #
120
- # @return [Fixnum] 2
119
+ # @return [Array]
121
120
  #
122
- def self.tamanho_maximo_carteira
123
- 2
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 de tamanho para os campos abaixo:
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 tamanhos permitidos, ficará a sua responsabilidade.
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.tamanho_maximo_carteira
154
- # 2
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
- validates :carteira, length: { maximum: tamanho_maximo_carteira }, if: :deve_validar_carteira?
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