# -*- encoding: utf-8 -*-
module Brcobranca
module Boleto
class Bradesco < Base # Banco BRADESCO
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
validates_length_of :numero_documento, maximum: 11, message: 'deve ser menor ou igual a 11 dígitos.'
validates_length_of :conta_corrente, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
validates_length_of :carteira, maximum: 2, message: 'deve ser menor ou igual a 2 dígitos.'
# Nova instancia do Bradesco
# @param (see Brcobranca::Boleto::Base#initialize)
def initialize(campos = {})
campos = { carteira: '06' }.merge!(campos)
campos.merge!(local_pagamento: 'Pagável preferencialmente na Rede Bradesco ou Bradesco Expresso')
super(campos)
end
# Codigo do banco emissor (3 dígitos sempre)
#
# @return [String] 3 caracteres numéricos.
def banco
'237'
end
# Carteira
#
# @return [String] 2 caracteres numéricos.
def carteira=(valor)
@carteira = valor.to_s.rjust(2, '0') if valor
end
# Número seqüencial utilizado para identificar o boleto.
# @return [String] 11 caracteres numéricos.
def numero_documento=(valor)
@numero_documento = valor.to_s.rjust(11, '0') if valor
end
# Nosso número para exibir no boleto.
# @return [String]
# @example
# boleto.nosso_numero_boleto #=> ""06/00000004042-8"
def nosso_numero_boleto
"#{carteira}/#{numero_documento}-#{nosso_numero_dv}"
end
# Dígito verificador da agência
# @return [Integer] 1 caracteres numéricos.
def agencia_dv
agencia.modulo11(
multiplicador: [2, 3, 4, 5],
mapeamento: { 10 => 'P', 11 => 0 }
) { |total| 11 - (total % 11) }
end
# Dígito verificador do nosso número
# @return [Integer] 1 caracteres numéricos.
def nosso_numero_dv
"#{carteira}#{numero_documento}".modulo11(
multiplicador: [2, 3, 4, 5, 6, 7],
mapeamento: { 10 => 'P', 11 => 0 }
) { |total| 11 - (total % 11) }
end
# Dígito verificador da conta corrente
# @return [Integer] 1 caracteres numéricos.
def conta_corrente_dv
conta_corrente.modulo11(
multiplicador: [2, 3, 4, 5, 6, 7],
mapeamento: { 10 => 'P', 11 => 0 }
) { |total| 11 - (total % 11) }
end
# Agência + conta corrente do cliente para exibir no boleto.
# @return [String]
# @example
# boleto.agencia_conta_boleto #=> "0548-7 / 00001448-6"
def agencia_conta_boleto
"#{agencia}-#{agencia_dv} / #{conta_corrente}-#{conta_corrente_dv}"
end
# Segunda parte do código de barras.
#
# Posição | Tamanho | Conteúdo
# 20 a 23 | 4 | Agência Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
# 24 a 25 | 2 | Carteira
# 26 a 36 | 11 | Número do Nosso Número(Sem o digito verificador)
# 37 a 43 | 7 | Conta do Cedente (Sem o digito verificador, completar com zeros a esquerda quando necessário)
# 44 a 44 | 1 | Zero
#
# @return [String] 25 caracteres numéricos.
def codigo_barras_segunda_parte
"#{agencia}#{carteira}#{numero_documento}#{conta_corrente}0"
end
end
end
end