# frozen_string_literal: true module Brcobranca module Remessa module Cnab240 class SicoobBancoBrasil < Brcobranca::Remessa::Cnab240::BaseCorrespondente attr_accessor :codigo_cobranca validates_length_of :agencia, is: 4, message: 'deve ter 4 dígitos.' validates_length_of :convenio, maximum: 10, message: 'deve ter 10 dígitos.' validates_length_of :conta_corrente, maximum: 10, message: 'deve ter 10 dígitos.' validates_length_of :codigo_cobranca, maximum: 7, message: 'deve ter 7 dígitos.' validates_length_of :sequencial_remessa, maximum: 8, message: 'deve ter 8 dígitos.' validates_presence_of :sequencial_remessa, message: 'não pode estar em branco.' def initialize(campos = {}) campos = { emissao_boleto: '2', distribuicao_boleto: '2', codigo_carteira: '9', tipo_documento: '02' }.merge!(campos) super(campos) end def cod_banco '756' end def digito_conta conta_corrente.modulo11(mapeamento: { 10 => 'X' }).to_s end def info_conta # CAMPO TAMANHO # agencia 4 # codigo cobranca 7 # conta corrente 11 "#{agencia.rjust(4, '0')}#{codigo_cobranca.rjust(7, '0')}#{conta_corrente.rjust(10, '0')}#{digito_conta}" end def complemento_header "#{''.rjust(11, '0')}#{''.rjust(33, ' ')}" end def complemento_p(pagamento) # CAMPO TAMANHO # num. doc. de corbanca 15 pagamento.nosso_numero.to_s.rjust(15, '0').to_s end def codigo_convenio # CAMPO TAMANHO # num. convenio 20 BRANCOS ''.rjust(20, ' ') end alias convenio_lote codigo_convenio def totaliza_valor_titulos pagamentos.inject(0) { |sum, pag| sum += pag.valor.to_f } end def valor_titulos_carteira total = format '%.2f', totaliza_valor_titulos total.somente_numeros.rjust(17, '0') end def complemento_trailer ''.rjust(217, ' ') end # Monta o registro trailer do arquivo # # @param nro_lotes [Integer] # numero de lotes no arquivo # @param sequencial [Integer] # numero de registros(linhas) no arquivo # # @return [String] # def monta_trailer_arquivo(nro_lotes, _sequencial) # CAMPO TAMANHO # zeros 7 # registro trailer lote 1 # uso FEBRABAN 9 # nro de lotes 6 # nro de registros(linhas) 6 # uso FEBRABAN 211 "#{''.rjust(7, '0')}5#{''.rjust(9, ' ')}#{nro_lotes.to_s.rjust(6, '0')}#{valor_titulos_carteira}#{''.rjust(6, '0')}#{''.rjust( 194, ' ' )}" end end end end end