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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +3 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +1 -0
- data/base/format_section.rb +79 -0
- data/base/position.rb +88 -0
- data/base/section.rb +41 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/formatos-febraban.gemspec +24 -0
- data/formats/febraban150/febraban_150.rb +505 -0
- data/formats/febraban150/febraban_150_a.rb +210 -0
- data/formats/febraban150/febraban_150_b.rb +132 -0
- data/formats/febraban150/febraban_150_c.rb +149 -0
- data/formats/febraban150/febraban_150_d.rb +149 -0
- data/formats/febraban150/febraban_150_e.rb +226 -0
- data/formats/febraban150/febraban_150_f.rb +271 -0
- data/formats/febraban150/febraban_150_h.rb +149 -0
- data/formats/febraban150/febraban_150_i.rb +151 -0
- data/formats/febraban150/febraban_150_j.rb +130 -0
- data/formats/febraban150/febraban_150_k.rb +188 -0
- data/formats/febraban150/febraban_150_l.rb +114 -0
- data/formats/febraban150/febraban_150_t.rb +74 -0
- data/formats/febraban150/febraban_150_x.rb +214 -0
- data/formats/febraban150/febraban_150_z.rb +74 -0
- data/lib/formatos/febraban.rb +7 -0
- data/lib/formatos/febraban/version.rb +5 -0
- metadata +103 -0
@@ -0,0 +1,114 @@
|
|
1
|
+
|
2
|
+
#-------------------------------------------------------------------
|
3
|
+
#-------------------------------------------------------------------
|
4
|
+
# Cronograma de Faturamento Contas/Tributos - Empresa
|
5
|
+
class Febraban150L < FormatSection
|
6
|
+
def initialize master
|
7
|
+
super(master, false, true)
|
8
|
+
|
9
|
+
@section = Section.new({
|
10
|
+
0 => Position.new(1, 1, false, "L", true), # Código do Registro
|
11
|
+
1 => Position.new(2, 9, true), # Data do Faturamento das Contas
|
12
|
+
2 => Position.new(3, 9, true), # Data do Vencimento da Fatura
|
13
|
+
3 => Position.new(4, 9, true), # Data da Remessa do Arquivo
|
14
|
+
4 => Position.new(5, 9, true), # Data da Remessa das Contas
|
15
|
+
5 => Position.new(6, 104, false) # Reservado pelo Sistema
|
16
|
+
}, true)
|
17
|
+
end
|
18
|
+
|
19
|
+
#-------------------------------------------------------------------
|
20
|
+
#-------------------------------------------------------------------
|
21
|
+
# Gerais
|
22
|
+
def process_section file
|
23
|
+
self.set_data_faturamento file[1..8]
|
24
|
+
self.set_data_vencimento_fatura file[9..16]
|
25
|
+
self.set_data_remessa_banco file[17..24]
|
26
|
+
self.set_data_remessa_fisica file[25..32]
|
27
|
+
self.set_reservado file[33..149]
|
28
|
+
end
|
29
|
+
|
30
|
+
#-------------------------------------------------------------------
|
31
|
+
#-------------------------------------------------------------------
|
32
|
+
# Validações
|
33
|
+
def is_valid?
|
34
|
+
result = (!self.get_id_cliente_empresa.nil? and
|
35
|
+
!self.get_agencia_debito.nil? and
|
36
|
+
!self.get_id_cliente_banco.nil? and
|
37
|
+
!self.get_id_cliente.nil?)
|
38
|
+
end
|
39
|
+
|
40
|
+
#-------------------------------------------------------------------
|
41
|
+
#-------------------------------------------------------------------
|
42
|
+
# Getters
|
43
|
+
def get_data_faturamento
|
44
|
+
data = self.set_section_value(1)
|
45
|
+
Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
|
46
|
+
end
|
47
|
+
|
48
|
+
def get_data_vencimento_fatura
|
49
|
+
data = self.set_section_value(2)
|
50
|
+
Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_data_remessa_banco
|
54
|
+
data = self.set_section_value(3)
|
55
|
+
Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
|
56
|
+
end
|
57
|
+
|
58
|
+
def get_data_remessa_fisica
|
59
|
+
data = self.set_section_value(4)
|
60
|
+
Date.new(data[0..3].to_i, data[4..5].to_i, data[6..7].to_i)
|
61
|
+
end
|
62
|
+
|
63
|
+
#-------------------------------------------------------------------
|
64
|
+
#-------------------------------------------------------------------
|
65
|
+
# Setters
|
66
|
+
def set_data_faturamento data
|
67
|
+
data = data.to_i
|
68
|
+
|
69
|
+
if data > 0
|
70
|
+
self.set_section_value(1, data)
|
71
|
+
else
|
72
|
+
raise "#{self.get_id}: Data de Faturamento das Contas não pode estar vazia
|
73
|
+
Valor: #{data}"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def set_data_vencimento_fatura data
|
78
|
+
data = data.to_i
|
79
|
+
|
80
|
+
if data > 0
|
81
|
+
self.set_section_value(2, data)
|
82
|
+
else
|
83
|
+
raise "#{self.get_id}: Data de Vencimento da Fatura não pode estar vazia
|
84
|
+
Valor: #{data}"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def set_data_remessa_banco data
|
89
|
+
data = data.to_i
|
90
|
+
|
91
|
+
if data > 0
|
92
|
+
self.set_section_value(3, data)
|
93
|
+
else
|
94
|
+
raise "#{self.get_id}: Data de Remessa ao Banco não pode estar vazia
|
95
|
+
Valor: #{data}"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def set_data_remessa_fisica data
|
100
|
+
data = data.to_i
|
101
|
+
|
102
|
+
if data > 0
|
103
|
+
self.set_section_value(4, data)
|
104
|
+
else
|
105
|
+
raise "#{self.get_id}: Data de Remessa Física não pode estar vazia
|
106
|
+
Valor: #{data}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
def set_reservado reservado
|
111
|
+
reservado = reservado.to_s
|
112
|
+
self.set_section_value(5, reservado)
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
#-------------------------------------------------------------------
|
3
|
+
#-------------------------------------------------------------------
|
4
|
+
# Total de Clientes debitados - Banco
|
5
|
+
class Febraban150T < FormatSection
|
6
|
+
def initialize master
|
7
|
+
super(master, true, false)
|
8
|
+
|
9
|
+
@section = Section.new({
|
10
|
+
0 => Position.new(1, 1, false, "T", true), # Código do Registro
|
11
|
+
1 => Position.new(2, 6, true), # Total de Registros Debitados
|
12
|
+
2 => Position.new(3, 17, true), # Valor dos Registros Debitados
|
13
|
+
3 => Position.new(4, 126, false) # Reservado pelo Sistema
|
14
|
+
}, true)
|
15
|
+
end
|
16
|
+
|
17
|
+
#-------------------------------------------------------------------
|
18
|
+
#-------------------------------------------------------------------
|
19
|
+
# Gerais
|
20
|
+
def process_section file
|
21
|
+
self.set_total_debitados file[1..6]
|
22
|
+
self.set_valor_total_debitados file[7..23]
|
23
|
+
self.set_reservado file[24..149]
|
24
|
+
end
|
25
|
+
|
26
|
+
#-------------------------------------------------------------------
|
27
|
+
#-------------------------------------------------------------------
|
28
|
+
# Validações
|
29
|
+
def is_valid?
|
30
|
+
result = (self.get_total_debitados >= 0 and
|
31
|
+
self.get_valor_total_debitados >= 0 )
|
32
|
+
end
|
33
|
+
|
34
|
+
#-------------------------------------------------------------------
|
35
|
+
#-------------------------------------------------------------------
|
36
|
+
# Getters
|
37
|
+
def get_total_debitados
|
38
|
+
self.set_section_value(1).to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_valor_total_debitados
|
42
|
+
self.set_section_value(2).to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
#-------------------------------------------------------------------
|
46
|
+
#-------------------------------------------------------------------
|
47
|
+
# Setters
|
48
|
+
def set_total_debitados valor
|
49
|
+
valor = valor.to_i
|
50
|
+
|
51
|
+
if valor >= 0
|
52
|
+
self.set_section_value(1, valor)
|
53
|
+
else
|
54
|
+
raise "#{self.get_id}: Total dos Arquivos Debitados deve ser positivo ou 0
|
55
|
+
Valor: #{valor}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def set_valor_total_debitados valor
|
60
|
+
valor = valor.to_i
|
61
|
+
|
62
|
+
if valor >= 0
|
63
|
+
self.set_section_value(2, valor)
|
64
|
+
else
|
65
|
+
raise "#{self.get_id}: Valor Total dos Arquivos Debitados deve ser positivo ou 0
|
66
|
+
Valor: #{valor}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def set_reservado reservado
|
71
|
+
reservado = reservado.to_s
|
72
|
+
self.set_section_value(3, reservado)
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
|
2
|
+
#-------------------------------------------------------------------
|
3
|
+
#-------------------------------------------------------------------
|
4
|
+
# Relação de Agências - Banco
|
5
|
+
class Febraban150X < FormatSection
|
6
|
+
def initialize master
|
7
|
+
super(master, true, false, false)
|
8
|
+
|
9
|
+
@section = Section.new({
|
10
|
+
0 => Position.new(1, 1, false, "X", true), # Código do Registro
|
11
|
+
1 => Position.new(2, 4, false), # Código da Agência
|
12
|
+
2 => Position.new(3, 30, false), # Nome da Agência
|
13
|
+
3 => Position.new(4, 30, false), # Endereço da Agência
|
14
|
+
4 => Position.new(5, 5, false), # Número
|
15
|
+
5 => Position.new(6, 5, false), # Código do CEP
|
16
|
+
6 => Position.new(7, 3, false), # Sufixo do CEP
|
17
|
+
7 => Position.new(8, 20, false), # Nome da Cidade
|
18
|
+
8 => Position.new(9, 2, false), # Sigla do Estado
|
19
|
+
9 => Position.new(10, 1, false), # Situação da Agência (A, B)
|
20
|
+
10 => Position.new(11, 49, false) # Reservado pelo Sistema
|
21
|
+
}, true)
|
22
|
+
end
|
23
|
+
|
24
|
+
#-------------------------------------------------------------------
|
25
|
+
#-------------------------------------------------------------------
|
26
|
+
# Gerais
|
27
|
+
def process_section file
|
28
|
+
self.set_codigo_agencia file[1..4]
|
29
|
+
self.set_nome_agencia file[5..34]
|
30
|
+
self.set_endereco_agencia file[35..64]
|
31
|
+
self.set_numero_agencia file[65..69]
|
32
|
+
self.set_codigo_cep file[70..74]
|
33
|
+
self.set_sufixo_cep file[75..77]
|
34
|
+
self.set_nome_cidade file[78..97]
|
35
|
+
self.set_estado file[98..99]
|
36
|
+
self.set_situacao_agencia file[100..100]
|
37
|
+
self.set_reservado file[101..149]
|
38
|
+
end
|
39
|
+
|
40
|
+
#-------------------------------------------------------------------
|
41
|
+
#-------------------------------------------------------------------
|
42
|
+
# Validações
|
43
|
+
def is_valid?
|
44
|
+
result = (self.get_codigo_agencia.length > 0 and
|
45
|
+
self.get_nome_agencia.length > 0 and
|
46
|
+
self.get_endereco_agencia.length > 0 and
|
47
|
+
self.get_numero_agencia.length > 0 and
|
48
|
+
self.get_codigo_cep.length == 5 and
|
49
|
+
self.get_sufixo_cep.length == 3 and
|
50
|
+
self.get_nome_cidade.length > 0 and
|
51
|
+
self.get_estado.length == 2 and
|
52
|
+
(self.get_situacao_agencia == "A" or
|
53
|
+
self.get_situacao_agencia == "B"))
|
54
|
+
end
|
55
|
+
|
56
|
+
#-------------------------------------------------------------------
|
57
|
+
#-------------------------------------------------------------------
|
58
|
+
# Getters
|
59
|
+
def get_codigo_agencia
|
60
|
+
self.set_section_value(1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_nome_agencia
|
64
|
+
self.set_section_value(2)
|
65
|
+
end
|
66
|
+
|
67
|
+
def get_endereco_agencia
|
68
|
+
self.set_section_value(3)
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_numero_agencia
|
72
|
+
self.set_section_value(4)
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_codigo_cep
|
76
|
+
self.set_section_value(5)
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_sufixo_cep
|
80
|
+
self.set_section_value(6)
|
81
|
+
end
|
82
|
+
|
83
|
+
def get_nome_cidade
|
84
|
+
self.set_section_value(7)
|
85
|
+
end
|
86
|
+
|
87
|
+
def get_estado
|
88
|
+
self.set_section_value(8)
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_situacao_agencia
|
92
|
+
self.set_section_value(9)
|
93
|
+
end
|
94
|
+
|
95
|
+
def get_cep
|
96
|
+
"#{self.get_codigo_cep}#{self.get_sufixo_cep}"
|
97
|
+
end
|
98
|
+
|
99
|
+
#-------------------------------------------------------------------
|
100
|
+
#-------------------------------------------------------------------
|
101
|
+
# Setters
|
102
|
+
def set_codigo_agencia codigo
|
103
|
+
codigo = codigo.to_s
|
104
|
+
|
105
|
+
if codigo.length > 0
|
106
|
+
self.set_section_value(1, codigo)
|
107
|
+
else
|
108
|
+
raise "#{self.get_id}: Código da Agência deve estar preenchido
|
109
|
+
Valor: #{codigo}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def set_nome_agencia nome
|
114
|
+
nome = nome.to_s
|
115
|
+
|
116
|
+
if nome.length > 0
|
117
|
+
self.set_section_value(2, nome)
|
118
|
+
else
|
119
|
+
raise "#{self.get_id}: Nome da Agência deve estar preenchido
|
120
|
+
Valor: #{nome}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def set_endereco_agencia endereco
|
125
|
+
endereco = endereco.to_s
|
126
|
+
|
127
|
+
if endereco.length > 0
|
128
|
+
self.set_section_value(3, endereco)
|
129
|
+
else
|
130
|
+
raise "#{self.get_id}: Endereço da Agência deve estar preenchido
|
131
|
+
Valor: #{endereco}"
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def set_numero_agencia numero
|
136
|
+
numero = numero.to_s
|
137
|
+
|
138
|
+
if numero.length > 0
|
139
|
+
self.set_section_value(4, numero)
|
140
|
+
else
|
141
|
+
raise "#{self.get_id}: Número da Agência deve estar preenchido
|
142
|
+
Valor: #{numero}"
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def set_codigo_cep codigo
|
147
|
+
codigo = codigo.to_s
|
148
|
+
|
149
|
+
if codigo.length == 5
|
150
|
+
self.set_section_value(5, codigo)
|
151
|
+
else
|
152
|
+
raise "#{self.get_id}: Código do CEP da Agência deve ter 5 dígitos
|
153
|
+
Valor: #{codigo}"
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
def set_sufixo_cep codigo
|
158
|
+
codigo = codigo.to_s
|
159
|
+
|
160
|
+
if codigo.length == 3
|
161
|
+
self.set_section_value(6, codigo)
|
162
|
+
else
|
163
|
+
raise "#{self.get_id}: Código do CEP da Agência deve ter 3 dígitos
|
164
|
+
Valor: #{codigo}"
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def set_nome_cidade cidade
|
169
|
+
cidade = cidade.to_s
|
170
|
+
|
171
|
+
if cidade.length > 0
|
172
|
+
self.set_section_value(7, cidade)
|
173
|
+
else
|
174
|
+
raise "#{self.get_id}: Cidade da Agência deve estar preenchido
|
175
|
+
Valor: #{cidade}"
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def set_estado estado
|
180
|
+
estado = estado.to_s
|
181
|
+
|
182
|
+
if estado.length == 2
|
183
|
+
self.set_section_value(8, estado)
|
184
|
+
else
|
185
|
+
raise "#{self.get_id}: Estado da Agência estar em siglas de 2 caracteres
|
186
|
+
Valor: #{estado}"
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def set_situacao_agencia situacao
|
191
|
+
situacao = situacao.to_s
|
192
|
+
|
193
|
+
if situacao == "A" or situacao == "B"
|
194
|
+
self.set_section_value(9, situacao)
|
195
|
+
else
|
196
|
+
raise "#{self.get_id}: Agência permite estados:
|
197
|
+
A: Ativa
|
198
|
+
B: Em regime de Encerramento
|
199
|
+
Valor: #{situacao}"
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
def set_reservado reservado
|
204
|
+
reservado = reservado.to_s
|
205
|
+
self.set_section_value(10, reservado)
|
206
|
+
end
|
207
|
+
|
208
|
+
def set_cep codigo
|
209
|
+
codigo = codigo.to_s
|
210
|
+
|
211
|
+
self.set_codigo_cep(codigo[0..4])
|
212
|
+
self.set_sufixo_cep(codigo[5..7])
|
213
|
+
end
|
214
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
#-------------------------------------------------------------------
|
3
|
+
#-------------------------------------------------------------------
|
4
|
+
# Footer/Trailler - Empresa/Banco
|
5
|
+
class Febraban150Z < FormatSection
|
6
|
+
def initialize master
|
7
|
+
super(master, true, true, false)
|
8
|
+
|
9
|
+
@section = Section.new({
|
10
|
+
0 => Position.new(1, 1, false, "Z", true), # Código do Registro
|
11
|
+
1 => Position.new(2, 6, true), # Total de Registros no Arquivo
|
12
|
+
2 => Position.new(3, 17, true), # Valor Total dos Registros
|
13
|
+
3 => Position.new(4, 126, false) # Reservado pelo Sistema
|
14
|
+
})
|
15
|
+
end
|
16
|
+
|
17
|
+
#-------------------------------------------------------------------
|
18
|
+
#-------------------------------------------------------------------
|
19
|
+
# Gerais
|
20
|
+
def process_section file
|
21
|
+
self.set_total_registros file[1..6]
|
22
|
+
self.set_valor_total file[7..23]
|
23
|
+
self.set_reservado file[24..149]
|
24
|
+
end
|
25
|
+
|
26
|
+
#-------------------------------------------------------------------
|
27
|
+
#-------------------------------------------------------------------
|
28
|
+
# Validações
|
29
|
+
def is_valid?
|
30
|
+
result = (self.get_total_registros > 0 and
|
31
|
+
self.get_valor_total > 0)
|
32
|
+
end
|
33
|
+
|
34
|
+
#-------------------------------------------------------------------
|
35
|
+
#-------------------------------------------------------------------
|
36
|
+
# Getters
|
37
|
+
def get_total_registros
|
38
|
+
self.get_section_value(1).to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_valor_total
|
42
|
+
self.get_section_value(2).to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
#-------------------------------------------------------------------
|
46
|
+
#-------------------------------------------------------------------
|
47
|
+
# Setters
|
48
|
+
def set_total_registros registros
|
49
|
+
registros = registros.to_i
|
50
|
+
|
51
|
+
if registros > 0
|
52
|
+
self.set_section_value(1, registros)
|
53
|
+
else
|
54
|
+
raise "#{get_id}: A quantidade de registros deve ser positiva e maior que 0
|
55
|
+
Valor: #{registros}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def set_valor_total valor
|
60
|
+
valor = valor.to_i
|
61
|
+
|
62
|
+
if valor > 0
|
63
|
+
self.set_section_value(2, valor)
|
64
|
+
else
|
65
|
+
raise "#{get_id}: A quantidade de registros deve ser positiva e maior que 0
|
66
|
+
Valor: #{valor}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def set_reservado reservado
|
71
|
+
reservado = reservado.to_s
|
72
|
+
self.set_section_value(3, reservado)
|
73
|
+
end
|
74
|
+
end
|