formatos-febraban 0.3.48 → 0.3.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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
+