brcobranca 4.1.0 → 5.0.0

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