# -*- encoding: utf-8 -*-
#
module Brcobranca
module Boleto
class Safra < Base # Banco Safra
# REQUERIDO: Dígito da Agência
attr_accessor :agencia_dv
# REQUERIDO: Dígito da conta
attr_accessor :conta_corrente_dv
validates_presence_of :agencia_dv, :conta_corrente_dv, message: 'não pode estar em branco.'
validates_length_of :agencia, maximum: 4, message: 'deve ser menor ou igual a 4 dígitos.'
validates_length_of :nosso_numero, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
validates_length_of :conta_corrente, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.'
validates_length_of :agencia_dv, is: 1, message: 'deve ser igual a 1 dígitos.'
validates_length_of :conta_corrente_dv, is: 1, message: 'deve ser igual a 1 dígitos.'
# Codigo do banco emissor (3 dígitos sempre)
#
# @return [String] 3 caracteres numéricos.
def banco
'422'
end
# Agência
#
# @return [String] 4 caracteres numéricos.
def agencia=(valor)
@agencia = valor.to_s.rjust(4, '0') if valor
end
# Conta corrente
# @return [String] 8 caracteres numéricos.
def conta_corrente=(valor)
@conta_corrente = valor.to_s.rjust(8, '0') if valor
end
# Número seqüencial utilizado para identificar o boleto.
# @return [String] 8 caracteres numéricos.
def nosso_numero=(valor)
@nosso_numero = valor.to_s.rjust(8, '0') if valor
end
# Dígito verificador do nosso número.
#
# @return [String] 1 caracteres numéricos.
def nosso_numero_dv
nosso_numero.modulo11(
reverse: false,
mapeamento: { 10 => 0, 11 => 1 }
) { |total| 11 - (total % 11) }
end
# Nosso número para exibir no boleto.
# @return [String]
# @example
# boleto.nosso_numero_boleto #=> "175/12345678-4"
def nosso_numero_boleto
"#{nosso_numero}-#{nosso_numero_dv}"
end
# Agência + conta corrente do cliente para exibir no boleto.
# @return [String]
# @example
# boleto.agencia_conta_boleto #=> "08111 / 536788"
def agencia_conta_boleto
"#{agencia}#{agencia_dv} / #{conta_corrente}#{conta_corrente_dv}"
end
# Segunda parte do código de barras.
#
# ORMATAÇÃO DO CÓDIGO DE BARRAS - COBRANÇA REGISTRADA
# Campo
# Significado
#
# Formato
# Posições
# Conteúdo
# DE
#
# ATÉ
# Banco
# Banco Beneficiário do boleto
# 9 (03)
# 1
# 3
# 422
# Moeda
# Código da moeda
# 9 (01)
# 4
# 4
# 9 = real
# DAC
# DAC - Dígito de auto conferência
# 9 (01)
# 5
# 5
# Dígito de auto conferência
# Fator de Vencimento
# Data de vencimento do título
# 9(04)
# 6
# 9
# DV
# Valor
# Valor do boleto
# 9 (10)
# 10
# 19
# Valor do Boleto com zeros a esquerda
# Campo Livre
# Sistema
# 9 (01)
# 20
# 20
# 7 = Dígito do Bco Safra
# Campo Livre
# Agência
# 9 (05)
# 21
# 25
# (05) Agência do cliente Safra
# Campo Livre
# Cliente
# 9 (09)
# 26
# 34
# No da conta
# Campo Livre
# Nosso Número
# 9 (09)
# 35
# 43
# Nosso Número
# Campo Livre
# Tipo cobrança
# 9 (01)
#
# 44
# 44
#
# 2 = cobrança registrada
#
# @return [String] 25 caracteres numéricos.
def codigo_barras_segunda_parte
"7#{agencia}#{agencia_dv}#{conta_corrente}#{conta_corrente_dv}#{nosso_numero}#{nosso_numero_dv}2"
end
end
end
end