teodoro 0.45.0 → 0.46.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb1c00eaa00dea82fcbaf037fcd319e3a0c2ef3dde4f524c0d674b327198eef1
4
- data.tar.gz: 43e9a044e50b77eb72f60a3602755086b86791d19339dd89cedb163ab7ea4d90
3
+ metadata.gz: 76c8918c7124a971c158c41b7c1d0de13c09b2f155fa2b7fc42be79a7807c805
4
+ data.tar.gz: 3e47d002a6482058c13c2e6a360edfa0f30aeacc3b0798a50de857ae15ec26ca
5
5
  SHA512:
6
- metadata.gz: ded51453baf0dfacd2fcd794bea81b2213c02fa78da8b6c7ab5bacbd3e4336196b4a2cdbfed2cc01133fa0776eaf7fa2f9d06a51ce6f7f9a91137bed08d11c6e
7
- data.tar.gz: 6a20a63d7ead24231bd53a770822f9cb4ad7c817b9b631bd7242decade16aa4b66267be76f4b1e26dfcc2b343900d64bd85174358c98020049753818919d6877
6
+ metadata.gz: 47150df11fb3df6d7d2254a6cca993ff71bfaf12308fad4c98890ae8b9bd14682a4eb192b14538aee96dbc077718256fcec9edac9ba85a8708983e06c02504cb
7
+ data.tar.gz: 89b1f8e0712f195334b5fb4f074fc3b1bfc566098d59f524c26c7c0afb1c5f3ccc7168264eb43192bbc241fb83f8b37c77a2bf355b2332334549440ce79b21cb
@@ -33,13 +33,16 @@ module Teodoro
33
33
  end
34
34
 
35
35
  def conteudo_do_arquivo
36
- itens_do_conteudo
37
- .map { [_1[0], _1[1], _1.size == 1 ? :vazio : _1[2]] }
38
- .map { |chave, valor, formato| [chave, Valor.new(valor, formato: formato)] }
39
- .reject { |_chave, valor| valor.vazio? }
36
+ itens_de_conteudo_ajustados
37
+ .map { |chave, valor, formato, opcoes| [chave, Valor.new(valor, formato: formato), opcoes] }
38
+ .reject { |_chave, valor, opcoes| valor.vazio? && !opcoes[:manter_se_vazio] }
40
39
  .map { |chave, valor| "#{chave}=#{valor}" }
41
40
  end
42
41
 
42
+ def itens_de_conteudo_ajustados
43
+ itens_do_conteudo.map { [_1[0], _1[1], _1.size == 1 ? :vazio : _1[2], _1[3] || {}] }
44
+ end
45
+
43
46
  class Caminho
44
47
  private
45
48
 
@@ -11,6 +11,8 @@ require_relative 'leiaute/arquivo_s1030'
11
11
  require_relative 'leiaute/arquivo_s1040'
12
12
  require_relative 'leiaute/arquivo_s1050'
13
13
  require_relative 'leiaute/arquivo_s1070'
14
+ require_relative 'leiaute/arquivo_s1298'
15
+ require_relative 'leiaute/arquivo_s1299'
14
16
  require_relative 'leiaute/arquivo_s2190'
15
17
  require_relative 'leiaute/arquivo_s2200'
16
18
  require_relative 'leiaute/arquivo_s2205'
@@ -39,6 +41,8 @@ module Teodoro
39
41
  S1040
40
42
  S1050
41
43
  S1070
44
+ S1298
45
+ S1299
42
46
  S2190
43
47
  S2200
44
48
  S2205
@@ -0,0 +1,55 @@
1
+ module Teodoro
2
+ class Empresa
3
+ class ArquivoDeDadosGerais
4
+ def initialize(empresa:, destino:)
5
+ @empresa = empresa
6
+ @destino = destino
7
+ end
8
+
9
+ attr_reader :empresa, :destino
10
+
11
+ def gerar # rubocop:disable Metrics/MethodLength
12
+ ArquivoData.new(
13
+ diretorio: destino,
14
+ nome: 'DADOS_GERAIS',
15
+ itens_do_conteudo: [
16
+ [
17
+ 'ULTIMA_COMPETENCIA_FECHADA',
18
+ ultima_competencia_fechada,
19
+ :mes_ano,
20
+ { manter_se_vazio: true }
21
+ ],
22
+ [
23
+ 'ULTIMA_COMPETENCIA_FECHADA_DECIMO_TERCEIRO',
24
+ ultima_competencia_fechada_decimo_terceiro,
25
+ nil,
26
+ { manter_se_vazio: true }
27
+ ]
28
+ ]
29
+ ).criar
30
+ end
31
+
32
+ private
33
+
34
+ def ultima_competencia_fechada
35
+ meses_anos.max
36
+ end
37
+
38
+ def meses_anos
39
+ competencias_encerradas.grep(/^\d{4}-\d{2}$/)
40
+ end
41
+
42
+ def competencias_encerradas
43
+ empresa.competencias_encerradas
44
+ end
45
+
46
+ def ultima_competencia_fechada_decimo_terceiro
47
+ anos.max
48
+ end
49
+
50
+ def anos
51
+ competencias_encerradas.grep(/^\d{4}$/)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -16,7 +16,9 @@ module Teodoro
16
16
  trabalhadores << inicio_de_contrato.trabalhador
17
17
  end
18
18
 
19
- def [](cpf_do_trabalhador:, categoria_do_trabalhador:, data:)
19
+ def [](cpf_do_trabalhador:, matricula_do_trabalhador:, categoria_do_trabalhador:, data:)
20
+ return contratos.find { _1.matricula_do_trabalhador == matricula_do_trabalhador } if matricula_do_trabalhador
21
+
20
22
  contratos
21
23
  .select do |contrato|
22
24
  contrato.trabalhador.cpf == cpf_do_trabalhador &&
@@ -58,6 +60,7 @@ module Teodoro
58
60
 
59
61
  def_delegators :inicio_de_contrato,
60
62
  :trabalhador,
63
+ :matricula_do_trabalhador,
61
64
  :categoria_do_trabalhador,
62
65
  :data_de_inicio,
63
66
  :recibo
@@ -3,6 +3,7 @@ require_relative 'arquivo_xml'
3
3
  require_relative 'empresa/arquivos_data'
4
4
  require_relative 'empresa/arquivo_data_emp'
5
5
  require_relative 'empresa/arquivo_data_rub'
6
+ require_relative 'empresa/arquivo_de_dados_gerais'
6
7
  require_relative 'empresa/cargos_gerados'
7
8
  require_relative 'empresa/contratos_de_emprego'
8
9
  require_relative 'empresa/contratos_de_trabalho_sem_vinculo'
@@ -49,6 +50,7 @@ module Teodoro
49
50
  classificar_arquivos_xml
50
51
  ordenar_arquivos_xml
51
52
  processar_arquivos_xml
53
+ gerar_arquivo_de_dados_gerais
52
54
  processar_cargos_gerados
53
55
  processar_funcoes_geradas
54
56
  setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
@@ -63,6 +65,10 @@ module Teodoro
63
65
  @arquivos_data ||= ArquivosData.new(destino_dos_arquivos_data)
64
66
  end
65
67
 
68
+ def competencias_encerradas
69
+ @competencias_encerradas ||= []
70
+ end
71
+
66
72
  def trabalhadores
67
73
  @trabalhadores ||= Trabalhadores.new
68
74
  end
@@ -159,6 +165,14 @@ module Teodoro
159
165
  arquivos_xml.shift.processar while arquivos_xml.any?
160
166
  end
161
167
 
168
+ def gerar_arquivo_de_dados_gerais
169
+ arquivo_de_dados_gerais.gerar
170
+ end
171
+
172
+ def arquivo_de_dados_gerais
173
+ ArquivoDeDadosGerais.new(empresa: self, destino: destino_dos_arquivos_data)
174
+ end
175
+
162
176
  def processar_cargos_gerados
163
177
  cargos_gerados.each(&:processar)
164
178
  end
@@ -0,0 +1,17 @@
1
+ module Teodoro
2
+ module Leiaute
3
+ class ArquivoS1298
4
+ include ArquivoDeEvento
5
+
6
+ def processar
7
+ empresa.competencias_encerradas.delete(periodo_de_apuracao)
8
+ end
9
+
10
+ private
11
+
12
+ def periodo_de_apuracao
13
+ evento['ideEvento/perApur']
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module Teodoro
2
+ module Leiaute
3
+ class ArquivoS1299
4
+ include ArquivoDeEvento
5
+
6
+ def processar
7
+ empresa.competencias_encerradas << periodo_de_apuracao
8
+ end
9
+
10
+ private
11
+
12
+ def periodo_de_apuracao
13
+ evento['ideEvento/perApur']
14
+ end
15
+ end
16
+ end
17
+ end
@@ -276,7 +276,16 @@ module Teodoro
276
276
  ['EventoAdmissao_InfoVinculo_CodigoMotivoAfastamento', evento['vinculo/afastamento/codMotAfast']],
277
277
  ['EventoAdmissao_InfoVinculo_SucessaoVinculo_DataTransferencia', evento['vinculo/sucessaoVinc/dtTransf'], :data],
278
278
  leiaute['EventoAdmissao_InfoVinculo_SucessaoVinculo_CnpjEmpregadorAnterior'],
279
- ['EventoAdmissao_InfoVinculo_SucessaoVinculo_MatriculaAnterior', evento['vinculo/sucessaoVinc/matricAnt']]
279
+ ['EventoAdmissao_InfoVinculo_SucessaoVinculo_MatriculaAnterior', evento['vinculo/sucessaoVinc/matricAnt']],
280
+ *(
281
+ if leiaute_simplificado?
282
+ evento.*('vinculo/infoContrato/treiCap').map.with_index(1) do |treinamento_capacitacao, seq|
283
+ [
284
+ ["treiCap_#{seq}_codTreiCap", treinamento_capacitacao['codTreiCap']]
285
+ ]
286
+ end.sum([])
287
+ end
288
+ )
280
289
  # rubocop:enable Layout/LineLength
281
290
  ]
282
291
  )
@@ -192,7 +192,12 @@ module Teodoro
192
192
  ['InformacoesContrato_HorarioContratual_DescricaoTipoJornada', evento['altContratual/vinculo/infoContrato/horContratual/dscJorn']],
193
193
  ['InformacoesContrato_CodigoCargo', codigo_do_cargo],
194
194
  ['InformacoesContrato_CodigoFuncao', codigo_da_funcao],
195
- ['InformacoesContrato_DataTermino', evento['altContratual/vinculo/infoContrato/duracao/dtTerm'], :data]
195
+ ['InformacoesContrato_DataTermino', evento['altContratual/vinculo/infoContrato/duracao/dtTerm'], :data],
196
+ *evento.*('altContratual/vinculo/infoContrato/treiCap').map.with_index(1) do |treinamento_capacitacao, seq|
197
+ [
198
+ ["treiCap_#{seq}_codTreiCap", treinamento_capacitacao['codTreiCap']]
199
+ ]
200
+ end.sum([])
196
201
  # rubocop:enable Layout/LineLength
197
202
  ]
198
203
  end
@@ -83,6 +83,7 @@ module Teodoro
83
83
  def contrato_de_trabalho_sem_vinculo
84
84
  @contrato_de_trabalho_sem_vinculo ||= contratos_de_trabalho_sem_vinculo[
85
85
  cpf_do_trabalhador: cpf_do_trabalhador,
86
+ matricula_do_trabalhador: matricula_do_trabalhador,
86
87
  categoria_do_trabalhador: categoria_do_trabalhador,
87
88
  data: inicio_do_afastamento? ? data_de_inicio_do_afastamento : data_de_termino_do_afastamento
88
89
  ]
@@ -25,6 +25,7 @@ module Teodoro
25
25
  def inicio_de_contrato
26
26
  @inicio_de_contrato ||= Obj.new(
27
27
  trabalhador: trabalhador,
28
+ matricula_do_trabalhador: evento['infoTSVInicio/matricula'],
28
29
  categoria_do_trabalhador: evento['infoTSVInicio/codCateg'],
29
30
  data_de_inicio: evento['infoTSVInicio/dtInicio'],
30
31
  matricula: evento['infoTSVInicio/matricula'],
@@ -1,6 +1,6 @@
1
1
  module Teodoro
2
2
  module Leiaute
3
- class ArquivoS2306
3
+ class ArquivoS2306 # rubocop:disable Metrics/ClassLength
4
4
  include ArquivoDeEventoNaoPeriodico
5
5
 
6
6
  private
@@ -17,6 +17,7 @@ module Teodoro
17
17
  itens_do_conteudo: [
18
18
  # rubocop:disable Layout/LineLength
19
19
  ['ESX_CPF', cpf_do_trabalhador],
20
+ ['matricula', matricula_do_trabalhador],
20
21
  ['ESX_CATEGORIA', categoria_do_trabalhador],
21
22
  %w[ESX_SEMVINCULO 1],
22
23
  ['ESX_DATAADMISSAO', data_de_inicio, :data],
@@ -69,8 +70,17 @@ module Teodoro
69
70
  @cpf_do_trabalhador ||= evento['ideTrabSemVinculo/cpfTrab']
70
71
  end
71
72
 
73
+ def matricula_do_trabalhador
74
+ @matricula_do_trabalhador ||= evento['ideTrabSemVinculo/matricula']
75
+ end
76
+
72
77
  def categoria_do_trabalhador
73
- @categoria_do_trabalhador ||= evento['ideTrabSemVinculo/codCateg']
78
+ @categoria_do_trabalhador ||=
79
+ if matricula_do_trabalhador
80
+ contrato_de_trabalho.categoria_do_trabalhador
81
+ else
82
+ evento['ideTrabSemVinculo/codCateg']
83
+ end
74
84
  end
75
85
 
76
86
  def data_de_inicio
@@ -80,7 +90,8 @@ module Teodoro
80
90
  def contrato_de_trabalho
81
91
  contratos_de_trabalho_sem_vinculo[
82
92
  cpf_do_trabalhador: cpf_do_trabalhador,
83
- categoria_do_trabalhador: categoria_do_trabalhador,
93
+ matricula_do_trabalhador: matricula_do_trabalhador,
94
+ categoria_do_trabalhador: (categoria_do_trabalhador unless matricula_do_trabalhador),
84
95
  data: data_da_alteracao
85
96
  ]
86
97
  end
@@ -1,6 +1,6 @@
1
1
  module Teodoro
2
2
  module Leiaute
3
- class ArquivoS2399
3
+ class ArquivoS2399 # rubocop:disable Metrics/ClassLength
4
4
  include ArquivoDeEventoNaoPeriodico
5
5
 
6
6
  private
@@ -18,7 +18,8 @@ module Teodoro
18
18
  def contrato_de_trabalho
19
19
  @contrato_de_trabalho ||= contratos_de_trabalho_sem_vinculo[
20
20
  cpf_do_trabalhador: cpf_do_trabalhador,
21
- categoria_do_trabalhador: categoria_do_trabalhador,
21
+ matricula_do_trabalhador: matricula_do_trabalhador,
22
+ categoria_do_trabalhador: (categoria_do_trabalhador unless matricula_do_trabalhador),
22
23
  data: data_do_termino
23
24
  ]
24
25
  end
@@ -31,12 +32,21 @@ module Teodoro
31
32
  @data_do_termino ||= evento['infoTSVTermino/dtTerm']
32
33
  end
33
34
 
35
+ def matricula_do_trabalhador
36
+ @matricula_do_trabalhador ||= evento['ideTrabSemVinculo/matricula']
37
+ end
38
+
34
39
  def cpf_do_trabalhador
35
40
  @cpf_do_trabalhador ||= evento['ideTrabSemVinculo/cpfTrab']
36
41
  end
37
42
 
38
43
  def categoria_do_trabalhador
39
- @categoria_do_trabalhador ||= evento['ideTrabSemVinculo/codCateg']
44
+ @categoria_do_trabalhador ||=
45
+ if matricula_do_trabalhador
46
+ contrato_de_trabalho.categoria_do_trabalhador
47
+ else
48
+ evento['ideTrabSemVinculo/codCateg']
49
+ end
40
50
  end
41
51
 
42
52
  def dados_dos_arquivos_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
@@ -46,6 +56,7 @@ module Teodoro
46
56
  itens_do_conteudo: [
47
57
  # rubocop:disable Layout/LineLength
48
58
  ['ESX_CPF', cpf_do_trabalhador],
59
+ ['matricula', matricula_do_trabalhador],
49
60
  ['ESX_CATEGORIA', categoria_do_trabalhador],
50
61
  %w[ESX_SEMVINCULO 1],
51
62
  ['ESX_DATAADMISSAO', data_de_inicio],
@@ -1,3 +1,3 @@
1
1
  module Teodoro
2
- VERSION = '0.45.0'.freeze
2
+ VERSION = '0.46.0'.freeze
3
3
  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.45.0
4
+ version: 0.46.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fortes Tecnologia
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-13 00:00:00.000000000 Z
11
+ date: 2022-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -203,6 +203,7 @@ files:
203
203
  - lib/teodoro/empresa.rb
204
204
  - lib/teodoro/empresa/arquivo_data_emp.rb
205
205
  - lib/teodoro/empresa/arquivo_data_rub.rb
206
+ - lib/teodoro/empresa/arquivo_de_dados_gerais.rb
206
207
  - lib/teodoro/empresa/arquivos_data.rb
207
208
  - lib/teodoro/empresa/cargos_gerados.rb
208
209
  - lib/teodoro/empresa/contratos_de_emprego.rb
@@ -217,6 +218,8 @@ files:
217
218
  - lib/teodoro/leiaute/arquivo_s1040.rb
218
219
  - lib/teodoro/leiaute/arquivo_s1050.rb
219
220
  - lib/teodoro/leiaute/arquivo_s1070.rb
221
+ - lib/teodoro/leiaute/arquivo_s1298.rb
222
+ - lib/teodoro/leiaute/arquivo_s1299.rb
220
223
  - lib/teodoro/leiaute/arquivo_s2190.rb
221
224
  - lib/teodoro/leiaute/arquivo_s2200.rb
222
225
  - lib/teodoro/leiaute/arquivo_s2205.rb