br_boleto 2.2.7 → 2.2.8

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.
@@ -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