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
@@ -10,6 +10,7 @@ module Teodoro
10
10
 
11
11
  registrar_desligamento
12
12
  avisar_que_tem_mais_de_um_demonstrativo if mais_de_um_demontrativo?
13
+ criar_arquivo_data_do_aviso_previo if criar_arquivo_data_do_aviso_previo?
13
14
  end
14
15
 
15
16
  def registrar_desligamento
@@ -50,10 +51,10 @@ module Teodoro
50
51
  ['ESX_MATRICULA', matricula_do_trabalhador],
51
52
  %w[ESX_SEMVINCULO 0],
52
53
  ['ESX_DATAADMISSAO'],
53
- ['ESX_DATADESLIGAMENTO', [data_de_desligamento, :data]],
54
+ ['ESX_DATADESLIGAMENTO', data_de_desligamento, :data],
54
55
  ['ESX_INFOWEB_RESCISAO_IDEDMDEV', identificador_do_demonstrativo],
55
56
  ['ESX_INFOWEB_RESCISAO_RECIBO', numero_do_recibo],
56
- ['ESX_INFOWEB_RESCISAO_MOTIVO', evento['infoDeslig/mtvDeslig']],
57
+ ['ESX_INFOWEB_RESCISAO_MOTIVO', motivo_do_desligamento],
57
58
  ['ESX_INFOWEB_RESCISAO_MOTIVO_TEXT'],
58
59
  ['IdEventoXml'],
59
60
  ['NrReciboEventoOriginal'],
@@ -177,7 +178,7 @@ module Teodoro
177
178
  ['InfoVinculo_SucessaoVinculo_MatriculaAnterior'],
178
179
  ['InfoVinculo_SucessaoVinculo_Observacao'],
179
180
  ['InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_CnpjSindicatoCategoriaProfissional'],
180
- ['InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_DataAdmissao', [data_de_admissao, :data]],
181
+ ['InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_DataAdmissao', data_de_admissao, :data],
181
182
  ['InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_DataBase'],
182
183
  ['InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_IndicativoAdmissao'],
183
184
  ['InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_InfoFgts_DataOpcaoFGTS'],
@@ -210,9 +211,72 @@ module Teodoro
210
211
  @identificadores_de_demonstrativo ||= evento.*('infoDeslig/verbasResc/dmDev').map { _1['ideDmDev'] }
211
212
  end
212
213
 
214
+ def motivo_do_desligamento
215
+ @motivo_do_desligamento ||= evento['infoDeslig/mtvDeslig']
216
+ end
217
+
213
218
  def categoria_do_trabalhador
214
219
  contrato_de_emprego.categoria_do_trabalhador
215
220
  end
221
+
222
+ def criar_arquivo_data_do_aviso_previo?
223
+ leiaute_simplificado? && aviso_previo?
224
+ end
225
+
226
+ def aviso_previo?
227
+ data_do_aviso_previo
228
+ end
229
+
230
+ def data_do_aviso_previo
231
+ @data_do_aviso_previo ||= evento['infoDeslig/dvAvPrev']
232
+ end
233
+
234
+ def criar_arquivo_data_do_aviso_previo
235
+ arquivo_data_do_aviso_previo.criar
236
+ end
237
+
238
+ def arquivo_data_do_aviso_previo
239
+ ArquivoData.new(
240
+ diretorio: empresa.destino_dos_arquivos_data,
241
+ nome: dados_do_arquivo_data_do_aviso_previo.nome,
242
+ itens_do_conteudo: dados_do_arquivo_data_do_aviso_previo.itens_do_conteudo
243
+ )
244
+ end
245
+
246
+ def dados_do_arquivo_data_do_aviso_previo # rubocop:disable Metrics/MethodLength
247
+ @dados_do_arquivo_data_do_aviso_previo ||= ArquivoData::TRA_EPG_AVI.new(
248
+ Obj.new(
249
+ cpf_do_trabalhador: cpf_do_trabalhador,
250
+ matricula_do_trabalhador: matricula_do_trabalhador,
251
+ data_de_admissao: data_de_admissao,
252
+ tipo_do_aviso_previo: tipo_do_aviso_previo,
253
+ data_do_aviso_previo: data_do_aviso_previo,
254
+ data_de_previsao_do_desligamento: data_de_desligamento,
255
+ observacao: nil,
256
+ id_do_evento: nil,
257
+ numero_do_recibo: nil,
258
+ processo_de_emissao_do_evento: nil,
259
+ versao_do_aplicativo_de_processamento_do_evento: nil
260
+ )
261
+ )
262
+ end
263
+
264
+ def tipo_do_aviso_previo
265
+ {
266
+ 1 => por_iniciativa_do_empregador? && duracao_do_aviso_previo >= 30,
267
+ 2 => por_iniciativa_do_empregador? && duracao_do_aviso_previo < 30,
268
+ 4 => %w[04 07 08 09].include?(motivo_do_desligamento),
269
+ 6 => motivo_do_desligamento == '33'
270
+ }.find { _2 }&.first
271
+ end
272
+
273
+ def por_iniciativa_do_empregador?
274
+ @por_iniciativa_do_empregador ||= %w[01 02 03 14 23 24].include?(motivo_do_desligamento)
275
+ end
276
+
277
+ def duracao_do_aviso_previo
278
+ @duracao_do_aviso_previo ||= Date.parse(data_de_desligamento) - Date.parse(data_do_aviso_previo)
279
+ end
216
280
  end
217
281
  end
218
282
  end
@@ -55,12 +55,12 @@ module Teodoro
55
55
  ['ESX_CPF', cpf_do_trabalhador],
56
56
  ['ESX_CATEGORIA', categoria_do_trabalhador],
57
57
  %w[ESX_SEMVINCULO 1],
58
- ['ESX_DATAADMISSAO', [data_de_inicio, :data]],
58
+ ['ESX_DATAADMISSAO', data_de_inicio, :data],
59
59
  ['IdEventoXml'],
60
60
  ['NrReciboEventoOriginal'],
61
61
  ['EventoAdmissao_NrRecibo'],
62
62
  ['EventoAdmissao_InformacoesInicio_IndicativoCadastramentoInicial', evento['infoTSVInicio/cadIni']],
63
- ['EventoAdmissao_InformacoesInicio_DataInicio', [data_de_inicio, :data]],
63
+ ['EventoAdmissao_InformacoesInicio_DataInicio', data_de_inicio, :data],
64
64
  ['SomenteLeitura'],
65
65
  ['UrlRetorno'],
66
66
  ['IdEvento'],
@@ -85,7 +85,7 @@ module Teodoro
85
85
  ['EventoAdmissao_InfoTrabalhador_NomeSocial', evento['trabalhador/nmSoc']],
86
86
  ['EventoAdmissao_InfoTrabalhador_Nascimento_CodigoMunicipio', evento['trabalhador/nascimento/codMunic']],
87
87
  ['EventoAdmissao_InfoTrabalhador_Nascimento_CodigoMunicipio_TEXT'],
88
- ['EventoAdmissao_InfoTrabalhador_Nascimento_DataNascimento', [evento['trabalhador/nascimento/dtNascto'], :data]],
88
+ ['EventoAdmissao_InfoTrabalhador_Nascimento_DataNascimento', evento['trabalhador/nascimento/dtNascto'], :data],
89
89
  ['EventoAdmissao_InfoTrabalhador_Nascimento_NomeMae', evento['trabalhador/nascimento/nmMae']],
90
90
  ['EventoAdmissao_InfoTrabalhador_Nascimento_NomePai', evento['trabalhador/nascimento/nmPai']],
91
91
  ['EventoAdmissao_InfoTrabalhador_Nascimento_PaisNascimento', evento['trabalhador/nascimento/paisNascto']],
@@ -98,15 +98,15 @@ module Teodoro
98
98
  ['ResideExterior'],
99
99
  ['SemNumeroLogradouroEnderecoEX'],
100
100
  ['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_CasadoComBrasileiro', evento['trabalhador/trabEstrangeiro/casadoBr']],
101
- ['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_ClassificacaoCondicao', evento['trabalhador/trabEstrangeiro/classTrabEstrang']],
101
+ de_acordo_com_a_versao_do_leiaute['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_ClassificacaoCondicao'],
102
102
  ['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_ClassificacaoCondicao_TEXT'],
103
- ['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_DataChegada', [evento['trabalhador/trabEstrangeiro/dtChegada'], :data]],
103
+ ['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_DataChegada', evento['trabalhador/trabEstrangeiro/dtChegada'], :data],
104
104
  ['EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_FilhosBrasileiros', evento['trabalhador/trabEstrangeiro/filhosBr']],
105
105
  ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_CategoriaCnh', evento['trabalhador/documentos/CNH/categoriaCnh']],
106
106
  ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_CategoriaCnh_TEXT'],
107
- ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_DataExpedicao', [evento['trabalhador/documentos/CNH/dtExped'], :data]],
108
- ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_DataPrimeiraHabilitacao', [evento['trabalhador/documentos/CNH/dtPriHab'], :data]],
109
- ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_DataValidade', [evento['trabalhador/documentos/CNH/dtValid'], :data]],
107
+ ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_DataExpedicao', evento['trabalhador/documentos/CNH/dtExped'], :data],
108
+ ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_DataPrimeiraHabilitacao', evento['trabalhador/documentos/CNH/dtPriHab'], :data],
109
+ ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_DataValidade', evento['trabalhador/documentos/CNH/dtValid'], :data],
110
110
  ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_NumeroCnh', evento['trabalhador/documentos/CNH/nrRegCnh']],
111
111
  ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_UfCnh', evento['trabalhador/documentos/CNH/ufCnh']],
112
112
  ['EventoAdmissao_InfoTrabalhador_Documentos_Cnh_UfCnh_TEXT'],
@@ -114,10 +114,10 @@ module Teodoro
114
114
  ['EventoAdmissao_InfoTrabalhador_Documentos_Ctps_SerieCtps', evento['trabalhador/documentos/CTPS/serieCtps']],
115
115
  ['EventoAdmissao_InfoTrabalhador_Documentos_Ctps_UfCtps', evento['trabalhador/documentos/CTPS/ufCtps']],
116
116
  ['EventoAdmissao_InfoTrabalhador_Documentos_Ctps_UfCtps_TEXT'],
117
- ['EventoAdmissao_InfoTrabalhador_Documentos_Oc_DataExpedicao', [evento['trabalhador/documentos/OC/dtExped'], :data]],
117
+ ['EventoAdmissao_InfoTrabalhador_Documentos_Oc_DataExpedicao', evento['trabalhador/documentos/OC/dtExped'], :data],
118
118
  ['EventoAdmissao_InfoTrabalhador_Documentos_Oc_NumeroOc', evento['trabalhador/documentos/OC/nrOc']],
119
119
  ['EventoAdmissao_InfoTrabalhador_Documentos_Oc_OrgaoEmissor', evento['trabalhador/documentos/OC/orgaoEmissor']],
120
- ['EventoAdmissao_InfoTrabalhador_Documentos_Rg_DataExpedicao', [evento['trabalhador/documentos/RG/dtExped'], :data]],
120
+ ['EventoAdmissao_InfoTrabalhador_Documentos_Rg_DataExpedicao', evento['trabalhador/documentos/RG/dtExped'], :data],
121
121
  ['EventoAdmissao_InfoTrabalhador_Documentos_Rg_NumeroRg', evento['trabalhador/documentos/RG/nrRg']],
122
122
  ['EventoAdmissao_InfoTrabalhador_Documentos_Rg_OrgaoEmissor', evento['trabalhador/documentos/RG/orgaoEmissor']],
123
123
  ['EventoAdmissao_InfoTrabalhador_Deficiencia_DeficienciaAuditiva', evento['trabalhador/infoDeficiencia/defAuditiva']],
@@ -129,7 +129,7 @@ module Teodoro
129
129
  *evento.*('trabalhador/dependente').map.with_index(1) do |dependente, seq|
130
130
  [
131
131
  ["EventoAdmissao_Dependente_#{seq}_CPFDependente", dependente['cpfDep']],
132
- ["EventoAdmissao_Dependente_#{seq}_DataNascimento", [dependente['dtNascto'], :data]],
132
+ ["EventoAdmissao_Dependente_#{seq}_DataNascimento", dependente['dtNascto'], :data],
133
133
  ["EventoAdmissao_Dependente_#{seq}_DataNascimentoFormatada"],
134
134
  ["EventoAdmissao_Dependente_#{seq}_DependenteIRRF", dependente['depIRRF']],
135
135
  ["EventoAdmissao_Dependente_#{seq}_DependenteSF", dependente['depSF']],
@@ -140,7 +140,7 @@ module Teodoro
140
140
  end.sum([]),
141
141
  ['CodigoCBO'],
142
142
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_AreaAtuacao', evento['infoTSVInicio/infoComplementares/infoEstagiario/areaAtuacao']],
143
- ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_DtPrevistaTermino', [evento['infoTSVInicio/infoComplementares/infoEstagiario/dtPrevTerm'], :data]],
143
+ ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_DtPrevistaTermino', evento['infoTSVInicio/infoComplementares/infoEstagiario/dtPrevTerm'], :data],
144
144
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_InfoAgenteIntegracao_Bairro', evento['infoTSVInicio/infoComplementares/infoEstagiario/ageIntegracao/bairro']],
145
145
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_InfoAgenteIntegracao_Cep', evento['infoTSVInicio/infoComplementares/infoEstagiario/ageIntegracao/cep']],
146
146
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_InfoAgenteIntegracao_Cnpj', evento['infoTSVInicio/infoComplementares/infoEstagiario/ageIntegracao/cnpjAgntInteg']],
@@ -162,16 +162,143 @@ module Teodoro
162
162
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_NaturezaEstagio', evento['infoTSVInicio/infoComplementares/infoEstagiario/natEstagio']],
163
163
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_NivelEstagio', evento['infoTSVInicio/infoComplementares/infoEstagiario/nivEstagio']],
164
164
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_NrApoliceSeguro', evento['infoTSVInicio/infoComplementares/infoEstagiario/nrApol']],
165
- ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_ValorBolsa', evento['infoTSVInicio/infoComplementares/infoEstagiario/vlrBolsa']],
165
+ ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_ValorBolsa', evento['infoTSVInicio/infoComplementares/infoEstagiario/vlrBolsa'], :decimal],
166
166
  ['EventoAdmissao_InformacoesInicio_CodigoCategoria', categoria_do_trabalhador],
167
167
  ['DescricaoProcEmi', processo_de_emissao_do_evento],
168
168
  ['IdEventoXml', id_do_evento],
169
- ['NrReciboEventoOriginal', numero_do_recibo]
169
+ ['NrReciboEventoOriginal', numero_do_recibo],
170
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_Bairro', evento['trabalhador/endereco/brasil/bairro']],
171
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_Cep', evento['trabalhador/endereco/brasil/cep']],
172
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_CodigoMunicipio', evento['trabalhador/endereco/brasil/codMunic']],
173
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_Complemento', evento['trabalhador/endereco/brasil/complemento']],
174
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_DescricaoLogradouro', evento['trabalhador/endereco/brasil/dscLograd']],
175
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_NumeroLogradouro', evento['trabalhador/endereco/brasil/nrLograd']],
176
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_TipoLogradouro', evento['trabalhador/endereco/brasil/tpLograd']],
177
+ ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_Uf', evento['trabalhador/endereco/brasil/uf']],
178
+ de_acordo_com_a_versao_do_leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo'],
179
+ de_acordo_com_a_versao_do_leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_OptanteFGTS'],
180
+ de_acordo_com_a_versao_do_leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_DataOpcaoFGTS'],
181
+ ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_Remuneracao_UnidadeSalarioFixo', evento['infoTSVInicio/infoComplementares/remuneracao/undSalFixo']],
182
+ ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_Remuneracao_ValorSalarioFixo', evento['infoTSVInicio/infoComplementares/remuneracao/vrSalFx'], :decimal],
183
+ ['EventoAdmissao_InformacoesInicio_NaturezaAtividade', evento['infoTSVInicio/natAtividade']]
170
184
  # rubocop:enable Layout/LineLength
171
185
  ]
172
186
  )
173
187
  ]
174
188
  end
189
+
190
+ def de_acordo_com_a_versao_do_leiaute
191
+ @de_acordo_com_a_versao_do_leiaute ||=
192
+ if leiaute_simplificado?
193
+ LeiauteSimplificado.new(empresa: empresa, evento: evento)
194
+ else
195
+ Leiaute2.new(evento)
196
+ end
197
+ end
198
+
199
+ module Leiaute
200
+ private
201
+
202
+ attr_reader :evento
203
+
204
+ public
205
+
206
+ def [](chave)
207
+ indice[chave]
208
+ end
209
+
210
+ private
211
+
212
+ def indice
213
+ @indice ||= chaves_valores.map { [_1.first, _1] }.to_h
214
+ end
215
+ end
216
+
217
+ class Leiaute2
218
+ include Leiaute
219
+
220
+ private
221
+
222
+ def initialize(evento)
223
+ @evento = evento
224
+ end
225
+
226
+ def chaves_valores # rubocop:disable Metrics/MethodLength
227
+ [
228
+ [
229
+ 'EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_ClassificacaoCondicao',
230
+ evento['trabalhador/trabEstrangeiro/classTrabEstrang']
231
+ ],
232
+ [
233
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_OptanteFGTS',
234
+ evento['infoTSVInicio/infoComplementares/fgts/opcFGTS']
235
+ ],
236
+ [
237
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_DataOpcaoFGTS',
238
+ evento['infoTSVInicio/infoComplementares/fgts/dtOpcFGTS'],
239
+ :data
240
+ ],
241
+ [
242
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo',
243
+ evento['infoTSVInicio/infoComplementares/cargoFuncao/codCargo']
244
+ ]
245
+ ]
246
+ end
247
+ end
248
+
249
+ class LeiauteSimplificado
250
+ include Leiaute
251
+
252
+ private
253
+
254
+ def initialize(empresa:, evento:)
255
+ @empresa = empresa
256
+ @evento = evento
257
+ end
258
+
259
+ attr_reader :empresa
260
+
261
+ def chaves_valores # rubocop:disable Metrics/MethodLength
262
+ [
263
+ [
264
+ 'EventoAdmissao_InfoTrabalhador_TrabalhadorEstrangeiro_ClassificacaoCondicao',
265
+ {
266
+ '1' => 4,
267
+ '2' => 5,
268
+ '3' => 9,
269
+ '4' => 10,
270
+ '5' => 11,
271
+ '6' => 12,
272
+ '7' => evento['trabalhador/trabImig/tmpResid']
273
+ }[evento['trabalhador/trabImig/condIng']]
274
+ ],
275
+ [
276
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_OptanteFGTS',
277
+ (1 if evento['infoTSVInicio/infoComplementares/FGTS'])
278
+ ],
279
+ [
280
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_DataOpcaoFGTS',
281
+ evento['infoTSVInicio/infoComplementares/FGTS/dtOpcFGTS'],
282
+ :data
283
+ ],
284
+ [
285
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo',
286
+ codigo_do_cargo
287
+ ]
288
+ ]
289
+ end
290
+
291
+ def codigo_do_cargo
292
+ cargo&.codigo
293
+ end
294
+
295
+ def cargo
296
+ empresa.cargos_gerados[
297
+ nome: evento['infoTSVInicio/infoComplementares/cargoFuncao/nmCargo'],
298
+ cbo: evento['infoTSVInicio/infoComplementares/cargoFuncao/CBOCargo']
299
+ ]
300
+ end
301
+ end
175
302
  end
176
303
  end
177
304
  end
@@ -20,8 +20,8 @@ module Teodoro
20
20
  ['ESX_MATRICULA'],
21
21
  ['ESX_CATEGORIA', categoria_do_trabalhador],
22
22
  %w[ESX_SEMVINCULO 1],
23
- ['ESX_DATAADMISSAO', [data_de_inicio, :data]],
24
- ['ESX_DATAALTERACAO', [data_da_alteracao, :data]],
23
+ ['ESX_DATAADMISSAO', data_de_inicio, :data],
24
+ ['ESX_DATAALTERACAO', data_da_alteracao, :data],
25
25
  ['cpfTrabalhador'],
26
26
  ['nomeTrabalhador'],
27
27
  ['TipoInscricaoEmpregador', recibo['ideEmpregador/tpInsc']],
@@ -66,7 +66,7 @@ module Teodoro
66
66
  ['InfoVinculo_TipoRegimeTrabalhista'],
67
67
  ['InfoVinculo_TipoRegimePrevidenciario'],
68
68
  ['InfoVinculo_InfoContrato_CodigoCategoria'],
69
- ['InfoVinculo_InfoContrato_CodigoCargo', evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codCargo']],
69
+ de_acordo_com_a_versao_do_leiaute['InfoVinculo_InfoContrato_CodigoCargo'],
70
70
  ['InfoVinculo_InfoContrato_CodigoFuncao', evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codFuncao']],
71
71
  ['InfoVinculo_InfoContrato_CodigoCarreira'],
72
72
  ['InfoVinculo_InfoContrato_DataIngressoCarreira'],
@@ -75,7 +75,7 @@ module Teodoro
75
75
  ['InfoVinculo_DataInicioAfastamento'],
76
76
  ['InfoVinculo_CodigoMotivoAfastamento'],
77
77
  ['InfoVinculo_InfoContrato_Remuneracao_UnidadeSalarioFixo', evento['infoTSVAlteracao/infoComplementares/remuneracao/undSalFixo']],
78
- ['InfoVinculo_InfoContrato_Remuneracao_ValorSalarioFixo', evento['infoTSVAlteracao/infoComplementares/remuneracao/vrSalFx']],
78
+ ['InfoVinculo_InfoContrato_Remuneracao_ValorSalarioFixo', evento['infoTSVAlteracao/infoComplementares/remuneracao/vrSalFx'], :decimal],
79
79
  ['InfoVinculo_InfoContrato_Remuneracao_DescricaoSalarioVariavel', evento['infoTSVAlteracao/infoComplementares/remuneracao/dscSalVar']],
80
80
  ['InfoVinculo_InfoContrato_HorarioContratual_DescricaoTipoJornada'],
81
81
  ['InfoVinculo_InfoContrato_HorarioContratual_JornadaTempoParcial'],
@@ -123,7 +123,7 @@ module Teodoro
123
123
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoTrabalhadorCedido_TipoRegimePrevidenciario'],
124
124
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoTrabalhadorCedido_TipoRegimeTrabalhista'],
125
125
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_AreaAtuacao', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/areaAtuacao']],
126
- ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_DtPrevistaTermino', [evento['infoTSVAlteracao/infoComplementares/infoEstagiario/dtPrevTerm'], :data]],
126
+ ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_DtPrevistaTermino', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/dtPrevTerm'], :data],
127
127
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_InfoAgenteIntegracao_Bairro', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/ageIntegracao/bairro']],
128
128
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_InfoAgenteIntegracao_Cep', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/ageIntegracao/cep']],
129
129
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_InfoAgenteIntegracao_Cnpj', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/ageIntegracao/cnpjAgntInteg']],
@@ -145,7 +145,7 @@ module Teodoro
145
145
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_NaturezaEstagio', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/natEstagio']],
146
146
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_NivelEstagio', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/nivEstagio']],
147
147
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_NrApoliceSeguro', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/nrApol']],
148
- ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_ValorBolsa', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/vlrBolsa']]
148
+ ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_ValorBolsa', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/vlrBolsa'], :decimal]
149
149
  # rubocop:enable Layout/LineLength
150
150
  ]
151
151
  )
@@ -179,6 +179,85 @@ module Teodoro
179
179
  def data_da_alteracao
180
180
  @data_da_alteracao ||= evento['infoTSVAlteracao/dtAlteracao']
181
181
  end
182
+
183
+ def de_acordo_com_a_versao_do_leiaute
184
+ @de_acordo_com_a_versao_do_leiaute ||=
185
+ if leiaute_simplificado?
186
+ LeiauteSimplificado.new(empresa: empresa, evento: evento)
187
+ else
188
+ Leiaute2.new(evento)
189
+ end
190
+ end
191
+
192
+ module Leiaute
193
+ private
194
+
195
+ attr_reader :evento
196
+
197
+ public
198
+
199
+ def [](chave)
200
+ indice[chave]
201
+ end
202
+
203
+ private
204
+
205
+ def indice
206
+ @indice ||= chaves_valores.map { [_1.first, _1] }.to_h
207
+ end
208
+ end
209
+
210
+ class Leiaute2
211
+ include Leiaute
212
+
213
+ private
214
+
215
+ def initialize(evento)
216
+ @evento = evento
217
+ end
218
+
219
+ def chaves_valores
220
+ [
221
+ [
222
+ 'InfoVinculo_InfoContrato_CodigoCargo',
223
+ evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codCargo']
224
+ ]
225
+ ]
226
+ end
227
+ end
228
+
229
+ class LeiauteSimplificado
230
+ include Leiaute
231
+
232
+ private
233
+
234
+ def initialize(empresa:, evento:)
235
+ @empresa = empresa
236
+ @evento = evento
237
+ end
238
+
239
+ attr_reader :empresa
240
+
241
+ def chaves_valores
242
+ [
243
+ [
244
+ 'InfoVinculo_InfoContrato_CodigoCargo',
245
+ codigo_do_cargo
246
+ ]
247
+ ]
248
+ end
249
+
250
+ def codigo_do_cargo
251
+ cargo&.codigo
252
+ end
253
+
254
+ def cargo
255
+ empresa.cargos_gerados[
256
+ nome: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/nmCargo'],
257
+ cbo: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/CBOCargo']
258
+ ]
259
+ end
260
+ end
182
261
  end
183
262
  end
184
263
  end