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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd434d937c342ccebfd1946cbce175d3f752f2084dfeb3e6c55af824f3000942
4
- data.tar.gz: 731f94e39d2a467522b5d57f3711261e5fa9897ff34c47fbf076f3b3f2d5aa45
3
+ metadata.gz: bd31ac75abdcccfd08625bc2caba6a656f5c2717f5b10f0b7eaa6a3f8068b924
4
+ data.tar.gz: 18b8779eeb088c257b12b4fd201222cdc719d922a0af838eae29ee8e0520075c
5
5
  SHA512:
6
- metadata.gz: a89cfe230bde7f4ba322bb9c4c47d250cdaac3ab785d19807fdaf11a774e9653ceffa0efeca065b47aa7bd185c49ffcfcfd01f56b9a188b2a4d7cbc8bf99eabc
7
- data.tar.gz: 78b3cea554caf9c3f01c7dee1af176ad3e84a784f5c3892a8fdfabc6ce24abeb0512b75ece47ab766fda9e8c4f1c59209a0c4b85f0c32b7428897667982d4050
6
+ metadata.gz: 6a3d94552031cd6b0d8c2b37eb58f98e70a590a061237a2a3a2e43a6d9ffbe5e777292b83c03bcbd7f69c96d14ddf8ca60eacfa636219ecfcd204ead55ff5260
7
+ data.tar.gz: ca50443b7ddd3f30fce31729001665bcb65e86a354e04df9bcaa40e1fac1046c7c7fffb4846089352ca80a59602c9d048505730ba6418f0acbbee1cdf66b06a8
@@ -31,6 +31,7 @@ module Teodoro
31
31
  end
32
32
 
33
33
  def processar_retificacao
34
+ arquivo_xml_de_retificacao.arquivo_retificado = arquivo_xml
34
35
  arquivo_xml_de_retificacao.processar
35
36
  end
36
37
 
@@ -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
- if File.directory?(caminho)
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
@@ -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(leiaute_simplificado?: leiaute_simplificado?, evento: evento, recibo: recibo)
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
 
@@ -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
- Dir[File.join(caminho, '*.zip')]
144
- .map { |caminho| ArquivoDeOrigem.new(caminho: caminho, destino_dos_arquivos_xml: destino_dos_arquivos_xml) }
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
- Dir[File.join(destino_dos_arquivos_xml, '*.xml')]
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 { @arquivos_xml = [] }
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
- arquivos_xml.shift.processar while arquivos_xml.any?
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
- cargos_gerados.each(&:processar)
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
- funcoes_geradas.each(&:processar)
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
- arquivos_data_emp.each(&:setar_proximo_identificador_de_tabela_de_rubricas)
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
- File.rename(caminho_do_ultimo_arquivo_emp_data, novo_caminho_do_ultimo_arquivo_emp_data)
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], # FIXME: Tales
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],
@@ -1,3 +1,3 @@
1
1
  module Teodoro
2
- VERSION = '0.67.1'.freeze
2
+ VERSION = '0.67.2'.freeze
3
3
  end
data/lib/teodoro.rb CHANGED
@@ -152,7 +152,23 @@ module Teodoro
152
152
  end
153
153
 
154
154
  def empresas
155
- @empresas ||= Dir[File.join(origem, '*')].map { |caminho| Empresa.new(caminho: caminho, destino: destino) }
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.1
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-28 00:00:00.000000000 Z
11
+ date: 2024-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri