teodoro 0.44.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: 57bfde1e7f33334a64feff39ebbd52cde3eafd386532f24db12bbf6c1890d7ac
4
- data.tar.gz: a073b05729729534d9b62ae95585cdf98bae62e2d799fdedc394345ab1ee6712
3
+ metadata.gz: 76c8918c7124a971c158c41b7c1d0de13c09b2f155fa2b7fc42be79a7807c805
4
+ data.tar.gz: 3e47d002a6482058c13c2e6a360edfa0f30aeacc3b0798a50de857ae15ec26ca
5
5
  SHA512:
6
- metadata.gz: b76f64f1c587ef6c0b0b793326233770a6dd99d0e4fec500002e3e145a3751ed2c89fa5ecda792a8cc5210c082438e55110ff7631bf00b2d0ad3da209a5c7786
7
- data.tar.gz: b52c3f7fddb2597c684f9264527c6839b8a9804978cd8e97c3d58e6dc49ddf129943191bca3305e8bdb05da2a88b53e29dc50a3ca9428ca07168873cde284f3a
6
+ metadata.gz: 47150df11fb3df6d7d2254a6cca993ff71bfaf12308fad4c98890ae8b9bd14682a4eb192b14538aee96dbc077718256fcec9edac9ba85a8708983e06c02504cb
7
+ data.tar.gz: 89b1f8e0712f195334b5fb4f074fc3b1bfc566098d59f524c26c7c0afb1c5f3ccc7168264eb43192bbc241fb83f8b37c77a2bf355b2332334549440ce79b21cb
@@ -21,8 +21,8 @@ module Teodoro
21
21
  def criar
22
22
  raise 'evento duplicado' if File.exist?(caminho)
23
23
 
24
- File.open(caminho, 'w') do
25
- _1.puts(conteudo_do_arquivo)
24
+ File.open(caminho, 'w') do |file|
25
+ file.puts(conteudo_do_arquivo)
26
26
  end
27
27
  end
28
28
 
@@ -33,11 +33,14 @@ 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 { _2.vazio? }
40
- .map { "#{_1}=#{_2}" }
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] }
39
+ .map { |chave, valor| "#{chave}=#{valor}" }
40
+ end
41
+
42
+ def itens_de_conteudo_ajustados
43
+ itens_do_conteudo.map { [_1[0], _1[1], _1.size == 1 ? :vazio : _1[2], _1[3] || {}] }
41
44
  end
42
45
 
43
46
  class Caminho
@@ -37,6 +37,10 @@ module Teodoro
37
37
  @tipo_de_inscricao_do_empregador ||= evento['ideEmpregador/tpInsc']
38
38
  end
39
39
 
40
+ def numero_de_inscricao_do_empregador
41
+ @numero_de_inscricao_do_empregador ||= evento['ideEmpregador/nrInsc']
42
+ end
43
+
40
44
  def numero_do_recibo
41
45
  @numero_do_recibo ||= recibo['recibo/nrRecibo']
42
46
  end
@@ -30,9 +30,9 @@ module Teodoro
30
30
  end
31
31
 
32
32
  def registrar_arquivos_data
33
- arquivos_data.each do
33
+ arquivos_data.each do |arquivo_data|
34
34
  empresa.arquivos_data.registrar(
35
- nome: _1.nome,
35
+ nome: arquivo_data.nome,
36
36
  recibo: numero_do_recibo
37
37
  )
38
38
  end
@@ -43,13 +43,13 @@ module Teodoro
43
43
  end
44
44
 
45
45
  def arquivos_data
46
- @arquivos_data ||= dados_dos_arquivos_data.map {
46
+ @arquivos_data ||= dados_dos_arquivos_data.map do |dados_do_arquivo_data|
47
47
  ArquivoData.new(
48
48
  diretorio: empresa.destino_dos_arquivos_data,
49
- nome: _1.nome,
50
- itens_do_conteudo: _1.itens_do_conteudo
49
+ nome: dados_do_arquivo_data.nome,
50
+ itens_do_conteudo: dados_do_arquivo_data.itens_do_conteudo
51
51
  )
52
- }
52
+ end
53
53
  end
54
54
  end
55
55
  end
@@ -28,9 +28,9 @@ module Teodoro
28
28
  private
29
29
 
30
30
  def extrair(entrada)
31
- File.join(destino_dos_arquivos_xml, entrada.name).then do
32
- entrada.extract(_1) unless File.exist?(_1)
33
- end
31
+ File
32
+ .join(destino_dos_arquivos_xml, entrada.name)
33
+ .then { entrada.extract(_1) unless File.exist?(_1) }
34
34
  end
35
35
  end
36
36
  end
@@ -11,11 +11,16 @@ 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'
17
19
  require_relative 'leiaute/arquivo_s2206'
20
+ require_relative 'leiaute/arquivo_s2210'
21
+ require_relative 'leiaute/arquivo_s2220'
18
22
  require_relative 'leiaute/arquivo_s2230'
23
+ require_relative 'leiaute/arquivo_s2240'
19
24
  require_relative 'leiaute/arquivo_s2250'
20
25
  require_relative 'leiaute/arquivo_s2299'
21
26
  require_relative 'leiaute/arquivo_s2300'
@@ -36,11 +41,16 @@ module Teodoro
36
41
  S1040
37
42
  S1050
38
43
  S1070
44
+ S1298
45
+ S1299
39
46
  S2190
40
47
  S2200
41
48
  S2205
42
49
  S2206
50
+ S2210
51
+ S2220
43
52
  S2230
53
+ S2240
44
54
  S2250
45
55
  S2299
46
56
  S2300
@@ -54,7 +64,10 @@ module Teodoro
54
64
  S2200
55
65
  S2205
56
66
  S2206
67
+ S2210
68
+ S2220
57
69
  S2230
70
+ S2240
58
71
  S2250
59
72
  S2299
60
73
  S2300
@@ -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
@@ -33,7 +33,7 @@ module Teodoro
33
33
  end
34
34
 
35
35
  def remover(recibo)
36
- contratos_por_matricula.delete_if { _2.recibo == recibo }
36
+ contratos_por_matricula.delete_if { |_matricula, contratos| contratos.recibo == recibo }
37
37
  end
38
38
 
39
39
  private
@@ -16,12 +16,15 @@ 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
- .select {
22
- _1.trabalhador.cpf == cpf_do_trabalhador && _1.categoria_do_trabalhador == categoria_do_trabalhador &&
23
- _1.ativo?(data)
24
- }
23
+ .select do |contrato|
24
+ contrato.trabalhador.cpf == cpf_do_trabalhador &&
25
+ contrato.categoria_do_trabalhador == categoria_do_trabalhador &&
26
+ contrato.ativo?(data)
27
+ end
25
28
  .max_by(&:data_de_inicio)
26
29
  end
27
30
 
@@ -57,6 +60,7 @@ module Teodoro
57
60
 
58
61
  def_delegators :inicio_de_contrato,
59
62
  :trabalhador,
63
+ :matricula_do_trabalhador,
60
64
  :categoria_do_trabalhador,
61
65
  :data_de_inicio,
62
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
@@ -173,10 +187,12 @@ module Teodoro
173
187
 
174
188
  def arquivos_data_emp
175
189
  Dir[File.join(destino_dos_arquivos_data, 'EMP*.data')]
176
- .map { ArquivoDataEMP.new(
177
- caminho: _1,
178
- proximo_identificador_de_tabela_de_rubricas: proximo_identificador_de_tabela_de_rubricas
179
- ) }
190
+ .map do |caminho|
191
+ ArquivoDataEMP.new(
192
+ caminho: caminho,
193
+ proximo_identificador_de_tabela_de_rubricas: proximo_identificador_de_tabela_de_rubricas
194
+ )
195
+ end
180
196
  end
181
197
 
182
198
  def proximo_identificador_de_tabela_de_rubricas
@@ -208,7 +224,7 @@ module Teodoro
208
224
  end
209
225
 
210
226
  def caminhos_dos_arquivos_emp_data
211
- Dir[File.join(destino_dos_arquivos_data, 'EMP*.data')]
227
+ Dir[File.join(destino_dos_arquivos_data, 'EMP*.data')].sort
212
228
  end
213
229
 
214
230
  def novo_caminho_do_ultimo_arquivo_emp_data
@@ -60,7 +60,7 @@ module Teodoro
60
60
  end
61
61
 
62
62
  def numero_de_inscricao
63
- @numero_de_inscricao ||= evento['ideEmpregador/nrInsc']
63
+ numero_de_inscricao_do_empregador
64
64
  end
65
65
 
66
66
  def cnpj_raiz
@@ -52,13 +52,15 @@ module Teodoro
52
52
  [
53
53
  [
54
54
  'DadosRubrica_CodigoIncidenciaIR',
55
- evento['infoRubrica/*/dadosRubrica/codIncIRRF'].then { {
56
- '0' => '00',
57
- '1' => '01',
58
- '9' => '09',
59
- '700' => '79',
60
- '701' => '79'
61
- }[_1] || _1 }
55
+ evento['infoRubrica/*/dadosRubrica/codIncIRRF'].then do |valor|
56
+ {
57
+ '0' => '00',
58
+ '1' => '01',
59
+ '9' => '09',
60
+ '700' => '79',
61
+ '701' => '79'
62
+ }[valor] || valor
63
+ end
62
64
  ]
63
65
  ]
64
66
  else
@@ -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
@@ -128,10 +128,12 @@ module Teodoro
128
128
  end
129
129
 
130
130
  def afastamento
131
- evento['vinculo/afastamento']&.then { Obj.new(
132
- data_de_inicio: _1['dtIniAfast'],
133
- codigo_do_motivo: _1['codMotAfast']
134
- ) }
131
+ evento['vinculo/afastamento']&.then do |afastamento|
132
+ Obj.new(
133
+ data_de_inicio: afastamento['dtIniAfast'],
134
+ codigo_do_motivo: afastamento['codMotAfast']
135
+ )
136
+ end
135
137
  end
136
138
 
137
139
  def dados_dos_arquivos_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
@@ -274,7 +276,16 @@ module Teodoro
274
276
  ['EventoAdmissao_InfoVinculo_CodigoMotivoAfastamento', evento['vinculo/afastamento/codMotAfast']],
275
277
  ['EventoAdmissao_InfoVinculo_SucessaoVinculo_DataTransferencia', evento['vinculo/sucessaoVinc/dtTransf'], :data],
276
278
  leiaute['EventoAdmissao_InfoVinculo_SucessaoVinculo_CnpjEmpregadorAnterior'],
277
- ['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
+ )
278
289
  # rubocop:enable Layout/LineLength
279
290
  ]
280
291
  )
@@ -394,8 +405,10 @@ module Teodoro
394
405
 
395
406
  def condicao_de_ingresso_no_brasil_do_trabalhador
396
407
  @condicao_de_ingresso_no_brasil_do_trabalhador ||=
397
- evento['trabalhador/trabImig']&.then do
398
- Teodoro::LeiauteSimplificado::TrabalhadorImigrante.new(_1).condicao_de_ingresso_no_brasil_no_leiaute2
408
+ evento['trabalhador/trabImig']&.then do |imigrante|
409
+ Teodoro::LeiauteSimplificado::TrabalhadorImigrante
410
+ .new(imigrante)
411
+ .condicao_de_ingresso_no_brasil_no_leiaute2
399
412
  end
400
413
  end
401
414
 
@@ -24,14 +24,16 @@ module Teodoro
24
24
  pais_de_nacionalidade: pais_de_nacionalidade_do_trabalhador,
25
25
  nascimento: Obj.new(
26
26
  if leiaute_simplificado?
27
- empresa.trabalhadores[cpf_do_trabalhador].nascimento.then { {
28
- data: _1.data,
29
- pais: _1.pais,
30
- codigo_do_municipio: _1.codigo_do_municipio,
31
- uf: _1.uf,
32
- nome_da_mae: _1.nome_da_mae,
33
- nome_do_pai: _1.nome_do_pai
34
- } }
27
+ empresa.trabalhadores[cpf_do_trabalhador].nascimento.then do |nascimento|
28
+ {
29
+ data: nascimento.data,
30
+ pais: nascimento.pais,
31
+ codigo_do_municipio: nascimento.codigo_do_municipio,
32
+ uf: nascimento.uf,
33
+ nome_da_mae: nascimento.nome_da_mae,
34
+ nome_do_pai: nascimento.nome_do_pai
35
+ }
36
+ end
35
37
  else
36
38
  {
37
39
  data: evento['alteracao/dadosTrabalhador/nascimento/dtNascto'],
@@ -121,8 +123,8 @@ module Teodoro
121
123
  def leiaute
122
124
  @leiaute ||= Obj.new(
123
125
  condicao_de_ingresso_no_brasil: if leiaute_simplificado?
124
- evento['alteracao/dadosTrabalhador/trabImig']&.then do
125
- LeiauteSimplificado::TrabalhadorImigrante.new(_1)
126
+ evento['alteracao/dadosTrabalhador/trabImig']&.then do |imigrante|
127
+ LeiauteSimplificado::TrabalhadorImigrante.new(imigrante)
126
128
  .condicao_de_ingresso_no_brasil_no_leiaute2
127
129
  end
128
130
  else
@@ -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
@@ -0,0 +1,75 @@
1
+ module Teodoro
2
+ module Leiaute
3
+ class ArquivoS2210
4
+ include ArquivoDeEventoNaoPeriodico
5
+
6
+ private
7
+
8
+ def dados_dos_arquivos_data
9
+ [
10
+ Obj.new(
11
+ nome: "CAT_#{numero_do_recibo}",
12
+ itens_do_conteudo: itens_do_conteudo
13
+ )
14
+ ]
15
+ end
16
+
17
+ def itens_do_conteudo # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
18
+ [
19
+ ['Id', id_do_evento],
20
+ ['procEmi', processo_de_emissao_do_evento],
21
+ ['verProc', versao_do_processo_de_emissao_do_evento],
22
+ ['ideEmpregador/tpInsc', tipo_de_inscricao_do_empregador],
23
+ ['ideEmpregador/nrInsc', numero_de_inscricao_do_empregador],
24
+ ['cpfTrab', evento['ideVinculo/cpfTrab']],
25
+ ['matricula', evento['ideVinculo/matricula']],
26
+ ['codCateg', evento['ideVinculo/codCateg']],
27
+ ['dtAcid', evento['cat/dtAcid']],
28
+ ['tpAcid', evento['cat/tpAcid']],
29
+ ['hrAcid', evento['cat/hrAcid']],
30
+ ['hrsTrabAntesAcid', evento['cat/hrsTrabAntesAcid']],
31
+ ['tpCat', evento['cat/tpCat']],
32
+ ['indCatObito', evento['cat/indCatObito']],
33
+ ['dtObito', evento['cat/dtObito']],
34
+ ['indComunPolicia', evento['cat/indComunPolicia']],
35
+ ['codSitGeradora', evento['cat/codSitGeradora']],
36
+ ['iniciatCAT', evento['cat/iniciatCAT']],
37
+ ['obsCAT', evento['cat/obsCAT']],
38
+ ['tpLocal', evento['cat/localAcidente/tpLocal']],
39
+ ['dscLocal', evento['cat/localAcidente/dscLocal']],
40
+ ['tpLograd', evento['cat/localAcidente/tpLograd']],
41
+ ['dscLograd', evento['cat/localAcidente/dscLograd']],
42
+ ['nrLograd', evento['cat/localAcidente/nrLograd']],
43
+ ['complemento', evento['cat/localAcidente/complemento']],
44
+ ['bairro', evento['cat/localAcidente/bairro']],
45
+ ['cep', evento['cat/localAcidente/cep']],
46
+ ['codMunic', evento['cat/localAcidente/codMunic']],
47
+ ['uf', evento['cat/localAcidente/uf']],
48
+ ['pais', evento['cat/localAcidente/pais']],
49
+ ['codPostal', evento['cat/localAcidente/codPostal']],
50
+ ['ideLocalAcid/tpInsc', evento['cat/localAcidente/ideLocalAcid/tpInsc']],
51
+ ['ideLocalAcid/nrInsc', evento['cat/localAcidente/ideLocalAcid/nrInsc']],
52
+ ['codParteAting', evento['cat/parteAtingida/codParteAting']],
53
+ ['lateralidade', evento['cat/parteAtingida/lateralidade']],
54
+ ['codAgntCausador', evento['cat/agenteCausador/codAgntCausador']],
55
+ ['dtAtendimento', evento['cat/atestado/dtAtendimento']],
56
+ ['hrAtendimento', evento['cat/atestado/hrAtendimento']],
57
+ ['indInternacao', evento['cat/atestado/indInternacao']],
58
+ ['durTrat', evento['cat/atestado/durTrat']],
59
+ ['indAfast', evento['cat/atestado/indAfast']],
60
+ ['dscLesao', evento['cat/atestado/dscLesao']],
61
+ ['dscCompLesao', evento['cat/atestado/dscCompLesao']],
62
+ ['diagProvavel', evento['cat/atestado/diagProvavel']],
63
+ ['codCID', evento['cat/atestado/codCID']],
64
+ ['observacao', evento['cat/atestado/observacao']],
65
+ ['nmEmit', evento['cat/atestado/emitente/nmEmit']],
66
+ ['ideOC', evento['cat/atestado/emitente/ideOC']],
67
+ ['nrOC', evento['cat/atestado/emitente/nrOC']],
68
+ ['ufOC', evento['cat/atestado/emitente/ufOC']],
69
+ ['nrRecCatOrig', evento['cat/catOrigem/nrRecCatOrig']],
70
+ ['nrRecibo', numero_do_recibo]
71
+ ]
72
+ end
73
+ end
74
+ end
75
+ end
@@ -0,0 +1,51 @@
1
+ module Teodoro
2
+ module Leiaute
3
+ class ArquivoS2220
4
+ include ArquivoDeEventoNaoPeriodico
5
+
6
+ private
7
+
8
+ def dados_dos_arquivos_data
9
+ [
10
+ Obj.new(
11
+ nome: "ASO_#{numero_do_recibo}",
12
+ itens_do_conteudo: itens_do_conteudo
13
+ )
14
+ ]
15
+ end
16
+
17
+ def itens_do_conteudo # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
18
+ [
19
+ ['Id', id_do_evento],
20
+ ['procEmi', processo_de_emissao_do_evento],
21
+ ['verProc', versao_do_processo_de_emissao_do_evento],
22
+ ['ideEmpregador/tpInsc', tipo_de_inscricao_do_empregador],
23
+ ['ideEmpregador/nrInsc', numero_de_inscricao_do_empregador],
24
+ ['cpfTrab', evento['ideVinculo/cpfTrab']],
25
+ ['matricula', evento['ideVinculo/matricula']],
26
+ ['codCateg', evento['ideVinculo/codCateg']],
27
+ ['tpExameOcup', evento['exMedOcup/tpExameOcup']],
28
+ ['dtAso', evento['exMedOcup/aso/dtAso']],
29
+ ['resAso', evento['exMedOcup/aso/resAso']],
30
+ *evento.*('exMedOcup/aso/exame').map.with_index(1) do |exame, seq|
31
+ [
32
+ ["exame_#{seq}_dtExm", exame['dtExm']],
33
+ ["exame_#{seq}_procRealizado", exame['procRealizado']],
34
+ ["exame_#{seq}_obsProc", exame['obsProc']],
35
+ ["exame_#{seq}_ordExame", exame['ordExame']],
36
+ ["exame_#{seq}_indResult", exame['indResult']]
37
+ ]
38
+ end.sum([]),
39
+ ['medico/nmMed', evento['exMedOcup/aso/medico/nmMed']],
40
+ ['medico/nrCRM', evento['exMedOcup/aso/medico/nrCRM']],
41
+ ['medico/ufCRM', evento['exMedOcup/aso/medico/ufCRM']],
42
+ ['respMonit/cpfResp', evento['exMedOcup/respMonit/cpfResp']],
43
+ ['respMonit/nmResp', evento['exMedOcup/respMonit/nmResp']],
44
+ ['respMonit/nrCRM', evento['exMedOcup/respMonit/nrCRM']],
45
+ ['respMonit/ufCRM', evento['exMedOcup/respMonit/ufCRM']],
46
+ ['nrRecibo', numero_do_recibo]
47
+ ]
48
+ end
49
+ end
50
+ end
51
+ end
@@ -43,10 +43,10 @@ module Teodoro
43
43
  if inicio_do_afastamento?
44
44
  inicio_do_afastamento['dtIniAfast']
45
45
  else
46
- contrato_de_trabalho.afastamento.then do
47
- raise 'término de afastamento sem início de afastamento' unless _1
46
+ contrato_de_trabalho.afastamento.then do |afastamento|
47
+ raise 'término de afastamento sem início de afastamento' unless afastamento
48
48
 
49
- _1.data_de_inicio
49
+ afastamento.data_de_inicio
50
50
  end
51
51
  end
52
52
  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
  ]
@@ -0,0 +1,75 @@
1
+ module Teodoro
2
+ module Leiaute
3
+ class ArquivoS2240
4
+ include ArquivoDeEventoNaoPeriodico
5
+
6
+ private
7
+
8
+ def dados_dos_arquivos_data
9
+ [
10
+ Obj.new(
11
+ nome: "AMB_#{numero_do_recibo}",
12
+ itens_do_conteudo: itens_do_conteudo
13
+ )
14
+ ]
15
+ end
16
+
17
+ def itens_do_conteudo # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
18
+ [
19
+ ['Id', id_do_evento],
20
+ ['procEmi', processo_de_emissao_do_evento],
21
+ ['verProc', versao_do_processo_de_emissao_do_evento],
22
+ ['ideEmpregador/tpInsc', tipo_de_inscricao_do_empregador],
23
+ ['ideEmpregador/nrInsc', numero_de_inscricao_do_empregador],
24
+ ['cpfTrab', evento['ideVinculo/cpfTrab']],
25
+ ['matricula', evento['ideVinculo/matricula']],
26
+ ['codCateg', evento['ideVinculo/codCateg']],
27
+ ['dtIniCondicao', evento['infoExpRisco/dtIniCondicao']],
28
+ ['localAmb', evento['infoExpRisco/infoAmb/localAmb']],
29
+ ['dscSetor', evento['infoExpRisco/infoAmb/dscSetor']],
30
+ ['infoAmb/tpInsc', evento['infoExpRisco/infoAmb/tpInsc']],
31
+ ['infoAmb/nrInsc', evento['infoExpRisco/infoAmb/nrInsc']],
32
+ ['dscAtivDes', evento['infoExpRisco/infoAtiv/dscAtivDes']],
33
+ *evento.*('infoExpRisco/agNoc').map.with_index(1) do |agente_nocivo, seq|
34
+ [
35
+ ["agNoc_#{seq}_codAgNoc", agente_nocivo['codAgNoc']],
36
+ ["agNoc_#{seq}_dscAgNoc", agente_nocivo['dscAgNoc']],
37
+ ["agNoc_#{seq}_tpAval", agente_nocivo['tpAval']],
38
+ ["agNoc_#{seq}_intConc", agente_nocivo['intConc']],
39
+ ["agNoc_#{seq}_limTol", agente_nocivo['limTol']],
40
+ ["agNoc_#{seq}_unMed", agente_nocivo['unMed']],
41
+ ["agNoc_#{seq}_tecMedicao", agente_nocivo['tecMedicao']],
42
+ ["agNoc_#{seq}_utilizEPC", agente_nocivo['epcEpi/utilizEPC']],
43
+ ["agNoc_#{seq}_eficEpc", agente_nocivo['epcEpi/eficEpc']],
44
+ ["agNoc_#{seq}_utilizEPI", agente_nocivo['epcEpi/utilizEPI']],
45
+ ["agNoc_#{seq}_eficEpi", agente_nocivo['epcEpi/eficEpi']],
46
+ *agente_nocivo.*('epcEpi/epi').map.with_index(1) do |epi, epi_seq|
47
+ [
48
+ ["agNoc_#{seq}_epi_#{epi_seq}_docAval", epi['docAval']],
49
+ ["agNoc_#{seq}_epi_#{epi_seq}_dscEPI", epi['dscEPI']]
50
+ ]
51
+ end.sum([]),
52
+ ["agNoc_#{seq}_medProtecao", agente_nocivo['epcEpi/epiCompl/medProtecao']],
53
+ ["agNoc_#{seq}_condFuncto", agente_nocivo['epcEpi/epiCompl/condFuncto']],
54
+ ["agNoc_#{seq}_usoInint", agente_nocivo['epcEpi/epiCompl/usoInint']],
55
+ ["agNoc_#{seq}_przValid", agente_nocivo['epcEpi/epiCompl/przValid']],
56
+ ["agNoc_#{seq}_periodicTroca", agente_nocivo['epcEpi/epiCompl/periodicTroca']],
57
+ ["agNoc_#{seq}_higienizacao", agente_nocivo['epcEpi/epiCompl/higienizacao']]
58
+ ]
59
+ end.sum([]),
60
+ *evento.*('infoExpRisco/respReg').map.with_index(1) do |responsavel, seq|
61
+ [
62
+ ["respReg_#{seq}_cpfResp", responsavel['cpfResp']],
63
+ ["respReg_#{seq}_ideOC", responsavel['ideOC']],
64
+ ["respReg_#{seq}_dscOC", responsavel['dscOC']],
65
+ ["respReg_#{seq}_nrOC", responsavel['nrOC']],
66
+ ["respReg_#{seq}_ufOC", responsavel['ufOC']]
67
+ ]
68
+ end.sum([]),
69
+ ['obsCompl', evento['infoExpRisco/obs/obsCompl']],
70
+ ['nrRecibo', numero_do_recibo]
71
+ ]
72
+ end
73
+ end
74
+ end
75
+ end
@@ -213,7 +213,7 @@ module Teodoro
213
213
  2 => por_iniciativa_do_empregador? && duracao_do_aviso_previo < 30,
214
214
  4 => %w[04 07 08 09].include?(motivo_do_desligamento),
215
215
  6 => motivo_do_desligamento == '33'
216
- }.find { _2 }&.first
216
+ }.find { |_, condicao| condicao }&.first
217
217
  end
218
218
 
219
219
  def por_iniciativa_do_empregador?
@@ -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'],
@@ -119,10 +120,12 @@ module Teodoro
119
120
  end
120
121
 
121
122
  def afastamento
122
- evento['infoTSVInicio/afastamento']&.then { Obj.new(
123
- data_de_inicio: _1['dtIniAfast'],
124
- codigo_do_motivo: _1['codMotAfast']
125
- ) }
123
+ evento['infoTSVInicio/afastamento']&.then do |afastamento|
124
+ Obj.new(
125
+ data_de_inicio: afastamento['dtIniAfast'],
126
+ codigo_do_motivo: afastamento['codMotAfast']
127
+ )
128
+ end
126
129
  end
127
130
 
128
131
  def dados_dos_arquivos_data # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
@@ -334,8 +337,10 @@ module Teodoro
334
337
 
335
338
  def condicao_de_ingresso_no_brasil_do_trabalhador
336
339
  @condicao_de_ingresso_no_brasil_do_trabalhador ||=
337
- evento['trabalhador/trabImig']&.then do
338
- Teodoro::LeiauteSimplificado::TrabalhadorImigrante.new(_1).condicao_de_ingresso_no_brasil_no_leiaute2
340
+ evento['trabalhador/trabImig']&.then do |imigrante|
341
+ Teodoro::LeiauteSimplificado::TrabalhadorImigrante
342
+ .new(imigrante)
343
+ .condicao_de_ingresso_no_brasil_no_leiaute2
339
344
  end
340
345
  end
341
346
 
@@ -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.44.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.44.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-10-28 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,11 +218,16 @@ 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
223
226
  - lib/teodoro/leiaute/arquivo_s2206.rb
227
+ - lib/teodoro/leiaute/arquivo_s2210.rb
228
+ - lib/teodoro/leiaute/arquivo_s2220.rb
224
229
  - lib/teodoro/leiaute/arquivo_s2230.rb
230
+ - lib/teodoro/leiaute/arquivo_s2240.rb
225
231
  - lib/teodoro/leiaute/arquivo_s2250.rb
226
232
  - lib/teodoro/leiaute/arquivo_s2299.rb
227
233
  - lib/teodoro/leiaute/arquivo_s2300.rb