Class: BrBoleto::Boleto::Base Abstract

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

Overview

This class is abstract.

Métodos { #codigo_banco, #digito_codigo_banco, #agencia_codigo_cedente, #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

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ActiveModelBase

#assign_attributes

Constructor Details

#initialize(options = {}, &block) ⇒ Base

Passing the attributes as Hash or block

For the options, waiting for the ActiveModel 4 and the ActiveModel::Model. :)

Exemplos

O recomendado é usar os boletos herdando de seu respectivo banco. Por exemplo:

class Sicoob < BrBoleto::Sicoob
end

Agora você pode emitir um boleto usando a classe criada acima:

Sicoob.new(conta_corrente: '89755', agencia: '0097', :carteira => '195')

Você pode usar blocos se quiser:

Sicoob.new do |boleto|
  boleto.conta_corrente   = '89755'
  boleto.agencia          = '0097'
  boleto.carteira         = '198'
  boleto.numero_documento = '12345678'
  boleto.codigo_cedente   = '909014'
end

Parameters:

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

    Passing a hash accessing the attributes of the self.

  • block (Proc)

    Optional params. Passing a block accessing the attributes of the self.

Options Hash (options):

  • :cedente (String)
  • :codigo_cedente (String)
  • :documento_cedente (String)
  • :endereco_cedente (String)
  • :conta_corrente (String)
  • :agencia (String)
  • :data_vencimento (Date)
  • :numero_documento (String)
  • :valor_documento (Float)
  • :codigo_moeda (String)
  • :especie (String)
  • :especie_documento (String)
  • :sacado (String)
  • :documento_sacado (String)

Yields:

  • (_self)

Yield Parameters:



264
265
266
267
268
269
270
# File 'lib/br_boleto/boleto/base.rb', line 264

def initialize(options={}, &block)
  default_values.merge(options).each do |attribute, value|
    send("#{attribute}=", value) if respond_to?("#{attribute}=")
  end

  yield(self) if block_given?
end

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



182
183
184
# File 'lib/br_boleto/boleto/base.rb', line 182

def aceite
  @aceite
end

#agenciaString

Returns 4 caracteres.

Returns:

  • (String)

    4 caracteres



96
97
98
# File 'lib/br_boleto/boleto/base.rb', line 96

def agencia
  @agencia
end

#carteiraString

Força a carteira a retornar o valor como string

Returns:

  • (String)


92
93
94
# File 'lib/br_boleto/boleto/base.rb', line 92

def carteira
  @carteira
end

#cedenteObject

Nome/Razão social que aparece no campo ‘Cedente’ no boleto.



12
13
14
# File 'lib/br_boleto/boleto/base.rb', line 12

def cedente
  @cedente
end

#codigo_cedenteString

Formatação para o código do cedente conforme o tamanho definido por cada banco Perceba que é obrigatório ter o metodo self.tamanho_maximo_codigo_cedente implementado na classe de cada banco

Returns:

  • (String)


19
20
21
# File 'lib/br_boleto/boleto/base.rb', line 19

def codigo_cedente
  @codigo_cedente
end

#codigo_moedaObject

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



111
112
113
# File 'lib/br_boleto/boleto/base.rb', line 111

def codigo_moeda
  @codigo_moeda
end

#conta_correnteObject

Número da Conta corrente. Campo auto explicativo.



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

def conta_corrente
  @conta_corrente
end

#data_documentoObject

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



146
147
148
# File 'lib/br_boleto/boleto/base.rb', line 146

def data_documento
  @data_documento
end

#data_vencimentoObject

Data do vencimento do boleto. Campo auto explicativo.

Campo Obrigatório



55
56
57
# File 'lib/br_boleto/boleto/base.rb', line 55

def data_vencimento
  @data_vencimento
end

#documento_cedenteObject

Retorna o documento do cedente com tamanho 0, 11 ou 14 caracteres Sempre retorna o valor sem a formatação

Returns:

  • String



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

def documento_cedente
  @documento_cedente
end

#documento_sacadoObject

Retorna o documento do sacado com tamanho 0, 11 ou 14 caracteres Sempre retorna o valor sem a formatação

Returns:

  • String



164
165
166
# File 'lib/br_boleto/boleto/base.rb', line 164

def documento_sacado
  @documento_sacado
end

#endereco_cedenteObject

Deve ser informado o endereço completo do Cedente. Se o título possuir a figura de Sacador Avalista o endereço informado deverá ser do Sacador Avalista, conforme Lei Federal 12.039 de 01/10/2009.

Campo Obrigatório



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

def endereco_cedente
  @endereco_cedente
end

#endereco_sacadoObject

Endereço do sacado.

OBS.: Esse campo não possui validação do campo. Caso você precise imeplemente na subclasse.

Esse campo serve apenas para mostrar no boleto no campo “Sacado”.



172
173
174
# File 'lib/br_boleto/boleto/base.rb', line 172

def endereco_sacado
  @endereco_sacado
end

#especieObject

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

Padrão ‘R$’ (Real).



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

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)



142
143
144
# File 'lib/br_boleto/boleto/base.rb', line 142

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



187
188
189
# File 'lib/br_boleto/boleto/base.rb', line 187

def instrucoes1
  @instrucoes1
end

#instrucoes2Object

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



187
188
189
# File 'lib/br_boleto/boleto/base.rb', line 187

def instrucoes2
  @instrucoes2
end

#instrucoes3Object

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



187
188
189
# File 'lib/br_boleto/boleto/base.rb', line 187

def instrucoes3
  @instrucoes3
end

#instrucoes4Object

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



187
188
189
# File 'lib/br_boleto/boleto/base.rb', line 187

def instrucoes4
  @instrucoes4
end

#instrucoes5Object

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



187
188
189
# File 'lib/br_boleto/boleto/base.rb', line 187

def instrucoes5
  @instrucoes5
end

#instrucoes6Object

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



187
188
189
# File 'lib/br_boleto/boleto/base.rb', line 187

def instrucoes6
  @instrucoes6
end

#local_pagamentoObject

Descrição do local do pagamento.



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

def local_pagamento
  @local_pagamento
end

#logoObject

Caminho do logo do banco.



196
197
198
# File 'lib/br_boleto/boleto/base.rb', line 196

def 
  
end

#numero_documentoString

Returns:

  • (String)


60
61
62
# File 'lib/br_boleto/boleto/base.rb', line 60

def numero_documento
  @numero_documento
end

#sacadoObject

Nome do sacado.

O sacado é a pessoa para o qual o boleto está sendo emitido, podemos resumir dizendo que o sacado é o cliente do Cedente, ou aquele para o qual uma determina mercadoria foi vendida e o pagamento desta será efetuado por meio de boleto de cobrança.

Campo Obrigatório.



156
157
158
# File 'lib/br_boleto/boleto/base.rb', line 156

def sacado
  @sacado
end

#valor_documentoObject

Valor total do documento. Campo auto explicativo.

Campo Obrigatório.



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

def valor_documento
  @valor_documento
end

Class Method Details

.tamanho_maximo_agenciaObject

Esses métodos servem apenas para questão de testes Não são utilizados nas subclasses. Devem obrigatóriamente ser sobrescritos nas subclasses



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

def self.tamanho_maximo_agencia
  4
end

.tamanho_maximo_codigo_cedenteObject



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

def self.tamanho_maximo_codigo_cedente
  6
end

.tamanho_maximo_numero_documentoObject



342
343
344
# File 'lib/br_boleto/boleto/base.rb', line 342

def self.tamanho_maximo_numero_documento
  6
end

.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



208
209
210
# File 'lib/br_boleto/boleto/base.rb', line 208

def self.valor_documento_tamanho_maximo
  99999999.99
end

Instance Method Details

#aceite_formatadoString

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

Returns:

  • (String)


422
423
424
425
426
427
428
# File 'lib/br_boleto/boleto/base.rb', line 422

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

#agencia_codigo_cedenteString

Agência, código do cedente ou nosso número. Esse campo é específico para cada banco.

Returns:

  • (String)
    • Corresponde aos campos “Agencia / Codigo do Cedente”.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



361
362
363
# File 'lib/br_boleto/boleto/base.rb', line 361

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

#carteira_formatadaString

Embora o padrão seja mostrar o número da carteira no boleto, alguns bancos requerem que seja mostrado um valor diferente na carteira. Para essas exceções, sobrescreva esse método na subclasse.

Returns:

  • (String)

    retorna o número da carteira



413
414
415
# File 'lib/br_boleto/boleto/base.rb', line 413

def carteira_formatada
  carteira
end

#codigo_bancoString

Código do Banco. Esse campo é específico para cada banco.

Returns:

  • (String)

    Corresponde ao código do banco.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



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

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

#codigo_banco_formatadoString

Formata o código do banco com o dígito do código do banco. Método usado para o campo de código do banco localizado no cabeçalho do boleto.

Returns:

  • (String)


351
352
353
# File 'lib/br_boleto/boleto/base.rb', line 351

def codigo_banco_formatado
  "#{codigo_banco}-#{digito_codigo_banco}"
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.



456
457
458
# File 'lib/br_boleto/boleto/base.rb', line 456

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.



475
476
477
# File 'lib/br_boleto/boleto/base.rb', line 475

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



465
466
467
# File 'lib/br_boleto/boleto/base.rb', line 465

def codigo_de_barras_padrao
  "#{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.



598
599
600
# File 'lib/br_boleto/boleto/base.rb', line 598

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



289
290
291
292
293
294
295
296
297
298
# File 'lib/br_boleto/boleto/base.rb', line 289

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            => true
  }
end

#deve_validar_agencia?True

Método usado para verificar se deve realizar a validação de tamanho do campo ‘agência’. Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações.

Returns:

  • (True)


555
556
557
# File 'lib/br_boleto/boleto/base.rb', line 555

def deve_validar_agencia?
  true
end

#deve_validar_carteira?True

Método usado para verificar se deve realizar a validação do campo ‘carteira’. Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações.

Returns:

  • (True)


591
592
593
# File 'lib/br_boleto/boleto/base.rb', line 591

def deve_validar_carteira?
  true
end

#deve_validar_codigo_cedente?True

Método usado para verificar se deve realizar a validação de tamanho do campo ‘codigo_cedente’. Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações.

Returns:

  • (True)


573
574
575
# File 'lib/br_boleto/boleto/base.rb', line 573

def deve_validar_codigo_cedente?
  true
end

#deve_validar_conta_corrente?True

Método usado para verificar se deve realizar a validação de tamanho do campo ‘conta_corrente’. Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações.

Returns:

  • (True)


564
565
566
# File 'lib/br_boleto/boleto/base.rb', line 564

def deve_validar_conta_corrente?
  true
end

#deve_validar_numero_documento?True

Método usado para verificar se deve realizar a validação de tamanho do campo ‘numero_documento’. Sobrescreva esse método na subclasse, caso você mesmo queira fazer as validações.

Returns:

  • (True)


582
583
584
# File 'lib/br_boleto/boleto/base.rb', line 582

def deve_validar_numero_documento?
  true
end

#digito_codigo_bancoString

Dígito do código do banco. Esse campo é específico para cada banco.

Returns:

  • (String)

    Corresponde ao dígito do código do banco.

Raises:

  • (NotImplementedError)

    Precisa implementar nas subclasses.



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

def digito_codigo_banco
  raise NotImplementedError.new("Not implemented #digito_codigo_banco in #{self}.")
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.



490
491
492
# File 'lib/br_boleto/boleto/base.rb', line 490

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

#documento_cedente_formatadoObject

Retorna o documento do cedente formatado

Returns:

  • String



656
657
658
# File 'lib/br_boleto/boleto/base.rb', line 656

def documento_cedente_formatado
  BrBoleto::Helper::CpfCnpj.new(documento_cedente).com_formatacao
end

#documento_cedente_formatado_com_labelObject

Retorna o documento do cedente formatado com label de CNPJ ou CPF

Returns:

  • String



664
665
666
# File 'lib/br_boleto/boleto/base.rb', line 664

def documento_cedente_formatado_com_label
  BrBoleto::Helper::CpfCnpj.new(documento_cedente).formatado_com_label
end

#documento_sacado_formatadoObject

Retorna o documento do sacado formatado

Returns:

  • String



630
631
632
# File 'lib/br_boleto/boleto/base.rb', line 630

def documento_sacado_formatado
  BrBoleto::Helper::CpfCnpj.new(documento_sacado).com_formatacao
end

#documento_sacado_formatado_com_labelObject

Retorna o documento do sacado formatado com label de CNPJ ou CPF

Returns:

  • String



638
639
640
# File 'lib/br_boleto/boleto/base.rb', line 638

def documento_sacado_formatado_com_label
  BrBoleto::Helper::CpfCnpj.new(documento_sacado).formatado_com_label
end

#fator_de_vencimentoString

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

Returns:

  • (String)

    4 caracteres.



435
436
437
# File 'lib/br_boleto/boleto/base.rb', line 435

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.



528
529
530
# File 'lib/br_boleto/boleto/base.rb', line 528

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.



379
380
381
# File 'lib/br_boleto/boleto/base.rb', line 379

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

#persisted?False

Seguindo a interface do Active Model.

Returns:

  • (False)


546
547
548
# File 'lib/br_boleto/boleto/base.rb', line 546

def persisted?
  false
end

#tipo_cobranca_formatadaObject

Tipo de cobrança Ex: :com_registro, :sem_registro, :caucionada A implementação para esse valor deve ser implementada para cada banco, pois cada banco tem uma maneira diferente para saber o tipo de cobrança.

Obs: O VALOR DESSE METODO NÃO INFLUÊNCIA NA GERAÇÃO DO BOLETO É APENAS PARA QUESTÃO DE INFORMAÇÃO CASO PRECISE PARA OUTRAS COISAS, POR EXEMPLO: É UTILIZADO NOS PAGAMENTOS DAS REMESSAS, MAIS ESPECIFICAMENTE NO COMPLEMENTO TRAILER DO LOTE PARA O BANCO SICOOB NO CNAB 240.



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

def tipo_cobranca_formatada
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)


538
539
540
# File 'lib/br_boleto/boleto/base.rb', line 538

def to_partial_path
  "br_boleto/#{self.class.name.demodulize.underscore}"
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).



393
394
395
396
397
# File 'lib/br_boleto/boleto/base.rb', line 393

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