Class: Febraban150

Inherits:
Object
  • Object
show all
Defined in:
lib/formatos/febraban150/febraban_150.rb

Constant Summary collapse

VersaoDisponivel =
[ '04', '05' ]
VERSAO =
'05'

Instance Method Summary collapse

Constructor Details

#initialize(file = '', versao = '') ⇒ Febraban150



Construtor



35
36
37
38
39
40
# File 'lib/formatos/febraban150/febraban_150.rb', line 35

def initialize(file = '', versao = '')
  @sections = []
  @versao = versao

  self.valida_arquivo(file)
end

Instance Method Details

#compara_resultado(outro_layout) ⇒ Object



395
396
397
398
399
400
401
402
403
404
405
# File 'lib/formatos/febraban150/febraban_150.rb', line 395

def compara_resultado outro_layout
  if self.layout_empresa?
    raise "Layout de comparação deve ser de Banco" unless outro_layout.layout_banco?

  elsif self.layout_banco?
    raise "Layout de comparação deve ser de Empresa" unless outro_layout.layout_empresa?

  else
    raise "Tipo de Layout não definido!"
  end
end

#create_alteracao_id(id_cliente_empresa_old, agencia_debito, id_cliente_banco, id_cliente_empresa_new, ocorrencia, cod_movimento) ⇒ Object

Seção D



132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/formatos/febraban150/febraban_150.rb', line 132

def create_alteracao_id(id_cliente_empresa_old, agencia_debito, id_cliente_banco,
                        id_cliente_empresa_new, ocorrencia, cod_movimento)

  self.valida_existe_header

  section = self.get_new_section("D")

  section.set_id_cliente_empresa_old id_cliente_empresa_old
  section.set_agencia_debito         agencia_debito
  section.set_id_cliente_banco       id_cliente_banco
  section.set_id_cliente_empresa_new id_cliente_empresa_new
  section.set_ocorrencia             ocorrencia
  section.set_reservado              ""
  section.set_cod_movimento          cod_movimento

  self.add_section_from_business section
end

#create_confirmacao_processo(data_processamento) ⇒ Object

Seção J



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/formatos/febraban150/febraban_150.rb', line 208

def create_confirmacao_processo data_processamento
  self.valida_existe_header
  self.valida_existe_trailler

  raise "Confirmação do processo já executada" if self.get_section("J").length > 0

  header = self.get_header
  trailler = self.get_trailler

  section = self.get_new_section("J")

  section.set_numero_sequencial  header.get_numero_sequencial
  section.set_data_geracao       header.get_data_geracao
  section.set_total_processados  trailler.get_total_registros
  section.set_valor_total        trailler.get_valor_total
  section.set_data_processamento data_processamento
  section.set_reservado          ""

  self.add_section_from_business section
end

#create_cronograma_faturamento(data_faturamento, data_vencimento, data_remessa_banco, data_remessa_fisica) ⇒ Object

Seção L



271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
# File 'lib/formatos/febraban150/febraban_150.rb', line 271

def create_cronograma_faturamento(data_faturamento, data_vencimento,
                                  data_remessa_banco, data_remessa_fisica)

  self.valida_existe_header

  section = self.get_new_section("L")

  section.set_data_faturamento       data_faturamento
  section.set_data_vencimento_fatura data_vencimento
  section.set_data_remessa_banco     data_remessa_banco
  section.set_data_remessa_fisica    data_remessa_fisica
  section.set_reservado              ""

  self.add_section_from_business section
end

#create_debito_conta(id_cliente_empresa, agencia_debito, id_cliente_banco, data_vencimento, valor_debito, codigo_moeda, obs_empresa, tipo_id_cliente, id_cliente, cod_movimento) ⇒ Object

Seção E



151
152
153
154
155
156
157
158
159
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
# File 'lib/formatos/febraban150/febraban_150.rb', line 151

def create_debito_conta(id_cliente_empresa, agencia_debito, id_cliente_banco,
                        data_vencimento, valor_debito, codigo_moeda,
                        obs_empresa, tipo_id_cliente, id_cliente,
                        cod_movimento)

  self.valida_existe_header

  section = self.get_new_section("E")

  case @versao
    when '04'
      section.set_id_cliente_empresa id_cliente_empresa
      section.set_agencia_debito     agencia_debito
      section.set_id_cliente_banco   id_cliente_banco
      section.set_data_vencimento    data_vencimento
      section.set_valor_debito       valor_debito
      section.set_codigo_moeda       codigo_moeda
      section.set_obs_empresa        obs_empresa
      section.set_reservado          ''
      section.set_cod_movimento      cod_movimento
    when '05'
      section.set_id_cliente_empresa id_cliente_empresa
      section.set_agencia_debito     agencia_debito
      section.set_id_cliente_banco   id_cliente_banco
      section.set_data_vencimento    data_vencimento
      section.set_valor_debito       valor_debito
      section.set_codigo_moeda       codigo_moeda
      section.set_obs_empresa        obs_empresa
      section.set_tipo_id_cliente    tipo_id_cliente
      section.set_id_cliente         id_cliente
      section.set_reservado          ''
      section.set_cod_movimento      cod_movimento
  end

  self.add_section_from_business section
end

#create_header(codigo_remessa, codigo_convenio, nome_empresa, codigo_banco, nome_banco, numero_sequencial) ⇒ Object

Seção A



88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/formatos/febraban150/febraban_150.rb', line 88

def create_header(codigo_remessa, codigo_convenio, nome_empresa,
                  codigo_banco, nome_banco, numero_sequencial)

  if self.get_header.nil?
    section = self.get_new_section('A')

    section.set_codigo_remessa        codigo_remessa
    section.set_codigo_convenio       codigo_convenio
    section.set_nome_empresa          nome_empresa
    section.set_codigo_banco          codigo_banco
    section.set_nome_banco            nome_banco
    section.set_data_geracao          Time.new
    section.set_numero_sequencial     numero_sequencial
    section.set_versao_layout         @versao
    section.set_identificacao_servico Febraban150A::ID_SERVICO
    section.set_reservado             ''

    self.add_section_from_business section

  else
    raise 'Header já declarado!'
  end
end

#create_incentivo_debito(id_cliente_empresa, tipo_id_cliente, id_cliente, nome, cidade, estado) ⇒ Object

Seção I



189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
# File 'lib/formatos/febraban150/febraban_150.rb', line 189

def create_incentivo_debito(id_cliente_empresa, tipo_id_cliente, id_cliente,
                            nome, cidade, estado)

  self.valida_existe_header

  section = self.get_new_section("I")

  section.set_id_cliente_empresa id_cliente_empresa
  section.set_tipo_id_cliente    tipo_id_cliente
  section.set_id_cliente         id_cliente
  section.set_nome               nome
  section.set_cidade             cidade
  section.set_estado             estado
  section.set_reservado          ""

  self.add_section_from_business section
end

#create_lei_10883(id_cliente_empresa, agencia_debito, id_cliente_banco, tipo_tratamento, valor_debito, codigo_receita, tipo_id_cliente, id_cliente) ⇒ Object

Seção K



248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
# File 'lib/formatos/febraban150/febraban_150.rb', line 248

def create_lei_10883(id_cliente_empresa, agencia_debito, id_cliente_banco,
                     tipo_tratamento, valor_debito, codigo_receita,
                     tipo_id_cliente, id_cliente)

  self.valida_existe_header
  valida_existe_section "E"

  section = self.get_new_section("K")

  section.set_id_cliente_empresa id_cliente_empresa
  section.set_agencia_debito     agencia_debito
  section.set_id_cliente_banco   id_cliente_banco
  section.set_tipo_tratamento    tipo_tratamento
  section.set_valor_debitado     valor_debito
  section.set_codigo_receita     codigo_receita
  section.set_tipo_id_cliente    tipo_id_cliente
  section.set_id_cliente         id_cliente
  section.set_reservado          ""

  self.add_section_from_business section
end

#create_occorencias(id_cliente_empresa, agencia_debito, id_cliente_banco, ocorrencia_1, ocorrencia_2, cod_movimento) ⇒ Object

Seção C



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/formatos/febraban150/febraban_150.rb', line 113

def create_occorencias(id_cliente_empresa, agencia_debito, id_cliente_banco,
                       ocorrencia_1, ocorrencia_2, cod_movimento)

  self.valida_existe_header

  section = self.get_new_section("C")

  section.set_id_cliente_empresa id_cliente_empresa
  section.set_agencia_debito     agencia_debito
  section.set_id_cliente_banco   id_cliente_banco
  section.set_ocorrencia_1       ocorrencia_1
  section.set_ocorrencia_2       ocorrencia_2
  section.set_reservado          ""
  section.set_cod_movimento      cod_movimento

  self.add_section_from_business section
end

#create_traillerObject

Seção Z



288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
# File 'lib/formatos/febraban150/febraban_150.rb', line 288

def create_trailler
  self.valida_existe_header

  if self.get_trailler.nil?
    if self.get_section("E").length > 0
      section = self.get_new_section("Z")
      section.set_reservado ""

      self.sections << section
      self.update_trailler
    else
      raise "Nenhum valor declarado (Seções E)!"
    end
  else
    raise "Trailler já declarado!"
  end
end

#get_confirmacaoObject



439
440
441
# File 'lib/formatos/febraban150/febraban_150.rb', line 439

def get_confirmacao
  self.get_section("J").first()
end

#get_headerObject



431
432
433
# File 'lib/formatos/febraban150/febraban_150.rb', line 431

def get_header
  self.get_section("A").first()
end

#get_section(section) ⇒ Object



419
420
421
# File 'lib/formatos/febraban150/febraban_150.rb', line 419

def get_section section
  self.sections.select {|c| c.is_section?(section) == true }
end

#get_traillerObject



435
436
437
# File 'lib/formatos/febraban150/febraban_150.rb', line 435

def get_trailler
  self.get_section("Z").first()
end

#get_valor_totalObject



443
444
445
# File 'lib/formatos/febraban150/febraban_150.rb', line 443

def get_valor_total
  self.get_trailler.get_valor_total
end

#has_section(section) ⇒ Object



415
416
417
# File 'lib/formatos/febraban150/febraban_150.rb', line 415

def has_section section
  self.get_section(section).length > 0
end

#identificacao_servicoObject



451
452
453
# File 'lib/formatos/febraban150/febraban_150.rb', line 451

def identificacao_servico
  self.get_header.get_identificacao_servico
end

#is_sections_valid?Boolean

Returns:

  • (Boolean)


423
424
425
# File 'lib/formatos/febraban150/febraban_150.rb', line 423

def is_sections_valid?
  self.sections.select {|b| b.is_valid? == false }.length == 0
end

#is_valid?Boolean

Returns:

  • (Boolean)


377
378
379
380
381
382
383
384
385
386
387
388
389
# File 'lib/formatos/febraban150/febraban_150.rb', line 377

def is_valid?
  if self.layout_empresa?
    raise "Layout de Empresa inválido!" unless self.is_empresa_valid?

  elsif self.layout_banco?
    raise "Layout de Banco inválido!" unless self.is_banco_valid?

  else
    raise "Código de Remessa desconhecido: #{codigo_remessa}"
  end

  result = self.is_sections_valid?
end

#layout_banco?Boolean

Returns:

  • (Boolean)


455
456
457
# File 'lib/formatos/febraban150/febraban_150.rb', line 455

def layout_banco?
  self.get_header.get_codigo_remessa == 2
end

#layout_empresa?Boolean

Returns:

  • (Boolean)


459
460
461
# File 'lib/formatos/febraban150/febraban_150.rb', line 459

def layout_empresa?
  self.get_header.get_codigo_remessa == 1
end

#save(path) ⇒ Object



467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
# File 'lib/formatos/febraban150/febraban_150.rb', line 467

def save (path)
  raise "Layout atual inválido!" unless self.is_valid?
  raise "Caminho para salvamento inválido!" if path.length < 0

  if path.end_with?('/')
    header = self.get_header
    path += "#{header.get_data_geracao}_#{header.get_codigo_remessa}_#{header.get_codigo_banco}_#{self.versao_layout}.bat"
  end

  puts "Salvando arquivo: '#{path}'..."
  content = self.to_s

  File.open(path, 'w') do |file|
    file.truncate(0)
    file.write(content)
  end
  puts "Arquivo '#{path}' salvo!"

  self
end

#sectionsObject



411
412
413
# File 'lib/formatos/febraban150/febraban_150.rb', line 411

def sections
  @sections.to_a
end

#to_sObject



427
428
429
# File 'lib/formatos/febraban150/febraban_150.rb', line 427

def to_s
  self.sections.map {|a| a.to_s}.join("\r\n")
end

#update_confirmacao_processo(data_processamento) ⇒ Object

Seção J



230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
# File 'lib/formatos/febraban150/febraban_150.rb', line 230

def update_confirmacao_processo data_processamento
  self.valida_existe_header
  self.valida_existe_trailler
  self.valida_existe_confirmacao

  header = self.get_header
  trailler = self.get_trailler

  section = self.get_confirmacao

  section.set_numero_sequencial  header.get_numero_sequencial
  section.set_data_geracao       header.get_data_geracao
  section.set_total_processados  trailler.get_total_registros
  section.set_valor_total        trailler.get_valor_total
  section.set_data_processamento data_processamento
end

#update_traillerObject

Seção Z



307
308
309
310
311
312
313
314
315
316
317
# File 'lib/formatos/febraban150/febraban_150.rb', line 307

def update_trailler
  self.valida_existe_trailler

  if self.get_section("E").length > 0
    section = self.get_trailler
    section.set_total_registros self.sections.length
    section.set_valor_total     self.calculate_valor_total
  else
    raise "Nenhum valor declarado (Seções E)!"
  end
end

#versao_layoutObject



447
448
449
# File 'lib/formatos/febraban150/febraban_150.rb', line 447

def versao_layout
  self.get_header.get_versao_layout
end