teodoro 0.50.0 → 0.51.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.
- checksums.yaml +4 -4
- data/lib/teodoro/arquivo_data/tra_epg_avi.rb +4 -0
- data/lib/teodoro/arquivo_data.rb +100 -32
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +3 -3
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +13 -6
- data/lib/teodoro/arquivo_xml.rb +7 -3
- data/lib/teodoro/empresa/arquivo_de_dados_gerais.rb +2 -2
- data/lib/teodoro/empresa/cargos_gerados.rb +3 -3
- data/lib/teodoro/empresa/contratos_de_emprego.rb +0 -8
- data/lib/teodoro/empresa/contratos_de_trabalho_sem_vinculo.rb +0 -8
- data/lib/teodoro/empresa/funcoes_geradas.rb +3 -3
- data/lib/teodoro/empresa.rb +21 -17
- data/lib/teodoro/leiaute/arquivo_s1000.rb +1 -1
- data/lib/teodoro/leiaute/arquivo_s2190.rb +1 -0
- data/lib/teodoro/leiaute/arquivo_s2200.rb +152 -136
- data/lib/teodoro/leiaute/arquivo_s2205.rb +173 -97
- data/lib/teodoro/leiaute/arquivo_s2206.rb +19 -2
- data/lib/teodoro/leiaute/arquivo_s2210.rb +1 -0
- data/lib/teodoro/leiaute/arquivo_s2220.rb +1 -0
- data/lib/teodoro/leiaute/arquivo_s2230.rb +18 -6
- data/lib/teodoro/leiaute/arquivo_s2240.rb +1 -0
- data/lib/teodoro/leiaute/arquivo_s2299.rb +8 -97
- data/lib/teodoro/leiaute/arquivo_s2300.rb +120 -4
- data/lib/teodoro/leiaute/arquivo_s2306.rb +21 -1
- data/lib/teodoro/leiaute/arquivo_s2399.rb +5 -59
- data/lib/teodoro/leiaute/arquivo_s2500.rb +1 -0
- data/lib/teodoro/leiaute/arquivo_s2501.rb +1 -0
- data/lib/teodoro/version.rb +1 -1
- metadata +2 -3
- data/lib/teodoro/leiaute/arquivo_s3000.rb +0 -80
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4b56a0b10de8ab5ef5d882108e4a2a9242142e1ecb66c0ae73347746b8ebdd8f
|
4
|
+
data.tar.gz: 0de207a68296af5d14b7e6eb4973ee09f52b265606d61335dd1c7dae29bd4ad6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13de1c51e869027efd596cab712fd97683bccd8c6cea8afc624e86d9c475abe52b81ef69bba4c042610047bb6098623f852a4270a33b28105408142112b84a75
|
7
|
+
data.tar.gz: 6de6a031a3d78e24a553d07e3e06664ad6ae71482aced0ed6d51a0682fa7beb58952f5b1c40f4365918f8da78aaae3c6a3d98200491d511ae9824fc50b14f53f
|
data/lib/teodoro/arquivo_data.rb
CHANGED
@@ -6,8 +6,9 @@ module Teodoro
|
|
6
6
|
class ArquivoData
|
7
7
|
private
|
8
8
|
|
9
|
-
def initialize(diretorio:, nome:, itens_do_conteudo:)
|
9
|
+
def initialize(diretorio:, nome:, itens_do_conteudo:, operacao: :inclusao)
|
10
10
|
@diretorio = diretorio
|
11
|
+
@operacao = operacao
|
11
12
|
@nome = nome
|
12
13
|
@itens_do_conteudo = itens_do_conteudo
|
13
14
|
end
|
@@ -16,31 +17,59 @@ module Teodoro
|
|
16
17
|
|
17
18
|
public
|
18
19
|
|
19
|
-
attr_reader :nome
|
20
|
+
attr_reader :operacao, :nome
|
20
21
|
|
21
|
-
def
|
22
|
-
|
22
|
+
def salvar
|
23
|
+
if inclusao_de_arquivo?
|
24
|
+
raise 'evento duplicado' if File.exist?(caminho)
|
25
|
+
elsif atualizacao_de_arquivo?
|
26
|
+
raise 'evento não encontrado' unless File.exist?(caminho)
|
27
|
+
|
28
|
+
salvar_conteudo_do_arquivo_original
|
29
|
+
end
|
23
30
|
|
24
31
|
File.open(caminho, 'w') do |file|
|
25
|
-
file.puts(
|
32
|
+
file.puts(linhas_do_arquivo)
|
26
33
|
end
|
27
34
|
end
|
28
35
|
|
29
36
|
private
|
30
37
|
|
38
|
+
def inclusao_de_arquivo?
|
39
|
+
operacao == :inclusao
|
40
|
+
end
|
41
|
+
|
42
|
+
def atualizacao_de_arquivo?
|
43
|
+
operacao == :atualizacao
|
44
|
+
end
|
45
|
+
|
46
|
+
def salvar_conteudo_do_arquivo_original
|
47
|
+
chaves_valores_do_arquivo_original
|
48
|
+
end
|
49
|
+
|
50
|
+
def chaves_valores_do_arquivo_original
|
51
|
+
@chaves_valores_do_arquivo_original ||=
|
52
|
+
File
|
53
|
+
.readlines(caminho)
|
54
|
+
.to_h { _1.match(/^(.+)=(.*)$/)[1..2] }
|
55
|
+
end
|
56
|
+
|
31
57
|
def caminho
|
32
58
|
@caminho ||= Caminho.new(diretorio: diretorio, nome_do_arquivo: nome)
|
33
59
|
end
|
34
60
|
|
35
|
-
def
|
36
|
-
|
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}" }
|
61
|
+
def linhas_do_arquivo
|
62
|
+
chaves_valores.map { |chave, valor| "#{chave}=#{valor}" }
|
40
63
|
end
|
41
64
|
|
42
|
-
def
|
43
|
-
itens_do_conteudo.
|
65
|
+
def chaves_valores
|
66
|
+
ChavesValores.new(itens_do_conteudo).then do |chaves_valores|
|
67
|
+
if inclusao_de_arquivo?
|
68
|
+
chaves_valores
|
69
|
+
elsif atualizacao_de_arquivo?
|
70
|
+
chaves_valores_do_arquivo_original.merge(chaves_valores)
|
71
|
+
end
|
72
|
+
end
|
44
73
|
end
|
45
74
|
|
46
75
|
class Caminho
|
@@ -64,33 +93,72 @@ module Teodoro
|
|
64
93
|
end
|
65
94
|
end
|
66
95
|
|
67
|
-
class
|
68
|
-
|
69
|
-
bool: proc { _1 ? 'True' : 'False' },
|
70
|
-
data: proc { "#{_1[-2..]}/#{_1[5..6]}/#{_1[0..3]}" if _1 },
|
71
|
-
data_aaaammdd: proc { _1.delete('-') if _1 },
|
72
|
-
decimal: proc { _1.tr('.', ',') if _1 },
|
73
|
-
mes_ano: proc { "#{_1[-2..]}/#{_1[0..3]}" if _1 },
|
74
|
-
vazio: proc {}
|
75
|
-
}.freeze
|
96
|
+
class ChavesValores
|
97
|
+
extend Forwardable
|
76
98
|
|
77
|
-
|
99
|
+
def initialize(itens)
|
100
|
+
@itens = itens
|
101
|
+
.map { Item.new(*_1) }
|
102
|
+
.select(&:selecionar?)
|
103
|
+
.map { [_1.chave, _1.valor] }
|
104
|
+
end
|
105
|
+
|
106
|
+
def_delegators :itens, :map
|
78
107
|
|
79
|
-
def
|
80
|
-
|
81
|
-
@formato = formato
|
108
|
+
def to_hash
|
109
|
+
itens.to_h
|
82
110
|
end
|
83
111
|
|
84
|
-
|
112
|
+
private
|
85
113
|
|
86
|
-
|
114
|
+
attr_reader :itens
|
87
115
|
|
88
|
-
|
89
|
-
|
90
|
-
|
116
|
+
class Item
|
117
|
+
def initialize(*args)
|
118
|
+
@chave = args[0]
|
119
|
+
@valor = Valor.new(args[1], formato: args.size == 1 ? :vazio : args[2])
|
120
|
+
@opcoes = args[3] || {}
|
121
|
+
end
|
122
|
+
|
123
|
+
attr_reader :chave, :valor
|
124
|
+
|
125
|
+
def selecionar?
|
126
|
+
!valor.vazio? || opcoes[:manter_se_vazio]
|
127
|
+
end
|
128
|
+
|
129
|
+
private
|
130
|
+
|
131
|
+
attr_reader :opcoes
|
132
|
+
|
133
|
+
class Valor
|
134
|
+
FORMATADORES = {
|
135
|
+
bool: proc { _1 ? 'True' : 'False' },
|
136
|
+
data: proc { "#{_1[-2..]}/#{_1[5..6]}/#{_1[0..3]}" if _1 },
|
137
|
+
data_aaaammdd: proc { _1.delete('-') if _1 },
|
138
|
+
decimal: proc { _1.tr('.', ',') if _1 },
|
139
|
+
mes_ano: proc { "#{_1[-2..]}/#{_1[0..3]}" if _1 },
|
140
|
+
vazio: proc {}
|
141
|
+
}.freeze
|
142
|
+
|
143
|
+
private
|
144
|
+
|
145
|
+
def initialize(valor, formato:)
|
146
|
+
@valor = valor
|
147
|
+
@formato = formato
|
148
|
+
end
|
149
|
+
|
150
|
+
attr_reader :valor, :formato
|
151
|
+
|
152
|
+
public
|
153
|
+
|
154
|
+
def vazio?
|
155
|
+
to_s.empty? && formato != :vazio
|
156
|
+
end
|
91
157
|
|
92
|
-
|
93
|
-
|
158
|
+
def to_s
|
159
|
+
@to_s ||= (formato ? FORMATADORES[formato].call(valor) : valor).to_s
|
160
|
+
end
|
161
|
+
end
|
94
162
|
end
|
95
163
|
end
|
96
164
|
end
|
@@ -6,7 +6,7 @@ module Teodoro
|
|
6
6
|
deletar_arquivo_data_original if alteracao? || exclusao?
|
7
7
|
return if exclusao?
|
8
8
|
|
9
|
-
|
9
|
+
salvar_arquivo_data
|
10
10
|
end
|
11
11
|
|
12
12
|
private
|
@@ -46,8 +46,8 @@ module Teodoro
|
|
46
46
|
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo, 'iniValid']
|
47
47
|
end
|
48
48
|
|
49
|
-
def
|
50
|
-
arquivo_data.
|
49
|
+
def salvar_arquivo_data
|
50
|
+
arquivo_data.salvar
|
51
51
|
end
|
52
52
|
|
53
53
|
def inicio_da_validade
|
@@ -3,26 +3,32 @@ module Teodoro
|
|
3
3
|
include ArquivoDeEvento
|
4
4
|
|
5
5
|
def processar
|
6
|
+
return if exclusao?
|
7
|
+
|
6
8
|
if retificado?
|
7
9
|
processar_retificacao
|
8
10
|
else
|
9
11
|
registrar_arquivos_data
|
10
|
-
|
12
|
+
salvar_arquivos_data
|
11
13
|
end
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
15
17
|
|
18
|
+
def exclusao?
|
19
|
+
empresa.recibos_dos_eventos_excluidos.include?(numero_do_recibo)
|
20
|
+
end
|
21
|
+
|
16
22
|
def retificado?
|
17
23
|
arquivo_xml_de_retificacao
|
18
24
|
end
|
19
25
|
|
20
26
|
def arquivo_xml_de_retificacao
|
21
|
-
@arquivo_xml_de_retificacao ||=
|
27
|
+
@arquivo_xml_de_retificacao ||= arquivo_xml_por_recibo_de_evento_retificado.delete(numero_do_recibo)
|
22
28
|
end
|
23
29
|
|
24
|
-
def
|
25
|
-
empresa.
|
30
|
+
def arquivo_xml_por_recibo_de_evento_retificado
|
31
|
+
empresa.arquivo_xml_por_recibo_de_evento_retificado
|
26
32
|
end
|
27
33
|
|
28
34
|
def processar_retificacao
|
@@ -38,14 +44,15 @@ module Teodoro
|
|
38
44
|
end
|
39
45
|
end
|
40
46
|
|
41
|
-
def
|
42
|
-
arquivos_data.shift.
|
47
|
+
def salvar_arquivos_data
|
48
|
+
arquivos_data.shift.salvar while arquivos_data.any?
|
43
49
|
end
|
44
50
|
|
45
51
|
def arquivos_data
|
46
52
|
@arquivos_data ||= dados_dos_arquivos_data.map do |dados_do_arquivo_data|
|
47
53
|
ArquivoData.new(
|
48
54
|
diretorio: empresa.destino_dos_arquivos_data,
|
55
|
+
operacao: dados_do_arquivo_data.operacao,
|
49
56
|
nome: dados_do_arquivo_data.nome,
|
50
57
|
itens_do_conteudo: dados_do_arquivo_data.itens_do_conteudo
|
51
58
|
)
|
data/lib/teodoro/arquivo_xml.rb
CHANGED
@@ -28,7 +28,6 @@ require_relative 'leiaute/arquivo_s2306'
|
|
28
28
|
require_relative 'leiaute/arquivo_s2399'
|
29
29
|
require_relative 'leiaute/arquivo_s2500'
|
30
30
|
require_relative 'leiaute/arquivo_s2501'
|
31
|
-
require_relative 'leiaute/arquivo_s3000'
|
32
31
|
require_relative 'leiaute/arquivo_s3500'
|
33
32
|
require_relative 'leiaute_simplificado'
|
34
33
|
require_relative 'xml'
|
@@ -94,15 +93,16 @@ module Teodoro
|
|
94
93
|
|
95
94
|
public
|
96
95
|
|
97
|
-
attr_reader :
|
96
|
+
attr_reader :recibo_do_evento_a_excluir, :recibo_do_evento_a_retificar, :momento_de_processamento_pelo_e_social
|
98
97
|
|
99
98
|
# otimizacao do gerenciamento de memoria
|
100
99
|
def carregar
|
101
100
|
Console.print "carregando #{nome}.xml..." do
|
102
101
|
evento, recibo = carregar_evento_e_recibo
|
103
102
|
|
103
|
+
@recibo_do_evento_a_excluir = evento['infoExclusao/nrRecEvt'] if exclusao_por_recibo?
|
104
104
|
@retificacao = evento_retificavel? && evento['ideEvento/indRetif'] == '2'
|
105
|
-
@
|
105
|
+
@recibo_do_evento_a_retificar = evento['ideEvento/nrRecibo'] if retificacao?
|
106
106
|
@momento_de_processamento_pelo_e_social = recibo['processamento/dhProcessamento']
|
107
107
|
|
108
108
|
validar_carregamento
|
@@ -111,6 +111,10 @@ module Teodoro
|
|
111
111
|
tratar_excecao(e)
|
112
112
|
end
|
113
113
|
|
114
|
+
def exclusao_por_recibo?
|
115
|
+
tipo_de_evento == 'S3000'
|
116
|
+
end
|
117
|
+
|
114
118
|
def retificacao?
|
115
119
|
@retificacao
|
116
120
|
end
|
@@ -8,7 +8,7 @@ module Teodoro
|
|
8
8
|
|
9
9
|
attr_reader :empresa, :destino
|
10
10
|
|
11
|
-
def
|
11
|
+
def salvar # rubocop:disable Metrics/MethodLength
|
12
12
|
ArquivoData.new(
|
13
13
|
diretorio: destino,
|
14
14
|
nome: 'DADOS_GERAIS',
|
@@ -26,7 +26,7 @@ module Teodoro
|
|
26
26
|
{ manter_se_vazio: true }
|
27
27
|
]
|
28
28
|
]
|
29
|
-
).
|
29
|
+
).salvar
|
30
30
|
end
|
31
31
|
|
32
32
|
private
|
@@ -48,13 +48,13 @@ module Teodoro
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def processar
|
51
|
-
|
51
|
+
salvar_arquivo_data
|
52
52
|
end
|
53
53
|
|
54
54
|
private
|
55
55
|
|
56
|
-
def
|
57
|
-
arquivo_data.
|
56
|
+
def salvar_arquivo_data
|
57
|
+
arquivo_data.salvar
|
58
58
|
end
|
59
59
|
|
60
60
|
def arquivo_data # rubocop:disable Metrics/MethodLength
|
@@ -11,10 +11,6 @@ module Teodoro
|
|
11
11
|
|
12
12
|
public
|
13
13
|
|
14
|
-
def to_a
|
15
|
-
contratos
|
16
|
-
end
|
17
|
-
|
18
14
|
def registrar_admissao(admissao:, inicio_de_afastamento:)
|
19
15
|
contratos_por_matricula[admissao.matricula_do_trabalhador] =
|
20
16
|
Contrato.new(admissao: admissao, inicio_de_afastamento: inicio_de_afastamento)
|
@@ -36,10 +32,6 @@ module Teodoro
|
|
36
32
|
.sort_by(&:data_de_admissao)
|
37
33
|
end
|
38
34
|
|
39
|
-
def remover(recibo)
|
40
|
-
contratos_por_matricula.delete_if { |_matricula, contratos| contratos.recibo == recibo }
|
41
|
-
end
|
42
|
-
|
43
35
|
private
|
44
36
|
|
45
37
|
def contratos
|
@@ -11,10 +11,6 @@ module Teodoro
|
|
11
11
|
|
12
12
|
public
|
13
13
|
|
14
|
-
def to_a
|
15
|
-
contratos
|
16
|
-
end
|
17
|
-
|
18
14
|
def registrar_inicio_de_contrato(inicio_de_contrato:, inicio_de_afastamento:)
|
19
15
|
contratos << Contrato.new(inicio_de_contrato: inicio_de_contrato, inicio_de_afastamento: inicio_de_afastamento)
|
20
16
|
trabalhadores << inicio_de_contrato.trabalhador
|
@@ -38,10 +34,6 @@ module Teodoro
|
|
38
34
|
.sort_by(&:data_de_inicio)
|
39
35
|
end
|
40
36
|
|
41
|
-
def remover(recibo)
|
42
|
-
contratos.delete_if { _1.recibo == recibo }
|
43
|
-
end
|
44
|
-
|
45
37
|
private
|
46
38
|
|
47
39
|
def contratos
|
@@ -48,13 +48,13 @@ module Teodoro
|
|
48
48
|
end
|
49
49
|
|
50
50
|
def processar
|
51
|
-
|
51
|
+
salvar_arquivo_data
|
52
52
|
end
|
53
53
|
|
54
54
|
private
|
55
55
|
|
56
|
-
def
|
57
|
-
arquivo_data.
|
56
|
+
def salvar_arquivo_data
|
57
|
+
arquivo_data.salvar
|
58
58
|
end
|
59
59
|
|
60
60
|
def arquivo_data # rubocop:disable Metrics/MethodLength
|
data/lib/teodoro/empresa.rb
CHANGED
@@ -41,8 +41,6 @@ module Teodoro
|
|
41
41
|
|
42
42
|
attr_accessor :inicio_da_validade
|
43
43
|
|
44
|
-
attr_reader :arquivos_xml_por_recibo_a_retificar
|
45
|
-
|
46
44
|
def processar # rubocop:disable Metrics/MethodLength
|
47
45
|
dar_feedback_para_o_usuario
|
48
46
|
criar_diretorios_destino
|
@@ -51,7 +49,7 @@ module Teodoro
|
|
51
49
|
classificar_arquivos_xml
|
52
50
|
ordenar_arquivos_xml
|
53
51
|
processar_arquivos_xml
|
54
|
-
|
52
|
+
salvar_arquivo_de_dados_gerais
|
55
53
|
processar_cargos_gerados
|
56
54
|
processar_funcoes_geradas
|
57
55
|
remover_matricula_do_nome_dos_arquivos_data_de_admissao_de_trabalhador_sem_vinculo
|
@@ -92,14 +90,15 @@ module Teodoro
|
|
92
90
|
end
|
93
91
|
|
94
92
|
def inicios_de_afastamento_por_numero_do_recibo
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
93
|
+
@inicios_de_afastamento_por_numero_do_recibo ||= {}
|
94
|
+
end
|
95
|
+
|
96
|
+
def recibos_dos_eventos_excluidos
|
97
|
+
@recibos_dos_eventos_excluidos ||= Set.new
|
99
98
|
end
|
100
99
|
|
101
|
-
def
|
102
|
-
|
100
|
+
def arquivo_xml_por_recibo_de_evento_retificado
|
101
|
+
@arquivo_xml_por_recibo_de_evento_retificado ||= {}
|
103
102
|
end
|
104
103
|
|
105
104
|
private
|
@@ -155,15 +154,20 @@ module Teodoro
|
|
155
154
|
.map { |caminho| ArquivoXML.new(empresa: self, caminho: caminho) }
|
156
155
|
end
|
157
156
|
|
158
|
-
def classificar_arquivos_xml
|
157
|
+
def classificar_arquivos_xml # rubocop:disable Metrics/MethodLength
|
159
158
|
Console.print 'classificando os arquivos XML...' do
|
160
159
|
arquivos_xml
|
160
|
+
.tap { @arquivos_xml = [] }
|
161
161
|
.select(&:processavel?)
|
162
|
-
.
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
162
|
+
.each do |arquivo_xml|
|
163
|
+
if arquivo_xml.exclusao_por_recibo?
|
164
|
+
recibos_dos_eventos_excluidos << arquivo_xml.recibo_do_evento_a_excluir
|
165
|
+
elsif arquivo_xml.retificacao?
|
166
|
+
arquivo_xml_por_recibo_de_evento_retificado[arquivo_xml.recibo_do_evento_a_retificar] = arquivo_xml
|
167
|
+
else
|
168
|
+
arquivos_xml << arquivo_xml
|
169
|
+
end
|
170
|
+
end
|
167
171
|
end
|
168
172
|
end
|
169
173
|
|
@@ -178,8 +182,8 @@ module Teodoro
|
|
178
182
|
arquivos_xml.shift.processar while arquivos_xml.any?
|
179
183
|
end
|
180
184
|
|
181
|
-
def
|
182
|
-
arquivo_de_dados_gerais.
|
185
|
+
def salvar_arquivo_de_dados_gerais
|
186
|
+
arquivo_de_dados_gerais.salvar
|
183
187
|
end
|
184
188
|
|
185
189
|
def arquivo_de_dados_gerais
|