br_boleto 2.0.1 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/.travis.yml +1 -1
- data/Gemfile.lock +2 -2
- data/br_boleto.gemspec +2 -3
- data/lib/br_boleto/association/have_conta.rb +27 -25
- data/lib/br_boleto/association/have_pagador.rb +2 -0
- data/lib/br_boleto/boleto/base.rb +0 -4
- data/lib/br_boleto/boleto/bradesco.rb +80 -0
- data/lib/br_boleto/boleto/caixa.rb +10 -12
- data/lib/br_boleto/boleto/cecred.rb +76 -0
- data/lib/br_boleto/boleto/itau.rb +114 -0
- data/lib/br_boleto/boleto/sicredi.rb +101 -0
- data/lib/br_boleto/boleto/unicred.rb +21 -0
- data/lib/br_boleto/conta/base.rb +28 -3
- data/lib/br_boleto/conta/bradesco.rb +120 -0
- data/lib/br_boleto/conta/caixa.rb +22 -12
- data/lib/br_boleto/conta/cecred.rb +67 -0
- data/lib/br_boleto/conta/itau.rb +199 -0
- data/lib/br_boleto/conta/sicoob.rb +40 -11
- data/lib/br_boleto/conta/sicredi.rb +171 -0
- data/lib/br_boleto/conta/unicred.rb +38 -0
- data/lib/br_boleto/helper/default_codes.rb +535 -26
- data/lib/br_boleto/pagador.rb +4 -0
- data/lib/br_boleto/remessa/base.rb +2 -0
- data/lib/br_boleto/remessa/cnab240/base.rb +21 -6
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +141 -0
- data/lib/br_boleto/remessa/cnab240/caixa.rb +8 -1
- data/lib/br_boleto/remessa/cnab240/cecred.rb +169 -0
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +29 -21
- data/lib/br_boleto/remessa/cnab240/helper/segmento_q.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +5 -5
- data/lib/br_boleto/remessa/cnab240/helper/segmento_s.rb +4 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +186 -0
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +4 -16
- data/lib/br_boleto/remessa/cnab240/sicredi.rb +205 -0
- data/lib/br_boleto/remessa/cnab240/unicred.rb +40 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +235 -0
- data/lib/br_boleto/remessa/cnab400/helper/detalhe.rb +6 -5
- data/lib/br_boleto/remessa/cnab400/itau.rb +190 -0
- data/lib/br_boleto/remessa/cnab400/sicoob.rb +3 -3
- data/lib/br_boleto/remessa/cnab400/sicredi.rb +276 -0
- data/lib/br_boleto/remessa/cnab400/unicred.rb +62 -0
- data/lib/br_boleto/remessa/pagamento.rb +93 -43
- data/lib/br_boleto/retorno/cnab240/base.rb +13 -12
- data/lib/br_boleto/retorno/cnab240/bradesco.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/caixa.rb +2 -3
- data/lib/br_boleto/retorno/cnab240/cecred.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/itau.rb +24 -0
- data/lib/br_boleto/retorno/cnab240/sicredi.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/unicred.rb +10 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +42 -0
- data/lib/br_boleto/retorno/cnab400/itau.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +43 -0
- data/lib/br_boleto/retorno/cnab400/unicred.rb +10 -0
- data/lib/br_boleto/retorno/pagamento.rb +18 -4
- data/lib/br_boleto/version.rb +2 -2
- data/lib/br_boleto.rb +28 -0
- data/lib/config/locales/br-boleto-en.yml +1 -0
- data/lib/config/locales/br-boleto-pt-BR.yml +1 -0
- data/test/br_boleto/association/have_pagador_test.rb +24 -0
- data/test/br_boleto/boleto/bradesco_test.rb +125 -0
- data/test/br_boleto/boleto/caixa_test.rb +18 -18
- data/test/br_boleto/boleto/cecred_test.rb +115 -0
- data/test/br_boleto/boleto/itau_test.rb +160 -0
- data/test/br_boleto/boleto/sicredi_test.rb +136 -0
- data/test/br_boleto/boleto/unicred_test.rb +128 -0
- data/test/br_boleto/conta/base_test.rb +298 -3
- data/test/br_boleto/conta/bradesco_test.rb +142 -0
- data/test/br_boleto/conta/caixa_test.rb +7 -6
- data/test/br_boleto/conta/cecred_test.rb +119 -0
- data/test/br_boleto/conta/itau_test.rb +189 -0
- data/test/br_boleto/conta/sicoob_test.rb +32 -2
- data/test/br_boleto/conta/sicredi_test.rb +180 -0
- data/test/br_boleto/conta/unicred_test.rb +154 -0
- data/test/br_boleto/pagador_test.rb +22 -2
- data/test/br_boleto/remessa/cnab240/base_test.rb +24 -12
- data/test/br_boleto/remessa/cnab240/bradesco_test.rb +196 -0
- data/test/br_boleto/remessa/cnab240/caixa_test.rb +51 -0
- data/test/br_boleto/remessa/cnab240/cecred_test.rb +242 -0
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +78 -71
- data/test/br_boleto/remessa/cnab240/helper/segmento_q_test.rb +4 -3
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +10 -18
- data/test/br_boleto/remessa/cnab240/helper/segmento_s_test.rb +6 -5
- data/test/br_boleto/remessa/cnab240/itau_test.rb +201 -0
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +1 -58
- data/test/br_boleto/remessa/cnab240/sicredi_test.rb +207 -0
- data/test/br_boleto/remessa/cnab240/unicred_test.rb +250 -0
- data/test/br_boleto/remessa/cnab400/base_test.rb +4 -4
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +164 -0
- data/test/br_boleto/remessa/cnab400/itau_test.rb +173 -0
- data/test/br_boleto/remessa/cnab400/sicoob_test.rb +2 -2
- data/test/br_boleto/remessa/cnab400/sicredi_test.rb +241 -0
- data/test/br_boleto/remessa/cnab400/unicred_test.rb +169 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/itau_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +228 -0
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +228 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +255 -0
- data/test/br_boleto/retorno/cnab400/itau_test.rb +96 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +10 -5
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/unicred.rb +255 -0
- data/test/br_boleto/retorno/pagamento_test.rb +7 -0
- data/test/factories/boleto/boleto_bradesco.rb +18 -0
- data/test/factories/boleto/boleto_cecred.rb +18 -0
- data/test/factories/boleto/boleto_itau.rb +18 -0
- data/test/factories/boleto/boleto_sicredi.rb +18 -0
- data/test/factories/boleto/boleto_unicred.rb +18 -0
- data/test/factories/conta/bradesco.rb +16 -0
- data/test/factories/conta/caixa.rb +2 -1
- data/test/factories/conta/cecred.rb +15 -0
- data/test/factories/conta/itau.rb +15 -0
- data/test/factories/conta/sicoob.rb +2 -1
- data/test/factories/conta/sicredi.rb +15 -0
- data/test/factories/conta/unicred.rb +15 -0
- data/test/factories/remessa/cnab240/bradesco.rb +9 -0
- data/test/factories/remessa/cnab240/cecred.rb +9 -0
- data/test/factories/remessa/cnab240/itau.rb +9 -0
- data/test/factories/remessa/cnab240/sicredi.rb +9 -0
- data/test/factories/remessa/cnab240/unicred.rb +9 -0
- data/test/factories/remessa/cnab400/bradesco.rb +8 -0
- data/test/factories/remessa/cnab400/itau.rb +8 -0
- data/test/factories/remessa/cnab400/sicredi.rb +8 -0
- data/test/factories/remessa/cnab400/unicred.rb +8 -0
- data/test/fixtures/remessa/cnab240/caixa.rem +8 -0
- data/test/fixtures/remessa/cnab240/cecred.rem +8 -0
- data/test/fixtures/remessa/cnab240/sicoob.rem +8 -8
- data/test/fixtures/remessa/cnab240/unicred.rem +7 -0
- data/test/fixtures/retorno/cnab400/bradesco.ret +8 -0
- data/test/fixtures/retorno/cnab400/itau.ret +54 -0
- metadata +138 -3
@@ -0,0 +1,241 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab400::Sicredi do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_sicredi, pagamentos: pagamento, conta: conta) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_sicredi) }
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
8
|
+
|
9
|
+
|
10
|
+
context "HEADER" do
|
11
|
+
describe "#header_posicao_002_a_002" do
|
12
|
+
it { subject.header_posicao_002_a_002.size.must_equal 1 }
|
13
|
+
it "deve conter as informações nas posições corretas" do
|
14
|
+
result = subject.header_posicao_002_a_002
|
15
|
+
result.must_equal '1'
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#informacoes_da_conta' do
|
21
|
+
it "deve retornar com 20 caracteres" do
|
22
|
+
subject.informacoes_da_conta(:header).size.must_equal 20
|
23
|
+
end
|
24
|
+
it "deve trazer as informações em suas posições quando o parametro for :header" do
|
25
|
+
conta.conta_corrente = 89755
|
26
|
+
conta.cpf_cnpj = '12345678901'
|
27
|
+
result = subject.informacoes_da_conta(:header)
|
28
|
+
|
29
|
+
result[0..4].must_equal '89755' # Conta Corrente
|
30
|
+
result[5..18].must_equal '00012345678901' # CPF/CNPJ
|
31
|
+
result[19].must_equal ''.rjust(1) # Branco
|
32
|
+
|
33
|
+
result.size.must_equal 20
|
34
|
+
end
|
35
|
+
it "deve retornar com 21 caracteres" do
|
36
|
+
subject.informacoes_da_conta(:detalhe).size.must_equal 21
|
37
|
+
end
|
38
|
+
it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
|
39
|
+
result = subject.informacoes_da_conta(:detalhe)
|
40
|
+
|
41
|
+
result[0].must_equal 'A' # Tipo de moeda
|
42
|
+
result[1].must_equal 'B' # Tipo de desconto
|
43
|
+
result[2].must_equal 'B' # Tipo de juros
|
44
|
+
result[3..20].must_equal ''.rjust(18) # Brancos
|
45
|
+
|
46
|
+
result.size.must_equal 21
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "#header_posicao_047_a_076" do
|
51
|
+
it { subject.header_posicao_047_a_076.size.must_equal 30 }
|
52
|
+
it "deve conter as informações nas posições corretas" do
|
53
|
+
result = subject.header_posicao_047_a_076
|
54
|
+
result.must_equal ''.rjust(30) # Brancos
|
55
|
+
result.size.must_equal 30
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#header_posicao_095_a_102' do
|
60
|
+
it { subject.header_posicao_095_a_102.size.must_equal 8 }
|
61
|
+
it "deve conter as informações nas posições corretas" do
|
62
|
+
subject.stubs(:data_hora_arquivo).returns('2016-10-21')
|
63
|
+
subject.header_posicao_095_a_102.must_equal '20161021'
|
64
|
+
subject.header_posicao_095_a_102.size.must_equal 8
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '#header_posicao_103_a_394' do
|
69
|
+
it { subject.header_posicao_103_a_394.size.must_equal 292 }
|
70
|
+
it "deve conter as informações nas posições corretas" do
|
71
|
+
subject.sequencial_remessa = 4758
|
72
|
+
|
73
|
+
subject.header_posicao_103_a_394[0..7].must_equal ''.rjust(8)
|
74
|
+
subject.header_posicao_103_a_394[8..14].must_equal '0004758'
|
75
|
+
subject.header_posicao_103_a_394[15..287].must_equal ''.rjust(273)
|
76
|
+
subject.header_posicao_103_a_394[288..291].must_equal '2.00'
|
77
|
+
|
78
|
+
subject.header_posicao_103_a_394.size.must_equal 292
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "DETALHE" do
|
84
|
+
describe "#detalhe_posicao_002_004(pagamento)" do
|
85
|
+
it { subject.detalhe_posicao_002_004(pagamento).size.must_equal 3 }
|
86
|
+
it "deve conter as informações nas posições corretas" do
|
87
|
+
result = subject.detalhe_posicao_002_004(pagamento)
|
88
|
+
result[0].must_equal 'A' # Tipo de cobrança
|
89
|
+
result[1].must_equal 'A' # Tipo de carteira
|
90
|
+
result[2].must_equal 'A' # Tipo de Impressão
|
91
|
+
|
92
|
+
result.size.must_equal 3
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "#detalhe_posicao_005_016" do
|
97
|
+
it { subject.detalhe_posicao_005_016.size.must_equal 12 }
|
98
|
+
it "deve conter as informações nas posições corretas" do
|
99
|
+
result = subject.detalhe_posicao_005_016
|
100
|
+
result.must_equal ''.rjust(12) # Brancos
|
101
|
+
result.size.must_equal 12
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "#detalhe_posicao_038_062(pagamento)" do
|
106
|
+
it "deve ter o tamanho de 25 digitos" do
|
107
|
+
subject.detalhe_posicao_038_062(pagamento).size.must_equal 25
|
108
|
+
end
|
109
|
+
it "deve conter as informações nas posições corretas" do
|
110
|
+
pagamento.assign_attributes(nosso_numero: '132')
|
111
|
+
result = subject.detalhe_posicao_038_062(pagamento)
|
112
|
+
result[0..9].must_equal ''.rjust(10) # Brancos
|
113
|
+
result[10..18].must_equal '000000132' # Nosso Numero
|
114
|
+
result[19..24].must_equal ''.rjust(6) # Brancos
|
115
|
+
result.size.must_equal 25
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe "#detalhe_posicao_063_108(pagamento)" do
|
120
|
+
it "deve ter o tamanho de 46 digitos" do
|
121
|
+
subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
|
122
|
+
end
|
123
|
+
it "deve conter as informações nas posições corretas" do
|
124
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
125
|
+
pagamento.data_emissao = Date.parse('05/08/2029')
|
126
|
+
result = subject.detalhe_posicao_063_108(pagamento)
|
127
|
+
result[0..7].must_equal '20290805' # Data da Instrução
|
128
|
+
result[8].must_equal ''.rjust(1) # Campo alterado ( Branco )
|
129
|
+
result[9].must_equal 'N' # Postagem do título
|
130
|
+
result[10].must_equal ''.rjust(1) # Branco
|
131
|
+
result[11].must_equal 'B' # Condição para Emissão da Papeleta de Cobrança
|
132
|
+
result[12..13].must_equal ''.rjust(2) # Número da parcela do carnê ( Brancos )
|
133
|
+
result[14..15].must_equal ''.rjust(2) # Número Total de parcelas do carnê ( Brancos )
|
134
|
+
result[16..19].must_equal ''.rjust(4) # Brancos
|
135
|
+
result[20..29].must_equal '0000000000' # Valor Desconto por dia de antecipação (Preencher com Zeros)
|
136
|
+
result[30..33].must_equal '0000' # % multa por pagamento em atraso (Preencher com Zeros)
|
137
|
+
result[34..45].must_equal ''.rjust(12) # Preencher com Branco
|
138
|
+
result.size.must_equal 46
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
describe '#informacoes_do_pagamento' do
|
143
|
+
it "deve ter o tamanho de 40 digitos" do
|
144
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
145
|
+
end
|
146
|
+
it "deve conter as informações nas posições corretas" do
|
147
|
+
conta.agencia = 4587
|
148
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
149
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
150
|
+
pagamento.valor_documento = 47.56
|
151
|
+
pagamento.especie_titulo = "12"
|
152
|
+
pagamento.aceite = true
|
153
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
154
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
155
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
156
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
157
|
+
result[19..27].must_equal ' ' # Brancos
|
158
|
+
result[28..28].must_equal "C" # Espécie do Título
|
159
|
+
result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
|
160
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
161
|
+
result[36..37].must_equal '00' # Primeira instrução codificada
|
162
|
+
result[38..39].must_equal '00' # Segunda instrução
|
163
|
+
|
164
|
+
result.size.must_equal 40
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
169
|
+
it "deve ter o tamanho de 58 digitos" do
|
170
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
171
|
+
end
|
172
|
+
it "deve conter as informações nas posições corretas" do
|
173
|
+
pagamento.valor_mora = '0.39'
|
174
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
175
|
+
pagamento.valor_desconto = 4.3
|
176
|
+
pagamento.valor_abatimento = 56.47
|
177
|
+
|
178
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
179
|
+
result.size.must_equal 58
|
180
|
+
|
181
|
+
result[00..12].must_equal '0000000000039'
|
182
|
+
result[13..18].must_equal "210318"
|
183
|
+
result[19..31].must_equal '0000000000430'
|
184
|
+
result[32..44].must_equal '0000000000000'
|
185
|
+
result[45..57].must_equal '0000000005647'
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe '#informacoes_do_sacado' do
|
190
|
+
it "deve ter o tamanho de 176 digitos" do
|
191
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
192
|
+
end
|
193
|
+
it "deve conter as informações nas posições corretas" do
|
194
|
+
# pagador.tipo_cpf_cnpj = '1'
|
195
|
+
pagador.cpf_cnpj = '12345678901'
|
196
|
+
pagador.nome = 'nome pagador'
|
197
|
+
pagador.endereco = 'rua do pagador'
|
198
|
+
pagador.bairro = 'bairro do pagador'
|
199
|
+
pagador.cidade = 'Chapecó'
|
200
|
+
pagador.uf = 'SC'
|
201
|
+
pagador.cep = '89885-001'
|
202
|
+
pagador.nome_avalista = 'Avalista'
|
203
|
+
pagador.documento_avalista = '840.106.990-43'
|
204
|
+
|
205
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
206
|
+
result.size.must_equal 176
|
207
|
+
|
208
|
+
result[00..01].must_equal "10" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
209
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
210
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
211
|
+
|
212
|
+
result[56..73].must_equal 'rua do pagador'.adjust_size_to(18) # Endereço do Pagador
|
213
|
+
result[74..83].must_equal 'bairro do pagador'.adjust_size_to(10) # Endereço do Pagador
|
214
|
+
result[84..93].must_equal 'Chapecó'.adjust_size_to(10) # Endereço do Pagador
|
215
|
+
result[94..95].must_equal 'SC'.adjust_size_to(2) # Endereço do Pagador
|
216
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
217
|
+
|
218
|
+
result[121..134].must_equal '84010699043'.rjust(14, '0') # Observações/Mensagem ou Sacador/Avalista
|
219
|
+
result[135..175].must_equal 'Avalista'.adjust_size_to(41) # Observações/Mensagem ou Sacador/Avalista
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
context "TRAILER" do
|
225
|
+
describe "#trailer_arquivo_posicao_002_a_394(sequencial)" do
|
226
|
+
it { subject.trailer_arquivo_posicao_002_a_394(1).size.must_equal 393 }
|
227
|
+
it "deve conter as informações nas posições corretas" do
|
228
|
+
conta.conta_corrente = 89755
|
229
|
+
result = subject.trailer_arquivo_posicao_002_a_394(1)
|
230
|
+
|
231
|
+
result[0].must_equal '1' # Identificação do arquivo remessa
|
232
|
+
result[1..3].must_equal '748' # Número do Sicredi
|
233
|
+
result[4..8].must_equal '89755' # Código do beneficiário
|
234
|
+
result[9..392].must_equal ''.rjust(384) # Brancos
|
235
|
+
|
236
|
+
result.size.must_equal 393
|
237
|
+
end
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
describe BrBoleto::Remessa::Cnab400::Unicred do
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_unicred, pagamentos: pagamento, conta: conta) }
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_unicred) }
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
8
|
+
|
9
|
+
it "deve ter a class para a conta do unicred" do
|
10
|
+
BrBoleto::Remessa::Cnab400::Unicred.new.conta_class.must_equal BrBoleto::Conta::Unicred
|
11
|
+
end
|
12
|
+
|
13
|
+
it "deve herdar de Cnab400::Bradesco" do
|
14
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Bradesco
|
15
|
+
end
|
16
|
+
|
17
|
+
describe '#informacoes_da_conta' do
|
18
|
+
it "deve retornar com 20 caracteres" do
|
19
|
+
subject.informacoes_da_conta(:header).size.must_equal 20
|
20
|
+
end
|
21
|
+
it "deve trazer as informações em suas posições quando o parametro for :header" do
|
22
|
+
conta.codigo_empresa = 39321235
|
23
|
+
result = subject.informacoes_da_conta(:header)
|
24
|
+
|
25
|
+
result[0..20].must_equal '00000000000039321235' # Codigo Empresa
|
26
|
+
end
|
27
|
+
it "deve retornar com 20 caracteres" do
|
28
|
+
subject.informacoes_da_conta(:detalhe).size.must_equal 20
|
29
|
+
end
|
30
|
+
it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
|
31
|
+
conta.agencia = 1234
|
32
|
+
conta.agencia_dv = 1
|
33
|
+
conta.conta_corrente = 89755
|
34
|
+
conta.conta_corrente_dv = 7
|
35
|
+
conta.carteira = 21
|
36
|
+
result = subject.informacoes_da_conta(:detalhe)
|
37
|
+
|
38
|
+
result[0..2].must_equal ' '
|
39
|
+
result[3].must_equal '0'
|
40
|
+
result[4..6].must_equal '021'
|
41
|
+
result[7..11].must_equal '01234' # Agencia
|
42
|
+
result[12..18].must_equal '0089755' # Conta Corrente
|
43
|
+
result[19].must_equal '7' # Conta Corrente DV
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#complemento_registro' do
|
48
|
+
it "deve retornar o sequencial da remessa com 12 posições e mais 277 brancos" do
|
49
|
+
subject.sequencial_remessa = 4758
|
50
|
+
|
51
|
+
subject.complemento_registro[0..7].must_equal ' '
|
52
|
+
subject.complemento_registro[8..9].must_equal 'MX'
|
53
|
+
subject.complemento_registro[10..16].must_equal '0004758'
|
54
|
+
subject.complemento_registro[17..293].must_equal ''.rjust(277)
|
55
|
+
|
56
|
+
subject.complemento_registro.size.must_equal 294
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#detalhe_posicao_038_062' do
|
61
|
+
it "deve ter o tamanho de 25 digitos" do
|
62
|
+
subject.detalhe_posicao_038_062(pagamento).size.must_equal 25
|
63
|
+
end
|
64
|
+
it "deve conter numero de controle do participante nas posições corretas" do
|
65
|
+
pagamento.expects(:numero_documento).returns('534423')
|
66
|
+
result = subject.detalhe_posicao_038_062(pagamento)
|
67
|
+
|
68
|
+
result[00..13].must_equal ''.rjust(14) # Preencher com Branco
|
69
|
+
result[14..24].must_equal '534423'.rjust(11, '0') # Numero documento
|
70
|
+
result.size.must_equal 25
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#detalhe_posicao_063_108' do
|
75
|
+
it "deve ter o tamanho de 46 digitos" do
|
76
|
+
subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
|
77
|
+
end
|
78
|
+
it "deve conter as informações nas posições corretas" do
|
79
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
80
|
+
result = subject.detalhe_posicao_063_108(pagamento)
|
81
|
+
|
82
|
+
result[0..2].must_equal '000'
|
83
|
+
result[3].must_equal '0' # Identificativos de Multa
|
84
|
+
result[4..7].must_equal '0000' # Percentual de Multa por Atraso
|
85
|
+
result[8..18].must_equal '00000977897' # Identificação do Título no Banco
|
86
|
+
result[19].must_equal '6' # Nosso numero DV
|
87
|
+
result[20..29].must_equal '0000000000' # Desconto Bonificação por dia
|
88
|
+
result[30].must_equal '2' # Condição para Emissão da Papeleta de Cobrança
|
89
|
+
result[31..45].must_equal ''.rjust(15) # Preencher com Branco
|
90
|
+
|
91
|
+
result.size.must_equal 46
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
describe '#informacoes_do_pagamento' do
|
96
|
+
it "deve ter o tamanho de 40 digitos" do
|
97
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
98
|
+
end
|
99
|
+
it "deve conter as informações nas posições corretas" do
|
100
|
+
conta.agencia = 4587
|
101
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
102
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
103
|
+
pagamento.valor_documento = 47.56
|
104
|
+
pagamento.especie_titulo = "12"
|
105
|
+
pagamento.aceite = true
|
106
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
107
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
108
|
+
result.size.must_equal 40
|
109
|
+
|
110
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
111
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
112
|
+
result[19..21].must_equal '000' # 000 ou Número Banco
|
113
|
+
result[22..26].must_equal "00000" # 000000 ou Agencia
|
114
|
+
result[27..28].must_equal "02" # Espécie do Título
|
115
|
+
result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
|
116
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
117
|
+
result[36..37].must_equal '00' # Primeira instrução codificada
|
118
|
+
result[38..39].must_equal '00' # Segunda instrução
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
123
|
+
it "deve ter o tamanho de 58 digitos" do
|
124
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
125
|
+
end
|
126
|
+
it "deve conter as informações nas posições corretas" do
|
127
|
+
pagamento.valor_mora = '0.39'
|
128
|
+
pagamento.valor_iof = '2.7'
|
129
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
130
|
+
pagamento.valor_desconto = 4.3
|
131
|
+
pagamento.valor_abatimento = 56.47
|
132
|
+
|
133
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
134
|
+
result.size.must_equal 58
|
135
|
+
|
136
|
+
result[00..12].must_equal '0000000000039'
|
137
|
+
result[13..18].must_equal "210318"
|
138
|
+
result[19..31].must_equal '0000000000430'
|
139
|
+
result[32..44].must_equal '0000000000270'
|
140
|
+
result[45..57].must_equal '0000000005647'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#informacoes_do_sacado' do
|
145
|
+
it "deve ter o tamanho de 176 digitos" do
|
146
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
147
|
+
end
|
148
|
+
it "deve conter as informações nas posições corretas" do
|
149
|
+
# pagador.tipo_cpf_cnpj = '1'
|
150
|
+
pagador.cpf_cnpj = '12345678901'
|
151
|
+
pagador.nome = 'nome pagador'
|
152
|
+
pagador.endereco = 'rua do pagador'
|
153
|
+
pagador.cep = '89885-001'
|
154
|
+
pagador.nome_avalista = 'Avalista'
|
155
|
+
pagador.documento_avalista = '840.106.990-43'
|
156
|
+
|
157
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
158
|
+
result.size.must_equal 176
|
159
|
+
|
160
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
161
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
162
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
163
|
+
result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
|
164
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
165
|
+
result[116..130].must_equal '84010699043'.rjust(15) # Observações/Mensagem ou Sacador/Avalista
|
166
|
+
result[133..175].must_equal 'Avalista'.adjust_size_to(43) # Observações/Mensagem ou Sacador/Avalista
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -21,7 +21,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
21
21
|
pagamento.agencia_com_dv.must_equal "030690"
|
22
22
|
pagamento.agencia_sem_dv.must_equal "03069"
|
23
23
|
pagamento.numero_conta_com_dv.must_equal "0000000777778"
|
24
|
-
pagamento.
|
24
|
+
pagamento.numero_conta.must_equal "000000077777"
|
25
|
+
pagamento.numero_conta_dv.must_equal "8"
|
25
26
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
26
27
|
pagamento.nosso_numero.must_equal "000000033001014"
|
27
28
|
pagamento.carteira.must_equal "1"
|
@@ -53,7 +54,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
53
54
|
pagamento.valor_ocorrencia_sacado.must_equal 0.0
|
54
55
|
pagamento.complemento_ocorrencia_sacado.must_equal ""
|
55
56
|
pagamento.codigo_ocorrencia_banco_correspondente.must_equal "756"
|
56
|
-
pagamento.nosso_numero_banco_correspondente.must_equal ""
|
57
|
+
pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
|
58
|
+
pagamento.codigo_movimento_retorno.must_equal "06"
|
57
59
|
end
|
58
60
|
it "valores para o pagamento 2" do
|
59
61
|
pagamento = subject.pagamentos[1]
|
@@ -61,7 +63,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
61
63
|
pagamento.agencia_com_dv.must_equal "030690"
|
62
64
|
pagamento.agencia_sem_dv.must_equal "03069"
|
63
65
|
pagamento.numero_conta_com_dv.must_equal "0000000777778"
|
64
|
-
pagamento.
|
66
|
+
pagamento.numero_conta.must_equal "000000077777"
|
67
|
+
pagamento.numero_conta_dv.must_equal "8"
|
65
68
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
66
69
|
pagamento.nosso_numero.must_equal "000000034801024"
|
67
70
|
pagamento.carteira.must_equal "1"
|
@@ -93,7 +96,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
93
96
|
pagamento.valor_ocorrencia_sacado.must_equal 0.0
|
94
97
|
pagamento.complemento_ocorrencia_sacado.must_equal ""
|
95
98
|
pagamento.codigo_ocorrencia_banco_correspondente.must_equal "304"
|
96
|
-
pagamento.nosso_numero_banco_correspondente.must_equal ""
|
99
|
+
pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
|
100
|
+
pagamento.codigo_movimento_retorno.must_equal "06"
|
97
101
|
end
|
98
102
|
it "valores para o pagamento 3" do
|
99
103
|
pagamento = subject.pagamentos[2]
|
@@ -101,7 +105,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
101
105
|
pagamento.agencia_com_dv.must_equal "030690"
|
102
106
|
pagamento.agencia_sem_dv.must_equal "03069"
|
103
107
|
pagamento.numero_conta_com_dv.must_equal "0000000777778"
|
104
|
-
pagamento.
|
108
|
+
pagamento.numero_conta.must_equal "000000077777"
|
109
|
+
pagamento.numero_conta_dv.must_equal "8"
|
105
110
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
106
111
|
pagamento.nosso_numero.must_equal "000000035501014"
|
107
112
|
pagamento.carteira.must_equal "1"
|
@@ -133,7 +138,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
133
138
|
pagamento.valor_ocorrencia_sacado.must_equal 0.0
|
134
139
|
pagamento.complemento_ocorrencia_sacado.must_equal ""
|
135
140
|
pagamento.codigo_ocorrencia_banco_correspondente.must_equal "100"
|
136
|
-
pagamento.nosso_numero_banco_correspondente.must_equal ""
|
141
|
+
pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
|
142
|
+
pagamento.codigo_movimento_retorno.must_equal "06"
|
137
143
|
end
|
138
144
|
it "valores para o pagamento 4" do
|
139
145
|
pagamento = subject.pagamentos[3]
|
@@ -141,7 +147,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
141
147
|
pagamento.agencia_com_dv.must_equal "030690"
|
142
148
|
pagamento.agencia_sem_dv.must_equal "03069"
|
143
149
|
pagamento.numero_conta_com_dv.must_equal "0000000777778"
|
144
|
-
pagamento.
|
150
|
+
pagamento.numero_conta.must_equal "000000077777"
|
151
|
+
pagamento.numero_conta_dv.must_equal "8"
|
145
152
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
146
153
|
pagamento.nosso_numero.must_equal "000000036201014"
|
147
154
|
pagamento.carteira.must_equal "1"
|
@@ -173,14 +180,16 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
173
180
|
pagamento.valor_ocorrencia_sacado.must_equal 0.0
|
174
181
|
pagamento.complemento_ocorrencia_sacado.must_equal ""
|
175
182
|
pagamento.codigo_ocorrencia_banco_correspondente.must_equal "756"
|
176
|
-
pagamento.nosso_numero_banco_correspondente.must_equal ""
|
183
|
+
pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
|
184
|
+
pagamento.codigo_movimento_retorno.must_equal "06"
|
177
185
|
end
|
178
186
|
it "valores para o pagamento 4" do
|
179
187
|
pagamento = subject.pagamentos[4]
|
180
188
|
pagamento.agencia_com_dv.must_equal "030690"
|
181
189
|
pagamento.agencia_sem_dv.must_equal "03069"
|
182
190
|
pagamento.numero_conta_com_dv.must_equal "0000000777778"
|
183
|
-
pagamento.
|
191
|
+
pagamento.numero_conta.must_equal "000000077777"
|
192
|
+
pagamento.numero_conta_dv.must_equal "8"
|
184
193
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
185
194
|
pagamento.nosso_numero.must_equal "000000036201014"
|
186
195
|
pagamento.carteira.must_equal "1"
|
@@ -212,7 +221,8 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
212
221
|
pagamento.valor_ocorrencia_sacado.must_equal 0.0
|
213
222
|
pagamento.complemento_ocorrencia_sacado.must_equal ""
|
214
223
|
pagamento.codigo_ocorrencia_banco_correspondente.must_equal "756"
|
215
|
-
pagamento.nosso_numero_banco_correspondente.must_equal ""
|
224
|
+
pagamento.nosso_numero_banco_correspondente.must_equal "00000000000000000000"
|
225
|
+
pagamento.codigo_movimento_retorno.must_equal "06"
|
216
226
|
end
|
217
227
|
end
|
218
228
|
end
|