br_boleto 2.0.1 → 2.1.0

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 (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