teodoro 0.67.1 → 0.67.2
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 +4 -4
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +1 -0
- data/lib/teodoro/arquivo_de_origem.rb +17 -7
- data/lib/teodoro/arquivo_xml.rb +20 -8
- data/lib/teodoro/empresa.rb +58 -14
- data/lib/teodoro/leiaute/arquivo_s2206.rb +1 -1
- data/lib/teodoro/version.rb +1 -1
- data/lib/teodoro.rb +17 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bd31ac75abdcccfd08625bc2caba6a656f5c2717f5b10f0b7eaa6a3f8068b924
|
4
|
+
data.tar.gz: 18b8779eeb088c257b12b4fd201222cdc719d922a0af838eae29ee8e0520075c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a3d94552031cd6b0d8c2b37eb58f98e70a590a061237a2a3a2e43a6d9ffbe5e777292b83c03bcbd7f69c96d14ddf8ca60eacfa636219ecfcd204ead55ff5260
|
7
|
+
data.tar.gz: ca50443b7ddd3f30fce31729001665bcb65e86a354e04df9bcaa40e1fac1046c7c7fffb4846089352ca80a59602c9d048505730ba6418f0acbbee1cdf66b06a8
|
@@ -4,28 +4,38 @@ module Teodoro
|
|
4
4
|
|
5
5
|
private
|
6
6
|
|
7
|
-
def initialize(caminho:, destino_dos_arquivos_xml:)
|
7
|
+
def initialize(empresa:, caminho:, indice:, destino_dos_arquivos_xml:)
|
8
|
+
@empresa = empresa
|
8
9
|
@caminho = caminho
|
10
|
+
@indice = indice
|
9
11
|
@destino_dos_arquivos_xml = destino_dos_arquivos_xml
|
10
12
|
end
|
11
13
|
|
12
|
-
attr_reader :caminho, :destino_dos_arquivos_xml
|
14
|
+
attr_reader :empresa, :caminho, :indice, :destino_dos_arquivos_xml
|
13
15
|
|
14
16
|
public
|
15
17
|
|
16
18
|
def descompactar
|
17
|
-
|
18
|
-
puts '', Rainbow("Erro! \"#{p(caminho)}\" é um diretório.").red
|
19
|
-
exit
|
20
|
-
end
|
19
|
+
validar_que_nao_eh_diretorio
|
21
20
|
|
22
|
-
Console.print "descompactando #{File.basename(caminho)}..." do
|
21
|
+
Console.print "descompactando #{File.basename(caminho)} (#{percentual}%)..." do
|
23
22
|
descompactar_arquivo_zip
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
private
|
28
27
|
|
28
|
+
def validar_que_nao_eh_diretorio
|
29
|
+
return unless File.directory?(caminho)
|
30
|
+
|
31
|
+
puts '', Rainbow("Erro! \"#{p(caminho)}\" é um diretório.").red
|
32
|
+
exit
|
33
|
+
end
|
34
|
+
|
35
|
+
def percentual
|
36
|
+
(indice + 1) * 100 / empresa.qtd_de_arquivos_de_origem
|
37
|
+
end
|
38
|
+
|
29
39
|
def descompactar_arquivo_zip
|
30
40
|
Zip::File.open(caminho) do |zip|
|
31
41
|
zip
|
data/lib/teodoro/arquivo_xml.rb
CHANGED
@@ -99,20 +99,23 @@ module Teodoro
|
|
99
99
|
|
100
100
|
private
|
101
101
|
|
102
|
-
def initialize(empresa:, caminho:)
|
102
|
+
def initialize(empresa:, caminho:, indice:)
|
103
103
|
@empresa = empresa
|
104
104
|
@caminho = caminho
|
105
|
+
@indice = indice
|
105
106
|
end
|
106
107
|
|
107
108
|
attr_reader :empresa, :caminho
|
108
109
|
|
109
110
|
public
|
110
111
|
|
112
|
+
attr_accessor :indice, :arquivo_retificado
|
113
|
+
|
111
114
|
attr_reader :recibo_do_evento_a_excluir, :recibo_do_evento_a_retificar, :momento_de_processamento_pelo_e_social
|
112
115
|
|
113
116
|
# otimizacao do gerenciamento de memoria
|
114
117
|
def carregar
|
115
|
-
Console.print "carregando #{nome}.xml..." do
|
118
|
+
Console.print "carregando #{nome}.xml (#{percentual}%)..." do
|
116
119
|
evento, recibo = carregar_evento_e_recibo
|
117
120
|
|
118
121
|
@recibo_do_evento_a_excluir = evento['infoExclusao/nrRecEvt'] if exclusao_por_recibo?
|
@@ -126,6 +129,10 @@ module Teodoro
|
|
126
129
|
tratar_excecao(e)
|
127
130
|
end
|
128
131
|
|
132
|
+
def nome
|
133
|
+
@nome ||= File.basename(caminho, '.xml')
|
134
|
+
end
|
135
|
+
|
129
136
|
def exclusao_por_recibo?
|
130
137
|
tipo_de_evento == 'S3000'
|
131
138
|
end
|
@@ -138,16 +145,12 @@ module Teodoro
|
|
138
145
|
TIPOS_DE_EVENTO_PROCESSAVEIS.include?(tipo_de_evento)
|
139
146
|
end
|
140
147
|
|
141
|
-
def nome
|
142
|
-
@nome ||= File.basename(caminho, '.xml')
|
143
|
-
end
|
144
|
-
|
145
148
|
def s1000?
|
146
149
|
tipo_de_evento == 'S1000'
|
147
150
|
end
|
148
151
|
|
149
152
|
def processar
|
150
|
-
Console.print "processando #{nome}.xml..." do
|
153
|
+
Console.print "processando #{nome}.xml (#{percentual}%)..." do
|
151
154
|
validar_versao_do_leiaute
|
152
155
|
processar_arquivo
|
153
156
|
end
|
@@ -187,6 +190,10 @@ module Teodoro
|
|
187
190
|
raise 'arquivo corrompido (sem data e horário do processamento do evento)'
|
188
191
|
end
|
189
192
|
|
193
|
+
def percentual
|
194
|
+
retificacao? ? arquivo_retificado.percentual : (indice + 1) * 100 / empresa.qtd_de_arquivos_xml
|
195
|
+
end
|
196
|
+
|
190
197
|
def validar_versao_do_leiaute
|
191
198
|
raise unless (VERSOES_DE_LEIAUTE_2 + VERSOES_DE_LEIAUTE_SIMPLIFICADO).include?(versao_do_leiaute)
|
192
199
|
end
|
@@ -218,7 +225,12 @@ module Teodoro
|
|
218
225
|
def arquivo
|
219
226
|
classe_do_arquivo.new(
|
220
227
|
empresa: empresa,
|
221
|
-
arquivo_xml: Obj.new(
|
228
|
+
arquivo_xml: Obj.new(
|
229
|
+
percentual: percentual,
|
230
|
+
leiaute_simplificado?: leiaute_simplificado?,
|
231
|
+
evento: evento,
|
232
|
+
recibo: recibo
|
233
|
+
)
|
222
234
|
)
|
223
235
|
end
|
224
236
|
|
data/lib/teodoro/empresa.rb
CHANGED
@@ -29,12 +29,14 @@ module Teodoro
|
|
29
29
|
class Impl # rubocop:disable Metrics/ClassLength
|
30
30
|
private
|
31
31
|
|
32
|
-
def initialize(caminho:, destino:)
|
32
|
+
def initialize(caminho:, qtd_de_empresas:, indice:, destino:)
|
33
33
|
@caminho = caminho
|
34
|
+
@qtd_de_empresas = qtd_de_empresas
|
35
|
+
@indice = indice
|
34
36
|
@destino = File.join(destino, nome_do_diretorio)
|
35
37
|
end
|
36
38
|
|
37
|
-
attr_reader :caminho, :destino
|
39
|
+
attr_reader :caminho, :qtd_de_empresas, :indice, :destino
|
38
40
|
|
39
41
|
public
|
40
42
|
|
@@ -57,6 +59,14 @@ module Teodoro
|
|
57
59
|
ajustar_nome_do_ultimo_arquivo_emp_data
|
58
60
|
end
|
59
61
|
|
62
|
+
def qtd_de_arquivos_de_origem
|
63
|
+
@qtd_de_arquivos_de_origem ||= caminhos_dos_arquivos_de_origem.size
|
64
|
+
end
|
65
|
+
|
66
|
+
def qtd_de_arquivos_xml
|
67
|
+
@qtd_de_arquivos_xml ||= arquivos_xml.size
|
68
|
+
end
|
69
|
+
|
60
70
|
def destino_dos_arquivos_data
|
61
71
|
@destino_dos_arquivos_data ||= File.join(destino, 'data')
|
62
72
|
end
|
@@ -104,7 +114,7 @@ module Teodoro
|
|
104
114
|
private
|
105
115
|
|
106
116
|
def dar_feedback_para_o_usuario
|
107
|
-
puts Rainbow(nome_do_diretorio).green
|
117
|
+
puts Rainbow(nome_do_diretorio).green + " (#{indice + 1} de #{qtd_de_empresas})"
|
108
118
|
end
|
109
119
|
|
110
120
|
def nome_do_diretorio
|
@@ -140,8 +150,19 @@ module Teodoro
|
|
140
150
|
|
141
151
|
def arquivos_de_origem
|
142
152
|
@arquivos_de_origem ||=
|
143
|
-
|
144
|
-
.map
|
153
|
+
caminhos_dos_arquivos_de_origem
|
154
|
+
.map.with_index do |caminho, indice|
|
155
|
+
ArquivoDeOrigem.new(
|
156
|
+
empresa: self,
|
157
|
+
caminho: caminho,
|
158
|
+
indice: indice,
|
159
|
+
destino_dos_arquivos_xml: destino_dos_arquivos_xml
|
160
|
+
)
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def caminhos_dos_arquivos_de_origem
|
165
|
+
@caminhos_dos_arquivos_de_origem ||= Dir[File.join(caminho, '*.zip')]
|
145
166
|
end
|
146
167
|
|
147
168
|
def carregar_arquivos_xml
|
@@ -150,14 +171,18 @@ module Teodoro
|
|
150
171
|
|
151
172
|
def arquivos_xml
|
152
173
|
@arquivos_xml ||=
|
153
|
-
|
154
|
-
.map { |caminho| ArquivoXML.new(empresa: self, caminho: caminho) }
|
174
|
+
caminhos_dos_arquivos_xml
|
175
|
+
.map.with_index { |caminho, indice| ArquivoXML.new(empresa: self, caminho: caminho, indice: indice) }
|
176
|
+
end
|
177
|
+
|
178
|
+
def caminhos_dos_arquivos_xml
|
179
|
+
@caminhos_dos_arquivos_xml ||= Dir[File.join(destino_dos_arquivos_xml, '*.xml')]
|
155
180
|
end
|
156
181
|
|
157
182
|
def classificar_arquivos_xml # rubocop:disable Metrics/MethodLength
|
158
183
|
Console.print 'classificando os arquivos XML...' do
|
159
184
|
arquivos_xml
|
160
|
-
.tap {
|
185
|
+
.tap { reinicializar_arquivos_xml }
|
161
186
|
.select(&:processavel?)
|
162
187
|
.each do |arquivo_xml|
|
163
188
|
if arquivo_xml.exclusao_por_recibo?
|
@@ -171,9 +196,17 @@ module Teodoro
|
|
171
196
|
end
|
172
197
|
end
|
173
198
|
|
199
|
+
def reinicializar_arquivos_xml
|
200
|
+
@arquivos_xml = []
|
201
|
+
@qtd_de_arquivos_xml = nil
|
202
|
+
end
|
203
|
+
|
174
204
|
def ordenar_arquivos_xml
|
175
205
|
Console.print 'ordenando os arquivos XML...' do
|
176
206
|
arquivos_xml.sort_by! { [_1.momento_de_processamento_pelo_e_social, _1.nome] }
|
207
|
+
arquivos_xml.each.with_index do |arquivo_xml, indice|
|
208
|
+
arquivo_xml.indice = indice
|
209
|
+
end
|
177
210
|
end
|
178
211
|
end
|
179
212
|
|
@@ -190,7 +223,10 @@ module Teodoro
|
|
190
223
|
|
191
224
|
def processar_arquivos_xml
|
192
225
|
# otimizacao do gerenciamento de memoria
|
193
|
-
|
226
|
+
while arquivos_xml.any?
|
227
|
+
arquivos_xml.first.processar
|
228
|
+
arquivos_xml.shift
|
229
|
+
end
|
194
230
|
end
|
195
231
|
|
196
232
|
def validar_que_nao_houve_evento_de_retificacao_sem_inclusao_correspondente
|
@@ -215,15 +251,21 @@ module Teodoro
|
|
215
251
|
end
|
216
252
|
|
217
253
|
def processar_cargos_gerados
|
218
|
-
|
254
|
+
Console.print 'gerando arquivos de cargos...' do
|
255
|
+
cargos_gerados.each(&:processar)
|
256
|
+
end
|
219
257
|
end
|
220
258
|
|
221
259
|
def processar_funcoes_geradas
|
222
|
-
|
260
|
+
Console.print 'gerando arquivos de funções...' do
|
261
|
+
funcoes_geradas.each(&:processar)
|
262
|
+
end
|
223
263
|
end
|
224
264
|
|
225
265
|
def setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
|
226
|
-
|
266
|
+
Console.print 'definindo próximo identificador de rubrica...' do
|
267
|
+
arquivos_data_emp.each(&:setar_proximo_identificador_de_tabela_de_rubricas)
|
268
|
+
end
|
227
269
|
end
|
228
270
|
|
229
271
|
def arquivos_data_emp
|
@@ -237,7 +279,7 @@ module Teodoro
|
|
237
279
|
end
|
238
280
|
|
239
281
|
def proximo_identificador_de_tabela_de_rubricas
|
240
|
-
(ultimo_identificador_de_tabela_de_rubricas || 0) + 1
|
282
|
+
@proximo_identificador_de_tabela_de_rubricas ||= (ultimo_identificador_de_tabela_de_rubricas || 0) + 1
|
241
283
|
end
|
242
284
|
|
243
285
|
def ultimo_identificador_de_tabela_de_rubricas
|
@@ -257,7 +299,9 @@ module Teodoro
|
|
257
299
|
end
|
258
300
|
|
259
301
|
def ajustar_nome_do_ultimo_arquivo_emp_data
|
260
|
-
|
302
|
+
Console.print 'ajustando nome do último arquivo da empresa...' do
|
303
|
+
File.rename(caminho_do_ultimo_arquivo_emp_data, novo_caminho_do_ultimo_arquivo_emp_data)
|
304
|
+
end
|
261
305
|
end
|
262
306
|
|
263
307
|
def caminho_do_ultimo_arquivo_emp_data
|
@@ -185,7 +185,7 @@ module Teodoro
|
|
185
185
|
['ESX_DATAADMISSAO', data_de_admissao, :data],
|
186
186
|
['ESX_DATAALTERACAO', data_da_alteracao, :data],
|
187
187
|
['cpfTrabalhador', cpf_do_trabalhador],
|
188
|
-
%w[nomeTrabalhador nomeTrabalhador], #
|
188
|
+
%w[nomeTrabalhador nomeTrabalhador], # TODO: Tales
|
189
189
|
['IdentificacaoVinculo_Cpf', cpf_do_trabalhador],
|
190
190
|
['IdentificacaoVinculo_Matricula', alteracao_contratual.matricula_do_trabalhador],
|
191
191
|
['TipoInscricaoEmpregador', tipo_de_inscricao_do_empregador],
|
data/lib/teodoro/version.rb
CHANGED
data/lib/teodoro.rb
CHANGED
@@ -152,7 +152,23 @@ module Teodoro
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def empresas
|
155
|
-
@empresas ||=
|
155
|
+
@empresas ||=
|
156
|
+
caminhos_das_empresas.map.with_index do |caminho, indice|
|
157
|
+
Empresa.new(
|
158
|
+
caminho: caminho,
|
159
|
+
qtd_de_empresas: qtd_de_empresas,
|
160
|
+
indice: indice,
|
161
|
+
destino: destino
|
162
|
+
)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
def caminhos_das_empresas
|
167
|
+
@caminhos_das_empresas ||= Dir[File.join(origem, '*')]
|
168
|
+
end
|
169
|
+
|
170
|
+
def qtd_de_empresas
|
171
|
+
@qtd_de_empresas ||= caminhos_das_empresas.size
|
156
172
|
end
|
157
173
|
end
|
158
174
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: teodoro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.67.
|
4
|
+
version: 0.67.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Fortes Tecnologia
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|