Class: Febraban150F

Inherits:
FormatSection
  • Object
show all
Defined in:
lib/formatos/febraban150/febraban_150_f.rb

Overview



Retorno do Débito Automático - Banco

Instance Method Summary collapse

Constructor Details

#initialize(master, versao = Febraban150::VERSAO) ⇒ Febraban150F

Returns a new instance of Febraban150F.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 6

def initialize(master, versao = Febraban150::VERSAO)
  super(master, true, false)

  @versao = versao

  case @versao
    when '04'
      self.monta_versao_04
    when '05'
      self.monta_versao_05
    else
      raise "Seção F: Versão não suportada: #{@versao}"
  end
end

Instance Method Details

#get_agencia_debitoObject



143
144
145
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 143

def get_agencia_debito
  self.get_section_value(2)
end

#get_cod_movimentoObject



176
177
178
179
180
181
182
183
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 176

def get_cod_movimento
  case @versao
    when '04'
      self.get_section_value(9).to_i
    when '05'
      self.get_section_value(11).to_i
  end
end

#get_codigo_retornoObject



160
161
162
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 160

def get_codigo_retorno
  self.get_section_value(6).to_i
end

#get_data_vencimento_debitoObject



151
152
153
154
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 151

def get_data_vencimento_debito
  data = self.get_section_value(4)
  Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
end

#get_id_clienteObject



172
173
174
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 172

def get_id_cliente
  self.get_section_value(9)
end

#get_id_cliente_bancoObject



147
148
149
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 147

def get_id_cliente_banco
  self.get_section_value(3)
end

#get_id_cliente_empresaObject



139
140
141
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 139

def get_id_cliente_empresa
  self.get_section_value(1)
end

#get_mensagem_retornoObject



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 198

def get_mensagem_retorno
  case self.get_codigo_retorno
  when 0
    "Débito efetuado"
  when 1
    "Débito não efetuado - Insuficiência de fundos"
  when 2
    "Débito não efetuado - Conta não cadastrada"
  when 4
    "Débito não efetuado - Outras restrições"
  when 5
    "Débito não efetuado – valor do débito excede valor limite aprovado"
  when 10
    "Débito não efetuado - Agência em regime de encerramento"
  when 12
    "Débito não efetuado - Valor inválido"
  when 13
    "Débito não efetuado - Data de lançamento inválida"
  when 14
    "Débito não efetuado - Agência inválida"
  when 15
    "Débito não efetuado - conta inválida"
  when 18
    "Débito não efetuado - Data do débito anterior à do processamento"
  when 19
    "Débito não efetuado – Agência/Conta não pertence ao CPF/CNPJ informado"
  when 20
    "Débito não efetuado – conta conjunta não solidária"
  when 30
    "Débito não efetuado - Sem contrato de débito automático"
  when 31
    "Débito efetuado em data diferente da data informada – feriado na praça de débito"
  when 96
    "Manutenção do Cadastro"
  when 97
    "Cancelamento - Não encontrado"
  when 98
    "Cancelamento - Não efetuado, fora do tempo hábil"
  when 99
    "Cancelamento - cancelado conforme solicitação"
  end
end

#get_obs_empresaObject



164
165
166
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 164

def get_obs_empresa
  self.get_section_value(7)
end

#get_tipo_id_clienteObject



168
169
170
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 168

def get_tipo_id_cliente
  self.get_section_value(8).to_i
end

#get_valorObject



156
157
158
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 156

def get_valor
  self.get_section_value(5).to_i
end

#hard_bounce?Boolean

Returns:

  • (Boolean)


194
195
196
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 194

def hard_bounce?
  !self.success? && !self.soft_bounce?
end

#is_valid?Boolean

Returns:

  • (Boolean)


98
99
100
101
102
103
104
105
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 98

def is_valid?
  case @versao
    when '04'
      self.is_valid_04?
    when '05'
      self.is_valid_05?
  end
end

#process_section(file) ⇒ Object



58
59
60
61
62
63
64
65
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 58

def process_section(file)
  case @versao
    when '04'
      self.processa_arquivo_04(file)
    when '05'
      self.processa_arquivo_05(file)
  end
end

#set_agencia_debito(agencia_debito) ⇒ Object



256
257
258
259
260
261
262
263
264
265
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 256

def set_agencia_debito agencia_debito
  agencia_debito = agencia_debito.to_s

  if agencia_debito.length > 0
    self.set_section_value(2, agencia_debito)
  else
    raise "#{self.get_id}: Agência do Débito não pode estar vazia
            Valor: #{agencia_debito}"
  end
end

#set_cod_movimento(cod_movimento) ⇒ Object



359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 359

def set_cod_movimento cod_movimento
  cod_movimento = cod_movimento.to_i

  if cod_movimento == 0 or cod_movimento == 1
    case @versao
      when '04'
        self.set_section_value(9, cod_movimento)
      when '05'
        self.set_section_value(11, cod_movimento)
    end
  else
    raise "#{self.get_id}: Código de Movimentação deve ser de Débito Nacional ou Cnacelamento:
            0 = Débito Normal
            1 = Cancelamento (exclusão) de lançamento enviado anteriormente para o Banco
            Valor: #{cod_movimento}"
  end
end

#set_codigo_retorno(codigo) ⇒ Object



301
302
303
304
305
306
307
308
309
310
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 301

def set_codigo_retorno codigo
  numero = codigo.to_i

  if numero >= 0 and numero <= 99
    self.set_section_value(6, codigo)
  else
    raise "#{self.get_id}: Valor deve ser positivo e maior que 0
            Valor: #{valor}"
  end
end

#set_data_vencimento_debito(data_vencimento) ⇒ Object



278
279
280
281
282
283
284
285
286
287
288
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 278

def set_data_vencimento_debito data_vencimento
    data_vencimento = Date.strptime(data_vencimento, "%Y%m%d") if data_vencimento.is_a?(String)
    real_data = data_vencimento.strftime("%Y%m%d")

    if real_data.length == 8
    self.set_section_value(4, real_data)
  else
    raise "#{self.get_id}: Data de Vencimento não pode estar vazia
            Valor: #{data_vencimento}"
  end
end

#set_id_cliente(id_cliente) ⇒ Object



335
336
337
338
339
340
341
342
343
344
345
346
347
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 335

def set_id_cliente id_cliente
  id_cliente = id_cliente.to_s
  id_cliente.to_i

  if id_cliente.length >= 13 or id_cliente.length == 0
    self.set_section_value(9, id_cliente)
  else
    raise "#{self.get_id}: Identificação do Cliente deve ser CPF ou CNPJ:
            CNPJ: 999999999 = Número, 9999 = Filial, e 99 = DV
            CPF: 0000999999999 = Número, 99 = DV
            Valor: #{id_cliente}"
  end
end

#set_id_cliente_banco(id_cliente_banco) ⇒ Object



267
268
269
270
271
272
273
274
275
276
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 267

def set_id_cliente_banco id_cliente_banco
  id_cliente_banco = id_cliente_banco.to_s

  if id_cliente_banco.length > 0
    self.set_section_value(3, id_cliente_banco)
  else
    raise "#{self.get_id}: Identificação do Cliente do Banco não pode estar vazio
            Valor: #{id_cliente_banco}"
  end
end

#set_id_cliente_empresa(id_cliente_empresa) ⇒ Object



245
246
247
248
249
250
251
252
253
254
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 245

def set_id_cliente_empresa id_cliente_empresa
  id_cliente_empresa = id_cliente_empresa.to_s

  if id_cliente_empresa.length > 0
    self.set_section_value(1, id_cliente_empresa)
  else
    raise "#{self.get_id}: Identificação do Cliente da Empresa não pode estar vazio
            Valor: #{id_cliente_empresa}"
  end
end

#set_obs_empresa(obs_empresa) ⇒ Object



312
313
314
315
316
317
318
319
320
321
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 312

def set_obs_empresa obs_empresa
  obs_empresa = obs_empresa.to_s

  if obs_empresa.length > 0
    self.set_section_value(7, obs_empresa)
  else
    raise "#{self.get_id}: Observação da Empresa não pode estar vazia
            Valor: #{obs_empresa}"
  end
end

#set_reservado(reservado) ⇒ Object



349
350
351
352
353
354
355
356
357
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 349

def set_reservado reservado
  reservado = reservado.to_s
  case @versao
    when '04'
      self.set_section_value(8, reservado)
    when '05'
      self.set_section_value(10, reservado)
  end
end

#set_tipo_id_cliente(tipo_id_cliente) ⇒ Object



323
324
325
326
327
328
329
330
331
332
333
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 323

def set_tipo_id_cliente tipo_id_cliente
  tipo_id_cliente = tipo_id_cliente.to_i

  if tipo_id_cliente == 1 or tipo_id_cliente == 2
    self.set_section_value(8, tipo_id_cliente)
  else
    raise "#{self.get_id}: Tipo de Identificação do Cliente deve ser:
            1 - CNPJ; 2 - CPF
            Valor: #{tipo_id_cliente}"
  end
end

#set_valor(valor) ⇒ Object



290
291
292
293
294
295
296
297
298
299
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 290

def set_valor valor
  valor = valor.to_i

  if valor > 0
    self.set_section_value(5, valor)
  else
    raise "#{self.get_id}: Valor deve ser positivo e maior que 0
            Valor: #{valor}"
  end
end

#soft_bounce?Boolean

Returns:

  • (Boolean)


189
190
191
192
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 189

def soft_bounce?
  codes = [1, 5, 18, 31]
  !self.success? && codes.include?(self.get_codigo_retorno())
end

#success?Boolean

Returns:

  • (Boolean)


185
186
187
# File 'lib/formatos/febraban150/febraban_150_f.rb', line 185

def success?
  self.get_codigo_retorno() == 0
end