boleto_bancario 0.0.1.beta → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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