class Febraban150A

Constants

ID_SERVICO

Public Class Methods

new(master, versao = Febraban150::VERSAO) click to toggle source
Calls superclass method
# File lib/formatos/febraban150/febraban_150_a.rb, line 10
def initialize(master, versao = Febraban150::VERSAO)
  super(master, true, true, false)

  @versao = versao

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

Public Instance Methods

get_codigo_banco() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 153
def get_codigo_banco
  self.get_section_value(4).to_i
end
get_codigo_convenio() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 145
def get_codigo_convenio
  self.get_section_value(2)
end
get_codigo_remessa() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 141
def get_codigo_remessa
  self.get_section_value(1).to_i
end
get_data_geracao() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 161
def get_data_geracao
  data = self.get_section_value(6)
  Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
end
get_identificacao_servico() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 174
def get_identificacao_servico
  data = self.get_section_value(9)
end
get_nome_banco() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 157
def get_nome_banco
  self.get_section_value(5)
end
get_nome_empresa() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 149
def get_nome_empresa
  self.get_section_value(3)
end
get_numero_sequencial() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 166
def get_numero_sequencial
  data = self.get_section_value(7).to_i
end
get_versao_layout() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 170
def get_versao_layout
  data = self.get_section_value(8).to_i
end
is_valid?() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 102
def is_valid?
  case @versao
    when '04'
      self.is_valid_04?
    when '05'
      self.is_valid_05?
  end
end
process_section(file) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 62
def process_section(file)
  case @versao
    when '04'
      self.processa_arquivo_04(file)
    when '05'
      self.processa_arquivo_05(file)
  end
end
set_codigo_banco(codigo) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 219
def set_codigo_banco codigo
  codigo = codigo.to_i

  if codigo > 0
    self.set_section_value(4, codigo)
  else
    raise "#{get_id}: Código do Banco não pode estar vazio"
  end
end
set_codigo_convenio(code) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 194
def set_codigo_convenio code
  code = code.to_s

  if !code.nil? and
    (code.length > 0 and code.length <= 20)

    self.set_section_value(2, code)
  else
    raise "#{get_id}: Código atribuído pelo Banco, para seu controle interno.
            Este código será informado à Empresa, pelo Banco, antes
            da implantação do serviço de débito automático.
            Valor: #{code}"
  end
end
set_codigo_remessa(code) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 182
def set_codigo_remessa code
  code = code.to_i

  if code == 1 or code == 2
    self.set_section_value(1, code)
  else
    raise "#{get_id}: 1 = Remessa - Enviado pela Empresa para o Banco
            2 = Retorno - Enviado pelo Banco para a Empresa
            Valor: #{code}"
  end
end
set_data_geracao(data) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 239
def set_data_geracao data
  begin
    data = Date.strptime(data, "%Y%m%d") if data.is_a?(String)
    real_data = data.strftime("%Y%m%d")

    if real_data.length == 8
      self.set_section_value(6, real_data)
    else
      raise
    end

  rescue
    raise "#{get_id}: Data de Geração Inválida
            Valor: #{data}"
  end
end
set_identificacao_servico(identificacao) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 278
def set_identificacao_servico identificacao
  identificacao = identificacao.to_s

  if identificacao.length > 0
    self.set_section_value(9, identificacao)
  else
    raise "#{get_id}: Deve ser Débito Automático
            Valor: #{identificacao}"
  end
end
set_nome_banco(nome) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 229
def set_nome_banco nome
  nome = nome.to_s

  if nome.to_s.length > 0
    self.set_section_value(5, nome)
  else
    raise "#{get_id}: Nome do Banco não pode estar vazio"
  end
end
set_nome_empresa(nome) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 209
def set_nome_empresa nome
  nome = nome.to_s

  if nome.to_s.length > 0
    self.set_section_value(3, nome)
  else
    raise "#{get_id}: Nome da Empresa não pode estar vazio"
  end
end
set_numero_sequencial(numero) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 256
def set_numero_sequencial numero
  numero = numero.to_i

  if numero > 0
    self.set_section_value(7, numero)
  else
    raise "#{get_id}: Número Sequencial deve ser positivo e maior que 0
            Valor: #{numero}"
  end
end
set_reservado(reservado) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 289
def set_reservado reservado
  reservado = reservado.to_s
  self.set_section_value(10, reservado)
end
set_versao_layout(versao) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 267
def set_versao_layout versao
  versao = versao.to_i

  if versao > 0
    self.set_section_value(8, versao)
  else
    raise "#{get_id}: Versão deve ser 05 (a partir de 05.05.2008)
            Valor: #{versao}"
  end
end

Protected Instance Methods

is_valid_04?() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 112
def is_valid_04?
  result = (self.get_codigo_remessa > 0         and
            self.get_codigo_convenio.length > 0 and
            self.get_nome_empresa.length > 0    and
            self.get_codigo_banco > 0           and
            self.get_nome_banco.length > 0      and
            !self.get_data_geracao.nil?         and
            self.get_numero_sequencial > 0      and
            self.get_versao_layout > 0          and
            self.get_identificacao_servico.length > 0)
end
is_valid_05?() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 124
def is_valid_05?
  result = (self.get_codigo_remessa > 0         and
            self.get_codigo_convenio.length > 0 and
            self.get_nome_empresa.length > 0    and
            self.get_codigo_banco > 0           and
            self.get_nome_banco.length > 0      and
            !self.get_data_geracao.nil?         and
            self.get_numero_sequencial > 0      and
            self.get_versao_layout > 0          and
            self.get_identificacao_servico.length > 0)
end
monta_versao_04() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 26
def monta_versao_04
  @section = Section.new({
    0 => Position.new(1, 1, false, 'A', true),                  # Código do Registro
    1 => Position.new(2, 1, true),                              # Código Remessa (1-Remessa, 2-Retorno)
    2 => Position.new(3, 20, false),                            # Código de ID enviado pelo Banco
    3 => Position.new(4, 20, false),                            # Nome da Empresa
    4 => Position.new(5, 3, true),                              # Código do Banco
    5 => Position.new(6, 20, false),                            # Nome do Banco
    6 => Position.new(7, 8, true),                              # Data de Geração de Arquivo
    7 => Position.new(8, 6, true),                              # Número Sequencial do Arquivo
    8 => Position.new(9, 2, true, @versao),                     # Versão do Layout (5, desde 05.05.2008)
    9 => Position.new(10, 17, false, Febraban150A::ID_SERVICO), # Identificação ("DÉBITO AUTOMÁTICO")
    10 => Position.new(11, 52, false),                          # Reservado pelo Sistema
  })
end
monta_versao_05() click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 42
def monta_versao_05
  @section = Section.new({
    0 => Position.new(1, 1, false,'A', true),                  # Código do Registro
    1 => Position.new(2, 1, true),                              # Código Remessa (1-Remessa, 2-Retorno)
    2 => Position.new(3, 20, false),                            # Código de ID enviado pelo Banco
    3 => Position.new(4, 20, false),                            # Nome da Empresa
    4 => Position.new(5, 3, true),                              # Código do Banco
    5 => Position.new(6, 20, false),                            # Nome do Banco
    6 => Position.new(7, 8, true),                              # Data de Geração de Arquivo
    7 => Position.new(8, 6, true),                              # Número Sequencial do Arquivo
    8 => Position.new(9, 2, true, @versao),                     # Versão do Layout (5, desde 05.05.2008)
    9 => Position.new(10, 17, false, Febraban150A::ID_SERVICO), # Identificação ("DÉBITO AUTOMÁTICO")
    10 => Position.new(11, 52, false),                          # Reservado pelo Sistema
  })
end
processa_arquivo_04(file) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 72
def processa_arquivo_04(file)
  self.set_codigo_remessa        file[1..1]
  self.set_codigo_convenio       file[2..21]
  self.set_nome_empresa          file[22..41]
  self.set_codigo_banco          file[42..44]
  self.set_nome_banco            file[45..64]
  self.set_data_geracao          file[65..72]
  self.set_numero_sequencial     file[73..78]
  self.set_versao_layout         file[79..80]
  self.set_identificacao_servico file[81..99]
  self.set_reservado             file[98..149]
end
processa_arquivo_05(file) click to toggle source
# File lib/formatos/febraban150/febraban_150_a.rb, line 85
def processa_arquivo_05(file)
  self.set_codigo_remessa        file[1..1]
  self.set_codigo_convenio       file[2..21]
  self.set_nome_empresa          file[22..41]
  self.set_codigo_banco          file[42..44]
  self.set_nome_banco            file[45..64]
  self.set_data_geracao          file[65..72]
  self.set_numero_sequencial     file[73..78]
  self.set_versao_layout         file[79..80]
  self.set_identificacao_servico file[81..99]
  self.set_reservado             file[98..149]
end