teodoro 0.10.0 → 0.15.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 +4 -4
- data/lib/teodoro.rb +9 -2
- data/lib/teodoro/arquivo_data.rb +19 -22
- data/lib/teodoro/arquivo_data/car.rb +34 -0
- data/lib/teodoro/arquivo_data/tra_epg_avi.rb +55 -0
- data/lib/teodoro/arquivo_de_evento.rb +6 -2
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +52 -19
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +6 -2
- data/lib/teodoro/arquivo_xml.rb +33 -6
- data/lib/teodoro/empresa.rb +17 -140
- data/lib/teodoro/empresa/arquivos_data.rb +31 -0
- data/lib/teodoro/empresa/cargos_gerados.rb +86 -0
- data/lib/teodoro/empresa/contratos_de_emprego.rb +59 -0
- data/lib/teodoro/empresa/contratos_de_trabalho_sem_vinculo.rb +59 -0
- data/lib/teodoro/leiaute/arquivo_s1000.rb +18 -8
- data/lib/teodoro/leiaute/arquivo_s1005.rb +5 -5
- data/lib/teodoro/leiaute/arquivo_s1010.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1020.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1030.rb +19 -23
- data/lib/teodoro/leiaute/arquivo_s1040.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1050.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1070.rb +4 -4
- data/lib/teodoro/leiaute/arquivo_s2190.rb +2 -2
- data/lib/teodoro/leiaute/arquivo_s2200.rb +173 -15
- data/lib/teodoro/leiaute/arquivo_s2205.rb +42 -42
- data/lib/teodoro/leiaute/arquivo_s2206.rb +177 -74
- data/lib/teodoro/leiaute/arquivo_s2230.rb +5 -5
- data/lib/teodoro/leiaute/arquivo_s2250.rb +14 -34
- data/lib/teodoro/leiaute/arquivo_s2299.rb +67 -3
- data/lib/teodoro/leiaute/arquivo_s2300.rb +141 -14
- data/lib/teodoro/leiaute/arquivo_s2306.rb +85 -6
- metadata +8 -3
- data/lib/teodoro/leiaute.rb +0 -24
data/lib/teodoro/empresa.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
require_relative 'arquivo_de_origem'
|
2
2
|
require_relative 'arquivo_xml'
|
3
|
+
require_relative 'empresa/arquivos_data'
|
4
|
+
require_relative 'empresa/cargos_gerados'
|
5
|
+
require_relative 'empresa/contratos_de_emprego'
|
6
|
+
require_relative 'empresa/contratos_de_trabalho_sem_vinculo'
|
3
7
|
|
4
8
|
module Teodoro
|
5
9
|
class Empresa
|
@@ -29,6 +33,8 @@ module Teodoro
|
|
29
33
|
|
30
34
|
public
|
31
35
|
|
36
|
+
attr_accessor :inicio_da_validade
|
37
|
+
|
32
38
|
attr_reader :arquivos_xml_por_recibo_a_retificar
|
33
39
|
|
34
40
|
def processar
|
@@ -41,6 +47,7 @@ module Teodoro
|
|
41
47
|
classificar_arquivos_xml
|
42
48
|
ordenar_arquivos_xml
|
43
49
|
processar_arquivos_xml
|
50
|
+
processar_cargos_gerados
|
44
51
|
end
|
45
52
|
|
46
53
|
def destino_dos_arquivos_data
|
@@ -59,6 +66,10 @@ module Teodoro
|
|
59
66
|
@contratos_de_trabalho_sem_vinculo ||= ContratosDeTrabalhoSemVinculo.new
|
60
67
|
end
|
61
68
|
|
69
|
+
def cargos_gerados
|
70
|
+
@cargos_gerados ||= CargosGerados.new(self)
|
71
|
+
end
|
72
|
+
|
62
73
|
private
|
63
74
|
|
64
75
|
def dar_feedback_para_o_usuario
|
@@ -82,11 +93,13 @@ module Teodoro
|
|
82
93
|
end
|
83
94
|
|
84
95
|
def descompactar_arquivos_de_origem
|
85
|
-
|
96
|
+
# otimizacao do gerenciamento de memoria
|
97
|
+
arquivos_de_origem.shift.descompactar while arquivos_de_origem.any?
|
86
98
|
end
|
87
99
|
|
88
100
|
def arquivos_de_origem
|
89
|
-
|
101
|
+
@arquivos_de_origem ||=
|
102
|
+
Dir[File.join(caminho, '*.zip')]
|
90
103
|
.map { |caminho| ArquivoDeOrigem.new(caminho: caminho, destino_dos_arquivos_xml: destino_dos_arquivos_xml) }
|
91
104
|
end
|
92
105
|
|
@@ -127,144 +140,8 @@ module Teodoro
|
|
127
140
|
arquivos_xml.shift.processar while arquivos_xml.any?
|
128
141
|
end
|
129
142
|
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
def initialize(destino_dos_arquivos_data)
|
134
|
-
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
135
|
-
end
|
136
|
-
|
137
|
-
attr_reader :destino_dos_arquivos_data
|
138
|
-
|
139
|
-
public
|
140
|
-
|
141
|
-
def registrar(recibo:, nome:)
|
142
|
-
(nomes_por_recibo[recibo] ||= []) << nome
|
143
|
-
end
|
144
|
-
|
145
|
-
def excluir(recibo)
|
146
|
-
(nomes_por_recibo.delete(recibo) || [])
|
147
|
-
.map { |nome| File.join(destino_dos_arquivos_data, "#{nome}.data") }
|
148
|
-
.each { File.delete(_1) }
|
149
|
-
end
|
150
|
-
|
151
|
-
private
|
152
|
-
|
153
|
-
def nomes_por_recibo
|
154
|
-
@nomes_por_recibo ||= {}
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
class ContratosDeEmprego
|
159
|
-
def registrar_admissao(admissao:, afastamento:)
|
160
|
-
contratos_por_matricula[admissao.matricula] = Contrato.new(admissao: admissao, afastamento: afastamento)
|
161
|
-
end
|
162
|
-
|
163
|
-
def [](matricula)
|
164
|
-
contratos_por_matricula[matricula]
|
165
|
-
end
|
166
|
-
|
167
|
-
def *(cpf_do_trabalhador:, data:)
|
168
|
-
contratos
|
169
|
-
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
170
|
-
.sort_by(&:data_de_admissao)
|
171
|
-
end
|
172
|
-
|
173
|
-
def remover(recibo)
|
174
|
-
contratos_por_matricula.delete_if { _2.recibo == recibo }
|
175
|
-
end
|
176
|
-
|
177
|
-
private
|
178
|
-
|
179
|
-
def contratos_por_matricula
|
180
|
-
@contratos_por_matricula ||= {}
|
181
|
-
end
|
182
|
-
|
183
|
-
def contratos
|
184
|
-
contratos_por_matricula.values
|
185
|
-
end
|
186
|
-
|
187
|
-
class Contrato
|
188
|
-
private
|
189
|
-
|
190
|
-
def initialize(admissao:, afastamento:)
|
191
|
-
@admissao = admissao
|
192
|
-
@afastamento = afastamento
|
193
|
-
end
|
194
|
-
|
195
|
-
attr_reader :admissao, :data_de_desligamento
|
196
|
-
|
197
|
-
public
|
198
|
-
|
199
|
-
extend Forwardable
|
200
|
-
|
201
|
-
def_delegators :admissao, :matricula, :data_de_admissao, :categoria_do_trabalhador, :cpf_do_trabalhador,
|
202
|
-
:recibo
|
203
|
-
|
204
|
-
attr_accessor :afastamento
|
205
|
-
|
206
|
-
attr_writer :data_de_desligamento
|
207
|
-
|
208
|
-
def ativo?(data)
|
209
|
-
data_de_admissao <= data && (!data_de_desligamento || data_de_desligamento >= data)
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
class ContratosDeTrabalhoSemVinculo
|
215
|
-
def registrar_inicio_de_contrato(inicio_de_contrato:, afastamento:)
|
216
|
-
contratos << Contrato.new(inicio_de_contrato: inicio_de_contrato, afastamento: afastamento)
|
217
|
-
end
|
218
|
-
|
219
|
-
def [](cpf_do_trabalhador:, categoria_do_trabalhador:, data:)
|
220
|
-
contratos
|
221
|
-
.select {
|
222
|
-
_1.cpf_do_trabalhador == cpf_do_trabalhador && _1.categoria_do_trabalhador == categoria_do_trabalhador &&
|
223
|
-
_1.ativo?(data)
|
224
|
-
}
|
225
|
-
.max_by(&:data_de_inicio)
|
226
|
-
end
|
227
|
-
|
228
|
-
def *(cpf_do_trabalhador:, data:)
|
229
|
-
contratos
|
230
|
-
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
231
|
-
.sort_by(&:data_de_inicio)
|
232
|
-
end
|
233
|
-
|
234
|
-
def remover(recibo)
|
235
|
-
contratos.delete_if { _1.recibo == recibo }
|
236
|
-
end
|
237
|
-
|
238
|
-
private
|
239
|
-
|
240
|
-
def contratos
|
241
|
-
@contratos ||= []
|
242
|
-
end
|
243
|
-
|
244
|
-
class Contrato
|
245
|
-
private
|
246
|
-
|
247
|
-
def initialize(inicio_de_contrato:, afastamento:)
|
248
|
-
@inicio_de_contrato = inicio_de_contrato
|
249
|
-
@afastamento = afastamento
|
250
|
-
end
|
251
|
-
|
252
|
-
attr_reader :inicio_de_contrato, :data_do_termino
|
253
|
-
|
254
|
-
public
|
255
|
-
|
256
|
-
extend Forwardable
|
257
|
-
|
258
|
-
def_delegators :inicio_de_contrato, :cpf_do_trabalhador, :categoria_do_trabalhador, :data_de_inicio, :recibo
|
259
|
-
|
260
|
-
attr_accessor :afastamento
|
261
|
-
|
262
|
-
attr_writer :data_do_termino
|
263
|
-
|
264
|
-
def ativo?(data)
|
265
|
-
data_de_inicio <= data && (!data_do_termino || data_do_termino >= data)
|
266
|
-
end
|
267
|
-
end
|
143
|
+
def processar_cargos_gerados
|
144
|
+
cargos_gerados.each(&:processar)
|
268
145
|
end
|
269
146
|
end
|
270
147
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class ArquivosData
|
4
|
+
private
|
5
|
+
|
6
|
+
def initialize(destino_dos_arquivos_data)
|
7
|
+
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :destino_dos_arquivos_data
|
11
|
+
|
12
|
+
public
|
13
|
+
|
14
|
+
def registrar(recibo:, nome:)
|
15
|
+
(nomes_por_recibo[recibo] ||= []) << nome
|
16
|
+
end
|
17
|
+
|
18
|
+
def excluir(recibo)
|
19
|
+
(nomes_por_recibo.delete(recibo) || [])
|
20
|
+
.map { |nome| File.join(destino_dos_arquivos_data, "#{nome}.data") }
|
21
|
+
.each { File.delete(_1) }
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def nomes_por_recibo
|
27
|
+
@nomes_por_recibo ||= {}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class CargosGerados
|
4
|
+
private
|
5
|
+
|
6
|
+
def initialize(empresa)
|
7
|
+
@empresa = empresa
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :empresa
|
11
|
+
|
12
|
+
public
|
13
|
+
|
14
|
+
extend Forwardable
|
15
|
+
|
16
|
+
def_delegators :cargos, :each
|
17
|
+
|
18
|
+
def [](nome:, cbo:)
|
19
|
+
indice[nome: nome, cbo: cbo] ||= Cargo.new(empresa: empresa, dados: Obj.new(nome: nome, cbo: cbo)) if nome
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def cargos
|
25
|
+
indice.values
|
26
|
+
end
|
27
|
+
|
28
|
+
def indice
|
29
|
+
@indice ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
class Cargo
|
33
|
+
private
|
34
|
+
|
35
|
+
def initialize(empresa:, dados:)
|
36
|
+
@empresa = empresa
|
37
|
+
@dados = dados
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :empresa
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
attr_reader :dados
|
45
|
+
|
46
|
+
def codigo
|
47
|
+
@codigo ||= SecureRandom.hex(15)
|
48
|
+
end
|
49
|
+
|
50
|
+
def processar
|
51
|
+
criar_arquivo_data
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def criar_arquivo_data
|
57
|
+
arquivo_data.criar
|
58
|
+
end
|
59
|
+
|
60
|
+
def arquivo_data # rubocop:disable Metrics/MethodLength
|
61
|
+
ArquivoData.new(
|
62
|
+
diretorio: empresa.destino_dos_arquivos_data,
|
63
|
+
nome: ArquivoDeEventoDeTabela::NomeDoArquivoData.new(
|
64
|
+
identificacao: ArquivoData::CAR::Identificacao.new(codigo),
|
65
|
+
inicio_da_validade: empresa.inicio_da_validade
|
66
|
+
),
|
67
|
+
itens_do_conteudo: ArquivoData::CAR::ItensDeConteudo.new(
|
68
|
+
Obj.new(
|
69
|
+
codigo_do_cargo: codigo,
|
70
|
+
inicio_da_validade: empresa.inicio_da_validade,
|
71
|
+
fim_da_validade: nil,
|
72
|
+
nome_do_cargo: dados.nome,
|
73
|
+
cbo: dados.cbo,
|
74
|
+
orgao_publico?: false,
|
75
|
+
id_do_evento: nil,
|
76
|
+
numero_do_recibo: nil,
|
77
|
+
processo_de_emissao_do_evento: nil,
|
78
|
+
versao_do_aplicativo_de_processamento_do_evento: nil
|
79
|
+
)
|
80
|
+
)
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class ContratosDeEmprego
|
4
|
+
def registrar_admissao(admissao:, afastamento:)
|
5
|
+
contratos_por_matricula[admissao.matricula] = Contrato.new(admissao: admissao, afastamento: afastamento)
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](matricula)
|
9
|
+
contratos_por_matricula[matricula]
|
10
|
+
end
|
11
|
+
|
12
|
+
def *(cpf_do_trabalhador:, data:)
|
13
|
+
contratos
|
14
|
+
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
15
|
+
.sort_by(&:data_de_admissao)
|
16
|
+
end
|
17
|
+
|
18
|
+
def remover(recibo)
|
19
|
+
contratos_por_matricula.delete_if { _2.recibo == recibo }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def contratos_por_matricula
|
25
|
+
@contratos_por_matricula ||= {}
|
26
|
+
end
|
27
|
+
|
28
|
+
def contratos
|
29
|
+
contratos_por_matricula.values
|
30
|
+
end
|
31
|
+
|
32
|
+
class Contrato
|
33
|
+
private
|
34
|
+
|
35
|
+
def initialize(admissao:, afastamento:)
|
36
|
+
@admissao = admissao
|
37
|
+
@afastamento = afastamento
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :admissao, :data_de_desligamento
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
extend Forwardable
|
45
|
+
|
46
|
+
def_delegators :admissao, :matricula, :data_de_admissao, :categoria_do_trabalhador, :cpf_do_trabalhador,
|
47
|
+
:recibo
|
48
|
+
|
49
|
+
attr_accessor :afastamento
|
50
|
+
|
51
|
+
attr_writer :data_de_desligamento
|
52
|
+
|
53
|
+
def ativo?(data)
|
54
|
+
data_de_admissao <= data && (!data_de_desligamento || data_de_desligamento >= data)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class ContratosDeTrabalhoSemVinculo
|
4
|
+
def registrar_inicio_de_contrato(inicio_de_contrato:, afastamento:)
|
5
|
+
contratos << Contrato.new(inicio_de_contrato: inicio_de_contrato, afastamento: afastamento)
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](cpf_do_trabalhador:, categoria_do_trabalhador:, data:)
|
9
|
+
contratos
|
10
|
+
.select {
|
11
|
+
_1.cpf_do_trabalhador == cpf_do_trabalhador && _1.categoria_do_trabalhador == categoria_do_trabalhador &&
|
12
|
+
_1.ativo?(data)
|
13
|
+
}
|
14
|
+
.max_by(&:data_de_inicio)
|
15
|
+
end
|
16
|
+
|
17
|
+
def *(cpf_do_trabalhador:, data:)
|
18
|
+
contratos
|
19
|
+
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
20
|
+
.sort_by(&:data_de_inicio)
|
21
|
+
end
|
22
|
+
|
23
|
+
def remover(recibo)
|
24
|
+
contratos.delete_if { _1.recibo == recibo }
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def contratos
|
30
|
+
@contratos ||= []
|
31
|
+
end
|
32
|
+
|
33
|
+
class Contrato
|
34
|
+
private
|
35
|
+
|
36
|
+
def initialize(inicio_de_contrato:, afastamento:)
|
37
|
+
@inicio_de_contrato = inicio_de_contrato
|
38
|
+
@afastamento = afastamento
|
39
|
+
end
|
40
|
+
|
41
|
+
attr_reader :inicio_de_contrato, :data_do_termino
|
42
|
+
|
43
|
+
public
|
44
|
+
|
45
|
+
extend Forwardable
|
46
|
+
|
47
|
+
def_delegators :inicio_de_contrato, :cpf_do_trabalhador, :categoria_do_trabalhador, :data_de_inicio, :recibo
|
48
|
+
|
49
|
+
attr_accessor :afastamento
|
50
|
+
|
51
|
+
attr_writer :data_do_termino
|
52
|
+
|
53
|
+
def ativo?(data)
|
54
|
+
data_de_inicio <= data && (!data_do_termino || data_do_termino >= data)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,10 +1,22 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1000 # rubocop:disable Metrics/ClassLength
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
private
|
7
7
|
|
8
|
+
def criar_arquivo_data
|
9
|
+
super
|
10
|
+
|
11
|
+
registrar_inicio_da_validade
|
12
|
+
end
|
13
|
+
|
14
|
+
def registrar_inicio_da_validade
|
15
|
+
return unless !empresa.inicio_da_validade || inicio_da_validade < empresa.inicio_da_validade
|
16
|
+
|
17
|
+
empresa.inicio_da_validade = inicio_da_validade
|
18
|
+
end
|
19
|
+
|
8
20
|
def noh_de_informacoes_do_evento
|
9
21
|
'infoEmpregador'
|
10
22
|
end
|
@@ -61,7 +73,6 @@ module Teodoro
|
|
61
73
|
|
62
74
|
def itens_do_conteudo_do_arquivo_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
63
75
|
[
|
64
|
-
# rubocop:disable Layout/LineLength
|
65
76
|
['TipoInscricaoEmpregador', tipo_de_inscricao],
|
66
77
|
['FapBdContrib'],
|
67
78
|
['AlteracaoEmPeriodoExistente'],
|
@@ -73,12 +84,12 @@ module Teodoro
|
|
73
84
|
['EhRetificacao'],
|
74
85
|
['EhInclusaoNovoPeriodo'],
|
75
86
|
['RetornoAction'],
|
76
|
-
['ehOrgaoPublico',
|
77
|
-
['ehOrgaoPublicoUniao',
|
78
|
-
['ehOrgaoPublicoEstadualMunicipalDistrital',
|
87
|
+
['ehOrgaoPublico', orgao_publico?, :bool],
|
88
|
+
['ehOrgaoPublicoUniao', orgao_publico?, :bool],
|
89
|
+
['ehOrgaoPublicoEstadualMunicipalDistrital', evento['infoEmpregador/*/infoCadastro/infoOP/infoEnte'], :bool],
|
79
90
|
['ExibeModoCompleto'],
|
80
|
-
['InicioValidade',
|
81
|
-
['FimValidade',
|
91
|
+
['InicioValidade', inicio_da_validade, :mes_ano],
|
92
|
+
['FimValidade', fim_da_validade, :mes_ano],
|
82
93
|
['NomeRazaoSocial', nome_ou_razao_social],
|
83
94
|
['ClassificacaoTributaria', evento['infoEmpregador/*/infoCadastro/classTrib']],
|
84
95
|
['NaturezaJuridica', evento['infoEmpregador/*/infoCadastro/natJurid']],
|
@@ -117,7 +128,6 @@ module Teodoro
|
|
117
128
|
["ListaSoftHouses_#{seq}_Email", software_house['email']]
|
118
129
|
]
|
119
130
|
end.sum([])
|
120
|
-
# rubocop:enable Layout/LineLength
|
121
131
|
]
|
122
132
|
end
|
123
133
|
|