br_boleto 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (137) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -1
  3. data/.travis.yml +1 -1
  4. data/Gemfile.lock +2 -2
  5. data/br_boleto.gemspec +2 -3
  6. data/lib/br_boleto/association/have_conta.rb +27 -25
  7. data/lib/br_boleto/association/have_pagador.rb +2 -0
  8. data/lib/br_boleto/boleto/base.rb +0 -4
  9. data/lib/br_boleto/boleto/bradesco.rb +80 -0
  10. data/lib/br_boleto/boleto/caixa.rb +10 -12
  11. data/lib/br_boleto/boleto/cecred.rb +76 -0
  12. data/lib/br_boleto/boleto/itau.rb +114 -0
  13. data/lib/br_boleto/boleto/sicredi.rb +101 -0
  14. data/lib/br_boleto/boleto/unicred.rb +21 -0
  15. data/lib/br_boleto/conta/base.rb +28 -3
  16. data/lib/br_boleto/conta/bradesco.rb +120 -0
  17. data/lib/br_boleto/conta/caixa.rb +22 -12
  18. data/lib/br_boleto/conta/cecred.rb +67 -0
  19. data/lib/br_boleto/conta/itau.rb +199 -0
  20. data/lib/br_boleto/conta/sicoob.rb +40 -11
  21. data/lib/br_boleto/conta/sicredi.rb +171 -0
  22. data/lib/br_boleto/conta/unicred.rb +38 -0
  23. data/lib/br_boleto/helper/default_codes.rb +535 -26
  24. data/lib/br_boleto/pagador.rb +4 -0
  25. data/lib/br_boleto/remessa/base.rb +2 -0
  26. data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
  27. data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
  28. data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
  29. data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
  30. data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
  31. data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
  32. data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
  33. data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
  34. data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
  35. data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
  36. data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
  37. data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
  38. data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
  39. data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
  40. data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
  41. data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
  42. data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
  43. data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
  44. data/lib/br_boleto/remessa/pagamento.rb +93 -43
  45. data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
  46. data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
  47. data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
  48. data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
  49. data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
  50. data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
  51. data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
  52. data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
  53. data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
  54. data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
  55. data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
  56. data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
  57. data/lib/br_boleto/retorno/pagamento.rb +18 -4
  58. data/lib/br_boleto/version.rb +2 -2
  59. data/lib/br_boleto.rb +28 -0
  60. data/lib/config/locales/br-boleto-en.yml +1 -0
  61. data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
  62. data/test/br_boleto/association/have_pagador_test.rb +24 -0
  63. data/test/br_boleto/boleto/bradesco_test.rb +125 -0
  64. data/test/br_boleto/boleto/caixa_test.rb +18 -18
  65. data/test/br_boleto/boleto/cecred_test.rb +115 -0
  66. data/test/br_boleto/boleto/itau_test.rb +160 -0
  67. data/test/br_boleto/boleto/sicredi_test.rb +136 -0
  68. data/test/br_boleto/boleto/unicred_test.rb +128 -0
  69. data/test/br_boleto/conta/base_test.rb +298 -3
  70. data/test/br_boleto/conta/bradesco_test.rb +142 -0
  71. data/test/br_boleto/conta/caixa_test.rb +7 -6
  72. data/test/br_boleto/conta/cecred_test.rb +119 -0
  73. data/test/br_boleto/conta/itau_test.rb +189 -0
  74. data/test/br_boleto/conta/sicoob_test.rb +32 -2
  75. data/test/br_boleto/conta/sicredi_test.rb +180 -0
  76. data/test/br_boleto/conta/unicred_test.rb +154 -0
  77. data/test/br_boleto/pagador_test.rb +22 -2
  78. data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
  79. data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
  80. data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
  81. data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
  82. data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
  83. data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
  84. data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
  85. data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
  86. data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
  87. data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
  88. data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
  89. data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
  90. data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
  91. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
  92. data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
  93. data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
  94. data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
  95. data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
  96. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  97. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
  98. data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
  99. data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
  100. data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
  101. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
  102. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
  103. data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
  104. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
  105. data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
  106. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
  107. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
  108. data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
  109. data/test/br_boleto/retorno/pagamento_test.rb +7 -0
  110. data/test/factories/boleto/boleto_bradesco.rb +18 -0
  111. data/test/factories/boleto/boleto_cecred.rb +18 -0
  112. data/test/factories/boleto/boleto_itau.rb +18 -0
  113. data/test/factories/boleto/boleto_sicredi.rb +18 -0
  114. data/test/factories/boleto/boleto_unicred.rb +18 -0
  115. data/test/factories/conta/bradesco.rb +16 -0
  116. data/test/factories/conta/caixa.rb +2 -1
  117. data/test/factories/conta/cecred.rb +15 -0
  118. data/test/factories/conta/itau.rb +15 -0
  119. data/test/factories/conta/sicoob.rb +2 -1
  120. data/test/factories/conta/sicredi.rb +15 -0
  121. data/test/factories/conta/unicred.rb +15 -0
  122. data/test/factories/remessa/cnab240/bradesco.rb +9 -0
  123. data/test/factories/remessa/cnab240/cecred.rb +9 -0
  124. data/test/factories/remessa/cnab240/itau.rb +9 -0
  125. data/test/factories/remessa/cnab240/sicredi.rb +9 -0
  126. data/test/factories/remessa/cnab240/unicred.rb +9 -0
  127. data/test/factories/remessa/cnab400/bradesco.rb +8 -0
  128. data/test/factories/remessa/cnab400/itau.rb +8 -0
  129. data/test/factories/remessa/cnab400/sicredi.rb +8 -0
  130. data/test/factories/remessa/cnab400/unicred.rb +8 -0
  131. data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
  132. data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
  133. data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
  134. data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
  135. data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
  136. data/test/fixtures/retorno/cnab400/itau.ret +54 -0
  137. metadata +138 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2ea3e18f9bcb8221f2853ad69bf7eaf2f4f3424e
4
- data.tar.gz: 4f5832a88480ac6672ca81258c235c7918f81acf
3
+ metadata.gz: 020fd56f017584d8546fcf0cca4b7c5303fa9a3e
4
+ data.tar.gz: 2c646b4f9b5e04dddd16a3887e35e0a0c01e4324
5
5
  SHA512:
6
- metadata.gz: 4029f3dc8d1fa4c8891ab167478283ef76a74099a284a1fc8cefdb060b9e0c76faf23b841f5f535e35d5330e48f8c935d8815b4971f1d722a6fe77904ef30112
7
- data.tar.gz: c0c7f28257ff10c696e69bc320e918a4c7ecb1674e58c8509d6c8c0849a8901895def02b073a00bebbbd93e1d1c8227cc4319d073c73e5ccc1995e4a15ae2b27
6
+ metadata.gz: 4c2d14b4e5d366fb891681d90d841cf91e2b03101da60faad9932b1b39ee5384d79cd79a125a96f5511f88ca845c25ff9e719bc4e950aef443fd5a6cd4e832e1
7
+ data.tar.gz: e574dbdf4449c629f57248932a082199c03cc30bf4de4bd59452c86f08987fa9e5252574978c39405ecb07e7e4b6e3272d73b30c83eff364e8d5048e60a77e24
data/.gitignore CHANGED
@@ -2,5 +2,6 @@ coverage/
2
2
  .dropbox
3
3
  **/*.subl*
4
4
  **/*.~lock.*
5
- dev_load_data.rb
5
+ dev_load_data*.rb
6
+ saida.rem
6
7
  br_boleto*.gem
data/.travis.yml CHANGED
@@ -1,3 +1,3 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.2
3
+ - 2.3.0
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- br_boleto (2.0.0)
4
+ br_boleto (2.1.0)
5
5
  activemodel (~> 4.2)
6
6
  activesupport (~> 4.2)
7
7
  rake (>= 0.8.7)
@@ -155,4 +155,4 @@ DEPENDENCIES
155
155
  simplecov
156
156
 
157
157
  BUNDLED WITH
158
- 1.11.2
158
+ 1.12.5
data/br_boleto.gemspec CHANGED
@@ -4,7 +4,7 @@ require File.expand_path('../lib/br_boleto/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.name = "br_boleto"
6
6
  gem.version = BrBoleto::Version::CURRENT
7
- gem.licenses = ['MIT']
7
+ gem.licenses = 'MIT'
8
8
  gem.summary = %q{Emissão de Boletos Bancários em Ruby}
9
9
  gem.description = %q{Emissão de Boletos Bancários em Ruby}
10
10
  gem.authors = ["Bruno M. Mergen"]
@@ -19,12 +19,11 @@ Gem::Specification.new do |gem|
19
19
  # gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
20
  gem.require_paths = ["lib"]
21
21
 
22
- gem.required_ruby_version = '~> 2.1'
22
+ gem.required_ruby_version = ['~> 2.2', '~> 2.3']
23
23
 
24
24
 
25
25
  gem.add_dependency "rake", '>= 0.8.7'
26
26
  gem.add_dependency "activesupport", '~> 4.2'
27
27
  gem.add_dependency "activemodel", '~> 4.2'
28
28
  gem.add_dependency 'unidecoder', '~> 1.1'
29
-
30
29
  end
@@ -33,33 +33,34 @@ module BrBoleto
33
33
 
34
34
  ####################### VALIDAÇÔES DA CONTA #######################
35
35
  # Devem ser sobrescrita a cada classe que utilizar, pois pode variar
36
- def valid_conta_corrente_length; end
37
- def valid_conta_corrente_minimum; end
38
- def valid_conta_corrente_maximum; end
39
- def valid_conta_corrente_required; end
40
- def valid_modalidade_length; end
41
- def valid_modalidade_minimum; end
42
- def valid_modalidade_maximum; end
43
- def valid_modalidade_required; end
44
- def valid_codigo_cedente_length; end
45
- def valid_codigo_cedente_minimum; end
46
- def valid_codigo_cedente_maximum; end
47
- def valid_codigo_cedente_required; end
48
- def valid_codigo_cedente_inclusion; end
49
- def valid_endereco_required; end
50
- def valid_carteira_length; end
51
- def valid_carteira_minimum; end
52
- def valid_carteira_maximum; end
53
- def valid_carteira_required; end
54
- def valid_convenio_length; end
55
- def valid_convenio_minimum; end
56
- def valid_convenio_maximum; end
57
- def valid_convenio_required; end
58
- def valid_modalidade_inclusion; end
59
- def valid_carteira_inclusion; end
60
- def valid_convenio_inclusion; end
36
+ def valid_conta_corrente_length; end
37
+ def valid_conta_corrente_minimum; end
38
+ def valid_conta_corrente_maximum; end
39
+ def valid_conta_corrente_required; end
40
+ def valid_modalidade_length; end
41
+ def valid_modalidade_minimum; end
42
+ def valid_modalidade_maximum; end
43
+ def valid_modalidade_required; end
44
+ def valid_codigo_cedente_length; end
45
+ def valid_codigo_cedente_minimum; end
46
+ def valid_codigo_cedente_maximum; end
47
+ def valid_codigo_cedente_required; end
48
+ def valid_codigo_cedente_inclusion; end
49
+ def valid_endereco_required; end
50
+ def valid_carteira_length; end
51
+ def valid_carteira_minimum; end
52
+ def valid_carteira_maximum; end
53
+ def valid_carteira_required; end
54
+ def valid_convenio_length; end
55
+ def valid_convenio_minimum; end
56
+ def valid_convenio_maximum; end
57
+ def valid_convenio_required; end
58
+ def valid_modalidade_inclusion; end
59
+ def valid_carteira_inclusion; end
60
+ def valid_convenio_inclusion; end
61
61
  def valid_versao_aplicativo_required; end # Banco da Caixa
62
62
 
63
+
63
64
  def set_regras_tamanho_e_validations!
64
65
  @conta ||= conta_class.new()
65
66
  @conta.valid_conta_corrente_length = valid_conta_corrente_length if "#{valid_conta_corrente_length}".present?
@@ -95,6 +96,7 @@ module BrBoleto
95
96
  @conta.valid_convenio_inclusion = valid_convenio_inclusion if "#{valid_convenio_inclusion}".present?
96
97
 
97
98
  @conta.valid_versao_aplicativo_required = valid_versao_aplicativo_required if "#{valid_versao_aplicativo_required}".present?
99
+
98
100
  end
99
101
 
100
102
  def conta_validations
@@ -25,8 +25,10 @@ module BrBoleto
25
25
  end
26
26
 
27
27
  def valid_endereco_required; end
28
+ def valid_avalista_required; end
28
29
 
29
30
  def pagador_validations
31
+ pagador.valid_avalista_required = valid_avalista_required if "#{valid_avalista_required}".present?
30
32
  pagador.valid_endereco_required = valid_endereco_required if "#{valid_endereco_required}".present?
31
33
  if pagador.invalid?
32
34
  pagador.errors.full_messages.each do |msg|
@@ -34,10 +34,6 @@ module BrBoleto
34
34
  attr_accessor :valor_documento
35
35
 
36
36
 
37
- # Número da Conta corrente. Campo auto explicativo.
38
- #
39
- attr_accessor :conta_corrente
40
-
41
37
  # Código da moeda. Campo auto explicativo.
42
38
  # Padrão '9' (Real).
43
39
  #
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+ module BrBoleto
3
+ module Boleto
4
+ # Implementação de emissão de boleto bancário pelo Banco Bradesco.
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/bradesco' dentro dessa biblioteca.
10
+ class Bradesco < Base
11
+ def conta_class
12
+ BrBoleto::Conta::Bradesco
13
+ end
14
+
15
+ ################# VALIDAÇÕES DINÂMICAS #################
16
+ def valid_numero_documento_maximum
17
+ 11
18
+ end
19
+
20
+ def valid_carteira_inclusion
21
+ %w[06 09 19 21 22]
22
+ end
23
+
24
+ # Tamanho máximo para o codigo_cedente/Convênio
25
+ def valid_convenio_maximum
26
+ 7
27
+ end
28
+
29
+ # Tamanho máximo de uma conta corrente no Banco Bradesco
30
+ def valid_conta_corrente_maximum
31
+ 7
32
+ end
33
+
34
+ # codigo_cedente/Convênio deve ser obrigatório
35
+ def valid_convenio_required
36
+ true
37
+ end
38
+ ##########################################################
39
+
40
+ # Conforme descrito na documentação, o valor que deve constar em local do pagamento é
41
+ # "PAGÁVEL PREFERENCIALMENTE NA REDE BRADESCO OU NO BRADESCO EXPRESSO"
42
+ def default_values
43
+ super.merge({
44
+ :local_pagamento => 'PAGÁVEL PREFERENCIALMENTE NA REDE BRADESCO OU NO BRADESCO EXPRESSO'
45
+ })
46
+ end
47
+
48
+ # Nosso Número descrito na documentação (Pag. 36).
49
+ # Carteira com 2 (dois) caracteres / N.Número com 11 (onze) caracteres + digito.
50
+ # Exemplo: 99 / 99999999999-D
51
+ def nosso_numero
52
+ "#{conta.carteira}/#{numero_documento}-#{digito_verificador_nosso_numero}"
53
+ end
54
+
55
+ # Para o cálculo do dígito, será necessário acrescentar o número da carteira à esquerda
56
+ # antes do Nosso Número (número do documento), e aplicar o módulo 11, com fatores de 2 a 7.
57
+ # @return [String] Retorno do cálculo do módulo 11 na base 7 (2,3,4,5,6,7)
58
+ def digito_verificador_nosso_numero
59
+ BrBoleto::Calculos::Modulo11FatorDe2a7.new("#{conta.carteira}#{numero_documento}")
60
+ end
61
+
62
+ # === Código de barras do banco
63
+ #
64
+ # ___________________________________________________________________________________________________
65
+ # | Posição | Tamanho | Descrição |
66
+ # |----------|---------|-----------------------------------------------------------------------------|
67
+ # | 20-23 | 04 | Agência (Sem o digito, completar com zeros a esquerda se necessário) |
68
+ # | 24-25 | 02 | Carteira |
69
+ # | 26-36 | 11 | Número do Documento - Número do Nosso Número (Sem o digito verificador) |
70
+ # | 37-43 | 07 | Conta Corrente (Sem o digito, completar com zeros a esquerda se necessário) |
71
+ # | 44 | 01 | Zero |
72
+ # ----------------------------------------------------------------------------------------------------
73
+ #
74
+ def codigo_de_barras_do_banco
75
+ conta_corrente = "#{conta.conta_corrente}".adjust_size_to(7, '0', :right)
76
+ "#{conta.agencia}#{conta.carteira}#{numero_documento}#{conta_corrente}0"
77
+ end
78
+ end
79
+ end
80
+ end
@@ -29,8 +29,12 @@ module BrBoleto
29
29
  end
30
30
 
31
31
  ################# VALIDAÇÕES DINÂMICAS #################
32
+
33
+ # O valor do numero do documento esta diferente em alguns lugares
34
+ # da documentação da CAIXA (11 e 15), foi deixado o valor 11 e
35
+ # preechido 4 posições com '0' onde usava o valor 15
32
36
  def valid_numero_documento_maximum
33
- 15
37
+ 11
34
38
  end
35
39
 
36
40
  # Tamanho máximo para o codigo_cedente/Convênio
@@ -49,7 +53,8 @@ module BrBoleto
49
53
  end
50
54
  def valid_carteira_inclusion
51
55
  %w{14 24}
52
- end
56
+ end
57
+
53
58
  ##########################################################
54
59
 
55
60
  # Conforme descrito na documentação, o valor que deve constar em local do pagamento é
@@ -62,7 +67,7 @@ module BrBoleto
62
67
  end
63
68
 
64
69
  def digito_verificador_nosso_numero
65
- BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new("#{conta.carteira}#{numero_documento}")
70
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new("#{conta.carteira}0000#{numero_documento}")
66
71
  end
67
72
 
68
73
  # Mostra o campo nosso número calculando o dígito verificador do nosso número.
@@ -70,7 +75,7 @@ module BrBoleto
70
75
  # @return [String]
71
76
  #
72
77
  def nosso_numero
73
- "#{conta.carteira}#{numero_documento}-#{digito_verificador_nosso_numero}"
78
+ "#{conta.carteira}0000#{numero_documento}-#{digito_verificador_nosso_numero}"
74
79
  end
75
80
 
76
81
 
@@ -86,13 +91,6 @@ module BrBoleto
86
91
  nosso_numero[8..16]
87
92
  end
88
93
 
89
- # O Tipo de cobrança é o 1° caracter da carteira
90
- #
91
- # @return [String]
92
- #
93
- def tipo_cobranca
94
- conta.carteira[0] if conta.carteira.present?
95
- end
96
94
 
97
95
  # O Identificado de Emissão é o 2° e ultimo caracter da carteira
98
96
  # Normalmente é 4 onde significa que o Beneficiário emitiu o boleto.
@@ -131,7 +129,7 @@ module BrBoleto
131
129
  @composicao_codigo_barras = "#{conta.codigo_cedente}"
132
130
  @composicao_codigo_barras << "#{conta.codigo_cedente_dv}"
133
131
  @composicao_codigo_barras << "#{nosso_numero_de_3_a_5}"
134
- @composicao_codigo_barras << "#{tipo_cobranca}"
132
+ @composicao_codigo_barras << "#{conta.get_tipo_cobranca(conta.codigo_carteira, 240)}"
135
133
  @composicao_codigo_barras << "#{nosso_numero_de_6_a_8}"
136
134
  @composicao_codigo_barras << "#{identificador_de_emissao}"
137
135
  @composicao_codigo_barras << "#{nosso_numero_de_9_a_17}"
@@ -0,0 +1,76 @@
1
+ # encoding: utf-8
2
+ module BrBoleto
3
+ module Boleto
4
+ # Implementação de emissão de boleto bancário pelo Banco Cecred.
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/cecred' dentro dessa biblioteca.
10
+ class Cecred < Base
11
+ def conta_class
12
+ BrBoleto::Conta::Cecred
13
+ end
14
+
15
+ ################# VALIDAÇÕES DINÂMICAS #################
16
+ def valid_numero_documento_maximum
17
+ 9
18
+ end
19
+
20
+ def valid_carteira_inclusion
21
+ %w[1]
22
+ end
23
+
24
+ # Tamanho máximo para o codigo_cedente/Convênio
25
+ def valid_convenio_maximum
26
+ 6
27
+ end
28
+
29
+ # Tamanho máximo de uma conta corrente no Banco Cecred
30
+ def valid_conta_corrente_maximum
31
+ 7
32
+ end
33
+
34
+ # codigo_cedente/Convênio deve ser obrigatório
35
+ def valid_convenio_required
36
+ true
37
+ end
38
+ ##########################################################
39
+
40
+ # Conforme descrito na documentação, o valor que deve constar em local do pagamento é
41
+ # "PAGAVEL PREFERENCIALMENTE NAS COOPERATIVAS DO SISTEMA CECRED."
42
+ def default_values
43
+ super.merge({
44
+ :local_pagamento => 'PAGAVEL PREFERENCIALMENTE NAS COOPERATIVAS DO SISTEMA CECRED.'
45
+ })
46
+ end
47
+
48
+ # Nosso Número descrito na documentação (Pag. 9).
49
+ # 17 Dígitos: 8 primeiros dígitos = Conta corrente + dv, 9 dígitos restantes = Número do boleto (Sequencial)
50
+ # Exemplo: 99999998000000001
51
+ def nosso_numero
52
+ "#{conta.conta_corrente}#{conta.conta_corrente_dv}#{numero_documento}".adjust_size_to(17, '0', :right)
53
+ end
54
+
55
+ # === Código de barras do banco
56
+ #
57
+ # ___________________________________________________________________________________________________
58
+ # | Posição | Tamanho | Descrição |
59
+ # |----------|---------|-----------------------------------------------------------------------------|
60
+ # | 20-25 | 06 | N° convênio da Cooperativa |
61
+ # | 26-33 | 08 | N° conta corrente |
62
+ # | 34-42 | 09 | Número do Boleto |
63
+ # | 43-44 | 02 | Código da carteira |
64
+ # ----------------------------------------------------------------------------------------------------
65
+ #
66
+ def codigo_de_barras_do_banco
67
+ convenio = "#{conta.convenio}".adjust_size_to(6, '0', :right)
68
+ conta_corrente = "#{conta.conta_corrente}#{conta.conta_corrente_dv}".adjust_size_to(8, '0', :right)
69
+ numero_boleto = "#{numero_documento}".adjust_size_to(9, '0', :right)
70
+ carteira = "#{conta.carteira}".adjust_size_to(2, '0', :right)
71
+
72
+ "#{convenio}#{conta_corrente}#{numero_boleto}#{carteira}"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,114 @@
1
+ # encoding: utf-8
2
+ module BrBoleto
3
+ module Boleto
4
+ # Implementação de emissão de boleto bancário pelo Banco Itau.
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
+ class Itau < Base
11
+ def conta_class
12
+ BrBoleto::Conta::Itau
13
+ end
14
+
15
+ ################# VALIDAÇÕES DINÂMICAS #################
16
+ def valid_numero_documento_maximum
17
+ 8
18
+ end
19
+
20
+ def valid_carteira_inclusion
21
+ %w[104 105 107 108 109 112 113 116 117 119 121 122 126 131 134 135 136 142 143 146 147 150 168 169 174 175 180 191 196 198]
22
+ end
23
+
24
+ # Tamanho máximo para o codigo_cedente/Convênio
25
+ def valid_convenio_maximum
26
+ 5
27
+ end
28
+
29
+ # Tamanho máximo de uma conta corrente no Banco Itau
30
+ def valid_conta_corrente_maximum
31
+ 5
32
+ end
33
+
34
+ # codigo_cedente/Convênio deve ser obrigatório
35
+ def valid_convenio_required
36
+ true
37
+ end
38
+ ##########################################################
39
+
40
+ # Conforme descrito na documentação, o valor que deve constar em local do pagamento é
41
+ # "PAGÁVEL EM QUALQUER BANCO OU CORRESPONDENTE ATÉ O VENCIMENTO."
42
+ def default_values
43
+ super.merge({
44
+ :local_pagamento => "PAGÁVEL EM QUALQUER BANCO OU CORRESPONDENTE ATÉ O VENCIMENTO."
45
+ })
46
+ end
47
+
48
+ # Nosso Número descrito na documentação (Pag. 50).
49
+ # Carteira com 3 caracteres / N.Número com 8 caracteres + digito.
50
+ # Exemplo: 999 / 99999999-D
51
+ def nosso_numero
52
+ "#{conta.carteira}/#{numero_documento}-#{digito_verificador_nosso_numero}"
53
+ end
54
+
55
+ # Para a grande maioria das carteiras, são considerados para a obtenção do dígito do nosso número,
56
+ # os dados “AGÊNCIA / CONTA (sem dígito) / CARTEIRA / NOSSO NÚMERO”, calculado pelo critério do Módulo 10.
57
+ #
58
+ # À exceção, estão as carteiras 126 - 131 - 146 - 150 e 168 cuja obtenção
59
+ # está baseada apenas nos dados “CARTEIRA/NOSSO NÚMERO” da operação.
60
+ def digito_verificador_nosso_numero
61
+ if conta.carteira.in?(conta.carteiras_especiais_nosso_numero_dv)
62
+ BrBoleto::Calculos::Modulo10.new("#{conta.carteira}#{numero_documento}")
63
+ else
64
+ BrBoleto::Calculos::Modulo10.new("#{conta.agencia}#{conta.conta_corrente}#{conta.carteira}#{numero_documento}")
65
+ end
66
+ end
67
+
68
+
69
+ # As carteiras de cobrança 107, 122, 142, 143, 196 e 198 são carteiras especiais, sem registro, na qual são utilizadas 15 posições
70
+ # numéricas para identificação do título liquidado (8 do Nosso Número e 7 do Seu Número).
71
+ #
72
+ # === Código de barras do banco (Carteiras 107, 122, 142, 143, 196 e 198)
73
+ #
74
+ # Para essas carteiras o formato do código de barras é o seguinte:
75
+ # ___________________________________________________________________________________________________
76
+ # | Posição | Tamanho | Descrição |
77
+ # |----------|---------|-----------------------------------------------------------------------------|
78
+ # | 20-22 | 03 | Carteira |
79
+ # | 23-30 | 08 | Nosso Número (Sem o digito verificador) |
80
+ # | 31-37 | 07 | Seu Número (Número do Documento) |
81
+ # | 38-42 | 05 | Códgigo Cedente (Convênio) |
82
+ # | 43-43 | 01 | DAC dos campos acima (posições 20 a 42) MOD 10 |
83
+ # | 44-44 | 01 | Zero |
84
+ # ----------------------------------------------------------------------------------------------------
85
+ #
86
+ # === Demais Carteiras
87
+ #
88
+ # Para as demais carteiras o formato do código de barras é o seguinte:
89
+ # _________________________________________________________________________________________
90
+ # | Posição | Tamanho | Descrição |
91
+ # |----------|---------|-------------------------------------------------------------------|
92
+ # | 20-22 | 03 | Carteira |
93
+ # | 23-30 | 08 | Número do documento |
94
+ # | 31-31 | 01 | Digito verificador nosso numero |
95
+ # | 32-35 | 04 | Agência |
96
+ # | 36-40 | 05 | Número da conta corrente |
97
+ # | 41-41 | 01 | Digito verificador conta corrente |
98
+ # | 42-44 | 03 | Zeros |
99
+ # ------------------------------------------------------------------------------------------
100
+ #
101
+ #
102
+ def codigo_de_barras_do_banco
103
+ if conta.carteira.in?(conta.carteiras_especiais_codigo_barras)
104
+ seu_numero = numero_documento.adjust_size_to(7)
105
+ codigo = "#{conta.carteira}#{numero_documento}#{seu_numero}#{conta.codigo_cedente}"
106
+ mod_10 = BrBoleto::Calculos::Modulo10.new(codigo)
107
+ "#{codigo}#{mod_10}0"
108
+ else
109
+ "#{conta.carteira}#{numero_documento}#{digito_verificador_nosso_numero}#{conta.agencia}#{conta.conta_corrente}#{conta.conta_corrente_dv}000"
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,101 @@
1
+ # encoding: utf-8
2
+ module BrBoleto
3
+ module Boleto
4
+
5
+ class Sicredi < Base
6
+
7
+ def conta_class
8
+ BrBoleto::Conta::Sicredi
9
+ end
10
+
11
+ ################# VALIDAÇÕES DINÂMICAS #################
12
+ def valid_numero_documento_maximum
13
+ 5
14
+ end
15
+
16
+ def valid_carteira_inclusion
17
+ %w[1 3]
18
+ end
19
+
20
+ # Tamanho máximo para o codigo_cedente/Convênio
21
+ def valid_convenio_maximum
22
+ 5
23
+ end
24
+
25
+ # Tamanho máximo de uma conta corrente no Banco Sicredi
26
+ def valid_conta_corrente_maximum
27
+ 5
28
+ end
29
+
30
+ # codigo_cedente/Convênio deve ser obrigatório
31
+ def valid_convenio_required
32
+ true
33
+ end
34
+ ##########################################################
35
+
36
+ # Conforme descrito na documentação, o valor que deve constar em local do pagamento é
37
+ # "PAGÁVEL PREFERENCIALMENTE NAS COOPERATIVAS DE CRÉDITO DO SICREDI"
38
+ def default_values
39
+ super.merge({
40
+ :local_pagamento => 'PAGÁVEL PREFERENCIALMENTE NAS COOPERATIVAS DE CRÉDITO DO SICREDI'
41
+ })
42
+ end
43
+
44
+ # Nosso Número descrito na documentação (Pag. 84).
45
+ # O campo Nosso Número deve ser apresentado no formato AA/BXXXXX-D, onde:
46
+ # AA = Ano atual
47
+ # B = Byte que pode ser de 2 a 9. Somente será 1 se forem boletos pré-impressos.
48
+ # XXXXX = número sequencial
49
+ # D = dígito verificador calculado
50
+ # Exemplo: "14/200022-5"
51
+ def nosso_numero
52
+ "#{ano}/#{conta.byte_id}#{numero_documento}-#{digito_verificador_nosso_numero}"
53
+ end
54
+ def digito_verificador_nosso_numero
55
+ BrBoleto::Calculos::Modulo11FatorDe2a9RestoZero.new("#{conta.agencia}#{conta.posto}#{conta.conta_corrente}#{ano}#{conta.byte_id}#{numero_documento}")
56
+ end
57
+ def ano
58
+ data_documento.strftime('%y')
59
+ end
60
+
61
+ # === Código de barras do banco
62
+ #
63
+ # ___________________________________________________________________________________________________
64
+ # | Posição | Tamanho | Descrição |
65
+ # |---------|---------|---------------------------------------------------------------------|
66
+ # | 20 – 20 | 01 | Carteira (1 - Com Registro, 3 - Sem Registro) |
67
+ # | 21 – 21 | 01 | Código da Carteira (1 - Carteira Simples) |
68
+ # | 22 – 30 | 09 | Nosso número com o digito identificador |
69
+ # | 31 – 34 | 04 | Cooperativa de crédito/agência beneficiária |
70
+ # | 35 – 36 | 02 | Posto da cooperativa de crédito/agência beneficiária |
71
+ # | 37 – 41 | 05 | Código do beneficiário |
72
+ # | 42 – 42 | 01 | Será 1 quando houver valor expresso no campo “valor do documento” |
73
+ # | 43 – 43 | 01 | Fixo 0 |
74
+ # | 44 – 44 | 01 | DV do campo livre |
75
+ # |_________________________________________________________________________________________|
76
+ #
77
+ def codigo_de_barras_do_banco
78
+ campo_livre = "#{conta.carteira}"
79
+ campo_livre << "#{conta.codigo_carteira}"
80
+ campo_livre << "#{nosso_numero_codigo_de_barras}"
81
+ campo_livre << "#{conta.agencia}"
82
+ campo_livre << "#{conta.posto}"
83
+ campo_livre << "#{conta.conta_corrente}"
84
+ campo_livre << "#{valor_expresso}"
85
+ campo_livre << "0"
86
+ campo_livre << "#{codigo_dv(campo_livre)}"
87
+ campo_livre
88
+ end
89
+ def codigo_dv(codigo)
90
+ Modulo11FatorDe2a9RestoZero.new(codigo)
91
+ end
92
+ def nosso_numero_codigo_de_barras
93
+ "#{ano}#{conta.byte_id}#{numero_documento}#{digito_verificador_nosso_numero}"
94
+ end
95
+ def valor_expresso
96
+ @valor_documento.present? ? '1' : '0'
97
+ end
98
+
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+ module BrBoleto
3
+ module Boleto
4
+ # Implementação de emissão de boleto bancário pelo Banco Unicred.
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/unicred' dentro dessa biblioteca.
10
+ #
11
+ # A Unicred (através do CobExpress) utiliza e o layout de boleto os arquivos de remessa/retorno disponibilizados pelo Banco Bradesco.
12
+ class Unicred < Bradesco
13
+ def conta_class
14
+ BrBoleto::Conta::Unicred
15
+ end
16
+
17
+ def valid_avalista_required; true end
18
+
19
+ end
20
+ end
21
+ end