# -*- encoding: utf-8 -*- # # A Caixa tem dois padrões para a geração de boleto: SIGCB e SICOB. # O SICOB foi substiuido pelo SIGCB que é implementado por esta classe. # http://downloads.caixa.gov.br/_arquivos/cobranca_caixa_sigcb/manuais/CODIGO_BARRAS_SIGCB.PDF # module Brcobranca module Boleto class Caixa < Base # Caixa MODALIDADE_COBRANCA = { :registrada => '1', :sem_registro => '2' } EMISSAO_BOLETO = { :cedente => '4' } # Validações validates_length_of :carteira, :is => 2, :message => 'deve possuir 2 dígitos.' validates_length_of :convenio, :is => 6, :message => 'deve possuir 6 dígitos.' validates_length_of :numero_documento, :is => 15, :message => 'deve possuir 15 dígitos.' # Nova instância da CaixaEconomica # @param (see Brcobranca::Boleto::Base#initialize) def initialize campos = {} campos = { :carteira => "#{MODALIDADE_COBRANCA[:sem_registro]}#{EMISSAO_BOLETO[:cedente]}" }.merge!(campos) campos.merge!(:convenio => campos[:convenio].rjust(6, '0')) if campos[:convenio] campos.merge!(:numero_documento => campos[:numero_documento].rjust(15, '0')) if campos[:numero_documento] super(campos) end # Código do banco emissor # @return [String] def banco; '104' end # Dígito verificador do código do banco em módulo 10 # Módulo 10 de 104 é 0 # @return [String] def banco_dv; '0' end # Nosso número, 17 dígitos # 1 à 2: carteira # 3 à 17: campo_livre # @return [String] def nosso_numero_boleto "#{carteira}#{numero_documento}-#{nosso_numero_dv}" end # Dígito verificador do Nosso Número # Utiliza-se o [-1..-1] para retornar o último caracter # @return [String] def nosso_numero_dv "#{carteira}#{numero_documento}".modulo11_9to2.to_s[-1..-1] end # Número da agência/código cedente do cliente para exibir no boleto. # @return [String] # @example # boleto.agencia_conta_boleto #=> "1565/100000-4" def agencia_conta_boleto "#{agencia}/#{convenio}-#{convenio_dv}" end # Dígito verificador do convênio ou código do cedente # @return [String] def convenio_dv "#{convenio.modulo11_2to9}" end # Monta a segunda parte do código de barras. # 1 à 6: código do cedente, também conhecido como convênio # 7: dígito verificador do código do cedente # 8 à 10: dígito 3 à 5 do nosso número # 11: dígito 1 do nosso número (modalidade da cobrança) # 12 à 14: dígito 6 à 8 do nosso número # 15: dígito 2 do nosso número (emissão do boleto) # 16 à 24: dígito 9 à 17 do nosso número # 25: dígito verificador do campo livre # @return [String] def codigo_barras_segunda_parte campo_livre = "#{convenio}" << "#{convenio_dv}" << "#{nosso_numero_boleto[2..4]}" << "#{nosso_numero_boleto[0..0]}" << "#{nosso_numero_boleto[5..7]}" << "#{nosso_numero_boleto[1..1]}" << "#{nosso_numero_boleto[8..16]}" "#{campo_livre}#{campo_livre.modulo11_2to9}" end end end end