teodoro 0.0.12 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb82ca01d0e6d8a70fb3c77d09e5d89a03e473fa632f4382221cdffefb21feed
4
- data.tar.gz: 7bc8f92129a1828c5c4fa4cd7fcc5f3e87ed6c21c524f334959c26e782fc8e26
3
+ metadata.gz: 8e0e7936bf18da7baec67a376680936534f02994e00a5de2efac44df2d7dd87b
4
+ data.tar.gz: 013300c8ce8be341f9dad9577c32b7f64988d05188dbbed01b99fc929a47c598
5
5
  SHA512:
6
- metadata.gz: dce1dc08d6027a38f86f3ed22b0f4876bb95a977637ccd2f18daee65087dd1c8bfacfec9a970809c9ede277fd72ba8eefba2aa8356067e89a48800608dad5a21
7
- data.tar.gz: f363698c4d43d83faea482d15e3ccd0299d1396c93c3ea214c8285c467514f2273400c182bae85425d90ee3c01cc3537f3c4c874dbc8423c44921f35f8933b20
6
+ metadata.gz: 8d2c71bdbac95f6c53d6e1b721d16757557f49afce15ac49b1a8ccb3cf53890df02a9f422cce5ed52bfd59b8d9fa5d034f44ced4d1772b1782d16f8589abe052
7
+ data.tar.gz: '074959274a36a5b8c1d171e61cd3cbafb047e74972c1162f6e833de4e5f148173a7cc026ffc8bcf9fc997379b815a92bf9e9fe03d099a07a45dfecb1a80ae49f'
data/lib/teodoro.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'nokogiri'
2
2
  require 'os'
3
+ require 'rainbow'
3
4
  require 'zip'
4
5
 
5
6
  require_relative 'teodoro/console'
@@ -27,6 +28,7 @@ module Teodoro
27
28
  def call
28
29
  validar_argumentos
29
30
  validar_existencia_do_diretorio_de_origem
31
+ validar_existencia_do_diretorio_de_destino
30
32
  validar_que_diretorio_de_origem_nao_esta_vazio
31
33
  validar_que_diretorio_de_destino_esta_vazio
32
34
 
@@ -44,7 +46,15 @@ module Teodoro
44
46
  end
45
47
 
46
48
  def origem
47
- @origem ||= args[0]
49
+ @origem ||= args[0].tr('\\', '/')
50
+ end
51
+
52
+ def validar_existencia_do_diretorio_de_destino
53
+ erro 'Diretório de destino não existe.' unless File.directory?(destino)
54
+ end
55
+
56
+ def destino
57
+ @destino ||= args[1].tr('\\', '/')
48
58
  end
49
59
 
50
60
  def validar_que_diretorio_de_origem_nao_esta_vazio
@@ -55,10 +65,6 @@ module Teodoro
55
65
  erro 'Diretório de destino deve estar vazio.' unless Dir.empty?(destino)
56
66
  end
57
67
 
58
- def destino
59
- @destino ||= args[1]
60
- end
61
-
62
68
  def erro(erro)
63
69
  puts erro
64
70
  exit
@@ -2,36 +2,31 @@ module Teodoro
2
2
  module ArquivoDeEvento
3
3
  private
4
4
 
5
- def initialize(empresa:, versao_do_leiaute:, evento:, recibo:)
5
+ def initialize(empresa:, arquivo_xml:)
6
6
  @empresa = empresa
7
- @versao_do_leiaute = versao_do_leiaute
8
- @evento = evento
9
- @recibo = recibo
7
+ @arquivo_xml = arquivo_xml
10
8
  end
11
9
 
12
- attr_reader :empresa, :versao_do_leiaute, :evento, :recibo
10
+ attr_reader :empresa, :arquivo_xml
13
11
 
14
- def leiaute_simplificado?
15
- versao_do_leiaute.start_with?('_S_')
12
+ def versao_do_leiaute
13
+ arquivo_xml.versao_do_leiaute
16
14
  end
17
15
 
18
- def processo_de_emissao_do_evento
19
- evento["#{noh_principal_do_evento}/ideEvento/procEmi"]
16
+ def evento
17
+ arquivo_xml.evento
20
18
  end
21
19
 
22
- def criar_caminho_do_arquivo_data(nome_do_arquivo)
23
- File.join(
24
- destino_dos_arquivos_data,
25
- "#{windows? ? nome_do_arquivo.gsub(%r{[<|>:"/\\?*]}, '_') : nome_do_arquivo}.data"
26
- )
20
+ def recibo
21
+ arquivo_xml.recibo
27
22
  end
28
23
 
29
- def destino_dos_arquivos_data
30
- empresa.destino_dos_arquivos_data
24
+ def versao_do_aplicativo_de_processamento_do_evento
25
+ @versao_do_aplicativo_de_processamento_do_evento ||= recibo['retornoEvento/processamento/versaoAppProcessamento']
31
26
  end
32
27
 
33
- def windows?
34
- OS.windows?
28
+ def numero_do_recibo
29
+ @numero_do_recibo ||= recibo['retornoEvento/recibo/nrRecibo']
35
30
  end
36
31
  end
37
32
  end
@@ -1,6 +1,6 @@
1
1
  module Teodoro
2
- module ArquivoDeEventoExcetoDeExclusao
3
- include ArquivoDeEvento
2
+ module ArquivoDeEventoCriadorDeArquivoData
3
+ include ArquivoDeEventoProcessadorDeArquivoData
4
4
 
5
5
  private
6
6
 
@@ -14,10 +14,6 @@ module Teodoro
14
14
  (itens_do_conteudo_do_arquivo_data.map { "#{_1}=#{_2}" } + ['']).join("\n")
15
15
  end
16
16
 
17
- def versao_do_aplicativo_de_processamento_do_evento
18
- recibo['retornoEvento/processamento/versaoAppProcessamento']
19
- end
20
-
21
17
  def tipo_de_inscricao_do_empregador
22
18
  @tipo_de_inscricao_do_empregador ||= evento["#{noh_principal_do_evento}/ideEmpregador/tpInsc"]
23
19
  end
@@ -1,6 +1,6 @@
1
1
  module Teodoro
2
2
  module ArquivoDeEventoDeTabela
3
- include ArquivoDeEventoExcetoDeExclusao
3
+ include ArquivoDeEventoCriadorDeArquivoData
4
4
 
5
5
  def processar
6
6
  deletar_arquivo_data_original if alteracao? || exclusao?
@@ -37,7 +37,7 @@ module Teodoro
37
37
  end
38
38
 
39
39
  def caminho_do_arquivo_data
40
- # FIXME: Tales inicio de validade
40
+ # FIXME: Tales inicio de validade ou inicio da nova validade?
41
41
  obter_caminho_do_arquivo_data(inicio_da_validade)
42
42
  end
43
43
 
@@ -1,45 +1,21 @@
1
1
  module Teodoro
2
2
  module ArquivoDeEventoNaoPeriodico
3
- include ArquivoDeEventoExcetoDeExclusao
3
+ include ArquivoDeEventoCriadorDeArquivoData
4
+ include ArquivoDeEventoRetificavel
4
5
 
5
6
  def processar
6
- deletar_arquivo_data_original if retificacao?
7
- registrar_recibo
7
+ deletar_arquivos_data_originais if retificacao?
8
+ registrar_arquivo_data
8
9
  criar_arquivo_data
9
10
  end
10
11
 
11
12
  private
12
13
 
13
- def retificacao?
14
- evento["#{noh_principal_do_evento}/ideEvento/indRetif"] == '2'
15
- end
16
-
17
- def deletar_arquivo_data_original
18
- File.delete(caminho_do_arquivo_data_original)
19
- end
20
-
21
- def caminho_do_arquivo_data_original
22
- criar_caminho_do_arquivo_data(nome_do_arquivo_original)
23
- end
24
-
25
- def nome_do_arquivo_original
26
- de_recibo_para_nome_do_arquivo_data[numero_do_recibo_a_retificar]
27
- end
28
-
29
- def de_recibo_para_nome_do_arquivo_data
30
- empresa.de_recibo_para_nome_do_arquivo_data
31
- end
32
-
33
- def numero_do_recibo_a_retificar
34
- evento["#{noh_principal_do_evento}/ideEvento/nrRecibo"]
35
- end
36
-
37
- def registrar_recibo
38
- de_recibo_para_nome_do_arquivo_data[numero_do_recibo] = nome_do_arquivo_data
39
- end
40
-
41
- def numero_do_recibo
42
- recibo['retornoEvento/recibo/nrRecibo']
14
+ def registrar_arquivo_data
15
+ arquivos_data.registrar(
16
+ nome: nome_do_arquivo_data,
17
+ recibo: numero_do_recibo
18
+ )
43
19
  end
44
20
 
45
21
  def caminho_do_arquivo_data
@@ -0,0 +1,30 @@
1
+ module Teodoro
2
+ module ArquivoDeEventoProcessadorDeArquivoData
3
+ include ArquivoDeEvento
4
+
5
+ private
6
+
7
+ def leiaute_simplificado?
8
+ versao_do_leiaute.start_with?('_S_')
9
+ end
10
+
11
+ def processo_de_emissao_do_evento
12
+ evento["#{noh_principal_do_evento}/ideEvento/procEmi"]
13
+ end
14
+
15
+ def criar_caminho_do_arquivo_data(nome_do_arquivo)
16
+ File.join(
17
+ destino_dos_arquivos_data,
18
+ "#{windows? ? nome_do_arquivo.gsub(%r{[<|>:"/\\?*]}, '_') : nome_do_arquivo}.data"
19
+ )
20
+ end
21
+
22
+ def destino_dos_arquivos_data
23
+ empresa.destino_dos_arquivos_data
24
+ end
25
+
26
+ def windows?
27
+ OS.windows?
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,23 @@
1
+ module Teodoro
2
+ module ArquivoDeEventoRetificavel
3
+ include ArquivoDeEvento
4
+
5
+ private
6
+
7
+ def retificacao?
8
+ @retificacao ||= evento["#{noh_principal_do_evento}/ideEvento/indRetif"] == '2'
9
+ end
10
+
11
+ def deletar_arquivos_data_originais
12
+ arquivos_data.excluir(numero_do_recibo_a_retificar)
13
+ end
14
+
15
+ def arquivos_data
16
+ empresa.arquivos_data
17
+ end
18
+
19
+ def numero_do_recibo_a_retificar
20
+ @numero_do_recibo_a_retificar ||= evento["#{noh_principal_do_evento}/ideEvento/nrRecibo"]
21
+ end
22
+ end
23
+ end
@@ -1,5 +1,7 @@
1
1
  require_relative 'arquivo_de_evento'
2
- require_relative 'arquivo_de_evento_exceto_de_exclusao'
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'
3
5
  require_relative 'arquivo_de_evento_de_tabela'
4
6
  require_relative 'arquivo_de_evento_nao_periodico'
5
7
  require_relative 'cnpj'
@@ -106,7 +108,10 @@ module Teodoro
106
108
  end
107
109
 
108
110
  def arquivo
109
- classe_do_arquivo.new(empresa: empresa, versao_do_leiaute: versao_do_leiaute, evento: evento, recibo: recibo)
111
+ classe_do_arquivo.new(
112
+ empresa: empresa,
113
+ arquivo_xml: Obj.new(versao_do_leiaute: versao_do_leiaute, evento: evento, recibo: recibo)
114
+ )
110
115
  end
111
116
 
112
117
  def classe_do_arquivo
@@ -28,7 +28,7 @@ module Teodoro
28
28
  private
29
29
 
30
30
  def dar_feedback_para_o_usuario
31
- puts "\e[32m#{nome_do_diretorio}\e[0m" # green
31
+ puts Rainbow(nome_do_diretorio).green
32
32
  end
33
33
 
34
34
  def nome_do_diretorio
@@ -83,9 +83,9 @@ module Teodoro
83
83
  def empresa
84
84
  @empresa ||= Obj.new(
85
85
  destino_dos_arquivos_data: destino_dos_arquivos_data,
86
- de_recibo_para_nome_do_arquivo_data: {},
87
- admissoes_por_matricula: {},
88
- contratos_de_trabalhador_sem_vinculo: ContratosDeTrabalhadorSemVinculo.new
86
+ arquivos_data: ArquivosData.new(destino_dos_arquivos_data),
87
+ contratos_de_emprego: ContratosDeEmprego.new,
88
+ contratos_de_trabalho_sem_vinculo: ContratosDeTrabalhoSemVinculo.new
89
89
  )
90
90
  end
91
91
 
@@ -93,19 +93,87 @@ module Teodoro
93
93
  Console.print
94
94
  end
95
95
 
96
- class ContratosDeTrabalhadorSemVinculo
96
+ class ArquivosData
97
+ private
98
+
99
+ def initialize(destino_dos_arquivos_data)
100
+ @destino_dos_arquivos_data = destino_dos_arquivos_data
101
+ end
102
+
103
+ attr_reader :destino_dos_arquivos_data
104
+
105
+ public
106
+
107
+ def registrar(recibo:, nome:)
108
+ (nomes_por_recibo[recibo] ||= []) << nome
109
+ end
110
+
111
+ def excluir(recibo)
112
+ (nomes_por_recibo.delete(recibo) || [])
113
+ .map { |nome| File.join(destino_dos_arquivos_data, "#{nome}.data") }
114
+ .each { File.delete(_1) }
115
+ end
116
+
117
+ private
118
+
119
+ def nomes_por_recibo
120
+ @nomes_por_recibo ||= {}
121
+ end
122
+ end
123
+
124
+ class ContratosDeEmprego
125
+ def <<(contrato)
126
+ contratos_por_matricula[contrato.matricula] = contrato
127
+ end
128
+
129
+ def [](matricula)
130
+ contratos_por_matricula[matricula]
131
+ end
132
+
133
+ def *(cpf_do_trabalhador:, data:)
134
+ contratos
135
+ .select { _1.cpf_do_trabalhador == cpf_do_trabalhador }
136
+ .select { _1.data_de_admissao <= data } # data de rescisao
137
+ .sort_by(&:data_de_admissao)
138
+ end
139
+
140
+ def remover(recibo)
141
+ contratos_por_matricula.delete_if { _2.recibo == recibo }
142
+ end
143
+
144
+ private
145
+
146
+ def contratos_por_matricula
147
+ @contratos_por_matricula ||= {}
148
+ end
149
+
150
+ def contratos
151
+ contratos_por_matricula.values
152
+ end
153
+ end
154
+
155
+ class ContratosDeTrabalhoSemVinculo
97
156
  def <<(contrato)
98
157
  contratos << contrato
99
158
  end
100
159
 
101
160
  def [](cpf_do_trabalhador:, categoria_do_trabalhador:, data:)
102
161
  contratos
103
- .select {
104
- [_1.cpf_do_trabalhador, _1.categoria_do_trabalhador] == [cpf_do_trabalhador, categoria_do_trabalhador]
105
- }
162
+ .select { _1.cpf_do_trabalhador == cpf_do_trabalhador }
163
+ .select { _1.categoria_do_trabalhador == categoria_do_trabalhador}
164
+ .select { _1.data_de_inicio <= data }
165
+ .max_by(&:data_de_inicio)
166
+ end
167
+
168
+ def *(cpf_do_trabalhador:, data:)
169
+ contratos
170
+ .select { _1.cpf_do_trabalhador == cpf_do_trabalhador }
171
+ .select { _1.data_de_inicio <= data } # FIXME: Tales data de termino
106
172
  .sort_by(&:data_de_inicio)
107
- .reverse
108
- .find { _1.data_de_inicio <= data }
173
+ end
174
+
175
+ def remover(recibo)
176
+ contratos.delete_if { _1.recibo == recibo }
109
177
  end
110
178
 
111
179
  private
@@ -1,7 +1,6 @@
1
1
  module Teodoro
2
2
  module Leiaute
3
- # rubocop:disable Metrics/ClassLength
4
- class ArquivoS1000
3
+ class ArquivoS1000 # rubocop:disable Metrics/ClassLength
5
4
  include ArquivoDeEventoDeTabela
6
5
 
7
6
  private
@@ -64,9 +63,9 @@ module Teodoro
64
63
  'idePeriodo'
65
64
  end
66
65
 
67
- # rubocop:disable Layout/LineLength, Metrics/MethodLength, Metrics/AbcSize
68
- def itens_do_conteudo_do_arquivo_data
66
+ def itens_do_conteudo_do_arquivo_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
69
67
  [
68
+ # rubocop:disable Layout/LineLength
70
69
  ['TipoInscricaoEmpregador', tipo_de_inscricao],
71
70
  ['FapBdContrib'],
72
71
  ['AlteracaoEmPeriodoExistente'],
@@ -84,8 +83,8 @@ module Teodoro
84
83
  ['ExibeModoCompleto'],
85
84
  ['InicioValidade', inicio_da_validade],
86
85
  ['FimValidade', fim_da_validade],
87
- ['NovaValidade_InicioValidade'], # FIXME: Tales
88
- ['NovaValidade_FimValidade'], # FIXME: Tales
86
+ ['NovaValidade_InicioValidade'],
87
+ ['NovaValidade_FimValidade'],
89
88
  ['NomeRazaoSocial', evento['evtInfoEmpregador/infoEmpregador/*/infoCadastro/nmRazao']],
90
89
  ['ClassificacaoTributaria', evento['evtInfoEmpregador/infoEmpregador/*/infoCadastro/classTrib']],
91
90
  ['NaturezaJuridica', evento['evtInfoEmpregador/infoEmpregador/*/infoCadastro/natJurid']],
@@ -150,14 +149,13 @@ module Teodoro
150
149
  ["ListaSoftHouses_#{seq}_Email", software_house['email']]
151
150
  ]
152
151
  end.sum([])
152
+ # rubocop:enable Layout/LineLength
153
153
  ]
154
154
  end
155
- # rubocop:enable Layout/LineLength, Metrics/MethodLength, Metrics/AbcSize
156
155
 
157
156
  def softwares_house
158
157
  evento.*('evtInfoEmpregador/infoEmpregador/*/infoCadastro/softwareHouse')
159
158
  end
160
159
  end
161
- # rubocop:enable Metrics/ClassLength
162
160
  end
163
161
  end
@@ -25,9 +25,9 @@ module Teodoro
25
25
  'ideEstab'
26
26
  end
27
27
 
28
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize, Layout/LineLength
29
- def itens_do_conteudo_do_arquivo_data
28
+ def itens_do_conteudo_do_arquivo_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
30
29
  [
30
+ # rubocop:disable Layout/LineLength
31
31
  ['RequestVerificationToken'],
32
32
  ['SomenteVisualizacao'],
33
33
  ['BloquearCodigo'],
@@ -75,9 +75,9 @@ module Teodoro
75
75
  ['VerProc', versao_do_aplicativo_de_processamento_do_evento],
76
76
  ['idEdicaoSH'],
77
77
  ['ExibirContribuicaoPatronal']
78
+ # rubocop:enable Layout/LineLength
78
79
  ]
79
80
  end
80
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize, Layout/LineLength
81
81
  end
82
82
  end
83
83
  end