formatos-febraban 0.3.48 → 0.3.49

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,175 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Header - Empresa e Banco
5
+ class Cnab4000Header < FormatSection
6
+ require 'date'
7
+
8
+ def initialize master
9
+ super(master, true, true, false)
10
+ debugger
11
+ @section = Section.new({
12
+ 0 => Position.new(1, 1, false, "0", true), # Código do Registro
13
+ 1 => Position.new(2, 1, false), # Código Arquivo (1-Remessa, 2-Retorno)
14
+ 2 => Position.new(3, 7, false), # Identificação literal do arquivo (REMESSA/RETORNO)
15
+ 3 => Position.new(4, 2, false, "01"), # Código do serviço
16
+ 4 => Position.new(5, 15, false, "COBRANCA"), # Literal do serviço (COBRANÇA)
17
+ 5 => Position.new(6, 20, true), # Código da Empresa
18
+ 6 => Position.new(7, 30, false), # Nome da Empresa
19
+ 7 => Position.new(8, 3, true), # Número do Banco (BRADESCO: 237)
20
+ 8 => Position.new(9, 15, false), # Nome do Banco
21
+ 9 => Position.new(10, 6, false), # Data de gravacao do arquivo (DDMMAA)
22
+ 10 => Position.new(11, 8, false), # Reservado pelo Sistema - branco
23
+ 11 => Position.new(12, 9, false), # Identificacao do sistema
24
+ 12 => Position.new(13, 277, false), # Reservado pelo Sistema - branco
25
+ 13 => Position.new(14, 6, false, "000001") # Numero sequencial no arquivo
26
+ })
27
+ end
28
+
29
+ #-------------------------------------------------------------------
30
+ #-------------------------------------------------------------------
31
+ # Gerais
32
+ def process_section file
33
+ self.set_codigo_arquivo file[1..1]
34
+ self.set_identificacao_arquivo file[2..8]
35
+ self.set_codigo_servico file[9..10]
36
+ self.set_literal_servico file[11..25]
37
+ self.set_codigo_empresa file[26..45]
38
+ self.set_nome_empresa file[46..75]
39
+ self.set_numero_banco file[76..78]
40
+ self.set_nome_banco file[79..93]
41
+ self.set_data_gravacao file[94..99]
42
+ self.set_reservado_1 file[100..107]
43
+ self.set_identificacao_sistema file[108..116]
44
+ self.set_reservado_2 file[117..393]
45
+ self.set_sequencial file[394..399]
46
+ end
47
+
48
+ #-------------------------------------------------------------------
49
+ #-------------------------------------------------------------------
50
+ # Validações
51
+ def is_valid?
52
+ self.get_codigo_arquivo > 0 and
53
+ self.get_data_gravacao.length > 0 and
54
+ self.get_nome_empresa.length > 0 and
55
+ self.get_identificacao_sistema.length > 0 and
56
+ self.get_nome_banco.length > 0
57
+ end
58
+
59
+ #-------------------------------------------------------------------
60
+ #-------------------------------------------------------------------
61
+ # Getters
62
+ def get_codigo_arquivo
63
+ self.get_section_value(1).to_i
64
+ end
65
+
66
+ def get_identificacao_arquivo
67
+ self.get_section_value(2)
68
+ end
69
+
70
+ def get_codigo_servico
71
+ self.get_section_value(3)
72
+ end
73
+
74
+ def get_literal_servico
75
+ self.get_section_value(4)
76
+ end
77
+
78
+ def get_codigo_empresa
79
+ self.get_section_value(5)
80
+ end
81
+
82
+ def get_nome_empresa
83
+ self.get_section_value(6)
84
+ end
85
+
86
+ def get_numero_banco
87
+ self.get_section_value(7)
88
+ end
89
+
90
+ def get_nome_banco
91
+ self.get_section_value(8)
92
+ end
93
+
94
+ def get_data_gravacao
95
+ self.get_section_value(9)
96
+ end
97
+
98
+ def get_identificacao_sistema
99
+ self.get_section_value(11)
100
+ end
101
+
102
+ def get_sequencial
103
+ self.get_section_value(13)
104
+ end
105
+
106
+
107
+ #-------------------------------------------------------------------
108
+ #-------------------------------------------------------------------
109
+ # Setters
110
+ def set_codigo_arquivo valor
111
+ self.set_section_value(1, valor)
112
+ end
113
+
114
+ def set_identificacao_arquivo valor
115
+ self.set_section_value(2, valor)
116
+ end
117
+
118
+ def set_codigo_servico valor
119
+ self.set_section_value(3, valor)
120
+ end
121
+
122
+ def set_literal_servico valor = ""
123
+ self.set_section_value(4, valor)
124
+ end
125
+
126
+ def set_codigo_empresa valor = ""
127
+ self.set_section_value(5, valor)
128
+ end
129
+
130
+ def set_nome_empresa valor = ""
131
+ self.set_section_value(6, valor)
132
+ end
133
+
134
+ def set_numero_banco valor = ""
135
+ self.set_section_value(7, valor)
136
+ end
137
+
138
+ def set_nome_banco valor = ""
139
+ self.set_section_value(8, valor)
140
+ end
141
+
142
+ def set_data_gravacao valor
143
+ begin
144
+ valor = Date.strptime(valor, "%d%m%Y") if valor.is_a?(String)
145
+ real_data = valor.strftime("%d%m%y")
146
+
147
+ if real_data.length == 6
148
+ self.set_section_value(9, real_data)
149
+ else
150
+ raise "tamanho de data incorreto"
151
+ end
152
+
153
+ rescue
154
+ raise "#{get_id}: Data de Geração Inválida
155
+ Valor: #{valor}"
156
+ end
157
+ end
158
+
159
+ def set_reservado_1 valor = ""
160
+ self.set_section_value(10, valor)
161
+ end
162
+
163
+ def set_identificacao_sistema valor = ""
164
+ self.set_section_value(11, valor)
165
+ end
166
+
167
+ def set_reservado_2 valor = ""
168
+ self.set_section_value(12, valor)
169
+ end
170
+
171
+ def set_sequencial valor
172
+ self.set_section_value(13, valor)
173
+ end
174
+
175
+ end
@@ -0,0 +1,84 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Trailler - Empresa e Banco
5
+ class Cnab4000Trailler < FormatSection
6
+ require 'date'
7
+
8
+ def initialize master
9
+ super(master, true, true, false)
10
+
11
+ @section = Section.new({
12
+ 0 => Position.new(1, 1, false, "9", true), # Código do Registro
13
+ 1 => Position.new(2, 1, true, "9"), # Código Remessa
14
+ 2 => Position.new(3, 6, false), # Total de Registros
15
+ 3 => Position.new(4, 386, false), # Mensagem
16
+ 4 => Position.new(14, 6, false) # Numero sequencial no arquivo
17
+ })
18
+ end
19
+
20
+ #-------------------------------------------------------------------
21
+ #-------------------------------------------------------------------
22
+ # Gerais
23
+ def process_section file
24
+ self.set_codigo_remessa file[1..1]
25
+ self.set_total_registros file[2..7]
26
+ self.set_mensagem file[8..393]
27
+ self.set_sequencial file[394..399]
28
+ end
29
+
30
+ #-------------------------------------------------------------------
31
+ #-------------------------------------------------------------------
32
+ # Validações
33
+ def is_valid?
34
+ result = (self.get_codigo_remessa > 0 and
35
+ self.get_codigo_convenio.length > 0 and
36
+ self.get_nome_empresa.length > 0 and
37
+ self.get_codigo_banco > 0 and
38
+ self.get_nome_banco.length > 0 and
39
+ !self.get_data_geracao.nil? and
40
+ self.get_numero_sequencial > 0 and
41
+ self.get_versao_layout > 0 and
42
+ self.get_identificacao_servico.length > 0)
43
+ end
44
+
45
+ #-------------------------------------------------------------------
46
+ #-------------------------------------------------------------------
47
+ # Getters
48
+ def get_codigo_remessa
49
+ self.get_section_value(1).to_i
50
+ end
51
+
52
+ def get_total_registros
53
+ self.get_section_value(2)
54
+ end
55
+
56
+ def get_mensagem
57
+ self.get_section_value(3)
58
+ end
59
+
60
+ def get_sequencial
61
+ self.get_section_value(4)
62
+ end
63
+
64
+
65
+ #-------------------------------------------------------------------
66
+ #-------------------------------------------------------------------
67
+ # Setters
68
+ def set_codigo_remessa valor
69
+ self.set_section_value(1, valor)
70
+ end
71
+
72
+ def set_total_registros valor
73
+ self.set_section_value(2, valor)
74
+ end
75
+
76
+ def set_mensagem valor
77
+ self.set_section_value(3, valor)
78
+ end
79
+
80
+ def set_sequencial valor
81
+ self.set_section_value(4, valor)
82
+ end
83
+
84
+ end
@@ -8,6 +8,7 @@ end
8
8
 
9
9
  require 'formatos/febraban150/febraban_150'
10
10
  require 'formatos/cielo/cielo'
11
+ require 'formatos/cnab400/cnab_400'
11
12
 
12
13
  module Formatos
13
14
  module Febraban
@@ -1,5 +1,5 @@
1
1
  module Formatos
2
2
  module Febraban
3
- VERSION = '0.3.48'
3
+ VERSION = '0.3.49'
4
4
  end
5
5
  end
@@ -36,15 +36,12 @@ class Febraban150
36
36
  @sections = []
37
37
  @versao = versao
38
38
 
39
- self.valida_versao(file)
40
39
  self.valida_arquivo(file)
41
40
  end
42
41
 
43
42
  protected
44
43
  def valida_versao(file)
45
- if file.size > 0
46
- @versao = @versao.present? ? @versao : IO.readlines(file)[0][79..80]
47
- end
44
+ @versao = @versao ? (!@versao.nil? && !@versao.empty?) : IO.readlines(file)[0][79..80]
48
45
 
49
46
  unless Febraban150::VersaoDisponivel.include?(@versao)
50
47
  raise "Versão #{@versao} não suportada.
@@ -54,7 +51,11 @@ class Febraban150
54
51
 
55
52
  def valida_arquivo(file = '')
56
53
  if file.size > 0
54
+ self.valida_versao(file)
57
55
  self.process_file file
56
+
57
+ else
58
+ raise 'Fornercer um arquivo válido'
58
59
  end
59
60
  end
60
61
 
@@ -5,9 +5,13 @@
5
5
  class Febraban150A < FormatSection
6
6
  require 'date'
7
7
 
8
+ <<<<<<< HEAD:lib/formatos/febraban150/febraban_150_a.rb
8
9
  ID_SERVICO = "DÉBITO AUTOMÁTICO"
9
10
 
10
11
  def initialize(master, versao = Febraban150::VERSAO)
12
+ =======
13
+ def initialize master
14
+ >>>>>>> Iniciando codificação do formato CNAB400 para boletos:lib/formatos/cnab400/cnab_400_0.rb
11
15
  super(master, true, true, false)
12
16
 
13
17
  @versao = versao
@@ -41,6 +45,7 @@ class Febraban150A < FormatSection
41
45
 
42
46
  def monta_versao_05
43
47
  @section = Section.new({
48
+ <<<<<<< HEAD:lib/formatos/febraban150/febraban_150_a.rb
44
49
  0 => Position.new(1, 1, false,'A', true), # Código do Registro
45
50
  1 => Position.new(2, 1, true), # Código Remessa (1-Remessa, 2-Retorno)
46
51
  2 => Position.new(3, 20, false), # Código de ID enviado pelo Banco
@@ -52,12 +57,30 @@ class Febraban150A < FormatSection
52
57
  8 => Position.new(9, 2, true, @versao), # Versão do Layout (5, desde 05.05.2008)
53
58
  9 => Position.new(10, 17, false, Febraban150A::ID_SERVICO), # Identificação ("DÉBITO AUTOMÁTICO")
54
59
  10 => Position.new(11, 52, false), # Reservado pelo Sistema
60
+ =======
61
+ 0 => Position.new(1, 1, true, '0', true), # Identificação do Registro
62
+ 1 => Position.new(2, 1, true, '1'), # Código Remessa (1-Remessa, 2-Retorno)
63
+ 2 => Position.new(3, 7, false,'REMESSA'), # Literal Remessa
64
+ 3 => Position.new(4, 2, true, '01'), # Código do Serviço
65
+ 4 => Position.new(5, 15, false,'COBRANCA'), # Literal Serviço
66
+ 5 => Position.new(6, 20, true), # Código da Empresa
67
+ 6 => Position.new(7, 30, false), # Nome da Empresa
68
+ 7 => Position.new(8, 3, true), # Código do Banco
69
+ 8 => Position.new(9, 15, false, 'BRADESCO'), # Nome do Banco
70
+ 9 => Position.new(10, 6, true), # Data de Geração de Arquivo
71
+ 10 => Position.new(11, 8, false), # Brancos
72
+ 11 => Position.new(12, 2, false), # Identificação do Sistema
73
+ 12 => Position.new(13, 7, true), # Número Sequencial do Arquivo
74
+ 13 => Position.new(14, 277, false), # Brancos
75
+ 14 => Position.new(15, 6, true, '1'), # Sequencial de Regsitro
76
+ >>>>>>> Iniciando codificação do formato CNAB400 para boletos:lib/formatos/cnab400/cnab_400_0.rb
55
77
  })
56
78
  end
57
79
 
58
80
  #-------------------------------------------------------------------
59
81
  #-------------------------------------------------------------------
60
82
  # Gerais
83
+ <<<<<<< HEAD:lib/formatos/febraban150/febraban_150_a.rb
61
84
  public
62
85
  def process_section(file)
63
86
  case @versao
@@ -131,10 +154,29 @@ class Febraban150A < FormatSection
131
154
  self.get_numero_sequencial > 0 and
132
155
  self.get_versao_layout > 0 and
133
156
  self.get_identificacao_servico.length > 0)
157
+ =======
158
+ def process_section(file)
159
+ self.set_id_registro (file[1..1])
160
+ self.set_codigo_remessa (file[2..2])
161
+ self.set_literal (file[3..9])
162
+ self.set_codigo_servico (file[10..11])
163
+ self.set_servico (file[12..26])
164
+ self.set_codigo_empresa (file[27..46])
165
+ self.set_nome_empresa (file[47..76])
166
+ self.set_codigo_banco (file[77..79])
167
+ self.set_nome_banco (file[80..94])
168
+ self.set_data_geracao (file[95..100])
169
+ self.set_branco_1 (file[101..108])
170
+ self.set_id_sistema (file[109..110])
171
+ self.set_seq_arquivo (file[111..117])
172
+ self.set_branco_2 (file[118..394])
173
+ self.set_seq_registro (file[395..400])
174
+ >>>>>>> Iniciando codificação do formato CNAB400 para boletos:lib/formatos/cnab400/cnab_400_0.rb
134
175
  end
135
176
 
136
177
  #-------------------------------------------------------------------
137
178
  #-------------------------------------------------------------------
179
+ <<<<<<< HEAD:lib/formatos/febraban150/febraban_150_a.rb
138
180
  # Getters
139
181
  public
140
182
  def get_codigo_remessa
@@ -144,74 +186,96 @@ class Febraban150A < FormatSection
144
186
  def get_codigo_convenio
145
187
  self.get_section_value(2)
146
188
  end
189
+ =======
190
+ # Setters
191
+ def set_id_registro code
192
+ code = code.to_i
193
+ >>>>>>> Iniciando codificação do formato CNAB400 para boletos:lib/formatos/cnab400/cnab_400_0.rb
147
194
 
148
- def get_nome_empresa
149
- self.get_section_value(3)
195
+ unless code
196
+ self.set_section_value(0, code)
197
+ else
198
+ raise
199
+ end
150
200
  end
151
201
 
152
- def get_codigo_banco
153
- self.get_section_value(4).to_i
154
- end
202
+ def set_codigo_remessa code
203
+ code = code.to_s
155
204
 
156
- def get_nome_banco
157
- self.get_section_value(5)
205
+ if code.length >= 1
206
+ self.set_section_value(1, code)
207
+ else
208
+ raise
209
+ end
158
210
  end
159
211
 
160
- def get_data_geracao
161
- data = self.get_section_value(6)
162
- Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
163
- end
212
+ def set_literal literal
213
+ nome = literal.to_s
164
214
 
165
- def get_numero_sequencial
166
- data = self.get_section_value(7).to_i
215
+ if nome.to_s.length > 0
216
+ self.set_section_value(2, nome)
217
+ else
218
+ raise
219
+ end
167
220
  end
168
221
 
169
- def get_versao_layout
170
- data = self.get_section_value(8).to_i
171
- end
222
+ def set_codigo_servico codigo
223
+ codigo = codigo.to_i
172
224
 
173
- def get_identificacao_servico
174
- data = self.get_section_value(9)
225
+ if codigo > 0
226
+ self.set_section_value(3, codigo)
227
+ else
228
+ raise
229
+ end
175
230
  end
176
231
 
232
+ <<<<<<< HEAD:lib/formatos/febraban150/febraban_150_a.rb
177
233
  #-------------------------------------------------------------------
178
234
  #-------------------------------------------------------------------
179
235
  # Setters
180
236
  public
181
237
  def set_codigo_remessa code
182
238
  code = code.to_i
239
+ =======
240
+ def set_servico nome
241
+ nome = nome.to_s
242
+ >>>>>>> Iniciando codificação do formato CNAB400 para boletos:lib/formatos/cnab400/cnab_400_0.rb
183
243
 
184
- if code == 1 or code == 2
185
- self.set_section_value(1, code)
244
+ if nome.to_s.length > 0
245
+ self.set_section_value(4, nome)
186
246
  else
187
- raise "#{get_id}: 1 = Remessa - Enviado pela Empresa para o Banco
188
- 2 = Retorno - Enviado pelo Banco para a Empresa
189
- Valor: #{code}"
247
+ raise
190
248
  end
191
249
  end
192
250
 
251
+ <<<<<<< HEAD:lib/formatos/febraban150/febraban_150_a.rb
193
252
  def set_codigo_convenio code
194
253
  code = code.to_s
195
254
 
196
255
  if !code.nil? and
197
256
  (code.length > 0 and code.length <= 20)
257
+ =======
258
+ def set_codigo_empresa codigo
259
+ begin
260
+ if codigo.length == 20
261
+ self.set_section_value(5, codigo)
262
+ else
263
+ raise
264
+ end
265
+ >>>>>>> Iniciando codificação do formato CNAB400 para boletos:lib/formatos/cnab400/cnab_400_0.rb
198
266
 
199
- self.set_section_value(2, code)
200
- else
201
- raise "#{get_id}: Código atribuído pelo Banco, para seu controle interno.
202
- Este código será informado à Empresa, pelo Banco, antes
203
- da implantação do serviço de débito automático.
204
- Valor: #{code}"
267
+ rescue
268
+ raise
205
269
  end
206
270
  end
207
271
 
208
272
  def set_nome_empresa nome
209
273
  nome = nome.to_s
210
274
 
211
- if nome.to_s.length > 0
212
- self.set_section_value(3, nome)
275
+ if nome
276
+ self.set_section_value(6, nome)
213
277
  else
214
- raise "#{get_id}: Nome da Empresa não pode estar vazio"
278
+ raise
215
279
  end
216
280
  end
217
281
 
@@ -219,29 +283,29 @@ class Febraban150A < FormatSection
219
283
  codigo = codigo.to_i
220
284
 
221
285
  if codigo > 0
222
- self.set_section_value(4, codigo)
286
+ self.set_section_value(7, codigo)
223
287
  else
224
- raise "#{get_id}: Código do Banco não pode estar vazio"
288
+ raise
225
289
  end
226
290
  end
227
291
 
228
292
  def set_nome_banco nome
229
293
  nome = nome.to_s
230
294
 
231
- if nome.to_s.length > 0
232
- self.set_section_value(5, nome)
295
+ if nome.length > 0
296
+ self.set_section_value(8, nome)
233
297
  else
234
- raise "#{get_id}: Nome do Banco não pode estar vazio"
298
+ raise
235
299
  end
236
300
  end
237
301
 
238
302
  def set_data_geracao data
239
303
  begin
240
- data = Date.strptime(data, "%Y%m%d") if data.is_a?(String)
241
- real_data = data.strftime("%Y%m%d")
304
+ data = Date.strptime(data, "%d%m%y") if data.is_a?(String)
305
+ real_data = data.strftime('%d%m%y')
242
306
 
243
- if real_data.length == 8
244
- self.set_section_value(6, real_data)
307
+ if real_data.length == 6
308
+ self.set_section_value(9, real_data)
245
309
  else
246
310
  raise
247
311
  end
@@ -252,41 +316,34 @@ class Febraban150A < FormatSection
252
316
  end
253
317
  end
254
318
 
255
- def set_numero_sequencial numero
256
- numero = numero.to_i
257
-
258
- if numero > 0
259
- self.set_section_value(7, numero)
260
- else
261
- raise "#{get_id}: Número Sequencial deve ser positivo e maior que 0
262
- Valor: #{numero}"
263
- end
319
+ def set_branco_1 branco
320
+ branco = branco.to_s
321
+ self.set_section_value(10, branco)
264
322
  end
265
323
 
266
- def set_versao_layout versao
267
- versao = versao.to_i
268
-
269
- if versao > 0
270
- self.set_section_value(8, versao)
271
- else
272
- raise "#{get_id}: Versão deve ser 05 (a partir de 05.05.2008)
273
- Valor: #{versao}"
274
- end
324
+ def set_id_sistema id
325
+ id = id.to_s
326
+ self.set_section_value(11, id)
275
327
  end
276
328
 
277
- def set_identificacao_servico identificacao
278
- identificacao = identificacao.to_s
329
+ def set_seq_arquivo sequencial
330
+ sequencial = sequencial.to_i
331
+ self.set_section_value(12, sequencial)
332
+ end
279
333
 
280
- if identificacao.length > 0
281
- self.set_section_value(9, identificacao)
282
- else
283
- raise "#{get_id}: Deve ser Débito Automático
284
- Valor: #{identificacao}"
285
- end
334
+ def set_branco_2 branco
335
+ branco = branco.to_s
336
+ self.set_section_value(13, branco)
286
337
  end
287
338
 
288
- def set_reservado reservado
289
- reservado = reservado.to_s
290
- self.set_section_value(10, reservado)
339
+ def set_seq_registro sequencial
340
+ sequencial = sequencial.to_i
341
+ self.set_section_value(14, sequencial)
291
342
  end
292
343
  end
344
+
345
+
346
+
347
+
348
+
349
+