teodoro 0.10.1 → 0.15.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.rb +6 -0
- data/lib/teodoro/arquivo_data.rb +21 -22
- data/lib/teodoro/arquivo_data/car.rb +34 -0
- data/lib/teodoro/arquivo_data/tra_epg_avi.rb +55 -0
- data/lib/teodoro/arquivo_de_evento.rb +4 -0
- data/lib/teodoro/arquivo_de_evento_de_tabela.rb +49 -19
- data/lib/teodoro/arquivo_de_evento_nao_periodico.rb +1 -1
- data/lib/teodoro/arquivo_xml.rb +30 -3
- data/lib/teodoro/empresa.rb +13 -138
- data/lib/teodoro/empresa/arquivos_data.rb +31 -0
- data/lib/teodoro/empresa/cargos_gerados.rb +86 -0
- data/lib/teodoro/empresa/contratos_de_emprego.rb +59 -0
- data/lib/teodoro/empresa/contratos_de_trabalho_sem_vinculo.rb +59 -0
- data/lib/teodoro/leiaute/arquivo_s1000.rb +18 -8
- data/lib/teodoro/leiaute/arquivo_s1005.rb +5 -5
- data/lib/teodoro/leiaute/arquivo_s1010.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1020.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1030.rb +19 -23
- data/lib/teodoro/leiaute/arquivo_s1040.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1050.rb +3 -3
- data/lib/teodoro/leiaute/arquivo_s1070.rb +4 -4
- data/lib/teodoro/leiaute/arquivo_s2190.rb +2 -2
- data/lib/teodoro/leiaute/arquivo_s2200.rb +173 -15
- data/lib/teodoro/leiaute/arquivo_s2205.rb +42 -42
- data/lib/teodoro/leiaute/arquivo_s2206.rb +177 -74
- data/lib/teodoro/leiaute/arquivo_s2230.rb +5 -5
- data/lib/teodoro/leiaute/arquivo_s2250.rb +14 -34
- data/lib/teodoro/leiaute/arquivo_s2299.rb +67 -3
- data/lib/teodoro/leiaute/arquivo_s2300.rb +141 -14
- data/lib/teodoro/leiaute/arquivo_s2306.rb +85 -6
- metadata +8 -3
- data/lib/teodoro/leiaute.rb +0 -24
@@ -0,0 +1,31 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class ArquivosData
|
4
|
+
private
|
5
|
+
|
6
|
+
def initialize(destino_dos_arquivos_data)
|
7
|
+
@destino_dos_arquivos_data = destino_dos_arquivos_data
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :destino_dos_arquivos_data
|
11
|
+
|
12
|
+
public
|
13
|
+
|
14
|
+
def registrar(recibo:, nome:)
|
15
|
+
(nomes_por_recibo[recibo] ||= []) << nome
|
16
|
+
end
|
17
|
+
|
18
|
+
def excluir(recibo)
|
19
|
+
(nomes_por_recibo.delete(recibo) || [])
|
20
|
+
.map { |nome| File.join(destino_dos_arquivos_data, "#{nome}.data") }
|
21
|
+
.each { File.delete(_1) }
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def nomes_por_recibo
|
27
|
+
@nomes_por_recibo ||= {}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class CargosGerados
|
4
|
+
private
|
5
|
+
|
6
|
+
def initialize(empresa)
|
7
|
+
@empresa = empresa
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_reader :empresa
|
11
|
+
|
12
|
+
public
|
13
|
+
|
14
|
+
extend Forwardable
|
15
|
+
|
16
|
+
def_delegators :cargos, :each
|
17
|
+
|
18
|
+
def [](nome:, cbo:)
|
19
|
+
indice[nome: nome, cbo: cbo] ||= Cargo.new(empresa: empresa, dados: Obj.new(nome: nome, cbo: cbo)) if nome
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def cargos
|
25
|
+
indice.values
|
26
|
+
end
|
27
|
+
|
28
|
+
def indice
|
29
|
+
@indice ||= {}
|
30
|
+
end
|
31
|
+
|
32
|
+
class Cargo
|
33
|
+
private
|
34
|
+
|
35
|
+
def initialize(empresa:, dados:)
|
36
|
+
@empresa = empresa
|
37
|
+
@dados = dados
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :empresa
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
attr_reader :dados
|
45
|
+
|
46
|
+
def codigo
|
47
|
+
@codigo ||= SecureRandom.hex(15)
|
48
|
+
end
|
49
|
+
|
50
|
+
def processar
|
51
|
+
criar_arquivo_data
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def criar_arquivo_data
|
57
|
+
arquivo_data.criar
|
58
|
+
end
|
59
|
+
|
60
|
+
def arquivo_data # rubocop:disable Metrics/MethodLength
|
61
|
+
ArquivoData.new(
|
62
|
+
diretorio: empresa.destino_dos_arquivos_data,
|
63
|
+
nome: ArquivoDeEventoDeTabela::NomeDoArquivoData.new(
|
64
|
+
identificacao: ArquivoData::CAR::Identificacao.new(codigo),
|
65
|
+
inicio_da_validade: empresa.inicio_da_validade
|
66
|
+
),
|
67
|
+
itens_do_conteudo: ArquivoData::CAR::ItensDeConteudo.new(
|
68
|
+
Obj.new(
|
69
|
+
codigo_do_cargo: codigo,
|
70
|
+
inicio_da_validade: empresa.inicio_da_validade,
|
71
|
+
fim_da_validade: nil,
|
72
|
+
nome_do_cargo: dados.nome,
|
73
|
+
cbo: dados.cbo,
|
74
|
+
orgao_publico?: false,
|
75
|
+
id_do_evento: nil,
|
76
|
+
numero_do_recibo: nil,
|
77
|
+
processo_de_emissao_do_evento: nil,
|
78
|
+
versao_do_aplicativo_de_processamento_do_evento: nil
|
79
|
+
)
|
80
|
+
)
|
81
|
+
)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class ContratosDeEmprego
|
4
|
+
def registrar_admissao(admissao:, afastamento:)
|
5
|
+
contratos_por_matricula[admissao.matricula] = Contrato.new(admissao: admissao, afastamento: afastamento)
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](matricula)
|
9
|
+
contratos_por_matricula[matricula]
|
10
|
+
end
|
11
|
+
|
12
|
+
def *(cpf_do_trabalhador:, data:)
|
13
|
+
contratos
|
14
|
+
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
15
|
+
.sort_by(&:data_de_admissao)
|
16
|
+
end
|
17
|
+
|
18
|
+
def remover(recibo)
|
19
|
+
contratos_por_matricula.delete_if { _2.recibo == recibo }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def contratos_por_matricula
|
25
|
+
@contratos_por_matricula ||= {}
|
26
|
+
end
|
27
|
+
|
28
|
+
def contratos
|
29
|
+
contratos_por_matricula.values
|
30
|
+
end
|
31
|
+
|
32
|
+
class Contrato
|
33
|
+
private
|
34
|
+
|
35
|
+
def initialize(admissao:, afastamento:)
|
36
|
+
@admissao = admissao
|
37
|
+
@afastamento = afastamento
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :admissao, :data_de_desligamento
|
41
|
+
|
42
|
+
public
|
43
|
+
|
44
|
+
extend Forwardable
|
45
|
+
|
46
|
+
def_delegators :admissao, :matricula, :data_de_admissao, :categoria_do_trabalhador, :cpf_do_trabalhador,
|
47
|
+
:recibo
|
48
|
+
|
49
|
+
attr_accessor :afastamento
|
50
|
+
|
51
|
+
attr_writer :data_de_desligamento
|
52
|
+
|
53
|
+
def ativo?(data)
|
54
|
+
data_de_admissao <= data && (!data_de_desligamento || data_de_desligamento >= data)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Teodoro
|
2
|
+
class Empresa
|
3
|
+
class ContratosDeTrabalhoSemVinculo
|
4
|
+
def registrar_inicio_de_contrato(inicio_de_contrato:, afastamento:)
|
5
|
+
contratos << Contrato.new(inicio_de_contrato: inicio_de_contrato, afastamento: afastamento)
|
6
|
+
end
|
7
|
+
|
8
|
+
def [](cpf_do_trabalhador:, categoria_do_trabalhador:, data:)
|
9
|
+
contratos
|
10
|
+
.select {
|
11
|
+
_1.cpf_do_trabalhador == cpf_do_trabalhador && _1.categoria_do_trabalhador == categoria_do_trabalhador &&
|
12
|
+
_1.ativo?(data)
|
13
|
+
}
|
14
|
+
.max_by(&:data_de_inicio)
|
15
|
+
end
|
16
|
+
|
17
|
+
def *(cpf_do_trabalhador:, data:)
|
18
|
+
contratos
|
19
|
+
.select { _1.cpf_do_trabalhador == cpf_do_trabalhador && _1.ativo?(data) }
|
20
|
+
.sort_by(&:data_de_inicio)
|
21
|
+
end
|
22
|
+
|
23
|
+
def remover(recibo)
|
24
|
+
contratos.delete_if { _1.recibo == recibo }
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def contratos
|
30
|
+
@contratos ||= []
|
31
|
+
end
|
32
|
+
|
33
|
+
class Contrato
|
34
|
+
private
|
35
|
+
|
36
|
+
def initialize(inicio_de_contrato:, afastamento:)
|
37
|
+
@inicio_de_contrato = inicio_de_contrato
|
38
|
+
@afastamento = afastamento
|
39
|
+
end
|
40
|
+
|
41
|
+
attr_reader :inicio_de_contrato, :data_do_termino
|
42
|
+
|
43
|
+
public
|
44
|
+
|
45
|
+
extend Forwardable
|
46
|
+
|
47
|
+
def_delegators :inicio_de_contrato, :cpf_do_trabalhador, :categoria_do_trabalhador, :data_de_inicio, :recibo
|
48
|
+
|
49
|
+
attr_accessor :afastamento
|
50
|
+
|
51
|
+
attr_writer :data_do_termino
|
52
|
+
|
53
|
+
def ativo?(data)
|
54
|
+
data_de_inicio <= data && (!data_do_termino || data_do_termino >= data)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -1,10 +1,22 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1000 # rubocop:disable Metrics/ClassLength
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
private
|
7
7
|
|
8
|
+
def criar_arquivo_data
|
9
|
+
super
|
10
|
+
|
11
|
+
registrar_inicio_da_validade
|
12
|
+
end
|
13
|
+
|
14
|
+
def registrar_inicio_da_validade
|
15
|
+
return unless !empresa.inicio_da_validade || inicio_da_validade < empresa.inicio_da_validade
|
16
|
+
|
17
|
+
empresa.inicio_da_validade = inicio_da_validade
|
18
|
+
end
|
19
|
+
|
8
20
|
def noh_de_informacoes_do_evento
|
9
21
|
'infoEmpregador'
|
10
22
|
end
|
@@ -61,7 +73,6 @@ module Teodoro
|
|
61
73
|
|
62
74
|
def itens_do_conteudo_do_arquivo_data # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
63
75
|
[
|
64
|
-
# rubocop:disable Layout/LineLength
|
65
76
|
['TipoInscricaoEmpregador', tipo_de_inscricao],
|
66
77
|
['FapBdContrib'],
|
67
78
|
['AlteracaoEmPeriodoExistente'],
|
@@ -73,12 +84,12 @@ module Teodoro
|
|
73
84
|
['EhRetificacao'],
|
74
85
|
['EhInclusaoNovoPeriodo'],
|
75
86
|
['RetornoAction'],
|
76
|
-
['ehOrgaoPublico',
|
77
|
-
['ehOrgaoPublicoUniao',
|
78
|
-
['ehOrgaoPublicoEstadualMunicipalDistrital',
|
87
|
+
['ehOrgaoPublico', orgao_publico?, :bool],
|
88
|
+
['ehOrgaoPublicoUniao', orgao_publico?, :bool],
|
89
|
+
['ehOrgaoPublicoEstadualMunicipalDistrital', evento['infoEmpregador/*/infoCadastro/infoOP/infoEnte'], :bool],
|
79
90
|
['ExibeModoCompleto'],
|
80
|
-
['InicioValidade',
|
81
|
-
['FimValidade',
|
91
|
+
['InicioValidade', inicio_da_validade, :mes_ano],
|
92
|
+
['FimValidade', fim_da_validade, :mes_ano],
|
82
93
|
['NomeRazaoSocial', nome_ou_razao_social],
|
83
94
|
['ClassificacaoTributaria', evento['infoEmpregador/*/infoCadastro/classTrib']],
|
84
95
|
['NaturezaJuridica', evento['infoEmpregador/*/infoCadastro/natJurid']],
|
@@ -117,7 +128,6 @@ module Teodoro
|
|
117
128
|
["ListaSoftHouses_#{seq}_Email", software_house['email']]
|
118
129
|
]
|
119
130
|
end.sum([])
|
120
|
-
# rubocop:enable Layout/LineLength
|
121
131
|
]
|
122
132
|
end
|
123
133
|
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1005
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
private
|
7
7
|
|
@@ -33,15 +33,15 @@ module Teodoro
|
|
33
33
|
['TipoInscricaoEstabelecimento', evento['infoEstab/*/ideEstab/tpInsc']],
|
34
34
|
['NumeroInscricaoEstabelecimento', numero_de_inscricao],
|
35
35
|
['NomeEstabelecimento'],
|
36
|
-
['InicioValidade',
|
37
|
-
['FimValidade',
|
36
|
+
['InicioValidade', inicio_da_validade, :mes_ano],
|
37
|
+
['FimValidade', fim_da_validade, :mes_ano],
|
38
38
|
['TipoCaepf', evento['infoEstab/*/dadosEstab/infoCaepf/tpCaepf']],
|
39
39
|
['CnaePreponderanteCodigoDescricaoAutoComplete'],
|
40
40
|
['CnaePreponderante', evento['infoEstab/*/dadosEstab/cnaePrep']],
|
41
41
|
['CnaePreponderantePreenchido'],
|
42
42
|
['AliquotaRat', evento['infoEstab/*/dadosEstab/aliqGilrat/aliqRat']],
|
43
|
-
['Fap', evento['infoEstab/*/dadosEstab/aliqGilrat/fap']],
|
44
|
-
['AliquotaRatAjustada', evento['infoEstab/*/dadosEstab/aliqGilrat/aliqRatAjust']],
|
43
|
+
['Fap', evento['infoEstab/*/dadosEstab/aliqGilrat/fap'], :decimal],
|
44
|
+
['AliquotaRatAjustada', evento['infoEstab/*/dadosEstab/aliqGilrat/aliqRatAjust'], :decimal],
|
45
45
|
['FapRecuperado'],
|
46
46
|
['AliquotaRatRecuperada'],
|
47
47
|
['DesejaIncluirProcessoAdminJudRat'],
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1010
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
private
|
7
7
|
|
@@ -32,8 +32,8 @@ module Teodoro
|
|
32
32
|
['BloquearCodigo'],
|
33
33
|
['BloquearAntigoPeriodoValidade'],
|
34
34
|
['Codigo', codigo],
|
35
|
-
['InicioValidade',
|
36
|
-
['FimValidade',
|
35
|
+
['InicioValidade', inicio_da_validade, :mes_ano],
|
36
|
+
['FimValidade', fim_da_validade, :mes_ano],
|
37
37
|
['chkIdTabelaRubrica'],
|
38
38
|
['IdTabelaRubrica', identificador_da_tabela_de_rubricas],
|
39
39
|
['IdTabelaRubricaText'],
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1020
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
private
|
7
7
|
|
@@ -30,8 +30,8 @@ module Teodoro
|
|
30
30
|
['CodigoConvenioTerceirosHidden'],
|
31
31
|
['IdEvento'],
|
32
32
|
['CodigoLotacao', codigo_da_lotacao_tributaria],
|
33
|
-
['InicioValidade',
|
34
|
-
['FimValidade',
|
33
|
+
['InicioValidade', inicio_da_validade, :mes_ano],
|
34
|
+
['FimValidade', fim_da_validade, :mes_ano],
|
35
35
|
['TipoLotacao', evento['infoLotacao/*/dadosLotacao/tpLotacao']],
|
36
36
|
['Tipo'],
|
37
37
|
['TipoInscricaoEstab', evento['infoLotacao/*/dadosLotacao/tpInsc']],
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1030
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
private
|
7
7
|
|
@@ -14,32 +14,28 @@ module Teodoro
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def identificacao_do_arquivo_data
|
17
|
-
|
17
|
+
ArquivoData::CAR::Identificacao.new(codigo_do_cargo)
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
@
|
20
|
+
def itens_do_conteudo_do_arquivo_data # rubocop:disable Metrics/MethodLength
|
21
|
+
@itens_do_conteudo_do_arquivo_data ||= ArquivoData::CAR::ItensDeConteudo.new(
|
22
|
+
Obj.new(
|
23
|
+
codigo_do_cargo: codigo_do_cargo,
|
24
|
+
inicio_da_validade: inicio_da_validade,
|
25
|
+
fim_da_validade: fim_da_validade,
|
26
|
+
nome_do_cargo: evento['infoCargo/*/dadosCargo/nmCargo'],
|
27
|
+
cbo: evento['infoCargo/*/dadosCargo/codCBO'],
|
28
|
+
orgao_publico?: evento['infoCargo/*/dadosCargo/cargoPublico'],
|
29
|
+
id_do_evento: id_do_evento,
|
30
|
+
numero_do_recibo: numero_do_recibo,
|
31
|
+
processo_de_emissao_do_evento: processo_de_emissao_do_evento,
|
32
|
+
versao_do_aplicativo_de_processamento_do_evento: versao_do_aplicativo_de_processamento_do_evento
|
33
|
+
)
|
34
|
+
)
|
22
35
|
end
|
23
36
|
|
24
|
-
def
|
25
|
-
[
|
26
|
-
['RequestVerificationToken'],
|
27
|
-
['SomenteVisualizacao'],
|
28
|
-
['BloquearCodigo'],
|
29
|
-
['BloquearAntigoPeriodoValidade'],
|
30
|
-
['CodigoCargo', codigo_do_cargo],
|
31
|
-
['InicioValidade', [inicio_da_validade, :mes_ano]],
|
32
|
-
['FimValidade', [fim_da_validade, :mes_ano]],
|
33
|
-
['DadosCargo_DescricaoCargo', evento['infoCargo/*/dadosCargo/nmCargo']],
|
34
|
-
['DadosCargo_CodigoCBO', evento['infoCargo/*/dadosCargo/codCBO']],
|
35
|
-
['DadosCargo_CodigoCBO_TEXT'],
|
36
|
-
['autocomplete_DadosCargo_CodigoCBO'],
|
37
|
-
['PreencherCargoPublico', [evento['infoCargo/*/dadosCargo/cargoPublico'], :bool]],
|
38
|
-
['IdEventoXml', id_do_evento],
|
39
|
-
['NrReciboEventoOriginal', numero_do_recibo],
|
40
|
-
['DescricaoProcEmi', processo_de_emissao_do_evento],
|
41
|
-
['VerProc', versao_do_aplicativo_de_processamento_do_evento]
|
42
|
-
]
|
37
|
+
def codigo_do_cargo
|
38
|
+
@codigo_do_cargo ||= evento['infoCargo/*/ideCargo/codCargo']
|
43
39
|
end
|
44
40
|
end
|
45
41
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Teodoro
|
2
2
|
module Leiaute
|
3
3
|
class ArquivoS1040
|
4
|
-
include ArquivoDeEventoDeTabela
|
4
|
+
include ArquivoDeEventoDeTabela::DescritorDeArquivoData
|
5
5
|
|
6
6
|
def noh_de_informacoes_do_evento
|
7
7
|
'infoFuncao'
|
@@ -26,8 +26,8 @@ module Teodoro
|
|
26
26
|
['BloquearCodigo'],
|
27
27
|
['BloquearAntigoPeriodoValidade'],
|
28
28
|
['CodigoFuncao', codigo_da_funcao],
|
29
|
-
['InicioValidade',
|
30
|
-
['FimValidade',
|
29
|
+
['InicioValidade', inicio_da_validade, :mes_ano],
|
30
|
+
['FimValidade', fim_da_validade, :mes_ano],
|
31
31
|
['DadosFuncao_DescricaoFuncao', evento['infoFuncao/*/dadosFuncao/dscFuncao']],
|
32
32
|
['DadosFuncao_CodigoCBO', evento['infoFuncao/*/dadosFuncao/codCBO']],
|
33
33
|
['DadosFuncao_CodigoCBO_TEXT'],
|