Class: BrBoleto::Boleto::Base Abstract

Inherits:
ActiveModelBase show all
Includes:
Calculos, HaveConta, HavePagador
Defined in:
lib/br_boleto/boleto/base.rb

Overview

This class is abstract.

Métodos { #nosso_numero, #codigo_de_barras_do_banco}

Métodos para serem escritos nas subclasses (exitem outros opcionais, conforme visto nessa documentação).

Direct Known Subclasses

BancoBrasil, Bradesco, Caixa, Cecred, Itau, Santander, Sicoob, Sicredi

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from HavePagador

#pagador, #pagador=

Methods included from HaveConta

#conta, #conta=, #conta_class

Methods inherited from ActiveModelBase

#assign_attributes, #initialize

Constructor Details

This class inherits a constructor from BrBoleto::ActiveModelBase

Instance Attribute Details

#aceiteObject

Aceitar após o vencimento. Nessa gem utilizamos o campo aceite como Boolean. Obviamente, true para ‘S’ e false/nil para ‘N’.



85
86
87
# File 'lib/br_boleto/boleto/base.rb', line 85

def aceite
  @aceite
end

#codigo_moedaObject

Código da moeda. Campo auto explicativo. Padrão ‘9’ (Real).



40
41
42
# File 'lib/br_boleto/boleto/base.rb', line 40

def codigo_moeda
  @codigo_moeda
end

#data_documentoObject

Data em que o documento foi gerado. Campo auto explicativo.



75
76
77
# File 'lib/br_boleto/boleto/base.rb', line 75

def data_documento
  @data_documento
end

#data_vencimentoObject

Data do vencimento do boleto. Campo auto explicativo.

Campo Obrigatório



16
17
18
# File 'lib/br_boleto/boleto/base.rb', line 16

def data_vencimento
  @data_vencimento
end

#especieObject

Essencial para identificação da moeda em que a operação foi efetuada.

Padrão ‘R$’ (Real).



46
47
48
# File 'lib/br_boleto/boleto/base.rb', line 46

def especie
  @especie
end

#especie_documentoObject

Normalmente se vê neste campo a informação “DM” que quer dizer duplicata mercantil, mas existem inúmeros tipos de espécie, neste caso é aconselhável discutir com o banco qual a espécie de documento será utilizada, a identificação incorreta da espécie do documento não vai impedir que o boleto seja pago e nem que o credito seja efetuado na conta do cliente, mas pode ocasionar na impossibilidade de se protestar o boleto caso venha a ser necessário.

Segue a sigla e descrição do campo especie do documento:

 ---------------------------------
| Sigla  | Descri

Padrão ‘DM’ (Duplicata Mercantil)



71
72
73
# File 'lib/br_boleto/boleto/base.rb', line 71

def especie_documento
  @especie_documento
end

#instrucoes1Object

Campos de instruções. São permitidas até seis linhas de instruções a serem mostradas no boleto



90
91
92
# File 'lib/br_boleto/boleto/base.rb', line 90

def instrucoes1
  @instrucoes1
end

#instrucoes2Object

Campos de instruções. São permitidas até seis linhas de instruções a serem mostradas no boleto



90
91
92
# File 'lib/br_boleto/boleto/base.rb', line 90

def instrucoes2
  @instrucoes2
end

#instrucoes3Object

Campos de instruções. São permitidas até seis linhas de instruções a serem mostradas no boleto



90
91
92
# File 'lib/br_boleto/boleto/base.rb', line 90

def instrucoes3
  @instrucoes3
end

#instrucoes4Object

Campos de instruções. São permitidas até seis linhas de instruções a serem mostradas no boleto



90
91
92
# File 'lib/br_boleto/boleto/base.rb', line 90

def instrucoes4
  @instrucoes4
end

#instrucoes5Object

Campos de instruções. São permitidas até seis linhas de instruções a serem mostradas no boleto



90
91
92
# File 'lib/br_boleto/boleto/base.rb', line 90

def instrucoes5
  @instrucoes5
end

#instrucoes6Object

Campos de instruções. São permitidas até seis linhas de instruções a serem mostradas no boleto



90
91
92
# File 'lib/br_boleto/boleto/base.rb', line 90

def instrucoes6
  @instrucoes6
end

#local_pagamentoObject

Descrição do local do pagamento.



79
80
81
# File 'lib/br_boleto/boleto/base.rb', line 79

def local_pagamento
  @local_pagamento
end

#logoObject

Caminho do logo do banco.



99
100
101
# File 'lib/br_boleto/boleto/base.rb', line 99

def 
  
end

#numero_documentoObject

Número do documento que será mostrado no boleto. Campo de resposabilidade do Cedente e cada banco possui um tamanho esperado.



21
22
23
# File 'lib/br_boleto/boleto/base.rb', line 21

def numero_documento
  @numero_documento
end

#parcelasObject

Quantidade de parcelas que o boleto possui Liberando a possibilidade de edição



103
104
105
# File 'lib/br_boleto/boleto/base.rb', line 103

def parcelas
  @parcelas
end

#valor_documentoObject

Valor total do documento. Campo auto explicativo.

Campo Obrigatório.



34
35
36
# File 'lib/br_boleto/boleto/base.rb', line 34

def valor_documento
  @valor_documento
end

Instance Method Details

#aceite_formatadoString

Se o aceite for ‘true’, retorna ‘S’. Retorna ‘N’, caso contrário.

Returns:

  • (String)


223
224
225
226
227
228
229
# File 'lib/br_boleto/boleto/base.rb', line 223

def aceite_formatado
  if @aceite.present?
    'S'
  else
    'N'
  end
end

#codigo_de_barrasString

Código de Barras

O código de barras contêm exatamente 44 posições nessa sequência:

 ____________________________________________________________
| Posi

Returns:

  • (String)

    Código de barras com 44 posições.



257
258
259
# File 'lib/br_boleto/boleto/base.rb', line 257

def codigo_de_barras
  "#{codigo_de_barras_padrao}#{codigo_de_barras_do_banco}".insert(4, digito_codigo_de_barras)
end

#codigo_de_barras_do_bancoString

Segunda parte do código de barras. Esse campo é específico para cada banco.

Returns:

  • (String)

    25 últimas posições do código de barras.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



276
277
278
# File 'lib/br_boleto/boleto/base.rb', line 276

def codigo_de_barras_do_banco
  raise NotImplementedError.new("Not implemented #codigo_de_barras_do_banco in #{self}.")
end

#codigo_de_barras_padraoString

Primeira parte do código de barras. Essa parte do código de barras é padrão para todos os bancos..

Returns:

  • (String)

    Primeiras 18 posições do código de barras (Não retorna o DAC do código de barras).



266
267
268
# File 'lib/br_boleto/boleto/base.rb', line 266

def codigo_de_barras_padrao
  "#{conta.codigo_banco}#{codigo_moeda}#{fator_de_vencimento}#{valor_formatado_para_codigo_de_barras}"
end

#data_vencimento_deve_ser_uma_dataObject

Verifica e valida se a data do vencimento deve ser uma data válida. Precisa ser uma data para o cálculo do fator do vencimento.



354
355
356
# File 'lib/br_boleto/boleto/base.rb', line 354

def data_vencimento_deve_ser_uma_data
  errors.add(:data_vencimento, :invalid) unless data_vencimento.kind_of?(Date)
end

#default_valuesHash

Opções default.

Caso queira sobrescrever as opções, você pode simplesmente instanciar o objeto passando a opção desejada:

class Bradesco < BrBoleto::Bradesco
end

Bradesco.new do |bradesco|
  bradesco.codigo_moeda      = 'outro_codigo_da_moeda'
  bradesco.especie           = 'outra_especie_que_nao_seja_em_reais'
  bradesco.especie_documento = 'outra_especie_do_documento'
  bradesco.data_documento    = Date.tomorrow
  bradesco.aceite            = false
end

Returns:

  • (Hash)

    Código da Moeda sendo ‘9’ (real). Espécie sendo ‘R$’ (real).



150
151
152
153
154
155
156
157
158
159
# File 'lib/br_boleto/boleto/base.rb', line 150

def default_values
  {
    codigo_moeda:      '9',
    especie:           'R$',
    especie_documento: 'DM',
    local_pagamento:   'PAGÁVEL EM QUALQUER BANCO ATÉ O VENCIMENTO',
    data_documento:    Date.current,
    aceite:            false
  }
end

#digito_codigo_de_barrasString

Dígito verificador do código de barras (DAC).

Por definição da FEBRABAN e do Banco Central do Brasil, na 5º posição do Código de Barras, deve ser indicado obrigatoriamente o “dígito verificador” (DAC), calculado através do módulo 11.

OBS.: Para mais detalhes deste cálculo, veja a descrição em BrBoleto::Calculos::Modulo11FatorDe2a9.

Returns:

  • (String)

    Dígito calculado do código de barras.



291
292
293
# File 'lib/br_boleto/boleto/base.rb', line 291

def digito_codigo_de_barras
  Modulo11FatorDe2a9.new("#{codigo_de_barras_padrao}#{codigo_de_barras_do_banco}")
end

#fator_de_vencimentoString

Fator de vencimento que é calculado a partir de uma data base. Veja FatorVencimento para mais detalhes.

Returns:

  • (String)

    4 caracteres.



236
237
238
# File 'lib/br_boleto/boleto/base.rb', line 236

def fator_de_vencimento
  FatorVencimento.new(data_vencimento)
end

#linha_digitavelString

Representação numérica do código de barras, mais conhecida como linha digitável! :p

A representação numérica do código de barras é composta, por cinco campos. Sendo os três primeiros campos, amarrados por DAC’s (dígitos verificadores), todos calculados pelo módulo 10.

OBS.: Para mais detalhes deste cálculo, veja a descrição em Modulo10.

Linha Digitável

A linha digitável contêm exatamente 47 posições nessa sequência:

 _______________________________________________________________________________________________________
|Campo | Posi

Returns:

  • (String)

    Contêm a representação numérica do código de barras formatado com pontos e espaços.



329
330
331
# File 'lib/br_boleto/boleto/base.rb', line 329

def linha_digitavel
  LinhaDigitavel.new(codigo_de_barras)
end

#nosso_numeroString

O Nosso Número é o número que identifica unicamente um boleto para uma conta. O tamanho máximo do Nosso Número depende do banco e carteira.

Para carteiras registradas, você deve solicitar ao seu banco um intervalo de números para utilização. Quando estiver perto do fim do intervalo, deve solicitar um novo intervalo.

Para carteiras não registradas o Nosso Número é livre. Ao receber o retorno do banco, é através do Nosso Número que será possível identificar os boletos pagos.

Esse campo é específico para cada banco.

Returns:

  • (String)

    Corresponde ao formato específico de cada banco.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



175
176
177
# File 'lib/br_boleto/boleto/base.rb', line 175

def nosso_numero
  raise NotImplementedError.new("Not implemented #nosso_numero in #{self}.")
end

#nosso_numero_retornoString

Esse método deve ser utilizado para salvar o nosso número que será retornado no arquivo de retorno. Foi necessário fazer esse método pois alguns bancos como o Bradesco e Itaú desconsideram o número da carteira no retorno, porém a carteira deve ser apresentada no boleto. Com o bjetivo de facilitar o desenvolvimento para não fazer essa regra da aplicação, foi desenvolvido esse método para que seja salvo o valor desse método na aplicação para que posteriormente a conciliação dos boletos funcione adecuadamente.

Por padrão retorna os núemros e letras do nosso número, na qual é utilizada para a maioria dos bancos. Deve ser sobrescrito para os bancos que utilizam de forma diferente.

O retorno é uma string pois em alguns bancos o DV do nosso número pode ser uma Letra.

Returns:

  • (String)

    999999999 OR 999999999X



198
199
200
# File 'lib/br_boleto/boleto/base.rb', line 198

def nosso_numero_retorno
  "#{nosso_numero}".gsub(/[^\w\d]/i, '')
end

#persisted?False

Seguindo a interface do Active Model.

Returns:

  • (False)


347
348
349
# File 'lib/br_boleto/boleto/base.rb', line 347

def persisted?
  false
end

#to_partial_pathString

Returns a string that identifying the render path associated with the object.

ActionPack uses this to find a suitable partial to represent the object.

Returns:

  • (String)


339
340
341
# File 'lib/br_boleto/boleto/base.rb', line 339

def to_partial_path
  "br_boleto/#{self.class.name.demodulize.underscore}"
end

#valid_numero_documento_maximumObject

VALIDAÇÕES DINÂMICAS #################



114
# File 'lib/br_boleto/boleto/base.rb', line 114

def valid_numero_documento_maximum;  6 end

#valid_valor_documento_tamanho_maximoFloat

Tamanho maximo do valor do documento do boleto. Acredito que não existirá valor de documento nesse valor, porém a biblioteca precisa manter a consistência.

No código de barras o valor do documento precisa ter um tamanho de 8 caracteres para os reais (acrescentando zeros à esquerda), e 2 caracteres nos centavos (acrescentando zeros à esquerda).

Returns:

  • (Float)

    99999999.99



127
# File 'lib/br_boleto/boleto/base.rb', line 127

def valid_valor_documento_tamanho_maximo; 99999999.99 end

#valor_formatado_para_codigo_de_barrasString

Formata o valor do documentado para ser mostrado no código de barras e na linha digitável com 08 dígitos na casa dos Reais e 02 dígitos nas casas dos centavos.

Examples:


Bradesco.new(:valor_documento => 123.45).valor_formatado_para_codigo_de_barras
# => "0000012345"

Returns:

  • (String)

    Precisa retornar 10 dígitos para o código de barras (incluindo os centavos).



212
213
214
215
216
# File 'lib/br_boleto/boleto/base.rb', line 212

def valor_formatado_para_codigo_de_barras
  valor_documento_formatado = (Integer(valor_documento.to_f * 100) / Float(100))
  real, centavos            = valor_documento_formatado.to_s.split(/\./)
  "#{real.rjust(8, '0')}#{centavos.ljust(2, '0')}"
end