formatos-febraban 0.3.45 → 0.3.47

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,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