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

#aceite, #agencia, #carteira, #conta_corrente, #digito_conta, #lotes, #nome_empresa, #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

class_for_lote, #nome_empresa_formatada, #persisted?

Methods inherited from ActiveModelBase

#assign_attributes, #initialize

Constructor Details

This class inherits a constructor from BrBoleto::ActiveModelBase

Instance Attribute Details

#codigo_carteiraObject

modalidade da carteira

opcoes:
  11: título Registrado emissão CAIXA
  14: título Registrado emissão Cedente
  21: título Sem Registro emissão CAIXA


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

def codigo_carteira
  @codigo_carteira
end

#convenioObject

convenio do cedente



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

def convenio
  @convenio
end

#data_hora_arquivoObject

Data e hora da geração do arquivo



53
54
55
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 53

def data_hora_arquivo
  @data_hora_arquivo
end

#distribuicao_boletoObject

identificacao da distribuicao do boleto (verificar opcoes nas classes referentes aos bancos)



72
73
74
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 72

def distribuicao_boleto
  @distribuicao_boleto
end

#documento_cedenteObject

documento do cedente (CPF/CNPJ)



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

def documento_cedente
  @documento_cedente
end

#emissao_boletoObject

identificacao da emissao do boleto (verificar opcoes nas classes referentes aos bancos)



69
70
71
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 69

def emissao_boleto
  @emissao_boleto
end

#especie_tituloObject

especie do titulo (verificar o padrao nas classes referentes aos bancos)



75
76
77
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 75

def especie_titulo
  @especie_titulo
end

#forma_cadastramentoObject

forma de cadastramento dos titulos (campo nao tratado pelo Banco do Brasil)

opcoes:
  1 - com cadastramento (cobrança registrada)
  2 - sem cadastramento (cobrança sem registro)


66
67
68
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 66

def forma_cadastramento
  @forma_cadastramento
end

#mensagem_1Object

mensagem 1



47
48
49
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 47

def mensagem_1
  @mensagem_1
end

#mensagem_2Object

mensagem 2



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

def mensagem_2
  @mensagem_2
end

Class Method Details

.tamanho_codigo_carteiraObject



78
79
80
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 78

def self.tamanho_codigo_carteira
	1
end

.tamanho_distribuicao_boletoObject



90
91
92
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 90

def self.tamanho_distribuicao_boleto
	1
end

.tamanho_emissao_boletoObject



86
87
88
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 86

def self.tamanho_emissao_boleto
	1
end

.tamanho_especie_tituloObject



94
95
96
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 94

def self.tamanho_especie_titulo
	2
end

.tamanho_forma_cadastramentoObject



82
83
84
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 82

def self.tamanho_forma_cadastramento
	1
end

Instance Method Details

#codigo_bancoObject

Codigo do banco

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


283
284
285
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 283

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

#codigo_convenioObject

Codigo do convenio

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


299
300
301
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 299

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)


243
244
245
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 243

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)


317
318
319
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 317

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



325
326
327
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 325

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)


267
268
269
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 267

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

#convenio_obrigatorio?Boolean

Returns:

  • (Boolean)


98
99
100
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 98

def convenio_obrigatorio?
	true
end

#dados_do_arquivoString

Gera os dados para o arquivo remessa

Returns:

  • (String)


203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 203

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

#data_geracaoString

Data de geracao do arquivo

Returns:

  • (String)


132
133
134
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 132

def data_geracao
	data_hora_arquivo.to_date.strftime('%d%m%Y')
end

#default_valuesObject



111
112
113
114
115
116
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 111

def default_values
	super.merge({
		codigo_carteira:     '1',
		forma_cadastramento: '1'
	})
end

#digito_agenciaObject

Digito verificado da agência Normalmente calculado pelo Modulo 11 Deve ser sobrescrito na classe do banco

Raises:

  • (NotImplementedError)


307
308
309
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 307

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

#hora_geracaoString

Hora de geracao do arquivo

Returns:

  • (String)


140
141
142
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 140

def hora_geracao
	data_hora_arquivo.strftime('%H%M%S')
end

#informacoes_da_contaObject

Informacoes da conta do cedente

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


291
292
293
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 291

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)


160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 160

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

#nome_bancoObject

Nome do banco

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


275
276
277
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 275

def nome_banco
	raise NotImplementedError.new('Sobreescreva este método na classe referente ao banco que você esta criando')
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



231
232
233
234
235
236
237
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 231

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

#tipo_inscricaoString

Tipo de inscricao do cedente (pessoa fisica ou juridica)

Returns:

  • (String)


123
124
125
126
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 123

def tipo_inscricao
	# Retorna 1 se CPF e 2 se CNPJ
	BrBoleto::Helper::CpfCnpj.new(documento_cedente).tipo_documento(1)
end

#versao_layout_arquivoObject

Numero da versao do layout do arquivo

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


251
252
253
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 251

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

#versao_layout_loteObject

Numero da versao do layout do lote

Este metodo deve ser sobrescrevido na classe do banco

Raises:

  • (NotImplementedError)


259
260
261
# File 'lib/br_boleto/remessa/cnab240/base.rb', line 259

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