teodoro 0.5.0 → 0.9.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 +1 -0
- data/lib/teodoro/arquivo_de_evento.rb +2 -2
- data/lib/teodoro/arquivo_de_evento_criador_de_arquivo_data.rb +1 -1
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +6 -6
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +10 -3
- data/lib/teodoro/arquivo_de_evento_processador_de_arquivo_data.rb +2 -2
- data/lib/teodoro/arquivo_de_evento_retificavel.rb +8 -8
- data/lib/teodoro/arquivo_de_origem.rb +7 -7
- data/lib/teodoro/arquivo_xml.rb +45 -19
- data/lib/teodoro/console.rb +3 -1
- data/lib/teodoro/empresa.rb +179 -161
- data/lib/teodoro/leiaute/arquivo_s1000.rb +20 -24
- data/lib/teodoro/leiaute/arquivo_s1005.rb +12 -18
- data/lib/teodoro/leiaute/arquivo_s1010.rb +9 -13
- data/lib/teodoro/leiaute/arquivo_s1020.rb +6 -10
- data/lib/teodoro/leiaute/arquivo_s1030.rb +4 -8
- data/lib/teodoro/leiaute/arquivo_s1040.rb +3 -7
- data/lib/teodoro/leiaute/arquivo_s1050.rb +6 -12
- data/lib/teodoro/leiaute/arquivo_s1070.rb +9 -13
- data/lib/teodoro/leiaute/arquivo_s2190.rb +6 -8
- data/lib/teodoro/leiaute/arquivo_s2200.rb +90 -114
- data/lib/teodoro/leiaute/arquivo_s2205.rb +57 -62
- data/lib/teodoro/leiaute/arquivo_s2206.rb +16 -20
- data/lib/teodoro/leiaute/arquivo_s2230.rb +12 -17
- data/lib/teodoro/leiaute/arquivo_s2250.rb +12 -25
- data/lib/teodoro/leiaute/arquivo_s2299.rb +5 -9
- data/lib/teodoro/leiaute/arquivo_s2300.rb +87 -244
- data/lib/teodoro/leiaute/arquivo_s2306.rb +36 -40
- data/lib/teodoro/leiaute/arquivo_s2399.rb +4 -154
- data/lib/teodoro/leiaute/arquivo_s3000.rb +2 -2
- data/lib/teodoro/xml.rb +2 -2
- 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: de3ebb9e45e3e9b980c944f4cc6b74cc0946612f106f709ed6733fdfe25f6a76
|
4
|
+
data.tar.gz: 9b5e67fd6437621dbc95dfe09be177dd5ac147e8b3b9c05012b1a66903412002
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b0021d42bf9f1ab1bdf39b80098faeb6c0adc8aec9dc7c80da299f724baf3adba6f19ebf40941b907b2a0a78285274c02d0c0df85c8fc90120cc3875461e6f8
|
7
|
+
data.tar.gz: d8bc4bb61f6df69d8ad241e97efaff55abb71816311973d9c604b2bf4085243c88a5bee4840a34cbc72d793bcfbea88f52b598a983e884837c2bdba586bb8424
|
data/lib/teodoro.rb
CHANGED
@@ -18,11 +18,11 @@ module Teodoro
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def versao_do_aplicativo_de_processamento_do_evento
|
21
|
-
@versao_do_aplicativo_de_processamento_do_evento ||= recibo['
|
21
|
+
@versao_do_aplicativo_de_processamento_do_evento ||= recibo['processamento/versaoAppProcessamento']
|
22
22
|
end
|
23
23
|
|
24
24
|
def numero_do_recibo
|
25
|
-
@numero_do_recibo ||= recibo['
|
25
|
+
@numero_do_recibo ||= recibo['recibo/nrRecibo']
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
@@ -12,11 +12,11 @@ module Teodoro
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def alteracao?
|
15
|
-
@alteracao ||= evento[
|
15
|
+
@alteracao ||= evento[noh_de_informacoes_do_evento, 'alteracao']
|
16
16
|
end
|
17
17
|
|
18
18
|
def exclusao?
|
19
|
-
@exclusao ||= evento[
|
19
|
+
@exclusao ||= evento[noh_de_informacoes_do_evento, 'exclusao']
|
20
20
|
end
|
21
21
|
|
22
22
|
def deletar_arquivo_data_original
|
@@ -24,7 +24,7 @@ module Teodoro
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def inicio_da_validade_original
|
27
|
-
evento[
|
27
|
+
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo, 'iniValid']
|
28
28
|
end
|
29
29
|
|
30
30
|
def obter_caminho_do_arquivo_data(inicio_da_validade)
|
@@ -48,14 +48,14 @@ module Teodoro
|
|
48
48
|
def validade
|
49
49
|
@validade ||=
|
50
50
|
if inclusao? || (alteracao? && !nova_validade?)
|
51
|
-
evento[
|
51
|
+
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo]
|
52
52
|
elsif alteracao?
|
53
53
|
nova_validade
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
def inclusao?
|
58
|
-
@inclusao ||= evento[
|
58
|
+
@inclusao ||= evento[noh_de_informacoes_do_evento, 'inclusao']
|
59
59
|
end
|
60
60
|
|
61
61
|
def nova_validade?
|
@@ -63,7 +63,7 @@ module Teodoro
|
|
63
63
|
end
|
64
64
|
|
65
65
|
def nova_validade
|
66
|
-
@nova_validade ||= evento[
|
66
|
+
@nova_validade ||= evento[noh_de_informacoes_do_evento, 'alteracao', 'novaValidade']
|
67
67
|
end
|
68
68
|
|
69
69
|
def fim_da_validade
|
@@ -4,9 +4,12 @@ module Teodoro
|
|
4
4
|
include ArquivoDeEventoRetificavel
|
5
5
|
|
6
6
|
def processar
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
if retificado?
|
8
|
+
processar_retificacao
|
9
|
+
else
|
10
|
+
registrar_arquivo_data
|
11
|
+
criar_arquivo_data
|
12
|
+
end
|
10
13
|
end
|
11
14
|
|
12
15
|
private
|
@@ -18,6 +21,10 @@ module Teodoro
|
|
18
21
|
)
|
19
22
|
end
|
20
23
|
|
24
|
+
def arquivos_data
|
25
|
+
empresa.arquivos_data
|
26
|
+
end
|
27
|
+
|
21
28
|
def caminho_do_arquivo_data
|
22
29
|
criar_caminho_do_arquivo_data(nome_do_arquivo_data)
|
23
30
|
end
|
@@ -5,11 +5,11 @@ module Teodoro
|
|
5
5
|
private
|
6
6
|
|
7
7
|
def id_do_evento
|
8
|
-
evento.css(
|
8
|
+
evento.css('/*').first.attributes['Id'].value
|
9
9
|
end
|
10
10
|
|
11
11
|
def processo_de_emissao_do_evento
|
12
|
-
evento[
|
12
|
+
evento['ideEvento/procEmi']
|
13
13
|
end
|
14
14
|
|
15
15
|
def criar_caminho_do_arquivo_data(nome_do_arquivo)
|
@@ -4,20 +4,20 @@ module Teodoro
|
|
4
4
|
|
5
5
|
private
|
6
6
|
|
7
|
-
def
|
8
|
-
|
7
|
+
def retificado?
|
8
|
+
arquivo_xml_de_retificacao
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
12
|
-
|
11
|
+
def arquivo_xml_de_retificacao
|
12
|
+
@arquivo_xml_de_retificacao ||= arquivos_xml_por_recibo_a_retificar.delete(numero_do_recibo)
|
13
13
|
end
|
14
14
|
|
15
|
-
def
|
16
|
-
empresa.
|
15
|
+
def arquivos_xml_por_recibo_a_retificar
|
16
|
+
empresa.arquivos_xml_por_recibo_a_retificar
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
20
|
-
|
19
|
+
def processar_retificacao
|
20
|
+
arquivo_xml_de_retificacao.processar
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -14,13 +14,13 @@ module Teodoro
|
|
14
14
|
public
|
15
15
|
|
16
16
|
def descompactar
|
17
|
-
Console.print "descompactando #{File.basename(caminho)}..."
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
Console.print "descompactando #{File.basename(caminho)}..." do
|
18
|
+
Zip::File.open(caminho) do |zip|
|
19
|
+
zip
|
20
|
+
.reject { |entrada| entrada.name[-8] == PREFIXO_DE_TOTALIZADOR }
|
21
|
+
.each do |entrada|
|
22
|
+
entrada.extract(File.join(destino_dos_arquivos_xml, entrada.name))
|
23
|
+
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/teodoro/arquivo_xml.rb
CHANGED
@@ -9,7 +9,7 @@ require_relative 'leiaute'
|
|
9
9
|
require_relative 'xml'
|
10
10
|
|
11
11
|
module Teodoro
|
12
|
-
class ArquivoXML
|
12
|
+
class ArquivoXML # rubocop:disable Metrics/ClassLength
|
13
13
|
TIPOS_DE_EVENTO_PROCESSAVEIS = %w[
|
14
14
|
S1000
|
15
15
|
S1005
|
@@ -32,6 +32,18 @@ module Teodoro
|
|
32
32
|
S3000
|
33
33
|
].freeze
|
34
34
|
|
35
|
+
TIPOS_DE_EVENTO_RETIFICAVEIS = %w[
|
36
|
+
S2200
|
37
|
+
S2205
|
38
|
+
S2206
|
39
|
+
S2230
|
40
|
+
S2250
|
41
|
+
S2299
|
42
|
+
S2300
|
43
|
+
S2306
|
44
|
+
S2399
|
45
|
+
].freeze
|
46
|
+
|
35
47
|
private
|
36
48
|
|
37
49
|
def initialize(empresa:, caminho:)
|
@@ -43,16 +55,25 @@ module Teodoro
|
|
43
55
|
|
44
56
|
public
|
45
57
|
|
46
|
-
|
47
|
-
|
58
|
+
attr_reader :numero_do_recibo_a_retificar, :momento_de_processamento_pelo_e_social
|
59
|
+
|
60
|
+
# otimizacao do gerenciamento de memoria
|
61
|
+
def carregar
|
62
|
+
Console.print "carregando #{nome}.xml..." do
|
63
|
+
evento, recibo = carregar_evento_e_recibo
|
64
|
+
|
65
|
+
@retificacao = TIPOS_DE_EVENTO_RETIFICAVEIS.include?(tipo_de_evento) && evento['ideEvento/indRetif'] == '2'
|
66
|
+
@numero_do_recibo_a_retificar = evento['ideEvento/nrRecibo'] if retificacao?
|
67
|
+
@momento_de_processamento_pelo_e_social = recibo['processamento/dhProcessamento']
|
68
|
+
end
|
48
69
|
end
|
49
70
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
71
|
+
def retificacao?
|
72
|
+
@retificacao
|
73
|
+
end
|
74
|
+
|
75
|
+
def processavel?
|
76
|
+
TIPOS_DE_EVENTO_PROCESSAVEIS.include?(tipo_de_evento)
|
56
77
|
end
|
57
78
|
|
58
79
|
def nome
|
@@ -60,15 +81,20 @@ module Teodoro
|
|
60
81
|
end
|
61
82
|
|
62
83
|
def processar
|
63
|
-
|
64
|
-
|
65
|
-
|
84
|
+
Console.print "processando #{nome}.xml..." do
|
85
|
+
validar_versao_do_leiaute
|
86
|
+
processar_arquivo
|
87
|
+
end
|
66
88
|
end
|
67
89
|
|
68
90
|
private
|
69
91
|
|
70
|
-
def
|
71
|
-
|
92
|
+
def carregar_evento_e_recibo
|
93
|
+
carregar_xml
|
94
|
+
.then do |xml|
|
95
|
+
%w[evento recibo]
|
96
|
+
.map { XML.new(Nokogiri::XML(xml.css("eSocial/retornoProcessamentoDownload/#{_1}/*/*").to_s)) }
|
97
|
+
end
|
72
98
|
end
|
73
99
|
|
74
100
|
def carregar_xml
|
@@ -79,8 +105,8 @@ module Teodoro
|
|
79
105
|
File.read(caminho)
|
80
106
|
end
|
81
107
|
|
82
|
-
def
|
83
|
-
|
108
|
+
def tipo_de_evento
|
109
|
+
@tipo_de_evento ||= nome[-6..].delete('-')
|
84
110
|
end
|
85
111
|
|
86
112
|
def validar_versao_do_leiaute
|
@@ -92,7 +118,7 @@ module Teodoro
|
|
92
118
|
end
|
93
119
|
|
94
120
|
def namespace_do_evento
|
95
|
-
xml_do_evento.css('eSocial')[0].namespace.href
|
121
|
+
xml_do_evento.css('/eSocial')[0].namespace.href
|
96
122
|
end
|
97
123
|
|
98
124
|
def xml_do_evento
|
@@ -119,7 +145,7 @@ module Teodoro
|
|
119
145
|
end
|
120
146
|
|
121
147
|
def evento
|
122
|
-
XML.new(xml_do_evento)
|
148
|
+
XML.new(Nokogiri::XML(xml_do_evento.css('*/*').to_s))
|
123
149
|
end
|
124
150
|
|
125
151
|
def recibo
|
@@ -127,7 +153,7 @@ module Teodoro
|
|
127
153
|
end
|
128
154
|
|
129
155
|
def xml_do_recibo
|
130
|
-
Nokogiri::XML(xml.css('eSocial/retornoProcessamentoDownload/recibo
|
156
|
+
Nokogiri::XML(xml.css('eSocial/retornoProcessamentoDownload/recibo/*/*').to_s)
|
131
157
|
end
|
132
158
|
end
|
133
159
|
end
|
data/lib/teodoro/console.rb
CHANGED
data/lib/teodoro/empresa.rb
CHANGED
@@ -5,195 +5,218 @@ module Teodoro
|
|
5
5
|
class Empresa
|
6
6
|
private
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@destino = File.join(destino, nome_do_diretorio)
|
8
|
+
def initialize(args)
|
9
|
+
@impl = Impl.new(**args)
|
11
10
|
end
|
12
11
|
|
13
|
-
attr_reader :
|
12
|
+
attr_reader :impl
|
14
13
|
|
15
14
|
public
|
16
15
|
|
17
16
|
def processar
|
18
|
-
|
19
|
-
criar_diretorio_destino
|
20
|
-
criar_diretorio_dos_arquivos_xml
|
21
|
-
descompactar_arquivos_de_origem
|
22
|
-
criar_diretorio_dos_arquivos_data
|
23
|
-
ordenar_arquivos_xml
|
24
|
-
processar_arquivos_xml
|
25
|
-
limpar_linha_de_feedback
|
17
|
+
impl.processar
|
26
18
|
end
|
27
19
|
|
28
|
-
|
29
|
-
|
30
|
-
def dar_feedback_para_o_usuario
|
31
|
-
puts Rainbow(nome_do_diretorio).green
|
32
|
-
end
|
33
|
-
|
34
|
-
def nome_do_diretorio
|
35
|
-
@nome_do_diretorio ||= File.basename(caminho)
|
36
|
-
end
|
37
|
-
|
38
|
-
def criar_diretorio_destino
|
39
|
-
Dir.mkdir(destino)
|
40
|
-
end
|
41
|
-
|
42
|
-
def criar_diretorio_dos_arquivos_xml
|
43
|
-
Dir.mkdir(destino_dos_arquivos_xml)
|
44
|
-
end
|
45
|
-
|
46
|
-
def destino_dos_arquivos_xml
|
47
|
-
@destino_dos_arquivos_xml ||= File.join(destino, 'xmls')
|
48
|
-
end
|
49
|
-
|
50
|
-
def descompactar_arquivos_de_origem
|
51
|
-
arquivos_de_origem.each(&:descompactar)
|
52
|
-
end
|
20
|
+
class Impl
|
21
|
+
private
|
53
22
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
23
|
+
def initialize(caminho:, destino:)
|
24
|
+
@caminho = caminho
|
25
|
+
@destino = File.join(destino, nome_do_diretorio)
|
26
|
+
end
|
58
27
|
|
59
|
-
|
60
|
-
Dir.mkdir(destino_dos_arquivos_data)
|
61
|
-
end
|
28
|
+
attr_reader :caminho, :destino
|
62
29
|
|
63
|
-
|
64
|
-
@destino_dos_arquivos_data ||= File.join(destino, 'data')
|
65
|
-
end
|
30
|
+
public
|
66
31
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
32
|
+
attr_reader :arquivos_xml_por_recibo_a_retificar
|
33
|
+
|
34
|
+
def processar
|
35
|
+
dar_feedback_para_o_usuario
|
36
|
+
criar_diretorio_destino
|
37
|
+
criar_diretorio_dos_arquivos_xml
|
38
|
+
descompactar_arquivos_de_origem
|
39
|
+
criar_diretorio_dos_arquivos_data
|
40
|
+
carregar_arquivos_xml
|
41
|
+
classificar_arquivos_xml
|
42
|
+
ordenar_arquivos_xml
|
43
|
+
processar_arquivos_xml
|
44
|
+
end
|
71
45
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
end
|
46
|
+
def destino_dos_arquivos_data
|
47
|
+
@destino_dos_arquivos_data ||= File.join(destino, 'data')
|
48
|
+
end
|
76
49
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
.select(&:processavel?)
|
81
|
-
end
|
50
|
+
def arquivos_data
|
51
|
+
@arquivos_data ||= ArquivosData.new(destino_dos_arquivos_data)
|
52
|
+
end
|
82
53
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
arquivos_data: ArquivosData.new(destino_dos_arquivos_data),
|
87
|
-
contratos_de_emprego: ContratosDeEmprego.new,
|
88
|
-
contratos_de_trabalho_sem_vinculo: ContratosDeTrabalhoSemVinculo.new
|
89
|
-
)
|
90
|
-
end
|
54
|
+
def contratos_de_emprego
|
55
|
+
@contratos_de_emprego ||= ContratosDeEmprego.new
|
56
|
+
end
|
91
57
|
|
92
|
-
|
93
|
-
|
94
|
-
|
58
|
+
def contratos_de_trabalho_sem_vinculo
|
59
|
+
@contratos_de_trabalho_sem_vinculo ||= ContratosDeTrabalhoSemVinculo.new
|
60
|
+
end
|
95
61
|
|
96
|
-
class ArquivosData
|
97
62
|
private
|
98
63
|
|
99
|
-
def
|
100
|
-
|
64
|
+
def dar_feedback_para_o_usuario
|
65
|
+
puts Rainbow(nome_do_diretorio).green
|
101
66
|
end
|
102
67
|
|
103
|
-
|
104
|
-
|
105
|
-
|
68
|
+
def nome_do_diretorio
|
69
|
+
@nome_do_diretorio ||= File.basename(caminho)
|
70
|
+
end
|
106
71
|
|
107
|
-
def
|
108
|
-
(
|
72
|
+
def criar_diretorio_destino
|
73
|
+
Dir.mkdir(destino)
|
109
74
|
end
|
110
75
|
|
111
|
-
def
|
112
|
-
|
113
|
-
.map { |nome| File.join(destino_dos_arquivos_data, "#{nome}.data") }
|
114
|
-
.each { File.delete(_1) }
|
76
|
+
def criar_diretorio_dos_arquivos_xml
|
77
|
+
Dir.mkdir(destino_dos_arquivos_xml)
|
115
78
|
end
|
116
79
|
|
117
|
-
|
80
|
+
def destino_dos_arquivos_xml
|
81
|
+
@destino_dos_arquivos_xml ||= File.join(destino, 'xmls')
|
82
|
+
end
|
118
83
|
|
119
|
-
def
|
120
|
-
|
84
|
+
def descompactar_arquivos_de_origem
|
85
|
+
arquivos_de_origem.each(&:descompactar)
|
121
86
|
end
|
122
|
-
end
|
123
87
|
|
124
|
-
|
125
|
-
|
126
|
-
|
88
|
+
def arquivos_de_origem
|
89
|
+
Dir[File.join(caminho, '*.zip')]
|
90
|
+
.map { |caminho| ArquivoDeOrigem.new(caminho: caminho, destino_dos_arquivos_xml: destino_dos_arquivos_xml) }
|
127
91
|
end
|
128
92
|
|
129
|
-
def
|
130
|
-
|
131
|
-
contratos_por_matricula[matricula]
|
132
|
-
else
|
133
|
-
contratos.find { _1.recibo == recibo }
|
134
|
-
end
|
93
|
+
def criar_diretorio_dos_arquivos_data
|
94
|
+
Dir.mkdir(destino_dos_arquivos_data)
|
135
95
|
end
|
136
96
|
|
137
|
-
def
|
138
|
-
|
139
|
-
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
140
|
-
.sort_by(&:data_de_admissao)
|
97
|
+
def carregar_arquivos_xml
|
98
|
+
arquivos_xml.each(&:carregar)
|
141
99
|
end
|
142
100
|
|
143
|
-
def
|
144
|
-
|
101
|
+
def arquivos_xml
|
102
|
+
@arquivos_xml ||=
|
103
|
+
Dir[File.join(destino_dos_arquivos_xml, '*.xml')]
|
104
|
+
.map { |caminho| ArquivoXML.new(empresa: self, caminho: caminho) }
|
145
105
|
end
|
146
106
|
|
147
|
-
|
107
|
+
def classificar_arquivos_xml
|
108
|
+
Console.print 'classificando os arquivos XML...' do
|
109
|
+
arquivos_xml
|
110
|
+
.select(&:processavel?)
|
111
|
+
.partition(&:retificacao?)
|
112
|
+
.then do |de_retificacao, exceto_de_retificacao|
|
113
|
+
@arquivos_xml_por_recibo_a_retificar = de_retificacao.map { [_1.numero_do_recibo_a_retificar, _1] }.to_h
|
114
|
+
@arquivos_xml = exceto_de_retificacao
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
148
118
|
|
149
|
-
def
|
150
|
-
|
119
|
+
def ordenar_arquivos_xml
|
120
|
+
Console.print 'ordenando os arquivos XML...' do
|
121
|
+
arquivos_xml.sort_by! { [_1.momento_de_processamento_pelo_e_social, _1.nome] }
|
122
|
+
end
|
151
123
|
end
|
152
124
|
|
153
|
-
def
|
154
|
-
|
125
|
+
def processar_arquivos_xml
|
126
|
+
# otimizacao do gerenciamento de memoria
|
127
|
+
arquivos_xml.shift.processar while arquivos_xml.any?
|
155
128
|
end
|
156
129
|
|
157
|
-
class
|
130
|
+
class ArquivosData
|
158
131
|
private
|
159
132
|
|
160
|
-
def initialize(
|
161
|
-
@
|
162
|
-
@afastamento = afastamento
|
133
|
+
def initialize(destino_dos_arquivos_data)
|
134
|
+
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
163
135
|
end
|
164
136
|
|
165
|
-
attr_reader :
|
137
|
+
attr_reader :destino_dos_arquivos_data
|
166
138
|
|
167
139
|
public
|
168
140
|
|
169
|
-
|
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
|
170
150
|
|
171
|
-
|
151
|
+
private
|
172
152
|
|
173
|
-
|
153
|
+
def nomes_por_recibo
|
154
|
+
@nomes_por_recibo ||= {}
|
155
|
+
end
|
156
|
+
end
|
174
157
|
|
175
|
-
|
158
|
+
class ContratosDeEmprego
|
159
|
+
def registrar_admissao(admissao:, afastamento:)
|
160
|
+
contratos_por_matricula[admissao.matricula] = Contrato.new(admissao: admissao, afastamento: afastamento)
|
161
|
+
end
|
176
162
|
|
177
|
-
def
|
178
|
-
|
163
|
+
def [](matricula)
|
164
|
+
contratos_por_matricula[matricula]
|
179
165
|
end
|
180
166
|
|
181
|
-
def
|
182
|
-
|
183
|
-
|
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)
|
184
171
|
end
|
185
|
-
end
|
186
|
-
end
|
187
172
|
|
188
|
-
|
189
|
-
|
190
|
-
|
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
|
191
212
|
end
|
192
213
|
|
193
|
-
|
194
|
-
|
195
|
-
contratos
|
196
|
-
|
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:)
|
197
220
|
contratos
|
198
221
|
.select {
|
199
222
|
_1.cpf_do_trabalhador == cpf_do_trabalhador && _1.categoria_do_trabalhador == categoria_do_trabalhador &&
|
@@ -201,51 +224,46 @@ module Teodoro
|
|
201
224
|
}
|
202
225
|
.max_by(&:data_de_inicio)
|
203
226
|
end
|
204
|
-
end
|
205
|
-
|
206
|
-
def *(cpf_do_trabalhador:, data:)
|
207
|
-
contratos
|
208
|
-
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
209
|
-
.sort_by(&:data_de_inicio)
|
210
|
-
end
|
211
227
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
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
|
217
233
|
|
218
|
-
|
219
|
-
|
220
|
-
|
234
|
+
def remover(recibo)
|
235
|
+
contratos.delete_if { _1.recibo == recibo }
|
236
|
+
end
|
221
237
|
|
222
|
-
class Contrato
|
223
238
|
private
|
224
239
|
|
225
|
-
def
|
226
|
-
@
|
227
|
-
@afastamento = afastamento
|
240
|
+
def contratos
|
241
|
+
@contratos ||= []
|
228
242
|
end
|
229
243
|
|
230
|
-
|
244
|
+
class Contrato
|
245
|
+
private
|
231
246
|
|
232
|
-
|
247
|
+
def initialize(inicio_de_contrato:, afastamento:)
|
248
|
+
@inicio_de_contrato = inicio_de_contrato
|
249
|
+
@afastamento = afastamento
|
250
|
+
end
|
233
251
|
|
234
|
-
|
252
|
+
attr_reader :inicio_de_contrato, :data_do_termino
|
235
253
|
|
236
|
-
|
254
|
+
public
|
237
255
|
|
238
|
-
|
256
|
+
extend Forwardable
|
239
257
|
|
240
|
-
|
258
|
+
def_delegators :inicio_de_contrato, :cpf_do_trabalhador, :categoria_do_trabalhador, :data_de_inicio, :recibo
|
241
259
|
|
242
|
-
|
243
|
-
|
244
|
-
|
260
|
+
attr_accessor :afastamento
|
261
|
+
|
262
|
+
attr_writer :data_do_termino
|
245
263
|
|
246
|
-
|
247
|
-
|
248
|
-
|
264
|
+
def ativo?(data)
|
265
|
+
data_de_inicio <= data && (!data_do_termino || data_do_termino >= data)
|
266
|
+
end
|
249
267
|
end
|
250
268
|
end
|
251
269
|
end
|