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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/lib/teodoro.rb +9 -2
  3. data/lib/teodoro/arquivo_data.rb +19 -22
  4. data/lib/teodoro/arquivo_data/car.rb +34 -0
  5. data/lib/teodoro/arquivo_data/tra_epg_avi.rb +55 -0
  6. data/lib/teodoro/arquivo_de_evento.rb +6 -2
  7. data/lib/teodoro/arquivo_de_evento_de_tabela.rb +52 -19
  8. data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +6 -2
  9. data/lib/teodoro/arquivo_xml.rb +33 -6
  10. data/lib/teodoro/empresa.rb +17 -140
  11. data/lib/teodoro/empresa/arquivos_data.rb +31 -0
  12. data/lib/teodoro/empresa/cargos_gerados.rb +86 -0
  13. data/lib/teodoro/empresa/contratos_de_emprego.rb +59 -0
  14. data/lib/teodoro/empresa/contratos_de_trabalho_sem_vinculo.rb +59 -0
  15. data/lib/teodoro/leiaute/arquivo_s1000.rb +18 -8
  16. data/lib/teodoro/leiaute/arquivo_s1005.rb +5 -5
  17. data/lib/teodoro/leiaute/arquivo_s1010.rb +3 -3
  18. data/lib/teodoro/leiaute/arquivo_s1020.rb +3 -3
  19. data/lib/teodoro/leiaute/arquivo_s1030.rb +19 -23
  20. data/lib/teodoro/leiaute/arquivo_s1040.rb +3 -3
  21. data/lib/teodoro/leiaute/arquivo_s1050.rb +3 -3
  22. data/lib/teodoro/leiaute/arquivo_s1070.rb +4 -4
  23. data/lib/teodoro/leiaute/arquivo_s2190.rb +2 -2
  24. data/lib/teodoro/leiaute/arquivo_s2200.rb +173 -15
  25. data/lib/teodoro/leiaute/arquivo_s2205.rb +42 -42
  26. data/lib/teodoro/leiaute/arquivo_s2206.rb +177 -74
  27. data/lib/teodoro/leiaute/arquivo_s2230.rb +5 -5
  28. data/lib/teodoro/leiaute/arquivo_s2250.rb +14 -34
  29. data/lib/teodoro/leiaute/arquivo_s2299.rb +67 -3
  30. data/lib/teodoro/leiaute/arquivo_s2300.rb +141 -14
  31. data/lib/teodoro/leiaute/arquivo_s2306.rb +85 -6
  32. metadata +8 -3
  33. data/lib/teodoro/leiaute.rb +0 -24
@@ -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
- arquivos_de_origem.each(&:descompactar)
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
- Dir[File.join(caminho, '*.zip')]
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
- class ArquivosData
131
- private
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', [orgao_publico?, :bool]],
77
- ['ehOrgaoPublicoUniao', [orgao_publico?, :bool]],
78
- ['ehOrgaoPublicoEstadualMunicipalDistrital', [evento['infoEmpregador/*/infoCadastro/infoOP/infoEnte'], :bool]],
87
+ ['ehOrgaoPublico', orgao_publico?, :bool],
88
+ ['ehOrgaoPublicoUniao', orgao_publico?, :bool],
89
+ ['ehOrgaoPublicoEstadualMunicipalDistrital', evento['infoEmpregador/*/infoCadastro/infoOP/infoEnte'], :bool],
79
90
  ['ExibeModoCompleto'],
80
- ['InicioValidade', [inicio_da_validade, :mes_ano]],
81
- ['FimValidade', [fim_da_validade, :mes_ano]],
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