brcobranca 4.1.0 → 5.0.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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +1 -1
  3. data/.rspec +1 -0
  4. data/.rubocop.yml +1 -1
  5. data/.travis.yml +2 -1
  6. data/Gemfile +4 -4
  7. data/Gemfile.lock +65 -53
  8. data/README.md +18 -5
  9. data/brcobranca.gemspec +8 -6
  10. data/lib/brcobranca/boleto/banco_brasil.rb +25 -27
  11. data/lib/brcobranca/boleto/base.rb +13 -6
  12. data/lib/brcobranca/boleto/bradesco.rb +4 -1
  13. data/lib/brcobranca/boleto/caixa.rb +14 -4
  14. data/lib/brcobranca/boleto/hsbc.rb +26 -26
  15. data/lib/brcobranca/boleto/santander.rb +6 -3
  16. data/lib/brcobranca/boleto/sicredi.rb +3 -5
  17. data/lib/brcobranca/boleto/template/rghost.rb +7 -5
  18. data/lib/brcobranca/boleto/template/rghost_carne.rb +1 -2
  19. data/lib/brcobranca/calculo.rb +19 -93
  20. data/lib/brcobranca/formatacao_string.rb +21 -0
  21. data/lib/brcobranca/remessa/base.rb +59 -0
  22. data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +117 -0
  23. data/lib/brcobranca/remessa/cnab240/base.rb +379 -0
  24. data/lib/brcobranca/remessa/cnab240/caixa.rb +103 -0
  25. data/lib/brcobranca/remessa/cnab400/base.rb +112 -0
  26. data/lib/brcobranca/remessa/cnab400/bradesco.rb +128 -0
  27. data/lib/brcobranca/remessa/cnab400/itau.rb +149 -0
  28. data/lib/brcobranca/remessa/pagamento.rb +159 -0
  29. data/lib/brcobranca/retorno/base.rb +1 -0
  30. data/lib/brcobranca/retorno/retorno_cnab400.rb +0 -2
  31. data/lib/brcobranca/version.rb +1 -1
  32. data/lib/brcobranca.rb +33 -17
  33. data/spec/brcobranca/banco_bradesco_spec.rb +0 -2
  34. data/spec/brcobranca/banco_brasil_spec.rb +0 -2
  35. data/spec/brcobranca/banco_caixa_spec.rb +0 -2
  36. data/spec/brcobranca/banco_hsbc_spec.rb +0 -3
  37. data/spec/brcobranca/banco_itau_spec.rb +0 -1
  38. data/spec/brcobranca/banco_santander_spec.rb +14 -14
  39. data/spec/brcobranca/banco_sicredi_spec.rb +0 -2
  40. data/spec/brcobranca/base_spec.rb +11 -0
  41. data/spec/brcobranca/boletos_em_lote_spec.rb +0 -2
  42. data/spec/brcobranca/core_ext_spec.rb +104 -58
  43. data/spec/brcobranca/remessa/base_spec.rb +87 -0
  44. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +200 -0
  45. data/spec/brcobranca/remessa/cnab240/base_spec.rb +88 -0
  46. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +137 -0
  47. data/spec/brcobranca/remessa/cnab400/base_spec.rb +51 -0
  48. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +174 -0
  49. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +160 -0
  50. data/spec/brcobranca/remessa/pagamento_spec.rb +197 -0
  51. data/spec/brcobranca/retorno_cbr643_spec.rb +0 -2
  52. data/spec/brcobranca/rghost_spec.rb +0 -2
  53. data/spec/shared_examples/cnab240.rb +206 -0
  54. data/spec/shared_examples/cnab400.rb +85 -0
  55. metadata +34 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6893b89d7db26d48d9580c10adfd1a8972fe8cf2
4
- data.tar.gz: 598e64afa782bd06982172c1daee939a18882881
3
+ metadata.gz: 191577bf1cc0eef88703781e90a0fd8a09a84a3c
4
+ data.tar.gz: 14c1e24db904b85354cb45ccbe472e399667dab3
5
5
  SHA512:
6
- metadata.gz: 584a72aec5571102db826e87060ba83a4fa0528ea70ba2ea54b7871696d4d2781792cb77ac900c7bc5d1c909b6a10374943bea59eedeb959e23760b6589755e5
7
- data.tar.gz: 7ca666f4ff5401a66cc30c8276c40b681f9fc198cf7ee0973ae6966a349fbed9fa25cb569b93a6c60ac3100088ce56377b5ced8d9e5babc5b37cd6224883d235
6
+ metadata.gz: ccaf00a578c7470296d4716a7330426d80943dc17bff9844c9f65c9d35ec6297f311bc99a1bb5f8842831f9111636a9fe48f88c083f545d4c377af3a118cafd9
7
+ data.tar.gz: d30517c1f8a64a4279009b4c06ee5eaec0e4c26c9d3d2f0bbae5d4511838a1ba079e538354d9cf12875fb20dba20fa398990bf277d6e5647f0e1603a1cdfe8a4
data/.coveralls.yml CHANGED
@@ -1,2 +1,2 @@
1
1
  service_name: travis-ci
2
- repo_token: EggczsM2SSumFitxyrqRNWaymPbvyXQwL
2
+ repo_token: BY52FW2I5Fbe6DGDfaxZajyneZ8uFszoU
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/.rubocop.yml CHANGED
@@ -9,5 +9,5 @@ Style/CommentAnnotation:
9
9
  Style/Documentation:
10
10
  Enabled: false
11
11
 
12
- Style/LineLength:
12
+ Metrics/LineLength:
13
13
  Enabled: false
data/.travis.yml CHANGED
@@ -1,6 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
- - '2.1.3'
3
+ - '2.2.2'
4
+ - '2.1.6'
4
5
  - '2.0.0'
5
6
  - '1.9.3'
6
7
  - 'jruby'
data/Gemfile CHANGED
@@ -5,13 +5,13 @@ gemspec
5
5
 
6
6
  group :development do
7
7
  gem 'pry', '~> 0.10.0'
8
- gem 'rubocop', '~> 0.26.1'
9
- gem 'rubocop-rspec', '~> 1.2.0'
8
+ gem 'rubocop', '~> 0.32.1'
9
+ gem 'rubocop-rspec', '~> 1.3.0'
10
10
  end
11
11
 
12
12
  group :test do
13
13
  gem 'codeclimate-test-reporter', require: nil
14
14
  gem 'coveralls', require: false
15
- gem 'rspec', '~> 3.1.0'
16
- gem 'rake', '~> 10.3.2'
15
+ gem 'rspec', '~> 3.3'
16
+ gem 'rake', '~> 10.4'
17
17
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- brcobranca (4.0.0)
4
+ brcobranca (5.0.0)
5
5
  activemodel (>= 3)
6
6
  parseline (~> 1.0.3)
7
7
  rghost (= 0.9.5)
@@ -10,43 +10,45 @@ PATH
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
- activemodel (4.1.6)
14
- activesupport (= 4.1.6)
13
+ activemodel (4.2.3)
14
+ activesupport (= 4.2.3)
15
15
  builder (~> 3.1)
16
- activesupport (4.1.6)
17
- i18n (~> 0.6, >= 0.6.9)
16
+ activesupport (4.2.3)
17
+ i18n (~> 0.7)
18
18
  json (~> 1.7, >= 1.7.7)
19
19
  minitest (~> 5.1)
20
- thread_safe (~> 0.1)
20
+ thread_safe (~> 0.3, >= 0.3.4)
21
21
  tzinfo (~> 1.1)
22
22
  ast (2.0.0)
23
23
  astrolabe (1.3.0)
24
24
  parser (>= 2.2.0.pre.3, < 3.0)
25
25
  builder (3.2.2)
26
- codeclimate-test-reporter (0.4.1)
26
+ codeclimate-test-reporter (0.4.7)
27
27
  simplecov (>= 0.7.1, < 1.0.0)
28
28
  coderay (1.1.0)
29
- coveralls (0.7.1)
30
- multi_json (~> 1.3)
31
- rest-client
32
- simplecov (>= 0.7)
33
- term-ansicolor
34
- thor
29
+ coveralls (0.8.2)
30
+ json (~> 1.8)
31
+ rest-client (>= 1.6.8, < 2)
32
+ simplecov (~> 0.10.0)
33
+ term-ansicolor (~> 1.3)
34
+ thor (~> 0.19.1)
35
35
  diff-lcs (1.2.5)
36
36
  docile (1.1.5)
37
- ffi (1.9.5-x86-mingw32)
38
- i18n (0.6.11)
39
- json (1.8.1)
37
+ domain_name (0.5.24)
38
+ unf (>= 0.0.5, < 1.0.0)
39
+ ffi (1.9.10)
40
+ http-cookie (1.0.2)
41
+ domain_name (~> 0.5)
42
+ i18n (0.7.0)
43
+ json (1.8.3)
40
44
  method_source (0.8.2)
41
- mime-types (2.3)
42
- minitest (5.4.2)
43
- multi_json (1.10.1)
44
- netrc (0.7.7)
45
+ mime-types (2.6.1)
46
+ minitest (5.7.0)
47
+ netrc (0.10.3)
45
48
  parseline (1.0.3)
46
- parser (2.2.0.pre.4)
49
+ parser (2.2.2.6)
47
50
  ast (>= 1.1, < 3.0)
48
- slop (~> 3.4, >= 3.4.5)
49
- powerpack (0.0.9)
51
+ powerpack (0.1.1)
50
52
  pry (0.10.1)
51
53
  coderay (~> 1.1.0)
52
54
  method_source (~> 0.8.1)
@@ -57,49 +59,56 @@ GEM
57
59
  slop (~> 3.4)
58
60
  win32console (~> 1.3)
59
61
  rainbow (2.0.0)
60
- rake (10.3.2)
61
- rest-client (1.7.2)
62
+ rake (10.4.2)
63
+ rest-client (1.8.0)
64
+ http-cookie (>= 1.0.2, < 2.0)
62
65
  mime-types (>= 1.16, < 3.0)
63
66
  netrc (~> 0.7)
64
- rest-client (1.7.2-x86-mingw32)
67
+ rest-client (1.8.0-x86-mingw32)
65
68
  ffi (~> 1.9)
69
+ http-cookie (>= 1.0.2, < 2.0)
66
70
  mime-types (>= 1.16, < 3.0)
67
71
  netrc (~> 0.7)
68
72
  rghost (0.9.5)
69
73
  rghost_barcode (0.9)
70
- rspec (3.1.0)
71
- rspec-core (~> 3.1.0)
72
- rspec-expectations (~> 3.1.0)
73
- rspec-mocks (~> 3.1.0)
74
- rspec-core (3.1.5)
75
- rspec-support (~> 3.1.0)
76
- rspec-expectations (3.1.2)
74
+ rspec (3.3.0)
75
+ rspec-core (~> 3.3.0)
76
+ rspec-expectations (~> 3.3.0)
77
+ rspec-mocks (~> 3.3.0)
78
+ rspec-core (3.3.1)
79
+ rspec-support (~> 3.3.0)
80
+ rspec-expectations (3.3.0)
81
+ diff-lcs (>= 1.2.0, < 2.0)
82
+ rspec-support (~> 3.3.0)
83
+ rspec-mocks (3.3.1)
77
84
  diff-lcs (>= 1.2.0, < 2.0)
78
- rspec-support (~> 3.1.0)
79
- rspec-mocks (3.1.2)
80
- rspec-support (~> 3.1.0)
81
- rspec-support (3.1.1)
82
- rubocop (0.26.1)
85
+ rspec-support (~> 3.3.0)
86
+ rspec-support (3.3.0)
87
+ rubocop (0.32.1)
83
88
  astrolabe (~> 1.3)
84
- parser (>= 2.2.0.pre.4, < 3.0)
85
- powerpack (~> 0.0.6)
89
+ parser (>= 2.2.2.5, < 3.0)
90
+ powerpack (~> 0.1)
86
91
  rainbow (>= 1.99.1, < 3.0)
87
92
  ruby-progressbar (~> 1.4)
88
- rubocop-rspec (1.2.0)
89
- ruby-progressbar (1.6.0)
90
- simplecov (0.9.1)
93
+ rubocop-rspec (1.3.0)
94
+ ruby-progressbar (1.7.5)
95
+ simplecov (0.10.0)
91
96
  docile (~> 1.1.0)
92
- multi_json (~> 1.0)
93
- simplecov-html (~> 0.8.0)
94
- simplecov-html (0.8.0)
97
+ json (~> 1.8)
98
+ simplecov-html (~> 0.10.0)
99
+ simplecov-html (0.10.0)
95
100
  slop (3.6.0)
96
- term-ansicolor (1.3.0)
101
+ term-ansicolor (1.3.2)
97
102
  tins (~> 1.0)
98
103
  thor (0.19.1)
99
- thread_safe (0.3.4)
100
- tins (1.3.3)
104
+ thread_safe (0.3.5)
105
+ tins (1.5.4)
101
106
  tzinfo (1.2.2)
102
107
  thread_safe (~> 0.1)
108
+ unf (0.1.4)
109
+ unf_ext
110
+ unf_ext (0.0.7.1)
111
+ unf_ext (0.0.7.1-x86-mingw32)
103
112
  win32console (1.3.2-x86-mingw32)
104
113
 
105
114
  PLATFORMS
@@ -111,7 +120,10 @@ DEPENDENCIES
111
120
  codeclimate-test-reporter
112
121
  coveralls
113
122
  pry (~> 0.10.0)
114
- rake (~> 10.3.2)
115
- rspec (~> 3.1.0)
116
- rubocop (~> 0.26.1)
117
- rubocop-rspec (~> 1.2.0)
123
+ rake (~> 10.4)
124
+ rspec (~> 3.3)
125
+ rubocop (~> 0.32.1)
126
+ rubocop-rspec (~> 1.3.0)
127
+
128
+ BUNDLED WITH
129
+ 1.10.5
data/README.md CHANGED
@@ -4,7 +4,7 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros.
4
4
  [![Build Status](http://img.shields.io/travis/kivanio/brcobranca.svg)][travis]
5
5
  [![Dependency Status](http://img.shields.io/gemnasium/kivanio/brcobranca.svg)][gemnasium]
6
6
  [![Code Climate](http://img.shields.io/codeclimate/github/kivanio/brcobranca.svg)][codeclimate]
7
- [![Coverage Status](http://img.shields.io/coveralls/kivanio/brcobranca.svg)][coveralls]
7
+ [![Coverage Status](https://coveralls.io/repos/kivanio/brcobranca/badge.svg)](https://coveralls.io/r/kivanio/brcobranca)
8
8
 
9
9
  [gem]: https://rubygems.org/gems/brcobranca
10
10
  [travis]: http://travis-ci.org/kivanio/brcobranca
@@ -14,6 +14,7 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros.
14
14
 
15
15
  ### Exemplos
16
16
 
17
+ - https://brcobranca.herokuapp.com
17
18
  - http://github.com/kivanio/brcobranca_exemplo
18
19
 
19
20
  ### Bancos Disponíveis
@@ -44,10 +45,20 @@ Gem para emissão de bloquetos de cobrança para bancos brasileiros.
44
45
 
45
46
  * CBR643
46
47
  * CNAB240
48
+ * CNAB400
47
49
 
48
- ### Documentação dos boletos
50
+ Para CNABs do tipo 240 indico usar a gem [cnab240](https://github.com/eduardordm/cnab240) que é muito completa.
49
51
 
50
- Caso queira verificar(ou adicionar) alguma documentação sobre os boletos, acesse [nosso wiki](https://github.com/kivanio/brcobranca/wiki/Especifica%C3%A7%C3%A3o-dos-Boletos).
52
+ ### Remessas Disponíveis
53
+
54
+ * Banco do Brasil (CNAB240) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
55
+ * Caixa Economica Federal (CNAB240) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
56
+ * Bradesco (CNAB400) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
57
+ * Itaú (CNAB400) [Isabella](https://github.com/isabellaSantos) da [Zaez](http://www.zaez.net)
58
+
59
+ ### Documentação
60
+
61
+ Caso queira verificar(ou adicionar) alguma documentação, acesse [nosso wiki](https://github.com/kivanio/brcobranca/wiki).
51
62
 
52
63
  ### Rubydoc
53
64
 
@@ -58,7 +69,9 @@ Caso queira verificar(ou adicionar) alguma documentação sobre os boletos, aces
58
69
 
59
70
  [![RubyMine](http://www.jetbrains.com/ruby/features/ruby_banners/ruby1/ruby468x60_rubin.gif)](http://www.jetbrains.com/ruby/features?utm_source=RubyMineUser&utm_medium=Banner&utm_campaign=RubyMine)
60
71
 
72
+ [Boleto Simples](https://wwww.boletosimples.com.br)
73
+
61
74
  ### Licença
62
75
 
63
- - BSD
64
- - Copyleft 2009 [Kivanio Barbosa](http://www.workingwithrails.com/recommendation/new/person/5679-kivanio-pereira-barbosa)
76
+ * BSD
77
+ * Copyleft 2009 [Kivanio Barbosa](http://www.workingwithrails.com/recommendation/new/person/5679-kivanio-pereira-barbosa)
data/brcobranca.gemspec CHANGED
@@ -6,18 +6,20 @@ require 'brcobranca/version'
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = 'brcobranca'
8
8
  gem.version = Brcobranca::VERSION
9
- gem.authors = ["Kivanio Barbosa"]
10
- gem.description = %q{Gem para emissao de bloquetos de cobranca de bancos brasileiros.}
11
- gem.summary = %q{Gem que permite trabalhar com bloquetos de cobranca para bancos brasileiros.}
12
- gem.email = %q{kivanio@gmail.com}
13
- gem.homepage = %q{http://rubygems.org/gems/brcobranca}
14
- gem.files = `git ls-files`.split($/)
9
+ gem.authors = ['Kivanio Barbosa']
10
+ gem.description = 'Gem para emissao de bloquetos de cobranca de bancos brasileiros.'
11
+ gem.summary = 'Gem que permite trabalhar com bloquetos de cobranca para bancos brasileiros.'
12
+ gem.email = 'kivanio@gmail.com'
13
+ gem.homepage = 'http://rubygems.org/gems/brcobranca'
14
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
15
15
  gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
16
16
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
17
17
  gem.require_paths = ['lib']
18
18
 
19
19
  gem.requirements = ['GhostScript > 9.0, para gear PDF e código de Barras']
20
20
 
21
+ gem.required_ruby_version = '>= 1.9'
22
+
21
23
  # Gems that must be intalled for sift to work
22
24
  gem.add_dependency 'rghost', '0.9.5'
23
25
  gem.add_dependency 'rghost_barcode', '~> 0.9'
@@ -11,19 +11,17 @@ module Brcobranca
11
11
  valor_tamanho = value.to_s.size
12
12
  registro_tamanho = record.convenio.to_s.size
13
13
  quantidade = case
14
- when (valor_tamanho > 9) && (registro_tamanho == 8)
15
- '9'
16
- when (valor_tamanho > 10) && (registro_tamanho == 7)
17
- '10'
18
- when (valor_tamanho > 7) && (registro_tamanho == 4)
19
- '7'
20
- when (valor_tamanho > 5) && (registro_tamanho == 6) && (!record.codigo_servico)
21
- '5'
22
- when (valor_tamanho > 17) && (registro_tamanho == 6) && (record.codigo_servico)
23
- '17'
24
- else
25
- nil
26
- end
14
+ when (valor_tamanho > 9) && (registro_tamanho == 8)
15
+ '9'
16
+ when (valor_tamanho > 10) && (registro_tamanho == 7)
17
+ '10'
18
+ when (valor_tamanho > 7) && (registro_tamanho == 4)
19
+ '7'
20
+ when (valor_tamanho > 5) && (registro_tamanho == 6) && (!record.codigo_servico)
21
+ '5'
22
+ when (valor_tamanho > 17) && (registro_tamanho == 6) && (record.codigo_servico)
23
+ '17'
24
+ end
27
25
  record.errors.add attr, "deve ser menor ou igual a #{quantidade} dígitos." if quantidade
28
26
  end
29
27
 
@@ -52,14 +50,14 @@ module Brcobranca
52
50
  #
53
51
  # @return [String] 1 caracteres numéricos.
54
52
  def banco_dv
55
- banco.modulo11_9to2_10_como_x
53
+ banco.modulo11(mapeamento: { 10 => 'X' })
56
54
  end
57
55
 
58
56
  # Retorna dígito verificador da agência
59
57
  #
60
58
  # @return [String] 1 caracteres numéricos.
61
59
  def agencia_dv
62
- agencia.modulo11_9to2_10_como_x
60
+ agencia.modulo11(mapeamento: { 10 => 'X' })
63
61
  end
64
62
 
65
63
  # Conta corrente
@@ -71,7 +69,7 @@ module Brcobranca
71
69
  # Dígito verificador da conta corrente
72
70
  # @return [String] 1 caracteres numéricos.
73
71
  def conta_corrente_dv
74
- conta_corrente.modulo11_9to2_10_como_x
72
+ conta_corrente.modulo11(mapeamento: { 10 => 'X' })
75
73
  end
76
74
 
77
75
  # Número seqüencial utilizado para identificar o boleto.
@@ -95,16 +93,16 @@ module Brcobranca
95
93
  # @return [String] 17 caracteres numéricos.
96
94
  def numero_documento
97
95
  quantidade = case @convenio.to_s.size
98
- when 8
99
- 9
100
- when 7
101
- 10
102
- when 4
103
- 7
104
- when 6
105
- codigo_servico ? 17 : 5
106
- else
107
- fail Brcobranca::NaoImplementado.new('Tipo de convênio não implementado.')
96
+ when 8
97
+ 9
98
+ when 7
99
+ 10
100
+ when 4
101
+ 7
102
+ when 6
103
+ codigo_servico ? 17 : 5
104
+ else
105
+ fail Brcobranca::NaoImplementado.new('Tipo de convênio não implementado.')
108
106
  end
109
107
  quantidade ? @numero_documento.to_s.rjust(quantidade, '0') : @numero_documento
110
108
  end
@@ -113,7 +111,7 @@ module Brcobranca
113
111
  # @return [String] 1 caracteres numéricos.
114
112
  # @see BancoBrasil#numero_documento
115
113
  def nosso_numero_dv
116
- "#{convenio}#{numero_documento}".modulo11_9to2_10_como_x
114
+ "#{convenio}#{numero_documento}".modulo11(mapeamento: { 10 => 'X' })
117
115
  end
118
116
 
119
117
  # Nosso número para exibir no boleto.
@@ -108,7 +108,7 @@ module Brcobranca
108
108
  # Dígito verificador do banco
109
109
  # @return [Integer] 1 caracteres numéricos.
110
110
  def banco_dv
111
- banco.modulo11_9to2
111
+ banco.modulo11
112
112
  end
113
113
 
114
114
  # Código da agencia
@@ -120,19 +120,19 @@ module Brcobranca
120
120
  # Dígito verificador da agência
121
121
  # @return [Integer] 1 caracteres numéricos.
122
122
  def agencia_dv
123
- agencia.modulo11_9to2
123
+ agencia.modulo11
124
124
  end
125
125
 
126
126
  # Dígito verificador da conta corrente
127
127
  # @return [Integer] 1 caracteres numéricos.
128
128
  def conta_corrente_dv
129
- conta_corrente.modulo11_9to2
129
+ conta_corrente.modulo11
130
130
  end
131
131
 
132
132
  # Dígito verificador do nosso número
133
133
  # @return [Integer] 1 caracteres numéricos.
134
134
  def nosso_numero_dv
135
- numero_documento.modulo11_9to2
135
+ numero_documento.modulo11
136
136
  end
137
137
 
138
138
  # @abstract Deverá ser sobreescrito para cada banco.
@@ -156,8 +156,10 @@ module Brcobranca
156
156
  # @return [Date]
157
157
  # @raise [ArgumentError] Caso {#data_documento} esteja em branco.
158
158
  def data_vencimento
159
- fail ArgumentError, 'data_documento não pode estar em branco.' unless data_documento
159
+ fail ArgumentError, 'Data Documento não pode estar em branco.' unless data_documento.present?
160
160
  return data_documento unless dias_vencimento
161
+
162
+ self.data_documento = Date.parse(data_documento) if data_documento.is_a?(String)
161
163
  (data_documento + dias_vencimento.to_i)
162
164
  end
163
165
 
@@ -191,7 +193,12 @@ module Brcobranca
191
193
  codigo = codigo_barras_primeira_parte # 18 digitos
192
194
  codigo << codigo_barras_segunda_parte # 25 digitos
193
195
  if codigo =~ /^(\d{4})(\d{39})$/
194
- codigo_dv = codigo.modulo11_2to9
196
+
197
+ codigo_dv = codigo.modulo11(
198
+ multiplicador: (2..9).to_a,
199
+ mapeamento: { 0 => 1, 10 => 1, 11 => 1 }
200
+ ) { |t| 11 - (t % 11) }
201
+
195
202
  codigo = "#{Regexp.last_match[1]}#{codigo_dv}#{Regexp.last_match[2]}"
196
203
  codigo
197
204
  else
@@ -46,7 +46,10 @@ module Brcobranca
46
46
  end
47
47
 
48
48
  def nosso_numero_dv
49
- "#{carteira}#{numero_documento}".modulo11_bradesco
49
+ "#{carteira}#{numero_documento}".modulo11(
50
+ multiplicador: [2, 3, 4, 5, 6, 7],
51
+ mapeamento: { 10 => 'P', 11 => 0 }
52
+ ) { |total| 11 - (total % 11) }
50
53
  end
51
54
 
52
55
  # Agência + conta corrente do cliente para exibir no boleto.
@@ -45,7 +45,7 @@ module Brcobranca
45
45
  def banco_dv
46
46
  '0'
47
47
  end
48
-
48
+
49
49
  # Número do convênio/contrato do cliente junto ao banco.
50
50
  # @return [String] 6 caracteres numéricos.
51
51
  def convenio=(valor)
@@ -70,7 +70,10 @@ module Brcobranca
70
70
  # Utiliza-se o [-1..-1] para retornar o último caracter
71
71
  # @return [String]
72
72
  def nosso_numero_dv
73
- "#{carteira}#{numero_documento}".modulo11_2to9_caixa.to_s
73
+ "#{carteira}#{numero_documento}".modulo11(
74
+ multiplicador: (2..9).to_a,
75
+ mapeamento: { 10 => 0, 11 => 0 }
76
+ ) { |total| 11 - (total % 11) }.to_s
74
77
  end
75
78
 
76
79
  # Número da agência/código cedente do cliente para exibir no boleto.
@@ -84,7 +87,10 @@ module Brcobranca
84
87
  # Dígito verificador do convênio ou código do cedente
85
88
  # @return [String]
86
89
  def convenio_dv
87
- "#{convenio.modulo11_2to9_caixa}"
90
+ convenio.modulo11(
91
+ multiplicador: (2..9).to_a,
92
+ mapeamento: { 10 => 0, 11 => 0 }
93
+ ) { |total| 11 - (total % 11) }.to_s
88
94
  end
89
95
 
90
96
  # Monta a segunda parte do código de barras.
@@ -106,7 +112,11 @@ module Brcobranca
106
112
  "#{nosso_numero_boleto[1..1]}" \
107
113
  "#{nosso_numero_boleto[8..16]}"
108
114
 
109
- "#{campo_livre}#{campo_livre.modulo11_2to9_caixa}"
115
+ "#{campo_livre}" +
116
+ campo_livre.modulo11(
117
+ multiplicador: (2..9).to_a,
118
+ mapeamento: { 10 => 0, 11 => 0 }
119
+ ) { |total| 11 - (total % 11) }.to_s
110
120
  end
111
121
  end
112
122
  end
@@ -42,29 +42,29 @@ module Brcobranca
42
42
  # @raise [Brcobranca::NaoImplementado] Caso a carteira informada não for CNR/CSB.
43
43
  def nosso_numero
44
44
  case carteira
45
- when 'CNR' then
46
- if data_vencimento.is_a?(Date)
47
- self.codigo_servico = '4'
48
- dia = data_vencimento.day.to_s.rjust(2, '0')
49
- mes = data_vencimento.month.to_s.rjust(2, '0')
50
- ano = data_vencimento.year.to_s[2..3]
51
- data = "#{dia}#{mes}#{ano}"
45
+ when 'CNR' then
46
+ if data_vencimento.is_a?(Date)
47
+ self.codigo_servico = '4'
48
+ dia = data_vencimento.day.to_s.rjust(2, '0')
49
+ mes = data_vencimento.month.to_s.rjust(2, '0')
50
+ ano = data_vencimento.year.to_s[2..3]
51
+ data = "#{dia}#{mes}#{ano}"
52
52
 
53
- parte_1 = "#{numero_documento}#{numero_documento.modulo11_9to2_10_como_zero}#{codigo_servico}"
54
- soma = parte_1.to_i + conta_corrente.to_i + data.to_i
55
- "#{parte_1}#{soma.to_s.modulo11_9to2_10_como_zero}"
56
- else
57
- fail 'data_vencimento não é uma data.'
58
- end
59
- when 'CSB'
60
- @nosso_numero
53
+ parte_1 = "#{numero_documento}#{numero_documento.modulo11(mapeamento: { 10 => 0 })}#{codigo_servico}"
54
+ soma = parte_1.to_i + conta_corrente.to_i + data.to_i
55
+ "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
61
56
  else
62
- fail Brcobranca::NaoImplementado.new('Tipo de carteira não implementado.')
57
+ fail 'data_vencimento não é uma data.'
58
+ end
59
+ when 'CSB'
60
+ @nosso_numero
61
+ else
62
+ fail Brcobranca::NaoImplementado.new('Tipo de carteira não implementado.')
63
63
  # TODO - Verificar outras carteiras.
64
64
  # self.codigo_servico = "5"
65
- # parte_1 = "#{self.numero_documento}#{self.numero_documento.modulo11_9to2_10_como_zero}#{self.codigo_servico}"
65
+ # parte_1 = "#{self.numero_documento}#{self.numero_documento.modulo11(mapeamento: { 10 => 0 })}#{self.codigo_servico}"
66
66
  # soma = parte_1.to_i + self.conta_corrente.to_i
67
- # numero = "#{parte_1}#{soma.to_s.modulo11_9to2_10_como_zero}"
67
+ # numero = "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
68
68
  # numero
69
69
  end
70
70
  end
@@ -94,14 +94,14 @@ module Brcobranca
94
94
  # @raise [Brcobranca::NaoImplementado] Caso a carteira informada não for CNR/CSB.
95
95
  def codigo_barras_segunda_parte
96
96
  case carteira
97
- when 'CNR'
98
- dias_julianos = data_vencimento.to_juliano
99
- "#{conta_corrente}#{numero_documento}#{dias_julianos}2"
100
- when 'CSB'
101
- fail Brcobranca::NaoImplementado.new('Nosso número não definido.') unless @nosso_numero
102
- "#{nosso_numero}#{agencia}#{conta_corrente}001"
103
- else
104
- fail Brcobranca::NaoImplementado.new('Tipo de carteira não implementado.')
97
+ when 'CNR'
98
+ dias_julianos = data_vencimento.to_juliano
99
+ "#{conta_corrente}#{numero_documento}#{dias_julianos}2"
100
+ when 'CSB'
101
+ fail Brcobranca::NaoImplementado.new('Nosso número não definido.') unless @nosso_numero
102
+ "#{nosso_numero}#{agencia}#{conta_corrente}001"
103
+ else
104
+ fail Brcobranca::NaoImplementado.new('Tipo de carteira não implementado.')
105
105
  end
106
106
  end
107
107
  end
@@ -54,8 +54,11 @@ module Brcobranca
54
54
  # Dígito verificador do nosso número.
55
55
  # @return [String] 1 caracteres numéricos.
56
56
  def nosso_numero_dv
57
- nosso_numero = self.numero_documento.to_s.rjust(12, '0') unless self.numero_documento.nil?
58
- nosso_numero.modulo11_santander
57
+ nosso_numero = numero_documento.to_s.rjust(12, '0') unless numero_documento.nil?
58
+ nosso_numero.modulo11(
59
+ multiplicador: (2..9).to_a,
60
+ mapeamento: { 10 => 0, 11 => 0 }
61
+ ) { |total| 11 - (total % 11) }
59
62
  end
60
63
 
61
64
  # Nosso número para exibir no boleto.
@@ -85,7 +88,7 @@ module Brcobranca
85
88
  #
86
89
  # @return [String] 25 caracteres numéricos.
87
90
  def codigo_barras_segunda_parte
88
- "9#{self.convenio}0000#{self.numero_documento}#{self.nosso_numero_dv}0#{self.carteira}"
91
+ "9#{convenio}0000#{numero_documento}#{nosso_numero_dv}0#{carteira}"
89
92
  end
90
93
  end
91
94
  end
@@ -86,14 +86,12 @@ module Brcobranca
86
86
  # Codigo referente ao tipo de carteira
87
87
  # @return [String]: 1 caractere numérico
88
88
  def tipo_carteira
89
- if carteira == '03'
90
- '1'
91
- end
89
+ '1' if carteira == '03'
92
90
  end
93
91
  # Dígito verificador do nosso número
94
92
  # @return [Integer] 1 caracteres numéricos.
95
93
  def nosso_numero_dv
96
- "#{agencia_posto_conta}#{numero_documento_with_byte_idt}".modulo11_9to2
94
+ "#{agencia_posto_conta}#{numero_documento_with_byte_idt}".modulo11
97
95
  end
98
96
 
99
97
  def agencia_conta_boleto
@@ -107,7 +105,7 @@ module Brcobranca
107
105
  # Segunda parte do código de barras.
108
106
  def codigo_barras_segunda_parte
109
107
  campo_livre = "#{tipo_cobranca}#{tipo_carteira}#{nosso_numero_boleto.gsub(/\D/, '')}#{agencia_posto_conta}10"
110
- campo_livre + campo_livre.modulo11_9to2_10_como_zero.to_s
108
+ campo_livre + campo_livre.modulo11(mapeamento: { 10 => 0 }).to_s
111
109
  end
112
110
  end
113
111
  end