teodoro 0.6.0 → 0.10.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 +1 -0
- data/lib/teodoro/arquivo_data.rb +87 -0
- data/lib/teodoro/arquivo_de_evento.rb +14 -2
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +29 -14
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +38 -12
- data/lib/teodoro/arquivo_de_origem.rb +7 -7
- data/lib/teodoro/arquivo_xml.rb +46 -22
- data/lib/teodoro/console.rb +3 -1
- data/lib/teodoro/empresa.rb +179 -161
- data/lib/teodoro/leiaute/arquivo_s1000.rb +20 -24
- data/lib/teodoro/leiaute/arquivo_s1005.rb +12 -18
- data/lib/teodoro/leiaute/arquivo_s1010.rb +9 -13
- data/lib/teodoro/leiaute/arquivo_s1020.rb +6 -10
- data/lib/teodoro/leiaute/arquivo_s1030.rb +4 -8
- data/lib/teodoro/leiaute/arquivo_s1040.rb +3 -7
- data/lib/teodoro/leiaute/arquivo_s1050.rb +6 -12
- data/lib/teodoro/leiaute/arquivo_s1070.rb +9 -13
- data/lib/teodoro/leiaute/arquivo_s2190.rb +16 -17
- data/lib/teodoro/leiaute/arquivo_s2200.rb +161 -185
- data/lib/teodoro/leiaute/arquivo_s2205.rb +132 -167
- data/lib/teodoro/leiaute/arquivo_s2206.rb +72 -75
- data/lib/teodoro/leiaute/arquivo_s2230.rb +87 -91
- 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 +135 -159
- data/lib/teodoro/leiaute/arquivo_s2306.rb +148 -151
- 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: ed476a09d21ea31620816ef10a315c152da9fe7938810d81d2a3fd29f2085e28
|
4
|
+
data.tar.gz: 15caa64dd8e82804283ea2b8248888b778c07672534405cfcf2cf466b9bead9d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef9d1142cf3f02126a46d093a49010a92144d3eb373fb6692bd1b95b398c0a08ae6e2753a0ce3d5fd9d7b438642c7b4ea2e5dfbb6f0392d16602173171369e79
|
7
|
+
data.tar.gz: ce85156d0fe4b50c44c24ee31e0700f0a263db2a2e1b7f0b9cdcb48c72823ad7a97bf737a6d7529d9a2ca42a7a89f07f8a5a8685ab6973763b4f43695d7d9881
|
data/lib/teodoro.rb
CHANGED
@@ -0,0 +1,87 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class ArquivoData
|
3
|
+
private
|
4
|
+
|
5
|
+
def initialize(empresa:, nome:, itens_do_conteudo:)
|
6
|
+
@empresa = empresa
|
7
|
+
@nome = nome
|
8
|
+
@itens_do_conteudo = itens_do_conteudo
|
9
|
+
end
|
10
|
+
|
11
|
+
attr_reader :empresa, :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)}" } + ['']).join("\r\n"))
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def caminho
|
26
|
+
@caminho ||= Caminho.new(empresa: empresa, nome_do_arquivo: nome)
|
27
|
+
end
|
28
|
+
|
29
|
+
class Caminho
|
30
|
+
private
|
31
|
+
|
32
|
+
def initialize(empresa:, nome_do_arquivo:)
|
33
|
+
@empresa = empresa
|
34
|
+
@nome_do_arquivo = nome_do_arquivo
|
35
|
+
end
|
36
|
+
|
37
|
+
attr_reader :empresa, :nome_do_arquivo
|
38
|
+
|
39
|
+
public
|
40
|
+
|
41
|
+
def to_str
|
42
|
+
@to_str ||=
|
43
|
+
File.join(
|
44
|
+
empresa.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
|
+
mes_ano: proc { "#{_1[-2..]}/#{_1[0..3]}" if _1 }
|
62
|
+
}.freeze
|
63
|
+
|
64
|
+
private
|
65
|
+
|
66
|
+
def initialize(arg)
|
67
|
+
@arg = arg
|
68
|
+
end
|
69
|
+
|
70
|
+
attr_reader :arg
|
71
|
+
|
72
|
+
public
|
73
|
+
|
74
|
+
def to_s
|
75
|
+
@to_s ||= (tipo ? FORMATADORES[tipo].call(valor) : valor).to_s
|
76
|
+
end
|
77
|
+
|
78
|
+
def tipo
|
79
|
+
@tipo ||= arg[1] if arg.is_a?(Array)
|
80
|
+
end
|
81
|
+
|
82
|
+
def valor
|
83
|
+
@valor ||= arg.is_a?(Array) ? arg[0] : arg
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -17,12 +17,24 @@ module Teodoro
|
|
17
17
|
arquivo_xml.recibo
|
18
18
|
end
|
19
19
|
|
20
|
+
def id_do_evento
|
21
|
+
evento.css('/*').first.attributes['Id'].value
|
22
|
+
end
|
23
|
+
|
24
|
+
def processo_de_emissao_do_evento
|
25
|
+
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,23 @@ 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(empresa: empresa, nome_do_arquivo: nome_do_arquivo_data_original)
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
31
|
-
|
30
|
+
def nome_do_arquivo_data_original
|
31
|
+
"#{nome_base_do_arquivo_data}[#{inicio_da_validade_original.delete('-')}]"
|
32
32
|
end
|
33
33
|
|
34
34
|
def nome_base_do_arquivo_data
|
@@ -36,9 +36,24 @@ module Teodoro
|
|
36
36
|
identificacao_do_arquivo_data[0] + identificacao_do_arquivo_data[1..].map { "[#{_1}]" }.join
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
39
|
+
def inicio_da_validade_original
|
40
|
+
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo, 'iniValid']
|
41
|
+
end
|
42
|
+
|
43
|
+
def criar_arquivo_data
|
44
|
+
arquivo_data.criar
|
45
|
+
end
|
46
|
+
|
47
|
+
def arquivo_data
|
48
|
+
ArquivoData.new(
|
49
|
+
empresa: empresa,
|
50
|
+
nome: nome_do_arquivo_data,
|
51
|
+
itens_do_conteudo: itens_do_conteudo_do_arquivo_data
|
52
|
+
)
|
53
|
+
end
|
54
|
+
|
55
|
+
def nome_do_arquivo_data
|
56
|
+
"#{nome_base_do_arquivo_data}[#{inicio_da_validade.delete('-')}]"
|
42
57
|
end
|
43
58
|
|
44
59
|
def inicio_da_validade
|
@@ -48,14 +63,14 @@ module Teodoro
|
|
48
63
|
def validade
|
49
64
|
@validade ||=
|
50
65
|
if inclusao? || (alteracao? && !nova_validade?)
|
51
|
-
evento[
|
66
|
+
evento[noh_de_informacoes_do_evento, '*', noh_de_identificacao_do_periodo]
|
52
67
|
elsif alteracao?
|
53
68
|
nova_validade
|
54
69
|
end
|
55
70
|
end
|
56
71
|
|
57
72
|
def inclusao?
|
58
|
-
@inclusao ||= evento[
|
73
|
+
@inclusao ||= evento[noh_de_informacoes_do_evento, 'inclusao']
|
59
74
|
end
|
60
75
|
|
61
76
|
def nova_validade?
|
@@ -63,7 +78,7 @@ module Teodoro
|
|
63
78
|
end
|
64
79
|
|
65
80
|
def nova_validade
|
66
|
-
@nova_validade ||= evento[
|
81
|
+
@nova_validade ||= evento[noh_de_informacoes_do_evento, 'alteracao', 'novaValidade']
|
67
82
|
end
|
68
83
|
|
69
84
|
def fim_da_validade
|
@@ -1,25 +1,51 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module ArquivoDeEventoNaoPeriodico
|
3
|
-
include
|
4
|
-
include ArquivoDeEventoRetificavel
|
3
|
+
include ArquivoDeEvento
|
5
4
|
|
6
5
|
def processar
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
if retificado?
|
7
|
+
processar_retificacao
|
8
|
+
else
|
9
|
+
registrar_arquivos_data
|
10
|
+
criar_arquivos_data
|
11
|
+
end
|
10
12
|
end
|
11
13
|
|
12
14
|
private
|
13
15
|
|
14
|
-
def
|
15
|
-
|
16
|
-
nome: nome_do_arquivo_data,
|
17
|
-
recibo: numero_do_recibo
|
18
|
-
)
|
16
|
+
def retificado?
|
17
|
+
arquivo_xml_de_retificacao
|
19
18
|
end
|
20
19
|
|
21
|
-
def
|
22
|
-
|
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
|
+
end
|
27
|
+
|
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.each(&:criar)
|
43
|
+
end
|
44
|
+
|
45
|
+
def arquivos_data
|
46
|
+
@arquivos_data ||= dados_dos_arquivos_data.map {
|
47
|
+
ArquivoData.new(empresa: empresa, nome: _1.nome, itens_do_conteudo: _1.itens_do_conteudo)
|
48
|
+
}
|
23
49
|
end
|
24
50
|
end
|
25
51
|
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'
|
@@ -9,7 +7,7 @@ require_relative 'leiaute'
|
|
9
7
|
require_relative 'xml'
|
10
8
|
|
11
9
|
module Teodoro
|
12
|
-
class ArquivoXML
|
10
|
+
class ArquivoXML # rubocop:disable Metrics/ClassLength
|
13
11
|
TIPOS_DE_EVENTO_PROCESSAVEIS = %w[
|
14
12
|
S1000
|
15
13
|
S1005
|
@@ -32,6 +30,18 @@ module Teodoro
|
|
32
30
|
S3000
|
33
31
|
].freeze
|
34
32
|
|
33
|
+
TIPOS_DE_EVENTO_RETIFICAVEIS = %w[
|
34
|
+
S2200
|
35
|
+
S2205
|
36
|
+
S2206
|
37
|
+
S2230
|
38
|
+
S2250
|
39
|
+
S2299
|
40
|
+
S2300
|
41
|
+
S2306
|
42
|
+
S2399
|
43
|
+
].freeze
|
44
|
+
|
35
45
|
private
|
36
46
|
|
37
47
|
def initialize(empresa:, caminho:)
|
@@ -43,16 +53,25 @@ module Teodoro
|
|
43
53
|
|
44
54
|
public
|
45
55
|
|
46
|
-
|
47
|
-
|
56
|
+
attr_reader :numero_do_recibo_a_retificar, :momento_de_processamento_pelo_e_social
|
57
|
+
|
58
|
+
# otimizacao do gerenciamento de memoria
|
59
|
+
def carregar
|
60
|
+
Console.print "carregando #{nome}.xml..." do
|
61
|
+
evento, recibo = carregar_evento_e_recibo
|
62
|
+
|
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
|
48
67
|
end
|
49
68
|
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
69
|
+
def retificacao?
|
70
|
+
@retificacao
|
71
|
+
end
|
72
|
+
|
73
|
+
def processavel?
|
74
|
+
TIPOS_DE_EVENTO_PROCESSAVEIS.include?(tipo_de_evento)
|
56
75
|
end
|
57
76
|
|
58
77
|
def nome
|
@@ -60,15 +79,20 @@ module Teodoro
|
|
60
79
|
end
|
61
80
|
|
62
81
|
def processar
|
63
|
-
|
64
|
-
|
65
|
-
|
82
|
+
Console.print "processando #{nome}.xml..." do
|
83
|
+
validar_versao_do_leiaute
|
84
|
+
processar_arquivo
|
85
|
+
end
|
66
86
|
end
|
67
87
|
|
68
88
|
private
|
69
89
|
|
70
|
-
def
|
71
|
-
|
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
|
72
96
|
end
|
73
97
|
|
74
98
|
def carregar_xml
|
@@ -79,8 +103,8 @@ module Teodoro
|
|
79
103
|
File.read(caminho)
|
80
104
|
end
|
81
105
|
|
82
|
-
def
|
83
|
-
|
106
|
+
def tipo_de_evento
|
107
|
+
@tipo_de_evento ||= nome[-6..].delete('-')
|
84
108
|
end
|
85
109
|
|
86
110
|
def validar_versao_do_leiaute
|
@@ -92,7 +116,7 @@ module Teodoro
|
|
92
116
|
end
|
93
117
|
|
94
118
|
def namespace_do_evento
|
95
|
-
xml_do_evento.css('eSocial')[0].namespace.href
|
119
|
+
xml_do_evento.css('/eSocial')[0].namespace.href
|
96
120
|
end
|
97
121
|
|
98
122
|
def xml_do_evento
|
@@ -119,7 +143,7 @@ module Teodoro
|
|
119
143
|
end
|
120
144
|
|
121
145
|
def evento
|
122
|
-
XML.new(xml_do_evento)
|
146
|
+
XML.new(Nokogiri::XML(xml_do_evento.css('*/*').to_s))
|
123
147
|
end
|
124
148
|
|
125
149
|
def recibo
|
@@ -127,7 +151,7 @@ module Teodoro
|
|
127
151
|
end
|
128
152
|
|
129
153
|
def xml_do_recibo
|
130
|
-
Nokogiri::XML(xml.css('eSocial/retornoProcessamentoDownload/recibo
|
154
|
+
Nokogiri::XML(xml.css('eSocial/retornoProcessamentoDownload/recibo/*/*').to_s)
|
131
155
|
end
|
132
156
|
end
|
133
157
|
end
|