class CieloDetalhe

Public Class Methods

new(master) click to toggle source
Calls superclass method
# File lib/formatos/cielo/cielo_detalhe.rb, line 4
def initialize master
  super(master, true, true, false)

  @section = Section.new({
    0 => Position.new(1, 2, false, "01", true), # Tipo do Registro
    1 => Position.new(2, 7, true),              # Numero Sequencial
    2 => Position.new(3, 19, true),             # Numero do Cartão
    3 => Position.new(4, 6, false, "000000"),   # Código de Autorização
    4 => Position.new(5, 8, false),             # Data da Venda
    5 => Position.new(6, 1, true),              # Opção da Venda
    6 => Position.new(7, 15, true),             # Valor da venda
    7 => Position.new(8, 3, true),              # Quantidade de Parcelas
    8 => Position.new(9, 15, true),             # Preencher com zeros
    9 => Position.new(10, 15, true),            # Preencher com zeros
    10 => Position.new(11, 15, true),           # Preencher com zeros
    11 => Position.new(12, 15, true),           # Valor da Parcela
    12 => Position.new(13, 7, true),            # Numero do resumo da operação
    13 => Position.new(14, 3, true),            # Preencher com zeros
    14 => Position.new(15, 10, true),           # Numero do estabelecimento
    15 => Position.new(16, 30, false),          # Reservado
    16 => Position.new(17, 2, true),            # Status da venda
    17 => Position.new(18, 8, true),            # Data prevista da liquidação
    18 => Position.new(19, 4, false),           # Validade do cartao
    19 => Position.new(20, 7, true),            # Preencher com zeros
    20 => Position.new(21, 15, true),           # Preencher com zeros
    21 => Position.new(22, 3, false),           # Reservado(Brancos)
    22 => Position.new(23, 4, false),           # Código do erro(Brancos na remessa)
    23 => Position.new(24, 11, false),          # Referencia (Brancos)
    24 => Position.new(25, 19, false),          # Cartao Novo(Brancos)
    25 => Position.new(26, 4, false),           # Vencimento Novo (Brancos)
    26 => Position.new(27, 2, false),           # Reservado(Brancos)
  })
end

Public Instance Methods

get_codigo_autorizacao() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 81
def get_codigo_autorizacao
  self.get_section_value(3)
end
get_codigo_erro() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 117
def get_codigo_erro
  self.get_section_value(22)
end
get_data_liquidacao() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 109
def get_data_liquidacao
  self.get_section_value(17)
end
get_data_venda() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 85
def get_data_venda
  self.get_section_value(4)
end
get_mensagem_erro() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 237
def get_mensagem_erro
  case self.get_codigo_erro
    when "E001"
      "Validar estrutura do Arquivo"
    when "E002"
      "Reveja os dados do cartão"
    when "E005"
      "Problema no seu cadastro na Cielo"
    when "E010"
      "Problema no seu cadastro na Cielo"
    when "E023"
      "Problema no seu cadastro na Cielo"
    when "E024"
      "Tipo de cartão não permitido neste canal"
    when "E044"
      "Data da transação não confere"
    when "E045"
      "Código de autorização não encontrado"
    when "E048"
      "Data de vencimento cartão incorreta"
    when "E054"
      "Estrutura do lote incorreta"
    when "E055"
      "Quantidade de Parcelas invalida"
    when "E056"
      "Transação não permitida para seu cadastro"
    when "E057"
      "Cartão cancelado"
    when "E061"
      "Reveja os dados do cartão"
    when "E094"
      "Transação não permitida para cartão Internacional"
    when "E095"
      "Transação não permitida para cartão Débito"
    when "E097"
      "Parcelado com valor inferior a R$ 5,00"
    when "E101"
      "Transação rejeitada pelo banco Emissor"
    when "E102"
      "Transação rejeitada pelo banco Emissor"
    when "E103"
      "Problema no seu cadastro na Cielo"
    when "E104"
      "Cartão cancelado"
    when "E105"
      "Transação rejeitada pelo banco Emissor"
    when "E107"
      "ransação rejeitada pelo banco Emissor"
    when "E112"
      "Validar Transação e Cartão"
    when "E114"
      "Reveja os dados do cartão"
    when "E141"
      "Cartão cancelado"
    when "E143"
      "Cartão cancelado"
    when "E151"
      "Transação não autorizada pelo banco Emissor"
    when "E154"
      "Data de vencimento cartão incorreta"
    when "E157"
      "Cartão cancelado"
    when "E158"
      "Tipo de cartão não permitido neste canal"
    when "E162"
      "Cartão não permitido para esta transação"
    when "E180"
      "Data da transação não confere"
    when "E182"
      "Código de segurança do cartão inválido"
    when "E191"
      "Banco Emissor sem comunicação"
    when "E192"
      "Aplicável para Cias Aéreas"
    when "E205"
      "Reveja os dados do cartão"
    when "E207"
      "Validar Número de Lote"
    when "E209"
      "Aplicável para Cias Aéreas"
    when "E210"
      "Validar Parcelas"
    when "E211"
      "Aplicável para Cias Aéreas"
    when "E212"
      "Aplicável para Cias Aéreas"
    when "E213"
      "Valor de cancelamento não permitido"
    when "E214"
      "Transação não localizada"
    when "E215"
      "Transação já cancelada"
    when "E216"
      "Transação cancelada anteriormente"
    when "E217"
      "Valor de cancelamento maior venda"
    when "E218"
      "Cancelamento não permitido neste canal"
    when "E219"
      "Número do RO não localizado"
    when "E220"
      "Prazo excedido para cancelar transação"
    when "E900"
      "Tipo de Registro Inválido"
    when "E901"
      "Data do Depósito do Header Inválida"
    when "E902"
      "Número do Resumo de Operações (RO) do Header Inválido"
    when "E903"
      "Número do Estabelecimento do Header Inválido"
    when "E904"
      "Moeda do header Inválida"
    when "E905"
      "Indicador de teste do Header Inválido"
    when "E906"
      "Indicador de venda do Header Inválido"
    when "E911"
      "Número de Comprovante de Venda(CV) Inválido"
    when "E912"
      "Data de Venda Inválida"
    when "E913"
      "Opção de Venda Inválida"
    when "E914"
      "Número do Cartão Inválido"
    when "E915"
      "Valor de Venda Inválido"
    when "E916"
      "Quantidade de Parcelas Inválida"
    when "E917"
      "Valor Financiado Inválido"
    when "E918"
      "Valor de Entrada Inválido"
    when "E919"
      "Valor da Taxa Embarque Inválido"
    when "E920"
      "Valor da Parcela Inválido"
    when "E921"
      "Número do Resumo de Operações (RO) Inválido"
    when "E922"
      "Número do Estabelecimento Inválido"
    when "E923"
      "Validade do Cartão Inválido"
    when "E924"
      "Número do Resumo de Operações (RO) Original Inválido"
    when "E926"
      "Valor do Reembolso Inválido"
    when "E930"
      "Quantidade de Registros do Trailer não confere"
    when "E931"
      "Valor total bruto não confere"
    else
      ""
  end
end
get_mensagem_retorno() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 136
def get_mensagem_retorno
  case self.get_status_venda
    when "00"
      "Transação OK (Transação Aceita)"
    when "01"
      "Erro no arquivo"
    when "02"
      "Código de autorização inválido"
    when "03"
      "Estabelecimento inválido"
    when "04"
      "Lote misturado"
    when "05"
      "Número de parcelas inválido"
    when "06"
      "Diferença de valor no RO"
    when  "07"
      "Número do RO inválido (registro BH)"
    when "08"
      "Valor de entrada inválido"
    when  "09"
      "Valor da taxa de embarque inválido"
    when "10"
      "Valor da parcela inválido"
    when "11"
      "Código de transação inválido"
    when "12"
      "Transação inválida"
    when "13"
      "Valor inválido"
    when "14"
      "Não aplicável"
    when  "15"
      "Valor do cancelamento inválido"
    when "16"
      "Transação original não localizada (para cancelamento)"
    when "17"
      "Nº de itens informados no RO não compatível com os CV’s"
    when "18"
      "Número de referência inválido"
    when "20"
      "Cancelamento para parcelado de transação já cancelada"
    when "21"
      "Valor do cancelamento maior que o valor da venda"
    when "22"
      "Valor do cancelamento maior que o permitido (alçada)"
    when "23"
      "Número do RO original inválido (registro I2)"
    when "42"
      "Cartão cancelado"
    when "54"
      "Não é permitido cancelamento parcial de um plano parcelado que está sendo contestado pelo portador."
    when "56"
      "Tipo de plano de cartão inválido"
    when "59"
      "Tipo cartão inválido"
    when "60"
      "Data inválida"
    when "71"
      "Transação rejeitada pelo banco emissor"
    when "72"
      "Transação rejeitada pelo banco emissor"
    when "73"
      "Cartão com problema - reter o cartão"
    when "74"
      "Autorização negada"
    when "75"
      "Erro"
    when "76"
      "Transação rejeitada pelo banco emissor"
    when "77"
      "Erro de sintaxe - refaça a transação"
    when "78"
      "Não foi encontrada autorização no emissor"
    when "79"
      "Cartão cancelado"
    when "80"
      "Cartão cancelado"
    when "81"
      "Fundos insuficientes"
    when "82"
      "Cartão vencido ou data do vencimento errada"
    when "87"
      "Cartão não permitido"
    when "88"
      "Excedeu o número de transações no período"
    when "89"
      "Mensagem difere da mensagem original"
    when "92"
      "Banco emissor sem comunicação"
    when "93"
      "Cancelamento com mais de 365 dias"
    when "94"
      "Duplicidade de linhas aéreas"
    when "95"
      "Sem saldo em aberto"
    when "99"
      "Outros motivos"
  end
end
get_numero_cartao() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 77
def get_numero_cartao
  self.get_section_value(2)
end
get_numero_cielo() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 97
def get_numero_cielo
  self.get_section_value(14)
end
get_numero_lote() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 93
def get_numero_lote
  self.get_section_value(12)
end
get_reservado() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 101
def get_reservado
  self.get_section_value(15)
end
get_sequencial() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 73
def get_sequencial
  self.get_section_value(1)
end
get_status_venda() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 105
def get_status_venda
  self.get_section_value(16)
end
get_validade_cartao() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 113
def get_validade_cartao
  self.get_section_value(18)
end
get_valor() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 89
def get_valor
  self.get_section_value(6).to_i
end
hard_bounce?() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 132
def hard_bounce?
  !self.success? && !self.soft_bounce?
end
is_valid?() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 522
def is_valid?
  (self.get_sequencial.length > 0     and
  self.get_data_venda.length > 0      and
  self.get_numero_lote.length > 0     and
  self.get_numero_cielo.length > 0    and
  self.get_numero_cartao.length > 0   and
  self.get_validade_cartao.length > 0 and
  self.get_valor > 0)
end
numero_parcelas(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 432
def numero_parcelas(valor = "0")
  self.set_section_value(7, valor)
end
process_section(file) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 41
def process_section file
  self.set_sequencial         file[2..8]
  self.set_numero_cartao      file[9..27]
  self.set_codigo_autorizacao file[28..33]
  self.set_data_venda         file[34..41]
  self.set_opcao_venda        file[42..42]
  self.set_valor_venda        file[43..57]
  self.numero_parcelas        file[58..60]
  self.set_reservado_1        file[61..75]
  self.set_reservado_2        file[76..90]
  self.set_reservado_3        file[91..105]
  self.set_valor_parcela      file[106..120]
  self.set_numero_lote        file[121..127]
  self.set_reservado_4        file[128..130]
  self.set_numero_cielo       file[131..140]
  self.set_reservado_5        file[141..170]
  self.set_status_venda       file[171..172]
  self.set_data_liquidacao    file[173..180]
  self.set_validade_cartao    file[181..184]
  self.set_reservado_6        file[185..191]
  self.set_reservado_7        file[192..206]
  self.set_reservado_8        file[207..209]
  self.set_codigo_erro        file[210..213]
  self.set_reservado_9        file[214..224]
  self.set_cartao_novo        file[225..243]
  self.set_vencimento_novo    file[244..247]
  self.set_reservado_10       file[248..249]
end
set_cartao_novo(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 507
def set_cartao_novo(valor)
  self.set_section_value(24, valor)
end
set_codigo_autorizacao(valor = "000000") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 403
def set_codigo_autorizacao(valor = "000000")
  self.set_section_value(3, valor)
end
set_codigo_erro(valor = "") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 499
def set_codigo_erro(valor = "")
  self.set_section_value(22, valor)
end
set_data_liquidacao(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 472
def set_data_liquidacao(valor = "0")
  self.set_section_value(17, valor)
end
set_data_venda(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 407
def set_data_venda(valor)
  begin
    valor = Date.strptime(valor, "%d%m%Y") if valor.is_a?(String)
    real_data = valor.strftime("%d%m%Y")

    if real_data.length == 8
      self.set_section_value(4, real_data)
    else
      raise "tamanho de data incorreto"
    end

  rescue
    raise "#{get_id}: Data de Geração Inválida
          Valor: #{valor}"
  end
end
set_numero_cartao(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 399
def set_numero_cartao(valor)
  self.set_section_value(2, valor)
end
set_numero_cielo(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 460
def set_numero_cielo(valor)
  self.set_section_value(14, valor)
end
set_numero_lote(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 452
def set_numero_lote(valor)
  self.set_section_value(12, valor)
end
set_opcao_venda(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 424
def set_opcao_venda(valor = "0")
  self.set_section_value(5, valor)
end
set_reservado_1(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 436
def set_reservado_1(valor = "0")
  self.set_section_value(8, valor)
end
set_reservado_10(valor = "") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 515
def set_reservado_10(valor = "")
  self.set_section_value(26, valor)
end
set_reservado_2(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 440
def set_reservado_2(valor = "0")
  self.set_section_value(9, valor)
end
set_reservado_3(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 444
def set_reservado_3(valor = "0")
  self.set_section_value(10, valor)
end
set_reservado_4(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 456
def set_reservado_4(valor = "0")
  self.set_section_value(13, valor)
end
set_reservado_5(valor = "") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 464
def set_reservado_5(valor = "")
  self.set_section_value(15, valor)
end
set_reservado_6(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 487
def set_reservado_6(valor = "0")
  self.set_section_value(19, valor)
end
set_reservado_7(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 491
def set_reservado_7(valor = "0")
  self.set_section_value(20, valor)
end
set_reservado_8(valor = "") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 495
def set_reservado_8(valor = "")
  self.set_section_value(21, valor)
end
set_reservado_9(valor = "") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 503
def set_reservado_9(valor = "")
  self.set_section_value(23, valor)
end
set_sequencial(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 395
def set_sequencial(valor)
  self.set_section_value(1, valor)
end
set_status_venda(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 468
def set_status_venda(valor = "0")
  self.set_section_value(16, valor)
end
set_validade_cartao(valor) click to toggle source

format yymm

# File lib/formatos/cielo/cielo_detalhe.rb, line 477
def set_validade_cartao(valor)
  if valor.is_a? String
    validade = valor[-2..-1] + valor[0..1]
  else
    validade = valor.strftime("%y%m")
  end

  self.set_section_value(18, validade)
end
set_valor_parcela(valor = "0") click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 448
def set_valor_parcela(valor = "0")
  self.set_section_value(11, valor)
end
set_valor_venda(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 428
def set_valor_venda(valor)
  self.set_section_value(6, valor)
end
set_vencimento_novo(valor) click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 511
def set_vencimento_novo(valor)
  self.set_section_value(25, valor)
end
soft_bounce?() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 125
def soft_bounce?
  codes = ["04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "18", "20", "21",
           "22", "23", "54", "77", "81", "88", "95", "99"]

  !self.success? && codes.include?(self.get_status_venda())
end
success?() click to toggle source
# File lib/formatos/cielo/cielo_detalhe.rb, line 121
def success?
  self.get_status_venda() == '00'
end