teodoro 0.0.13 → 0.3.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/teodoro.rb +11 -5
- data/lib/teodoro/arquivo_de_evento.rb +13 -18
- data/lib/teodoro/{arquivo_de_evento_exceto_de_exclusao.rb → arquivo_de_evento_criador_de_arquivo_data.rb} +2 -6
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +1 -1
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +9 -33
- data/lib/teodoro/arquivo_de_evento_processador_de_arquivo_data.rb +30 -0
- data/lib/teodoro/arquivo_de_evento_retificavel.rb +23 -0
- data/lib/teodoro/arquivo_xml.rb +7 -2
- data/lib/teodoro/empresa.rb +127 -10
- data/lib/teodoro/leiaute/arquivo_s1000.rb +4 -6
- data/lib/teodoro/leiaute/arquivo_s1005.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1010.rb +1 -3
- data/lib/teodoro/leiaute/arquivo_s1020.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1030.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1040.rb +1 -3
- data/lib/teodoro/leiaute/arquivo_s1050.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1070.rb +1 -3
- data/lib/teodoro/leiaute/arquivo_s2200.rb +16 -7
- data/lib/teodoro/leiaute/arquivo_s2205.rb +241 -134
- data/lib/teodoro/leiaute/arquivo_s2206.rb +8 -8
- data/lib/teodoro/leiaute/arquivo_s2230.rb +55 -11
- data/lib/teodoro/leiaute/arquivo_s2250.rb +6 -6
- data/lib/teodoro/leiaute/arquivo_s2299.rb +30 -15
- data/lib/teodoro/leiaute/arquivo_s2300.rb +16 -9
- data/lib/teodoro/leiaute/arquivo_s2306.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s2399.rb +29 -19
- data/lib/teodoro/leiaute/arquivo_s3000.rb +8 -14
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2e6c7d2702336deb603b6bf1af61cfcb1cb3dc0c7e51c4d3fc7aa9af64dcebc6
|
4
|
+
data.tar.gz: 6168b994e77d309e4851373489f17b9e552f18a7d00f13cecd7a075be6c481d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 753c9e372d0186e738cd617cbe541c21f969d11c90f6f9e5b01af5369e430d361d9f1aba9204809a2cebd35bd00c6b711a5652930fc995f1090da9d132f29202
|
7
|
+
data.tar.gz: 4033bae8e9b865508a384958a42c5c5f5331c9c694b9460b7ad211b88a2560c587fafb3a55dfa8c3cb93f427bae6473b8322f9402bcc4dc60ef1f6a958d27679
|
data/lib/teodoro.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'nokogiri'
|
2
2
|
require 'os'
|
3
|
+
require 'rainbow'
|
3
4
|
require 'zip'
|
4
5
|
|
5
6
|
require_relative 'teodoro/console'
|
@@ -27,6 +28,7 @@ module Teodoro
|
|
27
28
|
def call
|
28
29
|
validar_argumentos
|
29
30
|
validar_existencia_do_diretorio_de_origem
|
31
|
+
validar_existencia_do_diretorio_de_destino
|
30
32
|
validar_que_diretorio_de_origem_nao_esta_vazio
|
31
33
|
validar_que_diretorio_de_destino_esta_vazio
|
32
34
|
|
@@ -44,7 +46,15 @@ module Teodoro
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def origem
|
47
|
-
@origem ||= args[0]
|
49
|
+
@origem ||= args[0].tr('\\', '/')
|
50
|
+
end
|
51
|
+
|
52
|
+
def validar_existencia_do_diretorio_de_destino
|
53
|
+
erro 'Diretório de destino não existe.' unless File.directory?(destino)
|
54
|
+
end
|
55
|
+
|
56
|
+
def destino
|
57
|
+
@destino ||= args[1].tr('\\', '/')
|
48
58
|
end
|
49
59
|
|
50
60
|
def validar_que_diretorio_de_origem_nao_esta_vazio
|
@@ -55,10 +65,6 @@ module Teodoro
|
|
55
65
|
erro 'Diretório de destino deve estar vazio.' unless Dir.empty?(destino)
|
56
66
|
end
|
57
67
|
|
58
|
-
def destino
|
59
|
-
@destino ||= args[1]
|
60
|
-
end
|
61
|
-
|
62
68
|
def erro(erro)
|
63
69
|
puts erro
|
64
70
|
exit
|
@@ -2,36 +2,31 @@ module Teodoro
|
|
2
2
|
module ArquivoDeEvento
|
3
3
|
private
|
4
4
|
|
5
|
-
def initialize(empresa:,
|
5
|
+
def initialize(empresa:, arquivo_xml:)
|
6
6
|
@empresa = empresa
|
7
|
-
@
|
8
|
-
@evento = evento
|
9
|
-
@recibo = recibo
|
7
|
+
@arquivo_xml = arquivo_xml
|
10
8
|
end
|
11
9
|
|
12
|
-
attr_reader :empresa, :
|
10
|
+
attr_reader :empresa, :arquivo_xml
|
13
11
|
|
14
|
-
def
|
15
|
-
versao_do_leiaute
|
12
|
+
def versao_do_leiaute
|
13
|
+
arquivo_xml.versao_do_leiaute
|
16
14
|
end
|
17
15
|
|
18
|
-
def
|
19
|
-
evento
|
16
|
+
def evento
|
17
|
+
arquivo_xml.evento
|
20
18
|
end
|
21
19
|
|
22
|
-
def
|
23
|
-
|
24
|
-
destino_dos_arquivos_data,
|
25
|
-
"#{windows? ? nome_do_arquivo.gsub(%r{[<|>:"/\\?*]}, '_') : nome_do_arquivo}.data"
|
26
|
-
)
|
20
|
+
def recibo
|
21
|
+
arquivo_xml.recibo
|
27
22
|
end
|
28
23
|
|
29
|
-
def
|
30
|
-
|
24
|
+
def versao_do_aplicativo_de_processamento_do_evento
|
25
|
+
@versao_do_aplicativo_de_processamento_do_evento ||= recibo['retornoEvento/processamento/versaoAppProcessamento']
|
31
26
|
end
|
32
27
|
|
33
|
-
def
|
34
|
-
|
28
|
+
def numero_do_recibo
|
29
|
+
@numero_do_recibo ||= recibo['retornoEvento/recibo/nrRecibo']
|
35
30
|
end
|
36
31
|
end
|
37
32
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Teodoro
|
2
|
-
module
|
3
|
-
include
|
2
|
+
module ArquivoDeEventoCriadorDeArquivoData
|
3
|
+
include ArquivoDeEventoProcessadorDeArquivoData
|
4
4
|
|
5
5
|
private
|
6
6
|
|
@@ -14,10 +14,6 @@ module Teodoro
|
|
14
14
|
(itens_do_conteudo_do_arquivo_data.map { "#{_1}=#{_2}" } + ['']).join("\n")
|
15
15
|
end
|
16
16
|
|
17
|
-
def versao_do_aplicativo_de_processamento_do_evento
|
18
|
-
recibo['retornoEvento/processamento/versaoAppProcessamento']
|
19
|
-
end
|
20
|
-
|
21
17
|
def tipo_de_inscricao_do_empregador
|
22
18
|
@tipo_de_inscricao_do_empregador ||= evento["#{noh_principal_do_evento}/ideEmpregador/tpInsc"]
|
23
19
|
end
|
@@ -1,45 +1,21 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module ArquivoDeEventoNaoPeriodico
|
3
|
-
include
|
3
|
+
include ArquivoDeEventoCriadorDeArquivoData
|
4
|
+
include ArquivoDeEventoRetificavel
|
4
5
|
|
5
6
|
def processar
|
6
|
-
|
7
|
-
|
7
|
+
deletar_arquivos_data_originais if retificacao?
|
8
|
+
registrar_arquivo_data
|
8
9
|
criar_arquivo_data
|
9
10
|
end
|
10
11
|
|
11
12
|
private
|
12
13
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
File.delete(caminho_do_arquivo_data_original)
|
19
|
-
end
|
20
|
-
|
21
|
-
def caminho_do_arquivo_data_original
|
22
|
-
criar_caminho_do_arquivo_data(nome_do_arquivo_original)
|
23
|
-
end
|
24
|
-
|
25
|
-
def nome_do_arquivo_original
|
26
|
-
de_recibo_para_nome_do_arquivo_data[numero_do_recibo_a_retificar]
|
27
|
-
end
|
28
|
-
|
29
|
-
def de_recibo_para_nome_do_arquivo_data
|
30
|
-
empresa.de_recibo_para_nome_do_arquivo_data
|
31
|
-
end
|
32
|
-
|
33
|
-
def numero_do_recibo_a_retificar
|
34
|
-
evento["#{noh_principal_do_evento}/ideEvento/nrRecibo"]
|
35
|
-
end
|
36
|
-
|
37
|
-
def registrar_recibo
|
38
|
-
de_recibo_para_nome_do_arquivo_data[numero_do_recibo] = nome_do_arquivo_data
|
39
|
-
end
|
40
|
-
|
41
|
-
def numero_do_recibo
|
42
|
-
recibo['retornoEvento/recibo/nrRecibo']
|
14
|
+
def registrar_arquivo_data
|
15
|
+
arquivos_data.registrar(
|
16
|
+
nome: nome_do_arquivo_data,
|
17
|
+
recibo: numero_do_recibo
|
18
|
+
)
|
43
19
|
end
|
44
20
|
|
45
21
|
def caminho_do_arquivo_data
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Teodoro
|
2
|
+
module ArquivoDeEventoProcessadorDeArquivoData
|
3
|
+
include ArquivoDeEvento
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def leiaute_simplificado?
|
8
|
+
versao_do_leiaute.start_with?('_S_')
|
9
|
+
end
|
10
|
+
|
11
|
+
def processo_de_emissao_do_evento
|
12
|
+
evento["#{noh_principal_do_evento}/ideEvento/procEmi"]
|
13
|
+
end
|
14
|
+
|
15
|
+
def criar_caminho_do_arquivo_data(nome_do_arquivo)
|
16
|
+
File.join(
|
17
|
+
destino_dos_arquivos_data,
|
18
|
+
"#{windows? ? nome_do_arquivo.gsub(%r{[<|>:"/\\?*]}, '_') : nome_do_arquivo}.data"
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def destino_dos_arquivos_data
|
23
|
+
empresa.destino_dos_arquivos_data
|
24
|
+
end
|
25
|
+
|
26
|
+
def windows?
|
27
|
+
OS.windows?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Teodoro
|
2
|
+
module ArquivoDeEventoRetificavel
|
3
|
+
include ArquivoDeEvento
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def retificacao?
|
8
|
+
@retificacao ||= evento["#{noh_principal_do_evento}/ideEvento/indRetif"] == '2'
|
9
|
+
end
|
10
|
+
|
11
|
+
def deletar_arquivos_data_originais
|
12
|
+
arquivos_data.excluir(numero_do_recibo_a_retificar)
|
13
|
+
end
|
14
|
+
|
15
|
+
def arquivos_data
|
16
|
+
empresa.arquivos_data
|
17
|
+
end
|
18
|
+
|
19
|
+
def numero_do_recibo_a_retificar
|
20
|
+
@numero_do_recibo_a_retificar ||= evento["#{noh_principal_do_evento}/ideEvento/nrRecibo"]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/teodoro/arquivo_xml.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require_relative 'arquivo_de_evento'
|
2
|
-
require_relative '
|
2
|
+
require_relative 'arquivo_de_evento_processador_de_arquivo_data'
|
3
|
+
require_relative 'arquivo_de_evento_criador_de_arquivo_data'
|
4
|
+
require_relative 'arquivo_de_evento_retificavel'
|
3
5
|
require_relative 'arquivo_de_evento_de_tabela'
|
4
6
|
require_relative 'arquivo_de_evento_nao_periodico'
|
5
7
|
require_relative 'cnpj'
|
@@ -106,7 +108,10 @@ module Teodoro
|
|
106
108
|
end
|
107
109
|
|
108
110
|
def arquivo
|
109
|
-
classe_do_arquivo.new(
|
111
|
+
classe_do_arquivo.new(
|
112
|
+
empresa: empresa,
|
113
|
+
arquivo_xml: Obj.new(versao_do_leiaute: versao_do_leiaute, evento: evento, recibo: recibo)
|
114
|
+
)
|
110
115
|
end
|
111
116
|
|
112
117
|
def classe_do_arquivo
|
data/lib/teodoro/empresa.rb
CHANGED
@@ -28,7 +28,7 @@ module Teodoro
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def dar_feedback_para_o_usuario
|
31
|
-
puts
|
31
|
+
puts Rainbow(nome_do_diretorio).green
|
32
32
|
end
|
33
33
|
|
34
34
|
def nome_do_diretorio
|
@@ -83,9 +83,9 @@ module Teodoro
|
|
83
83
|
def empresa
|
84
84
|
@empresa ||= Obj.new(
|
85
85
|
destino_dos_arquivos_data: destino_dos_arquivos_data,
|
86
|
-
|
87
|
-
|
88
|
-
|
86
|
+
arquivos_data: ArquivosData.new(destino_dos_arquivos_data),
|
87
|
+
contratos_de_emprego: ContratosDeEmprego.new,
|
88
|
+
contratos_de_trabalho_sem_vinculo: ContratosDeTrabalhoSemVinculo.new
|
89
89
|
)
|
90
90
|
end
|
91
91
|
|
@@ -93,19 +93,113 @@ module Teodoro
|
|
93
93
|
Console.print
|
94
94
|
end
|
95
95
|
|
96
|
-
class
|
97
|
-
|
98
|
-
|
96
|
+
class ArquivosData
|
97
|
+
private
|
98
|
+
|
99
|
+
def initialize(destino_dos_arquivos_data)
|
100
|
+
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
101
|
+
end
|
102
|
+
|
103
|
+
attr_reader :destino_dos_arquivos_data
|
104
|
+
|
105
|
+
public
|
106
|
+
|
107
|
+
def registrar(recibo:, nome:)
|
108
|
+
(nomes_por_recibo[recibo] ||= []) << nome
|
109
|
+
end
|
110
|
+
|
111
|
+
def excluir(recibo)
|
112
|
+
(nomes_por_recibo.delete(recibo) || [])
|
113
|
+
.map { |nome| File.join(destino_dos_arquivos_data, "#{nome}.data") }
|
114
|
+
.each { File.delete(_1) }
|
115
|
+
end
|
116
|
+
|
117
|
+
private
|
118
|
+
|
119
|
+
def nomes_por_recibo
|
120
|
+
@nomes_por_recibo ||= {}
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
class ContratosDeEmprego
|
125
|
+
def registrar_admissao(admissao)
|
126
|
+
Contrato.new(**admissao).then do
|
127
|
+
contratos_por_matricula[_1.matricula] = _1
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def [](matricula)
|
132
|
+
contratos_por_matricula[matricula]
|
133
|
+
end
|
134
|
+
|
135
|
+
def *(cpf_do_trabalhador:, data:)
|
136
|
+
contratos
|
137
|
+
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
138
|
+
.sort_by(&:data_de_admissao)
|
139
|
+
end
|
140
|
+
|
141
|
+
def remover(recibo)
|
142
|
+
contratos_por_matricula.delete_if { _2.recibo == recibo }
|
143
|
+
end
|
144
|
+
|
145
|
+
private
|
146
|
+
|
147
|
+
def contratos_por_matricula
|
148
|
+
@contratos_por_matricula ||= {}
|
149
|
+
end
|
150
|
+
|
151
|
+
def contratos
|
152
|
+
contratos_por_matricula.values
|
153
|
+
end
|
154
|
+
|
155
|
+
class Contrato
|
156
|
+
private
|
157
|
+
|
158
|
+
def initialize(matricula:, data_de_admissao:, categoria_do_trabalhador:, cpf_do_trabalhador:, recibo:)
|
159
|
+
@matricula = matricula
|
160
|
+
@data_de_admissao = data_de_admissao
|
161
|
+
@categoria_do_trabalhador = categoria_do_trabalhador
|
162
|
+
@cpf_do_trabalhador = cpf_do_trabalhador
|
163
|
+
@recibo = recibo
|
164
|
+
end
|
165
|
+
|
166
|
+
attr_reader :data_de_desligamento
|
167
|
+
|
168
|
+
public
|
169
|
+
|
170
|
+
attr_reader :matricula, :data_de_admissao, :categoria_do_trabalhador, :cpf_do_trabalhador, :recibo
|
171
|
+
|
172
|
+
attr_writer :data_de_desligamento
|
173
|
+
|
174
|
+
def ativo?(data)
|
175
|
+
data_de_admissao <= data && (!data_de_desligamento || data_de_desligamento >= data)
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
class ContratosDeTrabalhoSemVinculo
|
181
|
+
def registrar_inicio_de_contrato(inicio_de_contrato)
|
182
|
+
contratos << Contrato.new(**inicio_de_contrato)
|
99
183
|
end
|
100
184
|
|
101
185
|
def [](cpf_do_trabalhador:, categoria_do_trabalhador:, data:)
|
102
186
|
contratos
|
103
187
|
.select {
|
104
|
-
|
188
|
+
_1.cpf_do_trabalhador == cpf_do_trabalhador &&
|
189
|
+
_1.categoria_do_trabalhador == categoria_do_trabalhador &&
|
190
|
+
_1.ativo?(data)
|
105
191
|
}
|
192
|
+
.max_by(&:data_de_inicio)
|
193
|
+
end
|
194
|
+
|
195
|
+
def *(cpf_do_trabalhador:, data:)
|
196
|
+
contratos
|
197
|
+
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
106
198
|
.sort_by(&:data_de_inicio)
|
107
|
-
|
108
|
-
|
199
|
+
end
|
200
|
+
|
201
|
+
def remover(recibo)
|
202
|
+
contratos.delete_if { _1.recibo == recibo }
|
109
203
|
end
|
110
204
|
|
111
205
|
private
|
@@ -113,6 +207,29 @@ module Teodoro
|
|
113
207
|
def contratos
|
114
208
|
@contratos ||= []
|
115
209
|
end
|
210
|
+
|
211
|
+
class Contrato
|
212
|
+
private
|
213
|
+
|
214
|
+
def initialize(cpf_do_trabalhador:, categoria_do_trabalhador:, data_de_inicio:, recibo:)
|
215
|
+
@cpf_do_trabalhador = cpf_do_trabalhador
|
216
|
+
@categoria_do_trabalhador = categoria_do_trabalhador
|
217
|
+
@data_de_inicio = data_de_inicio
|
218
|
+
@recibo = recibo
|
219
|
+
end
|
220
|
+
|
221
|
+
attr_reader :data_do_termino
|
222
|
+
|
223
|
+
public
|
224
|
+
|
225
|
+
attr_reader :cpf_do_trabalhador, :categoria_do_trabalhador, :data_de_inicio, :recibo
|
226
|
+
|
227
|
+
attr_writer :data_do_termino
|
228
|
+
|
229
|
+
def ativo?(data)
|
230
|
+
data_de_inicio <= data && (!data_do_termino || data_do_termino >= data)
|
231
|
+
end
|
232
|
+
end
|
116
233
|
end
|
117
234
|
end
|
118
235
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
|
-
# rubocop:disable Metrics/ClassLength
|
4
|
-
class ArquivoS1000
|
3
|
+
class ArquivoS1000 # rubocop:disable Metrics/ClassLength
|
5
4
|
include ArquivoDeEventoDeTabela
|
6
5
|
|
7
6
|
private
|
@@ -64,9 +63,9 @@ module Teodoro
|
|
64
63
|
'idePeriodo'
|
65
64
|
end
|
66
65
|
|
67
|
-
# rubocop:disable
|
68
|
-
def itens_do_conteudo_do_arquivo_data
|
66
|
+
def itens_do_conteudo_do_arquivo_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
69
67
|
[
|
68
|
+
# rubocop:disable Layout/LineLength
|
70
69
|
['TipoInscricaoEmpregador', tipo_de_inscricao],
|
71
70
|
['FapBdContrib'],
|
72
71
|
['AlteracaoEmPeriodoExistente'],
|
@@ -150,14 +149,13 @@ module Teodoro
|
|
150
149
|
["ListaSoftHouses_#{seq}_Email", software_house['email']]
|
151
150
|
]
|
152
151
|
end.sum([])
|
152
|
+
# rubocop:enable Layout/LineLength
|
153
153
|
]
|
154
154
|
end
|
155
|
-
# rubocop:enable Layout/LineLength, Metrics/MethodLength, Metrics/AbcSize
|
156
155
|
|
157
156
|
def softwares_house
|
158
157
|
evento.*('evtInfoEmpregador/infoEmpregador/*/infoCadastro/softwareHouse')
|
159
158
|
end
|
160
159
|
end
|
161
|
-
# rubocop:enable Metrics/ClassLength
|
162
160
|
end
|
163
161
|
end
|