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

Caixa, Sicoob

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’.



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

def aceite
  @aceite
end

#codigo_moedaObject

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



44
45
46
# File 'lib/br_boleto/boleto/base.rb', line 44

def codigo_moeda
  @codigo_moeda
end

#conta_correnteObject

Número da Conta corrente. Campo auto explicativo.



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

def conta_corrente
  @conta_corrente
end

#data_documentoObject

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



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

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).



50
51
52
# File 'lib/br_boleto/boleto/base.rb', line 50

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)



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

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



94
95
96
# File 'lib/br_boleto/boleto/base.rb', line 94

def instrucoes1
  @instrucoes1
end

#instrucoes2Object

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



94
95
96
# File 'lib/br_boleto/boleto/base.rb', line 94

def instrucoes2
  @instrucoes2
end

#instrucoes3Object

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



94
95
96
# File 'lib/br_boleto/boleto/base.rb', line 94

def instrucoes3
  @instrucoes3
end

#instrucoes4Object

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



94
95
96
# File 'lib/br_boleto/boleto/base.rb', line 94

def instrucoes4
  @instrucoes4
end

#instrucoes5Object

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



94
95
96
# File 'lib/br_boleto/boleto/base.rb', line 94

def instrucoes5
  @instrucoes5
end

#instrucoes6Object

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



94
95
96
# File 'lib/br_boleto/boleto/base.rb', line 94

def instrucoes6
  @instrucoes6
end

#local_pagamentoObject

Descrição do local do pagamento.



83
84
85
# File 'lib/br_boleto/boleto/base.rb', line 83

def local_pagamento
  @local_pagamento
end

#logoObject

Caminho do logo do banco.



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

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



107
108
109
# File 'lib/br_boleto/boleto/base.rb', line 107

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.



204
205
206
207
208
209
210
# File 'lib/br_boleto/boleto/base.rb', line 204

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


238
239
240
# File 'lib/br_boleto/boleto/base.rb', line 238

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.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



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

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..



247
248
249
# File 'lib/br_boleto/boleto/base.rb', line 247

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.



335
336
337
# File 'lib/br_boleto/boleto/base.rb', line 335

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


154
155
156
157
158
159
160
161
162
163
# File 'lib/br_boleto/boleto/base.rb', line 154

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.



272
273
274
# File 'lib/br_boleto/boleto/base.rb', line 272

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.



217
218
219
# File 'lib/br_boleto/boleto/base.rb', line 217

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


310
311
312
# File 'lib/br_boleto/boleto/base.rb', line 310

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.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



179
180
181
# File 'lib/br_boleto/boleto/base.rb', line 179

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

#persisted?False

Seguindo a interface do Active Model.



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

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.



320
321
322
# File 'lib/br_boleto/boleto/base.rb', line 320

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

#valid_numero_documento_maximumObject

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



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

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).



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

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"


193
194
195
196
197
# File 'lib/br_boleto/boleto/base.rb', line 193

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