Class: Brcobranca::Boleto::Hsbc

Inherits:
Base
  • Object
show all
Defined in:
lib/brcobranca/boleto/hsbc.rb

Overview

Banco HSBC

Instance Attribute Summary

Attributes inherited from Base

#aceite, #agencia, #avalista, #avalista_documento, #carteira, #carteira_label, #cedente, #cedente_endereco, #codigo_servico, #conta_corrente, #convenio, #data_documento, #data_processamento, #data_vencimento, #demonstrativo, #descontos_e_abatimentos, #documento_cedente, #documento_numero, #emv, #especie, #especie_documento, #instrucao1, #instrucao2, #instrucao3, #instrucao4, #instrucao5, #instrucao6, #instrucao7, #instrucoes, #local_pagamento, #moeda, #nosso_numero, #quantidade, #sacado, #sacado_documento, #sacado_endereco, #valor, #variacao

Instance Method Summary collapse

Methods inherited from Base

#agencia_dv, #banco_dv, #codigo_barras, #conta_corrente_dv, #fator_vencimento, #logotipo, #nosso_numero_dv, #valor_documento

Methods included from Template::Base

define_template

Methods included from Validations

#errors, included, #invalid?, #valid?

Constructor Details

#initialize(campos = {}) ⇒ Hsbc

Nova instancia do Hsbc

Parameters:

  • campos (Hash) (defaults to: {})


14
15
16
17
# File 'lib/brcobranca/boleto/hsbc.rb', line 14

def initialize(campos = {})
  campos = { carteira: 'CNR' }.merge!(campos)
  super(campos)
end

Instance Method Details

#agencia_conta_boletoString

Número do convênio/contrato do cliente para exibir no boleto.

Examples:

boleto.agencia_conta_boleto #=> "0061900"

Returns:

  • (String)


70
71
72
# File 'lib/brcobranca/boleto/hsbc.rb', line 70

def agencia_conta_boleto
  conta_corrente
end

#bancoString

Codigo do banco emissor (3 dígitos sempre)

Returns:

  • (String)

    3 caracteres numéricos.



22
23
24
# File 'lib/brcobranca/boleto/hsbc.rb', line 22

def banco
  '399'
end

#codigo_barras_segunda_parteString

Segunda parte do código de barras.

Montagem é baseada no tipo de carteira e na presença da data de vencimento<br/> OBS: Somente as carteiras CNR/CSB estão implementadas.<br/>

Returns:

  • (String)

    25 caracteres numéricos.

Raises:



81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/brcobranca/boleto/hsbc.rb', line 81

def codigo_barras_segunda_parte
  case carteira
  when 'CNR'
    dias_julianos = data_vencimento.to_juliano
    "#{conta_corrente}#{nosso_numero}#{dias_julianos}2"
  when 'CSB'
    raise Brcobranca::NaoImplementado, 'Nosso número não definido.' unless @nosso_numero

    "#{nosso_numero}#{agencia}#{conta_corrente}001"
  else
    raise Brcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
  end
end

#nosso_numero=(valor) ⇒ String

Número seqüencial utilizado para identificar o boleto.

Returns:

  • (String)

    13 caracteres numéricos.



28
29
30
# File 'lib/brcobranca/boleto/hsbc.rb', line 28

def nosso_numero=(valor)
  @nosso_numero = valor.to_s.rjust(13, '0') if valor
end

#nosso_numero_boletoString

Nosso número para exibir no boleto.

Examples:

boleto.nosso_numero_boleto #=> "0000000004042847"

Returns:

  • (String)


36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/brcobranca/boleto/hsbc.rb', line 36

def nosso_numero_boleto
  case carteira
  when 'CNR'
    if data_vencimento.is_a?(Date)
      self.codigo_servico = '4'
      dia = data_vencimento.day.to_s.rjust(2, '0')
      mes = data_vencimento.month.to_s.rjust(2, '0')
      ano = data_vencimento.year.to_s[2..3]
      data = "#{dia}#{mes}#{ano}"

      parte_1 = "#{nosso_numero}#{nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{codigo_servico}"
      soma = parte_1.to_i + conta_corrente.to_i + data.to_i
      "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
    else
      errors.add(:data_vencimento, 'não é uma data.')
      raise Brcobranca::BoletoInvalido, self
    end
  when 'CSB'
    @nosso_numero
  else
    raise Brcobranca::NaoImplementado, 'Tipo de carteira não implementado.'
    # TODO: - Verificar outras carteiras.
    # self.codigo_servico = "5"
    # parte_1 = "#{self.nosso_numero}#{self.nosso_numero.modulo11(mapeamento: { 10 => 0 })}#{self.codigo_servico}"
    # soma = parte_1.to_i + self.conta_corrente.to_i
    # numero = "#{parte_1}#{soma.to_s.modulo11(mapeamento: { 10 => 0 })}"
    # numero
  end
end