br_boleto 2.1.0 → 2.2.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/.travis.yml +1 -0
- data/Gemfile.lock +1 -1
- data/README.markdown +157 -8
- data/br_boleto.gemspec +1 -1
- data/lib/br_boleto.rb +12 -1
- data/lib/br_boleto/association/have_conta.rb +31 -27
- data/lib/br_boleto/boleto/banco_brasil.rb +130 -0
- data/lib/br_boleto/boleto/santander.rb +77 -0
- data/lib/br_boleto/conta/banco_brasil.rb +156 -0
- data/lib/br_boleto/conta/itau.rb +8 -3
- data/lib/br_boleto/conta/santander.rb +208 -0
- data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +132 -0
- data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -3
- data/lib/br_boleto/remessa/cnab240/itau.rb +0 -6
- data/lib/br_boleto/remessa/cnab240/santander.rb +266 -0
- data/lib/br_boleto/remessa/cnab400/banco_brasil.rb +264 -0
- data/lib/br_boleto/remessa/cnab400/bradesco.rb +1 -1
- data/lib/br_boleto/remessa/cnab400/santander.rb +215 -0
- data/lib/br_boleto/retorno/cnab240/banco_brasil.rb +10 -0
- data/lib/br_boleto/retorno/cnab240/base.rb +3 -2
- data/lib/br_boleto/retorno/cnab240/caixa.rb +3 -2
- data/lib/br_boleto/retorno/cnab240/itau.rb +1 -2
- data/lib/br_boleto/retorno/cnab240/santander.rb +38 -0
- data/lib/br_boleto/retorno/cnab240/sicoob.rb +3 -2
- data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +46 -0
- data/lib/br_boleto/retorno/cnab400/bradesco.rb +4 -3
- data/lib/br_boleto/retorno/cnab400/itau.rb +2 -2
- data/lib/br_boleto/retorno/cnab400/santander.rb +44 -0
- data/lib/br_boleto/retorno/cnab400/sicoob.rb +3 -2
- data/lib/br_boleto/retorno/cnab400/sicredi.rb +20 -6
- data/lib/br_boleto/retorno/pagamento.rb +28 -7
- data/lib/br_boleto/version.rb +1 -1
- data/test/br_boleto/boleto/banco_brasil_test.rb +183 -0
- data/test/br_boleto/boleto/santander_test.rb +122 -0
- data/test/br_boleto/conta/banco_brasil_test.rb +209 -0
- data/test/br_boleto/conta/santantader_test.rb +222 -0
- data/test/br_boleto/remessa/cnab240/banco_brasil_test.rb +187 -0
- data/test/br_boleto/remessa/cnab240/itau_test.rb +4 -0
- data/test/br_boleto/remessa/cnab240/santander_test.rb +144 -0
- data/test/br_boleto/remessa/cnab400/banco_brasil_test.rb +285 -0
- data/test/br_boleto/remessa/cnab400/bradesco_test.rb +7 -0
- data/test/br_boleto/remessa/cnab400/santander_test.rb +174 -0
- data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +271 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
- data/test/br_boleto/retorno/cnab240/bradesco_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +10 -10
- data/test/br_boleto/retorno/cnab240/cecred_test.rb +55 -138
- data/test/br_boleto/retorno/cnab240/itau_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/santander_test.rb +282 -0
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -15
- data/test/br_boleto/retorno/cnab240/sicredi_test.rb +15 -15
- data/test/br_boleto/retorno/cnab240/unicred_test.rb +15 -15
- data/test/br_boleto/retorno/cnab400/banco_brasil_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/bradesco_test.rb +24 -12
- data/test/br_boleto/retorno/cnab400/itau_test.rb +6 -4
- data/test/br_boleto/retorno/cnab400/santander_test.rb +7 -0
- data/test/br_boleto/retorno/cnab400/sicoob_test.rb +20 -10
- data/test/br_boleto/retorno/cnab400/sicredi_test.rb +97 -1
- data/test/br_boleto/retorno/cnab400/unicred.rb +18 -18
- data/test/br_boleto/retorno/pagamento_test.rb +2 -2
- data/test/factories/boleto/boleto_banco_brasil.rb +18 -0
- data/test/factories/boleto/boleto_santander.rb +18 -0
- data/test/factories/conta/banco_brasil.rb +16 -0
- data/test/factories/conta/santander.rb +15 -0
- data/test/factories/remessa/cnab240/banco_brasil.rb +9 -0
- data/test/factories/remessa/cnab240/santander.rb +9 -0
- data/test/factories/remessa/cnab400/banco_brasil.rb +8 -0
- data/test/factories/remessa/cnab400/santander.rb +8 -0
- data/test/fixtures/retorno/cnab240/banco_brasil.ret +74 -0
- data/test/fixtures/retorno/cnab240/cecred.ret +10 -0
- data/test/fixtures/retorno/cnab240/santander.ret +16 -0
- data/test/fixtures/retorno/cnab400/sicredi.ret +4 -0
- metadata +64 -7
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe BrBoleto::Remessa::Cnab400::BancoBrasil do
|
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_banco_brasil, pagamentos: pagamento, conta: conta) }
|
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_banco_brasil) }
|
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
|
8
|
+
|
|
9
|
+
it "deve ter a class para a conta do Banco do Brasil" do
|
|
10
|
+
BrBoleto::Remessa::Cnab400::BancoBrasil.new.conta_class.must_equal BrBoleto::Conta::BancoBrasil
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "deve herdar de Cnab400::Base" do
|
|
14
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Base
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe '#informacoes_da_conta' do
|
|
18
|
+
it "deve retornar com 20 caracteres quando o parametro for :header" do
|
|
19
|
+
subject.informacoes_da_conta(:header).size.must_equal 20
|
|
20
|
+
end
|
|
21
|
+
it "deve retornar com 21 caracteres quando o parametro for :detalhe" do
|
|
22
|
+
subject.informacoes_da_conta(:detalhe).size.must_equal 21
|
|
23
|
+
end
|
|
24
|
+
it "deve trazer as informações em suas posições quando o parametro for :header" do
|
|
25
|
+
conta.agencia = 1234
|
|
26
|
+
conta.agencia_dv = 1
|
|
27
|
+
conta.conta_corrente = 89755
|
|
28
|
+
conta.conta_corrente_dv = 7
|
|
29
|
+
result = subject.informacoes_da_conta(:header)
|
|
30
|
+
|
|
31
|
+
result[0..3].must_equal '1234' # Agência
|
|
32
|
+
result[4].must_equal '1' # Agência DV
|
|
33
|
+
result[5..12].must_equal '00089755' # Conta Corrente
|
|
34
|
+
result[13].must_equal '7' # Conta Corrente DV
|
|
35
|
+
result[14..19].must_equal '000000' # Zeros
|
|
36
|
+
end
|
|
37
|
+
it "deve trazer as informações em suas posições quando o parametro for :detalhe" do
|
|
38
|
+
conta.agencia = 1234
|
|
39
|
+
conta.agencia_dv = 1
|
|
40
|
+
conta.conta_corrente = 89755
|
|
41
|
+
conta.conta_corrente_dv = 7
|
|
42
|
+
conta.convenio = 4321
|
|
43
|
+
result = subject.informacoes_da_conta(:detalhe)
|
|
44
|
+
|
|
45
|
+
result[0..3].must_equal '1234' # Agência
|
|
46
|
+
result[4].must_equal '1' # Agência DV
|
|
47
|
+
result[5..12].must_equal '00089755' # Conta Corrente
|
|
48
|
+
result[13].must_equal '7' # Conta Corrente DV
|
|
49
|
+
result[14..20].must_equal '0004321' # Convênio
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
describe '#complemento_registro' do
|
|
54
|
+
it "deve retornar o sequencial da remessa com 7 posições e mais zeros e brancos" do
|
|
55
|
+
subject.sequencial_remessa = 4758
|
|
56
|
+
conta.convenio = 4321
|
|
57
|
+
|
|
58
|
+
subject.complemento_registro[0..6].must_equal '0004758'
|
|
59
|
+
subject.complemento_registro[7..28].must_equal ''.rjust(22)
|
|
60
|
+
subject.complemento_registro[29..35].must_equal '0004321'
|
|
61
|
+
subject.complemento_registro[36..293].must_equal ''.rjust(258)
|
|
62
|
+
|
|
63
|
+
subject.complemento_registro.size.must_equal 294
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
describe '#detalhe_posicao_039_108' do
|
|
69
|
+
it "deve ter o tamanho de 70 digitos" do
|
|
70
|
+
subject.detalhe_posicao_039_108(pagamento).size.must_equal 70
|
|
71
|
+
end
|
|
72
|
+
it "deve conter as informações nas posições corretas" do
|
|
73
|
+
pagamento.nosso_numero = 12345
|
|
74
|
+
conta.variacao_carteira = 1
|
|
75
|
+
conta.carteira = 33
|
|
76
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
|
77
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
78
|
+
|
|
79
|
+
result[0..24].must_equal ''.rjust(25)
|
|
80
|
+
result[25..41].must_equal '00000000000012345' # Nosso numero
|
|
81
|
+
result[42..43].must_equal '00'
|
|
82
|
+
result[44..45].must_equal '00'
|
|
83
|
+
result[46..48].must_equal ''.rjust(3)
|
|
84
|
+
result[49].must_equal ' '
|
|
85
|
+
result[50..52].must_equal ''.rjust(3)
|
|
86
|
+
result[53..55].must_equal '001' # Variação da Carteira
|
|
87
|
+
result[56].must_equal '0'
|
|
88
|
+
result[57..62].must_equal '000000'
|
|
89
|
+
result[63..67].must_equal ''.rjust(5) # Tipo de cobrança
|
|
90
|
+
result[68..69].must_equal '33' # Carteira
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "deve conter as informações nas posições corretas (carteira 11 e código da carteira 3)" do
|
|
94
|
+
conta.carteira = 11
|
|
95
|
+
conta.codigo_carteira = 3
|
|
96
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
97
|
+
|
|
98
|
+
result[63..67].must_equal '02VIN' # Tipo de cobrança
|
|
99
|
+
result[68..69].must_equal '11' # Carteira
|
|
100
|
+
end
|
|
101
|
+
it "deve conter as informações nas posições corretas (carteira 17 e código da carteira 3)" do
|
|
102
|
+
conta.carteira = 17
|
|
103
|
+
conta.codigo_carteira = 3
|
|
104
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
105
|
+
|
|
106
|
+
result[63..67].must_equal '02VIN' # Tipo de cobrança
|
|
107
|
+
result[68..69].must_equal '17' # Carteira
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
it "deve conter as informações nas posições corretas (carteira 11 e código da carteira 4)" do
|
|
112
|
+
conta.carteira = 11
|
|
113
|
+
conta.codigo_carteira = 4
|
|
114
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
115
|
+
|
|
116
|
+
result[63..67].must_equal '04DSC' # Tipo de cobrança
|
|
117
|
+
result[68..69].must_equal '11' # Carteira
|
|
118
|
+
end
|
|
119
|
+
it "deve conter as informações nas posições corretas (carteira 17 e código da carteira 4)" do
|
|
120
|
+
conta.carteira = 17
|
|
121
|
+
conta.codigo_carteira = 4
|
|
122
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
123
|
+
|
|
124
|
+
result[63..67].must_equal '04DSC' # Tipo de cobrança
|
|
125
|
+
result[68..69].must_equal '17' # Carteira
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
it "deve conter as informações nas posições corretas (carteira 11 e código da carteira 7)" do
|
|
130
|
+
conta.carteira = 11
|
|
131
|
+
conta.codigo_carteira = 7
|
|
132
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
133
|
+
|
|
134
|
+
result[63..67].must_equal '08VDR' # Tipo de cobrança
|
|
135
|
+
result[68..69].must_equal '11' # Carteira
|
|
136
|
+
end
|
|
137
|
+
it "deve conter as informações nas posições corretas (carteira 17 e código da carteira 7)" do
|
|
138
|
+
conta.carteira = 17
|
|
139
|
+
conta.codigo_carteira = 7
|
|
140
|
+
result = subject.detalhe_posicao_039_108(pagamento)
|
|
141
|
+
|
|
142
|
+
result[63..67].must_equal '08VDR' # Tipo de cobrança
|
|
143
|
+
result[68..69].must_equal '17' # Carteira
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe '#informacoes_do_pagamento' do
|
|
148
|
+
it "deve ter o tamanho de 40 digitos" do
|
|
149
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
|
150
|
+
end
|
|
151
|
+
it "deve conter as informações nas posições corretas" do
|
|
152
|
+
conta.agencia = 4587
|
|
153
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
|
154
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
|
155
|
+
pagamento.valor_documento = 47.56
|
|
156
|
+
pagamento.especie_titulo = "12"
|
|
157
|
+
pagamento.aceite = true
|
|
158
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
|
159
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
|
160
|
+
result.size.must_equal 40
|
|
161
|
+
|
|
162
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
|
163
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
|
164
|
+
result[19..21].must_equal '001' # Número Banco
|
|
165
|
+
result[22..26].must_equal "00000" # 000000 ou Agencia
|
|
166
|
+
result[27..28].must_equal "02" # Espécie do Título
|
|
167
|
+
result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
|
|
168
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
|
169
|
+
result[36..37].must_equal '00' # Primeira instrução codificada
|
|
170
|
+
result[38..39].must_equal '00' # Segunda instrução
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
|
175
|
+
it "deve ter o tamanho de 58 digitos" do
|
|
176
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
|
177
|
+
end
|
|
178
|
+
it "deve conter as informações nas posições corretas" do
|
|
179
|
+
pagamento.valor_mora = '0.39'
|
|
180
|
+
pagamento.valor_iof = '2.7'
|
|
181
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
|
182
|
+
pagamento.valor_desconto = 4.3
|
|
183
|
+
pagamento.valor_abatimento = 56.47
|
|
184
|
+
|
|
185
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
|
186
|
+
result.size.must_equal 58
|
|
187
|
+
|
|
188
|
+
result[00..12].must_equal '0000000000039'
|
|
189
|
+
result[13..18].must_equal "210318"
|
|
190
|
+
result[19..31].must_equal '0000000000430'
|
|
191
|
+
result[32..44].must_equal '0000000000270'
|
|
192
|
+
result[45..57].must_equal '0000000005647'
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
describe '#informacoes_do_sacado' do
|
|
197
|
+
it "deve ter o tamanho de 176 digitos" do
|
|
198
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
|
199
|
+
end
|
|
200
|
+
it "deve conter as informações nas posições corretas (Sacador/Avalista com CNPJ)" do
|
|
201
|
+
# pagador.tipo_cpf_cnpj = '1'
|
|
202
|
+
pagador.cpf_cnpj = '12345678901'
|
|
203
|
+
pagador.nome = 'nome pagador'
|
|
204
|
+
pagador.endereco = 'rua do pagador'
|
|
205
|
+
pagador.bairro = 'bairro do pagador'
|
|
206
|
+
pagador.cidade = 'Chapecó'
|
|
207
|
+
pagador.uf = 'SC'
|
|
208
|
+
pagador.cep = '89885-001'
|
|
209
|
+
pagador.nome_avalista = 'Avalista'
|
|
210
|
+
# pagador.documento_avalista = '840.106.990-43'
|
|
211
|
+
pagador.documento_avalista = '97.448.536/0001-06'
|
|
212
|
+
|
|
213
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
|
214
|
+
result.size.must_equal 176
|
|
215
|
+
|
|
216
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
|
217
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
|
218
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
|
219
|
+
result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
|
|
220
|
+
result[96..107].must_equal 'bairro do pagador'.adjust_size_to(12) # Bairro do Pagador
|
|
221
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
|
222
|
+
result[116..130].must_equal 'Chapecó'.adjust_size_to(15) # Cidade do Pagador
|
|
223
|
+
result[131..132].must_equal 'SC'.adjust_size_to(2) # UF do Pagador
|
|
224
|
+
result[133..153].must_equal 'Avalista'.adjust_size_to(21) # Nome Sacador/Avalista
|
|
225
|
+
result[154].must_equal ''.adjust_size_to(1) # Complemento Registro (Branco)
|
|
226
|
+
result[155..158].must_equal 'CNPJ' # CNPJ
|
|
227
|
+
result[159..172].must_equal '97448536000106'.adjust_size_to(14) # Sacador/Avalista (CNPJ)
|
|
228
|
+
result[173..174].must_equal ''.adjust_size_to(2) # Quantidade de dias para Protesto (Branco)
|
|
229
|
+
result[175].must_equal ' ' # Complemento Registro (Branco)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
it "deve conter as informações nas posições corretas (Sacador/Avalista com CPF)" do
|
|
233
|
+
pagador.cpf_cnpj = '12345678901'
|
|
234
|
+
pagador.nome = 'nome pagador'
|
|
235
|
+
pagador.endereco = 'rua do pagador'
|
|
236
|
+
pagador.bairro = 'bairro do pagador'
|
|
237
|
+
pagador.cidade = 'Chapecó'
|
|
238
|
+
pagador.uf = 'SC'
|
|
239
|
+
pagador.cep = '89885-001'
|
|
240
|
+
pagador.nome_avalista = 'Novo Avalista'
|
|
241
|
+
pagador.documento_avalista = '840.106.990-43'
|
|
242
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
|
243
|
+
|
|
244
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
|
245
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
|
246
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
|
247
|
+
result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
|
|
248
|
+
result[96..107].must_equal 'bairro do pagador'.adjust_size_to(12) # Bairro do Pagador
|
|
249
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
|
250
|
+
result[116..130].must_equal 'Chapecó'.adjust_size_to(15) # Cidade do Pagador
|
|
251
|
+
result[131..132].must_equal 'SC'.adjust_size_to(2) # UF do Pagador
|
|
252
|
+
result[133..157].must_equal 'Novo Avalista'.adjust_size_to(25) # Nome Sacador/Avalista
|
|
253
|
+
result[158].must_equal ''.adjust_size_to(1) # Complemento Registro (Branco)
|
|
254
|
+
result[159..161].must_equal 'CPF' # CPF
|
|
255
|
+
result[162..172].must_equal '84010699043'.adjust_size_to(11) # Sacador/Avalista (CNPJ)
|
|
256
|
+
result[173..174].must_equal ''.adjust_size_to(2) # Quantidade de dias para Protesto (Branco)
|
|
257
|
+
result[175].must_equal ' ' # Complemento Registro (Branco)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
it "deve conter as informações nas posições corretas (Sacador/Avalista em branco)" do
|
|
261
|
+
pagador.cpf_cnpj = '12345678901'
|
|
262
|
+
pagador.nome = 'nome pagador'
|
|
263
|
+
pagador.endereco = 'rua do pagador'
|
|
264
|
+
pagador.bairro = 'bairro do pagador'
|
|
265
|
+
pagador.cidade = 'Chapecó'
|
|
266
|
+
pagador.uf = 'SC'
|
|
267
|
+
pagador.cep = '89885-001'
|
|
268
|
+
pagador.nome_avalista = ''
|
|
269
|
+
pagador.documento_avalista = ''
|
|
270
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
|
271
|
+
|
|
272
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
|
273
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
|
274
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
|
275
|
+
result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
|
|
276
|
+
result[96..107].must_equal 'bairro do pagador'.adjust_size_to(12) # Bairro do Pagador
|
|
277
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
|
278
|
+
result[116..130].must_equal 'Chapecó'.adjust_size_to(15) # Cidade do Pagador
|
|
279
|
+
result[131..132].must_equal 'SC'.adjust_size_to(2) # UF do Pagador
|
|
280
|
+
result[133..172].must_equal ''.adjust_size_to(40) # Observações/Mensagem
|
|
281
|
+
result[173..174].must_equal ''.adjust_size_to(2) # Quantidade de dias para Protesto (Branco)
|
|
282
|
+
result[175].must_equal ' ' # Complemento Registro (Branco)
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
end
|
|
@@ -57,6 +57,13 @@ describe BrBoleto::Remessa::Cnab400::Bradesco do
|
|
|
57
57
|
end
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
it '#detalhe_posicao_002_003 - deve retornar brancos' do
|
|
61
|
+
subject.detalhe_posicao_002_003(pagamento).must_equal (' ' * 2)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it '#detalhe_posicao_004_017 - deve retornar brancos' do
|
|
65
|
+
subject.detalhe_posicao_004_017.must_equal (' ' * 14)
|
|
66
|
+
end
|
|
60
67
|
|
|
61
68
|
describe '#detalhe_posicao_063_108' do
|
|
62
69
|
it "deve ter o tamanho de 46 digitos" do
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
require 'test_helper'
|
|
2
|
+
|
|
3
|
+
describe BrBoleto::Remessa::Cnab400::Santander do
|
|
4
|
+
subject { FactoryGirl.build(:remessa_cnab400_santander, pagamentos: pagamento, conta: conta) }
|
|
5
|
+
let(:pagamento) { FactoryGirl.build(:remessa_pagamento, pagador: pagador) }
|
|
6
|
+
let(:conta) { FactoryGirl.build(:conta_santander) }
|
|
7
|
+
let(:pagador) { FactoryGirl.build(:pagador) }
|
|
8
|
+
|
|
9
|
+
it "deve ter a class para a conta do santander" do
|
|
10
|
+
BrBoleto::Remessa::Cnab400::Santander.new.conta_class.must_equal BrBoleto::Conta::Santander
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "deve herdar de Cnab400::Base" do
|
|
14
|
+
subject.class.superclass.must_equal BrBoleto::Remessa::Cnab400::Base
|
|
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_transmissao = 1234
|
|
23
|
+
result = subject.informacoes_da_conta(:header)
|
|
24
|
+
result.must_equal '00000000000000001234' # codigo_transmissao
|
|
25
|
+
end
|
|
26
|
+
|
|
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.codigo_transmissao = 1234
|
|
32
|
+
result = subject.informacoes_da_conta(:detalhe)
|
|
33
|
+
result.must_equal '00000000000000001234' # codigo_transmissao
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe '#complemento_registro' do
|
|
38
|
+
it "deve retornar as informações corretas do complemento_registro" do
|
|
39
|
+
subject.complemento_registro[0..15].must_equal ''.rjust(16, '0')
|
|
40
|
+
subject.complemento_registro[16..290].must_equal ''.rjust(275)
|
|
41
|
+
subject.complemento_registro[291..293].must_equal ''.rjust(3, '0')
|
|
42
|
+
subject.complemento_registro.size.must_equal 294
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
describe '#detalhe_posicao_063_108' do
|
|
48
|
+
it "deve ter o tamanho de 46 digitos" do
|
|
49
|
+
subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
|
|
50
|
+
end
|
|
51
|
+
it "deve conter as informações nas posições corretas" do
|
|
52
|
+
conta.carteira = 123
|
|
53
|
+
conta.codigo_carteira = 1
|
|
54
|
+
pagamento.assign_attributes(tipo_emissao: 2)
|
|
55
|
+
pagamento.assign_attributes(nosso_numero: 763)
|
|
56
|
+
|
|
57
|
+
result = subject.detalhe_posicao_063_108(pagamento)
|
|
58
|
+
|
|
59
|
+
result[0..7].must_equal '00000763' # Numero documento
|
|
60
|
+
result[8..13].must_equal ('0' * 6) # Zeros
|
|
61
|
+
result[14..14].must_equal ' ' # Branco
|
|
62
|
+
result[15..15].must_equal '0' # Codigo Multa
|
|
63
|
+
result[16..19].must_equal '0000' # Percentual Multa
|
|
64
|
+
result[20..21].must_equal '00' # Zeros
|
|
65
|
+
result[22..34].must_equal ('0' * 13) # Zeros
|
|
66
|
+
result[35..38].must_equal (' ' * 4) # Brancos
|
|
67
|
+
result[39..44].must_equal ('0' * 6) # Data Multa
|
|
68
|
+
result[45].must_equal '1' # Cod. Carteira
|
|
69
|
+
|
|
70
|
+
result.size.must_equal 46
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
describe '#informacoes_do_pagamento' do
|
|
75
|
+
it "deve ter o tamanho de 40 digitos" do
|
|
76
|
+
subject.informacoes_do_pagamento(pagamento, 1).size.must_equal 40
|
|
77
|
+
end
|
|
78
|
+
it "deve conter as informações nas posições corretas" do
|
|
79
|
+
conta.agencia = 4587
|
|
80
|
+
conta.agencia_dv = 45 # Vai retornar apenas o 4
|
|
81
|
+
pagamento.data_vencimento = Date.parse('05/08/2029')
|
|
82
|
+
pagamento.valor_documento = 47.56
|
|
83
|
+
pagamento.especie_titulo = "12"
|
|
84
|
+
pagamento.aceite = true
|
|
85
|
+
pagamento.data_emissao = Date.parse('15/09/2017')
|
|
86
|
+
result = subject.informacoes_do_pagamento(pagamento, 4)
|
|
87
|
+
result.size.must_equal 40
|
|
88
|
+
|
|
89
|
+
result[00..05].must_equal '050829' # "Data Vencimento: Formato DDMMAA Normal ""DDMMAA"" A vista = ""888888"" Contra Apresentação = ""999999"""
|
|
90
|
+
result[06..18].must_equal '0000000004756' # Valor do Titulo
|
|
91
|
+
result[19..21].must_equal '033' # Número Banco
|
|
92
|
+
result[22..26].must_equal "00000" # 000000 ou Agencia
|
|
93
|
+
result[27..28].must_equal "02" # Espécie do Título
|
|
94
|
+
result[ 29 ].must_equal "N" # dentificação (Sempre 'N')
|
|
95
|
+
result[30..35].must_equal '150917' # Data de Emissão do Título: formato ddmmaa
|
|
96
|
+
result[36..37].must_equal '00' # Primeira instrução codificada
|
|
97
|
+
result[38..39].must_equal '00' # Segunda instrução
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
describe '#detalhe_multas_e_juros_do_pagamento' do
|
|
102
|
+
it "deve ter o tamanho de 58 digitos" do
|
|
103
|
+
subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
|
|
104
|
+
end
|
|
105
|
+
it "deve conter as informações nas posições corretas" do
|
|
106
|
+
pagamento.valor_mora = '0.39'
|
|
107
|
+
pagamento.valor_iof = '2.7'
|
|
108
|
+
pagamento.data_desconto = Date.parse('21/03/2018')
|
|
109
|
+
pagamento.valor_desconto = 4.3
|
|
110
|
+
pagamento.valor_abatimento = 56.47
|
|
111
|
+
|
|
112
|
+
result = subject.detalhe_multas_e_juros_do_pagamento(pagamento, 4)
|
|
113
|
+
result.size.must_equal 58
|
|
114
|
+
|
|
115
|
+
result[00..12].must_equal '0000000000039'
|
|
116
|
+
result[13..18].must_equal "210318"
|
|
117
|
+
result[19..31].must_equal '0000000000430'
|
|
118
|
+
result[32..44].must_equal '0000000000270'
|
|
119
|
+
result[45..57].must_equal '0000000005647'
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
describe '#informacoes_do_sacado' do
|
|
124
|
+
it "deve ter o tamanho de 176 digitos" do
|
|
125
|
+
subject.informacoes_do_sacado(pagamento, 2).size.must_equal 176
|
|
126
|
+
end
|
|
127
|
+
it "deve conter as informações nas posições corretas" do
|
|
128
|
+
# pagador.tipo_cpf_cnpj = '1'
|
|
129
|
+
pagador.cpf_cnpj = '12345678901'
|
|
130
|
+
pagador.nome = 'nome pagador'
|
|
131
|
+
pagador.endereco = 'rua do pagador'
|
|
132
|
+
pagador.bairro = 'bairro do pagador'
|
|
133
|
+
pagador.cidade = 'Chapecó'
|
|
134
|
+
pagador.uf = 'SC'
|
|
135
|
+
pagador.cep = '89885-001'
|
|
136
|
+
pagador.nome_avalista = 'Avalista'
|
|
137
|
+
pagador.documento_avalista = '840.106.990-43'
|
|
138
|
+
conta.conta_corrente = 123456789
|
|
139
|
+
conta.conta_corrente_dv = 0
|
|
140
|
+
|
|
141
|
+
result = subject.informacoes_do_sacado(pagamento, 2)
|
|
142
|
+
result.size.must_equal 176
|
|
143
|
+
|
|
144
|
+
result[00..01].must_equal "01" # Tipo de Inscrição do Pagador: "01" = CPF / "02" = CNPJ
|
|
145
|
+
result[02..15].must_equal '00012345678901' # Número do CNPJ ou CPF do Pagador
|
|
146
|
+
result[16..55].must_equal 'nome pagador'.adjust_size_to(40) # Nome do Pagador
|
|
147
|
+
result[56..95].must_equal 'rua do pagador'.adjust_size_to(40) # Endereço do Pagador
|
|
148
|
+
result[96..107].must_equal 'bairro do pagador'.adjust_size_to(12) # Bairro do Pagador
|
|
149
|
+
result[108..115].must_equal '89885001' # CEP do Pagador
|
|
150
|
+
result[116..130].must_equal 'Chapecó'.adjust_size_to(15) # Cidade do Pagador
|
|
151
|
+
result[131..132].must_equal 'SC'.adjust_size_to(2) # UF do Pagador
|
|
152
|
+
result[133..162].must_equal 'Avalista'.adjust_size_to(30) # Nome Sacador/Avalista
|
|
153
|
+
|
|
154
|
+
result[163..163].must_equal ' ' # Complemento Registro (Brancos)
|
|
155
|
+
result[164..164].must_equal 'I' # Identificador do Complemento (I)
|
|
156
|
+
result[165..166].must_equal '90' # Complemento remessa
|
|
157
|
+
result[167..172].must_equal (' ' * 6) # Brancos
|
|
158
|
+
result[173..174].must_equal '00' # Quantidade de dias (Zeros)
|
|
159
|
+
result[175].must_equal ' ' # Complemento Registro (Branco)
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
describe "#trailer_arquivo_posicao_002_a_394" do
|
|
164
|
+
it "deve conter as informações nas posições corretas" do
|
|
165
|
+
result = subject.trailer_arquivo_posicao_002_a_394(2)
|
|
166
|
+
|
|
167
|
+
result[00..05].must_equal "000002" # Quantidade total de linhas no arquivo
|
|
168
|
+
result[06..18].must_equal '0000000010012' # Valor total dos títulos
|
|
169
|
+
result[19..392].must_equal ('0' * 374) # Zeros
|
|
170
|
+
|
|
171
|
+
result.size.must_equal 393
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|