br_boleto 2.2.7 → 2.2.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,13 +2,13 @@
2
2
  module BrBoleto
3
3
  module Remessa
4
4
  class Pagamento < BrBoleto::ActiveModelBase
5
-
5
+
6
6
  # conté o metodo 'pagador'
7
7
  # CNAB: 240 e 400
8
8
  include BrBoleto::HavePagador
9
9
 
10
10
  include BrBoleto::Helper::DefaultCodes
11
-
11
+
12
12
  # <b>REQUERIDO</b>: nosso numero
13
13
  # CNAB: 240 e 400
14
14
  attr_accessor :nosso_numero
@@ -37,7 +37,7 @@ module BrBoleto
37
37
  # 1 - Frente do Bloqueto
38
38
  # 2 - Verso do Bloauqto
39
39
  # 3 - Corpo de instruções da Ficha de Complansação
40
- #
40
+ #
41
41
  attr_accessor :tipo_impressao # Default '1'
42
42
 
43
43
  # <b>OPCIONAL</b>: codigo da 1a instrucao
@@ -55,11 +55,16 @@ module BrBoleto
55
55
  attr_accessor :valor_desconto
56
56
 
57
57
  # <b>OPCIONAL</b>: codigo do desconto (para CNAB240)
58
+ # Indica o tipo de desconto que deseja conceder ao Pagador do título:
59
+ # - "0" - Sem Desconto;
60
+ # - "1" - Valor Fixo até a Data do Desconto informada;
61
+ # - "2" - Percentual até a Data do Desconto informada
62
+ #
58
63
  attr_accessor :cod_desconto
59
64
 
60
65
  # <b>OPCIONAL</b>: valor do IOF
61
66
  attr_accessor :valor_iof
62
-
67
+
63
68
  # <b>OPCIONAL</b>: valor do abatimento
64
69
  attr_accessor :valor_abatimento
65
70
 
@@ -99,18 +104,18 @@ module BrBoleto
99
104
 
100
105
  # <b>OPCIONAL</b>: Informações para Juros
101
106
  # Código do juros pode ser:
102
- # - '1' Valor por Dia
103
- # - '2' Taxa Mensal
107
+ # - '1' Valor por Dia R$
108
+ # - '2' Taxa Mensal %
104
109
  # - '3' Isento
105
110
  # - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
106
111
  attr_accessor :codigo_juros, :data_juros
107
112
  attr_accessor :valor_juros # Valor de acordo com o código da multa
108
-
113
+
109
114
  # Cálculo para saber a taxa de juros % ao mês.
110
115
  # É efetuado o calculo apenas quando o codigo de juros for setado
111
116
  # com 1, na qual significa que foi setado o valor R$ diário.
112
117
  # Esse método sempre deve retornar o percentual de juros MENSAL
113
- #
118
+ #
114
119
  def percentual_juros # Valor % Ex: 2.5% = 2.5
115
120
  if codigo_juros.to_i == 1
116
121
  (valor_juros.to_f*30/valor_documento.to_f*100).to_f.round(2)
@@ -129,12 +134,12 @@ module BrBoleto
129
134
  0.0
130
135
  end
131
136
  end
132
-
137
+
133
138
  # <b>OPCIONAL</b>: Número da parquela que o pagamento representa
134
139
  # Padrão: 1
135
140
  # CNAB: 240 e 400
136
141
  attr_accessor :parcela
137
-
142
+
138
143
  # Tipo de Emissão: 1-Banco/Cooperativa 2-Cliente
139
144
  # Banco Sicoob utiliza
140
145
  # CNAB: 240 e 400
@@ -212,7 +217,7 @@ module BrBoleto
212
217
  # 23 = Nota Fiscal
213
218
  # 24 = Documento de Dívida
214
219
  # 25 = Cédula de Produto Rural
215
- # 26 = Warrant
220
+ # 26 = Warrant
216
221
  # 27 = Dívida Ativa de Estado
217
222
  # 28 = Dívida Ativa de Município
218
223
  # 29 = Dívida Ativa da União
@@ -226,7 +231,7 @@ module BrBoleto
226
231
  # Aceite título
227
232
  # "0" = Sem aceite / "1" = Com aceite" / Depende de
228
233
  # "N" = Sem aceite / "S" = Com aceite" \ cada banco
229
- # "N" = Sem aceite / "A" = Com aceite" \
234
+ # "N" = Sem aceite / "A" = Com aceite" \
230
235
  # CNAB: 240 e 400
231
236
  # Setar true para Aceite e false para Não aceite
232
237
  attr_accessor :aceite
@@ -283,13 +288,13 @@ module BrBoleto
283
288
  ######################## VALIDAÇÕES PERSONALIZADAS ########################
284
289
  attr_accessor :valid_tipo_impressao_required
285
290
  validates :tipo_impressao, presence: true, if: :valid_tipo_impressao_required
286
-
291
+
287
292
  attr_accessor :valid_cod_desconto_length
288
293
  validates :cod_desconto, custom_length: {is: :valid_cod_desconto_length}, if: :valid_cod_desconto_length
289
294
 
290
295
  attr_accessor :valid_emissao_boleto_length
291
296
  validates :emissao_boleto, custom_length: {is: :valid_emissao_boleto_length}, if: :valid_emissao_boleto_length
292
-
297
+
293
298
  attr_accessor :valid_distribuicao_boleto_length
294
299
  validates :distribuicao_boleto, custom_length: {is: :valid_distribuicao_boleto_length}, if: :valid_distribuicao_boleto_length
295
300
  #############################################################################
@@ -309,9 +314,9 @@ module BrBoleto
309
314
 
310
315
  # Nosso número deve retornar apenas letras e números
311
316
  # Ex: self.nosso_numero = '0100245-P'
312
- # self.nosso_numero
317
+ # self.nosso_numero
313
318
  # ~> '0100245P'
314
- #
319
+ #
315
320
  def nosso_numero
316
321
  "#{@nosso_numero}".remove(/[^\d\w]/i)
317
322
  end
@@ -339,7 +344,7 @@ module BrBoleto
339
344
  identificacao_ocorrencia: '01',
340
345
  especie_titulo: '01',
341
346
  codigo_moeda: '9',
342
- forma_cadastramento: '0',
347
+ forma_cadastramento: '1',
343
348
  emissao_boleto: '2', # Cliente Emite
344
349
  distribuicao_boleto: '2', # Cliente Distribui
345
350
  codigo_protesto: '3', # Não protestar
@@ -373,7 +378,7 @@ module BrBoleto
373
378
  formata_data(data_multa, formato)
374
379
  end
375
380
  def valor_multa_formatado(tamanho=13)
376
- BrBoleto::Helper::Number.new(valor_multa).formata_valor_monetario(tamanho)
381
+ BrBoleto::Helper::Number.new(valor_multa).formata_valor_monetario(tamanho)
377
382
  end
378
383
 
379
384
  # Formatação para campos da juros
@@ -381,7 +386,7 @@ module BrBoleto
381
386
  formata_data(data_juros, formato)
382
387
  end
383
388
  def valor_juros_formatado(tamanho=13)
384
- BrBoleto::Helper::Number.new(valor_juros).formata_valor_monetario(tamanho)
389
+ BrBoleto::Helper::Number.new(valor_juros).formata_valor_monetario(tamanho)
385
390
  end
386
391
 
387
392
  # Formata o campo valor
@@ -392,7 +397,7 @@ module BrBoleto
392
397
  # quantidade de caracteres a ser retornado
393
398
  #
394
399
  def valor_documento_formatado(tamanho = 13)
395
- BrBoleto::Helper::Number.new(valor_documento).formata_valor_monetario(tamanho)
400
+ BrBoleto::Helper::Number.new(valor_documento).formata_valor_monetario(tamanho)
396
401
  end
397
402
 
398
403
  # Formata o campo valor_juros_monetario
@@ -403,7 +408,7 @@ module BrBoleto
403
408
  # quantidade de caracteres a ser retornado
404
409
  #
405
410
  def valor_juros_monetario_formatado(tamanho = 13)
406
- BrBoleto::Helper::Number.new(valor_juros_monetario).formata_valor_monetario(tamanho)
411
+ BrBoleto::Helper::Number.new(valor_juros_monetario).formata_valor_monetario(tamanho)
407
412
  end
408
413
 
409
414
  # Formata o campo valor_multa_monetario
@@ -414,7 +419,7 @@ module BrBoleto
414
419
  # quantidade de caracteres a ser retornado
415
420
  #
416
421
  def valor_multa_monetario_formatado(tamanho = 13)
417
- BrBoleto::Helper::Number.new(valor_multa_monetario).formata_valor_monetario(tamanho)
422
+ BrBoleto::Helper::Number.new(valor_multa_monetario).formata_valor_monetario(tamanho)
418
423
  end
419
424
 
420
425
  # Formata o campo valor dos descontos
@@ -423,13 +428,13 @@ module BrBoleto
423
428
  # quantidade de caracteres a ser retornado
424
429
  #
425
430
  def valor_desconto_formatado(tamanho = 13)
426
- BrBoleto::Helper::Number.new(valor_desconto).formata_valor_monetario(tamanho)
431
+ BrBoleto::Helper::Number.new(valor_desconto).formata_valor_monetario(tamanho)
427
432
  end
428
433
  def desconto_2_valor_formatado(tamanho = 13)
429
- BrBoleto::Helper::Number.new(desconto_2_valor).formata_valor_monetario(tamanho)
434
+ BrBoleto::Helper::Number.new(desconto_2_valor).formata_valor_monetario(tamanho)
430
435
  end
431
436
  def desconto_3_valor_formatado(tamanho = 13)
432
- BrBoleto::Helper::Number.new(desconto_3_valor).formata_valor_monetario(tamanho)
437
+ BrBoleto::Helper::Number.new(desconto_3_valor).formata_valor_monetario(tamanho)
433
438
  end
434
439
 
435
440
  # Formata o campo valor do IOF
@@ -438,7 +443,7 @@ module BrBoleto
438
443
  # quantidade de caracteres a ser retornado
439
444
  #
440
445
  def valor_iof_formatado(tamanho = 13)
441
- BrBoleto::Helper::Number.new(valor_iof).formata_valor_monetario(tamanho)
446
+ BrBoleto::Helper::Number.new(valor_iof).formata_valor_monetario(tamanho)
442
447
  end
443
448
 
444
449
  # Formata o campo valor do IOF
@@ -447,7 +452,7 @@ module BrBoleto
447
452
  # quantidade de caracteres a ser retornado
448
453
  # CNAB: 240 e 400
449
454
  def valor_abatimento_formatado(tamanho = 13)
450
- BrBoleto::Helper::Number.new(valor_abatimento).formata_valor_monetario(tamanho)
455
+ BrBoleto::Helper::Number.new(valor_abatimento).formata_valor_monetario(tamanho)
451
456
  end
452
457
 
453
458
  # Formata o valor percentual da multa
@@ -458,7 +463,7 @@ module BrBoleto
458
463
  def percentual_multa_formatado(tamanho = 6)
459
464
  BrBoleto::Helper::Number.new(percentual_multa).formata_valor_percentual(tamanho).adjust_size_to(tamanho, '0')
460
465
  end
461
-
466
+
462
467
  # Formata o valor percentual do juros
463
468
  # Ex:
464
469
  # 2.5% = 2.5 = 025000
@@ -468,7 +473,7 @@ module BrBoleto
468
473
  BrBoleto::Helper::Number.new(percentual_juros).formata_valor_percentual(tamanho).adjust_size_to(tamanho, '0')
469
474
  end
470
475
 
471
-
476
+
472
477
  private
473
478
 
474
479
  def formata_data(value, formato="%d%m%Y")
@@ -4,11 +4,11 @@ module BrBoleto
4
4
  module Cnab400
5
5
  class Sicredi < BrBoleto::Retorno::Cnab400::Base
6
6
  private
7
- # O valor da posição que representa o nosso_numero está
7
+ # O valor da posição que representa o nosso_numero está
8
8
  # subdividido em várias partes para o sicredi.
9
9
  #
10
10
  # Nosso Numero (Posição 048 a 062) conforme exemplo informações abaixo:
11
- # - Ano - 02 posições (48 a 49) - Ano Atual
11
+ # - Ano - 02 posições (48 a 49) - Ano Atual
12
12
  # - Byte Idt. - 01 posições (50 a 50) - Byte de identificação
13
13
  # - Número Seq. - 05 posições (51 a 55) - Número sequencial
14
14
  # - DV nosso num. - 01 posição (56 a 56) - Dígito verificador nosso número
@@ -28,6 +28,7 @@ module BrBoleto
28
28
  codigo_pagador_associado: 20..24,
29
29
  nosso_numero_sem_dv: 48..55,
30
30
  nosso_numero_dv: 56,
31
+ codigo_ocorrencia_retorno: 109..110,
31
32
  data_ocorrencia: 111..116,
32
33
  data_ocorrencia_sacado: 111..116,
33
34
  numero_documento: 117..126,
@@ -2,7 +2,7 @@ module BrBoleto
2
2
  module Version
3
3
  MAJOR = 2 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
4
4
  MINOR = 2 #inclui novas funcionalidades, sem quebrar APIs existentes
5
- PATCH = 7 #corrige bugs ou traz melhorias em implementações já existentes
5
+ PATCH = 8 #corrige bugs ou traz melhorias em implementações já existentes
6
6
  CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -72,7 +72,7 @@ describe BrBoleto::Conta::Sicredi do
72
72
  must_be_message_error(:posto, :custom_length_maximum, {count: 2})
73
73
  subject.posto = '12'
74
74
  wont_be_message_error(:posto, :custom_length_maximum, {count: 2})
75
- end
75
+ end
76
76
  context 'Validações padrões do byte_id' do
77
77
  subject { BrBoleto::Conta::Sicredi.new }
78
78
  it { must validate_presence_of(:byte_id) }
@@ -120,7 +120,7 @@ describe BrBoleto::Conta::Sicredi do
120
120
  subject.posto = 4
121
121
  subject.posto.must_equal '04'
122
122
  end
123
- end
123
+ end
124
124
  describe '#byte_id' do
125
125
  it "deve ajustar valor para 1 digito" do
126
126
  subject.byte_id = 4
@@ -130,15 +130,15 @@ describe BrBoleto::Conta::Sicredi do
130
130
 
131
131
  describe "#equivalent_especie_titulo_240" do
132
132
  context "CÓDIGOS para o cnab 240 do Sicredi" do
133
- it { subject.get_especie_titulo('01', 240).must_equal '03' } # Duplicata Mercantil por Indicação (DMI)
133
+ it { subject.get_especie_titulo('01', 240).must_equal '99' } # Cheque >> Outros
134
134
  it { subject.get_especie_titulo('02', 240).must_equal '03' } # Duplicata Mercantil por Indicação (DMI)
135
135
  end
136
136
  end
137
137
 
138
138
  describe "#equivalent_especie_titulo_400" do
139
139
  context "CÓDIGOS para o cnab 400 do Sicredi" do
140
- it { subject.get_especie_titulo('01', 400).must_equal 'A' }
141
- it { subject.get_especie_titulo('02', 400).must_equal 'A' }
140
+ it { subject.get_especie_titulo('01', 400).must_equal 'A' }
141
+ it { subject.get_especie_titulo('02', 400).must_equal 'A' }
142
142
  it { subject.get_especie_titulo('03', 400).must_equal 'A' } # Duplicata Mercantil por Indicação (DMI)
143
143
  it { subject.get_especie_titulo('06', 400).must_equal 'B' } # Duplicata Rural (DR)
144
144
  it { subject.get_especie_titulo('12', 400).must_equal 'C' } # Nota Promissória (NP)
@@ -156,10 +156,10 @@ describe BrBoleto::Conta::Sicredi do
156
156
  describe "#equivalent_tipo_cobranca_400" do
157
157
  it { subject.get_tipo_cobranca('1', 400).must_equal 'A' } # Cobrança Simples
158
158
  end
159
-
159
+
160
160
  describe "#equivalent_tipo_impressao_400" do
161
161
  it { subject.get_tipo_impressao('1', 400).must_equal 'A' } # Frente do Bloqueto
162
- end
162
+ end
163
163
 
164
164
  describe "#equivalent_identificacao_emissao_400" do
165
165
  it { subject.get_identificacao_emissao('1', 400).must_equal 'A' } # Impressão é feita pelo Sicredi
@@ -2,8 +2,8 @@ require 'test_helper'
2
2
 
3
3
  describe BrBoleto::Remessa::Cnab240::Caixa do
4
4
  subject { FactoryGirl.build(:remessa_cnab240_caixa, lotes: lote) }
5
- let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
6
- let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
5
+ let(:pagamento) { FactoryGirl.build(:remessa_pagamento, valor_documento: 879.66) }
6
+ let(:lote) { FactoryGirl.build(:remessa_lote, pagamentos: pagamento) }
7
7
 
8
8
  it "deve herdar da class Base" do
9
9
  subject.class.superclass.must_equal BrBoleto::Remessa::Cnab240::Base
@@ -58,7 +58,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
58
58
  subject.conta.versao_aplicativo = '1234567890123456'
59
59
  conta_must_be_msg_error(:versao_aplicativo, :custom_length_maximum, {count: 4})
60
60
  end
61
-
61
+
62
62
  private
63
63
 
64
64
  def conta_must_be_msg_error(attr_validation, msg_key, options_msg={})
@@ -86,7 +86,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
86
86
  subject.convenio_lote(lote).size.must_equal 20
87
87
  end
88
88
  end
89
-
89
+
90
90
 
91
91
  describe "#informacoes_da_conta" do
92
92
  it "deve ter 20 posições" do
@@ -96,7 +96,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
96
96
  it "1 - Primeira parte = agencia 5 posicoes - ajustados com zeros a esquerda" do
97
97
  subject.conta.agencia = '123'
98
98
  subject.informacoes_da_conta[0..4].must_equal '00123'
99
-
99
+
100
100
  subject.conta.agencia = '1234'
101
101
  subject.informacoes_da_conta[0..4].must_equal '01234'
102
102
  end
@@ -109,13 +109,13 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
109
109
  it "3 - Terceira parte = convenio 6 posicoes - ajustados com zeros a esquerda" do
110
110
  subject.conta.convenio = '123'
111
111
  subject.informacoes_da_conta[6..11].must_equal '000123'
112
-
112
+
113
113
  subject.conta.convenio = '1234'
114
114
  subject.informacoes_da_conta[6..11].must_equal '001234'
115
115
  end
116
116
 
117
117
  it "4 - Quarta parte = Modelo personalizado - Deve ter 7 zeros" do
118
- subject.informacoes_da_conta[12..18].must_equal('0000000')
118
+ subject.informacoes_da_conta[12..18].must_equal('0000000')
119
119
  end
120
120
 
121
121
  it "5 - Quinta parte = Exclusivo caixa - Deve ter 1 zero" do
@@ -131,7 +131,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
131
131
  it "1 - Primeira parte = versao_aplicativo 4 posicoes - ajustados com zeros a esquerda" do
132
132
  subject.conta.versao_aplicativo = '12'
133
133
  subject.complemento_header_arquivo[0..3].must_equal '0012'
134
-
134
+
135
135
  subject.conta.versao_aplicativo = '123'
136
136
  subject.complemento_header_arquivo[0..3].must_equal '0123'
137
137
  end
@@ -150,18 +150,18 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
150
150
  it "1 - Primeira parte = convenio com 6 posicoes - ajustados com zeros a esquerda" do
151
151
  subject.conta.convenio = '12'
152
152
  subject.complemento_p(pagamento)[0..5].must_equal '000012'
153
-
153
+
154
154
  subject.conta.convenio = '123'
155
155
  subject.complemento_p(pagamento)[0..5].must_equal '000123'
156
156
  end
157
-
157
+
158
158
  it "2 - Seguna parte = Uso Caixa com 11 posicoes com zeros" do
159
159
  subject.complemento_p(pagamento)[6..16].must_equal '0' * 11
160
160
  end
161
161
 
162
162
  it "3 - Terceira parte = Modalidade carteira com 2 posicoes" do
163
163
  subject.conta.carteira = '14'
164
- subject.complemento_p(pagamento)[17..18].must_equal '14'
164
+ subject.complemento_p(pagamento)[17..18].must_equal '14'
165
165
  subject.conta.carteira = 'XX'
166
166
  subject.complemento_p(pagamento)[17..18].must_equal 'XX'
167
167
  end
@@ -171,7 +171,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
171
171
  subject.complemento_p(pagamento)[19..34].must_equal '000001234567890'
172
172
  pagamento.nosso_numero = '1234567890123'
173
173
  subject.complemento_p(pagamento)[19..34].must_equal '001234567890123'
174
- end
174
+ end
175
175
  end
176
176
 
177
177
  describe "#segmento_p_numero_do_documento" do
@@ -182,7 +182,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
182
182
  it "1 - Primeira parte = Nr Doc. cobrança com 11 posicoes - ajustados com zeros a esquerda" do
183
183
  pagamento.numero_documento = '123456789'
184
184
  subject.segmento_p_numero_do_documento(pagamento)[0..10].must_equal '00123456789'
185
-
185
+
186
186
  pagamento.numero_documento = '1234567890'
187
187
  subject.segmento_p_numero_do_documento(pagamento)[0..10].must_equal '01234567890'
188
188
  end
@@ -241,7 +241,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
241
241
  end
242
242
 
243
243
  describe 'Geração do arquivo' do
244
- let(:conta) do
244
+ let(:conta) do
245
245
  {
246
246
  razao_social: 'EMPRESA EMITENTE',
247
247
  cpf_cnpj: '33.486.451/0001-30',
@@ -249,9 +249,9 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
249
249
  agencia: '7506',
250
250
  codigo_cedente: '828196',
251
251
  conta_corrente: '1354843'
252
- }
252
+ }
253
253
  end
254
- let(:pagador) {
254
+ let(:pagador) {
255
255
  {
256
256
  nome: 'Benjamin Francisco Marcos Vinicius Fernandes',
257
257
  cpf_cnpj: '787.933.211-12',
@@ -262,7 +262,7 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
262
262
  uf: 'MS',
263
263
  }
264
264
  }
265
- let(:pagamento) {
265
+ let(:pagamento) {
266
266
  BrBoleto::Remessa::Pagamento.new({
267
267
  nosso_numero: '140000000000000029',
268
268
  numero_documento: '00000000002',
@@ -270,16 +270,17 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
270
270
  valor_documento: 10.00,
271
271
  pagador: pagador,
272
272
  especie_titulo: '02',
273
- codigo_juros: '0',
273
+ codigo_juros: '0',
274
274
  data_juros: Date.parse('16/11/2016'),
275
275
  valor_juros: 0.00,
276
- codigo_multa: '0',
276
+ codigo_multa: '0',
277
277
  data_multa: Date.parse('15/11/2016'),
278
278
  valor_multa: 0.00,
279
279
  data_emissao: Date.parse('14/11/2016'),
280
+ forma_cadastramento: '2'
280
281
  })
281
282
  }
282
- let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
283
+ let(:lote) { BrBoleto::Remessa::Lote.new(pagamentos: pagamento) }
283
284
  it "deve gerar o arquivo de remessa corretamente com as informações passadas" do
284
285
  remessa = BrBoleto::Remessa::Cnab240::Caixa.new({
285
286
  data_hora_arquivo: Time.parse('14/11/2016 09:31:47'),
@@ -287,7 +288,11 @@ describe BrBoleto::Remessa::Cnab240::Caixa do
287
288
  conta: conta,
288
289
  lotes: [lote],
289
290
  })
290
- remessa.dados_do_arquivo.must_equal read_fixture('remessa/cnab240/caixa.rem')
291
+ lines = read_fixture('remessa/cnab240/caixa.rem').split("\r\n")
292
+
293
+ remessa.dados_do_arquivo.split("\r\n").each_with_index do |l, i|
294
+ l.must_equal( lines[i], "A linha #{i+1} não é igual" )
295
+ end
291
296
  end
292
297
  end
293
298
  end