Skip to content

Commit

Permalink
Changing the cbo logic, removing arrays, correcting round
Browse files Browse the repository at this point in the history
  • Loading branch information
miloskimatheus committed Jan 27, 2025
1 parent d90d2b6 commit 2bfb31f
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 75 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
-- carga horaria ambulatorial dos profissionais no cnes em unidades que oferecem vagas
-- no sisreg
-- view
with
versao_atual as (
select *
Expand All @@ -10,71 +9,72 @@ with
select max(metadado__data_particao)
from {{ ref("mart_cnes_subgeral__profissionais_mrj_sus") }}
)
)
),

select
-- identificadores
profissional__cpf as cpf,
array_agg(distinct profissional__cns ignore nulls) as cns,
array_agg(distinct profissional__nome ignore nulls) as profissional,
array_agg(distinct profissional__id_cbo ignore nulls) as id_cbo_2002,
array_agg(distinct profissional__cbo ignore nulls) as ocupacao,
array_agg(distinct profissional__cbo_familia ignore nulls) as ocupacao_agg,
profissionais_mais_recentes as (
select
-- identificadores
profissional__cpf as cpf,
profissional__cns as cns,
profissional__nome as profissional,
profissional__id_cbo as id_cbo_2002,
profissional__cbo as ocupacao,
profissional__cbo_familia as ocupacao_agg,

-- carga horaria mensal APROXIMADA
round(
sum(profissional__carga_horaria_ambulatorial * 4.5)
) as carga_horaria_ambulatorial_mensal,
-- carga horaria mensal APROXIMADA
round(
profissional__carga_horaria_ambulatorial * 4.5
) as carga_horaria_ambulatorial_mensal,

-- informação temporal
metadado__ano_competencia as ano_competencia,
metadado__mes_competencia as mes_competencia,
-- informação temporal
metadado__ano_competencia as ano_competencia,
metadado__mes_competencia as mes_competencia,

-- dados dos estabelecimentos
estabelecimento__id_cnes as id_cnes,
array_agg(distinct estabelecimento__nome_fantasia ignore nulls) as estabelecimento,
array_agg(distinct estabelecimento__esfera ignore nulls) as esfera,
array_agg(
distinct estabelecimento__natureza_juridica_descr ignore nulls
) as natureza_juridica,
array_agg(distinct estabelecimento__tipo_gestao_descr ignore nulls) as tipo_gestao,
array_agg(distinct estabelecimento__turno_atendimento ignore nulls) as turno,
array_agg(
distinct estabelecimento__tipo_unidade_alternativo ignore nulls
) as tipo_unidade_alternativo,
array_agg(
distinct estabelecimento__tipo_unidade_agrupado ignore nulls
) as tipo_unidade_agrupado,
array_agg(distinct estabelecimento__id_ap ignore nulls) as id_ap,
array_agg(distinct estabelecimento__ap ignore nulls) as ap,
array_agg(
distinct estabelecimento__endereco_bairro ignore nulls
) as endereco_bairro,
-- dados dos estabelecimentos
estabelecimento__id_cnes as id_cnes,
estabelecimento__nome_fantasia as estabelecimento,
estabelecimento__esfera as esfera,
estabelecimento__natureza_juridica_descr as natureza_juridica,
estabelecimento__tipo_gestao_descr as tipo_gestao,
estabelecimento__turno_atendimento as turno,
estabelecimento__tipo_unidade_alternativo as tipo_unidade_alternativo,
estabelecimento__tipo_unidade_agrupado as tipo_unidade_agrupado,
estabelecimento__id_ap as id_ap,
estabelecimento__ap as ap,
estabelecimento__endereco_bairro as endereco_bairro,

from versao_atual
row_number() over (
partition by profissional__cpf
order by metadado__ano_competencia desc, metadado__mes_competencia desc
) as rn

where
-- selecionando periodo de interesse
metadado__ano_competencia >= 2020
from versao_atual
where
-- selecionando periodo de interesse
metadado__ano_competencia >= 2020

-- selecionando apenas estabelecimentos que ja programaram vagas no sisreg
-- historicamente
and estabelecimento__id_cnes
in (select id_cnes from {{ ref("int_mva__oferta_programada_mensal") }})
-- selecionando apenas estabelecimentos que ja programaram vagas no sisreg
-- historicamente
and estabelecimento__id_cnes
in (select id_cnes from {{ ref("int_mva__oferta_programada_mensal") }})

-- selecionando apenas profissionais que ja progamaram vagas no sisreg
-- historicamente
and profissional__cpf
in (select cpf from {{ ref("int_mva__oferta_programada_mensal") }})
-- selecionando apenas profissionais que ja progamaram vagas no sisreg
-- historicamente
and profissional__cpf
in (select cpf from {{ ref("int_mva__oferta_programada_mensal") }})

-- selecionando apenas profissionais com carga horaria ambulatorial
and profissional__carga_horaria_ambulatorial > 0
-- selecionando apenas profissionais com carga horaria ambulatorial
and profissional__carga_horaria_ambulatorial > 0

-- selecionando ocupacoes de interesse
and regexp_contains(
profissional__id_cbo,
r'^(3222|2251|2235|2231|2252|2232|2236|2234|2237|2515|2253|3251|2238|5152|2239)'
-- selecionando ocupacoes de interesse
and regexp_contains(
profissional__id_cbo,
r'^(3222|2251|2235|2231|2252|2232|2236|2234|2237|2515|2253|3251|2238|5152|2239)'
)
and profissional__id_cbo
not in ('225142', '225130', '223293', '223565', '322245') -- exclui saude da familia
)
and profissional__id_cbo not in ('225142', '225130', '223293', '223565', '322245') -- exclui saude da familia

group by cpf, id_cnes, ano_competencia, mes_competencia
select *
from profissionais_mais_recentes
where rn = 1
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
-- combina os modelos de contagens a nivel de procedimentos, com os totais a nivel de
-- estabelecimentos, com os parametros dos procedimentos
-- view
select
-- identificadores
por_proced.cpf,
por_proced.id_cnes,
por_proced.id_procedimento,
por_proced.id_cbo_2002,
por_proced.id_cbo_2002_qtd_sisreg,
por_proced.id_cbo_2002_todos_sisreg,

por_proced.ano as ano_competencia,
por_proced.mes as mes_competencia,

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
-- vagas programadas pelos profissionais por procedimento
-- view
with
versao_atual as (
select *
Expand All @@ -16,19 +15,37 @@ select
profissional_executante_cpf as cpf,
id_estabelecimento_executante as id_cnes,
id_procedimento_interno as id_procedimento,
array_agg(distinct id_cbo2002 ignore nulls) as id_cbo_2002,

-- pega cbo mais atual
array_agg(
id_cbo2002 ignore nulls
order by procedimento_vigencia_ano desc, procedimento_vigencia_mes desc
limit 1
)[offset(0)] as id_cbo_2002,

-- contagem de cbos pelos quais o profissional está oferecendo vagas
array_length(
array_agg(
id_cbo2002 ignore nulls
order by procedimento_vigencia_ano desc, procedimento_vigencia_mes desc
limit 1
)
) as id_cbo_2002_qtd_sisreg,

-- cbos pelos quais o profissional está oferecendo vagas
string_agg(distinct id_cbo2002, ',') as id_cbo_2002_todos_sisreg,

procedimento_vigencia_ano as ano,
procedimento_vigencia_mes as mes,

-- contagens de vagas
sum(
(vagas_primeira_vez_qtd + vagas_reserva_qtd)
vagas_primeira_vez_qtd + vagas_reserva_qtd
) as vagas_programadas_mensal_primeira_vez,
sum(vagas_retorno_qtd) as vagas_programadas_mensal_retorno,
sum(vagas_todas_qtd) as vagas_programadas_mensal_todas

from versao_atual

where
-- filtrando periodo de interesse
procedimento_vigencia_ano >= 2020
Expand All @@ -38,6 +55,5 @@ where
id_cbo2002,
r'^(3222|2251|2235|2231|2252|2232|2236|2234|2237|2515|2253|3251|2238|5152|2239)'
)
and id_cbo2002 not in ('225142', '225130', '223293', '223565', '322245') -- exclui saude da familia

and id_cbo2002 not in ('225142', '225130', '223293', '223565', '322245') -- exclui saúde da família
group by cpf, id_cnes, id_procedimento, ano, mes
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
-- vagas programadas pelos profissionais por unidade
-- view
select
-- identificadores
cpf,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -191,5 +191,8 @@ models:
- name: status_oferta
description: "Classifica o balanço de oferta como Adequado, Alto, Baixo ou Muito Baixo utilizando o Intervalo Interquartil (IQR), com base em ano_competencia, mes_competencia e id_procedimento."

- name: qtd_id_cbo_2002
description: "Quantidade de CBOs do profissional em determinado mes, ano e estabelecimento."
- name: id_cbo_2002_qtd_sisreg
description: "Quantidade de CBOs do profissional no SISREG em determinado mes, ano e estabelecimento."

- name: id_cbo_2002_todos_sisreg
description: "Todos os CBOs do profissional no SISREG em determinado mes, ano e estabelecimento."
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ with
coalesce(ofer.cpf, prof.cpf) as cpf,
prof.cns,
prof.profissional,
coalesce(ofer.id_cbo_2002, prof.id_cbo_2002) as id_cbo_2002,
coalesce(prof.id_cbo_2002, ofer.id_cbo_2002) as id_cbo_2002,
ofer.id_cbo_2002_qtd_sisreg,
ofer.id_cbo_2002_todos_sisreg,
prof.ocupacao,
prof.ocupacao_agg,
coalesce(ofer.id_cnes, prof.id_cnes) as id_cnes,
Expand Down Expand Up @@ -107,8 +109,7 @@ with
prof.carga_horaria_ambulatorial_mensal
* ofer.procedimento_distribuicao
* ofer.procedimento_consultas_hora
* ofer.procedimento_proporcao_retornos,
3
* ofer.procedimento_proporcao_retornos
)
end as vagas_esperadas_mensal_retorno,

Expand Down Expand Up @@ -180,7 +181,7 @@ with
group by ano_competencia, mes_competencia, id_procedimento
),

mva_with_status as (
final as (
select
mva.*,

Expand All @@ -202,10 +203,6 @@ with
on mva.ano_competencia = iqr.ano_competencia
and mva.mes_competencia = iqr.mes_competencia
and mva.id_procedimento = iqr.id_procedimento
),

final as (
select *, array_length(id_cbo_2002) as qtd_id_cbo_2002 from mva_with_status
)

select *
Expand Down

0 comments on commit 2bfb31f

Please sign in to comment.