teodoro 0.10.1 → 0.15.1

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 +6 -0
  3. data/lib/teodoro/arquivo_data.rb +21 -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 +4 -0
  7. data/lib/teodoro/arquivo_de_evento_de_tabela.rb +49 -19
  8. data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +1 -1
  9. data/lib/teodoro/arquivo_xml.rb +30 -3
  10. data/lib/teodoro/empresa.rb +13 -138
  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
@@ -3,9 +3,39 @@ module Teodoro
3
3
  class ArquivoS2206
4
4
  include ArquivoDeEventoNaoPeriodico
5
5
 
6
+ module DadosGerais
7
+ private
8
+
9
+ def cpf_do_trabalhador
10
+ @cpf_do_trabalhador ||= evento['ideVinculo/cpfTrab']
11
+ end
12
+
13
+ def matricula_do_trabalhador
14
+ @matricula_do_trabalhador ||= evento['ideVinculo/matricula']
15
+ end
16
+
17
+ def data_de_admissao
18
+ contrato_de_emprego.data_de_admissao
19
+ end
20
+
21
+ def contrato_de_emprego
22
+ contratos_de_emprego[matricula_do_trabalhador]
23
+ end
24
+
25
+ def contratos_de_emprego
26
+ empresa.contratos_de_emprego
27
+ end
28
+
29
+ def data_da_alteracao
30
+ evento['altContratual/dtAlteracao']
31
+ end
32
+ end
33
+
34
+ include DadosGerais
35
+
6
36
  private
7
37
 
8
- def dados_dos_arquivos_data # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
38
+ def dados_dos_arquivos_data # rubocop:disable Metrics/MethodLength
9
39
  [
10
40
  Obj.new(
11
41
  nome: [
@@ -14,93 +44,166 @@ module Teodoro
14
44
  "[EPG_#{matricula_do_trabalhador}_#{data_de_admissao.delete('-')}]",
15
45
  "-ACO[#{data_da_alteracao.delete('-')}]"
16
46
  ].join,
17
- itens_do_conteudo: [
18
- # rubocop:disable Layout/LineLength
19
- ['ESX_CPF', cpf_do_trabalhador],
20
- ['ESX_MATRICULA', matricula_do_trabalhador],
21
- %w[ESX_SEMVINCULO 0],
22
- ['ESX_DATAADMISSAO', [data_de_admissao, :data]],
23
- ['ESX_DATAALTERACAO', [data_da_alteracao, :data]],
24
- ['cpfTrabalhador', cpf_do_trabalhador],
25
- %w[nomeTrabalhador nomeTrabalhador],
26
- ['IdentificacaoVinculo_Cpf', cpf_do_trabalhador],
27
- ['IdentificacaoVinculo_Matricula', matricula_do_trabalhador],
28
- ['TipoInscricaoEmpregador', tipo_de_inscricao_do_empregador],
29
- ['AlteracaoContratual_DataAlteracao', [data_da_alteracao, :data]],
30
- ['AlteracaoContratual_DataEfeito', [evento['altContratual/dtEf'], :data]],
31
- ['AlteracaoContratual_DescricaoAlteracao', evento['altContratual/dscAlt']],
32
- ['IdentificacaoVinculo_Nis', evento['ideVinculo/nisTrab']],
33
- ['IndicadorRetificacao'],
34
- ['IdEventoXml', id_do_evento],
35
- ['NrReciboEventoOriginal', numero_do_recibo],
36
- ['UrlRetorno'],
37
- ['idContrato'],
38
- ['SomenteLeitura'],
39
- ['IdEvento'],
40
- ['RequestVerificationToken'],
41
- ['IdContratoAlterado'],
42
- ['regTrab'],
43
- ['InformacoesContrato_CodigoCategoria', categoria_do_trabalhador],
44
- ['VinculoAlteracao_TipoRegimePrevidenciario', evento['altContratual/vinculo/tpRegPrev']],
45
- ['dataAdmissao', [data_de_admissao, :data]],
46
- ['InformacoesCeletista_TipoRegimeJornada', evento['altContratual/infoRegimeTrab/infoCeletista/tpRegJor']],
47
- ['InformacoesCeletista_NaturezaAtividade', evento['altContratual/infoRegimeTrab/infoCeletista/natAtividade']],
48
- ['FiltroCargo'],
49
- ['FiltroFuncao'],
50
- ['HorarioTela_Dia'],
51
- ['dataNomeacao'],
52
- ['DescricaoProcEmi', processo_de_emissao_do_evento],
53
- ['VerProc', recibo['processamento/versaoAppProcessamento']],
54
- ['FiltroEstabelecimentoLocalTrabalho'],
55
- ['NomeEstabelecimentoLocalTrabalho'],
56
- ['CodigoCBO'],
57
- ['InformacoesContrato_Remuneracao_UnidadeSalarioFixo', evento['altContratual/infoContrato/remuneracao/undSalFixo']],
58
- ['InformacoesContrato_TipoContrato', evento['altContratual/infoContrato/duracao/tpContr']],
59
- ['CodigoCNAE'],
60
- *evento.*('altContratual/infoContrato/horContratual/horario').map.with_index(1) do |horario, seq|
61
- [
62
- ["Horarios_#{seq}_CodigoHorarioContratual", horario['codHorContrat']],
63
- ["Horarios_#{seq}_Dia", horario['dia']]
64
- ]
65
- end.sum([]),
66
- *evento.*('altContratual/infoContrato/filiacaoSindical').map.with_index(1) do |filiacao, seq|
67
- [
68
- ["InfoVinculo_InfoContrato_FiliacaoSindical_#{seq}_CnpjSindicatoTrabalhador", filiacao['cnpjSindTrab']]
69
- ]
70
- end.sum([]),
71
- ['InformacoesContrato_Remuneracao_ValorSalarioFixo', evento['altContratual/infoContrato/remuneracao/vrSalFx']]
72
- # rubocop:enable Layout/LineLength
73
- ]
47
+ itens_do_conteudo: itens_do_conteudo
74
48
  )
75
49
  ]
76
50
  end
77
51
 
78
- def cpf_do_trabalhador
79
- @cpf_do_trabalhador ||= evento['ideVinculo/cpfTrab']
52
+ def itens_do_conteudo
53
+ leiaute.itens_do_conteudo
80
54
  end
81
55
 
82
- def matricula_do_trabalhador
83
- @matricula_do_trabalhador ||= evento['ideVinculo/matricula']
56
+ def leiaute
57
+ (leiaute_simplificado? ? LeiauteSimplificado : Leiaute2).new(empresa: empresa, arquivo_xml: arquivo_xml)
84
58
  end
85
59
 
86
- def data_de_admissao
87
- contrato_de_emprego.data_de_admissao
60
+ module Leiaute
61
+ include ArquivoDeEvento
62
+ include DadosGerais
88
63
  end
89
64
 
90
- def contrato_de_emprego
91
- contratos_de_emprego[matricula_do_trabalhador]
92
- end
65
+ class Leiaute2
66
+ include Leiaute
93
67
 
94
- def contratos_de_emprego
95
- empresa.contratos_de_emprego
68
+ def itens_do_conteudo # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
69
+ [
70
+ # rubocop:disable Layout/LineLength
71
+ ['ESX_CPF', cpf_do_trabalhador],
72
+ ['ESX_MATRICULA', matricula_do_trabalhador],
73
+ %w[ESX_SEMVINCULO 0],
74
+ ['ESX_DATAADMISSAO', data_de_admissao, :data],
75
+ ['ESX_DATAALTERACAO', data_da_alteracao, :data],
76
+ ['cpfTrabalhador', cpf_do_trabalhador],
77
+ %w[nomeTrabalhador nomeTrabalhador],
78
+ ['IdentificacaoVinculo_Cpf', cpf_do_trabalhador],
79
+ ['IdentificacaoVinculo_Matricula', matricula_do_trabalhador],
80
+ ['TipoInscricaoEmpregador', tipo_de_inscricao_do_empregador],
81
+ ['AlteracaoContratual_DataAlteracao', data_da_alteracao, :data],
82
+ ['AlteracaoContratual_DataEfeito', evento['altContratual/dtEf'], :data],
83
+ ['AlteracaoContratual_DescricaoAlteracao', evento['altContratual/dscAlt']],
84
+ ['IdentificacaoVinculo_Nis', evento['ideVinculo/nisTrab']],
85
+ ['IndicadorRetificacao'],
86
+ ['IdEventoXml', id_do_evento],
87
+ ['NrReciboEventoOriginal', numero_do_recibo],
88
+ ['UrlRetorno'],
89
+ ['idContrato'],
90
+ ['SomenteLeitura'],
91
+ ['IdEvento'],
92
+ ['RequestVerificationToken'],
93
+ ['IdContratoAlterado'],
94
+ ['regTrab'],
95
+ ['InformacoesContrato_CodigoCategoria', evento['altContratual/infoContrato/codCateg']],
96
+ ['VinculoAlteracao_TipoRegimePrevidenciario', evento['altContratual/vinculo/tpRegPrev']],
97
+ ['dataAdmissao', data_de_admissao, :data],
98
+ ['InformacoesCeletista_TipoRegimeJornada', evento['altContratual/infoRegimeTrab/infoCeletista/tpRegJor']],
99
+ ['InformacoesCeletista_NaturezaAtividade', evento['altContratual/infoRegimeTrab/infoCeletista/natAtividade']],
100
+ ['FiltroCargo'],
101
+ ['FiltroFuncao'],
102
+ ['HorarioTela_Dia'],
103
+ ['dataNomeacao'],
104
+ ['DescricaoProcEmi', processo_de_emissao_do_evento],
105
+ ['VerProc', recibo['processamento/versaoAppProcessamento']],
106
+ ['FiltroEstabelecimentoLocalTrabalho'],
107
+ ['NomeEstabelecimentoLocalTrabalho'],
108
+ ['CodigoCBO'],
109
+ ['InformacoesContrato_Remuneracao_UnidadeSalarioFixo', evento['altContratual/infoContrato/remuneracao/undSalFixo']],
110
+ ['InformacoesContrato_TipoContrato', evento['altContratual/infoContrato/duracao/tpContr']],
111
+ ['CodigoCNAE'],
112
+ *evento.*('altContratual/infoContrato/horContratual/horario').map.with_index(1) do |horario, seq|
113
+ [
114
+ ["Horarios_#{seq}_CodigoHorarioContratual", horario['codHorContrat']],
115
+ ["Horarios_#{seq}_Dia", horario['dia']]
116
+ ]
117
+ end.sum([]),
118
+ *evento.*('altContratual/infoContrato/filiacaoSindical').map.with_index(1) do |filiacao, seq|
119
+ [
120
+ ["InfoVinculo_InfoContrato_FiliacaoSindical_#{seq}_CnpjSindicatoTrabalhador", filiacao['cnpjSindTrab']]
121
+ ]
122
+ end.sum([]),
123
+ ['InformacoesContrato_Remuneracao_ValorSalarioFixo', evento['altContratual/infoContrato/remuneracao/vrSalFx'], :decimal],
124
+ ['InformacoesContrato_LocalTrabalho_LocalTrabalhoGeral_TipoInscricao', evento['altContratual/infoContrato/localTrabalho/localTrabGeral/tpInsc']],
125
+ ['InformacoesContrato_LocalTrabalho_LocalTrabalhoGeral_NumeroInscricao', evento['altContratual/infoContrato/localTrabalho/localTrabGeral/nrInsc']],
126
+ ['InformacoesContrato_HorarioContratual_TipoJornada', evento['altContratual/infoContrato/horContratual/tpJornada']],
127
+ ['InformacoesContrato_HorarioContratual_JornadaTempoParcial', evento['altContratual/infoContrato/horContratual/tmpParc']],
128
+ ['InformacoesContrato_HorarioContratual_QuantidadedHorasSemanal', evento['altContratual/infoContrato/horContratual/qtdHrsSem'], :decimal],
129
+ ['InformacoesContrato_HorarioContratual_DescricaoTipoJornada', evento['altContratual/infoContrato/horContratual/dscTpJorn']],
130
+ ['InformacoesContrato_CodigoCargo', evento['altContratual/infoContrato/codCargo']],
131
+ ['InformacoesContrato_DataTermino', evento['altContratual/infoContrato/duracao/dtTerm'], :data]
132
+ # rubocop:enable Layout/LineLength
133
+ ]
134
+ end
96
135
  end
97
136
 
98
- def data_da_alteracao
99
- evento['altContratual/dtAlteracao']
100
- end
137
+ class LeiauteSimplificado
138
+ include Leiaute
139
+
140
+ def itens_do_conteudo # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
141
+ [
142
+ # rubocop:disable Layout/LineLength
143
+ ['ESX_CPF', cpf_do_trabalhador],
144
+ ['ESX_MATRICULA', matricula_do_trabalhador],
145
+ %w[ESX_SEMVINCULO 0],
146
+ ['ESX_DATAADMISSAO', data_de_admissao, :data],
147
+ ['ESX_DATAALTERACAO', data_da_alteracao, :data],
148
+ ['cpfTrabalhador', cpf_do_trabalhador],
149
+ %w[nomeTrabalhador nomeTrabalhador],
150
+ ['IdentificacaoVinculo_Cpf', cpf_do_trabalhador],
151
+ ['IdentificacaoVinculo_Matricula', matricula_do_trabalhador],
152
+ ['TipoInscricaoEmpregador', tipo_de_inscricao_do_empregador],
153
+ ['AlteracaoContratual_DataAlteracao', data_da_alteracao, :data],
154
+ ['AlteracaoContratual_DataEfeito', evento['altContratual/dtEf'], :data],
155
+ ['AlteracaoContratual_DescricaoAlteracao', evento['altContratual/dscAlt']],
156
+ ['IdentificacaoVinculo_Nis', evento['ideVinculo/nisTrab']],
157
+ ['IndicadorRetificacao'],
158
+ ['IdEventoXml', id_do_evento],
159
+ ['NrReciboEventoOriginal', numero_do_recibo],
160
+ ['UrlRetorno'],
161
+ ['idContrato'],
162
+ ['SomenteLeitura'],
163
+ ['IdEvento'],
164
+ ['RequestVerificationToken'],
165
+ ['IdContratoAlterado'],
166
+ ['regTrab'],
167
+ ['InformacoesContrato_CodigoCategoria', evento['altContratual/vinculo/infoContrato/codCateg']],
168
+ ['VinculoAlteracao_TipoRegimePrevidenciario', evento['altContratual/vinculo/tpRegPrev']],
169
+ ['dataAdmissao', data_de_admissao, :data],
170
+ ['InformacoesCeletista_TipoRegimeJornada', evento['altContratual/vinculo/infoRegimeTrab/infoCeletista/tpRegJor']],
171
+ ['InformacoesCeletista_NaturezaAtividade', evento['altContratual/vinculo/infoRegimeTrab/infoCeletista/natAtividade']],
172
+ ['FiltroCargo'],
173
+ ['FiltroFuncao'],
174
+ ['HorarioTela_Dia'],
175
+ ['dataNomeacao'],
176
+ ['DescricaoProcEmi', processo_de_emissao_do_evento],
177
+ ['VerProc', recibo['processamento/versaoAppProcessamento']],
178
+ ['FiltroEstabelecimentoLocalTrabalho'],
179
+ ['NomeEstabelecimentoLocalTrabalho'],
180
+ ['CodigoCBO'],
181
+ ['InformacoesContrato_Remuneracao_UnidadeSalarioFixo', evento['altContratual/vinculo/infoContrato/remuneracao/undSalFixo']],
182
+ ['InformacoesContrato_TipoContrato', evento['altContratual/vinculo/infoContrato/duracao/tpContr']],
183
+ ['CodigoCNAE'],
184
+ ['InformacoesContrato_Remuneracao_ValorSalarioFixo', evento['altContratual/vinculo/infoContrato/remuneracao/vrSalFx'], :decimal],
185
+ ['InformacoesContrato_LocalTrabalho_LocalTrabalhoGeral_TipoInscricao', evento['altContratual/vinculo/infoContrato/localTrabalho/localTrabGeral/tpInsc']],
186
+ ['InformacoesContrato_LocalTrabalho_LocalTrabalhoGeral_NumeroInscricao', evento['altContratual/vinculo/infoContrato/localTrabalho/localTrabGeral/nrInsc']],
187
+ ['InformacoesContrato_HorarioContratual_TipoJornada', evento['altContratual/vinculo/infoContrato/horContratual/tpJornada'].then { %w[2 3].include?(_1) ? _1 : 9 }],
188
+ ['InformacoesContrato_HorarioContratual_JornadaTempoParcial', evento['altContratual/vinculo/infoContrato/horContratual/tmpParc']],
189
+ ['InformacoesContrato_HorarioContratual_QuantidadedHorasSemanal', evento['altContratual/vinculo/infoContrato/horContratual/qtdHrsSem'], :decimal],
190
+ ['InformacoesContrato_HorarioContratual_DescricaoTipoJornada', evento['altContratual/vinculo/infoContrato/horContratual/dscJorn']],
191
+ ['InformacoesContrato_CodigoCargo', codigo_do_cargo],
192
+ ['InformacoesContrato_DataTermino', evento['altContratual/vinculo/infoContrato/duracao/dtTerm'], :data]
193
+ # rubocop:enable Layout/LineLength
194
+ ]
195
+ end
196
+
197
+ def codigo_do_cargo
198
+ cargo&.codigo
199
+ end
101
200
 
102
- def categoria_do_trabalhador
103
- @categoria_do_trabalhador ||= evento['altContratual/infoContrato/codCateg']
201
+ def cargo
202
+ empresa.cargos_gerados[
203
+ nome: evento['altContratual/vinculo/infoContrato/nmCargo'],
204
+ cbo: evento['altContratual/vinculo/infoContrato/CBOCargo']
205
+ ]
206
+ end
104
207
  end
105
208
  end
106
209
  end
@@ -119,10 +119,10 @@ module Teodoro
119
119
  ['ESX_MATRICULA', matricula_do_trabalhador],
120
120
  ['ESX_DATAADMISSAO'],
121
121
  %w[ESX_SEMVINCULO 0],
122
- ['ESX_INICIO', [data_de_inicio_do_afastamento, :data_aaaammdd]],
123
- (['ESX_TERMINO', [data_de_termino_do_afastamento, :data_aaaammdd]] if termino_do_afastamento?),
124
- ['IniAfastamento_DataInicioAfastamento', ([data_de_inicio_do_afastamento, :data] if inicio_do_afastamento?)],
125
- (['FimAfastamento_DataTerminoAfastamento', [data_de_termino_do_afastamento, :data]] if termino_do_afastamento?),
122
+ ['ESX_INICIO', data_de_inicio_do_afastamento, :data_aaaammdd],
123
+ (['ESX_TERMINO', data_de_termino_do_afastamento, :data_aaaammdd] if termino_do_afastamento?),
124
+ ['IniAfastamento_DataInicioAfastamento', (data_de_inicio_do_afastamento if inicio_do_afastamento?), :data],
125
+ (['FimAfastamento_DataTerminoAfastamento', data_de_termino_do_afastamento, :data] if termino_do_afastamento?),
126
126
  ['IniAfastamento_CodMotivoAfastamento', codigo_do_motivo_de_afastamento],
127
127
  ['IniAfastamento_CodMotivoAfastamento_TEXT'],
128
128
  ['IniAfastamento_InfoMesmoMotivo', evento['infoAfastamento/iniAfastamento/infoMesmoMtv']],
@@ -132,7 +132,7 @@ module Teodoro
132
132
  ['IdEventoXml', id_do_evento],
133
133
  ['NrReciboEventoOriginal', numero_do_recibo],
134
134
  ['IndicadorRetificacao', evento['ideEvento/indRetif']],
135
- ['DataTerminoAfastamentoInformada', [termino_do_afastamento?, :bool]],
135
+ ['DataTerminoAfastamentoInformada', termino_do_afastamento?, :bool],
136
136
  ['ContratoSemVinculo'],
137
137
  ['CodMotivoAfastamentoRetif'],
138
138
  ['TipoEventoCadastro'],
@@ -7,44 +7,24 @@ module Teodoro
7
7
 
8
8
  def dados_dos_arquivos_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
9
9
  [
10
- Obj.new(
11
- nome: "TRA[#{cpf_do_trabalhador}][EPG_#{matricula_do_trabalhador}_#{data_de_admissao.delete('-')}]-AVI",
12
- itens_do_conteudo: [
13
- # rubocop:disable Layout/LineLength
14
- ['ESX_CPF', cpf_do_trabalhador],
15
- ['ESX_MATRICULA', matricula_do_trabalhador],
16
- %w[ESX_SEMVINCULO 0],
17
- ['ESX_DATAADMISSAO', [data_de_admissao, :data]],
18
- ['OperacaoAvisoPrevio'],
19
- ['MostrarCancelamento'],
20
- ['MostrarAvisoPrevio'],
21
- ['IdContrato'],
22
- ['IdCancelamentoAvisoPrevio'],
23
- ['BloquearCodigo'],
24
- ['BloquearAntigoPeriodoValidade'],
25
- ['IdeVinculo_Cpf'],
26
- ['NomeTrabalhador'],
27
- ['IdeVinculo_Matricula', matricula_do_trabalhador],
28
- ['InfoAvisoPrevio_DetalhamentoAvisoPrevio_TipoAvisoPrevio', evento['infoAvPrevio/detAvPrevio/tpAvPrevio']],
29
- ['InfoAvisoPrevio_DetalhamentoAvisoPrevio_TipoAvisoPrevio_TEXT'],
30
- ['InfoAvisoPrevio_DetalhamentoAvisoPrevio_DataAvisoPrevio', [evento['infoAvPrevio/detAvPrevio/dtAvPrv'], :data]],
31
- ['InfoAvisoPrevio_DetalhamentoAvisoPrevio_DataPrevistaDesligamento', [evento['infoAvPrevio/detAvPrevio/dtPrevDeslig'], :data]],
32
- ['InfoAvisoPrevio_DetalhamentoAvisoPrevio_Observacao', evento['infoAvPrevio/detAvPrevio/observacao']],
33
- ['IdEventoXml', id_do_evento],
34
- ['NrReciboEventoOriginal', numero_do_recibo],
35
- ['RequestVerificationToken'],
36
- ['DescricaoProcEmi', processo_de_emissao_do_evento],
37
- ['VerProc', recibo['processamento/versaoAppProcessamento']]
38
- # rubocop:enable Layout/LineLength
39
- ]
10
+ ArquivoData::TRA_EPG_AVI.new(
11
+ Obj.new(
12
+ cpf_do_trabalhador: evento['ideVinculo/cpfTrab'],
13
+ matricula_do_trabalhador: matricula_do_trabalhador,
14
+ data_de_admissao: data_de_admissao,
15
+ tipo_do_aviso_previo: evento['infoAvPrevio/detAvPrevio/tpAvPrevio'],
16
+ data_do_aviso_previo: evento['infoAvPrevio/detAvPrevio/dtAvPrv'],
17
+ data_de_previsao_do_desligamento: evento['infoAvPrevio/detAvPrevio/dtPrevDeslig'],
18
+ observacao: evento['infoAvPrevio/detAvPrevio/observacao'],
19
+ id_do_evento: id_do_evento,
20
+ numero_do_recibo: numero_do_recibo,
21
+ processo_de_emissao_do_evento: processo_de_emissao_do_evento,
22
+ versao_do_aplicativo_de_processamento_do_evento: versao_do_aplicativo_de_processamento_do_evento
23
+ )
40
24
  )
41
25
  ]
42
26
  end
43
27
 
44
- def cpf_do_trabalhador
45
- @cpf_do_trabalhador ||= evento['ideVinculo/cpfTrab']
46
- end
47
-
48
28
  def matricula_do_trabalhador
49
29
  @matricula_do_trabalhador ||= evento['ideVinculo/matricula']
50
30
  end
@@ -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