brcobranca 8.0.0 → 9.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/.travis.yml +5 -3
- data/CHANGELOG.md +9 -0
- data/Gemfile +2 -2
- data/README.md +24 -12
- data/brcobranca.gemspec +0 -2
- data/lib/brcobranca.rb +43 -26
- data/lib/brcobranca/arquivos/logos/bancobrasilia.eps +0 -0
- data/lib/brcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
- data/lib/brcobranca/arquivos/logos/cecred.eps +427 -0
- data/lib/brcobranca/arquivos/logos/cecred_carne.eps +427 -0
- data/lib/brcobranca/arquivos/logos/credisis.eps +5402 -0
- data/lib/brcobranca/arquivos/logos/credisis_carne.eps +5410 -0
- data/lib/brcobranca/arquivos/templates/modelo_generico.eps +0 -0
- data/lib/brcobranca/boleto/banco_brasil.rb +21 -21
- data/lib/brcobranca/boleto/banco_brasilia.rb +96 -0
- data/lib/brcobranca/boleto/banco_nordeste.rb +4 -6
- data/lib/brcobranca/boleto/banestes.rb +7 -7
- data/lib/brcobranca/boleto/banrisul.rb +5 -5
- data/lib/brcobranca/boleto/base.rb +28 -22
- data/lib/brcobranca/boleto/bradesco.rb +6 -6
- data/lib/brcobranca/boleto/caixa.rb +11 -18
- data/lib/brcobranca/boleto/cecred.rb +86 -0
- data/lib/brcobranca/boleto/credisis.rb +124 -0
- data/lib/brcobranca/boleto/hsbc.rb +10 -27
- data/lib/brcobranca/boleto/itau.rb +9 -10
- data/lib/brcobranca/boleto/santander.rb +5 -6
- data/lib/brcobranca/boleto/sicoob.rb +5 -5
- data/lib/brcobranca/boleto/sicredi.rb +7 -7
- data/lib/brcobranca/boleto/template/rghost.rb +127 -80
- data/lib/brcobranca/boleto/template/rghost_carne.rb +9 -9
- data/lib/brcobranca/boleto/unicred.rb +126 -4
- data/lib/brcobranca/calculo_data.rb +3 -0
- data/lib/brcobranca/formatacao_string.rb +15 -5
- data/lib/brcobranca/remessa/base.rb +16 -9
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -13
- data/lib/brcobranca/remessa/cnab240/base.rb +252 -119
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +299 -0
- data/lib/brcobranca/remessa/cnab240/caixa.rb +61 -7
- data/lib/brcobranca/remessa/cnab240/cecred.rb +151 -0
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +109 -123
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +177 -0
- data/lib/brcobranca/remessa/cnab240/unicred.rb +9 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +14 -0
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +4 -6
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +155 -0
- data/lib/brcobranca/remessa/cnab400/base.rb +4 -4
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +7 -8
- data/lib/brcobranca/remessa/cnab400/citibank.rb +3 -4
- data/lib/brcobranca/remessa/cnab400/credisis.rb +128 -0
- data/lib/brcobranca/remessa/cnab400/itau.rb +23 -6
- data/lib/brcobranca/remessa/cnab400/santander.rb +80 -65
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +2 -2
- data/lib/brcobranca/remessa/cnab400/unicred.rb +143 -0
- data/lib/brcobranca/remessa/pagamento.rb +50 -14
- data/lib/brcobranca/retorno/base.rb +4 -4
- data/lib/brcobranca/retorno/cnab240/base.rb +11 -8
- data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -0
- data/lib/brcobranca/retorno/cnab240/cecred.rb +102 -0
- data/lib/brcobranca/retorno/cnab240/santander.rb +35 -12
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +8 -4
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +79 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +127 -0
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +42 -0
- data/lib/brcobranca/retorno/cnab400/base.rb +18 -7
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +9 -3
- data/lib/brcobranca/retorno/cnab400/credisis.rb +115 -0
- data/lib/brcobranca/retorno/cnab400/itau.rb +10 -4
- data/lib/brcobranca/retorno/cnab400/santander.rb +57 -0
- data/lib/brcobranca/retorno/cnab400/unicred.rb +118 -0
- data/lib/brcobranca/retorno/retorno_cnab240.rb +7 -3
- data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -77
- data/lib/brcobranca/util/date.rb +20 -0
- data/lib/brcobranca/util/errors.rb +76 -0
- data/lib/brcobranca/validations.rb +232 -0
- data/lib/brcobranca/version.rb +1 -1
- data/spec/arquivos/CNAB240CECRED.RET +10 -0
- data/spec/arquivos/CNAB240SANTANDER.RET +8 -26
- data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
- data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
- data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
- data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
- data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
- data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
- data/spec/arquivos/CNAB400UNICRED.RET +3 -0
- data/spec/brcobranca/base_spec.rb +6 -4
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +22 -22
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +134 -0
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +19 -19
- data/spec/brcobranca/boleto/banestes_spec.rb +19 -19
- data/spec/brcobranca/boleto/banrisul_spec.rb +14 -14
- data/spec/brcobranca/boleto/bradesco_spec.rb +13 -13
- data/spec/brcobranca/boleto/caixa_spec.rb +7 -7
- data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
- data/spec/brcobranca/boleto/credisis_spec.rb +155 -0
- data/spec/brcobranca/boleto/hsbc_spec.rb +17 -37
- data/spec/brcobranca/boleto/itau_spec.rb +16 -16
- data/spec/brcobranca/boleto/santander_spec.rb +11 -11
- data/spec/brcobranca/boleto/sicoob_spec.rb +17 -17
- data/spec/brcobranca/boleto/sicredi_spec.rb +13 -13
- data/spec/brcobranca/boleto/unicred_spec.rb +10 -10
- data/spec/brcobranca/boletos_em_lote_spec.rb +1 -1
- data/spec/brcobranca/formatacao_string_spec.rb +1 -1
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +10 -18
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +39 -38
- data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +58 -39
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +4 -2
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +1 -1
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +16 -11
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +11 -11
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +25 -12
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +35 -36
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +37 -0
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
- data/spec/brcobranca/remessa/pagamento_spec.rb +45 -27
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +7 -8
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +35 -18
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +20 -19
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +34 -13
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +4 -4
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -4
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +1 -1
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +1 -1
- data/spec/brcobranca/rghost_spec.rb +1 -1
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +5 -4
- data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +5 -4
- data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +6 -5
- data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +1 -1
- data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
- data/spec/fixtures/remessa/remessa-itau-cnab400.rem +3 -2
- data/spec/fixtures/remessa/remessa-santander-cnab400.rem +2 -2
- data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
- data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
- data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
- data/spec/support/shared_examples/busca_logotipo.rb +0 -2
- data/spec/support/shared_examples/cnab240.rb +92 -28
- data/spec/support/shared_examples/cnab400.rb +60 -14
- data/spec/support/shared_examples/formatos_validos.rb +6 -6
- metadata +103 -31
@@ -1,20 +1,21 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
|
-
|
4
2
|
require 'spec_helper'
|
5
3
|
|
6
4
|
RSpec.describe Brcobranca::Remessa::Cnab400::Itau do
|
7
5
|
let(:pagamento) do
|
8
6
|
Brcobranca::Remessa::Pagamento.new(valor: 199.9,
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
data_vencimento: Date.current,
|
8
|
+
nosso_numero: 123,
|
9
|
+
documento: 6969,
|
10
|
+
documento_sacado: '12345678901',
|
11
|
+
nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
|
12
|
+
endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
|
13
|
+
bairro_sacado: 'São josé dos quatro apostolos magros',
|
14
|
+
cep_sacado: '12345678',
|
15
|
+
cidade_sacado: 'Santa rita de cássia maria da silva',
|
16
|
+
codigo_multa: '1',
|
17
|
+
percentual_multa: 2.00,
|
18
|
+
uf_sacado: 'SP')
|
18
19
|
end
|
19
20
|
let(:params) do
|
20
21
|
{ carteira: '123',
|
@@ -155,7 +156,8 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Itau do
|
|
155
156
|
|
156
157
|
context 'detalhe' do
|
157
158
|
it 'informacoes devem estar posicionadas corretamente no detalhe' do
|
158
|
-
detalhe = itau.monta_detalhe pagamento,
|
159
|
+
detalhe = itau.monta_detalhe pagamento, 2
|
160
|
+
expect(detalhe[37..61]).to eq "6969".ljust(25)
|
159
161
|
expect(detalhe[62..69]).to eq '00000123' # nosso numero
|
160
162
|
expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
|
161
163
|
expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
|
@@ -165,6 +167,17 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Itau do
|
|
165
167
|
expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
|
166
168
|
expect(detalhe[234..263]).to eq 'PABLO DIEGO JOSE FRANCISCO DE ' # nome do pagador
|
167
169
|
end
|
170
|
+
|
171
|
+
it 'informacoes devem estar posicionadas corretamente no detalhe opcional de multa' do
|
172
|
+
detalhe_multa = itau.monta_detalhe_multa pagamento, 3
|
173
|
+
# Significado Posição Picture
|
174
|
+
expect(detalhe_multa[0]).to eq '2' # Identificação do reg. transação [001..001] 9(001)
|
175
|
+
expect(detalhe_multa[1]).to eq '1' # Código da multa [002..002] X(001)
|
176
|
+
expect(detalhe_multa[2..9]).to eq Date.current.strftime('%d%m%Y') # Data da multa [003..010] 9(008)
|
177
|
+
expect(detalhe_multa[10..22]).to eq '0000000000200' # Valor da multa [011..023] 9(013)
|
178
|
+
expect(detalhe_multa[23..393]).to eq ''.rjust(371, ' ') # Complemento [024..394] X(370)
|
179
|
+
expect(detalhe_multa[394..399]).to eq '000003' # Número sequencial [395..400] 9(006)
|
180
|
+
end
|
168
181
|
end
|
169
182
|
|
170
183
|
context 'arquivo' do
|
@@ -1,20 +1,24 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
|
-
|
4
2
|
require 'spec_helper'
|
5
3
|
|
6
4
|
RSpec.describe Brcobranca::Remessa::Cnab400::Santander do
|
7
5
|
let(:pagamento) do
|
8
6
|
Brcobranca::Remessa::Pagamento.new(valor: 199.9,
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
data_vencimento: Date.current,
|
8
|
+
codigo_multa: '4',
|
9
|
+
percentual_multa: '2.00',
|
10
|
+
valor_mora: '8.00',
|
11
|
+
cod_primeira_instrucao: '06',
|
12
|
+
dias_protesto: '6',
|
13
|
+
nosso_numero: 123,
|
14
|
+
documento: 6969,
|
15
|
+
documento_sacado: '12345678901',
|
16
|
+
nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
|
17
|
+
endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
|
18
|
+
bairro_sacado: 'São josé dos quatro apostolos magros',
|
19
|
+
cep_sacado: '12345678',
|
20
|
+
cidade_sacado: 'Santa rita de cássia maria da silva',
|
21
|
+
uf_sacado: 'SP')
|
18
22
|
end
|
19
23
|
let(:params) do
|
20
24
|
{
|
@@ -37,12 +41,6 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Santander do
|
|
37
41
|
expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
|
38
42
|
end
|
39
43
|
|
40
|
-
it 'deve ser invalido' do
|
41
|
-
object = subject.class.new
|
42
|
-
expect(object.invalid?).to be true
|
43
|
-
expect(object.errors.full_messages).to eq(['Pagamentos não pode estar em branco.', 'Pagamentos deve ser uma coleção (Array).', 'Empresa mae não pode estar em branco.', 'Documento cedente não pode estar em branco.', 'Documento cedente deve ter entre 11 e 14 dígitos.', 'Codigo transmissao não pode estar em branco.', 'Agencia não pode estar em branco.', 'Conta corrente não pode estar em branco.', 'Digito conta não pode estar em branco.'])
|
44
|
-
end
|
45
|
-
|
46
44
|
it 'deve ser invalido se a carteira tiver mais de 3 digitos' do
|
47
45
|
santander.carteira = '12345'
|
48
46
|
expect(santander.invalid?).to be true
|
@@ -80,7 +78,7 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Santander do
|
|
80
78
|
end
|
81
79
|
|
82
80
|
context 'formatacoes dos valores' do
|
83
|
-
it 'cod_banco deve ser
|
81
|
+
it 'cod_banco deve ser 033' do
|
84
82
|
expect(santander.cod_banco).to eq '033'
|
85
83
|
end
|
86
84
|
|
@@ -93,14 +91,15 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Santander do
|
|
93
91
|
expect(santander.complemento.size).to eq 275
|
94
92
|
end
|
95
93
|
|
96
|
-
it 'complemento zeros deve retornar 16 caracteres' do
|
97
|
-
expect(santander.complemento_zeros.size).to eq 16
|
98
|
-
end
|
99
|
-
|
100
94
|
it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
|
101
95
|
info_conta = santander.info_conta
|
102
96
|
expect(info_conta.size).to eq 20
|
103
97
|
expect(info_conta[0..19]).to eq '17777751042700080112' # codigo_transmissao
|
98
|
+
|
99
|
+
object = subject.class.new(params.merge!(codigo_transmissao: '7777751042700080112'))
|
100
|
+
info_conta = object.info_conta
|
101
|
+
expect(info_conta.size).to eq 20
|
102
|
+
expect(info_conta[0..19]).to eq '07777751042700080112' # codigo_transmissao
|
104
103
|
end
|
105
104
|
end
|
106
105
|
|
@@ -110,16 +109,20 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Santander do
|
|
110
109
|
context 'header' do
|
111
110
|
it 'informacoes devem estar posicionadas corretamente no header' do
|
112
111
|
header = santander.monta_header
|
113
|
-
expect(header[1]).to eq '1'
|
114
|
-
expect(header[2..8]).to eq 'REMESSA'
|
115
|
-
expect(header[26..45]).to eq santander.info_conta
|
116
|
-
expect(header[76..78]).to eq '033'
|
112
|
+
expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
|
113
|
+
expect(header[2..8]).to eq 'REMESSA' # literal da operacao
|
114
|
+
expect(header[26..45]).to eq santander.info_conta # informacoes da conta
|
115
|
+
expect(header[76..78]).to eq '033' # codigo do banco
|
116
|
+
expect(header[100..115]).to eq ''.rjust(16, "0") # zeros
|
117
|
+
expect(header[116..390]).to eq ''.rjust(275,' ') # campos mensagens vazios
|
118
|
+
expect(header[391..393]).to eq '058' # numero da versão da remessa
|
117
119
|
end
|
118
120
|
end
|
119
121
|
|
120
122
|
context 'detalhe' do
|
121
123
|
it 'informacoes devem estar posicionadas corretamente no detalhe' do
|
122
124
|
detalhe = santander.monta_detalhe pagamento, 1
|
125
|
+
expect(detalhe[37..61]).to eq "6969".ljust(25) # nosso numero
|
123
126
|
expect(detalhe[62..69]).to eq '00000123' # nosso numero
|
124
127
|
expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
|
125
128
|
expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
|
@@ -129,17 +132,13 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Santander do
|
|
129
132
|
end
|
130
133
|
|
131
134
|
context 'trailer' do
|
132
|
-
it 'trailer deve ter 400 posicoes' do
|
133
|
-
expect(santander.monta_trailer(1).size).to eq 400
|
134
|
-
end
|
135
|
-
|
136
135
|
it 'informacoes devem estar posicionadas corretamente no trailer' do
|
137
|
-
trailer = santander.monta_trailer 3
|
138
|
-
expect(trailer[0]).to eq '9'
|
139
|
-
expect(trailer[1..6]).to eq '000003'
|
140
|
-
expect(trailer[7..19]).to eq '0000000019990'
|
141
|
-
expect(trailer[20..393]).to eq ''.rjust(374, '0')
|
142
|
-
expect(trailer[394..399]).to eq '000003'
|
136
|
+
trailer = santander.monta_trailer "3"
|
137
|
+
expect(trailer[0]).to eq '9' # código registro
|
138
|
+
expect(trailer[1..6]).to eq '000003' # quant. total de linhas
|
139
|
+
expect(trailer[7..19]).to eq '0000000019990' # valor total dos titulos
|
140
|
+
expect(trailer[20..393]).to eq ''.rjust(374, '0') # zeros
|
141
|
+
expect(trailer[394..399]).to eq '000003' # num. sequencial
|
143
142
|
end
|
144
143
|
end
|
145
144
|
|
@@ -141,6 +141,43 @@ RSpec.describe Brcobranca::Remessa::Cnab400::Sicoob do
|
|
141
141
|
expect(id_empresa[5..13]).to eq '123456789' # convenio
|
142
142
|
expect(id_empresa[14..19]).to eq ' ' # brancos
|
143
143
|
end
|
144
|
+
|
145
|
+
it 'deve calcular o digito da agencia' do
|
146
|
+
# digito calculado a partir do modulo 11 com base 9
|
147
|
+
#
|
148
|
+
# agencia = 1 2 3 4
|
149
|
+
#
|
150
|
+
# 4 3 2 1
|
151
|
+
# x 9 8 7 6
|
152
|
+
# = 36 24 14 6 = 80
|
153
|
+
# 80 / 11 = 7 com resto 3
|
154
|
+
expected_digito_agencia_list = [
|
155
|
+
{ agencia: "3214", dv: "0" },
|
156
|
+
{ agencia: "2006", dv: "0" },
|
157
|
+
{ agencia: "5651", dv: "0" },
|
158
|
+
{ agencia: "5691", dv: "0" },
|
159
|
+
{ agencia: "5741", dv: "0" },
|
160
|
+
{ agencia: "1008", dv: "1" },
|
161
|
+
{ agencia: "5681", dv: "2" },
|
162
|
+
{ agencia: "5731", dv: "2" },
|
163
|
+
{ agencia: "4327", dv: "3" },
|
164
|
+
{ agencia: "1001", dv: "4" },
|
165
|
+
{ agencia: "5761", dv: "4" },
|
166
|
+
{ agencia: "3032", dv: "5" },
|
167
|
+
{ agencia: "5671", dv: "5" },
|
168
|
+
{ agencia: "5631", dv: "6" },
|
169
|
+
{ agencia: "1005", dv: "7" },
|
170
|
+
{ agencia: "5661", dv: "8" },
|
171
|
+
{ agencia: "0001", dv: "9" },
|
172
|
+
{ agencia: "5621", dv: "9" },
|
173
|
+
]
|
174
|
+
|
175
|
+
expected_digito_agencia_list.each do |expected_dv_agencia|
|
176
|
+
remessa_params = params.merge!(agencia: expected_dv_agencia[:agencia])
|
177
|
+
remessa = subject.class.new(remessa_params)
|
178
|
+
expect(remessa.digito_agencia).to eq expected_dv_agencia[:dv]
|
179
|
+
end
|
180
|
+
end
|
144
181
|
end
|
145
182
|
|
146
183
|
context 'monta remessa' do
|
@@ -0,0 +1,185 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
RSpec.describe Brcobranca::Remessa::Cnab400::Unicred do
|
5
|
+
let(:pagamento) do
|
6
|
+
Brcobranca::Remessa::Pagamento.new(valor: 199.9,
|
7
|
+
data_vencimento: Date.current,
|
8
|
+
nosso_numero: '072000031',
|
9
|
+
documento: 6969,
|
10
|
+
documento_sacado: '12345678901',
|
11
|
+
nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
|
12
|
+
endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
|
13
|
+
bairro_sacado: 'São josé dos quatro apostolos magros',
|
14
|
+
cep_sacado: '12345678',
|
15
|
+
cidade_sacado: 'Santa rita de cássia maria da silva',
|
16
|
+
uf_sacado: 'SP')
|
17
|
+
end
|
18
|
+
let(:params) do
|
19
|
+
{
|
20
|
+
carteira: '03',
|
21
|
+
agencia: '1234',
|
22
|
+
conta_corrente: '12345',
|
23
|
+
digito_conta: '1',
|
24
|
+
empresa_mae: 'SOCIEDADE BRASILEIRA DE ZOOLOGIA LTDA',
|
25
|
+
documento_cedente: '12345678910',
|
26
|
+
codigo_transmissao: '12345678901234567890',
|
27
|
+
byte_idt: '2',
|
28
|
+
pagamentos: [pagamento]
|
29
|
+
}
|
30
|
+
end
|
31
|
+
let(:unicred) { subject.class.new(params) }
|
32
|
+
|
33
|
+
context 'validacoes dos campos' do
|
34
|
+
context '@agencia' do
|
35
|
+
it 'deve ser invalido se nao possuir uma agencia' do
|
36
|
+
object = subject.class.new(params.merge!(agencia: nil))
|
37
|
+
expect(object.invalid?).to be true
|
38
|
+
expect(object.errors.full_messages).to include('Agencia não pode estar em branco.')
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'deve ser invalido se a agencia tiver mais de 4 digitos' do
|
42
|
+
unicred.agencia = '12345'
|
43
|
+
expect(unicred.invalid?).to be true
|
44
|
+
expect(unicred.errors.full_messages).to include('Agencia deve ter 4 dígitos.')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context '@digito_conta' do
|
49
|
+
it 'deve ser invalido se nao possuir um digito da conta corrente' do
|
50
|
+
objeto = subject.class.new(params.merge!(digito_conta: nil))
|
51
|
+
expect(objeto.invalid?).to be true
|
52
|
+
expect(objeto.errors.full_messages).to include('Digito conta não pode estar em branco.')
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'deve ser inválido se o dígito da conta tiver mais de 1 dígito' do
|
56
|
+
unicred.digito_conta = '12'
|
57
|
+
expect(unicred.invalid?).to be true
|
58
|
+
expect(unicred.errors.full_messages).to include('Digito conta deve ter 1 dígito.')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
context '@conta_corrente' do
|
63
|
+
it 'deve ser invalido se nao possuir uma conta corrente' do
|
64
|
+
object = subject.class.new(params.merge!(conta_corrente: nil))
|
65
|
+
expect(object.invalid?).to be true
|
66
|
+
expect(object.errors.full_messages).to include('Conta corrente não pode estar em branco.')
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'deve ser invalido se a conta corrente tiver mais de 5 digitos' do
|
70
|
+
unicred.conta_corrente = '123456'
|
71
|
+
|
72
|
+
expect(unicred.invalid?).to be true
|
73
|
+
expect(unicred.errors.full_messages).to include('Conta corrente deve ter 5 dígitos.')
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context '@carteira' do
|
78
|
+
it 'deve ser inválido se não possuir uma carteira' do
|
79
|
+
object = subject.class.new(params.merge!(carteira: nil))
|
80
|
+
expect(object.invalid?).to be true
|
81
|
+
expect(object.errors.full_messages).to include('Carteira não pode estar em branco.')
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'deve ser inválido se a carteira tiver mais de 2 dígitos' do
|
85
|
+
unicred.carteira = '123'
|
86
|
+
expect(unicred.invalid?).to be true
|
87
|
+
expect(unicred.errors.full_messages).to include('Carteira deve ter 2 dígitos.')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
context '@documento_cedente' do
|
92
|
+
it 'deve ser inválido se não possuir o documento cedente' do
|
93
|
+
object = subject.class.new(params.merge!(documento_cedente: nil))
|
94
|
+
expect(object.invalid?).to be true
|
95
|
+
expect(object.errors.full_messages).to include('Documento cedente não pode estar em branco.')
|
96
|
+
end
|
97
|
+
|
98
|
+
it 'deve ser invalido se o documento do cedente nao tiver entre 11 e 14 digitos' do
|
99
|
+
unicred.documento_cedente = '123'
|
100
|
+
expect(unicred.invalid?).to be true
|
101
|
+
expect(unicred.errors.full_messages).to include('Documento cedente deve ter entre 11 e 14 dígitos.')
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context '@codigo_transmissao' do
|
106
|
+
it 'deve ser inválido se não existir' do
|
107
|
+
object = subject.class.new(params.merge!(codigo_transmissao: nil))
|
108
|
+
expect(object.invalid?).to be true
|
109
|
+
expect(object.errors.full_messages).to include('Codigo transmissao não pode estar em branco.')
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'deve ser inválido quando não possuir até 20 dígitos' do
|
113
|
+
object = subject.class.new(params.merge!(codigo_transmissao: '123456789012345678901'))
|
114
|
+
expect(object.invalid?).to be true
|
115
|
+
expect(object.errors.full_messages).to include('Codigo transmissao deve ter 20 dígitos.')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
context 'formatacoes dos valores' do
|
121
|
+
it 'cod_banco deve ser 748' do
|
122
|
+
expect(unicred.cod_banco).to eq '748'
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'nome_banco deve ser UNICRED com 15 posicoes' do
|
126
|
+
nome_banco = unicred.nome_banco
|
127
|
+
expect(nome_banco.size).to eq 15
|
128
|
+
expect(nome_banco.strip).to eq 'UNICRED'
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'complemento deve retornar 294 caracteres' do
|
132
|
+
expect(unicred.complemento.size).to eq 294
|
133
|
+
end
|
134
|
+
|
135
|
+
it 'info_conta deve retornar com 20 posicoes as informacoes da conta' do
|
136
|
+
info_conta = unicred.info_conta
|
137
|
+
expect(info_conta.size).to eq 20
|
138
|
+
expect(info_conta[0..19]).to eq '12345678901234567890'
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'deve retornar o codigo da carteira de acordo com o tipo de emissão' do
|
142
|
+
unicred.carteira = '03'
|
143
|
+
expect(unicred.codigo_carteira).to eq '3'
|
144
|
+
|
145
|
+
unicred.carteira = '09'
|
146
|
+
expect(unicred.invalid?).to be true
|
147
|
+
expect(unicred.errors.full_messages).to include('Carteira não existente para este banco.')
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context 'monta remessa' do
|
152
|
+
it_behaves_like 'cnab400'
|
153
|
+
|
154
|
+
context 'header' do
|
155
|
+
it 'informacoes devem estar posicionadas corretamente no header' do
|
156
|
+
header = unicred.monta_header
|
157
|
+
expect(header[1]).to eq '1' # tipo operacao (1 = remessa)
|
158
|
+
expect(header[2..8]).to eq 'REMESSA' # literal da operacao
|
159
|
+
expect(header[26..45]).to eq unicred.info_conta # informacoes da conta
|
160
|
+
expect(header[76..78]).to eq '748' # codigo do banco
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
context 'detalhe' do
|
165
|
+
it 'informacoes devem estar posicionadas corretamente no detalhe' do
|
166
|
+
detalhe = unicred.monta_detalhe pagamento, 1
|
167
|
+
expect(detalhe[37..61]).to eq "6969".ljust(25) # documento
|
168
|
+
expect(detalhe[62..81]).to eq '072000031'.rjust(20, ' ') # nosso numero
|
169
|
+
expect(detalhe[120..125]).to eq Date.current.strftime('%d%m%y') # data de vencimento
|
170
|
+
expect(detalhe[126..138]).to eq '0000000019990' # valor do titulo
|
171
|
+
expect(detalhe[142..145]).to eq '0000' # agência cobradora
|
172
|
+
expect(detalhe[156..159]).to eq '0000' # instrução
|
173
|
+
expect(detalhe[220..233]).to eq '00012345678901' # documento do pagador
|
174
|
+
expect(detalhe[234..263]).to eq 'PABLO DIEGO JOSE FRANCISCO DE ' # nome do pagador
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context 'arquivo' do
|
179
|
+
before { Timecop.freeze(Time.local(2015, 7, 14, 16, 15, 15)) }
|
180
|
+
after { Timecop.return }
|
181
|
+
|
182
|
+
it { expect(unicred.gera_arquivo).to eq(read_remessa('remessa-unicred-cnab400.rem', unicred.gera_arquivo)) }
|
183
|
+
end
|
184
|
+
end
|
185
|
+
end
|
@@ -1,20 +1,18 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
#
|
3
|
-
|
4
2
|
require 'spec_helper'
|
5
3
|
|
6
4
|
RSpec.describe Brcobranca::Remessa::Pagamento do
|
7
5
|
let(:pagamento) do
|
8
6
|
subject.class.new(valor: 199.9,
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
data_vencimento: Date.parse('2015-06-25'),
|
8
|
+
nosso_numero: 123,
|
9
|
+
documento_sacado: '12345678901',
|
10
|
+
nome_sacado: 'PABLO DIEGO JOSÉ FRANCISCO DE PAULA JUAN NEPOMUCENO MARÍA DE LOS REMEDIOS CIPRIANO DE LA SANTÍSSIMA TRINIDAD RUIZ Y PICASSO',
|
11
|
+
endereco_sacado: 'RUA RIO GRANDE DO SUL São paulo Minas caçapa da silva junior',
|
12
|
+
bairro_sacado: 'São josé dos quatro apostolos magros',
|
13
|
+
cep_sacado: '12345678',
|
14
|
+
cidade_sacado: 'Santa rita de cássia maria da silva',
|
15
|
+
uf_sacado: 'SP')
|
18
16
|
end
|
19
17
|
|
20
18
|
context 'validacoes' do
|
@@ -60,18 +58,10 @@ RSpec.describe Brcobranca::Remessa::Pagamento do
|
|
60
58
|
expect(pagamento.errors.full_messages).to include('Cidade sacado não pode estar em branco.')
|
61
59
|
end
|
62
60
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
expect(pagamento.errors.full_messages).to include('Uf sacado não pode estar em branco.')
|
68
|
-
end
|
69
|
-
|
70
|
-
it 'deve ser invalido se UF do sacado for maior que 2 caracteres' do
|
71
|
-
pagamento.uf_sacado = 'Santa Catarina'
|
72
|
-
expect(pagamento.invalid?).to be true
|
73
|
-
expect(pagamento.errors.full_messages).to include('Uf sacado deve ter 2 dígitos.')
|
74
|
-
end
|
61
|
+
it 'deve ser invalido se nao possuir UF do sacado' do
|
62
|
+
pagamento.uf_sacado = nil
|
63
|
+
expect(pagamento.invalid?).to be true
|
64
|
+
expect(pagamento.errors.full_messages).to include('Uf sacado não pode estar em branco.')
|
75
65
|
end
|
76
66
|
|
77
67
|
context '@cep' do
|
@@ -119,10 +109,6 @@ RSpec.describe Brcobranca::Remessa::Pagamento do
|
|
119
109
|
it 'valor do abatimento padrao deve ser zero' do
|
120
110
|
expect(pagamento.valor_abatimento).to eq 0.0
|
121
111
|
end
|
122
|
-
|
123
|
-
it 'numero da parcela deve ser 01' do
|
124
|
-
expect(pagamento.parcela).to eq '01'
|
125
|
-
end
|
126
112
|
end
|
127
113
|
|
128
114
|
context 'formatacoes dos valores' do
|
@@ -178,6 +164,38 @@ RSpec.describe Brcobranca::Remessa::Pagamento do
|
|
178
164
|
expect(pagamento.formata_valor_abatimento(10)).to eq '0000003490'
|
179
165
|
end
|
180
166
|
|
167
|
+
it 'formata valor dos juros com o numero de posicoes passadas' do
|
168
|
+
# padrao com 13 posicoes
|
169
|
+
pagamento.valor_mora = 49.2
|
170
|
+
expect(pagamento.formata_valor_mora).to eq '0000000004920'
|
171
|
+
# formata com o tamanho passado
|
172
|
+
expect(pagamento.formata_valor_mora(15)).to eq '000000000004920'
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'formata valor do campo documento' do
|
176
|
+
before { pagamento.documento = '2345' }
|
177
|
+
|
178
|
+
it "deve formatar assumindo os valores padrao para os parametros tamanho e caracter" do
|
179
|
+
expect(pagamento.formata_documento_ou_numero).to eql '2345'.rjust(25, ' ')
|
180
|
+
end
|
181
|
+
|
182
|
+
it "deve formatar com os parametros tamanho e caracter" do
|
183
|
+
expect(pagamento.formata_documento_ou_numero(15, '0')).to eql '2345'.rjust(15, '0')
|
184
|
+
end
|
185
|
+
|
186
|
+
it "deve extrair somente o valor do campo no tamanho informado" do
|
187
|
+
pagamento.documento = '12345678901234567890'
|
188
|
+
expect(pagamento.formata_documento_ou_numero(15, '0')).to eql '123456789012345'
|
189
|
+
expect(pagamento.formata_documento_ou_numero(15, '0').length).to eql 15
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'deve remover caracteres especiais ou acentuação' do
|
193
|
+
pagamento.documento = 'JOÃO DEve R$ 900.00'
|
194
|
+
expect(pagamento.formata_documento_ou_numero).to eql ' JOO DEve R 90000'
|
195
|
+
expect(pagamento.formata_documento_ou_numero.length).to eql 25
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
181
199
|
context 'identificacao sacado' do
|
182
200
|
it 'verifica a identificacao do sacado (pessoa fisica ou juridica)' do
|
183
201
|
# pessoa fisica
|