formatos-febraban 0.1.0

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,210 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Header - Empresa e Banco
5
+ class Febraban150A < 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, "A", true), # Código do Registro
13
+ 1 => Position.new(2, 1, true), # Código Remessa (1-Remessa, 2-Retorno)
14
+ 2 => Position.new(3, 20, false), # Código de ID enviado pelo Banco
15
+ 3 => Position.new(4, 20, false), # Nome da Empresa
16
+ 4 => Position.new(5, 3, true), # Código do Banco
17
+ 5 => Position.new(6, 20, false), # Nome do Banco
18
+ 6 => Position.new(7, 8, true), # Data de Geração de Arquivo
19
+ 7 => Position.new(8, 6, true), # Número Sequencial do Arquivo
20
+ 8 => Position.new(9, 2, true, 5), # Versão do Layout (5, desde 05.05.2008)
21
+ 9 => Position.new(10, 17, false, "DÉBITO AUTOMÁTICO"), # Identificação ("DÉBITO AUTOMÁTICO")
22
+ 10 => Position.new(11, 52, false), # Reservado pelo Sistema
23
+ })
24
+ end
25
+
26
+ #-------------------------------------------------------------------
27
+ #-------------------------------------------------------------------
28
+ # Gerais
29
+ def process_section file
30
+ self.set_codigo_remessa file[1..1]
31
+ self.set_codigo_convenio file[2..21]
32
+ self.set_nome_empresa file[22..41]
33
+ self.set_codigo_banco file[42..44]
34
+ self.set_nome_banco file[45..64]
35
+ self.set_data_geracao file[65..72]
36
+ self.set_numero_sequencial file[73..78]
37
+ self.set_versao_layout file[79..80]
38
+ self.set_identificacao_servico file[81..99]
39
+ self.set_reservado file[98..149]
40
+ end
41
+
42
+ #-------------------------------------------------------------------
43
+ #-------------------------------------------------------------------
44
+ # Validações
45
+ def is_valid?
46
+ result = (self.get_codigo_remessa > 0 and
47
+ self.get_codigo_convenio.length > 0 and
48
+ self.get_nome_empresa.length > 0 and
49
+ self.get_codigo_banco > 0 and
50
+ self.get_nome_banco.length > 0 and
51
+ !self.get_data_geracao.nil? and
52
+ self.get_numero_sequencial > 0 and
53
+ self.get_versao_layout > 0 and
54
+ self.get_identificacao_servico.length > 0)
55
+ end
56
+
57
+ #-------------------------------------------------------------------
58
+ #-------------------------------------------------------------------
59
+ # Getters
60
+ def get_codigo_remessa
61
+ self.get_section_value(1).to_i
62
+ end
63
+
64
+ def get_codigo_convenio
65
+ self.get_section_value(2)
66
+ end
67
+
68
+ def get_nome_empresa
69
+ self.get_section_value(3)
70
+ end
71
+
72
+ def get_codigo_banco
73
+ self.get_section_value(4).to_i
74
+ end
75
+
76
+ def get_nome_banco
77
+ self.get_section_value(5)
78
+ end
79
+
80
+ def get_data_geracao
81
+ data = self.get_section_value(6)
82
+ Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
83
+ end
84
+
85
+ def get_numero_sequencial
86
+ data = self.get_section_value(7).to_i
87
+ end
88
+
89
+ def get_versao_layout
90
+ data = self.get_section_value(8).to_i
91
+ end
92
+
93
+ def get_identificacao_servico
94
+ data = self.get_section_value(9)
95
+ end
96
+
97
+ #-------------------------------------------------------------------
98
+ #-------------------------------------------------------------------
99
+ # Setters
100
+ def set_codigo_remessa code
101
+ code = code.to_i
102
+
103
+ if code == 1 or code == 2
104
+ self.set_section_value(1, code)
105
+ else
106
+ raise "#{get_id}: 1 = Remessa - Enviado pela Empresa para o Banco
107
+ 2 = Retorno - Enviado pelo Banco para a Empresa
108
+ Valor: #{code}"
109
+ end
110
+ end
111
+
112
+ def set_codigo_convenio code
113
+ code = code.to_s
114
+
115
+ if !code.nil? and
116
+ (code.length > 0 and code.length <= 20)
117
+
118
+ self.set_section_value(2, code)
119
+ else
120
+ raise "#{get_id}: Código atribuído pelo Banco, para seu controle interno.
121
+ Este código será informado à Empresa, pelo Banco, antes
122
+ da implantação do serviço de débito automático.
123
+ Valor: #{code}"
124
+ end
125
+ end
126
+
127
+ def set_nome_empresa nome
128
+ nome = nome.to_s
129
+
130
+ if nome.to_s.length > 0
131
+ self.set_section_value(3, nome)
132
+ else
133
+ raise "#{get_id}: Nome da Empresa não pode estar vazio"
134
+ end
135
+ end
136
+
137
+ def set_codigo_banco codigo
138
+ codigo = codigo.to_i
139
+
140
+ if codigo > 0
141
+ self.set_section_value(4, codigo)
142
+ else
143
+ raise "#{get_id}: Código do Banco não pode estar vazio"
144
+ end
145
+ end
146
+
147
+ def set_nome_banco nome
148
+ nome = nome.to_s
149
+
150
+ if nome.to_s.length > 0
151
+ self.set_section_value(5, nome)
152
+ else
153
+ raise "#{get_id}: Nome do Banco não pode estar vazio"
154
+ end
155
+ end
156
+
157
+ def set_data_geracao data
158
+ begin
159
+ real_data = data.to_s
160
+
161
+ if data.length == 8
162
+ self.set_section_value(6, real_data)
163
+ else
164
+ raise
165
+ end
166
+
167
+ rescue
168
+ raise "#{get_id}: Data de Geração Inválida
169
+ Valor: #{data}"
170
+ end
171
+ end
172
+
173
+ def set_numero_sequencial numero
174
+ numero = numero.to_i
175
+
176
+ if numero > 0
177
+ self.set_section_value(7, numero)
178
+ else
179
+ raise "#{get_id}: Número Sequencial deve ser positivo e maior que 0
180
+ Valor: #{numero}"
181
+ end
182
+ end
183
+
184
+ def set_versao_layout versao
185
+ versao = versao.to_i
186
+
187
+ if versao > 0
188
+ self.set_section_value(8, versao)
189
+ else
190
+ raise "#{get_id}: Versão deve ser 05 (a partir de 05.05.2008)
191
+ Valor: #{versao}"
192
+ end
193
+ end
194
+
195
+ def set_identificacao_servico identificacao
196
+ identificacao = identificacao.to_s
197
+
198
+ if identificacao.length > 0
199
+ self.set_section_value(9, identificacao)
200
+ else
201
+ raise "#{get_id}: Deve ser Débito Automático
202
+ Valor: #{identificacao}"
203
+ end
204
+ end
205
+
206
+ def set_reservado reservado
207
+ reservado = reservado.to_s
208
+ self.set_section_value(10, reservado)
209
+ end
210
+ end
@@ -0,0 +1,132 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Cadastro Débito Automático - Banco
5
+ class Febraban150B < FormatSection
6
+ def initialize master
7
+ super(master, true, false)
8
+
9
+ @section = Section.new({
10
+ 0 => Position.new(1, 1, false, "B", true), # Código do Registro
11
+ 1 => Position.new(2, 25, false), # Identificação do Cliente Empresa
12
+ 2 => Position.new(3, 4, false), # Agência para Débito
13
+ 3 => Position.new(4, 14, false), # Identificação Cliente Banco
14
+ 4 => Position.new(5, 8, true), # Data da Opção/Exclusão
15
+ 5 => Position.new(6, 97, false), # Reservado pelo Sistema
16
+ 6 => Position.new(7, 1, true) # Código de Movimento (1-Excluir, 2-Incluir)
17
+ })
18
+ end
19
+
20
+ #-------------------------------------------------------------------
21
+ #-------------------------------------------------------------------
22
+ # Gerais
23
+ def process_section file
24
+ self.set_id_cliente_empresa file[1..25]
25
+ self.set_agencia_debito file[26..29]
26
+ self.set_id_cliente_banco file[30..43]
27
+ self.set_data_opcao_exclusao file[44..51]
28
+ self.set_reservado file[52..148]
29
+ self.set_cod_movimento file[149..149]
30
+ end
31
+
32
+ #-------------------------------------------------------------------
33
+ #-------------------------------------------------------------------
34
+ # Validações
35
+ def is_valid?
36
+ result = (self.get_id_cliente_empresa.length > 0 and
37
+ self.get_agencia_debito.length > 0 and
38
+ self.get_nome_empresa.length > 0 and
39
+ !self.get_data_opcao_exclusao.nil? and
40
+ (self.get_cod_movimento == 0 or
41
+ self.get_cod_movimento == 1))
42
+ end
43
+
44
+ #-------------------------------------------------------------------
45
+ #-------------------------------------------------------------------
46
+ # Getters
47
+ def get_id_cliente_empresa
48
+ self.get_section_value(1)
49
+ end
50
+
51
+ def get_agencia_debito
52
+ self.get_section_value(2)
53
+ end
54
+
55
+ def get_id_cliente_banco
56
+ self.get_section_value(3)
57
+ end
58
+
59
+ def get_data_opcao_exclusao
60
+ data = self.get_section_value(4)
61
+ Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
62
+ end
63
+
64
+ def get_cod_movimento
65
+ self.get_section_value(6).to_i
66
+ end
67
+
68
+ #-------------------------------------------------------------------
69
+ #-------------------------------------------------------------------
70
+ # Setters
71
+ def set_id_cliente_empresa id_cliente_empresa
72
+ id_cliente_empresa = id_cliente_empresa.to_s
73
+
74
+ if id_cliente_empresa.length > 0
75
+ self.set_section_value(1, id_cliente_empresa)
76
+ else
77
+ raise "#{self.get_id}: Identificação do Cliente da Empresa não pode estar vazio
78
+ Valor: #{id_cliente_empresa}"
79
+ end
80
+ end
81
+
82
+ def set_agencia_debito agencia_debito
83
+ agencia_debito = agencia_debito.to_s
84
+
85
+ if agencia_debito.length > 0
86
+ self.set_section_value(2, agencia_debito)
87
+ else
88
+ raise "#{self.get_id}: Agência do Débito não pode estar vazia
89
+ Valor: #{agencia_debito}"
90
+ end
91
+ end
92
+
93
+ def set_id_cliente_banco id_cliente_banco
94
+ id_cliente_banco = id_cliente_banco.to_s
95
+
96
+ if id_cliente_banco.length > 0
97
+ self.set_section_value(3, id_cliente_banco)
98
+ else
99
+ raise "#{self.get_id}: Identificação do Cliente do Banco não pode estar vazio
100
+ Valor: #{id_cliente_banco}"
101
+ end
102
+ end
103
+
104
+ def set_data_opcao_exclusao data_opcao_exclusao
105
+ data_opcao_exclusao = data_opcao_exclusao.to_i
106
+
107
+ if data_opcao_exclusao > 0
108
+ self.set_section_value(4, data_opcao_exclusao)
109
+ else
110
+ raise "#{self.get_id}: Data de Opção/Exclusão não pode estar vazia
111
+ Valor: #{data_opcao_exclusao}"
112
+ end
113
+ end
114
+
115
+ def set_reservado reservado
116
+ reservado = reservado.to_s
117
+ self.set_section_value(5, reservado)
118
+ end
119
+
120
+ def set_cod_movimento cod_movimento
121
+ cod_movimento = cod_movimento.to_i
122
+
123
+ if cod_movimento == 0 or cod_movimento == 1
124
+ self.set_section_value(6, cod_movimento)
125
+ else
126
+ raise "#{self.get_id}: Código de Movimentação deve ser de Exclusão ou Inclusão:
127
+ 1 = Exclusão de optante pelo débito automático
128
+ 2 = Inclusão de optante pelo débito automático
129
+ Valor: #{cod_movimento}"
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,149 @@
1
+
2
+ #-------------------------------------------------------------------
3
+ #-------------------------------------------------------------------
4
+ # Ocorrências - Empresa
5
+ class Febraban150C < FormatSection
6
+ def initialize master
7
+ super(master, false, true)
8
+
9
+ @section = Section.new({
10
+ 0 => Position.new(1, 1, false, "C", true), # Código do Registro
11
+ 1 => Position.new(2, 25, false), # Identificação do Cliente Empresa
12
+ 2 => Position.new(3, 4, false), # Agência para Débito
13
+ 3 => Position.new(4, 14, false), # Identificação Cliente Banco
14
+ 4 => Position.new(5, 40, false), # Ocorrência 1 - Motivo Recusa
15
+ 5 => Position.new(6, 40, false), # Ocorrência 2 - Complemento
16
+ 6 => Position.new(7, 25, false), # Reservado pelo Sistema
17
+ 7 => Position.new(8, 1, true) # Código de Movimento (Seção B)
18
+ })
19
+ end
20
+
21
+ #-------------------------------------------------------------------
22
+ #-------------------------------------------------------------------
23
+ # Gerais
24
+ def process_section file
25
+ self.set_id_cliente_empresa file[1..25]
26
+ self.set_agencia_debito file[26..29]
27
+ self.set_id_cliente_banco file[30..43]
28
+ self.set_ocorrencia_1 file[44..83]
29
+ self.set_ocorrencia_2 file[84..123]
30
+ self.set_reservado file[124..148]
31
+ self.set_cod_movimento file[149..149]
32
+ end
33
+
34
+ #-------------------------------------------------------------------
35
+ #-------------------------------------------------------------------
36
+ # Validações
37
+ def is_valid?
38
+ result = (self.get_id_cliente_empresa.length > 0 and
39
+ self.get_agencia_debito.length > 0 and
40
+ self.get_id_cliente_banco.length > 0 and
41
+ self.get_ocorrencia_1.length > 0 and
42
+ self.get_ocorrencia_2.length > 0 and
43
+ (self.get_cod_movimento == 0 or
44
+ self.get_cod_movimento == 1))
45
+ end
46
+
47
+ #-------------------------------------------------------------------
48
+ #-------------------------------------------------------------------
49
+ # Getters
50
+ def get_id_cliente_empresa
51
+ self.get_section_value(1)
52
+ end
53
+
54
+ def get_agencia_debito
55
+ self.get_section_value(2)
56
+ end
57
+
58
+ def get_id_cliente_banco
59
+ self.get_section_value(3)
60
+ end
61
+
62
+ def get_ocorrencia_1
63
+ self.get_section_value(4)
64
+ end
65
+
66
+ def get_ocorrencia_2
67
+ self.get_section_value(5)
68
+ end
69
+
70
+ def get_cod_movimento
71
+ self.get_section_value(7).to_i
72
+ end
73
+
74
+ #-------------------------------------------------------------------
75
+ #-------------------------------------------------------------------
76
+ # Setters
77
+ def set_id_cliente_empresa id_cliente_empresa
78
+ id_cliente_empresa = id_cliente_empresa.to_s
79
+
80
+ if id_cliente_empresa.length > 0
81
+ self.set_section_value(1, id_cliente_empresa)
82
+ else
83
+ raise "#{self.get_id}: Identificação do Cliente da Empresa não pode estar vazio
84
+ Valor: #{id_cliente_empresa}"
85
+ end
86
+ end
87
+
88
+ def set_agencia_debito agencia_debito
89
+ agencia_debito = agencia_debito.to_s
90
+
91
+ if agencia_debito.length > 0
92
+ self.set_section_value(2, agencia_debito)
93
+ else
94
+ raise "#{self.get_id}: Agência do Débito não pode estar vazia
95
+ Valor: #{agencia_debito}"
96
+ end
97
+ end
98
+
99
+ def set_id_cliente_banco id_cliente_banco
100
+ id_cliente_banco = id_cliente_banco.to_s
101
+
102
+ if id_cliente_banco.length > 0
103
+ self.set_section_value(3, id_cliente_banco)
104
+ else
105
+ raise "#{self.get_id}: Identificação do Cliente do Banco não pode estar vazio
106
+ Valor: #{id_cliente_banco}"
107
+ end
108
+ end
109
+
110
+ def set_ocorrencia_1 ocorrencia
111
+ ocorrencia = ocorrencia.to_s
112
+
113
+ if ocorrencia.length > 0
114
+ self.set_section_value(4, ocorrencia)
115
+ else
116
+ raise "#{self.get_id}: Motivo de Recusa não pode estar vazio
117
+ Valor: #{ocorrencia}"
118
+ end
119
+ end
120
+
121
+ def set_ocorrencia_2 ocorrencia
122
+ ocorrencia = ocorrencia.to_s
123
+
124
+ if ocorrencia.length > 0
125
+ self.set_section_value(5, ocorrencia)
126
+ else
127
+ raise "#{self.get_id}: Motivo de Recusa não pode estar vazio
128
+ Valor: #{ocorrencia}"
129
+ end
130
+ end
131
+
132
+ def set_reservado reservado
133
+ reservado = reservado.to_s
134
+ self.set_section_value(6, reservado)
135
+ end
136
+
137
+ def set_cod_movimento cod_movimento
138
+ cod_movimento = cod_movimento.to_i
139
+
140
+ if cod_movimento == 0 or cod_movimento == 1
141
+ self.set_section_value(7, cod_movimento)
142
+ else
143
+ raise "#{self.get_id}: Código de Movimentação deve ser de Exclusão ou Inclusão:
144
+ 1 = Exclusão de optante pelo débito automático
145
+ 2 = Inclusão de optante pelo débito automático
146
+ Valor: #{cod_movimento}"
147
+ end
148
+ end
149
+ end