teodoro 0.42.1 → 0.43.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: 23d7496d9f0dfe8a4d7a8bd35718f1fd07b12a6ea135c8397a71c9acd0119f5f
4
- data.tar.gz: e9f7413d247b53090fa21779cf74322482f6d9bc7754ac20c01ea522c28d4057
3
+ metadata.gz: cf88a31a4339c95e7f0108dba975e403a5217340ad029c36871f4d708edfea5e
4
+ data.tar.gz: d09d2097001890c555432b2a57953063891521ae47585fa78011a0825aa7269f
5
5
  SHA512:
6
- metadata.gz: cb18a1c15a107971a7c358176379e2a9699c7d008b3da55d9aa3cea760e282e4b4767b655bc4aa6c5326e4232bf536e5988f0fa4e901eaac4a29b02664133409
7
- data.tar.gz: 31e947a06a83fbb496a496cac750e562b6d2a3bdcc3e010b5af07036ca5a4431559346847b491e43f417bfac44124434d4274dab1f44ced3c02a80deac6e3cee
6
+ metadata.gz: 5b03b7f0ed0b82e17479bb1bf38e98a52b6dd854fe4cb6aea6a5375cbeba4ce918acf0bd0ea57a1e1ebcc64ca5288dcf92b59c481a1522e790c00a294e674647
7
+ data.tar.gz: 4efa4883887be4cddec1316d5ab8de36b12ea6dc3d6162c7446b5dc92578ab449ad2ccab225c2186ebc7215968faf1e8882c7f9959f1dbd7592f72e7e01a6075
@@ -0,0 +1,53 @@
1
+ module Teodoro
2
+ class ArquivoData
3
+ module FUN
4
+ module Identificacao
5
+ def self.new(codigo_da_funcao)
6
+ ['FUN', codigo_da_funcao]
7
+ end
8
+ end
9
+
10
+ module ItensDeConteudo
11
+ def self.new(dados) # rubocop:disable Metrics/MethodLength
12
+ [
13
+ ['CodigoFuncao', dados.codigo_da_funcao],
14
+ ['InicioValidade', dados.inicio_da_validade, :mes_ano],
15
+ ['FimValidade', dados.fim_da_validade, :mes_ano],
16
+ ['DadosFuncao_DescricaoFuncao', dados.nome_da_funcao],
17
+ ['DadosFuncao_CodigoCBO', dados.cbo],
18
+ ['DadosFuncao_CodigoCBO_TEXT', "#{dados.cbo} - #{CBO.new(dados.cbo).titulo}"],
19
+ ['IdEventoXml', dados.id_do_evento],
20
+ ['NrReciboEventoOriginal', dados.numero_do_recibo],
21
+ ['DescricaoProcEmi', dados.processo_de_emissao_do_evento],
22
+ ['VerProc', dados.versao_do_processo_de_emissao_do_evento]
23
+ ]
24
+ end
25
+
26
+ class CBO
27
+ private
28
+
29
+ def initialize(codigo)
30
+ @codigo = codigo
31
+ end
32
+
33
+ attr_reader :codigo
34
+
35
+ public
36
+
37
+ def titulo
38
+ CBOs[codigo] || begin
39
+ alertar_que_cbo_nao_foi_encontrado
40
+ codigo
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ def alertar_que_cbo_nao_foi_encontrado
47
+ puts "\n #{Rainbow("CBO #{codigo} não encontrado").yellow}"
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,4 +1,5 @@
1
1
  require_relative 'arquivo_data/car'
2
+ require_relative 'arquivo_data/fun'
2
3
  require_relative 'arquivo_data/tra_epg_avi'
3
4
 
4
5
  module Teodoro
data/lib/teodoro/cnpj.rb CHANGED
@@ -52,9 +52,9 @@ module Teodoro
52
52
  string.chars
53
53
  .reverse
54
54
  .map(&:to_i)
55
- .map.with_index { |digito, indice| [digito, indice % 8 + 2] }
55
+ .map.with_index { |digito, indice| [digito, (indice % 8) + 2] }
56
56
  .sum { |digito, peso| digito * peso }
57
- .then { |r| 11 - r % 11 }
57
+ .then { |r| 11 - (r % 11) }
58
58
  .then { |r| r >= 10 ? 0 : r }
59
59
  .to_s
60
60
  end
@@ -0,0 +1,86 @@
1
+ module Teodoro
2
+ class Empresa
3
+ class FuncoesGeradas
4
+ private
5
+
6
+ def initialize(empresa)
7
+ @empresa = empresa
8
+ end
9
+
10
+ attr_reader :empresa
11
+
12
+ public
13
+
14
+ extend Forwardable
15
+
16
+ def_delegators :funcoes, :each
17
+
18
+ def [](nome:, cbo:)
19
+ indice[nome: nome, cbo: cbo] ||= Funcao.new(empresa: empresa, dados: Obj.new(nome: nome, cbo: cbo)) if nome
20
+ end
21
+
22
+ private
23
+
24
+ def funcoes
25
+ indice.values
26
+ end
27
+
28
+ def indice
29
+ @indice ||= {}
30
+ end
31
+
32
+ class Funcao
33
+ private
34
+
35
+ def initialize(empresa:, dados:)
36
+ @empresa = empresa
37
+ @dados = dados
38
+ end
39
+
40
+ attr_reader :empresa
41
+
42
+ public
43
+
44
+ attr_reader :dados
45
+
46
+ def codigo
47
+ @codigo ||= SecureRandom.hex(15)
48
+ end
49
+
50
+ def processar
51
+ criar_arquivo_data
52
+ end
53
+
54
+ private
55
+
56
+ def criar_arquivo_data
57
+ arquivo_data.criar
58
+ end
59
+
60
+ def arquivo_data # rubocop:disable Metrics/MethodLength
61
+ ArquivoData.new(
62
+ diretorio: empresa.destino_dos_arquivos_data,
63
+ nome: ArquivoDeEventoDeTabela::NomeDoArquivoData.new(
64
+ identificacao: ArquivoData::FUN::Identificacao.new(codigo),
65
+ inicio_da_validade: empresa.inicio_da_validade
66
+ ),
67
+ itens_do_conteudo: ArquivoData::FUN::ItensDeConteudo.new(
68
+ Obj.new(
69
+ codigo_da_funcao: codigo,
70
+ inicio_da_validade: empresa.inicio_da_validade,
71
+ fim_da_validade: nil,
72
+ nome_da_funcao: dados.nome,
73
+ cbo: dados.cbo,
74
+ orgao_publico?: false,
75
+ id_do_evento: nil,
76
+ numero_do_recibo: nil,
77
+ processo_de_emissao_do_evento: nil,
78
+ versao_do_processo_de_emissao_do_evento: nil
79
+ )
80
+ )
81
+ )
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
@@ -6,6 +6,7 @@ require_relative 'empresa/arquivo_data_rub'
6
6
  require_relative 'empresa/cargos_gerados'
7
7
  require_relative 'empresa/contratos_de_emprego'
8
8
  require_relative 'empresa/contratos_de_trabalho_sem_vinculo'
9
+ require_relative 'empresa/funcoes_geradas'
9
10
  require_relative 'empresa/trabalhadores'
10
11
 
11
12
  module Teodoro
@@ -49,6 +50,7 @@ module Teodoro
49
50
  ordenar_arquivos_xml
50
51
  processar_arquivos_xml
51
52
  processar_cargos_gerados
53
+ processar_funcoes_geradas
52
54
  setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
53
55
  ajustar_nome_do_ultimo_arquivo_emp_data
54
56
  end
@@ -77,6 +79,10 @@ module Teodoro
77
79
  @cargos_gerados ||= CargosGerados.new(self)
78
80
  end
79
81
 
82
+ def funcoes_geradas
83
+ @funcoes_geradas ||= FuncoesGeradas.new(self)
84
+ end
85
+
80
86
  private
81
87
 
82
88
  def dar_feedback_para_o_usuario
@@ -157,6 +163,10 @@ module Teodoro
157
163
  cargos_gerados.each(&:processar)
158
164
  end
159
165
 
166
+ def processar_funcoes_geradas
167
+ funcoes_geradas.each(&:processar)
168
+ end
169
+
160
170
  def setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
161
171
  arquivos_data_emp.each(&:setar_proximo_identificador_de_tabela_de_rubricas)
162
172
  end
@@ -260,6 +260,7 @@ module Teodoro
260
260
  leiaute['EventoAdmissao_InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_InfoFgts_OptanteFGTS'],
261
261
  leiaute['EventoAdmissao_InfoVinculo_InformacoesRegimeTrabalhista_InformacoesTrabalhadorCeletista_InfoFgts_DataOpcaoFGTS'],
262
262
  leiaute['EventoAdmissao_InfoVinculo_InfoContrato_CodigoCargo'],
263
+ leiaute['EventoAdmissao_InfoVinculo_InfoContrato_CodigoFuncao'],
263
264
  ['EventoAdmissao_InfoVinculo_InfoContrato_Duracao_DataTermino', evento['vinculo/infoContrato/duracao/dtTerm'], :data],
264
265
  ['EventoAdmissao_InfoVinculo_InfoContrato_Duracao_ClausulaAssecuratoria', evento['vinculo/infoContrato/duracao/clauAssec']],
265
266
  ['EventoAdmissao_InfoVinculo_InfoContrato_LocalTrabalho_LocalTrabalhoGeral_TipoInscricao', evento['vinculo/infoContrato/localTrabalho/localTrabGeral/tpInsc']],
@@ -367,6 +368,10 @@ module Teodoro
367
368
  [
368
369
  'EventoAdmissao_InfoVinculo_InfoContrato_CodigoCargo',
369
370
  evento['vinculo/infoContrato/codCargo']
371
+ ],
372
+ [
373
+ 'EventoAdmissao_InfoVinculo_InfoContrato_CodigoFuncao',
374
+ evento['vinculo/infoContrato/codFuncao']
370
375
  ]
371
376
  # rubocop:enable Layout/LineLength
372
377
  ]
@@ -452,6 +457,10 @@ module Teodoro
452
457
  [
453
458
  'EventoAdmissao_InfoVinculo_InfoContrato_CodigoCargo',
454
459
  codigo_do_cargo
460
+ ],
461
+ [
462
+ 'EventoAdmissao_InfoVinculo_InfoContrato_CodigoFuncao',
463
+ codigo_da_funcao
455
464
  ]
456
465
  # rubocop:enable Layout/LineLength
457
466
  ]
@@ -467,6 +476,17 @@ module Teodoro
467
476
  cbo: evento['vinculo/infoContrato/CBOCargo']
468
477
  ]
469
478
  end
479
+
480
+ def codigo_da_funcao
481
+ funcao&.codigo
482
+ end
483
+
484
+ def funcao
485
+ empresa.funcoes_geradas[
486
+ nome: evento['vinculo/infoContrato/nmFuncao'],
487
+ cbo: evento['vinculo/infoContrato/CBOFuncao']
488
+ ]
489
+ end
470
490
  end
471
491
  end
472
492
  end
@@ -134,6 +134,7 @@ module Teodoro
134
134
  ['InformacoesContrato_HorarioContratual_QuantidadeHorasSemanal', evento['altContratual/infoContrato/horContratual/qtdHrsSem'], :decimal],
135
135
  ['InformacoesContrato_HorarioContratual_DescricaoTipoJornada', evento['altContratual/infoContrato/horContratual/dscTpJorn']],
136
136
  ['InformacoesContrato_CodigoCargo', evento['altContratual/infoContrato/codCargo']],
137
+ ['InformacoesContrato_CodigoFuncao', evento['altContratual/infoContrato/codFuncao']],
137
138
  ['InformacoesContrato_DataTermino', evento['altContratual/infoContrato/duracao/dtTerm'], :data]
138
139
  # rubocop:enable Layout/LineLength
139
140
  ]
@@ -190,6 +191,7 @@ module Teodoro
190
191
  ['HorarioNoturno', evento['altContratual/vinculo/infoContrato/horContratual/horNoturno']],
191
192
  ['InformacoesContrato_HorarioContratual_DescricaoTipoJornada', evento['altContratual/vinculo/infoContrato/horContratual/dscJorn']],
192
193
  ['InformacoesContrato_CodigoCargo', codigo_do_cargo],
194
+ ['InformacoesContrato_CodigoFuncao', codigo_da_funcao],
193
195
  ['InformacoesContrato_DataTermino', evento['altContratual/vinculo/infoContrato/duracao/dtTerm'], :data]
194
196
  # rubocop:enable Layout/LineLength
195
197
  ]
@@ -205,6 +207,17 @@ module Teodoro
205
207
  cbo: evento['altContratual/vinculo/infoContrato/CBOCargo']
206
208
  ]
207
209
  end
210
+
211
+ def codigo_da_funcao
212
+ funcao&.codigo
213
+ end
214
+
215
+ def funcao
216
+ empresa.funcoes_geradas[
217
+ nome: evento['altContratual/vinculo/infoContrato/nmFuncao'],
218
+ cbo: evento['altContratual/vinculo/infoContrato/CBOFuncao']
219
+ ]
220
+ end
208
221
  end
209
222
  end
210
223
  end
@@ -235,6 +235,7 @@ module Teodoro
235
235
  ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_TipoLogradouro', trabalhador.endereco.tipo_de_logradouro],
236
236
  ['EventoAdmissao_InfoTrabalhador_InfoEndereco_EnderecoResidencialBR_Uf', trabalhador.endereco.uf],
237
237
  leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo'],
238
+ leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao'],
238
239
  leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_OptanteFGTS'],
239
240
  leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoFgts_DataOpcaoFGTS'],
240
241
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_Remuneracao_UnidadeSalarioFixo', evento['infoTSVInicio/infoComplementares/remuneracao/undSalFixo']],
@@ -308,6 +309,10 @@ module Teodoro
308
309
  [
309
310
  'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo',
310
311
  evento['infoTSVInicio/infoComplementares/cargoFuncao/codCargo']
312
+ ],
313
+ [
314
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao',
315
+ evento['infoTSVInicio/infoComplementares/cargoFuncao/codFuncao']
311
316
  ]
312
317
  ]
313
318
  end
@@ -354,6 +359,10 @@ module Teodoro
354
359
  [
355
360
  'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo',
356
361
  codigo_do_cargo
362
+ ],
363
+ [
364
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao',
365
+ codigo_da_funcao
357
366
  ]
358
367
  ]
359
368
  end
@@ -368,6 +377,17 @@ module Teodoro
368
377
  cbo: evento['infoTSVInicio/infoComplementares/cargoFuncao/CBOCargo']
369
378
  ]
370
379
  end
380
+
381
+ def codigo_da_funcao
382
+ funcao&.codigo
383
+ end
384
+
385
+ def funcao
386
+ empresa.funcoes_geradas[
387
+ nome: evento['infoTSVInicio/infoComplementares/cargoFuncao/nmFuncao'],
388
+ cbo: evento['infoTSVInicio/infoComplementares/cargoFuncao/CBOFuncao']
389
+ ]
390
+ end
371
391
  end
372
392
  end
373
393
  end
@@ -32,7 +32,7 @@ module Teodoro
32
32
  ['EventoAdmissao_InformacoesInicio_CodigoCategoria', categoria_do_trabalhador],
33
33
  ['EventoAdmissao_InformacoesInicio_NaturezaAtividade', evento['infoTSVAlteracao/natAtividade']],
34
34
  leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo'],
35
- ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao', evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codFuncao']],
35
+ leiaute['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao'],
36
36
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_Remuneracao_UnidadeSalarioFixo', evento['infoTSVAlteracao/infoComplementares/remuneracao/undSalFixo']],
37
37
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_Remuneracao_ValorSalarioFixo', evento['infoTSVAlteracao/infoComplementares/remuneracao/vrSalFx'], :decimal],
38
38
  ['EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoEstagiario_AreaAtuacao', evento['infoTSVAlteracao/infoComplementares/infoEstagiario/areaAtuacao']],
@@ -93,21 +93,102 @@ module Teodoro
93
93
  @data_da_alteracao ||= evento['infoTSVAlteracao/dtAlteracao']
94
94
  end
95
95
 
96
- def leiaute # rubocop:disable Metrics/MethodLength
96
+ def leiaute
97
97
  @leiaute ||=
98
+ if leiaute_simplificado?
99
+ LeiauteSimplificado.new(empresa: empresa, evento: evento)
100
+ else
101
+ Leiaute2.new(evento)
102
+ end
103
+ end
104
+
105
+ module Leiaute
106
+ private
107
+
108
+ attr_reader :evento
109
+
110
+ public
111
+
112
+ def [](chave)
113
+ indice[chave]
114
+ end
115
+
116
+ private
117
+
118
+ def indice
119
+ @indice ||= chaves_valores.map { [_1.first, _1] }.to_h
120
+ end
121
+ end
122
+
123
+ class Leiaute2
124
+ include Leiaute
125
+
126
+ private
127
+
128
+ def initialize(evento)
129
+ @evento = evento
130
+ end
131
+
132
+ def chaves_valores
133
+ [
134
+ [
135
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo',
136
+ evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codCargo']
137
+ ],
138
+ [
139
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao',
140
+ evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codFuncao']
141
+ ]
142
+ ]
143
+ end
144
+ end
145
+
146
+ class LeiauteSimplificado
147
+ include Leiaute
148
+
149
+ private
150
+
151
+ def initialize(empresa:, evento:)
152
+ @empresa = empresa
153
+ @evento = evento
154
+ end
155
+
156
+ attr_reader :empresa
157
+
158
+ def chaves_valores
98
159
  [
99
160
  [
100
161
  'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoCargo',
101
- if leiaute_simplificado?
102
- empresa.cargos_gerados[
103
- nome: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/nmCargo'],
104
- cbo: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/CBOCargo']
105
- ]&.codigo
106
- else
107
- evento['infoTSVAlteracao/infoComplementares/cargoFuncao/codCargo']
108
- end
162
+ codigo_do_cargo
163
+ ],
164
+ [
165
+ 'EventoAdmissao_InformacoesInicio_InformacoesComplementares_InfoCargoFuncao_CodigoFuncao',
166
+ codigo_da_funcao
109
167
  ]
110
- ].map { [_1.first, _1] }.to_h
168
+ ]
169
+ end
170
+
171
+ def codigo_do_cargo
172
+ cargo&.codigo
173
+ end
174
+
175
+ def cargo
176
+ empresa.cargos_gerados[
177
+ nome: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/nmCargo'],
178
+ cbo: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/CBOCargo']
179
+ ]
180
+ end
181
+
182
+ def codigo_da_funcao
183
+ funcao&.codigo
184
+ end
185
+
186
+ def funcao
187
+ empresa.funcoes_geradas[
188
+ nome: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/nmFuncao'],
189
+ cbo: evento['infoTSVAlteracao/infoComplementares/cargoFuncao/CBOFuncao']
190
+ ]
191
+ end
111
192
  end
112
193
  end
113
194
  end
@@ -1,3 +1,3 @@
1
1
  module Teodoro
2
- VERSION = '0.42.1'.freeze
2
+ VERSION = '0.43.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.42.1
4
+ version: 0.43.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clavius Tales
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-21 00:00:00.000000000 Z
11
+ date: 2021-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -191,6 +191,7 @@ files:
191
191
  - lib/teodoro.rb
192
192
  - lib/teodoro/arquivo_data.rb
193
193
  - lib/teodoro/arquivo_data/car.rb
194
+ - lib/teodoro/arquivo_data/fun.rb
194
195
  - lib/teodoro/arquivo_data/tra_epg_avi.rb
195
196
  - lib/teodoro/arquivo_de_evento.rb
196
197
  - lib/teodoro/arquivo_de_evento_de_tabela.rb
@@ -206,6 +207,7 @@ files:
206
207
  - lib/teodoro/empresa/cargos_gerados.rb
207
208
  - lib/teodoro/empresa/contratos_de_emprego.rb
208
209
  - lib/teodoro/empresa/contratos_de_trabalho_sem_vinculo.rb
210
+ - lib/teodoro/empresa/funcoes_geradas.rb
209
211
  - lib/teodoro/empresa/trabalhadores.rb
210
212
  - lib/teodoro/leiaute/arquivo_s1000.rb
211
213
  - lib/teodoro/leiaute/arquivo_s1005.rb