br_boleto 1.1.0 → 1.2.0
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 +4 -4
- data/Gemfile.lock +2 -2
- data/lib/br_boleto/boleto/base.rb +1 -1
- data/lib/br_boleto/remessa/cnab240/helper/segmento_p.rb +12 -10
- data/lib/br_boleto/remessa/cnab240/helper/segmento_r.rb +4 -2
- data/lib/br_boleto/remessa/cnab240/sicoob.rb +20 -0
- data/lib/br_boleto/remessa/pagamento.rb +28 -5
- data/lib/br_boleto/retorno/base.rb +5 -2
- data/lib/br_boleto/retorno/cnab240/base.rb +1 -1
- data/lib/br_boleto/retorno/cnab240/caixa.rb +1 -1
- data/lib/br_boleto/retorno/pagamento.rb +1 -1
- data/lib/br_boleto/version.rb +1 -1
- data/test/br_boleto/remessa/cnab240/helper/segmento_p_test.rb +27 -9
- data/test/br_boleto/remessa/cnab240/helper/segmento_r_test.rb +19 -3
- data/test/br_boleto/remessa/cnab240/sicoob_test.rb +60 -0
- data/test/br_boleto/remessa/pagamento_test.rb +76 -27
- data/test/br_boleto/retorno/base_test.rb +56 -0
- data/test/br_boleto/retorno/cnab240/base_test.rb +5 -5
- data/test/br_boleto/retorno/cnab240/caixa_test.rb +5 -5
- data/test/br_boleto/retorno/cnab240/sicoob_test.rb +5 -5
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c23f145793fa7683757f64d8822bd162803073a8
|
4
|
+
data.tar.gz: 57ac3e5eafd318cff087adb25108d8e52e27274c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d083be674718a0d071a4ebde9b03f47d4c5618e75472f860f031a75a30b8ab5203240e8ddbdcc30654dab82d1c6f4754c7c7c904d9113057e630a66ff8373e0
|
7
|
+
data.tar.gz: e61cd111a5cf08b05d6d798490ec0a42ea5fcb84c463a6b9a68dd81ad105053bca670af57ca6e3b990693d796a2f2189a38e596eca1e43b2930b59cef1e33428
|
data/Gemfile.lock
CHANGED
@@ -16,7 +16,7 @@ module BrBoleto
|
|
16
16
|
# Alguns bancos, dependendo do banco e da carteira, precisam desse campo preenchido.
|
17
17
|
# Em compensação, outros bancos (a minoria) não fazem utilização desse campo.
|
18
18
|
#
|
19
|
-
attr_accessor :codigo_cedente
|
19
|
+
attr_accessor :codigo_cedente # com DV
|
20
20
|
|
21
21
|
# Código do beneficiário e codigo cedente é a mesma coisa
|
22
22
|
# Por isso foi criado um alias para que cada um utilize a nomenclatura que preferir.
|
@@ -39,11 +39,11 @@ module BrBoleto
|
|
39
39
|
segmento_p << segmento_p_posicao_101_a_105 # agencia cobradora 5
|
40
40
|
segmento_p << segmento_p_posicao_106_a_106 # dv agencia cobradora 1
|
41
41
|
segmento_p << segmento_p_posicao_107_a_108 # especie do titulo 2
|
42
|
-
segmento_p << segmento_p_posicao_109_a_109
|
42
|
+
segmento_p << segmento_p_posicao_109_a_109 # aceite 1
|
43
43
|
segmento_p << segmento_p_posicao_110_a_117(pagamento) # data de emissao titulo 8
|
44
|
-
segmento_p << segmento_p_posicao_118_a_118
|
45
|
-
segmento_p << segmento_p_posicao_119_a_126
|
46
|
-
segmento_p << segmento_p_posicao_127_a_141
|
44
|
+
segmento_p << segmento_p_posicao_118_a_118(pagamento) # cod. do juros 1 *
|
45
|
+
segmento_p << segmento_p_posicao_119_a_126(pagamento) # data juros 8 *
|
46
|
+
segmento_p << segmento_p_posicao_127_a_141(pagamento) # valor juros 15 *
|
47
47
|
segmento_p << segmento_p_posicao_142_a_142(pagamento) # cod. do desconto 1
|
48
48
|
segmento_p << segmento_p_posicao_143_a_150(pagamento) # data desconto 8
|
49
49
|
segmento_p << segmento_p_posicao_151_a_165(pagamento) # valor desconto 15
|
@@ -232,23 +232,25 @@ module BrBoleto
|
|
232
232
|
|
233
233
|
# Código do Juros de Mora
|
234
234
|
# 1 posição
|
235
|
+
# Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
|
235
236
|
#
|
236
|
-
def segmento_p_posicao_118_a_118
|
237
|
-
'
|
237
|
+
def segmento_p_posicao_118_a_118(pagamento)
|
238
|
+
cod = "#{pagamento.codigo_juros}".adjust_size_to(1, '3')
|
239
|
+
cod.in?(['1','2','3']) ? cod : '3'
|
238
240
|
end
|
239
241
|
|
240
242
|
# Data do Juros de Mora
|
241
243
|
# 8 posições
|
242
244
|
#
|
243
|
-
def segmento_p_posicao_119_a_126
|
244
|
-
''.
|
245
|
+
def segmento_p_posicao_119_a_126(pagamento)
|
246
|
+
"#{pagamento.data_juros_formatado('%d%m%Y')}".adjust_size_to(8, '0')
|
245
247
|
end
|
246
248
|
|
247
249
|
# Juros de Mora por Dia/Taxa
|
248
250
|
# 15 posições
|
249
251
|
#
|
250
|
-
def segmento_p_posicao_127_a_141
|
251
|
-
|
252
|
+
def segmento_p_posicao_127_a_141(pagamento)
|
253
|
+
pagamento.valor_juros_formatado(15)
|
252
254
|
end
|
253
255
|
|
254
256
|
# Código do Desconto 1
|
@@ -142,11 +142,13 @@ module BrBoleto
|
|
142
142
|
pagamento.desconto_3_valor_formatado(15)
|
143
143
|
end
|
144
144
|
|
145
|
-
# Codigo da multa
|
145
|
+
# Codigo da multa
|
146
146
|
# 1 posição
|
147
|
+
# Padrão FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
|
147
148
|
#
|
148
149
|
def segmento_r_posicao_066_a_066(pagamento)
|
149
|
-
"#{pagamento.codigo_multa}".adjust_size_to(1, '
|
150
|
+
cod = "#{pagamento.codigo_multa}".adjust_size_to(1, '3')
|
151
|
+
cod.in?(['1','2','3']) ? cod : '3'
|
150
152
|
end
|
151
153
|
|
152
154
|
# Data da multa
|
@@ -240,6 +240,26 @@ module BrBoleto
|
|
240
240
|
''.rjust(117, ' ')
|
241
241
|
end
|
242
242
|
|
243
|
+
# Codigo da multa
|
244
|
+
# Padrão pela FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
|
245
|
+
# Padrão do SICOOB = (1 = Valor fixo e 2 = Percentual, 0 = isento)
|
246
|
+
# 1 posição
|
247
|
+
#
|
248
|
+
def segmento_r_posicao_066_a_066(pagamento)
|
249
|
+
cod = "#{pagamento.codigo_multa}".adjust_size_to(1, '0')
|
250
|
+
cod.in?(['1','2']) ? cod : '0'
|
251
|
+
end
|
252
|
+
|
253
|
+
# Codigo do Juros
|
254
|
+
# Padrão pela FEBRABAN = (1 = Valor fixo e 2 = Percentual, 3 = isento)
|
255
|
+
# Padrão do SICOOB = (1 = Valor fixo e 2 = Percentual, 0 = isento)
|
256
|
+
# 1 posição
|
257
|
+
#
|
258
|
+
def segmento_p_posicao_118_a_118(pagamento)
|
259
|
+
cod = "#{pagamento.codigo_juros}".adjust_size_to(1, '0')
|
260
|
+
cod.in?(['1','2']) ? cod : '0'
|
261
|
+
end
|
262
|
+
|
243
263
|
end
|
244
264
|
end
|
245
265
|
end
|
@@ -86,8 +86,21 @@ module BrBoleto
|
|
86
86
|
attr_accessor :desconto_3_codigo, :desconto_3_data, :desconto_3_valor
|
87
87
|
|
88
88
|
# <b>OPCIONAL</b>: Informações para multa
|
89
|
+
# Código da multa pode ser:
|
90
|
+
# - '1' Valor por Dia
|
91
|
+
# - '2' Taxa Mensal
|
92
|
+
# - '3' Isento
|
93
|
+
# - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
|
89
94
|
attr_accessor :codigo_multa, :data_multa, :valor_multa
|
90
95
|
|
96
|
+
# <b>OPCIONAL</b>: Informações para Juros
|
97
|
+
# Código do juros pode ser:
|
98
|
+
# - '1' Valor por Dia
|
99
|
+
# - '2' Taxa Mensal
|
100
|
+
# - '3' Isento
|
101
|
+
# - E Ainda alguns bancos como o SICOOB não conseguem seguir o padrão e usam o cód '0' para Isento
|
102
|
+
attr_accessor :codigo_juros, :data_juros, :valor_juros
|
103
|
+
|
91
104
|
def cep_sacado
|
92
105
|
"#{@cep_sacado}".gsub(/[^0-9]/, "")
|
93
106
|
end
|
@@ -116,8 +129,10 @@ module BrBoleto
|
|
116
129
|
desconto_2_valor: 0.0,
|
117
130
|
desconto_3_codigo: '0',
|
118
131
|
desconto_3_valor: 0.0,
|
119
|
-
codigo_multa: '
|
132
|
+
codigo_multa: '3', # Isento
|
133
|
+
codigo_juros: '3', # Isento
|
120
134
|
valor_multa: 0.0,
|
135
|
+
valor_juros: 0.0,
|
121
136
|
tipo_impressao: '1'
|
122
137
|
}
|
123
138
|
end
|
@@ -126,24 +141,32 @@ module BrBoleto
|
|
126
141
|
#
|
127
142
|
# @return [String]
|
128
143
|
#
|
129
|
-
def data_desconto_formatado(formato = '%d%m%
|
144
|
+
def data_desconto_formatado(formato = '%d%m%Y')
|
130
145
|
formata_data(data_desconto, formato)
|
131
146
|
end
|
132
|
-
def desconto_2_data_formatado(formato = '%d%m%
|
147
|
+
def desconto_2_data_formatado(formato = '%d%m%Y')
|
133
148
|
formata_data(desconto_2_data, formato)
|
134
149
|
end
|
135
|
-
def desconto_3_data_formatado(formato = '%d%m%
|
150
|
+
def desconto_3_data_formatado(formato = '%d%m%Y')
|
136
151
|
formata_data(desconto_3_data, formato)
|
137
152
|
end
|
138
153
|
|
139
154
|
# Formatação para campos da multa
|
140
|
-
def data_multa_formatado(formato = '%d%m%
|
155
|
+
def data_multa_formatado(formato = '%d%m%Y')
|
141
156
|
formata_data(data_multa, formato)
|
142
157
|
end
|
143
158
|
def valor_multa_formatado(tamanho=13)
|
144
159
|
BrBoleto::Helper::Number.new(valor_multa).formata_valor_monetario(tamanho)
|
145
160
|
end
|
146
161
|
|
162
|
+
# Formatação para campos da juros
|
163
|
+
def data_juros_formatado(formato = '%d%m%Y')
|
164
|
+
formata_data(data_juros, formato)
|
165
|
+
end
|
166
|
+
def valor_juros_formatado(tamanho=13)
|
167
|
+
BrBoleto::Helper::Number.new(valor_juros).formata_valor_monetario(tamanho)
|
168
|
+
end
|
169
|
+
|
147
170
|
# Formata o campo valor
|
148
171
|
# referentes as casas decimais
|
149
172
|
# exe. R$199,90 => 0000000019990
|
@@ -3,15 +3,18 @@ module BrBoleto
|
|
3
3
|
module Retorno
|
4
4
|
class Base < BrBoleto::ActiveModelBase
|
5
5
|
|
6
|
-
|
6
|
+
attr_reader :file
|
7
|
+
attr_accessor :pagamentos
|
7
8
|
attr_accessor :codigo_banco
|
8
9
|
|
9
10
|
def initialize(file)
|
10
11
|
self.pagamentos = []
|
11
12
|
@file = file
|
12
|
-
read_file!
|
13
|
+
read_file! if @file.present?
|
13
14
|
end
|
14
15
|
|
16
|
+
validates :file, presence: true
|
17
|
+
|
15
18
|
# O atributo pagamentos sempre irá retornar um Array
|
16
19
|
def pagamentos
|
17
20
|
@pagamentos = [@pagamentos].flatten
|
data/lib/br_boleto/version.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module BrBoleto
|
2
2
|
module Version
|
3
3
|
MAJOR = 1 #inclui alterações de API e pode quebrar compatibilidade com versões anteriores
|
4
|
-
MINOR =
|
4
|
+
MINOR = 2 #inclui novas funcionalidades, sem quebrar APIs existentes
|
5
5
|
PATCH = 0 #corrige bugs ou traz melhorias em implementações já existentes
|
6
6
|
CURRENT = "#{MAJOR}.#{MINOR}.#{PATCH}"
|
7
7
|
end
|
@@ -24,9 +24,9 @@ module Helper
|
|
24
24
|
subject.stubs(:segmento_p_posicao_107_a_108).returns(" 107_a_108")
|
25
25
|
subject.stubs(:segmento_p_posicao_109_a_109).returns(" 109_a_109")
|
26
26
|
subject.stubs(:segmento_p_posicao_110_a_117).with(pagamento).returns(" 110_a_117")
|
27
|
-
subject.stubs(:segmento_p_posicao_118_a_118).returns(" 118_a_118")
|
28
|
-
subject.stubs(:segmento_p_posicao_119_a_126).returns(" 119_a_126")
|
29
|
-
subject.stubs(:segmento_p_posicao_127_a_141).returns(" 127_a_141")
|
27
|
+
subject.stubs(:segmento_p_posicao_118_a_118).with(pagamento).returns(" 118_a_118")
|
28
|
+
subject.stubs(:segmento_p_posicao_119_a_126).with(pagamento).returns(" 119_a_126")
|
29
|
+
subject.stubs(:segmento_p_posicao_127_a_141).with(pagamento).returns(" 127_a_141")
|
30
30
|
subject.stubs(:segmento_p_posicao_142_a_142).with(pagamento).returns(" 142_a_142")
|
31
31
|
subject.stubs(:segmento_p_posicao_143_a_150).with(pagamento).returns(" 143_a_150")
|
32
32
|
subject.stubs(:segmento_p_posicao_151_a_165).with(pagamento).returns(" 151_a_165")
|
@@ -258,24 +258,42 @@ module Helper
|
|
258
258
|
# 1 posição
|
259
259
|
# Por padrão é o valor '0'
|
260
260
|
#
|
261
|
-
def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118
|
262
|
-
subject.segmento_p_posicao_118_a_118
|
261
|
+
def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118#(pagamento)
|
262
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
|
263
|
+
end
|
264
|
+
def test_SegmentoPTest_metodo_segmento_p_posicao_118_a_118_aceita_apenas_1_2_ou_3_com_padrao_3
|
265
|
+
pagamento.codigo_juros = '1'
|
266
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '1'
|
267
|
+
pagamento.codigo_juros = '2'
|
268
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '2'
|
269
|
+
pagamento.codigo_juros = '3'
|
270
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
|
271
|
+
|
272
|
+
pagamento.codigo_juros = nil
|
273
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
|
274
|
+
|
275
|
+
pagamento.codigo_juros = '4'
|
276
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
|
277
|
+
pagamento.codigo_juros = '0'
|
278
|
+
subject.segmento_p_posicao_118_a_118(pagamento).must_equal '3'
|
263
279
|
end
|
264
280
|
|
265
281
|
# Data do Juros de Mora
|
266
282
|
# 8 posições
|
267
283
|
# Por padrão é 8 posições em branco
|
268
284
|
#
|
269
|
-
def test_SegmentoPTest_metodo_segmento_p_posicao_119_a_126
|
270
|
-
|
285
|
+
def test_SegmentoPTest_metodo_segmento_p_posicao_119_a_126#(pagamento)
|
286
|
+
pagamento.expects(:data_juros_formatado).with('%d%m%Y').returns('1234567890')
|
287
|
+
subject.segmento_p_posicao_119_a_126(pagamento).must_equal '12345678'
|
271
288
|
end
|
272
289
|
|
273
290
|
# Juros de Mora por Dia/Taxa
|
274
291
|
# 15 posições
|
275
292
|
# Por padrão é 15 posições em branco
|
276
293
|
#
|
277
|
-
def test_SegmentoPTest_metodo_segmento_p_posicao_127_a_141
|
278
|
-
|
294
|
+
def test_SegmentoPTest_metodo_segmento_p_posicao_127_a_141#(pagamento)
|
295
|
+
pagamento.expects(:valor_juros_formatado).with(15).returns('123456')
|
296
|
+
subject.segmento_p_posicao_127_a_141(pagamento).must_equal '123456'
|
279
297
|
end
|
280
298
|
|
281
299
|
# Código do Desconto 1
|
@@ -145,15 +145,31 @@ module Helper
|
|
145
145
|
# 1 posição
|
146
146
|
#
|
147
147
|
def test_SegmentoRHelper_metodo_segmento_r_posicao_066_a_066#(pagamento)
|
148
|
-
pagamento.expects(:codigo_multa).returns('
|
149
|
-
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '
|
148
|
+
pagamento.expects(:codigo_multa).returns('11111111')
|
149
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '1'
|
150
|
+
end
|
151
|
+
def test_SegmentoRHelper_metodo_segmento_r_posicao_066_a_066_aceita_apenas_1_2_ou_3_com_padrao_3
|
152
|
+
pagamento.codigo_multa = '1'
|
153
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '1'
|
154
|
+
pagamento.codigo_multa = '2'
|
155
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '2'
|
156
|
+
pagamento.codigo_multa = '3'
|
157
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
|
158
|
+
|
159
|
+
pagamento.codigo_multa = nil
|
160
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
|
161
|
+
|
162
|
+
pagamento.codigo_multa = '4'
|
163
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
|
164
|
+
pagamento.codigo_multa = '0'
|
165
|
+
subject.segmento_r_posicao_066_a_066(pagamento).must_equal '3'
|
150
166
|
end
|
151
167
|
|
152
168
|
# Data da multa
|
153
169
|
# 1 posição
|
154
170
|
#
|
155
171
|
def test_SegmentoRHelper_metodo_segmento_r_posicao_067_a_074#(pagamento)
|
156
|
-
pagamento.expects(:data_multa_formatado).with('%d%m%Y').returns('
|
172
|
+
pagamento.expects(:data_multa_formatado).with('%d%m%Y').returns('1234567890')
|
157
173
|
subject.segmento_r_posicao_067_a_074(pagamento).must_equal '12345678'
|
158
174
|
end
|
159
175
|
|
@@ -344,4 +344,64 @@ describe BrBoleto::Remessa::Cnab240::Sicoob do
|
|
344
344
|
subject.tipo_cobranca_formatada.must_be_nil
|
345
345
|
end
|
346
346
|
end
|
347
|
+
|
348
|
+
describe "particularidades do Segmento R" do
|
349
|
+
describe "#segmento_r_posicao_066_a_066 - Codigo da multa " do
|
350
|
+
# Para o Sicoob o código reference a Isento é '0', diferente do padrão
|
351
|
+
# estabelecido pela FEBRABAN onde o código de isento é '3'
|
352
|
+
|
353
|
+
it "Se não tiver valor em codigo_multa deve considerar '0'" do
|
354
|
+
pagamento.codigo_multa = nil
|
355
|
+
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
|
356
|
+
end
|
357
|
+
it "Se o valor de codigo_multa tiver mais caracteres que 1 deve ajustar para 1 caractere" do
|
358
|
+
pagamento.codigo_multa = '123'
|
359
|
+
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
|
360
|
+
end
|
361
|
+
it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
|
362
|
+
pagamento.codigo_multa = '1'
|
363
|
+
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '1'
|
364
|
+
end
|
365
|
+
it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
|
366
|
+
pagamento.codigo_multa = '2'
|
367
|
+
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '2'
|
368
|
+
end
|
369
|
+
it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
|
370
|
+
pagamento.codigo_multa = '3'
|
371
|
+
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
|
372
|
+
pagamento.codigo_multa = '4'
|
373
|
+
subject.send(:segmento_r_posicao_066_a_066, pagamento).must_equal '0'
|
374
|
+
end
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
378
|
+
describe "particularidades do Segmento P" do
|
379
|
+
describe "#segmento_p_posicao_118_a_118 - Codigo de Juros " do
|
380
|
+
# Para o Sicoob o código reference a Isento é '0', diferente do padrão
|
381
|
+
# estabelecido pela FEBRABAN onde o código de isento é '3'
|
382
|
+
|
383
|
+
it "Se não tiver valor em codigo_juros deve considerar '0'" do
|
384
|
+
pagamento.codigo_juros = nil
|
385
|
+
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
|
386
|
+
end
|
387
|
+
it "Se o valor de codigo_juros tiver mais caracteres que 1 deve ajustar para 1 caractere" do
|
388
|
+
pagamento.codigo_juros = '123'
|
389
|
+
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
|
390
|
+
end
|
391
|
+
it "se o código da multa do pagamento for '1' então deve permanecer '1'" do
|
392
|
+
pagamento.codigo_juros = '1'
|
393
|
+
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '1'
|
394
|
+
end
|
395
|
+
it "se o código da multa do pagamento for '2' então deve permanecer '2'" do
|
396
|
+
pagamento.codigo_juros = '2'
|
397
|
+
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '2'
|
398
|
+
end
|
399
|
+
it "se o código da multa do pagamento for diferente de 1 ou 2 então considera '0'" do
|
400
|
+
pagamento.codigo_juros = '3'
|
401
|
+
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
|
402
|
+
pagamento.codigo_juros = '4'
|
403
|
+
subject.send(:segmento_p_posicao_118_a_118, pagamento).must_equal '0'
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
347
407
|
end
|
@@ -34,7 +34,7 @@ describe BrBoleto::Remessa::Pagamento do
|
|
34
34
|
context "default_values" do
|
35
35
|
it "for data_emissao" do
|
36
36
|
object = subject.class.new()
|
37
|
-
object.data_emissao.must_equal Date.
|
37
|
+
object.data_emissao.must_equal Date.current
|
38
38
|
end
|
39
39
|
it "for valor_mora" do
|
40
40
|
object = subject.class.new()
|
@@ -82,12 +82,20 @@ describe BrBoleto::Remessa::Pagamento do
|
|
82
82
|
end
|
83
83
|
it "for codigo_multa" do
|
84
84
|
object = subject.class.new()
|
85
|
-
object.codigo_multa.must_equal '
|
85
|
+
object.codigo_multa.must_equal '3'
|
86
86
|
end
|
87
87
|
it "for valor_multa" do
|
88
88
|
object = subject.class.new()
|
89
89
|
object.valor_multa.must_equal 0.0
|
90
90
|
end
|
91
|
+
it "for codigo_juros" do
|
92
|
+
object = subject.class.new()
|
93
|
+
object.codigo_juros.must_equal '3'
|
94
|
+
end
|
95
|
+
it "for valor_juros" do
|
96
|
+
object = subject.class.new()
|
97
|
+
object.valor_juros.must_equal 0.0
|
98
|
+
end
|
91
99
|
|
92
100
|
end
|
93
101
|
|
@@ -133,54 +141,95 @@ describe BrBoleto::Remessa::Pagamento do
|
|
133
141
|
end
|
134
142
|
|
135
143
|
describe "#data_desconto_formatado" do
|
136
|
-
it "deve chamar o metodo formata_data com padrão de formato %d%m%
|
137
|
-
subject.data_desconto = Date.
|
138
|
-
subject.expects(:formata_data).with(Date.
|
144
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
145
|
+
subject.data_desconto = Date.current
|
146
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
|
139
147
|
subject.data_desconto_formatado.must_equal '123456'
|
140
148
|
end
|
141
149
|
it "deve chamar o metodo formata_data com o parametro passado" do
|
142
|
-
subject.data_desconto = Date.
|
143
|
-
subject.expects(:formata_data).with(Date.
|
144
|
-
subject.data_desconto_formatado("%d%m%
|
150
|
+
subject.data_desconto = Date.current
|
151
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
152
|
+
subject.data_desconto_formatado("%d%m%y").must_equal '123456'
|
145
153
|
end
|
146
154
|
end
|
147
155
|
|
148
156
|
describe "#desconto_2_data_formatado" do
|
149
|
-
it "deve chamar o metodo formata_data com padrão de formato %d%m%
|
150
|
-
subject.desconto_2_data = Date.
|
151
|
-
subject.expects(:formata_data).with(Date.
|
157
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
158
|
+
subject.desconto_2_data = Date.current
|
159
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
|
152
160
|
subject.desconto_2_data_formatado.must_equal '123456'
|
153
161
|
end
|
154
162
|
it "deve chamar o metodo formata_data com o parametro passado" do
|
155
|
-
subject.desconto_2_data = Date.
|
156
|
-
subject.expects(:formata_data).with(Date.
|
157
|
-
subject.desconto_2_data_formatado("%d%m%
|
163
|
+
subject.desconto_2_data = Date.current
|
164
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
165
|
+
subject.desconto_2_data_formatado("%d%m%y").must_equal '123456'
|
158
166
|
end
|
159
167
|
end
|
160
168
|
|
161
169
|
describe "#desconto_3_data_formatado" do
|
162
|
-
it "deve chamar o metodo formata_data com padrão de formato %d%m%
|
163
|
-
subject.desconto_3_data = Date.
|
164
|
-
subject.expects(:formata_data).with(Date.
|
170
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
171
|
+
subject.desconto_3_data = Date.current
|
172
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("123456")
|
165
173
|
subject.desconto_3_data_formatado.must_equal '123456'
|
166
174
|
end
|
167
175
|
it "deve chamar o metodo formata_data com o parametro passado" do
|
168
|
-
subject.desconto_3_data = Date.
|
169
|
-
subject.expects(:formata_data).with(Date.
|
170
|
-
subject.desconto_3_data_formatado("%d%m%
|
176
|
+
subject.desconto_3_data = Date.current
|
177
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
178
|
+
subject.desconto_3_data_formatado("%d%m%y").must_equal '123456'
|
171
179
|
end
|
172
180
|
end
|
173
181
|
|
174
182
|
describe "#data_multa_formatado" do
|
175
|
-
it "deve chamar o metodo formata_data com padrão de formato %d%m%
|
176
|
-
subject.data_multa = Date.
|
177
|
-
subject.expects(:formata_data).with(Date.
|
178
|
-
subject.data_multa_formatado.must_equal '
|
183
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
184
|
+
subject.data_multa = Date.current
|
185
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("12345678")
|
186
|
+
subject.data_multa_formatado.must_equal '12345678'
|
179
187
|
end
|
180
188
|
it "deve chamar o metodo formata_data com o parametro passado" do
|
181
|
-
subject.data_multa = Date.
|
182
|
-
subject.expects(:formata_data).with(Date.
|
183
|
-
subject.data_multa_formatado("%d%m%
|
189
|
+
subject.data_multa = Date.current
|
190
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
191
|
+
subject.data_multa_formatado("%d%m%y").must_equal '123456'
|
192
|
+
end
|
193
|
+
end
|
194
|
+
describe "#valor_multa_formatado" do
|
195
|
+
context "com padrao de tamanho = 13 digitos" do
|
196
|
+
it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
|
197
|
+
subject.valor_multa = 7856.888
|
198
|
+
subject.valor_multa_formatado.must_equal "0000000785689"
|
199
|
+
end
|
200
|
+
end
|
201
|
+
context "passando a quantidade de digitos" do
|
202
|
+
it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
|
203
|
+
subject.valor_multa = 7856.888
|
204
|
+
subject.valor_multa_formatado(10).must_equal "0000785689"
|
205
|
+
end
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
describe "#data_juros_formatado" do
|
210
|
+
it "deve chamar o metodo formata_data com padrão de formato %d%m%Y" do
|
211
|
+
subject.data_juros = Date.current
|
212
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%Y").returns("12345678")
|
213
|
+
subject.data_juros_formatado.must_equal '12345678'
|
214
|
+
end
|
215
|
+
it "deve chamar o metodo formata_data com o parametro passado" do
|
216
|
+
subject.data_juros = Date.current
|
217
|
+
subject.expects(:formata_data).with(Date.current, "%d%m%y").returns("123456")
|
218
|
+
subject.data_juros_formatado("%d%m%y").must_equal '123456'
|
219
|
+
end
|
220
|
+
end
|
221
|
+
describe "#valor_juros_formatado" do
|
222
|
+
context "com padrao de tamanho = 13 digitos" do
|
223
|
+
it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
|
224
|
+
subject.valor_juros = 7856.888
|
225
|
+
subject.valor_juros_formatado.must_equal "0000000785689"
|
226
|
+
end
|
227
|
+
end
|
228
|
+
context "passando a quantidade de digitos" do
|
229
|
+
it "deve formatar o valor removendo separador de casas decimais e aredondando para 2 casas decimais" do
|
230
|
+
subject.valor_juros = 7856.888
|
231
|
+
subject.valor_juros_formatado(10).must_equal "0000785689"
|
232
|
+
end
|
184
233
|
end
|
185
234
|
end
|
186
235
|
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
describe BrBoleto::Retorno::Base do
|
5
|
+
|
6
|
+
subject { BrBoleto::Retorno::Base.new('') }
|
7
|
+
|
8
|
+
before do
|
9
|
+
BrBoleto::Retorno::Base.any_instance.stubs(:read_file!)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#initialize" do
|
13
|
+
it "Se passar um arquivo por parâmetro deve setar o valor em @file e chamar o metodo read_file!" do
|
14
|
+
BrBoleto::Retorno::Base.any_instance.expects(:read_file!)
|
15
|
+
retorno = BrBoleto::Retorno::Base.new('file/path.ret')
|
16
|
+
retorno.instance_variable_get(:@file).must_equal 'file/path.ret'
|
17
|
+
end
|
18
|
+
it "quando instanciar um retorno deve setar os pagamentos com um array" do
|
19
|
+
retorno = BrBoleto::Retorno::Base.new('file/path.ret')
|
20
|
+
retorno.instance_variable_get(:@pagamentos).must_be_kind_of Array
|
21
|
+
end
|
22
|
+
it "se não passar o caminho de um arquivo por parâmetro não deve tentar ler o arquivo" do
|
23
|
+
BrBoleto::Retorno::Base.any_instance.expects(:read_file!).never
|
24
|
+
retorno = BrBoleto::Retorno::Base.new('')
|
25
|
+
retorno.instance_variable_get(:@file).must_equal ''
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it "deve validar que o file é obrigatório" do
|
30
|
+
subject.instance_variable_set(:@file, '')
|
31
|
+
subject.valid?
|
32
|
+
subject.errors.messages[:file].must_include( I18n.t("errors.messages.blank") )
|
33
|
+
|
34
|
+
subject.instance_variable_set(:@file, 'something')
|
35
|
+
subject.valid?
|
36
|
+
subject.errors.messages[:file].must_be_nil
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#pagamentos" do
|
40
|
+
it "mesmo se setar um valor normal deve retornar um array" do
|
41
|
+
subject.pagamentos = 'valor_normal'
|
42
|
+
subject.pagamentos.must_equal(['valor_normal'])
|
43
|
+
end
|
44
|
+
it "se setar valores em Matriz deve retornar um array" do
|
45
|
+
subject.pagamentos = [['valor_1'],'valor_2']
|
46
|
+
subject.pagamentos.must_equal(['valor_1','valor_2'])
|
47
|
+
end
|
48
|
+
it "deve ser possível utilizar o operador << para incrementar valores aos pagamentos" do
|
49
|
+
subject.pagamentos << 'valor_1'
|
50
|
+
subject.pagamentos.must_equal(['valor_1'])
|
51
|
+
subject.pagamentos << 'valor_2'
|
52
|
+
subject.pagamentos.must_equal(['valor_1','valor_2'])
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -24,7 +24,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
24
24
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
25
25
|
pagamento.nosso_numero.must_equal "000000033001014"
|
26
26
|
pagamento.carteira.must_equal "1"
|
27
|
-
pagamento.
|
27
|
+
pagamento.numero_documento.must_equal "000000000000330"
|
28
28
|
pagamento.data_vencimento.must_equal Date.parse('03/05/2016')
|
29
29
|
pagamento.valor_titulo.must_equal 129.39
|
30
30
|
pagamento.banco_recebedor.must_equal "756"
|
@@ -64,7 +64,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
64
64
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
65
65
|
pagamento.nosso_numero.must_equal "000000034801024"
|
66
66
|
pagamento.carteira.must_equal "1"
|
67
|
-
pagamento.
|
67
|
+
pagamento.numero_documento.must_equal "000000000000348"
|
68
68
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
69
69
|
pagamento.valor_titulo.must_equal 29.0
|
70
70
|
pagamento.banco_recebedor.must_equal "756"
|
@@ -104,7 +104,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
104
104
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
105
105
|
pagamento.nosso_numero.must_equal "000000035501014"
|
106
106
|
pagamento.carteira.must_equal "1"
|
107
|
-
pagamento.
|
107
|
+
pagamento.numero_documento.must_equal "000000000000355"
|
108
108
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
109
109
|
pagamento.valor_titulo.must_equal 89.1
|
110
110
|
pagamento.banco_recebedor.must_equal "756"
|
@@ -144,7 +144,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
144
144
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
145
145
|
pagamento.nosso_numero.must_equal "000000036201014"
|
146
146
|
pagamento.carteira.must_equal "1"
|
147
|
-
pagamento.
|
147
|
+
pagamento.numero_documento.must_equal "000000000000362"
|
148
148
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
149
149
|
pagamento.valor_titulo.must_equal 29.0
|
150
150
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -183,7 +183,7 @@ describe BrBoleto::Retorno::Cnab240::Base do
|
|
183
183
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
184
184
|
pagamento.nosso_numero.must_equal "000000036201014"
|
185
185
|
pagamento.carteira.must_equal "1"
|
186
|
-
pagamento.
|
186
|
+
pagamento.numero_documento.must_equal "000000000000362"
|
187
187
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
188
188
|
pagamento.valor_titulo.must_equal 47.37
|
189
189
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -23,7 +23,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
|
|
23
23
|
pagamento.dv_conta_e_agencia.must_equal nil
|
24
24
|
pagamento.nosso_numero.must_equal "NOSSONUMERO0001"
|
25
25
|
pagamento.carteira.must_equal "X"
|
26
|
-
pagamento.
|
26
|
+
pagamento.numero_documento.must_equal "NUMEROCOD01"
|
27
27
|
pagamento.data_vencimento.must_equal Date.parse('03/05/2016')
|
28
28
|
pagamento.valor_titulo.must_equal 129.39
|
29
29
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -63,7 +63,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
|
|
63
63
|
pagamento.dv_conta_e_agencia.must_equal nil
|
64
64
|
pagamento.nosso_numero.must_equal "NOSSONUMERO0002"
|
65
65
|
pagamento.carteira.must_equal "X"
|
66
|
-
pagamento.
|
66
|
+
pagamento.numero_documento.must_equal "NUMEROCOD02"
|
67
67
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
68
68
|
pagamento.valor_titulo.must_equal 29.00
|
69
69
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -103,7 +103,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
|
|
103
103
|
pagamento.dv_conta_e_agencia.must_equal nil
|
104
104
|
pagamento.nosso_numero.must_equal "NOSSONUMERO0003"
|
105
105
|
pagamento.carteira.must_equal "X"
|
106
|
-
pagamento.
|
106
|
+
pagamento.numero_documento.must_equal "NUMEROCOD03"
|
107
107
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
108
108
|
pagamento.valor_titulo.must_equal 89.1
|
109
109
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -143,7 +143,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
|
|
143
143
|
pagamento.dv_conta_e_agencia.must_equal nil
|
144
144
|
pagamento.nosso_numero.must_equal "NOSSONUMERO0004"
|
145
145
|
pagamento.carteira.must_equal "X"
|
146
|
-
pagamento.
|
146
|
+
pagamento.numero_documento.must_equal "NUMEROCOD04"
|
147
147
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
148
148
|
pagamento.valor_titulo.must_equal 29.0
|
149
149
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -183,7 +183,7 @@ describe BrBoleto::Retorno::Cnab240::Caixa do
|
|
183
183
|
pagamento.dv_conta_e_agencia.must_equal nil
|
184
184
|
pagamento.nosso_numero.must_equal "NOSSONUMERO0005"
|
185
185
|
pagamento.carteira.must_equal "X"
|
186
|
-
pagamento.
|
186
|
+
pagamento.numero_documento.must_equal "NUMEROCOD05"
|
187
187
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
188
188
|
pagamento.valor_titulo.must_equal 47.37
|
189
189
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -23,7 +23,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
|
|
23
23
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
24
24
|
pagamento.nosso_numero.must_equal "0000000330"
|
25
25
|
pagamento.carteira.must_equal "1"
|
26
|
-
pagamento.
|
26
|
+
pagamento.numero_documento.must_equal "000000000000330"
|
27
27
|
pagamento.data_vencimento.must_equal Date.parse('03/05/2016')
|
28
28
|
pagamento.valor_titulo.must_equal 129.39
|
29
29
|
pagamento.banco_recebedor.must_equal "756"
|
@@ -63,7 +63,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
|
|
63
63
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
64
64
|
pagamento.nosso_numero.must_equal "0000000348"
|
65
65
|
pagamento.carteira.must_equal "1"
|
66
|
-
pagamento.
|
66
|
+
pagamento.numero_documento.must_equal "000000000000348"
|
67
67
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
68
68
|
pagamento.valor_titulo.must_equal 29.0
|
69
69
|
pagamento.banco_recebedor.must_equal "756"
|
@@ -103,7 +103,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
|
|
103
103
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
104
104
|
pagamento.nosso_numero.must_equal "0000000355"
|
105
105
|
pagamento.carteira.must_equal "1"
|
106
|
-
pagamento.
|
106
|
+
pagamento.numero_documento.must_equal "000000000000355"
|
107
107
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
108
108
|
pagamento.valor_titulo.must_equal 89.1
|
109
109
|
pagamento.banco_recebedor.must_equal "756"
|
@@ -143,7 +143,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
|
|
143
143
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
144
144
|
pagamento.nosso_numero.must_equal "0000000362"
|
145
145
|
pagamento.carteira.must_equal "1"
|
146
|
-
pagamento.
|
146
|
+
pagamento.numero_documento.must_equal "000000000000362"
|
147
147
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
148
148
|
pagamento.valor_titulo.must_equal 29.0
|
149
149
|
pagamento.banco_recebedor.must_equal "104"
|
@@ -183,7 +183,7 @@ describe BrBoleto::Retorno::Cnab240::Sicoob do
|
|
183
183
|
pagamento.dv_conta_e_agencia.must_equal "0"
|
184
184
|
pagamento.nosso_numero.must_equal "0000000362"
|
185
185
|
pagamento.carteira.must_equal "1"
|
186
|
-
pagamento.
|
186
|
+
pagamento.numero_documento.must_equal "000000000000362"
|
187
187
|
pagamento.data_vencimento.must_equal Date.parse('06/05/2016')
|
188
188
|
pagamento.valor_titulo.must_equal 47.37
|
189
189
|
pagamento.banco_recebedor.must_equal "104"
|
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: 1.
|
4
|
+
version: 1.2.0
|
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: 2016-05-
|
11
|
+
date: 2016-05-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -154,6 +154,7 @@ files:
|
|
154
154
|
- test/br_boleto/remessa/cnab240/sicoob_test.rb
|
155
155
|
- test/br_boleto/remessa/lote_test.rb
|
156
156
|
- test/br_boleto/remessa/pagamento_test.rb
|
157
|
+
- test/br_boleto/retorno/base_test.rb
|
157
158
|
- test/br_boleto/retorno/cnab240/base_test.rb
|
158
159
|
- test/br_boleto/retorno/cnab240/caixa_test.rb
|
159
160
|
- test/br_boleto/retorno/cnab240/sicoob_test.rb
|
@@ -228,6 +229,7 @@ test_files:
|
|
228
229
|
- test/br_boleto/remessa/cnab240/sicoob_test.rb
|
229
230
|
- test/br_boleto/remessa/lote_test.rb
|
230
231
|
- test/br_boleto/remessa/pagamento_test.rb
|
232
|
+
- test/br_boleto/retorno/base_test.rb
|
231
233
|
- test/br_boleto/retorno/cnab240/base_test.rb
|
232
234
|
- test/br_boleto/retorno/cnab240/caixa_test.rb
|
233
235
|
- test/br_boleto/retorno/cnab240/sicoob_test.rb
|