teodoro 0.7.0 → 0.11.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 +4 -4
- data/lib/teodoro.rb +8 -2
- data/lib/teodoro/arquivo_data.rb +81 -0
- data/lib/teodoro/arquivo_de_evento.rb +14 -2
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +32 -14
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +36 -13
- data/lib/teodoro/arquivo_de_origem.rb +7 -7
- data/lib/teodoro/arquivo_xml.rb +29 -22
- data/lib/teodoro/console.rb +3 -1
- data/lib/teodoro/empresa.rb +15 -17
- data/lib/teodoro/leiaute/arquivo_s1000.rb +24 -30
- data/lib/teodoro/leiaute/arquivo_s1005.rb +14 -20
- data/lib/teodoro/leiaute/arquivo_s1010.rb +11 -15
- data/lib/teodoro/leiaute/arquivo_s1020.rb +8 -12
- data/lib/teodoro/leiaute/arquivo_s1030.rb +6 -10
- data/lib/teodoro/leiaute/arquivo_s1040.rb +5 -9
- data/lib/teodoro/leiaute/arquivo_s1050.rb +8 -14
- data/lib/teodoro/leiaute/arquivo_s1070.rb +12 -16
- data/lib/teodoro/leiaute/arquivo_s2190.rb +15 -14
- data/lib/teodoro/leiaute/arquivo_s2200.rb +152 -156
- data/lib/teodoro/leiaute/arquivo_s2205.rb +132 -166
- data/lib/teodoro/leiaute/arquivo_s2206.rb +72 -75
- data/lib/teodoro/leiaute/arquivo_s2230.rb +87 -90
- data/lib/teodoro/leiaute/arquivo_s2250.rb +36 -40
- data/lib/teodoro/leiaute/arquivo_s2299.rb +171 -169
- data/lib/teodoro/leiaute/arquivo_s2300.rb +127 -131
- data/lib/teodoro/leiaute/arquivo_s2306.rb +148 -147
- data/lib/teodoro/leiaute/arquivo_s2399.rb +123 -127
- data/lib/teodoro/leiaute/arquivo_s3000.rb +4 -8
- data/lib/teodoro/xml.rb +2 -2
- metadata +3 -5
- data/lib/teodoro/arquivo_de_evento_criador_de_arquivo_data.rb +0 -52
- data/lib/teodoro/arquivo_de_evento_processador_de_arquivo_data.rb +0 -30
- data/lib/teodoro/arquivo_de_evento_retificavel.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1fd9fa53d0f193758abd01b8afa4af04e8c95f1f8e00b48ebbe923142c44294
|
4
|
+
data.tar.gz: 145f509fe6f6de7c4a8bd3be65f169cbea6ad4f6d20d5293e011d236b4493b83
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bba2d47683c8ad4b7cd1aa63d21e236e885cb9f9701c35717b8ad98d0e03fedb3a348857f691ae343ccfd00870b5513b27121aecf5e465ab272c0ee630d18dd0
|
7
|
+
data.tar.gz: 386eec6ca613785e8a1193300ea81f24053cfe378f7638d02c038a7bb430dc631462aa4a9205e5666ed1e2f36660c6ae977e816962e34a2884aa630b4dd28ad9
|
data/lib/teodoro.rb
CHANGED
@@ -13,6 +13,11 @@ module Teodoro
|
|
13
13
|
Execution.new(args).call
|
14
14
|
end
|
15
15
|
|
16
|
+
@production = true
|
17
|
+
def self.production?
|
18
|
+
@production
|
19
|
+
end
|
20
|
+
|
16
21
|
class Execution
|
17
22
|
NOME_DO_PROGRAMA = 'teodoro'.freeze
|
18
23
|
|
@@ -72,11 +77,12 @@ module Teodoro
|
|
72
77
|
end
|
73
78
|
|
74
79
|
def processar_empresas
|
75
|
-
|
80
|
+
# otimizacao do gerenciamento de memoria
|
81
|
+
empresas.shift.processar while empresas.any?
|
76
82
|
end
|
77
83
|
|
78
84
|
def empresas
|
79
|
-
Dir[File.join(origem, '*')].map { |caminho| Empresa.new(caminho: caminho, destino: destino) }
|
85
|
+
@empresas ||= Dir[File.join(origem, '*')].map { |caminho| Empresa.new(caminho: caminho, destino: destino) }
|
80
86
|
end
|
81
87
|
end
|
82
88
|
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class ArquivoData
|
3
|
+
private
|
4
|
+
|
5
|
+
def initialize(destino_dos_arquivos_data:, nome:, itens_do_conteudo:)
|
6
|
+
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
7
|
+
@nome = nome
|
8
|
+
@itens_do_conteudo = itens_do_conteudo
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :destino_dos_arquivos_data, :itens_do_conteudo
|
12
|
+
|
13
|
+
public
|
14
|
+
|
15
|
+
attr_reader :nome
|
16
|
+
|
17
|
+
def criar
|
18
|
+
raise caminho if File.exist?(caminho)
|
19
|
+
|
20
|
+
File.write(caminho, (itens_do_conteudo.map { "#{_1}=#{Valor.new(_2, formato: _3)}" } + ['']).join("\r\n"))
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def caminho
|
26
|
+
@caminho ||= Caminho.new(destino_dos_arquivos_data: destino_dos_arquivos_data, nome_do_arquivo: nome)
|
27
|
+
end
|
28
|
+
|
29
|
+
class Caminho
|
30
|
+
private
|
31
|
+
|
32
|
+
def initialize(destino_dos_arquivos_data:, nome_do_arquivo:)
|
33
|
+
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
34
|
+
@nome_do_arquivo = nome_do_arquivo
|
35
|
+
end
|
36
|
+
|
37
|
+
attr_reader :destino_dos_arquivos_data, :nome_do_arquivo
|
38
|
+
|
39
|
+
public
|
40
|
+
|
41
|
+
def to_str
|
42
|
+
@to_str ||=
|
43
|
+
File.join(
|
44
|
+
destino_dos_arquivos_data,
|
45
|
+
"#{windows? ? nome_do_arquivo.gsub(%r{[<|>:"/\\?*]}, '_') : nome_do_arquivo}.data"
|
46
|
+
)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def windows?
|
52
|
+
OS.windows?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Valor
|
57
|
+
FORMATADORES = {
|
58
|
+
bool: proc { _1 ? 'True' : 'False' },
|
59
|
+
data: proc { "#{_1[-2..]}/#{_1[5..6]}/#{_1[0..3]}" if _1 },
|
60
|
+
data_aaaammdd: proc { _1.delete('-') if _1 },
|
61
|
+
decimal: proc { _1.tr('.', ',') if _1 },
|
62
|
+
mes_ano: proc { "#{_1[-2..]}/#{_1[0..3]}" if _1 }
|
63
|
+
}.freeze
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def initialize(valor, formato:)
|
68
|
+
@valor = valor
|
69
|
+
@formato = formato
|
70
|
+
end
|
71
|
+
|
72
|
+
attr_reader :valor, :formato
|
73
|
+
|
74
|
+
public
|
75
|
+
|
76
|
+
def to_s
|
77
|
+
@to_s ||= (formato ? FORMATADORES[formato].call(valor) : valor).to_s
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -17,12 +17,24 @@ module Teodoro
|
|
17
17
|
arquivo_xml.recibo
|
18
18
|
end
|
19
19
|
|
20
|
+
def id_do_evento
|
21
|
+
@id_do_evento ||= evento.css('/*').first.attributes['Id'].value
|
22
|
+
end
|
23
|
+
|
24
|
+
def processo_de_emissao_do_evento
|
25
|
+
@processo_de_emissao_do_evento ||= evento['ideEvento/procEmi']
|
26
|
+
end
|
27
|
+
|
28
|
+
def tipo_de_inscricao_do_empregador
|
29
|
+
@tipo_de_inscricao_do_empregador ||= evento['ideEmpregador/tpInsc']
|
30
|
+
end
|
31
|
+
|
20
32
|
def versao_do_aplicativo_de_processamento_do_evento
|
21
|
-
@versao_do_aplicativo_de_processamento_do_evento ||= recibo['
|
33
|
+
@versao_do_aplicativo_de_processamento_do_evento ||= recibo['processamento/versaoAppProcessamento']
|
22
34
|
end
|
23
35
|
|
24
36
|
def numero_do_recibo
|
25
|
-
@numero_do_recibo ||= recibo['
|
37
|
+
@numero_do_recibo ||= recibo['recibo/nrRecibo']
|
26
38
|
end
|
27
39
|
end
|
28
40
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module ArquivoDeEventoDeTabela
|
3
|
-
include
|
3
|
+
include ArquivoDeEvento
|
4
4
|
|
5
5
|
def processar
|
6
6
|
deletar_arquivo_data_original if alteracao? || exclusao?
|
@@ -12,23 +12,26 @@ module Teodoro
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def alteracao?
|
15
|
-
@alteracao ||= evento[
|
15
|
+
@alteracao ||= evento[noh_de_informacoes_do_evento, 'alteracao']
|
16
16
|
end
|
17
17
|
|
18
18
|
def exclusao?
|
19
|
-
@exclusao ||= evento[
|
19
|
+
@exclusao ||= evento[noh_de_informacoes_do_evento, 'exclusao']
|
20
20
|
end
|
21
21
|
|
22
22
|
def deletar_arquivo_data_original
|
23
|
-
File.delete(
|
23
|
+
File.delete(caminho_do_arquivo_data_original)
|
24
24
|
end
|
25
25
|
|
26
|
-
def
|
27
|
-
|
26
|
+
def caminho_do_arquivo_data_original
|
27
|
+
ArquivoData::Caminho.new(
|
28
|
+
destino_dos_arquivos_data: empresa.destino_dos_arquivos_data,
|
29
|
+
nome_do_arquivo: nome_do_arquivo_data_original
|
30
|
+
)
|
28
31
|
end
|
29
32
|
|
30
|
-
def
|
31
|
-
|
33
|
+
def nome_do_arquivo_data_original
|
34
|
+
"#{nome_base_do_arquivo_data}[#{inicio_da_validade_original.delete('-')}]"
|
32
35
|
end
|
33
36
|
|
34
37
|
def nome_base_do_arquivo_data
|
@@ -36,9 +39,24 @@ module Teodoro
|
|
36
39
|
identificacao_do_arquivo_data[0] + identificacao_do_arquivo_data[1..].map { "[#{_1}]" }.join
|
37
40
|
end
|
38
41
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
+
def inicio_da_validade_original
|
43
|
+
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo, 'iniValid']
|
44
|
+
end
|
45
|
+
|
46
|
+
def criar_arquivo_data
|
47
|
+
arquivo_data.criar
|
48
|
+
end
|
49
|
+
|
50
|
+
def arquivo_data
|
51
|
+
ArquivoData.new(
|
52
|
+
destino_dos_arquivos_data: empresa.destino_dos_arquivos_data,
|
53
|
+
nome: nome_do_arquivo_data,
|
54
|
+
itens_do_conteudo: itens_do_conteudo_do_arquivo_data
|
55
|
+
)
|
56
|
+
end
|
57
|
+
|
58
|
+
def nome_do_arquivo_data
|
59
|
+
"#{nome_base_do_arquivo_data}[#{inicio_da_validade.delete('-')}]"
|
42
60
|
end
|
43
61
|
|
44
62
|
def inicio_da_validade
|
@@ -48,14 +66,14 @@ module Teodoro
|
|
48
66
|
def validade
|
49
67
|
@validade ||=
|
50
68
|
if inclusao? || (alteracao? && !nova_validade?)
|
51
|
-
evento[
|
69
|
+
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo]
|
52
70
|
elsif alteracao?
|
53
71
|
nova_validade
|
54
72
|
end
|
55
73
|
end
|
56
74
|
|
57
75
|
def inclusao?
|
58
|
-
@inclusao ||= evento[
|
76
|
+
@inclusao ||= evento[noh_de_informacoes_do_evento, 'inclusao']
|
59
77
|
end
|
60
78
|
|
61
79
|
def nova_validade?
|
@@ -63,7 +81,7 @@ module Teodoro
|
|
63
81
|
end
|
64
82
|
|
65
83
|
def nova_validade
|
66
|
-
@nova_validade ||= evento[
|
84
|
+
@nova_validade ||= evento[noh_de_informacoes_do_evento, 'alteracao', 'novaValidade']
|
67
85
|
end
|
68
86
|
|
69
87
|
def fim_da_validade
|
@@ -1,32 +1,55 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module ArquivoDeEventoNaoPeriodico
|
3
|
-
include
|
4
|
-
include ArquivoDeEventoRetificavel
|
3
|
+
include ArquivoDeEvento
|
5
4
|
|
6
5
|
def processar
|
7
6
|
if retificado?
|
8
7
|
processar_retificacao
|
9
8
|
else
|
10
|
-
|
11
|
-
|
9
|
+
registrar_arquivos_data
|
10
|
+
criar_arquivos_data
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
15
14
|
private
|
16
15
|
|
17
|
-
def
|
18
|
-
|
19
|
-
nome: nome_do_arquivo_data,
|
20
|
-
recibo: numero_do_recibo
|
21
|
-
)
|
16
|
+
def retificado?
|
17
|
+
arquivo_xml_de_retificacao
|
22
18
|
end
|
23
19
|
|
24
|
-
def
|
25
|
-
|
20
|
+
def arquivo_xml_de_retificacao
|
21
|
+
@arquivo_xml_de_retificacao ||= arquivos_xml_por_recibo_a_retificar.delete(numero_do_recibo)
|
22
|
+
end
|
23
|
+
|
24
|
+
def arquivos_xml_por_recibo_a_retificar
|
25
|
+
empresa.arquivos_xml_por_recibo_a_retificar
|
26
26
|
end
|
27
27
|
|
28
|
-
def
|
29
|
-
|
28
|
+
def processar_retificacao
|
29
|
+
arquivo_xml_de_retificacao.processar
|
30
|
+
end
|
31
|
+
|
32
|
+
def registrar_arquivos_data
|
33
|
+
arquivos_data.each do
|
34
|
+
empresa.arquivos_data.registrar(
|
35
|
+
nome: _1.nome,
|
36
|
+
recibo: numero_do_recibo
|
37
|
+
)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def criar_arquivos_data
|
42
|
+
arquivos_data.shift.criar while arquivos_data.any?
|
43
|
+
end
|
44
|
+
|
45
|
+
def arquivos_data
|
46
|
+
@arquivos_data ||= dados_dos_arquivos_data.map {
|
47
|
+
ArquivoData.new(
|
48
|
+
destino_dos_arquivos_data: empresa.destino_dos_arquivos_data,
|
49
|
+
nome: _1.nome,
|
50
|
+
itens_do_conteudo: _1.itens_do_conteudo
|
51
|
+
)
|
52
|
+
}
|
30
53
|
end
|
31
54
|
end
|
32
55
|
end
|
@@ -14,13 +14,13 @@ module Teodoro
|
|
14
14
|
public
|
15
15
|
|
16
16
|
def descompactar
|
17
|
-
Console.print "descompactando #{File.basename(caminho)}..."
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
Console.print "descompactando #{File.basename(caminho)}..." do
|
18
|
+
Zip::File.open(caminho) do |zip|
|
19
|
+
zip
|
20
|
+
.reject { |entrada| entrada.name[-8] == PREFIXO_DE_TOTALIZADOR }
|
21
|
+
.each do |entrada|
|
22
|
+
entrada.extract(File.join(destino_dos_arquivos_xml, entrada.name))
|
23
|
+
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/lib/teodoro/arquivo_xml.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
|
+
require_relative 'arquivo_data'
|
1
2
|
require_relative 'arquivo_de_evento'
|
2
|
-
require_relative 'arquivo_de_evento_processador_de_arquivo_data'
|
3
|
-
require_relative 'arquivo_de_evento_criador_de_arquivo_data'
|
4
|
-
require_relative 'arquivo_de_evento_retificavel'
|
5
3
|
require_relative 'arquivo_de_evento_de_tabela'
|
6
4
|
require_relative 'arquivo_de_evento_nao_periodico'
|
7
5
|
require_relative 'cnpj'
|
@@ -59,17 +57,13 @@ module Teodoro
|
|
59
57
|
|
60
58
|
# otimizacao do gerenciamento de memoria
|
61
59
|
def carregar
|
62
|
-
Console.print "carregando #{nome}.xml..."
|
60
|
+
Console.print "carregando #{nome}.xml..." do
|
61
|
+
evento, recibo = carregar_evento_e_recibo
|
63
62
|
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
@retificacao = TIPOS_DE_EVENTO_RETIFICAVEIS.include?(tipo_de_evento) && evento['*/ideEvento/indRetif'] == '2'
|
71
|
-
@numero_do_recibo_a_retificar = evento['*/ideEvento/nrRecibo'] if retificacao?
|
72
|
-
@momento_de_processamento_pelo_e_social = recibo['retornoEvento/processamento/dhProcessamento']
|
63
|
+
@retificacao = TIPOS_DE_EVENTO_RETIFICAVEIS.include?(tipo_de_evento) && evento['ideEvento/indRetif'] == '2'
|
64
|
+
@numero_do_recibo_a_retificar = evento['ideEvento/nrRecibo'] if retificacao?
|
65
|
+
@momento_de_processamento_pelo_e_social = recibo['processamento/dhProcessamento']
|
66
|
+
end
|
73
67
|
end
|
74
68
|
|
75
69
|
def retificacao?
|
@@ -85,14 +79,22 @@ module Teodoro
|
|
85
79
|
end
|
86
80
|
|
87
81
|
def processar
|
88
|
-
Console.print "processando #{nome}.xml..."
|
89
|
-
|
90
|
-
|
91
|
-
|
82
|
+
Console.print "processando #{nome}.xml..." do
|
83
|
+
validar_versao_do_leiaute
|
84
|
+
processar_arquivo
|
85
|
+
end
|
92
86
|
end
|
93
87
|
|
94
88
|
private
|
95
89
|
|
90
|
+
def carregar_evento_e_recibo
|
91
|
+
carregar_xml
|
92
|
+
.then do |xml|
|
93
|
+
%w[evento recibo]
|
94
|
+
.map { XML.new(Nokogiri::XML(xml.css("eSocial/retornoProcessamentoDownload/#{_1}/*/*").to_s)) }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
96
98
|
def carregar_xml
|
97
99
|
Nokogiri::XML(carregar_conteudo)
|
98
100
|
end
|
@@ -106,7 +108,12 @@ module Teodoro
|
|
106
108
|
end
|
107
109
|
|
108
110
|
def validar_versao_do_leiaute
|
109
|
-
raise unless
|
111
|
+
raise unless [
|
112
|
+
'02_04_01',
|
113
|
+
'02_04_02',
|
114
|
+
'02_05_00',
|
115
|
+
*('_S_01_00_00' unless Teodoro.production?)
|
116
|
+
].include?(versao_do_leiaute)
|
110
117
|
end
|
111
118
|
|
112
119
|
def versao_do_leiaute
|
@@ -114,11 +121,11 @@ module Teodoro
|
|
114
121
|
end
|
115
122
|
|
116
123
|
def namespace_do_evento
|
117
|
-
xml_do_evento.css('eSocial')[0].namespace.href
|
124
|
+
xml_do_evento.css('/eSocial')[0].namespace.href
|
118
125
|
end
|
119
126
|
|
120
127
|
def xml_do_evento
|
121
|
-
@xml_do_evento ||= Nokogiri::XML(xml.css('eSocial/retornoProcessamentoDownload/evento/*').to_s)
|
128
|
+
@xml_do_evento ||= Nokogiri::XML(xml.css('/eSocial/retornoProcessamentoDownload/evento/*').to_s)
|
122
129
|
end
|
123
130
|
|
124
131
|
def xml
|
@@ -141,7 +148,7 @@ module Teodoro
|
|
141
148
|
end
|
142
149
|
|
143
150
|
def evento
|
144
|
-
XML.new(xml_do_evento)
|
151
|
+
XML.new(Nokogiri::XML(xml_do_evento.css('/*/*').to_s))
|
145
152
|
end
|
146
153
|
|
147
154
|
def recibo
|
@@ -149,7 +156,7 @@ module Teodoro
|
|
149
156
|
end
|
150
157
|
|
151
158
|
def xml_do_recibo
|
152
|
-
Nokogiri::XML(xml.css('eSocial/retornoProcessamentoDownload/recibo
|
159
|
+
Nokogiri::XML(xml.css('/eSocial/retornoProcessamentoDownload/recibo/*/*').to_s)
|
153
160
|
end
|
154
161
|
end
|
155
162
|
end
|