br_boleto 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|