Class: BrBoleto::Remessa::Cnab240::Base

Inherits:
Base show all
Includes:
Helper::HeaderArquivo, Helper::HeaderLote, Helper::SegmentoP, Helper::SegmentoQ, Helper::SegmentoR, Helper::SegmentoS, Helper::TrailerArquivo, Helper::TrailerLote
Defined in:
lib/br_boleto/remessa/cnab240/base.rb

Direct Known Subclasses

Caixa, Sicoob

Instance Attribute Summary collapse

Attributes inherited from Base

#data_hora_arquivo, #sequencial_remessa

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Helper::TrailerArquivo

#monta_trailer_arquivo, #trailer_arquivo_posicao_001_a_003, #trailer_arquivo_posicao_004_a_007, #trailer_arquivo_posicao_008_a_008, #trailer_arquivo_posicao_009_a_017, #trailer_arquivo_posicao_018_a_023, #trailer_arquivo_posicao_024_a_029, #trailer_arquivo_posicao_030_a_035, #trailer_arquivo_posicao_036_a_240

Methods included from Helper::TrailerLote

#monta_trailer_lote, #trailer_lote_posicao_001_a_003, #trailer_lote_posicao_004_a_007, #trailer_lote_posicao_008_a_008, #trailer_lote_posicao_009_a_017, #trailer_lote_posicao_018_a_023, #trailer_lote_posicao_024_a_240

Methods included from Helper::SegmentoS

#monta_segmento_s, #segmento_s_posicao_001_a_003, #segmento_s_posicao_004_a_007, #segmento_s_posicao_008_a_008, #segmento_s_posicao_009_a_013, #segmento_s_posicao_014_a_014, #segmento_s_posicao_015_a_015, #segmento_s_posicao_016_a_017, #segmento_s_posicao_018_a_018, #segmento_s_posicao_019_a_020_tipo_impressao_1_ou_2, #segmento_s_posicao_019_a_058_tipo_impressao_3, #segmento_s_posicao_021_a_160_tipo_impressao_1_ou_2, #segmento_s_posicao_059_a_098_tipo_impressao_3, #segmento_s_posicao_099_a_138_tipo_impressao_3, #segmento_s_posicao_139_a_178_tipo_impressao_3, #segmento_s_posicao_161_a_162_tipo_impressao_1_ou_2, #segmento_s_posicao_163_a_240_tipo_impressao_1_ou_2, #segmento_s_posicao_179_a_218_tipo_impressao_3, #segmento_s_posicao_219_a_240_tipo_impressao_3, #segmento_s_tipo_impressao_1_ou_2, #segmento_s_tipo_impressao_3

Methods included from Helper::SegmentoR

#monta_segmento_r, #segmento_r_posicao_001_a_003, #segmento_r_posicao_004_a_007, #segmento_r_posicao_008_a_008, #segmento_r_posicao_009_a_013, #segmento_r_posicao_014_a_014, #segmento_r_posicao_015_a_015, #segmento_r_posicao_016_a_017, #segmento_r_posicao_018_a_018, #segmento_r_posicao_019_a_026, #segmento_r_posicao_027_a_041, #segmento_r_posicao_042_a_042, #segmento_r_posicao_043_a_050, #segmento_r_posicao_051_a_065, #segmento_r_posicao_066_a_066, #segmento_r_posicao_067_a_074, #segmento_r_posicao_075_a_089, #segmento_r_posicao_090_a_099, #segmento_r_posicao_100_a_139, #segmento_r_posicao_140_a_179, #segmento_r_posicao_180_a_199, #segmento_r_posicao_200_a_207, #segmento_r_posicao_208_a_210, #segmento_r_posicao_211_a_215, #segmento_r_posicao_216_a_216, #segmento_r_posicao_217_a_228, #segmento_r_posicao_229_a_229, #segmento_r_posicao_230_a_230, #segmento_r_posicao_231_a_231, #segmento_r_posicao_232_a_240

Methods included from Helper::SegmentoQ

#monta_segmento_q, #segmento_q_posicao_001_a_003, #segmento_q_posicao_004_a_007, #segmento_q_posicao_008_a_008, #segmento_q_posicao_009_a_013, #segmento_q_posicao_014_a_014, #segmento_q_posicao_015_a_015, #segmento_q_posicao_016_a_017, #segmento_q_posicao_018_a_018, #segmento_q_posicao_019_a_033, #segmento_q_posicao_034_a_073, #segmento_q_posicao_074_a_113, #segmento_q_posicao_114_a_128, #segmento_q_posicao_129_a_133, #segmento_q_posicao_134_a_136, #segmento_q_posicao_137_a_151, #segmento_q_posicao_152_a_153, #segmento_q_posicao_154_a_154, #segmento_q_posicao_155_a_169, #segmento_q_posicao_170_a_209, #segmento_q_posicao_210_a_212, #segmento_q_posicao_213_a_232, #segmento_q_posicao_233_a_240

Methods included from Helper::SegmentoP

#monta_segmento_p, #segmento_p_posicao_001_a_003, #segmento_p_posicao_004_a_007, #segmento_p_posicao_008_a_008, #segmento_p_posicao_009_a_013, #segmento_p_posicao_014_a_014, #segmento_p_posicao_015_a_015, #segmento_p_posicao_016_a_017, #segmento_p_posicao_018_a_022, #segmento_p_posicao_023_a_023, #segmento_p_posicao_024_a_057, #segmento_p_posicao_058_a_058, #segmento_p_posicao_059_a_059, #segmento_p_posicao_060_a_060, #segmento_p_posicao_061_a_061, #segmento_p_posicao_062_a_062, #segmento_p_posicao_063_a_077, #segmento_p_posicao_078_a_085, #segmento_p_posicao_086_a_100, #segmento_p_posicao_101_a_105, #segmento_p_posicao_106_a_106, #segmento_p_posicao_107_a_108, #segmento_p_posicao_109_a_109, #segmento_p_posicao_110_a_117, #segmento_p_posicao_118_a_118, #segmento_p_posicao_119_a_126, #segmento_p_posicao_127_a_141, #segmento_p_posicao_142_a_142, #segmento_p_posicao_143_a_150, #segmento_p_posicao_151_a_165, #segmento_p_posicao_166_a_180, #segmento_p_posicao_181_a_195, #segmento_p_posicao_196_a_220, #segmento_p_posicao_221_a_221, #segmento_p_posicao_222_a_223, #segmento_p_posicao_224_a_224, #segmento_p_posicao_225_a_227, #segmento_p_posicao_228_a_229, #segmento_p_posicao_230_a_239, #segmento_p_posicao_240_a_240

Methods included from Helper::HeaderLote

#header_lote_posicao_001_a_003, #header_lote_posicao_004_a_007, #header_lote_posicao_008_a_008, #header_lote_posicao_009_a_009, #header_lote_posicao_010_a_011, #header_lote_posicao_012_a_013, #header_lote_posicao_014_a_016, #header_lote_posicao_017_a_017, #header_lote_posicao_018_a_018, #header_lote_posicao_019_a_033, #header_lote_posicao_034_a_053, #header_lote_posicao_054_a_073, #header_lote_posicao_074_a_103, #header_lote_posicao_104_a_143, #header_lote_posicao_144_a_183, #header_lote_posicao_184_a_191, #header_lote_posicao_192_a_199, #header_lote_posicao_200_a_207, #header_lote_posicao_208_a_240, #monta_header_lote

Methods included from Helper::HeaderArquivo

#header_arquivo_posicao_001_a_003, #header_arquivo_posicao_004_a_007, #header_arquivo_posicao_008_a_008, #header_arquivo_posicao_009_a_017, #header_arquivo_posicao_018_a_018, #header_arquivo_posicao_019_a_032, #header_arquivo_posicao_033_a_052, #header_arquivo_posicao_053_a_072, #header_arquivo_posicao_073_a_102, #header_arquivo_posicao_103_a_132, #header_arquivo_posicao_133_a_142, #header_arquivo_posicao_143_a_143, #header_arquivo_posicao_144_a_151, #header_arquivo_posicao_152_a_157, #header_arquivo_posicao_158_a_163, #header_arquivo_posicao_164_a_166, #header_arquivo_posicao_167_a_171, #header_arquivo_posicao_172_a_191, #header_arquivo_posicao_192_a_211, #header_arquivo_posicao_212_a_240, #monta_header_arquivo

Methods inherited from Base

#data_geracao, #hora_geracao, #pagamento_valid_cod_desconto_length, #pagamento_valid_tipo_impressao_required, #persisted?

Methods included from HaveConta

#conta, #conta=, #conta_class

Methods inherited from ActiveModelBase

#assign_attributes, #default_values, #initialize

Constructor Details

This class inherits a constructor from BrBoleto::ActiveModelBase

Instance Attribute Details

#lotesObject

O atributo lotes sempre irá retornar umm Array



49
50
51
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 49

def lotes
  @lotes
end

#mensagem_1Object

mensagem 1



41
42
43
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 41

def mensagem_1
  @mensagem_1
end

#mensagem_2Object

mensagem 2



44
45
46
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 44

def mensagem_2
  @mensagem_2
end

Class Method Details

.class_for_loteObject



51
52
53
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 51

def self.class_for_lote
  BrBoleto::Remessa::Lote
end

Instance Method Details

#codigo_convenioObject

Codigo do convenio

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


198
199
200
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 198

def codigo_convenio
  raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
end

#complemento_header_arquivoObject

Complemento do registro

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


174
175
176
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 174

def complemento_header_arquivo
  raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
end

#complemento_p(pagamento) ⇒ Object

Complemento do segmento P Recebe um objeto da classe BrBoleto::Remessa::Pagamento Composto por 34 digitos Cada banco tem seu padrão Deve ser sobrescrito na classe do banco

Raises:

  • (NotImplementedError)


208
209
210
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 208

def complemento_p(pagamento)
  raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
end

#complemento_trailer_lote(lote, nr_lote) ⇒ Object

Complemento final do trailer do lote Por padrão coloco 217 caracateres em branco pois é na maioria dos bancos Mas para alguns bancos isso pode mudar



216
217
218
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 216

def complemento_trailer_lote(lote, nr_lote)
  ''.rjust(217, ' ') 
end

#convenio_lote(lote) ⇒ Object

Informacoes do convenio para o lote

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


182
183
184
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 182

def convenio_lote(lote)
  raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
end

#dados_do_arquivoString

Gera os dados para o arquivo remessa

Returns:

  • (String)


134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 134

def dados_do_arquivo
  return if self.invalid?

  # contador dos registros do lote
  contador = 1

  # Metodo 'monta_header_arquivo' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::HeaderArquivo
  arquivo = [monta_header_arquivo] 
  contador += 1

  lotes.each_with_index do |lote, index|
    novo_lote = monta_lote(lote, (index + 1))
    arquivo.push novo_lote
    novo_lote.each { |_lote| contador += 1 }
  end

  # Metodo 'monta_trailer_arquivo' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::TrailerArquivo
  arquivo << monta_trailer_arquivo(lotes.count, contador)

  retorno = arquivo.join("\n")
  ActiveSupport::Inflector.transliterate(retorno).upcase
end

#informacoes_da_contaObject

Informacoes da conta do cedente

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


190
191
192
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 190

def informacoes_da_conta
  raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
end

#monta_lote(lote, nro_lote) ⇒ Array

Monta um lote para o arquivo

numero do lote no arquivo

Parameters:

Returns:

  • (Array)


91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 91

def monta_lote(lote, nro_lote)
  return if lote.invalid?


  # Metodo 'monta_header_lote' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::HeaderLote
  itens_lote = [monta_header_lote(lote, nro_lote)]
  
  #Nº Sequencial de Registros no Lote:
  sequencial_do_lote = 0

  lote.pagamentos.each do |pagamento|          
    # Metodo 'monta_segmento_p' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoP
    sequencial_do_lote += 1
    itens_lote << monta_segmento_p(pagamento, nro_lote, sequencial_do_lote)
    
    # Metodo 'monta_segmento_q' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoQ
    sequencial_do_lote += 1
    itens_lote << monta_segmento_q(pagamento, nro_lote, sequencial_do_lote)

    # Metodo 'monta_segmento_r' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoR
    sequencial_do_lote += 1
    itens_lote << monta_segmento_r(pagamento, nro_lote, sequencial_do_lote)

    # Metodo 'monta_segmento_s' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::SegmentoS
    sequencial_do_lote += 1
    itens_lote << monta_segmento_s(pagamento, nro_lote, sequencial_do_lote)
  end
  
  # total_de_registros_do_lote é a quantidade de registros(linhas) que constam em um lote
  # Total de complementos do lote + o HEADER_LOTE + TRAILER_LOTE
  #        sequencial_do_lote     +       1       +      1  
  total_de_registros_do_lote = sequencial_do_lote + 2

  # Metodo 'monta_trailer_lote' implementado no module -> BrBoleto::Remessa::Cnab240::Helper::TrailerLote
  itens_lote << monta_trailer_lote(lote, nro_lote, total_de_registros_do_lote)

  itens_lote
end

#pagamento_valid_distribuicao_boleto_lengthObject



59
60
61
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 59

def pagamento_valid_distribuicao_boleto_length
  1
end

#pagamento_valid_emissao_boleto_lengthObject



55
56
57
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 55

def pagamento_valid_emissao_boleto_length
  1
end

#segmento_p_numero_do_documento(pagamento) ⇒ Object

Número do Documento de Cobrança Cada banco tem sua maneira de identificar esse número, mas o padrão é o Valor que se encontra no numero_documento ou então em nosso numero 15 posições



162
163
164
165
166
167
168
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 162

def segmento_p_numero_do_documento(pagamento)
  if pagamento.numero_documento.present?
    pagamento.numero_documento.to_s.rjust(15, '0')
  else
    pagamento.nosso_numero.to_s.rjust(15, '0')
  end
end