# -*- encoding: utf-8 -*-
#
module Brcobranca
module Boleto
class BancoNordeste < Base # Banco do Nordeste
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
validates_length_of :convenio, 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.'
validates_length_of :numero_documento, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.'
# Nova instancia do Banco do Nordeste
# @param (see Brcobranca::Boleto::Base#initialize)
def initialize(campos = {})
campos = { carteira: '21' }.merge!(campos)
super(campos)
end
# Codigo do banco emissor (3 dígitos sempre)
#
# @return [String] 3 caracteres numéricos.
def banco
'004'
end
# Número da conta corrente
# @return [String] 7 caracteres numéricos.
def conta_corrente=(valor)
@conta_corrente = valor.to_s.rjust(7, '0') if valor
end
# Número do convênio/contrato do cliente junto ao banco.
# @return [String] 7 caracteres numéricos.
def convenio=(valor)
@convenio = valor.to_s.rjust(7, '0') if valor
end
# Número sequencial utilizado para identificar o boleto.
# @return [String] 8 caracteres numéricos.
def numero_documento=(valor)
@numero_documento = valor.to_s.rjust(7, '0') if valor
end
# Dígito verificador do nosso número.
# @return [String] 1 caracteres numéricos.
def nosso_numero_dv
nosso_numero = numero_documento.to_s.rjust(7, '0') unless numero_documento.nil?
nosso_numero.modulo11(
multiplicador: (2..8).to_a,
mapeamento: { 10 => 0, 11 => 0 }
) { |total| 11 - (total % 11) }
end
# Nosso número para exibir no boleto.
# @return [String]
# @example
# boleto.nosso_numero_boleto #=> "0020572-9"
def nosso_numero_boleto
nosso_numero = numero_documento.to_s.rjust(7, '0') unless numero_documento.nil?
"#{nosso_numero}-#{nosso_numero_dv} #{carteira}"
end
# Agência + codigo do cedente do cliente para exibir no boleto.
# @return [String]
# @example
# boleto.agencia_conta_boleto #=> "0059/1899775"
def agencia_conta_boleto
"#{agencia}/#{convenio_com_dv}"
end
# Dígito verificador da convênio
# @return [Integer] 1 caracteres numéricos.
def convenio_dv
convenio.modulo11
end
def convenio_com_dv
"#{convenio}-#{convenio_dv}"
end
# Segunda parte do código de barras.
# 9(04) | Agência
# 9(08) | Convenio com DV
# 9(08) | Nosso Numero Com DV
# 9(02) | Carteira
# 9(03) | Zeros
#
# @return [String] 25 caracteres numéricos.
def codigo_barras_segunda_parte
"#{agencia}#{convenio}#{convenio_dv}#{numero_documento}#{nosso_numero_dv}#{carteira}000"
end
end
end
end