brcobranca 9.2.4 → 10.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -9
- data/HISTORY.md +71 -0
- data/README.md +47 -54
- data/Rakefile +4 -4
- data/lib/brcobranca/arquivos/logos/ailos.eps +412 -0
- data/lib/brcobranca/arquivos/logos/ailos_carne.eps +412 -0
- data/lib/brcobranca/arquivos/logos/safra.eps +0 -0
- data/lib/brcobranca/arquivos/logos/safra_carne.eps +0 -0
- data/lib/brcobranca/boleto/{cecred.rb → ailos.rb} +7 -5
- data/lib/brcobranca/boleto/banco_brasil.rb +9 -5
- data/lib/brcobranca/boleto/banco_brasilia.rb +5 -5
- data/lib/brcobranca/boleto/banco_nordeste.rb +4 -3
- data/lib/brcobranca/boleto/banestes.rb +4 -3
- data/lib/brcobranca/boleto/banrisul.rb +4 -3
- data/lib/brcobranca/boleto/base.rb +12 -7
- data/lib/brcobranca/boleto/bradesco.rb +4 -3
- data/lib/brcobranca/boleto/caixa.rb +10 -8
- data/lib/brcobranca/boleto/citibank.rb +9 -8
- data/lib/brcobranca/boleto/credisis.rb +6 -4
- data/lib/brcobranca/boleto/hsbc.rb +8 -6
- data/lib/brcobranca/boleto/itau.rb +5 -5
- data/lib/brcobranca/boleto/safra.rb +4 -4
- data/lib/brcobranca/boleto/santander.rb +4 -2
- data/lib/brcobranca/boleto/sicoob.rb +4 -3
- data/lib/brcobranca/boleto/sicredi.rb +6 -3
- data/lib/brcobranca/boleto/template/base.rb +2 -3
- data/lib/brcobranca/boleto/template/rghost.rb +18 -13
- data/lib/brcobranca/boleto/template/rghost_carne.rb +18 -12
- data/lib/brcobranca/boleto/unicred.rb +61 -103
- data/lib/brcobranca/calculo.rb +14 -9
- data/lib/brcobranca/calculo_data.rb +6 -5
- data/lib/brcobranca/currency.rb +10 -10
- data/lib/brcobranca/formatacao.rb +2 -1
- data/lib/brcobranca/formatacao_string.rb +7 -6
- data/lib/brcobranca/limpeza.rb +3 -3
- data/lib/brcobranca/remessa/base.rb +7 -10
- data/lib/brcobranca/remessa/cnab240/{cecred.rb → ailos.rb} +18 -15
- data/lib/brcobranca/remessa/cnab240/banco_brasil.rb +14 -11
- data/lib/brcobranca/remessa/cnab240/base.rb +56 -39
- data/lib/brcobranca/remessa/cnab240/base_correspondente.rb +25 -17
- data/lib/brcobranca/remessa/cnab240/caixa.rb +21 -13
- data/lib/brcobranca/remessa/cnab240/sicoob.rb +33 -30
- data/lib/brcobranca/remessa/cnab240/sicoob_banco_brasil.rb +14 -7
- data/lib/brcobranca/remessa/cnab240/sicredi.rb +28 -22
- data/lib/brcobranca/remessa/cnab240/unicred.rb +2 -1
- data/lib/brcobranca/remessa/cnab400/banco_brasil.rb +9 -9
- data/lib/brcobranca/remessa/cnab400/banco_brasilia.rb +29 -28
- data/lib/brcobranca/remessa/cnab400/banco_nordeste.rb +11 -10
- data/lib/brcobranca/remessa/cnab400/banrisul.rb +13 -10
- data/lib/brcobranca/remessa/cnab400/base.rb +22 -9
- data/lib/brcobranca/remessa/cnab400/bradesco.rb +30 -5
- data/lib/brcobranca/remessa/cnab400/citibank.rb +6 -5
- data/lib/brcobranca/remessa/cnab400/credisis.rb +7 -5
- data/lib/brcobranca/remessa/cnab400/itau.rb +9 -6
- data/lib/brcobranca/remessa/cnab400/santander.rb +17 -15
- data/lib/brcobranca/remessa/cnab400/sicoob.rb +8 -11
- data/lib/brcobranca/remessa/cnab400/unicred.rb +185 -69
- data/lib/brcobranca/remessa/pagamento.rb +43 -11
- data/lib/brcobranca/retorno/base.rb +5 -43
- data/lib/brcobranca/retorno/cnab240/{cecred.rb → ailos.rb} +12 -10
- data/lib/brcobranca/retorno/cnab240/base.rb +8 -9
- data/lib/brcobranca/retorno/cnab240/caixa.rb +4 -5
- data/lib/brcobranca/retorno/cnab240/santander.rb +12 -8
- data/lib/brcobranca/retorno/cnab240/sicoob.rb +11 -9
- data/lib/brcobranca/retorno/cnab240/sicredi.rb +12 -9
- data/lib/brcobranca/retorno/cnab400/banco_brasil.rb +3 -3
- data/lib/brcobranca/retorno/cnab400/banco_brasilia.rb +2 -1
- data/lib/brcobranca/retorno/cnab400/banco_nordeste.rb +2 -1
- data/lib/brcobranca/retorno/cnab400/banrisul.rb +1 -1
- data/lib/brcobranca/retorno/cnab400/base.rb +13 -12
- data/lib/brcobranca/retorno/cnab400/bradesco.rb +4 -4
- data/lib/brcobranca/retorno/cnab400/credisis.rb +2 -1
- data/lib/brcobranca/retorno/cnab400/itau.rb +6 -5
- data/lib/brcobranca/retorno/cnab400/santander.rb +8 -7
- data/lib/brcobranca/retorno/cnab400/unicred.rb +63 -58
- data/lib/brcobranca/retorno/retorno_cbr643.rb +1 -2
- data/lib/brcobranca/retorno/retorno_cnab240.rb +11 -9
- data/lib/brcobranca/retorno/retorno_cnab400.rb +6 -5
- data/lib/brcobranca/util/date.rb +2 -1
- data/lib/brcobranca/util/empresa.rb +2 -1
- data/lib/brcobranca/util/errors.rb +31 -31
- data/lib/brcobranca/validations.rb +127 -151
- data/lib/brcobranca/version.rb +2 -3
- data/lib/brcobranca.rb +5 -5
- data/spec/brcobranca/base_spec.rb +20 -11
- data/spec/brcobranca/boleto/{cecred_spec.rb → ailos_spec.rb} +13 -12
- data/spec/brcobranca/boleto/banco_brasil_spec.rb +14 -12
- data/spec/brcobranca/boleto/banco_brasilia_spec.rb +11 -10
- data/spec/brcobranca/boleto/banco_nordeste_spec.rb +2 -3
- data/spec/brcobranca/boleto/banestes_spec.rb +10 -11
- data/spec/brcobranca/boleto/banrisul_spec.rb +10 -12
- data/spec/brcobranca/boleto/bradesco_spec.rb +36 -33
- data/spec/brcobranca/boleto/caixa_spec.rb +11 -12
- data/spec/brcobranca/boleto/citibank_spec.rb +10 -11
- data/spec/brcobranca/boleto/credisis_spec.rb +18 -17
- data/spec/brcobranca/boleto/hsbc_spec.rb +9 -10
- data/spec/brcobranca/boleto/itau_spec.rb +11 -12
- data/spec/brcobranca/boleto/safra_spec.rb +10 -11
- data/spec/brcobranca/boleto/santander_spec.rb +9 -10
- data/spec/brcobranca/boleto/sicoob_spec.rb +10 -11
- data/spec/brcobranca/boleto/sicredi_spec.rb +14 -10
- data/spec/brcobranca/boleto/unicred_spec.rb +28 -38
- data/spec/brcobranca/boletos_em_lote_spec.rb +7 -7
- data/spec/brcobranca/calculo_data_spec.rb +2 -2
- data/spec/brcobranca/calculo_spec.rb +13 -11
- data/spec/brcobranca/currency_spec.rb +26 -26
- data/spec/brcobranca/formatacao_spec.rb +2 -2
- data/spec/brcobranca/formatacao_string_spec.rb +10 -4
- data/spec/brcobranca/limpeza_spec.rb +2 -2
- data/spec/brcobranca/remessa/base_spec.rb +1 -2
- data/spec/brcobranca/remessa/cnab240/{cecred_spec.rb → ailos_spec.rb} +48 -47
- data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +18 -13
- data/spec/brcobranca/remessa/cnab240/base_spec.rb +33 -10
- data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +19 -17
- data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +12 -8
- data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +28 -26
- data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +12 -10
- data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +11 -9
- data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +6 -3
- data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +24 -19
- data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +19 -14
- data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +17 -15
- data/spec/brcobranca/remessa/cnab400/base_spec.rb +23 -8
- data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +19 -17
- data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +14 -12
- data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +21 -19
- data/spec/brcobranca/remessa/cnab400/itau_spec.rb +18 -16
- data/spec/brcobranca/remessa/cnab400/santander_spec.rb +24 -22
- data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +20 -20
- data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +167 -166
- data/spec/brcobranca/remessa/pagamento_spec.rb +16 -15
- data/spec/brcobranca/retorno/cnab240/base_spec.rb +10 -9
- data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +4 -2
- data/spec/brcobranca/retorno/cnab240/santander_spec.rb +2 -0
- data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +2 -0
- data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +2 -0
- data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/base_spec.rb +25 -25
- data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +5 -4
- data/spec/brcobranca/retorno/cnab400/itau_spec.rb +4 -2
- data/spec/brcobranca/retorno/cnab400/santander_spec.rb +2 -1
- data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +28 -32
- data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +2 -2
- data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +2 -1
- data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +2 -1
- data/spec/brcobranca/rghost_spec.rb +4 -4
- data/spec/brcobranca/util/empresa_spec.rb +1 -2
- data/spec/brcobranca_spec.rb +1 -2
- metadata +85 -162
- data/spec/arquivos/CBR64310.RET +0 -28
- data/spec/arquivos/CNAB240.RET +0 -74
- data/spec/arquivos/CNAB240CECRED.RET +0 -10
- data/spec/arquivos/CNAB240SANTANDER.RET +0 -8
- data/spec/arquivos/CNAB240SICOOB.RET +0 -10
- data/spec/arquivos/CNAB240SICREDI.CRT +0 -8
- data/spec/arquivos/CNAB400.RET +0 -54
- data/spec/arquivos/CNAB400BANCOBRASILIA.RET +0 -3
- data/spec/arquivos/CNAB400BANCONORDESTE.RET +0 -3
- data/spec/arquivos/CNAB400BANRISUL.RET +0 -3
- data/spec/arquivos/CNAB400BRADESCO.RET +0 -8
- data/spec/arquivos/CNAB400CREDISIS.RET +0 -3
- data/spec/arquivos/CNAB400ITAU.RET +0 -54
- data/spec/arquivos/CNAB400SANTANDER.RET +0 -54
- data/spec/arquivos/CNAB400UNICRED.RET +0 -3
- data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-itau-cnab400.rem +0 -4
- data/spec/fixtures/remessa/remessa-santander-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +0 -3
- data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +0 -4
- data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +0 -7
- data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +0 -3
- data/spec/spec.opts +0 -8
- data/spec/spec_helper.rb +0 -38
- data/spec/support/remessa_helpers.rb +0 -13
- data/spec/support/shared_examples/busca_logotipo.rb +0 -15
- data/spec/support/shared_examples/cnab240.rb +0 -259
- data/spec/support/shared_examples/cnab400.rb +0 -180
- data/spec/support/shared_examples/formatos_validos.rb +0 -36
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab240
|
@@ -72,7 +73,7 @@ module Brcobranca
|
|
72
73
|
#
|
73
74
|
def monta_header_arquivo
|
74
75
|
header_arquivo = '' # CAMPO TAMANHO
|
75
|
-
header_arquivo
|
76
|
+
header_arquivo += cod_banco # codigo do banco 3
|
76
77
|
header_arquivo << '0000' # lote do servico 4
|
77
78
|
header_arquivo << '0' # tipo de registro 1
|
78
79
|
header_arquivo << ''.rjust(9, ' ') # uso exclusivo FEBRABAN 9
|
@@ -104,7 +105,7 @@ module Brcobranca
|
|
104
105
|
#
|
105
106
|
def monta_header_lote(nro_lote)
|
106
107
|
header_lote = '' # CAMPO TAMANHO
|
107
|
-
header_lote
|
108
|
+
header_lote += cod_banco # codigo banco 3
|
108
109
|
header_lote << nro_lote.to_s.rjust(4, '0') # lote servico 4
|
109
110
|
header_lote << '1' # tipo de registro 1
|
110
111
|
header_lote << 'R' # tipo de operacao 1
|
@@ -138,8 +139,9 @@ module Brcobranca
|
|
138
139
|
# @return [String]
|
139
140
|
#
|
140
141
|
def monta_segmento_p(pagamento, nro_lote, sequencial)
|
142
|
+
segmento_p = ''
|
141
143
|
# # DESCRICAO TAMANHO
|
142
|
-
segmento_p
|
144
|
+
segmento_p += cod_banco # codigo banco 3
|
143
145
|
segmento_p << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
144
146
|
segmento_p << '3' # tipo de registro 1
|
145
147
|
segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
@@ -194,7 +196,7 @@ module Brcobranca
|
|
194
196
|
#
|
195
197
|
def monta_segmento_q(pagamento, nro_lote, sequencial)
|
196
198
|
segmento_q = '' # CAMPO TAMANHO
|
197
|
-
segmento_q
|
199
|
+
segmento_q += cod_banco # codigo banco 3
|
198
200
|
segmento_q << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
199
201
|
segmento_q << '3' # tipo de registro 1
|
200
202
|
segmento_q << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
@@ -211,7 +213,7 @@ module Brcobranca
|
|
211
213
|
segmento_q << pagamento.cidade_sacado.format_size(15) # cidade 15
|
212
214
|
segmento_q << pagamento.uf_sacado # uf 2
|
213
215
|
segmento_q << pagamento.identificacao_avalista(false) # identificacao do sacador 1
|
214
|
-
segmento_q << pagamento.documento_avalista.to_s.rjust(15, '0')# documento sacador 15
|
216
|
+
segmento_q << pagamento.documento_avalista.to_s.rjust(15, '0') # documento sacador 15
|
215
217
|
segmento_q << pagamento.nome_avalista.format_size(40) # nome avalista 40
|
216
218
|
segmento_q << ''.rjust(3, '0') # cod. banco correspondente 3
|
217
219
|
segmento_q << ''.rjust(20, ' ') # nosso numero banco correspondente 20
|
@@ -232,19 +234,19 @@ module Brcobranca
|
|
232
234
|
#
|
233
235
|
def monta_segmento_r(pagamento, nro_lote, sequencial)
|
234
236
|
segmento_r = '' # CAMPO TAMANHO
|
235
|
-
segmento_r
|
237
|
+
segmento_r += cod_banco # codigo banco 3
|
236
238
|
segmento_r << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
237
239
|
segmento_r << '3' # tipo do registro 1
|
238
240
|
segmento_r << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
239
241
|
segmento_r << 'R' # cod. segmento 1
|
240
242
|
segmento_r << ' ' # uso exclusivo 1
|
241
243
|
segmento_r << pagamento.identificacao_ocorrencia # cod. movimento remessa 2
|
242
|
-
segmento_r <<
|
243
|
-
segmento_r <<
|
244
|
-
segmento_r <<
|
245
|
-
segmento_r <<
|
246
|
-
segmento_r <<
|
247
|
-
segmento_r <<
|
244
|
+
segmento_r << '0' # cod. desconto 2 1
|
245
|
+
segmento_r << ''.rjust(8, '0') # data desconto 2 8
|
246
|
+
segmento_r << ''.rjust(15, '0') # valor desconto 2 15
|
247
|
+
segmento_r << '0' # cod. desconto 3 1
|
248
|
+
segmento_r << ''.rjust(8, '0') # data desconto 3 8
|
249
|
+
segmento_r << ''.rjust(15, '0') # valor desconto 3 15
|
248
250
|
segmento_r << pagamento.codigo_multa # codigo multa 1
|
249
251
|
segmento_r << data_multa(pagamento) # data multa 8
|
250
252
|
segmento_r << pagamento.formata_percentual_multa(15) # valor multa 15
|
@@ -267,7 +269,7 @@ module Brcobranca
|
|
267
269
|
#
|
268
270
|
def monta_trailer_lote(nro_lote, nro_registros)
|
269
271
|
trailer_lote = '' # CAMPO # TAMANHO
|
270
|
-
trailer_lote
|
272
|
+
trailer_lote += cod_banco # codigo banco 3
|
271
273
|
trailer_lote << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
272
274
|
trailer_lote << '5' # tipo de servico 1
|
273
275
|
trailer_lote << ''.rjust(9, ' ') # uso exclusivo 9
|
@@ -294,7 +296,11 @@ module Brcobranca
|
|
294
296
|
# nro de lotes 6
|
295
297
|
# nro de registros(linhas) 6
|
296
298
|
# uso FEBRABAN 211
|
297
|
-
"#{cod_banco}99999#{''.rjust(9,
|
299
|
+
"#{cod_banco}99999#{''.rjust(9,
|
300
|
+
' ')}#{nro_lotes.to_s.rjust(6,
|
301
|
+
'0')}#{sequencial.to_s.rjust(6,
|
302
|
+
'0')}#{''.rjust(211,
|
303
|
+
' ')}"
|
298
304
|
end
|
299
305
|
|
300
306
|
# Monta um lote para o arquivo
|
@@ -309,7 +315,7 @@ module Brcobranca
|
|
309
315
|
#
|
310
316
|
def monta_lote(nro_lote)
|
311
317
|
# contador dos registros do lote
|
312
|
-
contador = 1 #header
|
318
|
+
contador = 1 # header
|
313
319
|
|
314
320
|
lote = [monta_header_lote(nro_lote)]
|
315
321
|
|
@@ -320,16 +326,16 @@ module Brcobranca
|
|
320
326
|
contador += 1
|
321
327
|
lote << monta_segmento_q(pagamento, nro_lote, contador)
|
322
328
|
contador += 1
|
323
|
-
|
324
|
-
|
329
|
+
next unless respond_to?(:monta_segmento_r)
|
330
|
+
|
331
|
+
seg_r = monta_segmento_r(pagamento, nro_lote, contador)
|
325
332
|
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
end
|
333
|
+
if seg_r.present?
|
334
|
+
lote << seg_r
|
335
|
+
contador += 1
|
330
336
|
end
|
331
337
|
end
|
332
|
-
contador += 1 #trailer
|
338
|
+
contador += 1 # trailer
|
333
339
|
|
334
340
|
lote << monta_trailer_lote(nro_lote, contador)
|
335
341
|
|
@@ -353,13 +359,14 @@ module Brcobranca
|
|
353
359
|
|
354
360
|
arquivo << monta_trailer_arquivo(contador, total_linhas)
|
355
361
|
|
356
|
-
remittance = arquivo.join("\r\n").
|
362
|
+
remittance = arquivo.join("\r\n").remove_accents.upcase
|
357
363
|
remittance << "\n"
|
358
|
-
remittance.encode(remittance.encoding, universal_newline: true).encode(remittance.encoding,
|
364
|
+
remittance.encode(remittance.encoding, universal_newline: true).encode(remittance.encoding,
|
365
|
+
crlf_newline: true)
|
359
366
|
end
|
360
367
|
|
361
368
|
def total_segmentos(pagamentos)
|
362
|
-
if
|
369
|
+
if respond_to?(:monta_segmento_r)
|
363
370
|
pagamentos.size * 3
|
364
371
|
else
|
365
372
|
pagamentos.size * 2
|
@@ -371,7 +378,8 @@ module Brcobranca
|
|
371
378
|
# Este metodo deve ser sobrescrevido na classe do banco
|
372
379
|
#
|
373
380
|
def complemento_header
|
374
|
-
raise Brcobranca::NaoImplementado,
|
381
|
+
raise Brcobranca::NaoImplementado,
|
382
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
375
383
|
end
|
376
384
|
|
377
385
|
# Numero da versao do layout do arquivo
|
@@ -379,7 +387,8 @@ module Brcobranca
|
|
379
387
|
# Este metodo deve ser sobrescrevido na classe do banco
|
380
388
|
#
|
381
389
|
def versao_layout_arquivo
|
382
|
-
raise Brcobranca::NaoImplementado,
|
390
|
+
raise Brcobranca::NaoImplementado,
|
391
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
383
392
|
end
|
384
393
|
|
385
394
|
# Numero da versao do layout do lote
|
@@ -387,7 +396,8 @@ module Brcobranca
|
|
387
396
|
# Este metodo deve ser sobrescrevido na classe do banco
|
388
397
|
#
|
389
398
|
def versao_layout_lote
|
390
|
-
raise Brcobranca::NaoImplementado,
|
399
|
+
raise Brcobranca::NaoImplementado,
|
400
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
391
401
|
end
|
392
402
|
|
393
403
|
# Densidade de gravacao do arquivo
|
@@ -410,7 +420,8 @@ module Brcobranca
|
|
410
420
|
# Este metodo deve ser sobrescrevido na classe do banco
|
411
421
|
#
|
412
422
|
def convenio_lote
|
413
|
-
raise Brcobranca::NaoImplementado,
|
423
|
+
raise Brcobranca::NaoImplementado,
|
424
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
414
425
|
end
|
415
426
|
|
416
427
|
# Nome do banco
|
@@ -418,7 +429,8 @@ module Brcobranca
|
|
418
429
|
# Este metodo deve ser sobrescrevido na classe do banco
|
419
430
|
#
|
420
431
|
def nome_banco
|
421
|
-
raise Brcobranca::NaoImplementado,
|
432
|
+
raise Brcobranca::NaoImplementado,
|
433
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
422
434
|
end
|
423
435
|
|
424
436
|
# Codigo do banco
|
@@ -426,7 +438,8 @@ module Brcobranca
|
|
426
438
|
# Este metodo deve ser sobrescrevido na classe do banco
|
427
439
|
#
|
428
440
|
def cod_banco
|
429
|
-
raise Brcobranca::NaoImplementado,
|
441
|
+
raise Brcobranca::NaoImplementado,
|
442
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
430
443
|
end
|
431
444
|
|
432
445
|
# Informacoes da conta do cedente
|
@@ -434,7 +447,8 @@ module Brcobranca
|
|
434
447
|
# Este metodo deve ser sobrescrevido na classe do banco
|
435
448
|
#
|
436
449
|
def info_conta
|
437
|
-
raise Brcobranca::NaoImplementado,
|
450
|
+
raise Brcobranca::NaoImplementado,
|
451
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
438
452
|
end
|
439
453
|
|
440
454
|
# Codigo do convenio
|
@@ -442,7 +456,8 @@ module Brcobranca
|
|
442
456
|
# Este metodo deve ser sobrescrevido na classe do banco
|
443
457
|
#
|
444
458
|
def codigo_convenio
|
445
|
-
raise Brcobranca::NaoImplementado,
|
459
|
+
raise Brcobranca::NaoImplementado,
|
460
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
446
461
|
end
|
447
462
|
|
448
463
|
# Complemento do Segmento R
|
@@ -450,7 +465,7 @@ module Brcobranca
|
|
450
465
|
# Sobreescreva caso necessário
|
451
466
|
def complemento_r
|
452
467
|
segmento_r = ''
|
453
|
-
segmento_r
|
468
|
+
segmento_r += ''.rjust(20, ' ') # Exclusivo FEBRABAN 20
|
454
469
|
segmento_r << ''.rjust(8, '0') # Cod. Ocor do Pagador 8
|
455
470
|
segmento_r << ''.rjust(3, '0') # Cod. do Banco conta débito 3
|
456
471
|
segmento_r << ''.rjust(5, '0') # Cod. da Agencia do débito 5
|
@@ -465,12 +480,14 @@ module Brcobranca
|
|
465
480
|
|
466
481
|
def data_multa(pagamento)
|
467
482
|
return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
|
483
|
+
|
468
484
|
pagamento.data_vencimento.strftime('%d%m%Y')
|
469
485
|
end
|
470
486
|
|
471
487
|
def data_mora(pagamento)
|
472
|
-
return
|
473
|
-
|
488
|
+
return ''.rjust(8, '0') unless %w[1 2].include? pagamento.tipo_mora
|
489
|
+
|
490
|
+
pagamento.data_vencimento.strftime('%d%m%Y')
|
474
491
|
end
|
475
492
|
|
476
493
|
def codigo_desconto(pagamento)
|
@@ -482,7 +499,7 @@ module Brcobranca
|
|
482
499
|
end
|
483
500
|
|
484
501
|
def dias_baixa(pagamento)
|
485
|
-
pagamento.dias_baixa.to_s.rjust(3,
|
502
|
+
pagamento.dias_baixa.to_s.rjust(3, '0')
|
486
503
|
end
|
487
504
|
|
488
505
|
# Identificacao do titulo da empresa
|
@@ -500,7 +517,7 @@ module Brcobranca
|
|
500
517
|
#
|
501
518
|
# Sobreescreva caso necessário
|
502
519
|
def exclusivo_servico
|
503
|
-
|
520
|
+
''.rjust(2, ' ')
|
504
521
|
end
|
505
522
|
|
506
523
|
def dv_agencia_cobradora
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab240
|
@@ -65,7 +66,7 @@ module Brcobranca
|
|
65
66
|
#
|
66
67
|
def monta_header_arquivo
|
67
68
|
header_arquivo = '' # CAMPO TAMANHO
|
68
|
-
header_arquivo
|
69
|
+
header_arquivo += cod_banco # codigo do banco 3
|
69
70
|
header_arquivo << '0000' # zeros 4
|
70
71
|
header_arquivo << '1' # registro header do lote 1
|
71
72
|
header_arquivo << 'R' # tipo operacao: R-remessa 1
|
@@ -93,7 +94,7 @@ module Brcobranca
|
|
93
94
|
def monta_segmento_p(pagamento, sequencial)
|
94
95
|
# # DESCRICAO TAMANHO
|
95
96
|
segmento_p = ''.rjust(7, '0') # codigo banco 7
|
96
|
-
segmento_p
|
97
|
+
segmento_p += '3' # tipo de registro 1
|
97
98
|
segmento_p << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
98
99
|
segmento_p << 'P' # cod. segmento 1
|
99
100
|
segmento_p << ' ' # uso exclusivo 1
|
@@ -128,7 +129,6 @@ module Brcobranca
|
|
128
129
|
segmento_p
|
129
130
|
end
|
130
131
|
|
131
|
-
|
132
132
|
# Monta o registro segmento Q do arquivo
|
133
133
|
#
|
134
134
|
# @param pagamento [Brcobranca::Remessa::Pagamento]
|
@@ -140,7 +140,7 @@ module Brcobranca
|
|
140
140
|
#
|
141
141
|
def monta_segmento_q(pagamento, sequencial)
|
142
142
|
segmento_q = '' # CAMPO TAMANHO
|
143
|
-
segmento_q
|
143
|
+
segmento_q += ''.rjust(7, '0') # zeros 3
|
144
144
|
segmento_q << '3' # registro detalhe 1
|
145
145
|
segmento_q << sequencial.to_s.rjust(5, '0') # lote de servico 5
|
146
146
|
segmento_q << 'Q' # cod. segmento 1
|
@@ -178,7 +178,6 @@ module Brcobranca
|
|
178
178
|
"0#{pagamento.identificacao_avalista(false)}"
|
179
179
|
end
|
180
180
|
|
181
|
-
|
182
181
|
# Monta o registro trailer do arquivo
|
183
182
|
#
|
184
183
|
# @param nro_lotes [Integer]
|
@@ -197,7 +196,11 @@ module Brcobranca
|
|
197
196
|
# nro de lotes 6
|
198
197
|
# nro de registros(linhas) 6
|
199
198
|
# uso FEBRABAN 211
|
200
|
-
"#{cod_banco}99999#{''.rjust(9,
|
199
|
+
"#{cod_banco}99999#{''.rjust(9,
|
200
|
+
' ')}#{nro_lotes.to_s.rjust(6,
|
201
|
+
'0')}#{sequencial.to_s.rjust(6,
|
202
|
+
'0')}#{''.rjust(211,
|
203
|
+
' ')}"
|
201
204
|
end
|
202
205
|
|
203
206
|
# Monta um lote para o arquivo
|
@@ -210,9 +213,9 @@ module Brcobranca
|
|
210
213
|
#
|
211
214
|
# @return [Array]
|
212
215
|
#
|
213
|
-
def monta_lote(
|
216
|
+
def monta_lote(_nro_lote)
|
214
217
|
# contador dos registros do lote
|
215
|
-
contador = 1 #header
|
218
|
+
contador = 1 # header
|
216
219
|
|
217
220
|
lote = []
|
218
221
|
|
@@ -224,7 +227,7 @@ module Brcobranca
|
|
224
227
|
lote << monta_segmento_q(pagamento, contador)
|
225
228
|
contador += 1
|
226
229
|
end
|
227
|
-
contador += 1 #trailer
|
230
|
+
contador += 1 # trailer
|
228
231
|
|
229
232
|
lote
|
230
233
|
end
|
@@ -244,7 +247,7 @@ module Brcobranca
|
|
244
247
|
|
245
248
|
arquivo << monta_trailer_arquivo(contador, ((pagamentos.size * 2) + (contador * 2) + 2))
|
246
249
|
|
247
|
-
arquivo.join("\r\n").
|
250
|
+
arquivo.join("\r\n").remove_accents.upcase
|
248
251
|
end
|
249
252
|
|
250
253
|
# Complemento do registro
|
@@ -252,7 +255,8 @@ module Brcobranca
|
|
252
255
|
# Este metodo deve ser sobrescrevido na classe do banco
|
253
256
|
#
|
254
257
|
def complemento_header
|
255
|
-
raise Brcobranca::NaoImplementado,
|
258
|
+
raise Brcobranca::NaoImplementado,
|
259
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
256
260
|
end
|
257
261
|
|
258
262
|
# Informacoes do convenio para o lote
|
@@ -260,7 +264,8 @@ module Brcobranca
|
|
260
264
|
# Este metodo deve ser sobrescrevido na classe do banco
|
261
265
|
#
|
262
266
|
def convenio_lote
|
263
|
-
raise Brcobranca::NaoImplementado,
|
267
|
+
raise Brcobranca::NaoImplementado,
|
268
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
264
269
|
end
|
265
270
|
|
266
271
|
# Codigo do banco
|
@@ -268,7 +273,8 @@ module Brcobranca
|
|
268
273
|
# Este metodo deve ser sobrescrevido na classe do banco
|
269
274
|
#
|
270
275
|
def cod_banco
|
271
|
-
raise Brcobranca::NaoImplementado,
|
276
|
+
raise Brcobranca::NaoImplementado,
|
277
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
272
278
|
end
|
273
279
|
|
274
280
|
# Informacoes da conta do cedente
|
@@ -276,7 +282,8 @@ module Brcobranca
|
|
276
282
|
# Este metodo deve ser sobrescrevido na classe do banco
|
277
283
|
#
|
278
284
|
def info_conta
|
279
|
-
raise Brcobranca::NaoImplementado,
|
285
|
+
raise Brcobranca::NaoImplementado,
|
286
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
280
287
|
end
|
281
288
|
|
282
289
|
# Codigo do convenio
|
@@ -284,14 +291,15 @@ module Brcobranca
|
|
284
291
|
# Este metodo deve ser sobrescrevido na classe do banco
|
285
292
|
#
|
286
293
|
def codigo_convenio
|
287
|
-
raise Brcobranca::NaoImplementado,
|
294
|
+
raise Brcobranca::NaoImplementado,
|
295
|
+
'Sobreescreva este método na classe referente ao banco que você esta criando'
|
288
296
|
end
|
289
297
|
|
290
298
|
# Codigo para protesto
|
291
299
|
#
|
292
300
|
# Sobreescreva caso necessário
|
293
301
|
def codigo_protesto
|
294
|
-
|
302
|
+
'0'
|
295
303
|
end
|
296
304
|
end
|
297
305
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab240
|
@@ -13,6 +14,7 @@ module Brcobranca
|
|
13
14
|
# 14: título Registrado emissão Cedente
|
14
15
|
# 21: título Sem Registro emissão CAIXA
|
15
16
|
attr_accessor :modalidade_carteira
|
17
|
+
|
16
18
|
# identificacao da emissao do boleto (attr na classe base)
|
17
19
|
# opcoes:
|
18
20
|
# ‘1’ = Banco Emite
|
@@ -101,7 +103,7 @@ module Brcobranca
|
|
101
103
|
end
|
102
104
|
|
103
105
|
def exclusivo_servico
|
104
|
-
|
106
|
+
'00'
|
105
107
|
end
|
106
108
|
|
107
109
|
def complemento_trailer
|
@@ -109,7 +111,7 @@ module Brcobranca
|
|
109
111
|
end
|
110
112
|
|
111
113
|
def tipo_documento
|
112
|
-
|
114
|
+
'2'
|
113
115
|
end
|
114
116
|
|
115
117
|
def complemento_p(pagamento)
|
@@ -118,44 +120,50 @@ module Brcobranca
|
|
118
120
|
# uso CAIXA 11
|
119
121
|
# modalidade carteira 2
|
120
122
|
# ident. titulo 15
|
121
|
-
"#{convenio.rjust(6,
|
123
|
+
"#{convenio.rjust(6,
|
124
|
+
'0')}#{''.rjust(11,
|
125
|
+
'0')}#{modalidade_carteira}#{pagamento.nosso_numero.to_s.rjust(15, '0')}"
|
122
126
|
end
|
123
127
|
|
124
128
|
def complemento_r
|
125
129
|
segmento_r = ''
|
126
|
-
segmento_r
|
130
|
+
segmento_r += ''.rjust(50, ' ') # e-mail do sacado 50
|
127
131
|
segmento_r << ''.rjust(11, ' ') # exclusivo FEBRABAN 11
|
128
132
|
segmento_r
|
129
133
|
end
|
130
134
|
|
131
135
|
def numero(pagamento)
|
132
|
-
"#{pagamento.formata_documento_ou_numero(11,
|
136
|
+
"#{pagamento.formata_documento_ou_numero(11, '0')}#{''.rjust(4, ' ')}"
|
133
137
|
end
|
134
138
|
|
135
139
|
def identificacao_titulo_empresa(pagamento)
|
136
|
-
"#{pagamento.formata_documento_ou_numero(11,
|
140
|
+
"#{pagamento.formata_documento_ou_numero(11, '0')}#{''.rjust(14, ' ')}"
|
137
141
|
end
|
138
142
|
|
139
143
|
def data_multa(pagamento)
|
140
144
|
return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
|
145
|
+
|
141
146
|
data_multa = pagamento.data_vencimento + 1
|
142
147
|
data_multa.strftime('%d%m%Y')
|
143
148
|
end
|
144
149
|
|
145
150
|
def codigo_baixa(pagamento)
|
146
|
-
return
|
147
|
-
|
151
|
+
return '1' if pagamento.codigo_protesto.to_s == '3'
|
152
|
+
|
153
|
+
'2'
|
148
154
|
end
|
149
155
|
|
150
156
|
def dias_baixa(pagamento)
|
151
|
-
return
|
152
|
-
|
157
|
+
return '120' if pagamento.codigo_protesto.to_s == '3'
|
158
|
+
|
159
|
+
'000'
|
153
160
|
end
|
154
161
|
|
155
162
|
def data_mora(pagamento)
|
156
|
-
return
|
163
|
+
return ''.rjust(8, '0') unless %w[1 2].include? pagamento.tipo_mora
|
164
|
+
|
157
165
|
data_mora = pagamento.data_vencimento + 1
|
158
|
-
data_mora.strftime(
|
166
|
+
data_mora.strftime('%d%m%Y')
|
159
167
|
end
|
160
168
|
end
|
161
169
|
end
|
@@ -1,10 +1,11 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
module Brcobranca
|
3
4
|
module Remessa
|
4
5
|
module Cnab240
|
5
6
|
class Sicoob < Brcobranca::Remessa::Cnab240::Base
|
7
|
+
attr_accessor :modalidade_carteira, :tipo_formulario, :parcela, :posto
|
6
8
|
|
7
|
-
attr_accessor :modalidade_carteira
|
8
9
|
# identificacao da emissao do boleto (attr na classe base)
|
9
10
|
# opcoes:
|
10
11
|
# ‘1’ = Banco Emite
|
@@ -14,21 +15,17 @@ module Brcobranca
|
|
14
15
|
# opcoes:
|
15
16
|
# ‘1’ = Banco distribui
|
16
17
|
# ‘2’ = Cliente distribui
|
17
|
-
|
18
|
-
attr_accessor :tipo_formulario
|
19
18
|
# Tipo Formulário - 01 posição (15 a 15):
|
20
19
|
# "1" -auto-copiativo
|
21
20
|
# "3" -auto-envelopável
|
22
21
|
# "4" -A4 sem envelopamento
|
23
22
|
# "6" -A4 sem envelopamento 3 vias
|
24
|
-
|
25
|
-
attr_accessor :parcela
|
26
23
|
# Parcela - 02 posições (11 a 12) - "01" se parcela única
|
27
24
|
|
28
|
-
attr_accessor :posto
|
29
25
|
# Mantém a informação do posto de atendimento dentro da agência.
|
30
26
|
|
31
|
-
validates_presence_of :modalidade_carteira, :tipo_formulario, :parcela, :convenio,
|
27
|
+
validates_presence_of :modalidade_carteira, :tipo_formulario, :parcela, :convenio,
|
28
|
+
message: 'não pode estar em branco.'
|
32
29
|
# Remessa 400 - 8 digitos
|
33
30
|
# Remessa 240 - 12 digitos
|
34
31
|
validates_length_of :conta_corrente, maximum: 8, message: 'deve ter 8 dígitos.'
|
@@ -37,13 +34,13 @@ module Brcobranca
|
|
37
34
|
|
38
35
|
def initialize(campos = {})
|
39
36
|
campos = { emissao_boleto: '2',
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
37
|
+
distribuicao_boleto: '2',
|
38
|
+
especie_titulo: '02',
|
39
|
+
tipo_formulario: '4',
|
40
|
+
parcela: '01',
|
41
|
+
modalidade_carteira: '01',
|
42
|
+
forma_cadastramento: '0',
|
43
|
+
posto: '00' }.merge!(campos)
|
47
44
|
super(campos)
|
48
45
|
end
|
49
46
|
|
@@ -93,7 +90,7 @@ module Brcobranca
|
|
93
90
|
''.rjust(20, ' ')
|
94
91
|
end
|
95
92
|
|
96
|
-
|
93
|
+
alias convenio_lote codigo_convenio
|
97
94
|
|
98
95
|
def info_conta
|
99
96
|
# CAMPO TAMANHO
|
@@ -120,12 +117,12 @@ module Brcobranca
|
|
120
117
|
# Qt. Títulos em Cobrança Descontada 6
|
121
118
|
# Vl. Títulos em Carteira Descontada 15 + 2 decimais
|
122
119
|
total_cobranca_simples = "#{quantidade_titulos_cobranca}#{valor_titulos_carteira}"
|
123
|
-
total_cobranca_vinculada =
|
124
|
-
total_cobranca_caucionada =
|
125
|
-
total_cobranca_descontada =
|
120
|
+
total_cobranca_vinculada = ''.rjust(23, '0')
|
121
|
+
total_cobranca_caucionada = ''.rjust(23, '0')
|
122
|
+
total_cobranca_descontada = ''.rjust(23, '0')
|
126
123
|
|
127
124
|
"#{total_cobranca_simples}#{total_cobranca_vinculada}#{total_cobranca_caucionada}"\
|
128
|
-
|
125
|
+
"#{total_cobranca_descontada}".ljust(217, ' ')
|
129
126
|
end
|
130
127
|
|
131
128
|
# Monta o registro trailer do arquivo
|
@@ -146,7 +143,13 @@ module Brcobranca
|
|
146
143
|
# nro de lotes 6
|
147
144
|
# nro de registros(linhas) 6
|
148
145
|
# uso FEBRABAN 211
|
149
|
-
"#{cod_banco}99999#{''.rjust(9,
|
146
|
+
"#{cod_banco}99999#{''.rjust(9,
|
147
|
+
' ')}#{nro_lotes.to_s.rjust(6,
|
148
|
+
'0')}#{sequencial.to_s.rjust(6,
|
149
|
+
'0')}#{''.rjust(6,
|
150
|
+
'0')}#{''.rjust(
|
151
|
+
205, ' '
|
152
|
+
)}"
|
150
153
|
end
|
151
154
|
|
152
155
|
def complemento_p(pagamento)
|
@@ -158,22 +161,21 @@ module Brcobranca
|
|
158
161
|
"#{conta_corrente.rjust(12, '0')}#{digito_conta} #{formata_nosso_numero(pagamento.nosso_numero)}"
|
159
162
|
end
|
160
163
|
|
161
|
-
|
162
164
|
def monta_segmento_r(pagamento, nro_lote, sequencial)
|
163
165
|
segmento_r = '' # CAMPO TAMANHO
|
164
|
-
segmento_r
|
166
|
+
segmento_r += cod_banco # codigo banco 3
|
165
167
|
segmento_r << nro_lote.to_s.rjust(4, '0') # lote de servico 4
|
166
168
|
segmento_r << '3' # lote de servico 1
|
167
169
|
segmento_r << sequencial.to_s.rjust(5, '0') # num. sequencial do registro no lote 5
|
168
170
|
segmento_r << 'R' # cod. segmento 1
|
169
171
|
segmento_r << ' ' # uso exclusivo 1
|
170
172
|
segmento_r << '01' # cod. movimento remessa 2
|
171
|
-
segmento_r <<
|
172
|
-
segmento_r <<
|
173
|
-
segmento_r <<
|
174
|
-
segmento_r <<
|
175
|
-
segmento_r <<
|
176
|
-
segmento_r <<
|
173
|
+
segmento_r << '0' # cod. desconto 2 1
|
174
|
+
segmento_r << ''.rjust(8, '0') # data desconto 2 8
|
175
|
+
segmento_r << ''.rjust(15, '0') # valor desconto 2 15
|
176
|
+
segmento_r << '0' # cod. desconto 3 1
|
177
|
+
segmento_r << ''.rjust(8, '0') # data desconto 3 8
|
178
|
+
segmento_r << ''.rjust(15, '0') # valor desconto 3 15
|
177
179
|
segmento_r << pagamento.codigo_multa # codigo multa 1
|
178
180
|
segmento_r << data_multa(pagamento) # data multa 8
|
179
181
|
segmento_r << pagamento.formata_percentual_multa(15) # valor multa 15
|
@@ -195,6 +197,7 @@ module Brcobranca
|
|
195
197
|
|
196
198
|
def data_multa(pagamento)
|
197
199
|
return ''.rjust(8, '0') if pagamento.codigo_multa == '0'
|
200
|
+
|
198
201
|
pagamento.data_vencimento.strftime('%d%m%Y')
|
199
202
|
end
|
200
203
|
|
@@ -217,7 +220,7 @@ module Brcobranca
|
|
217
220
|
"#{nosso_numero.to_s.rjust(10, '0')}#{parcela}#{modalidade_carteira}#{tipo_formulario} "
|
218
221
|
end
|
219
222
|
|
220
|
-
def dias_baixa(
|
223
|
+
def dias_baixa(_pagamento)
|
221
224
|
''.rjust(3, ' ')
|
222
225
|
end
|
223
226
|
end
|