br_boleto 2.2.3 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml 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