brcobranca 4.1.0 → 5.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -1
- data/.rspec +1 -0
- data/.rubocop.yml +1 -1
- data/.travis.yml +2 -1
- data/Gemfile +4 -4
- data/Gemfile.lock +65 -53
- data/README.md +18 -5
- data/brcobranca.gemspec +8 -6
- data/lib/brcobranca/boleto/banco_brasil.rb +25 -27
- data/lib/brcobranca/boleto/base.rb +13 -6
- data/lib/brcobranca/boleto/bradesco.rb +4 -1
- data/lib/brcobranca/boleto/caixa.rb +14 -4
- data/lib/brcobranca/boleto/hsbc.rb +26 -26
- data/lib/brcobranca/boleto/santander.rb +6 -3
- data/lib/brcobranca/boleto/sicredi.rb +3 -5
- data/lib/brcobranca/boleto/template/rghost.rb +7 -5
- data/lib/brcobranca/boleto/template/rghost_carne.rb +1 -2
- data/lib/brcobranca/calculo.rb +19 -93
- data/lib/brcobranca/formatacao_string.rb +21 -0
- data/lib/brcobranca/remessa/base.rb +59 -0
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +117 -0
- data/lib/brcobranca/remessa/cnab240/base.rb +379 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +103 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +112 -0
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +128 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +149 -0
- data/lib/brcobranca/remessa/pagamento.rb +159 -0
- data/lib/brcobranca/retorno/base.rb +1 -0
- data/lib/brcobranca/retorno/retorno_cnab400.rb +0 -2
- data/lib/brcobranca/version.rb +1 -1
- data/lib/brcobranca.rb +33 -17
- data/spec/brcobranca/banco_bradesco_spec.rb +0 -2
- data/spec/brcobranca/banco_brasil_spec.rb +0 -2
- data/spec/brcobranca/banco_caixa_spec.rb +0 -2
- data/spec/brcobranca/banco_hsbc_spec.rb +0 -3
- data/spec/brcobranca/banco_itau_spec.rb +0 -1
- data/spec/brcobranca/banco_santander_spec.rb +14 -14
- data/spec/brcobranca/banco_sicredi_spec.rb +0 -2
- data/spec/brcobranca/base_spec.rb +11 -0
- data/spec/brcobranca/boletos_em_lote_spec.rb +0 -2
- data/spec/brcobranca/core_ext_spec.rb +104 -58
- data/spec/brcobranca/remessa/base_spec.rb +87 -0
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +200 -0
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +88 -0
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +137 -0
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +51 -0
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +174 -0
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +160 -0
- data/spec/brcobranca/remessa/pagamento_spec.rb +197 -0
- data/spec/brcobranca/retorno_cbr643_spec.rb +0 -2
- data/spec/brcobranca/rghost_spec.rb +0 -2
- data/spec/shared_examples/cnab240.rb +206 -0
- data/spec/shared_examples/cnab400.rb +85 -0
- metadata +34 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 191577bf1cc0eef88703781e90a0fd8a09a84a3c
|
4
|
+
data.tar.gz: 14c1e24db904b85354cb45ccbe472e399667dab3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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:
|
2
|
+
repo_token: BY52FW2I5Fbe6DGDfaxZajyneZ8uFszoU
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
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.
|
9
|
-
gem 'rubocop-rspec', '~> 1.
|
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.
|
16
|
-
gem 'rake', '~> 10.
|
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
|
+
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.
|
14
|
-
activesupport (= 4.
|
13
|
+
activemodel (4.2.3)
|
14
|
+
activesupport (= 4.2.3)
|
15
15
|
builder (~> 3.1)
|
16
|
-
activesupport (4.
|
17
|
-
i18n (~> 0.
|
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.
|
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.
|
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.
|
30
|
-
|
31
|
-
rest-client
|
32
|
-
simplecov (
|
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
|
-
|
38
|
-
|
39
|
-
|
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.
|
42
|
-
minitest (5.
|
43
|
-
|
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.
|
49
|
+
parser (2.2.2.6)
|
47
50
|
ast (>= 1.1, < 3.0)
|
48
|
-
|
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.
|
61
|
-
rest-client (1.
|
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.
|
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.
|
71
|
-
rspec-core (~> 3.
|
72
|
-
rspec-expectations (~> 3.
|
73
|
-
rspec-mocks (~> 3.
|
74
|
-
rspec-core (3.1
|
75
|
-
rspec-support (~> 3.
|
76
|
-
rspec-expectations (3.
|
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.
|
79
|
-
rspec-
|
80
|
-
|
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.
|
85
|
-
powerpack (~> 0.
|
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.
|
89
|
-
ruby-progressbar (1.
|
90
|
-
simplecov (0.
|
93
|
+
rubocop-rspec (1.3.0)
|
94
|
+
ruby-progressbar (1.7.5)
|
95
|
+
simplecov (0.10.0)
|
91
96
|
docile (~> 1.1.0)
|
92
|
-
|
93
|
-
simplecov-html (~> 0.
|
94
|
-
simplecov-html (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.
|
101
|
+
term-ansicolor (1.3.2)
|
97
102
|
tins (~> 1.0)
|
98
103
|
thor (0.19.1)
|
99
|
-
thread_safe (0.3.
|
100
|
-
tins (1.
|
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.
|
115
|
-
rspec (~> 3.
|
116
|
-
rubocop (~> 0.
|
117
|
-
rubocop-rspec (~> 1.
|
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](
|
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
|
-
|
50
|
+
Para CNABs do tipo 240 indico usar a gem [cnab240](https://github.com/eduardordm/cnab240) que é muito completa.
|
49
51
|
|
50
|
-
|
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
|
-
|
64
|
-
|
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 = [
|
10
|
-
gem.description =
|
11
|
-
gem.summary =
|
12
|
-
gem.email =
|
13
|
-
gem.homepage =
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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.
|
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.
|
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.
|
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
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
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}".
|
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.
|
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.
|
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.
|
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.
|
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, '
|
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
|
-
|
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}".
|
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}".
|
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
|
-
|
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}
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
54
|
-
|
55
|
-
|
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
|
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.
|
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.
|
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
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
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 =
|
58
|
-
nosso_numero.
|
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#{
|
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}".
|
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.
|
108
|
+
campo_livre + campo_livre.modulo11(mapeamento: { 10 => 0 }).to_s
|
111
109
|
end
|
112
110
|
end
|
113
111
|
end
|