Class: BoletoBancario::Core::BancoBrasil
- Defined in:
- lib/boleto_bancario/core/banco_brasil.rb
Overview
Implementação de emissão de boleto bancário pelo Banco do Brasil.
Documentação Implementada
A documentação na qual essa implementação foi baseada está localizada na pasta ‘documentacoes_dos_boletos/banco_brasil’ dentro dessa biblioteca.
Experimental
O Boleto do Banco do Brasil ainda está categorizado como experimental. POr favor ajude a validar e homologar esse banco para as carteiras suportadas conforme descrito abaixo.
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 Banco do Brasil seguindo a documentação:
________________________________________________________________________________________________________
| Carteira | Descrição | Testada/Homologada no banco |
| 12 | Código do cedente de 6 dígitos | Esperando Contribuição |
| 16 | Código do cedente de 6 dígitos e nosso numero com 17 dígitos | Esperando Contribuição |
| 16 | Código do cedente de 4 dígitos | Esperando Contribuição |
| 16 | Código do cedente de 6 dígitos | Esperando Contribuição |
| 17 | Código do cedente de 7 dígitos | Esperando Contribuição |
| 17 | Código do cedente de 8 dígitos | Esperando Contribuição |
| 18 | Código do cedente de 4 dígitos | Esperando Contribuição |
| 18 | Código do cedente de 6 dígitos | Esperando Contribuição |
| 18 | Código do cedente de 6 dígitos e nosso numero com 17 dígitos | Esperando Contribuição |
| 18 | Código do cedente de 7 dígitos | Esperando Contribuição |
| 18 | Código do cedente de 8 dígitos | Esperando Contribuição |
---------------------------------------------------------------------------------------------------------
# OBS.: Seja um contribuidor dessa gem. Contribua para homologar os boletos e as devidas carteiras junto ao banco Bradesco.
Instance Attribute Summary
Attributes inherited from Boleto
#aceite, #carteira, #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
-
.carteiras_suportadas ⇒ Array
Carteiras suportadas..
-
.tamanho_maximo_agencia ⇒ Fixnum
Tamanho máximo de uma agência no Banco do Brasil.
-
.tamanho_maximo_conta_corrente ⇒ Fixnum
Tamanho máximo de uma conta corrente no Banco do Brasil.
-
.tamanho_maximo_numero_documento_com_codigo_cedente_oito_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 8 dígitos..
-
.tamanho_maximo_numero_documento_com_codigo_cedente_quatro_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 4 dígitos..
-
.tamanho_maximo_numero_documento_com_codigo_cedente_seis_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 6 dígitos..
-
.tamanho_maximo_numero_documento_com_codigo_cedente_sete_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 7 dígitos..
-
.tamanho_maximo_numero_documento_dezessete_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 6 dígitos, ser carteira 16 ou 18 e ter o nosso número com 17 dígitos..
Instance Method Summary collapse
-
#agencia ⇒ String
4 caracteres.
-
#agencia_codigo_cedente ⇒ String
Campo Agencia / Código do Cedente Retorna formatado a agência, digito da agência, número da conta corrente e dígito da conta.
-
#carteiras_nosso_numero_dezessete_posicoes ⇒ Array
Retorna as carteiras que aceitam nosso número com 17 posições.
-
#codigo_banco ⇒ String
Código do Banco descrito na documentação.
-
#codigo_cedente_oito_digitos? ⇒ true, false
Verifica se o código do cedente possui 8 dígitos.
-
#codigo_cedente_quatro_digitos? ⇒ true, false
Verifica se o código do cedente possui 4 dígitos.
-
#codigo_cedente_seis_digitos? ⇒ true, false
Verifica se o código do cedente possui 6 dígitos.
-
#codigo_cedente_sete_digitos? ⇒ true, false
Verifica se o código do cedente possui 7 dígitos.
-
#codigo_de_barras_codigo_cedente_quatro_ou_seis_digitos ⇒ String
Retorna o código de barras do campo livre para emissão de boletos com:.
-
#codigo_de_barras_codigo_cedente_seis_posicoes_nosso_numero_dezessete_posicoes ⇒ String
Retorna o código de barras do campo livre para emissão de bloquetos com:.
-
#codigo_de_barras_codigo_cedente_sete_ou_oito_digitos ⇒ String
Retorna o código de barras do campo livre para emissão de boletos com:.
-
#codigo_de_barras_do_banco ⇒ Object
Código do cedente com 4 dígitos.
-
#conta_corrente ⇒ String
8 caracteres.
-
#deve_validar_com_codigo_cedente_oito_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
-
#deve_validar_com_codigo_cedente_quatro_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
-
#deve_validar_com_codigo_cedente_seis_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
-
#deve_validar_com_codigo_cedente_sete_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
-
#deve_validar_com_nosso_numero_dezessete_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
-
#digito_agencia ⇒ String
Dígito do código da agência.
-
#digito_codigo_banco ⇒ String
Dígito do código do banco.
-
#digito_conta_corrente ⇒ String
Dígito da conta corrente.
-
#digito_nosso_numero ⇒ String
Para o cálculo do dígito, será necessário acrescentar o código do cedente e Nosso Número (número do documento), e aplicar o módulo 11, com fatores de 9 a 2 verificando o resto da divisão.
-
#modalidade_de_cobranca ⇒ String
Modalidade de cobranca definida pelo Banco do Brasil para ser mostrado no código de barras com código de cedente de seis posições e nosso número de 17 posições, carteira 16 e 18.
-
#nosso_numero ⇒ String
Composição do nosso número.
-
#nosso_numero_dezessete_posicoes? ⇒ true, false
Verifica se:.
-
#numero_documento ⇒ String
Número do Documento VS.
-
#numero_documento_esperado ⇒ Hash
Para ficar documentado preferi criar um método onde retorna o tamanho esperado do número do documento dependendo do tamanho do código do cedente.
-
#tamanho_codigo_cedente ⇒ Fixnum
Retorna o tamanho do campo código do cedente.
-
#tamanhos_codigo_cedente_suportado ⇒ Array
Retorna os tamanhos do código do cedente suportados pelo Banco do Brasil.
-
#validacao_tamanho_de_digitos_codigo_cedente ⇒ Object
Verifica se o campo código do cedente tem o tamanho suportado pelo Banco do Brasil.
Methods inherited from Boleto
#aceite_formatado, #carteira_formatada, #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_suportadas ⇒ Array
Carteiras suportadas.
Método criado para validar se a carteira informada é suportada.
125 126 127 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 125 def self.carteiras_suportadas %w[12 16 17 18] end |
.tamanho_maximo_agencia ⇒ Fixnum
Tamanho máximo de uma agência no Banco do Brasil. Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
49 50 51 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 49 def self.tamanho_maximo_agencia 4 end |
.tamanho_maximo_conta_corrente ⇒ Fixnum
Tamanho máximo de uma conta corrente no Banco do Brasil. Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
58 59 60 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 58 def self.tamanho_maximo_conta_corrente 8 end |
.tamanho_maximo_numero_documento_com_codigo_cedente_oito_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 8 dígitos.
Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
104 105 106 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 104 def self.tamanho_maximo_numero_documento_com_codigo_cedente_oito_digitos 9 end |
.tamanho_maximo_numero_documento_com_codigo_cedente_quatro_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 4 dígitos.
Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
68 69 70 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 68 def self.tamanho_maximo_numero_documento_com_codigo_cedente_quatro_digitos 7 end |
.tamanho_maximo_numero_documento_com_codigo_cedente_seis_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 6 dígitos.
Convenção
Sempre que você for usar o número do documento com 17 dígitos nas carteiras 16 ou 18 com código cedente de 6 dígitos, fica a seu cargo colocar os 17 dígitos do número do documento.
Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
84 85 86 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 84 def self.tamanho_maximo_numero_documento_com_codigo_cedente_seis_digitos 5 end |
.tamanho_maximo_numero_documento_com_codigo_cedente_sete_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 7 dígitos.
Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
94 95 96 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 94 def self.tamanho_maximo_numero_documento_com_codigo_cedente_sete_digitos 10 end |
.tamanho_maximo_numero_documento_dezessete_digitos ⇒ Fixnum
Tamanho máximo do número do documento emitido no Boleto, quando o código do cedente tiver 6 dígitos, ser carteira 16 ou 18 e ter o nosso número com 17 dígitos.
Método criado justamente para ficar documentado o tamanho máximo aceito até a data corrente.
115 116 117 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 115 def self.tamanho_maximo_numero_documento_dezessete_digitos 17 end |
Instance Method Details
#agencia ⇒ String
Returns 4 caracteres.
163 164 165 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 163 def agencia @agencia.to_s.rjust(4, '0') if @agencia.present? end |
#agencia_codigo_cedente ⇒ String
Campo Agencia / Código do Cedente Retorna formatado a agência, digito da agência, número da conta corrente e dígito da conta.
247 248 249 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 247 def agencia_codigo_cedente "#{agencia}-#{digito_agencia} / #{conta_corrente}-#{digito_conta_corrente}" end |
#carteiras_nosso_numero_dezessete_posicoes ⇒ Array
Retorna as carteiras que aceitam nosso número com 17 posições.
498 499 500 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 498 def carteiras_nosso_numero_dezessete_posicoes %w(16 18) end |
#codigo_banco ⇒ String
Returns Código do Banco descrito na documentação.
214 215 216 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 214 def codigo_banco '001' end |
#codigo_cedente_oito_digitos? ⇒ true, false
Verifica se o código do cedente possui 8 dígitos.
469 470 471 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 469 def codigo_cedente_oito_digitos? tamanho_codigo_cedente == 8 end |
#codigo_cedente_quatro_digitos? ⇒ true, false
Verifica se o código do cedente possui 4 dígitos.
445 446 447 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 445 def codigo_cedente_quatro_digitos? tamanho_codigo_cedente == 4 end |
#codigo_cedente_seis_digitos? ⇒ true, false
Verifica se o código do cedente possui 6 dígitos.
453 454 455 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 453 def codigo_cedente_seis_digitos? tamanho_codigo_cedente == 6 end |
#codigo_cedente_sete_digitos? ⇒ true, false
Verifica se o código do cedente possui 7 dígitos.
461 462 463 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 461 def codigo_cedente_sete_digitos? tamanho_codigo_cedente == 7 end |
#codigo_de_barras_codigo_cedente_quatro_ou_seis_digitos ⇒ String
Retorna o código de barras do campo livre para emissão de boletos com:
Nosso número de 11 posições - EXCLUSIVO PARA CONVÊNIOS DE SEIS POSIÇÕES.
408 409 410 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 408 def "#{codigo_cedente}#{numero_documento}#{agencia}#{conta_corrente}#{carteira}" end |
#codigo_de_barras_codigo_cedente_seis_posicoes_nosso_numero_dezessete_posicoes ⇒ String
Retorna o código de barras do campo livre para emissão de bloquetos com:
Nosso número de 17 posições - EXCLUSIVO PARA AS CARTEIRAS 16 E 18, VINCULADAS À CONVÊNIOS COM SEIS POSIÇÕES.
428 429 430 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 428 def "#{codigo_cedente}#{numero_documento}#{modalidade_de_cobranca}" end |
#codigo_de_barras_codigo_cedente_sete_ou_oito_digitos ⇒ String
Retorna o código de barras do campo livre para emissão de boletos com:
Carteira 17 e 18 - VINCULADOS À CONVÊNIOS COM NUMERAÇÃO SUPERIOR A 1.000.000 (um milhão).
418 419 420 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 418 def "000000#{codigo_cedente}#{numero_documento}#{carteira}" end |
#codigo_de_barras_do_banco ⇒ Object
Código do cedente com 4 dígitos
Quando o código do cedente possui 4 dígitos o formato do código de barras deve ficar assim:
__________________________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|----------------------------------------------------|
| 20-30 | 11 | Nosso-Número, sem dígito verificador |
| 20-23 | Código do cedente fornecido pelo Banco (4 dígitos) |
| 24-30 | Nosso-Número, sem dígito verificador (7 dígitos) |
| 31-34 | 04 | Agência (sem o dígito) |
| 35-42 | 08 | Conta corrente (sem o dígito) |
| 43-44 | 02 | Carteira |
---------------------------------------------------------------------------
Código do cedente com 6 dígitos
Quando o código do cedente possui 6 dígitos o formato do código de barras deve ficar assim:
__________________________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|----------------------------------------------------|
| 20-30 | 11 | Nosso-Número, sem dígito verificador |
| 20-25 | Código do cedente fornecido pelo Banco (6 dígitos) |
| 26-30 | Nosso-Número, sem dígito verificador (5 dígitos) |
| 31-34 | 04 | Agência (sem o dígito) |
| 35-42 | 08 | Conta corrente (sem o dígito) |
| 43-44 | 02 | Carteira |
---------------------------------------------------------------------------
Código do cedente com 7 dígitos
Quando o código do cedente possui 7 dígitos o formato do código de barras deve ficar assim:
__________________________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|----------------------------------------------------|
| 20-30 | 17 | Nosso-Número, sem dígito verificador |
| 20-32 | Código do cedente fornecido pelo Banco (7 dígitos) |
| 33-42 | Nosso-Número, sem dígito verificador (10 dígitos) |
| 43-44 | 02 | Carteira |
---------------------------------------------------------------------------
Código do cedente com 8 dígitos
Quando o código do cedente possui 8 dígitos o formato do código de barras deve ficar assim:
__________________________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|----------------------------------------------------|
| 20-30 | 17 | Nosso-Número, sem dígito verificador |
| 20-33 | Código do cedente fornecido pelo Banco (8 dígitos) |
| 34-42 | Nosso-Número, sem dígito verificador (9 dígitos) |
| 43-44 | 02 | Carteira |
---------------------------------------------------------------------------
Carteiras 16 e 18, código do cedente de 6 posições, nosso número com 17 dígitos.
Código do cedente possui 6 dígitos, nosso número com 17 dígitos e a carteira for 16 ou 18, o formato do código de barras deve ficar assim:
___________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|-------------------------------------|
| 20-25 | 6 | Código do cedente de 6 dígitos |
| 26-42 | 17 | Nosso número livre do cliente |
| 43-44 | 02 | "21" Tipo da modalidade de cobranca |
------------------------------------------------------------
388 389 390 391 392 393 394 395 396 397 398 399 400 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 388 def if nosso_numero_dezessete_posicoes? return end if codigo_cedente_quatro_digitos? or codigo_cedente_seis_digitos? return end if codigo_cedente_sete_digitos? or codigo_cedente_oito_digitos? end end |
#conta_corrente ⇒ String
Returns 8 caracteres.
169 170 171 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 169 def conta_corrente @conta_corrente.to_s.rjust(8, '0') if @conta_corrente.present? end |
#deve_validar_com_codigo_cedente_oito_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
Lembre-se que fica a seu critério, mudar as validações da gem.
552 553 554 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 552 def deve_validar_com_codigo_cedente_oito_digitos? deve_validar_codigo_cedente? and codigo_cedente_oito_digitos? end |
#deve_validar_com_codigo_cedente_quatro_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
Lembre-se que fica a seu critério, mudar as validações da gem.
520 521 522 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 520 def deve_validar_com_codigo_cedente_quatro_digitos? deve_validar_codigo_cedente? and codigo_cedente_quatro_digitos? end |
#deve_validar_com_codigo_cedente_seis_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
Lembre-se que fica a seu critério, mudar as validações da gem.
528 529 530 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 528 def deve_validar_com_codigo_cedente_seis_digitos? deve_validar_codigo_cedente? and codigo_cedente_seis_digitos? and not nosso_numero_dezessete_posicoes? end |
#deve_validar_com_codigo_cedente_sete_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
Lembre-se que fica a seu critério, mudar as validações da gem.
544 545 546 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 544 def deve_validar_com_codigo_cedente_sete_digitos? deve_validar_codigo_cedente? and codigo_cedente_sete_digitos? end |
#deve_validar_com_nosso_numero_dezessete_digitos? ⇒ Boolean
Método que pode ser sobrescrito na subclasse se você não quiser que essa validação ocorra.
Lembre-se que fica a seu critério, mudar as validações da gem.
536 537 538 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 536 def deve_validar_com_nosso_numero_dezessete_digitos? deve_validar_codigo_cedente? and codigo_cedente_seis_digitos? and nosso_numero_dezessete_posicoes? end |
#digito_agencia ⇒ String
Dígito do código da agência. Precisa mostrar esse dígito no boleto.
230 231 232 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 230 def digito_agencia Modulo11FatorDe9a2RestoX.new(agencia) end |
#digito_codigo_banco ⇒ String
Dígito do código do banco. Precisa mostrar esse dígito no boleto.
222 223 224 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 222 def digito_codigo_banco '9' end |
#digito_conta_corrente ⇒ String
Dígito da conta corrente. Precisa mostrar esse dígito no boleto.
238 239 240 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 238 def digito_conta_corrente Modulo11FatorDe9a2RestoX.new(conta_corrente) end |
#digito_nosso_numero ⇒ String
Para o cálculo do dígito, será necessário acrescentar o código do cedente e Nosso Número (número do documento), e aplicar o módulo 11, com fatores de 9 a 2 verificando o resto da divisão.
Para mais detalhes de como o cálculo é feito veja a classe Modulo11FatorDe9a2RestoX.
315 316 317 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 315 def digito_nosso_numero Modulo11FatorDe9a2RestoX.new("#{codigo_cedente}#{numero_documento}") end |
#modalidade_de_cobranca ⇒ String
Modalidade de cobranca definida pelo Banco do Brasil para ser mostrado no código de barras com código de cedente de seis posições e nosso número de 17 posições, carteira 16 e 18.
437 438 439 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 437 def modalidade_de_cobranca "21" end |
#nosso_numero ⇒ String
Composição do nosso número
Código do Cedente de 4 dígitos
___________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|-------------------------------------|
| 01-04 | 04 | Código do cedente de 4 dígitos |
| 05-11 | 07 | Nosso número livre do cliente |
| 12 | 01 | Dígito Verificador do Nosso número |
------------------------------------------------------------
Código do Cedente de 6 dígitos
___________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|-------------------------------------|
| 01-06 | 06 | Código do cedente de 6 dígitos |
| 07-11 | 05 | Nosso número livre do cliente |
| 12 | 01 | Dígito Verificador do Nosso número |
------------------------------------------------------------
Código do Cedente de 7 dígitos
___________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|-------------------------------------|
| 01-07 | 07 | Código do cedente de 7 dígitos |
| 08-17 | 10 | Nosso número livre do cliente |
------------------------------------------------------------
Obs.: Não existe Dígito Verificador na composição do nosso-número para convênios de sete posições.
Código do Cedente de 8 dígitos
___________________________________________________________
| Posição | Tamanho | Descrição |
|----------|---------|-------------------------------------|
| 01-08 | 08 | Código do cedente de 7 dígitos |
| 09-17 | 09 | Nosso número livre do cliente |
------------------------------------------------------------
Obs.: Não existe Dígito Verificador na composição do nosso-número para convênios de oito posições.
299 300 301 302 303 304 305 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 299 def nosso_numero if codigo_cedente_oito_digitos? or codigo_cedente_sete_digitos? "#{codigo_cedente}#{numero_documento}" else "#{codigo_cedente}#{numero_documento}-#{digito_nosso_numero}" end end |
#nosso_numero_dezessete_posicoes? ⇒ true, false
Verifica se:
-
Número do documento possui 17 dígitos
-
Carteira está habilitada para usar 17 dígitos do número documento.
-
Código do Cedente está habilitado para usar 17 dígitos do número documento (se tiver 6 dígitos).
490 491 492 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 490 def nosso_numero_dezessete_posicoes? codigo_cedente_seis_digitos? and carteira.to_s.in?(carteiras_nosso_numero_dezessete_posicoes) and numero_documento.to_s.size == 17 end |
#numero_documento ⇒ String
Número do Documento VS. Código do Cedente
No caso do Banco do Brasil, o tamanho do código do cedente ditará o tamanho do número do documento. Ou seja, quando o código do cedente for X, o tamanho do número do documento deverá ser Y. Segue abaixo:
______________________________________________________________
| Tamanho do Código Cedente | Tamanho do Número do documento |
|----------------------------|--------------------------------|
| 04 | 07 |
| 06 | 05 |
| 07 | 10 |
| 08 | 09 |
---------------------------------------------------------------
OBS.: Quando o tamanho do código do cedente for 6, o número do documento pode ter 17 dígitos, se for usado com a carteira 16 ou 18.
193 194 195 196 197 198 199 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 193 def numero_documento if @numero_documento.present? and numero_documento_esperado[tamanho_codigo_cedente].present? @numero_documento.to_s.rjust(numero_documento_esperado[tamanho_codigo_cedente], '0') else @numero_documento end end |
#numero_documento_esperado ⇒ Hash
Para ficar documentado preferi criar um método onde retorna o tamanho esperado do número do documento dependendo do tamanho do código do cedente.
Para mais detalhes veja o método #numero_documento dessa classe.
208 209 210 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 208 def numero_documento_esperado { 0 => 0, 4 => 7, 6 => 5, 7 => 10, 8 => 9 } end |
#tamanho_codigo_cedente ⇒ Fixnum
Retorna o tamanho do campo código do cedente. Super importante para o número do documento e e para o código de barras
478 479 480 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 478 def tamanho_codigo_cedente codigo_cedente.to_s.size end |
#tamanhos_codigo_cedente_suportado ⇒ Array
Retorna os tamanhos do código do cedente suportados pelo Banco do Brasil.
512 513 514 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 512 def tamanhos_codigo_cedente_suportado [4, 6, 7, 8] end |
#validacao_tamanho_de_digitos_codigo_cedente ⇒ Object
Verifica se o campo código do cedente tem o tamanho suportado pelo Banco do Brasil.
504 505 506 |
# File 'lib/boleto_bancario/core/banco_brasil.rb', line 504 def validacao_tamanho_de_digitos_codigo_cedente errors.add(:codigo_cedente, :invalid) unless tamanho_codigo_cedente.in?(tamanhos_codigo_cedente_suportado) end |