diff --git a/queries/dbt_project.yml b/queries/dbt_project.yml index 4117865..a76c514 100644 --- a/queries/dbt_project.yml +++ b/queries/dbt_project.yml @@ -53,4 +53,7 @@ models: +schema: recursos_humanos_ergon_pericia_medica porte_empresa: +materialized: table - +schema: porte_empresa \ No newline at end of file + +schema: porte_empresa + recursos_humanos_ergon_saude + +materialized: table + +schema: recursos_humanos_ergon_saude \ No newline at end of file diff --git a/queries/models/recursos_humanos_ergon_saude/funcionarios_ativos.sql b/queries/models/recursos_humanos_ergon_saude/funcionarios_ativos.sql new file mode 100644 index 0000000..6ddf9c4 --- /dev/null +++ b/queries/models/recursos_humanos_ergon_saude/funcionarios_ativos.sql @@ -0,0 +1,109 @@ +WITH funcionarios AS ( + SELECT + f.id_vinculo AS id_funcionario, + LPAD(f.id_cpf, 11, '0') AS cpf, -- Adiciona zero à esquerda caso o CPF tenha menos de 11 dígitos + f.nome + FROM `rj-smfp.recursos_humanos_ergon.funcionario` f + -- WHERE LPAD(f.id_cpf, 11, '0') = '' +), + +provimento AS ( + SELECT + p.id_funcionario, + p.id_vinculo, + p.data_inicio AS provimento_inicio, + p.data_fim AS provimento_fim, + p.id_setor, + p.id_cargo, + p.empresa_vinculo AS id_empresa + FROM `rj-smfp.recursos_humanos_ergon.provimento` p + -- QUALIFY ROW_NUMBER() OVER (PARTITION BY id_funcionario ORDER BY id_vinculo DESC, data_inicio DESC) = 1 +), + +setor AS ( + SELECT + id_setor, + data_inicio AS setor_inicio, + data_fim AS setor_fim, + id_setor_pai, + nome AS setor_nome, + sigla AS setor_sigla, + id_secretaria -- SAUDE 1800 (consultar SICI) + FROM `rj-smfp.recursos_humanos_ergon.setor` + -- WHERE data_fim IS NULL + QUALIFY ROW_NUMBER() OVER (PARTITION BY id_setor ORDER BY data_inicio DESC) = 1 +), + +cargo AS ( + SELECT + id_cargo, + nome AS cargo_nome, + categoria AS cargo_categoria, + subcategoria AS cargo_subcategoria + FROM `rj-smfp.recursos_humanos_ergon.cargo` + -- WHERE data_fim IS NULL +), + +vacancia_vinculo AS ( + SELECT + id_funcionario, + id_vinculo, + data_vacancia + FROM `rj-smfp.recursos_humanos_ergon.vinculo` + QUALIFY ROW_NUMBER() OVER (PARTITION BY id_funcionario ORDER BY id_vinculo DESC) = 1 +), + +empresa AS ( + SELECT + id_empresa, + nome_empresa AS empresa_nome, + sigla AS empresa_sigla + FROM `rj-smfp.recursos_humanos_ergon.empresas` +), + +funcionarios_saude AS ( + SELECT + f.cpf, + f.nome, + CASE + WHEN (p.provimento_fim IS NULL) AND (vv.data_vacancia IS NULL) THEN TRUE + ELSE FALSE + END AS status_ativo, + p.provimento_inicio, + p.provimento_fim, + vv.data_vacancia, + s.id_secretaria, + p.id_empresa, + s.setor_nome, + s.setor_sigla, + s.setor_inicio, + s.setor_fim, + c.cargo_nome, + c.cargo_categoria, + c.cargo_subcategoria, + emp.empresa_nome, + emp.empresa_sigla + FROM funcionarios f + LEFT JOIN provimento p + ON f.id_funcionario = p.id_funcionario + LEFT JOIN setor s + ON p.id_setor = s.id_setor + LEFT JOIN cargo c + ON p.id_cargo = c.id_cargo + LEFT JOIN vacancia_vinculo vv + ON f.id_funcionario = vv.id_funcionario + AND p.id_vinculo = vv.id_vinculo + LEFT JOIN empresa emp + ON p.id_empresa = emp.id_empresa + WHERE + -- (p.provimento_fim IS NULL) + -- AND (vv.data_vacancia IS NULL) AND + ( + s.id_secretaria = '1800' + OR p.id_empresa IN ('32','80','81','82','83','84','85','86','87','88','89','90','92','95','97') + ) +) + + +SELECT * FROM funcionarios_saude +WHERE status_ativo \ No newline at end of file diff --git a/queries/models/recursos_humanos_ergon_saude/funcionarios_ergon_sms.sql b/queries/models/recursos_humanos_ergon_saude/funcionarios_ergon_sms.sql new file mode 100644 index 0000000..6cb85a1 --- /dev/null +++ b/queries/models/recursos_humanos_ergon_saude/funcionarios_ergon_sms.sql @@ -0,0 +1,59 @@ +WITH all_cpf AS ( + SELECT + DISTINCT + cpf + FROM ( + SELECT + cpf, + 'sms' AS origin + FROM `rj-sms.saude_dados_mestres.profissional_saude` + WHERE cpf IS NOT NULL + UNION ALL + SELECT + cpf, + 'ergon' AS origin + FROM `rj-smfp.recursos_humanos_ergon_saude.funcionarios_ativos` + WHERE cpf IS NOT NULL + ) +), + +funcionarios AS ( + SELECT + cpf.cpf, + ps.cpf AS cpf_sms, + ps.nome AS nome_sms, + fa.cpf AS cpf_ergon, + fa.nome AS nome_ergon + FROM all_cpf cpf + LEFT JOIN `rj-sms.saude_dados_mestres.profissional_saude` ps + ON cpf.cpf = ps.cpf + LEFT JOIN `rj-smfp.recursos_humanos_ergon_saude.funcionarios_ativos` fa + ON cpf.cpf = fa.cpf +), + +funcionarios_check AS ( + SELECT + cpf, + cpf_sms, + cpf_ergon, + nome_sms, + nome_ergon, + CASE + WHEN cpf_sms IS NOT NULL AND cpf_ergon IS NOT NULL THEN 'both' + WHEN cpf_sms IS NOT NULL THEN 'sms' + WHEN cpf_ergon IS NOT NULL THEN 'ergon' + ELSE 'none' + END AS check + FROM funcionarios +) + + +-- SELECT * +-- FROM funcionarios_check + +SELECT + check, + COUNT(*) AS count +FROM funcionarios_check +GROUP BY 1 +ORDER BY 2 \ No newline at end of file