br_boleto 2.2.3 → 2.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: eb0e64f3266b753466757dc9edab8bbcf595c95b
4
- data.tar.gz: 32673e61506c6363f45110cbc12fe1c42b080cd4
3
+ metadata.gz: 05cd136fdc280d0b850eeaa28d6005620d448a7b
4
+ data.tar.gz: 9b6ad1b838faa5e35ec6836121ad7fc3bb8791e3
5
5
  SHA512:
6
- metadata.gz: 2845f01fd1c0c3e52eba462083925e6070c1d4dbb4e9f788edb40ec92e45a7a3fb2e02cea0b86438106de4a8b8ee5334d371c6120c1f0d49571bb3810335a8bc
7
- data.tar.gz: e8974384f70e3b42758900906696bec80f79102aefb73c8c02b2163acd6f11fecc27762cce020d184e6044eeff7afc4171c330ea2fa0ffca737ea187f8f599bd
6
+ metadata.gz: d636ab8f752bee300f7445abbdbdeb85f88627de89b2a72e4e212656bf0694385924ea5c148fab528ef65fdf46a1545d2a3d7b9b2e38472247e93cb4d1c8eb2e
7
+ data.tar.gz: 8a360c1dfd33ad1a9ea42165121b32ba70c9467f0c91042c18af06e676a733a7e663ba085eb2ffce4bb8019570feafa8608f8cae5e49e6519f9ec970bb49add6
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- br_boleto (2.2.2)
4
+ br_boleto (2.2.4)
5
5
  activemodel (~> 4.2)
6
6
  activesupport (~> 4.2)
7
7
  rake (>= 0.8.7)
data/README.markdown CHANGED
@@ -345,7 +345,6 @@ pagamento = BrBoleto::Remessa::Pagamento.new({
345
345
  # ....
346
346
  },
347
347
  data_emissao: Date.today, # Valor default
348
- valor_mora: 0.0, # Valor default
349
348
  valor_desconto: 0.0, # Valor default
350
349
  valor_iof: 0.0, # Valor default
351
350
  valor_abatimento: 0.0, # Valor default
@@ -71,7 +71,6 @@ module BrBoleto
71
71
  end
72
72
  end
73
73
 
74
-
75
74
  # As carteiras de cobrança 107, 122, 142, 143, 196 e 198 são carteiras especiais, sem registro, na qual são utilizadas 15 posições
76
75
  # numéricas para identificação do título liquidado (8 do Nosso Número e 7 do Seu Número).
77
76
  #
@@ -184,7 +184,7 @@ module BrBoleto
184
184
  # Tamanho: 58
185
185
  def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
186
186
  detalhe = ''
187
- detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
187
+ detalhe << pagamento.valor_juros_monetario_formatado(13)
188
188
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
189
189
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
190
190
  detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
@@ -100,9 +100,9 @@ module BrBoleto
100
100
  end
101
101
  def detalhe_posicao_063_108(pagamento)
102
102
  info = ''.adjust_size_to(3, '0')
103
- if (pagamento.codigo_multa == 1 or pagamento.codigo_multa == 2)
103
+ if "#{pagamento.codigo_multa}".in?(%w[1 2])
104
104
  info << '2'
105
- info << (pagamento.percentual_multa_formatado(2)).adjust_size_to(4, '0') # tem multa: preencher com percentual da multa com 2 decimais
105
+ info << pagamento.percentual_multa_formatado(4) # tem multa: preencher com percentual da multa com 2 decimais
106
106
  else
107
107
  info << '0'
108
108
  info << ''.adjust_size_to(4, '0', :right) # sem multa: preencher com zeros.
@@ -184,7 +184,7 @@ module BrBoleto
184
184
  # Tamanho: 58
185
185
  def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
186
186
  detalhe = ''
187
- detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
187
+ detalhe << pagamento.valor_juros_monetario_formatado(13)
188
188
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
189
189
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
190
190
  detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
@@ -146,7 +146,7 @@ module BrBoleto
146
146
  # Tamanho: 58
147
147
  def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
148
148
  detalhe = ''
149
- detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
149
+ detalhe << pagamento.valor_juros_monetario_formatado(13)
150
150
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
151
151
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
152
152
  detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
@@ -134,7 +134,7 @@ module BrBoleto
134
134
  # Tamanho: 58
135
135
  def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
136
136
  detalhe = ''
137
- detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
137
+ detalhe << pagamento.valor_juros_monetario_formatado(13)
138
138
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
139
139
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
140
140
  detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
@@ -135,7 +135,7 @@ module BrBoleto
135
135
  # Tamanho: 58
136
136
  def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
137
137
  detalhe = ''
138
- detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
138
+ detalhe << pagamento.valor_juros_monetario_formatado(13)
139
139
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
140
140
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
141
141
  detalhe << "#{pagamento.valor_iof_formatado}".adjust_size_to(13,'0', :right )
@@ -206,7 +206,7 @@ module BrBoleto
206
206
  # Tamanho: 58
207
207
  def detalhe_multas_e_juros_do_pagamento(pagamento, sequencial)
208
208
  detalhe = ''
209
- detalhe << "#{pagamento.valor_mora_formatado}".adjust_size_to(13,'0', :right )
209
+ detalhe << pagamento.valor_juros_monetario_formatado(13)
210
210
  detalhe << "#{pagamento.data_desconto_formatado('%d%m%y')}".adjust_size_to(6,'0', :right )
211
211
  detalhe << "#{pagamento.valor_desconto_formatado}".adjust_size_to(13,'0', :right )
212
212
  detalhe << ''.adjust_size_to(13,'0')
@@ -46,11 +46,6 @@ module BrBoleto
46
46
  # <b>OPCIONAL</b>: codigo da 2a instrucao
47
47
  attr_accessor :cod_segunda_instrucao
48
48
 
49
- # <b>OPCIONAL</b>: valor da mora ao dia
50
- # Dependendo do banco será o valor percentual ou valor em reais
51
- # CNAB: 240 e 400
52
- attr_accessor :valor_mora
53
-
54
49
  # <b>OPCIONAL</b>: data limite para o desconto
55
50
  # CNAB: 240 e 400
56
51
  attr_accessor :data_desconto
@@ -82,9 +77,24 @@ module BrBoleto
82
77
  # - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
83
78
  attr_accessor :codigo_multa, :data_multa
84
79
  #CNAB 240 e 400
85
- attr_accessor :valor_multa # Valor R$
80
+ attr_accessor :valor_multa # Valor de acordo com o código da multa
86
81
  def percentual_multa # Valor % Ex: 2.5% = 2.5
87
- BrBoleto::Helper::Number.new(valor_multa).get_percent_by_total(valor_documento)
82
+ if codigo_multa.to_i == 1
83
+ BrBoleto::Helper::Number.new(valor_multa).get_percent_by_total(valor_documento)
84
+ elsif codigo_multa.to_i == 2
85
+ valor_multa.to_f
86
+ else
87
+ 0.0
88
+ end
89
+ end
90
+ def valor_multa_monetario # Valor da multa em R$
91
+ if codigo_multa.to_i == 1
92
+ valor_multa.to_f
93
+ elsif codigo_multa.to_i == 2
94
+ (valor_multa.to_f/100.0 * valor_documento.to_f).round(4)
95
+ else
96
+ 0.0
97
+ end
88
98
  end
89
99
 
90
100
  # <b>OPCIONAL</b>: Informações para Juros
@@ -94,10 +104,30 @@ module BrBoleto
94
104
  # - '3' Isento
95
105
  # - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
96
106
  attr_accessor :codigo_juros, :data_juros
97
- attr_accessor :valor_juros # Valor R$
98
- # É calculado em base no valor do juros
107
+ attr_accessor :valor_juros # Valor de acordo com o código da multa
108
+
109
+ # Cálculo para saber a taxa de juros % ao mês.
110
+ # É efetuado o calculo apenas quando o codigo de juros for setado
111
+ # com 1, na qual significa que foi setado o valor R$ diário.
112
+ # Esse método sempre deve retornar o percentual de juros MENSAL
113
+ #
99
114
  def percentual_juros # Valor % Ex: 2.5% = 2.5
100
- BrBoleto::Helper::Number.new(valor_juros).get_percent_by_total(valor_documento)
115
+ if codigo_juros.to_i == 1
116
+ (valor_juros.to_f*30/valor_documento.to_f*100).to_f.round(2)
117
+ elsif codigo_juros.to_i == 2
118
+ valor_juros.to_f
119
+ else
120
+ 0.0
121
+ end
122
+ end
123
+ def valor_juros_monetario # Valor da juros em R$ cobrado ao dia
124
+ if codigo_juros.to_i == 1
125
+ valor_juros.to_f
126
+ elsif codigo_juros.to_i == 2
127
+ (valor_juros.to_f/100.0 * valor_documento.to_f / 30).round(4)
128
+ else
129
+ 0.0
130
+ end
101
131
  end
102
132
 
103
133
  # <b>OPCIONAL</b>: Número da parquela que o pagamento representa
@@ -286,7 +316,6 @@ module BrBoleto
286
316
  def default_values
287
317
  {
288
318
  data_emissao: Date.today,
289
- valor_mora: 0.0,
290
319
  valor_desconto: 0.0,
291
320
  valor_iof: 0.0,
292
321
  valor_abatimento: 0.0,
@@ -361,13 +390,26 @@ module BrBoleto
361
390
  BrBoleto::Helper::Number.new(valor_documento).formata_valor_monetario(tamanho)
362
391
  end
363
392
 
364
- # Formata o campo valor da mora
393
+ # Formata o campo valor_juros_monetario
394
+ # referentes as casas decimais
395
+ # exe. R$199,90 => 0000000019990
396
+ #
397
+ # @param tamanho [Integer]
398
+ # quantidade de caracteres a ser retornado
399
+ #
400
+ def valor_juros_monetario_formatado(tamanho = 13)
401
+ BrBoleto::Helper::Number.new(valor_juros_monetario).formata_valor_monetario(tamanho)
402
+ end
403
+
404
+ # Formata o campo valor_multa_monetario
405
+ # referentes as casas decimais
406
+ # exe. R$199,90 => 0000000019990
365
407
  #
366
408
  # @param tamanho [Integer]
367
409
  # quantidade de caracteres a ser retornado
368
410
  #
369
- def valor_mora_formatado(tamanho = 13)
370
- BrBoleto::Helper::Number.new(valor_mora).formata_valor_monetario(tamanho)
411
+ def valor_multa_monetario_formatado(tamanho = 13)
412
+ BrBoleto::Helper::Number.new(valor_multa_monetario).formata_valor_monetario(tamanho)
371
413
  end
372
414
 
373
415
  # Formata o campo valor dos descontos
@@ -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 = 3 #corrige bugs ou traz melhorias em implementações já existentes
5
+ PATCH = 4 #corrige bugs ou traz melhorias em implementações já existentes
6
6
  CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
7
7
  end
8
8
  end
@@ -67,7 +67,6 @@ en:
67
67
  tipo_impressao: Tipo de impressão
68
68
  cod_primeira_instrucao: Cód. 1ª instrução
69
69
  cod_segunda_instrucao: Cód. 2ª instrução
70
- valor_mora: Valor mora
71
70
  data_desconto: Data do desconto
72
71
  valor_desconto: Valor de desconto
73
72
  cod_desconto: Código de desconto
@@ -67,7 +67,6 @@ pt-BR:
67
67
  tipo_impressao: Tipo de impressão
68
68
  cod_primeira_instrucao: Cód. 1ª instrução
69
69
  cod_segunda_instrucao: Cód. 2ª instrução
70
- valor_mora: Valor mora
71
70
  data_desconto: Data do desconto
72
71
  valor_desconto: Valor de desconto
73
72
  cod_desconto: Código de desconto
@@ -176,7 +176,7 @@ describe BrBoleto::Remessa::Cnab400::BancoBrasil do
176
176
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
177
177
  end
178
178
  it "deve conter as informações nas posições corretas" do
179
- pagamento.valor_mora = '0.39'
179
+ pagamento.valor_juros = '0.39'
180
180
  pagamento.valor_iof = '2.7'
181
181
  pagamento.data_desconto = Date.parse('21/03/2018')
182
182
  pagamento.valor_desconto = 4.3
@@ -70,7 +70,7 @@ describe BrBoleto::Remessa::Cnab400::Bradesco do
70
70
  subject.detalhe_posicao_063_108(pagamento).size.must_equal 46
71
71
  end
72
72
  it "deve conter as informações nas posições corretas" do
73
- pagamento.assign_attributes(tipo_emissao: 2)
73
+ pagamento.assign_attributes(tipo_emissao: 2, codigo_multa: 0)
74
74
  result = subject.detalhe_posicao_063_108(pagamento)
75
75
 
76
76
  result[0..2].must_equal '000'
@@ -84,6 +84,18 @@ describe BrBoleto::Remessa::Cnab400::Bradesco do
84
84
 
85
85
  result.size.must_equal 46
86
86
  end
87
+ it "Quando houver multa porém foi setado com o codigo_multa 1 - deve sempre setar o valor percentual da multa e o codigo 2" do
88
+ pagamento.assign_attributes(codigo_multa: '1', valor_multa: 7.47, valor_documento: 78.98)
89
+ result = subject.detalhe_posicao_063_108(pagamento)
90
+ result[3].must_equal '2' # Identificativos de Multa
91
+ result[4..7].must_equal '0946' # Percentual de Multa por Atraso
92
+ end
93
+ it "Quando houver multa porém foi setado com o codigo_multa 2 - deve sempre setar o valor percentual da multa e o codigo 2" do
94
+ pagamento.assign_attributes(codigo_multa: '2', valor_multa: 7.47, valor_documento: 78.98)
95
+ result = subject.detalhe_posicao_063_108(pagamento)
96
+ result[3].must_equal '2' # Identificativos de Multa
97
+ result[4..7].must_equal '0747' # Percentual de Multa por Atraso
98
+ end
87
99
  end
88
100
 
89
101
  describe '#informacoes_do_pagamento' do
@@ -118,7 +130,7 @@ describe BrBoleto::Remessa::Cnab400::Bradesco do
118
130
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
119
131
  end
120
132
  it "deve conter as informações nas posições corretas" do
121
- pagamento.valor_mora = '0.39'
133
+ pagamento.valor_juros = '0.39'
122
134
  pagamento.valor_iof = '2.7'
123
135
  pagamento.data_desconto = Date.parse('21/03/2018')
124
136
  pagamento.valor_desconto = 4.3
@@ -123,7 +123,7 @@ describe BrBoleto::Remessa::Cnab400::Caixa do
123
123
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
124
124
  end
125
125
  it "deve conter as informações nas posições corretas" do
126
- pagamento.valor_mora = '0.39'
126
+ pagamento.valor_juros = '0.39'
127
127
  pagamento.valor_iof = '2.7'
128
128
  pagamento.data_desconto = Date.parse('21/03/2018')
129
129
  pagamento.valor_desconto = 4.3
@@ -116,7 +116,7 @@ describe BrBoleto::Remessa::Cnab400::Itau do
116
116
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
117
117
  end
118
118
  it "deve conter as informações nas posições corretas" do
119
- pagamento.valor_mora = '0.39'
119
+ pagamento.valor_juros = '0.39'
120
120
  pagamento.valor_iof = '2.7'
121
121
  pagamento.data_desconto = Date.parse('21/03/2018')
122
122
  pagamento.valor_desconto = 4.3
@@ -116,7 +116,7 @@ describe BrBoleto::Remessa::Cnab400::Santander do
116
116
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
117
117
  end
118
118
  it "deve conter as informações nas posições corretas" do
119
- pagamento.valor_mora = '0.39'
119
+ pagamento.valor_juros = '0.39'
120
120
  pagamento.valor_iof = '2.7'
121
121
  pagamento.data_desconto = Date.parse('21/03/2018')
122
122
  pagamento.valor_desconto = 4.3
@@ -170,7 +170,7 @@ describe BrBoleto::Remessa::Cnab400::Sicredi do
170
170
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
171
171
  end
172
172
  it "deve conter as informações nas posições corretas" do
173
- pagamento.valor_mora = '0.39'
173
+ pagamento.valor_juros = '0.39'
174
174
  pagamento.data_desconto = Date.parse('21/03/2018')
175
175
  pagamento.valor_desconto = 4.3
176
176
  pagamento.valor_abatimento = 56.47
@@ -124,7 +124,7 @@ describe BrBoleto::Remessa::Cnab400::Unicred do
124
124
  subject.detalhe_multas_e_juros_do_pagamento(pagamento, 2).size.must_equal 58
125
125
  end
126
126
  it "deve conter as informações nas posições corretas" do
127
- pagamento.valor_mora = '0.39'
127
+ pagamento.valor_juros = '0.39'
128
128
  pagamento.valor_iof = '2.7'
129
129
  pagamento.data_desconto = Date.parse('21/03/2018')
130
130
  pagamento.valor_desconto = 4.3
@@ -56,32 +56,106 @@ describe BrBoleto::Remessa::Pagamento do
56
56
  end
57
57
 
58
58
  describe "#percentual_multa" do
59
- it "deve retornar o percentual representativo do valor_multa para o valor_documento utilizando" do
60
- subject.assign_attributes(valor_multa: 7.47, valor_documento: 78.98)
59
+ it "Quando o codigo_multa for 1, então deve calcular o percentual de multa pois o valor_multa representa o valor em R$" do
60
+ subject.assign_attributes(codigo_multa: '1', valor_multa: 7.47, valor_documento: 78.98)
61
61
  subject.percentual_multa.must_equal 9.458091
62
+
63
+ subject.assign_attributes(codigo_multa: 1, valor_multa: 8.5, valor_documento: 90.0)
64
+ subject.percentual_multa.must_equal 9.444444
65
+ end
66
+
67
+ it "Quando o codigo_multa for 2, então deve retornar o próprio valor que está em valor_multa, pois representa o valor em %" do
68
+ subject.assign_attributes(codigo_multa: '2', valor_multa: 7.47, valor_documento: 78.98)
69
+ subject.percentual_multa.must_equal 7.47
70
+
71
+ subject.assign_attributes(codigo_multa: 2, valor_multa: 8.5, valor_documento: 90.0)
72
+ subject.percentual_multa.must_equal 8.5
73
+ end
74
+
75
+ it "Quando o codigo_multa for 0 ou 3, então deve retornar zero, pois não tem multa" do
76
+ subject.assign_attributes(codigo_multa: '0', valor_multa: 7.47, valor_documento: 78.98)
77
+ subject.percentual_multa.must_equal 0
78
+
79
+ subject.assign_attributes(codigo_multa: 3, valor_multa: 8.5, valor_documento: 90.0)
80
+ subject.percentual_multa.must_equal 0
62
81
  end
63
- it "deve utilizar o metodo get_percent_by_total de Helper::Number para gerar o percentual" do
64
- subject.assign_attributes(valor_multa: 8.47, valor_documento: 100.00)
65
- numero = BrBoleto::Helper::Number.new(50.0)
66
- BrBoleto::Helper::Number.expects(:new).returns(numero)
67
- numero.expects(:get_percent_by_total).with(100.00).returns(10.47)
82
+ end
83
+
84
+ describe "#valor_multa_monetario" do
85
+ it "Quando o codigo_multa for 1, então deve retornar o próprio valor que está em valor_multa, pois representa o valor em R$" do
86
+ subject.assign_attributes(codigo_multa: '1', valor_multa: 7.47, valor_documento: 78.98)
87
+ subject.valor_multa_monetario.must_equal 7.47
88
+
89
+ subject.assign_attributes(codigo_multa: 1, valor_multa: 8.5, valor_documento: 90.0)
90
+ subject.valor_multa_monetario.must_equal 8.5
91
+ end
92
+
93
+ it "Quando o codigo_multa for 2, então deve calcular o valor de multa pois o valor_multa representa o valor em %" do
94
+ subject.assign_attributes(codigo_multa: '2', valor_multa: 7.47, valor_documento: 78.98)
95
+ subject.valor_multa_monetario.must_equal 5.8998
96
+
97
+ subject.assign_attributes(codigo_multa: 2, valor_multa: 8.5, valor_documento: 90.0)
98
+ subject.valor_multa_monetario.must_equal 7.65
99
+ end
100
+
101
+ it "Quando o codigo_multa for 0 ou 3, então deve retornar zero, pois não tem multa" do
102
+ subject.assign_attributes(codigo_multa: '0', valor_multa: 7.47, valor_documento: 78.98)
103
+ subject.valor_multa_monetario.must_equal 0
104
+
105
+ subject.assign_attributes(codigo_multa: 3, valor_multa: 8.5, valor_documento: 90.0)
106
+ subject.valor_multa_monetario.must_equal 0
107
+ end
108
+ end
109
+
110
+ describe "#percentual_juros -> Deve retornar a taxa de juros mensal" do
111
+ it "Quando o codigo_juros for 1, então deve calcular o percentual de juros pois o valor_juros representa o valor em R$" do
112
+ subject.assign_attributes(codigo_juros: '1', valor_juros: 0.9, valor_documento: 78.98)
113
+ subject.percentual_juros.must_equal 34.19
114
+
115
+ subject.assign_attributes(codigo_juros: 1, valor_juros: 0.0153, valor_documento: 90.0)
116
+ subject.percentual_juros.must_equal 0.51
117
+ end
118
+
119
+ it "Quando o codigo_juros for 2, então deve retornar o próprio valor que está em valor_juros, pois representa o valor em %" do
120
+ subject.assign_attributes(codigo_juros: '2', valor_juros: 7.47, valor_documento: 78.98)
121
+ subject.percentual_juros.must_equal 7.47
122
+
123
+ subject.assign_attributes(codigo_juros: 2, valor_juros: 8.5, valor_documento: 90.0)
124
+ subject.percentual_juros.must_equal 8.5
125
+ end
126
+
127
+ it "Quando o codigo_juros for 0 ou 3, então deve retornar zero, pois não tem juros" do
128
+ subject.assign_attributes(codigo_juros: '0', valor_juros: 7.47, valor_documento: 78.98)
129
+ subject.percentual_juros.must_equal 0
68
130
 
69
- subject.percentual_multa.must_equal 10.47
131
+ subject.assign_attributes(codigo_juros: 3, valor_juros: 8.5, valor_documento: 90.0)
132
+ subject.percentual_juros.must_equal 0
70
133
  end
71
134
  end
72
135
 
73
- describe "#percentual_juros" do
74
- it "deve retornar o percentual representativo do valor_juros para o valor_documento utilizando" do
75
- subject.assign_attributes(valor_juros: 7.47, valor_documento: 78.98)
76
- subject.percentual_juros.must_equal 9.458091
136
+ describe "#valor_juros_monetario -> Deve retornar o valor do juros cobrado por dia" do
137
+ it "Quando o codigo_juros for 1, então deve retornar o próprio valor que está em valor_juros, pois representa o valor em R$" do
138
+ subject.assign_attributes(codigo_juros: '1', valor_juros: 1.0, valor_documento: 78.98)
139
+ subject.valor_juros_monetario.must_equal 1.0
140
+
141
+ subject.assign_attributes(codigo_juros: 1, valor_juros: 0.50, valor_documento: 90.0)
142
+ subject.valor_juros_monetario.must_equal 0.50
77
143
  end
78
- it "deve utilizar o metodo get_percent_by_total de Helper::Number para gerar o percentual" do
79
- subject.assign_attributes(valor_juros: 8.47, valor_documento: 100.00)
80
- numero = BrBoleto::Helper::Number.new(50.0)
81
- BrBoleto::Helper::Number.expects(:new).returns(numero)
82
- numero.expects(:get_percent_by_total).with(100.00).returns(10.47)
83
144
 
84
- subject.percentual_juros.must_equal 10.47
145
+ it "Quando o codigo_juros for 2, então deve calcular o valor de juros por 30 dias pois o valor_juros representa o valor em %" do
146
+ subject.assign_attributes(codigo_juros: '2', valor_juros: 7.47, valor_documento: 78.98)
147
+ subject.valor_juros_monetario.must_equal 0.1967
148
+
149
+ subject.assign_attributes(codigo_juros: 2, valor_juros: 8.5, valor_documento: 90.0)
150
+ subject.valor_juros_monetario.must_equal 0.255
151
+ end
152
+
153
+ it "Quando o codigo_juros for 0 ou 3, então deve retornar zero, pois não tem juros" do
154
+ subject.assign_attributes(codigo_juros: '0', valor_juros: 7.47, valor_documento: 78.98)
155
+ subject.valor_juros_monetario.must_equal 0
156
+
157
+ subject.assign_attributes(codigo_juros: 3, valor_juros: 8.5, valor_documento: 90.0)
158
+ subject.valor_juros_monetario.must_equal 0
85
159
  end
86
160
  end
87
161
 
@@ -118,7 +192,6 @@ describe BrBoleto::Remessa::Pagamento do
118
192
  describe "default_values" do
119
193
  let(:object) { subject.class.new() }
120
194
  it "for data_emissao" do object.data_emissao.must_equal Date.today end
121
- it "for valor_mora" do object.valor_mora.must_equal 0.0 end
122
195
  it "for valor_desconto" do object.valor_desconto.must_equal 0.0 end
123
196
  it "for valor_iof" do object.valor_iof.must_equal 0.0 end
124
197
  it "for valor_abatimento" do object.valor_abatimento.must_equal 0.0 end
@@ -233,6 +306,20 @@ describe BrBoleto::Remessa::Pagamento do
233
306
  end
234
307
  end
235
308
  end
309
+ describe "#valor_multa_monetario_formatado" do
310
+ context "com padrao de tamanho = 13 digitos" do
311
+ it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
312
+ subject.stubs(:valor_multa_monetario).returns 7856.888
313
+ subject.valor_multa_monetario_formatado.must_equal "0000000785689"
314
+ end
315
+ end
316
+ context "passando a quantidade de digitos" do
317
+ it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
318
+ subject.stubs(:valor_multa_monetario).returns 6.888
319
+ subject.valor_multa_monetario_formatado(4).must_equal "0689"
320
+ end
321
+ end
322
+ end
236
323
 
237
324
  describe "#data_juros_formatado" do
238
325
  it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
@@ -260,33 +347,32 @@ describe BrBoleto::Remessa::Pagamento do
260
347
  end
261
348
  end
262
349
  end
263
-
264
- describe "#valor_documento_formatado" do
350
+ describe "#valor_juros_monetario_formatado" do
265
351
  context "com padrao de tamanho = 13 digitos" do
266
352
  it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
267
- subject.valor_documento = 7856.888
268
- subject.valor_documento_formatado.must_equal "0000000785689"
353
+ subject.stubs(:valor_juros_monetario).returns 7856.888
354
+ subject.valor_juros_monetario_formatado.must_equal "0000000785689"
269
355
  end
270
356
  end
271
357
  context "passando a quantidade de digitos" do
272
358
  it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
273
- subject.valor_documento = 7856.888
274
- subject.valor_documento_formatado(10).must_equal "0000785689"
359
+ subject.stubs(:valor_juros_monetario).returns 6.888
360
+ subject.valor_juros_monetario_formatado(4).must_equal "0689"
275
361
  end
276
362
  end
277
363
  end
278
364
 
279
- describe "#valor_mora_formatado" do
365
+ describe "#valor_documento_formatado" do
280
366
  context "com padrao de tamanho = 13 digitos" do
281
367
  it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
282
- subject.valor_mora = 7856.123
283
- subject.valor_mora_formatado.must_equal "0000000785612"
368
+ subject.valor_documento = 7856.888
369
+ subject.valor_documento_formatado.must_equal "0000000785689"
284
370
  end
285
371
  end
286
372
  context "passando a quantidade de digitos" do
287
373
  it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
288
- subject.valor_mora = 7856.123
289
- subject.valor_mora_formatado(10).must_equal "0000785612"
374
+ subject.valor_documento = 7856.888
375
+ subject.valor_documento_formatado(10).must_equal "0000785689"
290
376
  end
291
377
  end
292
378
  end
@@ -7,6 +7,7 @@ FactoryGirl.define do
7
7
  data_vencimento { Date.tomorrow }
8
8
  valor_documento 100.123
9
9
  pagador { FactoryGirl.build(:pagador) }
10
+ codigo_juros '1'
10
11
  # documento_sacado "12345678901"
11
12
  # nome_sacado "TESTE NOME DO SACADO"
12
13
  # endereco_sacado "R. TESTE DO SACADO"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: br_boleto
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.3
4
+ version: 2.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno M. Mergen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-27 00:00:00.000000000 Z
11
+ date: 2017-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake