teodoro 0.50.0 → 0.51.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: 51abd5c742e7e100db3955d991f68118c97cbd5b3b140e662e54267ab880ae51
4
- data.tar.gz: 18a384c6ffdf1a4452342f2e56bf1b023336cccf429f4fe5f972913e1da09be9
3
+ metadata.gz: 65669a9ee3ad1d0358849fa220e2720d08452c9a8c4f2d4154f979cca4d45edd
4
+ data.tar.gz: 00f23d7d9103fb178f932a18976c36ebffb8d79f23eb943f28f3b5069af0800f
5
5
  SHA512:
6
- metadata.gz: 6a61c8d976d136490e0d02e6e3d64448df51f9d402a977515b59d8cf81bb1d339f1c4a3c642c1d6f379202c2dbf3c5809d5f4c529e6650e1665130f38b40e0fb
7
- data.tar.gz: 0cda08d5973babe35d3a30a56b22449595dd27c7843f69339f10a3cfcf323900c345ec3f9601de38e874b4034a092f6ad48c020eba85057e447004bcd7ecd125
6
+ metadata.gz: 0d88f0c9d65b366f806c99f148d637196fa10aab61bc7b2b65853e25f64183a443462ad2722c6dd8c8112c440aad87050b365455563cc59b09d62f0a35be4fba
7
+ data.tar.gz: 801996ba495dc23d1da40a4e3b321236ffc0a0781ceaeb8a96b9c9778bb543ec97d1bbee500b35549c86746dcfa0e0e6029a8ca003bc5c7fedd1f0017c0dbb28
@@ -11,6 +11,10 @@ module Teodoro
11
11
 
12
12
  public
13
13
 
14
+ def operacao
15
+ :inclusao
16
+ end
17
+
14
18
  def nome
15
19
  [
16
20
  'TRA',
@@ -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 criar
22
- raise 'evento duplicado' if File.exist?(caminho)
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(conteudo_do_arquivo)
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 conteudo_do_arquivo
36
- itens_de_conteudo_ajustados
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 itens_de_conteudo_ajustados
43
- itens_do_conteudo.map { [_1[0], _1[1], _1.size == 1 ? :vazio : _1[2], _1[3] || {}] }
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 Valor
68
- FORMATADORES = {
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
- private
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 initialize(valor, formato:)
80
- @valor = valor
81
- @formato = formato
108
+ def to_hash
109
+ itens.to_h
82
110
  end
83
111
 
84
- attr_reader :valor, :formato
112
+ private
85
113
 
86
- public
114
+ attr_reader :itens
87
115
 
88
- def vazio?
89
- to_s.empty? && formato != :vazio
90
- end
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
- def to_s
93
- @to_s ||= (formato ? FORMATADORES[formato].call(valor) : valor).to_s
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
- criar_arquivo_data
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 criar_arquivo_data
50
- arquivo_data.criar
49
+ def salvar_arquivo_data
50
+ arquivo_data.salvar
51
51
  end
52
52
 
53
53
  def inicio_da_validade
@@ -7,7 +7,7 @@ module Teodoro
7
7
  processar_retificacao
8
8
  else
9
9
  registrar_arquivos_data
10
- criar_arquivos_data
10
+ salvar_arquivos_data
11
11
  end
12
12
  end
13
13
 
@@ -38,14 +38,15 @@ module Teodoro
38
38
  end
39
39
  end
40
40
 
41
- def criar_arquivos_data
42
- arquivos_data.shift.criar while arquivos_data.any?
41
+ def salvar_arquivos_data
42
+ arquivos_data.shift.salvar while arquivos_data.any?
43
43
  end
44
44
 
45
45
  def arquivos_data
46
46
  @arquivos_data ||= dados_dos_arquivos_data.map do |dados_do_arquivo_data|
47
47
  ArquivoData.new(
48
48
  diretorio: empresa.destino_dos_arquivos_data,
49
+ operacao: dados_do_arquivo_data.operacao,
49
50
  nome: dados_do_arquivo_data.nome,
50
51
  itens_do_conteudo: dados_do_arquivo_data.itens_do_conteudo
51
52
  )
@@ -8,7 +8,7 @@ module Teodoro
8
8
 
9
9
  attr_reader :empresa, :destino
10
10
 
11
- def gerar # rubocop:disable Metrics/MethodLength
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
- ).criar
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
- criar_arquivo_data
51
+ salvar_arquivo_data
52
52
  end
53
53
 
54
54
  private
55
55
 
56
- def criar_arquivo_data
57
- arquivo_data.criar
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)
@@ -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
@@ -48,13 +48,13 @@ module Teodoro
48
48
  end
49
49
 
50
50
  def processar
51
- criar_arquivo_data
51
+ salvar_arquivo_data
52
52
  end
53
53
 
54
54
  private
55
55
 
56
- def criar_arquivo_data
57
- arquivo_data.criar
56
+ def salvar_arquivo_data
57
+ arquivo_data.salvar
58
58
  end
59
59
 
60
60
  def arquivo_data # rubocop:disable Metrics/MethodLength
@@ -51,7 +51,7 @@ module Teodoro
51
51
  classificar_arquivos_xml
52
52
  ordenar_arquivos_xml
53
53
  processar_arquivos_xml
54
- gerar_arquivo_de_dados_gerais
54
+ salvar_arquivo_de_dados_gerais
55
55
  processar_cargos_gerados
56
56
  processar_funcoes_geradas
57
57
  remover_matricula_do_nome_dos_arquivos_data_de_admissao_de_trabalhador_sem_vinculo
@@ -92,14 +92,7 @@ module Teodoro
92
92
  end
93
93
 
94
94
  def inicios_de_afastamento_por_numero_do_recibo
95
- contratos_de_trabalho
96
- .sum([], &:inicios_de_afastamento)
97
- .group_by(&:numero_do_recibo)
98
- .transform_values { _1.size == 1 ? _1.first : raise }
99
- end
100
-
101
- def contratos_de_trabalho
102
- [*contratos_de_emprego, *contratos_de_trabalho_sem_vinculo]
95
+ @inicios_de_afastamento_por_numero_do_recibo ||= {}
103
96
  end
104
97
 
105
98
  private
@@ -178,8 +171,8 @@ module Teodoro
178
171
  arquivos_xml.shift.processar while arquivos_xml.any?
179
172
  end
180
173
 
181
- def gerar_arquivo_de_dados_gerais
182
- arquivo_de_dados_gerais.gerar
174
+ def salvar_arquivo_de_dados_gerais
175
+ arquivo_de_dados_gerais.salvar
183
176
  end
184
177
 
185
178
  def arquivo_de_dados_gerais
@@ -5,7 +5,7 @@ module Teodoro
5
5
 
6
6
  private
7
7
 
8
- def criar_arquivo_data
8
+ def salvar_arquivo_data
9
9
  super
10
10
 
11
11
  registrar_inicio_da_validade
@@ -8,6 +8,7 @@ module Teodoro
8
8
  def dados_dos_arquivos_data # rubocop:disable Metrics/MethodLength
9
9
  [
10
10
  Obj.new(
11
+ operacao: :inclusao,
11
12
  nome: "PRE[#{cpf_do_trabalhador}]",
12
13
  itens_do_conteudo: [
13
14
  ['NrRecibo', recibo['recibo/nrRecibo']],