teodoro 0.15.1 → 0.19.1
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/CBOs.json +10274 -0
- data/lib/teodoro.rb +32 -0
- data/lib/teodoro/arquivo_data.rb +0 -2
- data/lib/teodoro/arquivo_data/car.rb +29 -1
- data/lib/teodoro/console.rb +6 -2
- data/lib/teodoro/empresa.rb +29 -8
- data/lib/teodoro/leiaute/arquivo_s1010.rb +28 -1
- data/lib/teodoro/leiaute/arquivo_s1020.rb +6 -2
- data/lib/teodoro/leiaute/arquivo_s2306.rb +21 -76
- metadata +3 -2
data/lib/teodoro.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'forwardable'
|
2
|
+
require 'json'
|
3
|
+
require 'net/http'
|
2
4
|
require 'nokogiri'
|
3
5
|
require 'os'
|
4
6
|
require 'rainbow'
|
@@ -10,6 +12,13 @@ require_relative 'teodoro/empresa'
|
|
10
12
|
require_relative 'teodoro/obj'
|
11
13
|
|
12
14
|
module Teodoro
|
15
|
+
VERSION = '0.19.1'.freeze
|
16
|
+
|
17
|
+
CBOs = JSON.parse(File.read(File.join(File.dirname(__FILE__), 'CBOs.json')))
|
18
|
+
.map { [_1['codigo'], _1['titulo']] }
|
19
|
+
.to_h
|
20
|
+
.freeze
|
21
|
+
|
13
22
|
def self.call(args)
|
14
23
|
Execution.new(args).call
|
15
24
|
end
|
@@ -38,6 +47,7 @@ module Teodoro
|
|
38
47
|
validar_existencia_do_diretorio_de_destino
|
39
48
|
validar_que_diretorio_de_origem_nao_esta_vazio
|
40
49
|
validar_que_diretorio_de_destino_esta_vazio
|
50
|
+
validar_que_nao_ha_nova_versao_disponivel
|
41
51
|
|
42
52
|
processar_empresas
|
43
53
|
end
|
@@ -48,6 +58,28 @@ module Teodoro
|
|
48
58
|
erro "#{NOME_DO_PROGRAMA} [diretório de origem] [diretório de destino]" unless args.size == 2
|
49
59
|
end
|
50
60
|
|
61
|
+
def validar_que_nao_ha_nova_versao_disponivel
|
62
|
+
return unless nova_versao_disponivel?
|
63
|
+
|
64
|
+
erro ['Há uma nova versão disponível. Execute o seguinte comando para atualizar:', 'gem update teodoro']
|
65
|
+
end
|
66
|
+
|
67
|
+
def nova_versao_disponivel?
|
68
|
+
carregar_versao_disponivel != versao_corrente
|
69
|
+
end
|
70
|
+
|
71
|
+
def carregar_versao_disponivel
|
72
|
+
Console.print 'Verificando se há nova versão disponível...' do
|
73
|
+
JSON.parse(Net::HTTP.get(URI('https://rubygems.org/api/v1/gems/teodoro.json')))['version']
|
74
|
+
end
|
75
|
+
rescue StandardError
|
76
|
+
erro 'Erro! Não foi possível carregar a versão disponível. Verifique seu acesso à internet.'
|
77
|
+
end
|
78
|
+
|
79
|
+
def versao_corrente
|
80
|
+
Teodoro::VERSION
|
81
|
+
end
|
82
|
+
|
51
83
|
def validar_existencia_do_diretorio_de_origem
|
52
84
|
erro 'Diretório de origem não existe.' unless File.directory?(origem)
|
53
85
|
end
|
data/lib/teodoro/arquivo_data.rb
CHANGED
@@ -21,8 +21,6 @@ module Teodoro
|
|
21
21
|
raise caminho if File.exist?(caminho)
|
22
22
|
|
23
23
|
File.open(caminho, 'w') { |f| f.puts(itens_do_conteudo.map { "#{_1}=#{Valor.new(_2, formato: _3)}" }) }
|
24
|
-
# FIXME: Tales
|
25
|
-
# File.write(caminho, (itens_do_conteudo.map { "#{_1}=#{Valor.new(_2, formato: _3)}" } + ['']).join("\n"))
|
26
24
|
end
|
27
25
|
|
28
26
|
private
|
@@ -19,7 +19,7 @@ module Teodoro
|
|
19
19
|
['FimValidade', dados.fim_da_validade, :mes_ano],
|
20
20
|
['DadosCargo_DescricaoCargo', dados.nome_do_cargo],
|
21
21
|
['DadosCargo_CodigoCBO', dados.cbo],
|
22
|
-
['DadosCargo_CodigoCBO_TEXT'],
|
22
|
+
['DadosCargo_CodigoCBO_TEXT', "#{dados.cbo} - #{CBO.new(dados.cbo).titulo}"],
|
23
23
|
['autocomplete_DadosCargo_CodigoCBO'],
|
24
24
|
['PreencherCargoPublico', dados.orgao_publico?, :bool],
|
25
25
|
['IdEventoXml', dados.id_do_evento],
|
@@ -28,6 +28,34 @@ module Teodoro
|
|
28
28
|
['VerProc', dados.versao_do_aplicativo_de_processamento_do_evento]
|
29
29
|
]
|
30
30
|
end
|
31
|
+
|
32
|
+
class CBO
|
33
|
+
private
|
34
|
+
|
35
|
+
def initialize(codigo)
|
36
|
+
@codigo = codigo
|
37
|
+
|
38
|
+
alertar unless encontrado?
|
39
|
+
end
|
40
|
+
|
41
|
+
attr_reader :codigo
|
42
|
+
|
43
|
+
public
|
44
|
+
|
45
|
+
def titulo
|
46
|
+
CBOs[codigo] || codigo
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def encontrado?
|
52
|
+
CBOs.key?(codigo)
|
53
|
+
end
|
54
|
+
|
55
|
+
def alertar
|
56
|
+
puts "\n #{Rainbow("CBO #{codigo} não encontrado").yellow}"
|
57
|
+
end
|
58
|
+
end
|
31
59
|
end
|
32
60
|
end
|
33
61
|
end
|
data/lib/teodoro/console.rb
CHANGED
data/lib/teodoro/empresa.rb
CHANGED
@@ -21,7 +21,7 @@ module Teodoro
|
|
21
21
|
impl.processar
|
22
22
|
end
|
23
23
|
|
24
|
-
class Impl
|
24
|
+
class Impl # rubocop:disable Metrics/ClassLength
|
25
25
|
private
|
26
26
|
|
27
27
|
def initialize(caminho:, destino:)
|
@@ -39,15 +39,14 @@ module Teodoro
|
|
39
39
|
|
40
40
|
def processar
|
41
41
|
dar_feedback_para_o_usuario
|
42
|
-
|
43
|
-
criar_diretorio_dos_arquivos_xml
|
42
|
+
criar_diretorios_destino
|
44
43
|
descompactar_arquivos_de_origem
|
45
|
-
criar_diretorio_dos_arquivos_data
|
46
44
|
carregar_arquivos_xml
|
47
45
|
classificar_arquivos_xml
|
48
46
|
ordenar_arquivos_xml
|
49
47
|
processar_arquivos_xml
|
50
48
|
processar_cargos_gerados
|
49
|
+
ajustar_nome_do_ultimo_arquivo_emp_data
|
51
50
|
end
|
52
51
|
|
53
52
|
def destino_dos_arquivos_data
|
@@ -80,6 +79,12 @@ module Teodoro
|
|
80
79
|
@nome_do_diretorio ||= File.basename(caminho)
|
81
80
|
end
|
82
81
|
|
82
|
+
def criar_diretorios_destino
|
83
|
+
criar_diretorio_destino
|
84
|
+
criar_diretorio_dos_arquivos_xml
|
85
|
+
criar_diretorio_dos_arquivos_data
|
86
|
+
end
|
87
|
+
|
83
88
|
def criar_diretorio_destino
|
84
89
|
Dir.mkdir(destino)
|
85
90
|
end
|
@@ -92,6 +97,10 @@ module Teodoro
|
|
92
97
|
@destino_dos_arquivos_xml ||= File.join(destino, 'xmls')
|
93
98
|
end
|
94
99
|
|
100
|
+
def criar_diretorio_dos_arquivos_data
|
101
|
+
Dir.mkdir(destino_dos_arquivos_data)
|
102
|
+
end
|
103
|
+
|
95
104
|
def descompactar_arquivos_de_origem
|
96
105
|
# otimizacao do gerenciamento de memoria
|
97
106
|
arquivos_de_origem.shift.descompactar while arquivos_de_origem.any?
|
@@ -103,10 +112,6 @@ module Teodoro
|
|
103
112
|
.map { |caminho| ArquivoDeOrigem.new(caminho: caminho, destino_dos_arquivos_xml: destino_dos_arquivos_xml) }
|
104
113
|
end
|
105
114
|
|
106
|
-
def criar_diretorio_dos_arquivos_data
|
107
|
-
Dir.mkdir(destino_dos_arquivos_data)
|
108
|
-
end
|
109
|
-
|
110
115
|
def carregar_arquivos_xml
|
111
116
|
arquivos_xml.each(&:carregar)
|
112
117
|
end
|
@@ -143,6 +148,22 @@ module Teodoro
|
|
143
148
|
def processar_cargos_gerados
|
144
149
|
cargos_gerados.each(&:processar)
|
145
150
|
end
|
151
|
+
|
152
|
+
def ajustar_nome_do_ultimo_arquivo_emp_data
|
153
|
+
File.rename(caminho_do_ultimo_arquivo_emp_data, novo_caminho_do_ultimo_arquivo_emp_data)
|
154
|
+
end
|
155
|
+
|
156
|
+
def caminho_do_ultimo_arquivo_emp_data
|
157
|
+
@caminho_do_ultimo_arquivo_emp_data ||= caminhos_dos_arquivos_emp_data.last
|
158
|
+
end
|
159
|
+
|
160
|
+
def caminhos_dos_arquivos_emp_data
|
161
|
+
Dir[File.join(destino_dos_arquivos_data, 'EMP*.data')]
|
162
|
+
end
|
163
|
+
|
164
|
+
def novo_caminho_do_ultimo_arquivo_emp_data
|
165
|
+
caminho_do_ultimo_arquivo_emp_data.sub(/\[[^\]]*\]\.data$/, '.data')
|
166
|
+
end
|
146
167
|
end
|
147
168
|
end
|
148
169
|
end
|
@@ -41,7 +41,7 @@ module Teodoro
|
|
41
41
|
['DadosRubrica_Natureza', evento['infoRubrica/*/dadosRubrica/natRubr']],
|
42
42
|
['DadosRubrica_TipoRubrica', evento['infoRubrica/*/dadosRubrica/tpRubr']],
|
43
43
|
['DadosRubrica_CodigoIncidenciaPrevidencia', evento['infoRubrica/*/dadosRubrica/codIncCP']],
|
44
|
-
['DadosRubrica_CodigoIncidenciaIR'
|
44
|
+
de_acordo_com_a_versao_do_leiaute['DadosRubrica_CodigoIncidenciaIR'],
|
45
45
|
['DadosRubrica_CodigoIncidenciaFGTS', evento['infoRubrica/*/dadosRubrica/codIncFGTS']],
|
46
46
|
['DadosRubrica_CodigoIncidenciaSindical', evento['infoRubrica/*/dadosRubrica/codIncSIND']],
|
47
47
|
['IdEventoXml'],
|
@@ -54,6 +54,33 @@ module Teodoro
|
|
54
54
|
['hd_ProcessoSindicato']
|
55
55
|
]
|
56
56
|
end
|
57
|
+
|
58
|
+
def de_acordo_com_a_versao_do_leiaute # rubocop:disable Metrics/MethodLength
|
59
|
+
@de_acordo_com_a_versao_do_leiaute ||=
|
60
|
+
(
|
61
|
+
if leiaute_simplificado?
|
62
|
+
[
|
63
|
+
[
|
64
|
+
'DadosRubrica_CodigoIncidenciaIR',
|
65
|
+
evento['infoRubrica/*/dadosRubrica/codIncIRRF'].then { {
|
66
|
+
'0' => '00',
|
67
|
+
'1' => '01',
|
68
|
+
'9' => '09',
|
69
|
+
'700' => '79',
|
70
|
+
'701' => '79'
|
71
|
+
}[_1] || _1 }
|
72
|
+
]
|
73
|
+
]
|
74
|
+
else
|
75
|
+
[
|
76
|
+
[
|
77
|
+
'DadosRubrica_CodigoIncidenciaIR',
|
78
|
+
evento['infoRubrica/*/dadosRubrica/codIncIRRF']
|
79
|
+
]
|
80
|
+
]
|
81
|
+
end
|
82
|
+
).map { [_1.first, _1] }.to_h
|
83
|
+
end
|
57
84
|
end
|
58
85
|
end
|
59
86
|
end
|
@@ -32,8 +32,8 @@ module Teodoro
|
|
32
32
|
['CodigoLotacao', codigo_da_lotacao_tributaria],
|
33
33
|
['InicioValidade', inicio_da_validade, :mes_ano],
|
34
34
|
['FimValidade', fim_da_validade, :mes_ano],
|
35
|
-
['TipoLotacao',
|
36
|
-
[
|
35
|
+
['TipoLotacao', tipo_de_lotacao],
|
36
|
+
%w[Tipo 1],
|
37
37
|
['TipoInscricaoEstab', evento['infoLotacao/*/dadosLotacao/tpInsc']],
|
38
38
|
['NumeroInscricaoEstab', evento['infoLotacao/*/dadosLotacao/nrInsc']],
|
39
39
|
['Fpas', evento['infoLotacao/*/dadosLotacao/fpasLotacao/fpas']],
|
@@ -44,6 +44,10 @@ module Teodoro
|
|
44
44
|
['VerProc', versao_do_aplicativo_de_processamento_do_evento]
|
45
45
|
]
|
46
46
|
end
|
47
|
+
|
48
|
+
def tipo_de_lotacao
|
49
|
+
@tipo_de_lotacao ||= evento['infoLotacao/*/dadosLotacao/tpLotacao']
|
50
|
+
end
|
47
51
|
end
|
48
52
|
end
|
49
53
|
end
|
@@ -180,83 +180,28 @@ module Teodoro
|
|
180
180
|
@data_da_alteracao ||= evento['infoTSVAlteracao/dtAlteracao']
|
181
181
|
end
|
182
182
|
|
183
|
-
def de_acordo_com_a_versao_do_leiaute
|
183
|
+
def de_acordo_com_a_versao_do_leiaute # rubocop:disable Metrics/MethodLength
|
184
184
|
@de_acordo_com_a_versao_do_leiaute ||=
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
def indice
|
206
|
-
@indice ||= chaves_valores.map { [_1.first, _1] }.to_h
|
207
|
-
end
|
208
|
-
end
|
209
|
-
|
210
|
-
class Leiaute2
|
211
|
-
include Leiaute
|
212
|
-
|
213
|
-
private
|
214
|
-
|
215
|
-
def initialize(evento)
|
216
|
-
@evento = evento
|
217
|
-
end
|
218
|
-
|
219
|
-
def chaves_valores
|
220
|
-
[
|
221
|
-
[
|
222
|
-
'InfoVinculo_InfoContrato_CodigoCargo',
|
223
|
-
evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codCargo']
|
224
|
-
]
|
225
|
-
]
|
226
|
-
end
|
227
|
-
end
|
228
|
-
|
229
|
-
class LeiauteSimplificado
|
230
|
-
include Leiaute
|
231
|
-
|
232
|
-
private
|
233
|
-
|
234
|
-
def initialize(empresa:, evento:)
|
235
|
-
@empresa = empresa
|
236
|
-
@evento = evento
|
237
|
-
end
|
238
|
-
|
239
|
-
attr_reader :empresa
|
240
|
-
|
241
|
-
def chaves_valores
|
242
|
-
[
|
243
|
-
[
|
244
|
-
'InfoVinculo_InfoContrato_CodigoCargo',
|
245
|
-
codigo_do_cargo
|
246
|
-
]
|
247
|
-
]
|
248
|
-
end
|
249
|
-
|
250
|
-
def codigo_do_cargo
|
251
|
-
cargo&.codigo
|
252
|
-
end
|
253
|
-
|
254
|
-
def cargo
|
255
|
-
empresa.cargos_gerados[
|
256
|
-
nome: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/nmCargo'],
|
257
|
-
cbo: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/CBOCargo']
|
258
|
-
]
|
259
|
-
end
|
185
|
+
(
|
186
|
+
if leiaute_simplificado?
|
187
|
+
[
|
188
|
+
[
|
189
|
+
'InfoVinculo_InfoContrato_CodigoCargo',
|
190
|
+
empresa.cargos_gerados[
|
191
|
+
nome: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/nmCargo'],
|
192
|
+
cbo: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/CBOCargo']
|
193
|
+
]&.codigo
|
194
|
+
]
|
195
|
+
]
|
196
|
+
else
|
197
|
+
[
|
198
|
+
[
|
199
|
+
'InfoVinculo_InfoContrato_CodigoCargo',
|
200
|
+
evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codCargo']
|
201
|
+
]
|
202
|
+
]
|
203
|
+
end
|
204
|
+
).map { [_1.first, _1] }.to_h
|
260
205
|
end
|
261
206
|
end
|
262
207
|
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.
|
4
|
+
version: 0.19.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Clavius Tales
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -186,6 +186,7 @@ extensions: []
|
|
186
186
|
extra_rdoc_files: []
|
187
187
|
files:
|
188
188
|
- bin/teodoro
|
189
|
+
- lib/CBOs.json
|
189
190
|
- lib/teodoro.rb
|
190
191
|
- lib/teodoro/arquivo_data.rb
|
191
192
|
- lib/teodoro/arquivo_data/car.rb
|