br_boleto 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|