formatos-febraban 0.3.53 → 0.3.54

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,33 +5,78 @@
5
5
  class Cnab4000Header < FormatSection
6
6
  require 'date'
7
7
 
8
- def initialize master
8
+ def initialize(master, tipo)
9
9
  super(master, true, true, false)
10
- debugger
10
+
11
+ @versao = tipo
12
+
13
+ case @versao
14
+ when :remessa
15
+ header_remessa
16
+ when :retorno
17
+ header_retorno
18
+ else
19
+ raise "Versão não suportada: #{tipo}"
20
+ end
21
+ end
22
+
23
+ def header_remessa
24
+
11
25
  @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
- })
26
+ 0 => Position.new(1, 1, false, "0", true), # Código do Registro
27
+ 1 => Position.new(2, 1, false, "1"), # Código Arquivo (1-Remessa, 2-Retorno)
28
+ 2 => Position.new(3, 7, false, "REMESSA"), # Identificação literal do arquivo (REMESSA/RETORNO)
29
+ 3 => Position.new(4, 2, false, "01"), # Código do serviço
30
+ 4 => Position.new(5, 15, false, "COBRANCA"), # Literal do serviço (COBRANÇA)
31
+ 5 => Position.new(6, 20, true), # Código da Empresa
32
+ 6 => Position.new(7, 30, false), # Nome da Empresa
33
+ 7 => Position.new(8, 3, true), # Número do Banco (BRADESCO: 237)
34
+ 8 => Position.new(9, 15, false), # Nome do Banco
35
+ 9 => Position.new(10, 6, false), # Data de gravacao do arquivo (DDMMAA)
36
+ 10 => Position.new(11, 8, false), # Reservado pelo Sistema - branco
37
+ 11 => Position.new(12, 2, false, "01"), # Identificacao do sistema (01: remessa)
38
+ 12 => Position.new(13, 7, true), # Numero sequencial da remessa
39
+ 13 => Position.new(14, 277, false), # Reservado pelo Sistema - branco
40
+ 14 => Position.new(15, 6, false, "000001") # Numero sequencial no arquivo
41
+ })
42
+ end
43
+
44
+ def header_retorno
45
+ @section = Section.new({
46
+ 0 => Position.new(1, 1, false, "0", true), # Código do Registro
47
+ 1 => Position.new(2, 1, false, "2"), # Código Arquivo (1-Remessa, 2-Retorno)
48
+ 2 => Position.new(3, 7, false, "RETORNO"), # Identificação literal do arquivo (REMESSA/RETORNO)
49
+ 3 => Position.new(4, 2, false, "01"), # Código do serviço
50
+ 4 => Position.new(5, 15, false, "COBRANCA"), # Literal do serviço (COBRANÇA)
51
+ 5 => Position.new(6, 20, true), # Código da Empresa
52
+ 6 => Position.new(7, 30, false), # Nome da Empresa
53
+ 7 => Position.new(8, 3, true), # Número do Banco (BRADESCO: 237)
54
+ 8 => Position.new(9, 15, false), # Nome do Banco
55
+ 9 => Position.new(10, 6, false), # Data de gravacao do arquivo (DDMMAA)
56
+ 10 => Position.new(11, 8, false), # Densidade da gravacao do arquivo
57
+ 11 => Position.new(12, 5, false), # Numero do aviso bancario
58
+ 12 => Position.new(13, 266, false), # Reservado pelo Sistema - branco
59
+ 13 => Position.new(14, 6, false), # Data do crédito (DDMMAA)
60
+ 14 => Position.new(15, 9, false), # Reservado pelo Sistema - branco
61
+ 15 => Position.new(16, 6, false, "000001") # Numero sequencial no arquivo
62
+ })
27
63
  end
28
64
 
29
65
  #-------------------------------------------------------------------
30
66
  #-------------------------------------------------------------------
31
67
  # Gerais
32
- def process_section file
68
+ def process_section(file)
69
+ case @versao
70
+ when :remessa
71
+ processa_remessa file
72
+ when :retorno
73
+ processa_retorno file
74
+ end
75
+ end
76
+
77
+ def processa_remessa file
33
78
  self.set_codigo_arquivo file[1..1]
34
- self.set_identificacao_arquivo file[2..8]
79
+ self.set_literal_arquivo file[2..8]
35
80
  self.set_codigo_servico file[9..10]
36
81
  self.set_literal_servico file[11..25]
37
82
  self.set_codigo_empresa file[26..45]
@@ -40,11 +85,30 @@ class Cnab4000Header < FormatSection
40
85
  self.set_nome_banco file[79..93]
41
86
  self.set_data_gravacao file[94..99]
42
87
  self.set_reservado_1 file[100..107]
43
- self.set_identificacao_sistema file[108..116]
88
+ self.set_identificacao_sistema file[108..109]
89
+ self.set_sequencial_remessa file[110..116]
44
90
  self.set_reservado_2 file[117..393]
45
91
  self.set_sequencial file[394..399]
46
92
  end
47
93
 
94
+ def processa_retorno file
95
+ self.set_codigo_arquivo file[1..1]
96
+ self.set_literal_arquivo file[2..8]
97
+ self.set_codigo_servico file[9..10]
98
+ self.set_literal_servico file[11..25]
99
+ self.set_codigo_empresa file[26..45]
100
+ self.set_nome_empresa file[46..75]
101
+ self.set_numero_banco file[76..78]
102
+ self.set_nome_banco file[79..93]
103
+ self.set_data_gravacao file[94..99]
104
+ self.set_densidade_arquivo file[100..107]
105
+ self.set_numero_aviso file[108..112]
106
+ self.set_brancos_1 file[113..378]
107
+ self.set_data_credito file[379..384]
108
+ self.set_brancos_2 file[385..393]
109
+ self.set_sequencial_retorno file[394..399]
110
+ end
111
+
48
112
  #-------------------------------------------------------------------
49
113
  #-------------------------------------------------------------------
50
114
  # Validações
@@ -99,8 +163,12 @@ class Cnab4000Header < FormatSection
99
163
  self.get_section_value(11)
100
164
  end
101
165
 
166
+ def get_sequencial_remessa
167
+ self.get_section_value(12)
168
+ end
169
+
102
170
  def get_sequencial
103
- self.get_section_value(13)
171
+ self.get_section_value(14)
104
172
  end
105
173
 
106
174
 
@@ -156,20 +224,62 @@ class Cnab4000Header < FormatSection
156
224
  end
157
225
  end
158
226
 
159
- def set_reservado_1 valor = ""
227
+ def set_reservado_1 valor = " "
160
228
  self.set_section_value(10, valor)
161
229
  end
162
230
 
163
- def set_identificacao_sistema valor = ""
231
+ def set_densidade_arquivo valor = " "
232
+ self.set_section_value(10, valor)
233
+ end
234
+
235
+ def set_identificacao_sistema valor
236
+ self.set_section_value(11, valor)
237
+ end
238
+
239
+ def set_numero_aviso valor
164
240
  self.set_section_value(11, valor)
165
241
  end
166
242
 
167
- def set_reservado_2 valor = ""
243
+ def set_sequencial_remessa valor = ""
168
244
  self.set_section_value(12, valor)
169
245
  end
170
246
 
171
- def set_sequencial valor
247
+ def set_brancos_1 valor = " "
248
+ self.set_section_value(12, valor)
249
+ end
250
+
251
+ def set_reservado_2 valor = " "
172
252
  self.set_section_value(13, valor)
173
253
  end
174
254
 
255
+ def set_data_credito valor
256
+ begin
257
+ valor = Date.strptime(valor, "%d%m%Y") if valor.is_a?(String)
258
+ real_data = valor.strftime("%d%m%y")
259
+
260
+ if real_data.length == 6
261
+ self.set_section_value(13, real_data)
262
+ else
263
+ raise "tamanho de data incorreto"
264
+ end
265
+
266
+ rescue
267
+ raise "#{get_id}: Data de Geração Inválida
268
+ Valor: #{valor}"
269
+ end
270
+ end
271
+
272
+ def set_sequencial valor
273
+ self.set_section_value(14, valor)
274
+ end
275
+
276
+ def set_brancos_2 valor = " "
277
+ self.set_section_value(14, valor)
278
+ end
279
+
280
+
281
+ def set_sequencial_retorno valor
282
+ self.set_section_value(15, valor)
283
+ end
284
+
175
285
  end
@@ -5,41 +5,118 @@
5
5
  class Cnab4000Trailler < FormatSection
6
6
  require 'date'
7
7
 
8
- def initialize master
8
+ def initialize(master, tipo)
9
9
  super(master, true, true, false)
10
10
 
11
+ @versao = tipo
12
+
13
+ case @versao
14
+ when :remessa
15
+ trailler_remessa
16
+ when :retorno
17
+ trailler_retorno
18
+ else
19
+ raise "Versão não suportada: #{tipo}"
20
+ end
21
+
22
+ end
23
+
24
+ def trailler_remessa
25
+ @section = Section.new({
26
+ 0 => Position.new(1, 1, false, "9", true), # Código do Registro
27
+ 1 => Position.new(2, 393, false), # Reservado - Brancos
28
+ 2 => Position.new(3, 6, true), # Numero sequencial do registro
29
+ })
30
+ end
31
+
32
+ def trailler_retorno
11
33
  @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
- })
34
+ 0 => Position.new(1, 1, false, "9", true), # Código do Registro
35
+ 1 => Position.new(2, 1, true, "2"), # Código Arquivo (1-Remessa, 2-Retorno)
36
+ 2 => Position.new(3, 2, true, "01"), # Id tipo de registro
37
+ 3 => Position.new(4, 3, true), # Codigo do banco
38
+ 4 => Position.new(5, 10, false), # Reservado - branco
39
+ 5 => Position.new(6, 8, false), # Qtde de titulo na cobranca
40
+ 6 => Position.new(7, 14, false), # Valor total em cobranca
41
+ 7 => Position.new(8, 8, false), # Numero aviso bancario
42
+ 8 => Position.new(9, 10, false), # Reservado - branco
43
+ 9 => Position.new(10, 5, false), # Qtde de registros - confirmacao
44
+ 10 => Position.new(11, 12, false), # Valor dos registros - confirmacao
45
+ 11 => Position.new(12, 12, false), # Valor dos registros - liquidacao
46
+ 12 => Position.new(13, 5, false), # Qtde dos registros - liquidacao
47
+ 13 => Position.new(14, 12, false), # Valor dos registros - ocorrencia 06
48
+ 14 => Position.new(15, 5, false), # Qtde dos registros - baixados
49
+ 15 => Position.new(16, 12, false), # Valor dos registros - baixados
50
+ 16 => Position.new(17, 5, false), # Qtde dos registros - abatimento cancelado
51
+ 17 => Position.new(18, 12, false), # Valor dos registros - abatimento cancelado
52
+ 18 => Position.new(19, 5, false), # Qtde dos registros - vencimento alterado
53
+ 19 => Position.new(20, 12, false), # Valor dos registros - vencimento alterado
54
+ 20 => Position.new(21, 5, false), # Qtde dos registros - abatimento concedido
55
+ 21 => Position.new(22, 12, false), # Valor dos registros - abatimento concedido
56
+ 22 => Position.new(23, 5, false), # Qtde dos registros - confirmacao instrucao protesto
57
+ 23 => Position.new(24, 12, false), # Valor dos registros - confirmacao instrucao protesto
58
+ 24 => Position.new(25, 174, false), # Reservado - branco
59
+ 25 => Position.new(26, 15, false), # Valor total rateios
60
+ 26 => Position.new(27, 8, false), # Qtde total rateios
61
+ 27 => Position.new(28, 9, false), # Reservado - branco
62
+ 28 => Position.new(29, 6, false) # Numero sequencial do registro
63
+ })
18
64
  end
19
65
 
20
66
  #-------------------------------------------------------------------
21
67
  #-------------------------------------------------------------------
22
68
  # 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]
69
+
70
+ def process_section(file)
71
+ case @versao
72
+ when :remessa
73
+ processa_remessa file
74
+ when :retorno
75
+ processa_retorno file
76
+ end
77
+ end
78
+
79
+ def processa_remessa file
80
+ self.set_branco file[1..393]
27
81
  self.set_sequencial file[394..399]
28
82
  end
29
83
 
84
+ def processa_retorno file
85
+ self.set_codigo_arquivo file[1..1]
86
+ self.set_tipo_registro file[2..3]
87
+ self.set_codigo_banco file[4..6]
88
+ self.set_reservado_1 file[7..16]
89
+ self.set_qtde_titulos file[17..24]
90
+ self.set_valor_cobranca file[25..38]
91
+ self.set_numero_aviso file[39..46]
92
+ self.set_reservado_2 file[47..56]
93
+ self.set_qtde_confirmados file[57..61]
94
+ self.set_valor_confirmados file[62..73]
95
+ self.set_valor_liquidados file[74..85]
96
+ self.set_qtde_liquidados file[86..90]
97
+ self.set_valor_ocorrencia_06 file[91..102]
98
+ self.set_qtde_baixados file[103..107]
99
+ self.set_valor_baixados file[108..119]
100
+ self.set_qtde_abatimento_cancelado file[120..124]
101
+ self.set_valor_abatimento_cancelado file[125..136]
102
+ self.set_qtde_vencimento_alterado file[137..141]
103
+ self.set_valor_vencimento_alterado file[142..153]
104
+ self.set_qtde_abatimento_concedido file[154..158]
105
+ self.set_valor_abatimento_concedido file[159..170]
106
+ self.set_qtde_protesto_confirmado file[171..175]
107
+ self.set_valor_protesto_confirmado file[176..187]
108
+ self.set_reservado_3 file[188..361]
109
+ self.set_valor_rateios file[362..376]
110
+ self.set_qtde_rateios file[377..384]
111
+ self.set_reservado_4 file[385..393]
112
+ self.set_sequencial_retorno file[394..399]
113
+ end
114
+
30
115
  #-------------------------------------------------------------------
31
116
  #-------------------------------------------------------------------
32
117
  # Validações
33
118
  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)
119
+ self.get_codigo_remessa > 0 and self.get_sequencial.length > 0
43
120
  end
44
121
 
45
122
  #-------------------------------------------------------------------
@@ -49,36 +126,133 @@ class Cnab4000Trailler < FormatSection
49
126
  self.get_section_value(1).to_i
50
127
  end
51
128
 
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
129
  def get_sequencial
61
- self.get_section_value(4)
130
+ self.get_section_value(3)
62
131
  end
63
132
 
64
133
 
65
134
  #-------------------------------------------------------------------
66
135
  #-------------------------------------------------------------------
67
136
  # Setters
68
- def set_codigo_remessa valor
137
+
138
+ def set_branco valor = " "
69
139
  self.set_section_value(1, valor)
70
140
  end
71
141
 
72
- def set_total_registros valor
142
+ def set_codigo_arquivo valor = ""
143
+ self.set_section_value(1, valor)
144
+ end
145
+
146
+ def set_sequencial valor
147
+ self.set_section_value(2, valor.to_s)
148
+ end
149
+
150
+ def set_tipo_registro valor = ""
73
151
  self.set_section_value(2, valor)
74
152
  end
75
153
 
76
- def set_mensagem valor
154
+ def set_codigo_banco valor = ""
77
155
  self.set_section_value(3, valor)
78
156
  end
79
157
 
80
- def set_sequencial valor
158
+ def set_reservado_1 valor = " "
81
159
  self.set_section_value(4, valor)
82
160
  end
83
161
 
162
+ def set_qtde_titulos valor = ""
163
+ self.set_section_value(5, valor)
164
+ end
165
+
166
+ def set_valor_cobranca valor = ""
167
+ self.set_section_value(6, valor)
168
+ end
169
+
170
+ def set_numero_aviso valor = ""
171
+ self.set_section_value(7, valor)
172
+ end
173
+
174
+ def set_reservado_2 valor = " "
175
+ self.set_section_value(8, valor)
176
+ end
177
+
178
+ def set_qtde_confirmados valor = ""
179
+ self.set_section_value(9, valor)
180
+ end
181
+
182
+ def set_valor_confirmados valor = ""
183
+ self.set_section_value(10, valor)
184
+ end
185
+
186
+ def set_valor_liquidados valor = ""
187
+ self.set_section_value(11, valor)
188
+ end
189
+
190
+ def set_qtde_liquidados valor = ""
191
+ self.set_section_value(12, valor)
192
+ end
193
+
194
+ def set_valor_ocorrencia_06 valor = ""
195
+ self.set_section_value(13, valor)
196
+ end
197
+
198
+ def set_qtde_baixados valor = ""
199
+ self.set_section_value(14, valor)
200
+ end
201
+
202
+ def set_valor_baixados valor = ""
203
+ self.set_section_value(15, valor)
204
+ end
205
+
206
+ def set_qtde_abatimento_cancelado valor = ""
207
+ self.set_section_value(16, valor)
208
+ end
209
+
210
+ def set_valor_abatimento_cancelado valor = ""
211
+ self.set_section_value(17, valor)
212
+ end
213
+
214
+ def set_qtde_vencimento_alterado valor = ""
215
+ self.set_section_value(18, valor)
216
+ end
217
+
218
+ def set_valor_vencimento_alterado valor = ""
219
+ self.set_section_value(19, valor)
220
+ end
221
+
222
+ def set_qtde_abatimento_concedido valor = ""
223
+ self.set_section_value(20, valor)
224
+ end
225
+
226
+ def set_valor_abatimento_concedido valor = ""
227
+ self.set_section_value(21, valor)
228
+ end
229
+
230
+ def set_qtde_protesto_confirmado valor = ""
231
+ self.set_section_value(22, valor)
232
+ end
233
+
234
+ def set_valor_protesto_confirmado valor = ""
235
+ self.set_section_value(23, valor)
236
+ end
237
+
238
+ def set_reservado_3 valor = " "
239
+ self.set_section_value(24, valor)
240
+ end
241
+
242
+ def set_valor_rateios valor = ""
243
+ self.set_section_value(25, valor)
244
+ end
245
+
246
+ def set_qtde_rateios valor = ""
247
+ self.set_section_value(26, valor)
248
+ end
249
+
250
+ def set_reservado_4 valor = ""
251
+ self.set_section_value(27, valor)
252
+ end
253
+
254
+ def set_sequencial_retorno valor = ""
255
+ self.set_section_value(28, valor)
256
+ end
257
+
84
258
  end