formatos-febraban 0.3.45 → 0.3.47

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,443 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Header - Empresa e Banco
5
+ class Cnab4001 < 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, true, '1', true), # Identificação do Registro
13
+ 1 => Position.new(2, 7, true), # Agência de Débito (opcional)
14
+ 2 => Position.new(8, 12, true), # Razão da Conta Corrente (opcional)
15
+ 3 => Position.new(13, 20, true), # Conta Corrente (opcional)
16
+ 4 => Position.new(21, 37, false), # Identificação da Empresa Cedente no Banco
17
+ 5 => Position.new(38, 62, false), # No Controle do Participante (Empresa)
18
+ 6 => Position.new(63, 65, true), # Código do Banco a ser debitado na Câmara de Compensação
19
+ 7 => Position.new(66, 66, true, '0'), # Campo de Multa (2 = Com multa, 0 = Sem multa)
20
+ 8 => Position.new(67, 70, true), # Percentual de multa
21
+ 9 => Position.new(71, 81, true, '0'), # Identificação do Título no Banco
22
+ 10 => Position.new(82, 82, false, '0'), # Digito de Auto Conferencia do Número Bancário.
23
+ 11 => Position.new(83, 92, true), # Desconto Bonificação por dia
24
+ 12 => Position.new(93, 93, true, '1'), # Condição para Emissão da papeleta de Cobrança 1 = Banco emite e Processa o registro, 2 = Cliente emite e o Banco somente processa o registro
25
+ 13 => Position.new(94, 94, false), # Ident. se emite Boleto Automático
26
+ 14 => Position.new(95, 104, false), # Identificação da Operação do Banco
27
+ 15 => Position.new(105, 105, false), # Indicador Rateio Crédito (Opcional)
28
+ 16 => Position.new(106, 106, true), # Endereçamento para Aviso do Débito Automático em Conta Corrente (Opcional)
29
+ 17 => Position.new(107, 108, false), # Branco
30
+ 18 => Position.new(109, 110, true), # Identificação da Ocorrência
31
+ 19 => Position.new(111, 120, false), # No do Documento
32
+ 20 => Position.new(121, 126, true), # Data do Vencimento do Título
33
+ 21 => Position.new(127, 139, true), # Valor do Título
34
+ 22 => Position.new(140, 152, true, '0'), # Banco Encarregado da Cobrança (Preencher com zeros)
35
+ 23 => Position.new(143, 147, true, '0'), # Agência Depositária (Preencher com zeros)
36
+ 24 => Position.new(148, 149, true), # Espécie de Título: 01-Duplicata, 03-Nota de Seguro, 04-Cobrança Seriada, 05-Recibo, 10-Letras de Câmbio, 11-Nota de Débito, 12-Duplicata de Serv., 99-Outros
37
+ 25 => Position.new(150, 150, false, 'N', true), # Identificação ( Fixo)
38
+ 26 => Position.new(151, 156, true), # Data da emissão do Título
39
+ 27 => Position.new(157, 158, true), # 1a instrução
40
+ 28 => Position.new(159, 160, true), # 2a instrução
41
+ 29 => Position.new(161, 173, true), # Valor a ser cobrado por Dia de Atraso
42
+ 30 => Position.new(174, 179, true), # Data Limite P/Concessão de Desconto
43
+ 31 => Position.new(180, 192, true), # Valor do Desconto
44
+ 32 => Position.new(193, 205, true), # Valor do IOF
45
+ 33 => Position.new(206, 218, true), # Valor Abatimento
46
+ 34 => Position.new(219, 220, true), # 01-CPF, 02-CNPJ, 03-PIS/PASEP, 98-Não tem, 99-Outros,
47
+ 35 => Position.new(221, 234, true), # CNPJ/ CPF
48
+ 36 => Position.new(235, 274, false), # Nome do Sacado
49
+ 37 => Position.new(235, 314, false), # Endereço do Sacado
50
+ 38 => Position.new(315, 326, false), # 1a Mensagem
51
+ 39 => Position.new(317, 334, true), # CEP
52
+ 40 => Position.new(335, 394, false), # Sacador/Avalista ou 2a Mensagem
53
+ 41 => Position.new(395, 400, true), # No Seqüencial do Registro
54
+ })
55
+ end
56
+
57
+ #-------------------------------------------------------------------
58
+ #-------------------------------------------------------------------
59
+ # Gerais
60
+ def process_section file
61
+ self.set_id_registro file[1, 1]
62
+ self.set_agencia_debito file[2, 7]
63
+ self.set_razao_conta file[8, 12]
64
+ self.set_conta_corrente file[13, 20]
65
+ self.set_codigo_empresa file[21, 37]
66
+ self.set_numero_controle file[38, 62]
67
+ self.set_codigo_banco file[63, 65]
68
+ self.set_multa file[66, 66]
69
+ self.set_percent_multa file[67, 70]
70
+ self.set_id_titulo file[71, 81]
71
+ self.set_digito_conferencia file[82, 82]
72
+ self.set_desconto_dia file[83, 92]
73
+ self.set_condicao_emissao file[93, 93]
74
+ self.set_emite_boleto file[94, 94]
75
+ self.set_id_operacao file[95, 104]
76
+ self.set_indicador_rateio file[105, 105]
77
+ self.set_enderecamento file[106, 106]
78
+ self.set_branco file[107, 108]
79
+ self.set_id_ocorrencia file[109, 110]
80
+ self.set_numero_documento file[111, 120]
81
+ self.set_data_vencimento file[121, 126]
82
+ self.set_valor file[127, 139]
83
+ self.set_banco_cobranca file[140, 152]
84
+ self.set_agencia_depositaria file[143, 147]
85
+ self.set_especie_titulo file[148, 149]
86
+ self.set_identificacao file[150, 150]
87
+ self.set_data_emissao file[151, 156]
88
+ self.set_primeira_instrucao file[157, 158]
89
+ self.set_segunda_instrucao file[159, 160]
90
+ self.set_valor_dia_atraso file[161, 173]
91
+ self.set_data_limite_concessao file[174, 179]
92
+ self.set_valor_desconto file[180, 192]
93
+ self.set_valor_iof file[193, 205]
94
+ self.set_valor_abatimento file[206, 218]
95
+ self.set_tipo_inscricao file[219, 220]
96
+ self.set_numero_inscricao file[221, 234]
97
+ self.set_nome_sacado file[235, 274]
98
+ self.set_endereco_sacado file[235, 314]
99
+ self.set_primeira_mensagem file[315, 326]
100
+ self.set_cep file[317, 334]
101
+ self.set_sacador_avalista file[335, 394]
102
+ self.set_seq_registro file[395, 400]
103
+ end
104
+
105
+ #-------------------------------------------------------------------
106
+ #-------------------------------------------------------------------
107
+ # Setters
108
+ def set_id_registro(valor)
109
+ unless valor
110
+ self.set_section_value(0, valor)
111
+ else
112
+ raise
113
+ end
114
+ end
115
+
116
+ def set_agencia_debito(valor)
117
+ unless valor
118
+ self.set_section_value(1, valor)
119
+ else
120
+ raise
121
+ end
122
+ end
123
+
124
+ def set_razao_conta(valor)
125
+ unless valor
126
+ self.set_section_value(2, valor)
127
+ else
128
+ raise
129
+ end
130
+ end
131
+
132
+ def set_conta_corrente(valor)
133
+ unless valor
134
+ self.set_section_value(3, valor)
135
+ else
136
+ raise
137
+ end
138
+ end
139
+
140
+ def set_codigo_empresa(valor)
141
+ unless valor
142
+ self.set_section_value(4, valor)
143
+ else
144
+ raise
145
+ end
146
+ end
147
+
148
+ def set_numero_controle(valor)
149
+ unless valor
150
+ self.set_section_value(5, valor)
151
+ else
152
+ raise
153
+ end
154
+ end
155
+
156
+ def set_codigo_banco(valor)
157
+ unless valor
158
+ self.set_section_value(6, valor)
159
+ else
160
+ raise
161
+ end
162
+ end
163
+
164
+ def set_multa(valor)
165
+ unless valor
166
+ self.set_section_value(7, valor)
167
+ else
168
+ raise
169
+ end
170
+ end
171
+
172
+ def set_percent_multa(valor)
173
+ unless valor
174
+ self.set_section_value(8, valor)
175
+ else
176
+ raise
177
+ end
178
+ end
179
+
180
+ def set_id_titulo(valor)
181
+ unless valor
182
+ self.set_section_value(9, valor)
183
+ else
184
+ raise
185
+ end
186
+ end
187
+
188
+ def set_digito_conferencia(valor)
189
+ unless valor
190
+ self.set_section_value(10, valor)
191
+ else
192
+ raise
193
+ end
194
+ end
195
+
196
+ def set_desconto_dia(valor)
197
+ unless valor
198
+ self.set_section_value(11, valor)
199
+ else
200
+ raise
201
+ end
202
+ end
203
+
204
+ def set_condicao_emissao(valor)
205
+ unless valor
206
+ self.set_section_value(12, valor)
207
+ else
208
+ raise
209
+ end
210
+ end
211
+
212
+ def set_emite_boleto(valor)
213
+ unless valor
214
+ self.set_section_value(13, valor)
215
+ else
216
+ raise
217
+ end
218
+ end
219
+
220
+ def set_id_operacao(valor)
221
+ unless valor
222
+ self.set_section_value(14, valor)
223
+ else
224
+ raise
225
+ end
226
+ end
227
+
228
+ def set_indicador_rateio(valor)
229
+ unless valor
230
+ self.set_section_value(15, valor)
231
+ else
232
+ raise
233
+ end
234
+ end
235
+
236
+ def set_enderecamento(valor)
237
+ unless valor
238
+ self.set_section_value(16, valor)
239
+ else
240
+ raise
241
+ end
242
+ end
243
+
244
+ def set_branco(valor)
245
+ unless valor
246
+ self.set_section_value(17, valor)
247
+ else
248
+ raise
249
+ end
250
+ end
251
+
252
+ def set_id_ocorrencia(valor)
253
+ unless valor
254
+ self.set_section_value(18, valor)
255
+ else
256
+ raise
257
+ end
258
+ end
259
+
260
+ def set_numero_documento(valor)
261
+ unless valor
262
+ self.set_section_value(19, valor)
263
+ else
264
+ raise
265
+ end
266
+ end
267
+
268
+ def set_data_vencimento(valor)
269
+ unless valor
270
+ self.set_section_value(20, valor)
271
+ else
272
+ raise
273
+ end
274
+ end
275
+
276
+ def set_valor(valor)
277
+ unless valor
278
+ self.set_section_value(21, valor)
279
+ else
280
+ raise
281
+ end
282
+ end
283
+
284
+ def set_banco_cobranca(valor)
285
+ unless valor
286
+ self.set_section_value(22, valor)
287
+ else
288
+ raise
289
+ end
290
+ end
291
+
292
+ def set_agencia_depositaria(valor)
293
+ unless valor
294
+ self.set_section_value(23, valor)
295
+ else
296
+ raise
297
+ end
298
+ end
299
+
300
+ def set_especie_titulo(valor)
301
+ unless valor
302
+ self.set_section_value(24, valor)
303
+ else
304
+ raise
305
+ end
306
+ end
307
+
308
+ def set_identificacao(valor)
309
+ unless valor
310
+ self.set_section_value(25, valor)
311
+ else
312
+ raise
313
+ end
314
+ end
315
+
316
+ def set_data_emissao(valor)
317
+ unless valor
318
+ self.set_section_value(26, valor)
319
+ else
320
+ raise
321
+ end
322
+ end
323
+
324
+ def set_primeira_instrucao(valor)
325
+ unless valor
326
+ self.set_section_value(27, valor)
327
+ else
328
+ raise
329
+ end
330
+ end
331
+
332
+ def set_segunda_instrucao(valor)
333
+ unless valor
334
+ self.set_section_value(28, valor)
335
+ else
336
+ raise
337
+ end
338
+ end
339
+
340
+ def set_valor_dia_atraso(valor)
341
+ unless valor
342
+ self.set_section_value(29, valor)
343
+ else
344
+ raise
345
+ end
346
+ end
347
+
348
+ def set_data_limite_concessao(valor)
349
+ unless valor
350
+ self.set_section_value(30, valor)
351
+ else
352
+ raise
353
+ end
354
+ end
355
+
356
+ def set_valor_desconto(valor)
357
+ unless valor
358
+ self.set_section_value(31, valor)
359
+ else
360
+ raise
361
+ end
362
+ end
363
+
364
+ def set_valor_iof(valor)
365
+ unless valor
366
+ self.set_section_value(32, valor)
367
+ else
368
+ raise
369
+ end
370
+ end
371
+
372
+ def set_valor_abatimento(valor)
373
+ unless valor
374
+ self.set_section_value(33, valor)
375
+ else
376
+ raise
377
+ end
378
+ end
379
+
380
+ def set_tipo_inscricao(valor)
381
+ unless valor
382
+ self.set_section_value(34, valor)
383
+ else
384
+ raise
385
+ end
386
+ end
387
+
388
+ def set_numero_inscricao(valor)
389
+ unless valor
390
+ self.set_section_value(35, valor)
391
+ else
392
+ raise
393
+ end
394
+ end
395
+
396
+ def set_nome_sacado(valor)
397
+ unless valor
398
+ self.set_section_value(36, valor)
399
+ else
400
+ raise
401
+ end
402
+ end
403
+
404
+ def set_endereco_sacado(valor)
405
+ unless valor
406
+ self.set_section_value(37, valor)
407
+ else
408
+ raise
409
+ end
410
+ end
411
+
412
+ def set_primeira_mensagem(valor)
413
+ unless valor
414
+ self.set_section_value(38, valor)
415
+ else
416
+ raise
417
+ end
418
+ end
419
+
420
+ def set_cep(valor)
421
+ unless valor
422
+ self.set_section_value(39, valor)
423
+ else
424
+ raise
425
+ end
426
+ end
427
+
428
+ def set_sacador_avalista(valor)
429
+ unless valor
430
+ self.set_section_value(40, valor)
431
+ else
432
+ raise
433
+ end
434
+ end
435
+
436
+ def set_seq_registro(valor)
437
+ unless valor
438
+ self.set_section_value(41, valor)
439
+ else
440
+ raise
441
+ end
442
+ end
443
+ end
@@ -0,0 +1,188 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Header - Empresa e Banco
5
+ class Cnab4002 < 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, true, '0', true), # Identificação do Registro
13
+ 1 => Position.new(2, 1, true, '1'), # Código Remessa (1-Remessa, 2-Retorno)
14
+ 2 => Position.new(3, 7, false,'REMESSA'), # Literal Remessa
15
+ 3 => Position.new(4, 2, true, '01'), # Código do Serviço
16
+ 4 => Position.new(5, 15, false,'COBRANCA'), # Literal Serviço
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), # Código do Banco
20
+ 8 => Position.new(9, 15, false, 'BRADESCO'), # Nome do Banco
21
+ 9 => Position.new(10, 6, true), # Data de Geração de Arquivo
22
+ 10 => Position.new(11, 8, false), # Brancos
23
+ 11 => Position.new(12, 2, false), # Identificação do Sistema
24
+ 12 => Position.new(13, 7, true), # Número Sequencial do Arquivo
25
+ 13 => Position.new(14, 277, false), # Brancos
26
+ 14 => Position.new(15, 6, true, '1'), # Sequencial de Regsitro
27
+ })
28
+ end
29
+
30
+ #-------------------------------------------------------------------
31
+ #-------------------------------------------------------------------
32
+ # Gerais
33
+ def process_section file
34
+ self.set_id_registro file[1..1]
35
+ self.set_codigo_remessa file[2..2]
36
+ self.set_literal file[3..9]
37
+ self.set_codigo_servico file[10..11]
38
+ self.set_servico file[12..26]
39
+ self.set_codigo_empresa file[27..46]
40
+ self.set_nome_empresa file[47..76]
41
+ self.set_codigo_banco file[77..79]
42
+ self.set_nome_banco file[80..94]
43
+ self.set_data_geracao file[95..100]
44
+ self.set_branco_1 file[101..108]
45
+ self.set_id_sistema file[109..110]
46
+ self.set_seq_arquivo file[111..117]
47
+ self.set_branco_2 file[118..394]
48
+ self.set_seq_registro file[395..400]
49
+ end
50
+
51
+ #-------------------------------------------------------------------
52
+ #-------------------------------------------------------------------
53
+ # Setters
54
+ def set_id_registro code
55
+ code = code.to_i
56
+
57
+ unless code
58
+ self.set_section_value(0, code)
59
+ else
60
+ raise
61
+ end
62
+ end
63
+
64
+ def set_codigo_remessa code
65
+ code = code.to_s
66
+
67
+ if code.length >= 1
68
+ self.set_section_value(1, code)
69
+ else
70
+ raise
71
+ end
72
+ end
73
+
74
+ def set_literal literal
75
+ nome = literal.to_s
76
+
77
+ if nome.to_s.length > 0
78
+ self.set_section_value(2, nome)
79
+ else
80
+ raise
81
+ end
82
+ end
83
+
84
+ def set_codigo_servico codigo
85
+ codigo = codigo.to_i
86
+
87
+ if codigo > 0
88
+ self.set_section_value(3, codigo)
89
+ else
90
+ raise
91
+ end
92
+ end
93
+
94
+ def set_servico nome
95
+ nome = nome.to_s
96
+
97
+ if nome.to_s.length > 0
98
+ self.set_section_value(4, nome)
99
+ else
100
+ raise
101
+ end
102
+ end
103
+
104
+ def set_codigo_empresa codigo
105
+ begin
106
+ if codigo.length == 20
107
+ self.set_section_value(5, codigo)
108
+ else
109
+ raise
110
+ end
111
+
112
+ rescue
113
+ raise
114
+ end
115
+ end
116
+
117
+ def set_nome_empresa nome
118
+ nome = nome.to_s
119
+
120
+ if nome
121
+ self.set_section_value(6, nome)
122
+ else
123
+ raise
124
+ end
125
+ end
126
+
127
+ def set_codigo_banco codigo
128
+ codigo = codigo.to_i
129
+
130
+ if codigo > 0
131
+ self.set_section_value(7, codigo)
132
+ else
133
+ raise
134
+ end
135
+ end
136
+
137
+ def set_nome_banco nome
138
+ nome = nome.to_s
139
+
140
+ if nome.length > 0
141
+ self.set_section_value(8, nome)
142
+ else
143
+ raise
144
+ end
145
+ end
146
+
147
+ def set_data_geracao data
148
+ begin
149
+ data = Date.strptime(data, "%d%m%y") if data.is_a?(String)
150
+ real_data = data.strftime('%d%m%y')
151
+
152
+ if real_data.length == 6
153
+ self.set_section_value(9, real_data)
154
+ else
155
+ raise
156
+ end
157
+
158
+ rescue
159
+ raise "#{get_id}: Data de Geração Inválida
160
+ Valor: #{data}"
161
+ end
162
+ end
163
+
164
+ def set_branco_1 branco
165
+ branco = branco.to_s
166
+ self.set_section_value(10, branco)
167
+ end
168
+
169
+ def set_id_sistema id
170
+ id = id.to_s
171
+ self.set_section_value(11, id)
172
+ end
173
+
174
+ def set_seq_arquivo sequencial
175
+ sequencial = sequencial.to_i
176
+ self.set_section_value(12, sequencial)
177
+ end
178
+
179
+ def set_branco_2 branco
180
+ branco = branco.to_s
181
+ self.set_section_value(13, branco)
182
+ end
183
+
184
+ def set_seq_registro sequencial
185
+ sequencial = sequencial.to_i
186
+ self.set_section_value(14, sequencial)
187
+ end
188
+ end