teodoro 0.44.0 → 0.46.0

Sign up to get free protection for your applications and to get access to all the features.
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