teodoro 0.23.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b66ce64f14b472feb5f0b2b6e64692ac1cb49813146d31adb214b3fbd178f29
4
- data.tar.gz: 11e1a69da5a8b0cbad2804a64087396376453359893071be1cb37077e5c8dcd5
3
+ metadata.gz: bcea1e4536f700b64d01b42a2e251d36b338c4fae7db65fa21c2fe55530e76a0
4
+ data.tar.gz: 2b9d1f162f839a5491aa10a6b0aaf14743d43ff66147ab044d1690575a2e50f8
5
5
  SHA512:
6
- metadata.gz: 10b7771146638029c108ea4111afac2dff54f8ba1a9c29b9e20b9652d125c933a13f79b1af87f592ec4154c93fa560fecb3c4fe7915a2e237a75d5968d791a12
7
- data.tar.gz: 9fc0a9545bb95819172daf0605e8d89636dbd4e43bb89691a2a077b8be339bff58950d98bd8cb7884acd5e04b76d8d709faf2c9b8932b59af6a9c05884d800dc
6
+ metadata.gz: b80aea40f30926b8c6e308741c2de2ba4f96471783fa0af65f51fe67cdf1c475ed4f3e6c34b650d176eb79801d2e0b9f8e542b303133cb307c1f76b936ee82d7
7
+ data.tar.gz: 7ecee2520561d1051b35b3888313ab231ecb550e1ec9b28319841764bda3537ef76a8d8a9de3e4dc99bc5a8adb17e51ba146c1a330e23792c17efeec4a053778
data/lib/teodoro.rb CHANGED
@@ -12,7 +12,7 @@ require_relative 'teodoro/empresa'
12
12
  require_relative 'teodoro/obj'
13
13
 
14
14
  module Teodoro
15
- VERSION = '0.23.0'.freeze
15
+ VERSION = '0.27.0'.freeze
16
16
 
17
17
  CBOs = __FILE__
18
18
  .then { File.dirname(_1) }
@@ -27,11 +27,6 @@ module Teodoro
27
27
  Execution.new(args).call
28
28
  end
29
29
 
30
- @production = true
31
- def self.production?
32
- @production
33
- end
34
-
35
30
  class Execution
36
31
  NOME_DO_PROGRAMA = 'teodoro'.freeze
37
32
 
@@ -49,6 +44,7 @@ module Teodoro
49
44
  validar_argumentos
50
45
  validar_existencia_do_diretorio_de_origem
51
46
  validar_existencia_do_diretorio_de_destino
47
+ validar_que_diretorio_de_origem_nao_contem_arquivo
52
48
  validar_que_diretorio_de_origem_nao_esta_vazio
53
49
  validar_que_diretorio_de_destino_esta_vazio
54
50
  validar_que_nao_ha_nova_versao_disponivel
@@ -59,7 +55,7 @@ module Teodoro
59
55
  private
60
56
 
61
57
  def validar_argumentos
62
- erro "#{NOME_DO_PROGRAMA} [diretório de origem] [diretório de destino]" unless args.size == 2
58
+ erro("#{NOME_DO_PROGRAMA} [diretório de origem] [diretório de destino]", saiba_mais: true) unless args.size == 2
63
59
  end
64
60
 
65
61
  def validar_que_nao_ha_nova_versao_disponivel
@@ -113,16 +109,26 @@ module Teodoro
113
109
  @destino ||= args[1].tr('\\', '/')
114
110
  end
115
111
 
112
+ def validar_que_diretorio_de_origem_nao_contem_arquivo
113
+ return unless diretorio_de_origem_contem_arquivo?
114
+
115
+ erro('Diretório de origem deve conter apenas diretórios de empresa.', saiba_mais: true)
116
+ end
117
+
118
+ def diretorio_de_origem_contem_arquivo?
119
+ Dir[File.join(origem, '*')].any? { File.file?(_1) }
120
+ end
121
+
116
122
  def validar_que_diretorio_de_origem_nao_esta_vazio
117
- erro 'Diretório de origem vazio.' if Dir.empty?(origem)
123
+ erro('Diretório de origem vazio.', saiba_mais: true) if Dir.empty?(origem)
118
124
  end
119
125
 
120
126
  def validar_que_diretorio_de_destino_esta_vazio
121
- erro 'Diretório de destino deve estar vazio.' unless Dir.empty?(destino)
127
+ erro('Diretório de destino deve estar vazio.', saiba_mais: true) unless Dir.empty?(destino)
122
128
  end
123
129
 
124
- def erro(erro)
125
- puts erro
130
+ def erro(erro, saiba_mais: false)
131
+ puts [erro, *('Saiba mais em sites.google.com/fortestecnologia.com.br/teodoro.' if saiba_mais)]
126
132
  exit
127
133
  end
128
134
 
@@ -34,8 +34,6 @@ module Teodoro
34
34
 
35
35
  def initialize(codigo)
36
36
  @codigo = codigo
37
-
38
- alertar unless encontrado?
39
37
  end
40
38
 
41
39
  attr_reader :codigo
@@ -43,16 +41,15 @@ module Teodoro
43
41
  public
44
42
 
45
43
  def titulo
46
- CBOs[codigo] || codigo
44
+ CBOs[codigo] || begin
45
+ alertar_que_cbo_nao_foi_encontrado
46
+ codigo
47
+ end
47
48
  end
48
49
 
49
50
  private
50
51
 
51
- def encontrado?
52
- CBOs.key?(codigo)
53
- end
54
-
55
- def alertar
52
+ def alertar_que_cbo_nao_foi_encontrado
56
53
  puts "\n #{Rainbow("CBO #{codigo} não encontrado").yellow}"
57
54
  end
58
55
  end
@@ -49,6 +49,7 @@ module Teodoro
49
49
  ].freeze
50
50
 
51
51
  TIPOS_DE_EVENTO_RETIFICAVEIS = %w[
52
+ S2190
52
53
  S2200
53
54
  S2205
54
55
  S2206
@@ -126,11 +127,11 @@ module Teodoro
126
127
  end
127
128
 
128
129
  def validar_versao_do_leiaute
129
- raise unless [
130
- '02_04_01',
131
- '02_04_02',
132
- '02_05_00',
133
- *('_S_01_00_00' unless Teodoro.production?)
130
+ raise unless %w[
131
+ 02_04_01
132
+ 02_04_02
133
+ 02_05_00
134
+ _S_01_00_00
134
135
  ].include?(versao_do_leiaute)
135
136
  end
136
137
 
@@ -1,6 +1,8 @@
1
1
  require_relative 'arquivo_de_origem'
2
2
  require_relative 'arquivo_xml'
3
3
  require_relative 'empresa/arquivos_data'
4
+ require_relative 'empresa/arquivo_data_emp'
5
+ require_relative 'empresa/arquivo_data_rub'
4
6
  require_relative 'empresa/cargos_gerados'
5
7
  require_relative 'empresa/contratos_de_emprego'
6
8
  require_relative 'empresa/contratos_de_trabalho_sem_vinculo'
@@ -46,6 +48,7 @@ module Teodoro
46
48
  ordenar_arquivos_xml
47
49
  processar_arquivos_xml
48
50
  processar_cargos_gerados
51
+ setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
49
52
  ajustar_nome_do_ultimo_arquivo_emp_data
50
53
  end
51
54
 
@@ -149,6 +152,38 @@ module Teodoro
149
152
  cargos_gerados.each(&:processar)
150
153
  end
151
154
 
155
+ def setar_proximo_identificador_de_tabela_de_rubricas_nos_arquivos_data_emp
156
+ arquivos_data_emp.each(&:setar_proximo_identificador_de_tabela_de_rubricas)
157
+ end
158
+
159
+ def arquivos_data_emp
160
+ Dir[File.join(destino_dos_arquivos_data, 'EMP*.data')]
161
+ .map { ArquivoDataEMP.new(
162
+ caminho: _1,
163
+ proximo_identificador_de_tabela_de_rubricas: proximo_identificador_de_tabela_de_rubricas
164
+ ) }
165
+ end
166
+
167
+ def proximo_identificador_de_tabela_de_rubricas
168
+ (ultimo_identificador_de_tabela_de_rubricas || 0) + 1
169
+ end
170
+
171
+ def ultimo_identificador_de_tabela_de_rubricas
172
+ identificadores_de_tabela_de_rubrica
173
+ .select { _1&.match?(/^\d+$/) }
174
+ .map(&:to_i)
175
+ .max
176
+ end
177
+
178
+ def identificadores_de_tabela_de_rubrica
179
+ arquivos_data_rub.map(&:identificador_da_tabela_de_rubricas)
180
+ end
181
+
182
+ def arquivos_data_rub
183
+ Dir[File.join(destino_dos_arquivos_data, 'RUB*.data')]
184
+ .map { ArquivoDataRUB.new(_1) }
185
+ end
186
+
152
187
  def ajustar_nome_do_ultimo_arquivo_emp_data
153
188
  File.rename(caminho_do_ultimo_arquivo_emp_data, novo_caminho_do_ultimo_arquivo_emp_data)
154
189
  end
@@ -0,0 +1,33 @@
1
+ module Teodoro
2
+ class Empresa
3
+ class ArquivoDataEMP
4
+ private
5
+
6
+ def initialize(caminho:, proximo_identificador_de_tabela_de_rubricas:)
7
+ @caminho = caminho
8
+ @proximo_identificador_de_tabela_de_rubricas = proximo_identificador_de_tabela_de_rubricas
9
+ end
10
+
11
+ attr_reader :caminho, :proximo_identificador_de_tabela_de_rubricas
12
+
13
+ public
14
+
15
+ def setar_proximo_identificador_de_tabela_de_rubricas
16
+ File.write(caminho, novo_conteudo)
17
+ end
18
+
19
+ private
20
+
21
+ def novo_conteudo
22
+ conteudo_anterior.sub(
23
+ "\nESX_TABELARUBRICA=\n",
24
+ "\nESX_TABELARUBRICA=#{proximo_identificador_de_tabela_de_rubricas}\n"
25
+ )
26
+ end
27
+
28
+ def conteudo_anterior
29
+ File.read(caminho)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,30 @@
1
+ module Teodoro
2
+ class Empresa
3
+ class ArquivoDataRUB
4
+ private
5
+
6
+ def initialize(caminho)
7
+ @caminho = caminho
8
+ end
9
+
10
+ attr_reader :caminho
11
+
12
+ public
13
+
14
+ def identificador_da_tabela_de_rubricas
15
+ chaves_valores['IdTabelaRubrica']
16
+ end
17
+
18
+ private
19
+
20
+ def chaves_valores
21
+ File
22
+ .readlines(caminho)
23
+ .map(&:strip)
24
+ .map { _1.split('=') }
25
+ .map { _1.size == 2 ? _1 : [_1.first, nil] }
26
+ .to_h
27
+ end
28
+ end
29
+ end
30
+ end
@@ -30,8 +30,8 @@ module Teodoro
30
30
  ['FimValidade', fim_da_validade, :mes_ano],
31
31
  ['DadosFuncao_DescricaoFuncao', evento['infoFuncao/*/dadosFuncao/dscFuncao']],
32
32
  ['DadosFuncao_CodigoCBO', codigo_do_cbo],
33
- ['DadosFuncao_CodigoCBO_TEXT', codigo_e_descricao_do_cbo],
34
- ['DadosFuncao_DescricaoCBO', codigo_e_descricao_do_cbo],
33
+ ['DadosFuncao_CodigoCBO_TEXT', codigo_e_titulo_do_cbo],
34
+ ['DadosFuncao_DescricaoCBO', codigo_e_titulo_do_cbo],
35
35
  ['IdEventoXml', id_do_evento],
36
36
  ['NrReciboEventoOriginal', numero_do_recibo],
37
37
  ['DescricaoProcEmi', processo_de_emissao_do_evento],
@@ -43,12 +43,19 @@ module Teodoro
43
43
  @codigo_do_cbo ||= evento['infoFuncao/*/dadosFuncao/codCBO']
44
44
  end
45
45
 
46
- def codigo_e_descricao_do_cbo
47
- @codigo_e_descricao_do_cbo ||= "#{codigo_do_cbo} - #{descricao_do_cbo}"
46
+ def codigo_e_titulo_do_cbo
47
+ @codigo_e_titulo_do_cbo ||= "#{codigo_do_cbo} - #{titulo_do_cbo}"
48
48
  end
49
49
 
50
- def descricao_do_cbo
51
- CBOs[codigo_do_cbo] || codigo_do_cbo
50
+ def titulo_do_cbo
51
+ CBOs[codigo_do_cbo] || begin
52
+ alertar_que_cbo_nao_foi_encontrado
53
+ codigo_do_cbo
54
+ end
55
+ end
56
+
57
+ def alertar_que_cbo_nao_foi_encontrado
58
+ puts "\n #{Rainbow("CBO #{codigo_do_cbo} não encontrado").yellow}"
52
59
  end
53
60
  end
54
61
  end
@@ -207,6 +207,7 @@ module Teodoro
207
207
  de_acordo_com_a_versao_do_leiaute['EventoAdmissao_InfoVinculo_InfoContrato_HorarioContratual_TipoJornada'],
208
208
  de_acordo_com_a_versao_do_leiaute['EventoAdmissao_InfoVinculo_InfoContrato_HorarioContratual_DescricaoTipoJornada'],
209
209
  ['EventoAdmissao_InfoVinculo_InfoContrato_HorarioContratual_JornadaTempoParcial', evento['vinculo/infoContrato/horContratual/tmpParc']],
210
+ *([['HorarioNoturno', evento['vinculo/infoContrato/horContratual/horNoturno']]] if leiaute_simplificado?),
210
211
  ['EventoAdmissao_InfoVinculo_DataInicioAfastamento', evento['vinculo/afastamento/dtIniAfast'], :data],
211
212
  ['EventoAdmissao_InfoVinculo_CodigoMotivoAfastamento', evento['vinculo/afastamento/codMotAfast']],
212
213
  ['EventoAdmissao_InfoVinculo_SucessaoVinculo_DataTransferencia', evento['vinculo/sucessaoVinc/dtTransf'], :data],
@@ -187,6 +187,7 @@ module Teodoro
187
187
  ['InformacoesContrato_HorarioContratual_TipoJornada', evento['altContratual/vinculo/infoContrato/horContratual/tpJornada'].then { %w[2 3].include?(_1) ? _1 : 9 }],
188
188
  ['InformacoesContrato_HorarioContratual_JornadaTempoParcial', evento['altContratual/vinculo/infoContrato/horContratual/tmpParc']],
189
189
  ['InformacoesContrato_HorarioContratual_QuantidadedHorasSemanal', evento['altContratual/vinculo/infoContrato/horContratual/qtdHrsSem'], :decimal],
190
+ ['HorarioNoturno', evento['altContratual/vinculo/infoContrato/horContratual/horNoturno']],
190
191
  ['InformacoesContrato_HorarioContratual_DescricaoTipoJornada', evento['altContratual/vinculo/infoContrato/horContratual/dscJorn']],
191
192
  ['InformacoesContrato_CodigoCargo', codigo_do_cargo],
192
193
  ['InformacoesContrato_DataTermino', evento['altContratual/vinculo/infoContrato/duracao/dtTerm'], :data]
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.23.0
4
+ version: 0.27.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-05-05 00:00:00.000000000 Z
11
+ date: 2021-05-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -199,6 +199,8 @@ files:
199
199
  - lib/teodoro/cnpj.rb
200
200
  - lib/teodoro/console.rb
201
201
  - lib/teodoro/empresa.rb
202
+ - lib/teodoro/empresa/arquivo_data_emp.rb
203
+ - lib/teodoro/empresa/arquivo_data_rub.rb
202
204
  - lib/teodoro/empresa/arquivos_data.rb
203
205
  - lib/teodoro/empresa/cargos_gerados.rb
204
206
  - lib/teodoro/empresa/contratos_de_emprego.rb