# -*- 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