Class: BoletoBancario::Core::Bradesco

Inherits:
Boleto
  • Object
show all
Defined in:
lib/boleto_bancario/core/bradesco.rb

Overview

Implementação de emissão de boleto bancário pelo Bradesco.

Documentação Implementada

A documentação na qual essa implementação foi baseada está localizada na pasta ‘documentacoes_dos_boletos/bradesco’ dentro dessa biblioteca.

Contrato das classes de emissão de boletos

Para ver o “contrato” da Emissão de Boletos (geração de código de barras, linha digitável, etc) veja a classe BoletoBancario::Core::Boleto.

Carteiras suportadas

Segue abaixo as carteiras suportadas do bradesco seguindo a documentação:

 _________________________________________________________________________
| Carteira | Descrição                     | Testada/Homologada no banco |
|   03     | Sem registro                  | Esperando Contribuição      |
|   06     | Sem registro                  | Esperando Contribuição      |
|   09     | Com registro                  | Esperando Contribuição      |
|   19     | Com registro                  | Esperando Contribuição      |
|   21     | Cobrança Interna com registro | Esperando Contribuição      |
|   22     | Cobrança Interna sem registro | Esperando Contribuição      |
--------------------------------------------------------------------------

OBS.: Seja um contribuidor dessa gem. Contribua para homologar os boletos e as devidas carteiras junto ao banco Bradesco.

Exemplos

O recomendado é criar uma subclasse de BoletoBancario::Bradesco

class Bradesco < BoletoBancario::Bradesco
end

E a partir daí usar a sua classe para emitir o boleto:

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

Validações

A classe Bradesco possui suas próprias validações. Primeiramente, antes de renderizar qualquer boleto você precisar verificar se esse boleto é válido:

@bradesco = Bradesco.new
if @bradesco.valid?
   # render @bradesco
else
   # ...
end

Se você quiser sobrescrever alguma validação dessa classe a gem de boleto bancário possui alguns modos de fazer isso.

Sobrescrevendo validações

Caso você precise mudar as validações, você pode sobrescrever alguns métodos que possuem “Magic numbers”. Foi colocado dessa forma, já que os bancos mudam bastante esse tipo de validação. Por exemplo, atualmente a conta corrente é validado com ‘5’ como máximo de tamanho. Caso você queira que valide como 6, mude conforme abaixo:

class Bradesco < BoletoBancario::Bradesco
  def self.tamanho_maximo_conta_corrente
    6
  end
end

Obs.: Mudar as regras de validação podem influenciar na emissão do boleto em si. Você precisará analisar o efeito no #codigo_de_barras, #nosso_numero e na #linha_digitável (ambos podem ser sobreescritos também).

Caso exista algum cenário de sobrescrita de validação contate o dono dessa gem pelo github e conte um pouco mais sobre esses cenários.

Instance Attribute Summary

Attributes inherited from Boleto

#aceite, #cedente, #codigo_cedente, #codigo_moeda, #data_documento, #data_vencimento, #documento_cedente, #documento_sacado, #endereco_cedente, #endereco_sacado, #especie, #especie_documento, #instrucoes1, #instrucoes2, #instrucoes3, #instrucoes4, #instrucoes5, #instrucoes6, #local_pagamento, #logo, #sacado, #valor_documento

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Boleto

#aceite_formatado, #codigo_banco_formatado, #codigo_de_barras, #codigo_de_barras_padrao, #data_vencimento_deve_ser_uma_data, #default_options, #deve_validar_agencia?, #deve_validar_carteira?, #deve_validar_codigo_cedente?, #deve_validar_conta_corrente?, #deve_validar_numero_documento?, #digito_codigo_de_barras, #fator_de_vencimento, #initialize, #linha_digitavel, #persisted?, #to_partial_path, valor_documento_tamanho_maximo, #valor_formatado_para_codigo_de_barras

Constructor Details

This class inherits a constructor from BoletoBancario::Core::Boleto

Class Method Details

.carteiras_suportadasArray

Carteiras suportadas.

Método criado para validar se a carteira informada é suportada.

Returns:

  • (Array)


121
122
123
# File 'lib/boleto_bancario/core/bradesco.rb', line 121

def self.carteiras_suportadas
  %w[03 06 09 19 21 22]
end

.tamanho_maximo_agenciaFixnum

Tamanho máximo de uma agência no Banco Bradesco. Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.

Returns:

  • (Fixnum)

    4



100
101
102
# File 'lib/boleto_bancario/core/bradesco.rb', line 100

def self.tamanho_maximo_agencia
  4
end

.tamanho_maximo_conta_correnteFixnum

Tamanho máximo de uma conta corrente no Banco Bradesco. Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.

Returns:

  • (Fixnum)

    7



91
92
93
# File 'lib/boleto_bancario/core/bradesco.rb', line 91

def self.tamanho_maximo_conta_corrente
  7
end

.tamanho_maximo_numero_documentoFixnum

Tamanho máximo do número do documento emitido no Boleto. O tamanho máximo é justamente 8 porque no código de barras só é permitido 8 posições para este campo.

Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.

Returns:

  • (Fixnum)

    11



111
112
113
# File 'lib/boleto_bancario/core/bradesco.rb', line 111

def self.tamanho_maximo_numero_documento
  11
end

Instance Method Details

#agenciaString

Returns 4 caracteres.

Returns:

  • (String)

    4 caracteres



173
174
175
# File 'lib/boleto_bancario/core/bradesco.rb', line 173

def agencia
  @agencia.to_s.rjust(4, '0') if @agencia.present?
end

#agencia_codigo_cedenteString

Campo preenchido com:

  • Agência com 4 caracteres - digito da agência / Conta de Cobrança com 7 caracteres - Digito da Conta

Exemplo: 9999-D/9999999-D

Obs.: Preencher com zeros a Esquerda quando necessário.

Returns:

  • (String)

    Agência e Código do Cedente que será exibido no boleto



245
246
247
# File 'lib/boleto_bancario/core/bradesco.rb', line 245

def agencia_codigo_cedente
  "#{agencia}-#{digito_agencia} / #{conta_corrente}-#{digito_conta_corrente}"
end

#carteiraString

Returns 2 caracteres.

Returns:

  • (String)

    2 caracteres



185
186
187
# File 'lib/boleto_bancario/core/bradesco.rb', line 185

def carteira
  @carteira.to_s.rjust(2, '0') if @carteira.present?
end

#carteira_formatadaObject

Número da Carteira de Cobrança, que a empresa opera no Banco. No caso da Cobrança Interna será:

21 – Cobrança Interna Com Registro 22 – Cobrança Interna sem registro

Para as demais carteiras, retornar o número da carteira.



197
198
199
200
201
202
203
# File 'lib/boleto_bancario/core/bradesco.rb', line 197

def carteira_formatada
  if cobranca_interna_formatada.present?
    cobranca_interna_formatada
  else
    carteira
  end
end

#cobranca_interna_formatadaString

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Retorna a mensagem que devera aparecer no campo carteira para cobranca interna.

Returns:

  • (String)


291
292
293
294
# File 'lib/boleto_bancario/core/bradesco.rb', line 291

def cobranca_interna_formatada
  cobranca_interna = { '21' => '21 – Cobrança Interna Com Registro', '22' => '22 – Cobrança Interna sem registro' }
  cobranca_interna[carteira.to_s]
end

#codigo_bancoString

Returns Código do Banco descrito na documentação.

Returns:

  • (String)

    Código do Banco descrito na documentação.



207
208
209
# File 'lib/boleto_bancario/core/bradesco.rb', line 207

def codigo_banco
  '237'
end

#codigo_de_barras_do_bancoObject

Código de barras do banco

 ___________________________________________________________________________________________________
| Posição  | Tamanho | Descrição                                                                   |
|----------|---------|-----------------------------------------------------------------------------|
| 20-23    |  04     | Agência (Sem o digito, completar com zeros a esquerda se necessário)        |
| 24-25    |  02     | Carteira                                                                    |
| 26-36    |  11     | Número do Documento - Número do Nosso Número (Sem o digito verificador)     |
| 37-43    |  07     | Conta Corrente (Sem o digito, completar com zeros a esquerda se necessário) |
| 44       |  01     | Zero                                                                        |
----------------------------------------------------------------------------------------------------


282
283
284
# File 'lib/boleto_bancario/core/bradesco.rb', line 282

def codigo_de_barras_do_banco
  "#{agencia}#{carteira}#{numero_documento}#{conta_corrente}0"
end

#conta_correnteString

Returns 7 caracteres.

Returns:

  • (String)

    7 caracteres



167
168
169
# File 'lib/boleto_bancario/core/bradesco.rb', line 167

def conta_corrente
  @conta_corrente.to_s.rjust(7, '0') if @conta_corrente.present?
end

#digito_agenciaString

Dígito do código da agência. Precisa mostrar esse dígito no boleto.

Returns:

  • (String)

    Dígito da agência calculado usando o Modulo11FatorDe9a2.



223
224
225
# File 'lib/boleto_bancario/core/bradesco.rb', line 223

def digito_agencia
  Modulo11FatorDe9a2.new(agencia)
end

#digito_codigo_bancoString

Dígito do código do banco. Precisa mostrar esse dígito no boleto.

Returns:

  • (String)

    Dígito do código do banco descrito na documentação.



215
216
217
# File 'lib/boleto_bancario/core/bradesco.rb', line 215

def digito_codigo_banco
  '2'
end

#digito_conta_correnteString

Dígito da conta corrente. Precisa mostrar esse dígito no boleto.

Returns:

  • (String)

    Dígito da conta corrente calculado apartir do Modulo11FatorDe9a2.



231
232
233
# File 'lib/boleto_bancario/core/bradesco.rb', line 231

def digito_conta_corrente
  Modulo11FatorDe9a2.new(conta_corrente)
end

#digito_nosso_numeroString

Para o cálculo do dígito, será necessário acrescentar o número da carteira à esquerda antes do Nosso Número (número do documento), e aplicar o módulo 11, com fatores de 2 a 7.

Para mais detalhes de como o cálculo é feito veja a classe Modulo11FatorDe2a7.

Returns:

  • (String)

    Retorno do cálculo do módulo 11 na base 7 (2,3,4,5,6,7)



266
267
268
# File 'lib/boleto_bancario/core/bradesco.rb', line 266

def digito_nosso_numero
  Modulo11FatorDe2a7.new("#{carteira}#{numero_documento}")
end

#nosso_numeroObject

Nosso Número descrito na documentação (Pag. 53).

Carteira com 2 (dois) caracteres / N.Número com 11 (onze) caracteres + digito.

Exemplo: 99 / 99999999999-D



255
256
257
# File 'lib/boleto_bancario/core/bradesco.rb', line 255

def nosso_numero
  "#{carteira}/#{numero_documento}-#{digito_nosso_numero}"
end

#numero_documentoString

Returns 11 caracteres.

Returns:

  • (String)

    11 caracteres



179
180
181
# File 'lib/boleto_bancario/core/bradesco.rb', line 179

def numero_documento
  @numero_documento.to_s.rjust(11, '0') if @numero_documento.present?
end