# -*- encoding: utf-8 -*- # @author Kivanio Barbosa # @author Ronaldo Araujo module Brcobranca module Boleto class Santander < Base # Banco Santander # Usado somente em carteiras especiais com registro para complementar o número do documento attr_reader :seu_numero 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 :numero_documento, maximum: 8, message: 'deve ser menor ou igual a 8 dígitos.' validates_length_of :seu_numero, maximum: 7, message: 'deve ser menor ou igual a 7 dígitos.' # Nova instancia do Santander # @param (see Brcobranca::Boleto::Base#initialize) def initialize(campos = {}) campos = { carteira: '102' }.merge!(campos) super(campos) end # Codigo do banco emissor (3 dígitos sempre) # # @return [String] 3 caracteres numéricos. def banco '033' end # Número da conta corrente # @return [String] 9 caracteres numéricos. def conta_corrente=(valor) @conta_corrente = valor.to_s.rjust(9, '0') if valor end # Número do convênio/contrato do cliente junto ao banco. No Santander, é # chamado de Código do Cedente. # @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(8, '0') if valor end # Número sequencial utilizado para identificar o boleto. # @return [String] 7 caracteres numéricos. def seu_numero=(valor) @seu_numero = 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(12, '0') unless numero_documento.nil? nosso_numero.modulo11( multiplicador: (2..9).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 #=> "000090002720-7" def nosso_numero_boleto nosso_numero = numero_documento.to_s.rjust(12, '0') unless numero_documento.nil? "#{nosso_numero}-#{nosso_numero_dv}" 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}" end # Segunda parte do código de barras. # 9(01) | Fixo 9
# 9(07) | Convenio
# 9(05) | Fixo 00000
# 9(08) | Nosso Numero
# 9(01) | IOF
# 9(03) | Carteira de cobrança
# # @return [String] 25 caracteres numéricos. def codigo_barras_segunda_parte "9#{convenio}0000#{numero_documento}#{nosso_numero_dv}0#{carteira}" end end end end