br_boleto 2.1.0 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.markdown +157 -8
  5. data/br_boleto.gemspec +1 -1
  6. data/lib/br_boleto.rb +12 -1
  7. data/lib/br_boleto/association/have_conta.rb +31 -27
  8. data/lib/br_boleto/boleto/banco_brasil.rb +130 -0
  9. data/lib/br_boleto/boleto/santander.rb +77 -0
  10. data/lib/br_boleto/conta/banco_brasil.rb +156 -0
  11. data/lib/br_boleto/conta/itau.rb +8 -3
  12. data/lib/br_boleto/conta/santander.rb +208 -0
  13. data/lib/br_boleto/remessa/cnab240/banco_brasil.rb +132 -0
  14. data/lib/br_boleto/remessa/cnab240/bradesco.rb +1 -3
  15. data/lib/br_boleto/remessa/cnab240/itau.rb +0 -6
  16. data/lib/br_boleto/remessa/cnab240/santander.rb +266 -0
  17. data/lib/br_boleto/remessa/cnab400/banco_brasil.rb +264 -0
  18. data/lib/br_boleto/remessa/cnab400/bradesco.rb +1 -1
  19. data/lib/br_boleto/remessa/cnab400/santander.rb +215 -0
  20. data/lib/br_boleto/retorno/cnab240/banco_brasil.rb +10 -0
  21. data/lib/br_boleto/retorno/cnab240/base.rb +3 -2
  22. data/lib/br_boleto/retorno/cnab240/caixa.rb +3 -2
  23. data/lib/br_boleto/retorno/cnab240/itau.rb +1 -2
  24. data/lib/br_boleto/retorno/cnab240/santander.rb +38 -0
  25. data/lib/br_boleto/retorno/cnab240/sicoob.rb +3 -2
  26. data/lib/br_boleto/retorno/cnab400/banco_brasil.rb +46 -0
  27. data/lib/br_boleto/retorno/cnab400/bradesco.rb +4 -3
  28. data/lib/br_boleto/retorno/cnab400/itau.rb +2 -2
  29. data/lib/br_boleto/retorno/cnab400/santander.rb +44 -0
  30. data/lib/br_boleto/retorno/cnab400/sicoob.rb +3 -2
  31. data/lib/br_boleto/retorno/cnab400/sicredi.rb +20 -6
  32. data/lib/br_boleto/retorno/pagamento.rb +28 -7
  33. data/lib/br_boleto/version.rb +1 -1
  34. data/test/br_boleto/boleto/banco_brasil_test.rb +183 -0
  35. data/test/br_boleto/boleto/santander_test.rb +122 -0
  36. data/test/br_boleto/conta/banco_brasil_test.rb +209 -0
  37. data/test/br_boleto/conta/santantader_test.rb +222 -0
  38. data/test/br_boleto/remessa/cnab240/banco_brasil_test.rb +187 -0
  39. data/test/br_boleto/remessa/cnab240/itau_test.rb +4 -0
  40. data/test/br_boleto/remessa/cnab240/santander_test.rb +144 -0
  41. data/test/br_boleto/remessa/cnab400/banco_brasil_test.rb +285 -0
  42. data/test/br_boleto/remessa/cnab400/bradesco_test.rb +7 -0
  43. data/test/br_boleto/remessa/cnab400/santander_test.rb +174 -0
  44. data/test/br_boleto/retorno/cnab240/banco_brasil_test.rb +271 -0
  45. data/test/br_boleto/retorno/cnab240/base_test.rb +20 -10
  46. data/test/br_boleto/retorno/cnab240/bradesco_test.rb +15 -15
  47. data/test/br_boleto/retorno/cnab240/caixa_test.rb +10 -10
  48. data/test/br_boleto/retorno/cnab240/cecred_test.rb +55 -138
  49. data/test/br_boleto/retorno/cnab240/itau_test.rb +15 -15
  50. data/test/br_boleto/retorno/cnab240/santander_test.rb +282 -0
  51. data/test/br_boleto/retorno/cnab240/sicoob_test.rb +25 -15
  52. data/test/br_boleto/retorno/cnab240/sicredi_test.rb +15 -15
  53. data/test/br_boleto/retorno/cnab240/unicred_test.rb +15 -15
  54. data/test/br_boleto/retorno/cnab400/banco_brasil_test.rb +7 -0
  55. data/test/br_boleto/retorno/cnab400/bradesco_test.rb +24 -12
  56. data/test/br_boleto/retorno/cnab400/itau_test.rb +6 -4
  57. data/test/br_boleto/retorno/cnab400/santander_test.rb +7 -0
  58. data/test/br_boleto/retorno/cnab400/sicoob_test.rb +20 -10
  59. data/test/br_boleto/retorno/cnab400/sicredi_test.rb +97 -1
  60. data/test/br_boleto/retorno/cnab400/unicred.rb +18 -18
  61. data/test/br_boleto/retorno/pagamento_test.rb +2 -2
  62. data/test/factories/boleto/boleto_banco_brasil.rb +18 -0
  63. data/test/factories/boleto/boleto_santander.rb +18 -0
  64. data/test/factories/conta/banco_brasil.rb +16 -0
  65. data/test/factories/conta/santander.rb +15 -0
  66. data/test/factories/remessa/cnab240/banco_brasil.rb +9 -0
  67. data/test/factories/remessa/cnab240/santander.rb +9 -0
  68. data/test/factories/remessa/cnab400/banco_brasil.rb +8 -0
  69. data/test/factories/remessa/cnab400/santander.rb +8 -0
  70. data/test/fixtures/retorno/cnab240/banco_brasil.ret +74 -0
  71. data/test/fixtures/retorno/cnab240/cecred.ret +10 -0
  72. data/test/fixtures/retorno/cnab240/santander.ret +16 -0
  73. data/test/fixtures/retorno/cnab400/sicredi.ret +4 -0
  74. 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