Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alterações nas estruturas dos modelos: estabelecimento_sus_rio_historico; estabelecimento_auxiliar. #92

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion dbt_project.yml
Original file line number Diff line number Diff line change
Expand Up @@ -252,7 +252,7 @@ models:
dado_pessoal: sim
dado_anonimizado: nao
dado_sensivel_saude: sim
dominio: seguir_em_frente
dominio: seguir_em_frente

tests:
rj_sms:
Expand Down
205 changes: 77 additions & 128 deletions models/marts/core/dimensions/dim_estabelecimento.sql
Original file line number Diff line number Diff line change
@@ -1,138 +1,87 @@
{{ config(materialized="table", alias="estabelecimento", tags=["daily"]) }}
{{ config(materialized='table', alias='estabelecimento', tags=['daily']) }}

with source as (
select * from {{ ref('dim_estabelecimento_sus_rio_historico') }}
),

with
versao_atual as (
select max(data_particao) as versao from {{ ref("raw_cnes_web__tipo_unidade") }}
),
current_year as (
select max(ano) as ano_atual from source
),

estabelecimento as (
select *
from {{ ref("raw_cnes_web__estabelecimento") }}
where data_particao = (select versao from versao_atual)
),
current_period as (
select
miloskimatheus marked this conversation as resolved.
Show resolved Hide resolved
cast(current_year.ano_atual as int64) as ano_atual,
cast(max(mes) as int64) as competencia_atual
from source
join current_year on source.ano = current_year.ano_atual
group by current_year.ano_atual
),

unidade as (
select *
from {{ ref("raw_cnes_web__tipo_unidade") }}
where data_particao = (select versao from versao_atual)
),
final as (
select
-- primary key
id_unidade,

turno as (
select *
from {{ ref("raw_cnes_web__turno_atendimento") }}
where data_particao = (select versao from versao_atual)
),
-- foreign keys
id_cnes,
id_tipo_unidade,
id_ap as area_programatica,
cnpj_mantenedora,

estab_sms as (
select *
from estabelecimento
where
cnpj_mantenedora = "29468055000102" -- SMS-RIO
or id_cnes = "5456932" -- Fio Cruz
or (id_municipio_gestor = "330455" and id_natureza_juridica = "2011") -- Rio de Janeiro & Empresa Publica (Rio Saúde)
or (id_municipio_gestor = "330455" and id_natureza_juridica = "1031") -- Rio de Janeiro & Orgao Publico do Poder Executivo Municipal
),
-- common fields
ativa,
tipo_sms_agrupado,
tipo, -- trocar para tipo_cnes?
tipo_sms,
tipo_sms_simplificado,
nome_limpo,
nome_sigla,
nome_complemento,
nome_fantasia,
responsavel_sms,
administracao,
prontuario_tem,
prontuario_versao,
prontuario_estoque_tem_dado,
prontuario_estoque_motivo_sem_dado,
endereco_bairro,
endereco_logradouro,
endereco_numero,
endereco_complemento,
endereco_cep,
endereco_latitude,
endereco_longitude,
telefone,
email,
facebook,
instagram,
twitter,
aberto_sempre,
turno_atendimento,
diretor_clinico_cpf,
diretor_clinico_conselho,

estab_aux as (select * from {{ ref("raw_sheets__estabelecimento_auxiliar") }}),
-- metadata
data_atualizao_registro,
usuario_atualizador_registro,
mes_particao,
ano_particao,
data_particao,
data_carga,
data_snapshot

contatos_aps as (
select * from {{ ref("raw_plataforma_smsrio__estabelecimento_contato") }}
),
from
source
join current_period on source.ano = current_period.ano_atual and source.mes = current_period.competencia_atual
where
estabelecimento_sms_indicador = 1

estab_final as (
select
estab_sms.*,
split(estab_sms.telefone, "/") as telefone_cnes,
contatos_aps.telefone as telefone_aps,
estab_sms.email as email_cnes,
contatos_aps.email as email_aps,
contatos_aps.facebook,
contatos_aps.instagram,
contatos_aps.twitter,
estab_aux.agrupador_sms,
estab_aux.tipo_sms,
estab_aux.tipo_sms_simplificado,
estab_aux.nome_limpo,
regexp_replace(
estab_aux.nome_limpo,
r'(CF |CSE |CMS |UPA 24h |POLICLINICA |HOSPITAL MUNICIPAL |COORD DE EMERGENCIA REGIONAL CER |MATERNIDADE )',
''
) as nome_complemento,
estab_aux.nome_sigla,
estab_aux.prontuario_tem,
estab_aux.prontuario_versao,
estab_aux.responsavel_sms,
estab_aux.administracao,
estab_aux.prontuario_estoque_tem_dado,
estab_aux.prontuario_estoque_motivo_sem_dado,
coalesce(
estab_aux.area_programatica, estab_sms.id_distrito_sanitario
) as id_distrito_sanitario_corrigido, -- corrige registros que possuem algum erro no cadsus
from estab_sms
left join estab_aux using (id_cnes)
left join contatos_aps using (id_cnes)
)
order by
ativa desc,
id_tipo_unidade asc,
area_programatica asc,
endereco_bairro asc,
nome_fantasia asc
)

select
-- Primary key
est.id_unidade,

-- Foreign keys
est.id_cnes,
est.id_tipo_unidade,
est.id_distrito_sanitario_corrigido as area_programatica,
est.cnpj_mantenedora,

-- Common fields
if(est.id_motivo_desativacao = "", "sim", "não") as ativa,
est.agrupador_sms as tipo_sms_agrupado,
unidade.descricao as tipo, # TODO: renomear para tipo_cnes
est.tipo_sms,
est.tipo_sms_simplificado,
est.nome_limpo,
est.nome_sigla,
est.nome_complemento,
est.nome_fantasia,
est.responsavel_sms,
est.administracao,
est.prontuario_tem,
est.prontuario_versao,
est.prontuario_estoque_tem_dado,
est.prontuario_estoque_motivo_sem_dado,
est.endereco_bairro,
est.endereco_logradouro,
est.endereco_numero,
est.endereco_complemento,
est.endereco_cep,
est.endereco_latitude,
est.endereco_longitude,
coalesce(est.telefone_aps, est.telefone_cnes) as telefone,
coalesce(est.email_aps, est.email_cnes) as email,
est.facebook,
est.instagram,
est.twitter,
est.aberto_sempre,
turno.descricao as turno_atendimento,
est.diretor_clinico_cpf,
est.diretor_clinico_conselho,

-- Metadata
data_atualizao_registro,
usuario_atualizador_registro,
est.mes_particao,
est.ano_particao,
est.data_particao,
est.data_carga,
est.data_snapshot,

from estab_final as est
left join turno using (id_turno_atendimento)
left join unidade using (id_tipo_unidade)

order by
ativa desc,
est.id_tipo_unidade asc,
area_programatica asc,
est.endereco_bairro asc,
est.nome_fantasia asc
select * from final
158 changes: 158 additions & 0 deletions models/marts/saude_cnes/_mart_saude_cnes_schema.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,158 @@
version: 2

models:
- name: estabelecimento_sus_rio_historico
description: Esta tabela contém dados sobre todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS.

columns:
# Identificação
- name: ano
description: "Ano de referência dos dados."
- name: mes
description: "Mês de referência dos dados."
- name: id_cnes
description: "Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento."
- name: id_unidade
description: "Identificador específico do estabelecimento de saúde"
- name: nome_razao_social
description: "Razão social do estabelecimento conforme registro oficial."
- name: nome_fantasia
description: "Nome fantasia do estabelecimento."
- name: nome_limpo
description: "Nome do estabelecimento formatado."
- name: nome_sigla
description: "Sigla do nome do estabelecimento."
- name: nome_complemento
description: "Detalhes adicionais que complementam o nome principal do estabelecimento."
- name: cnpj_mantenedora
description: "CNPJ da entidade mantenedora do estabelecimento, importante para identificação legal e financeira."

# Responsabilização
- name: esfera
description: "Classificação administrativa da esfera governamental (federal, estadual, municipal)."
- name: id_natureza_juridica
description: "Código da natureza jurídica do estabelecimento."
- name: natureza_juridica_descr
description: "Descrição da natureza jurídica do estabelecimento."
- name: tipo_gestao
description: "Código indicativo do tipo de gestão (e.g., municipal, estadual)."
- name: tipo_gestao_descr
description: "Descrição do tipo de gestão do estabelecimento."
- name: responsavel_sms
description: "Setor da SMS responsável pelo estabelecimento."
- name: administracao
description: "Administração do estabelecimento."
- name: diretor_clinico_cpf
description: "CPF do diretor clínico do estabelecimento."
- name: diretor_clinico_conselho
description: "Número de registro no conselho profissional do diretor clínico."

# Atributos
- name: tipo_turno
description: "Código indicativo do turno de atendimento (manhã, tarde, integral)."
- name: turno_atendimento
description: "Descrição do turno de atendimento."
- name: aberto_sempre
description: "Indica se o estabelecimento opera continuamente, 24 horas por dia."

# Tipagem dos Estabelecimentos (CNES)
- name: id_tipo_unidade
description: "Código do tipo de unidade de saúde."
- name: tipo
description: "Descrição do tipo de unidade de saúde."

# Tipagem dos Estabelecimentos (DIT)
- name: tipo_sms
description: "Categoria relacionada a serviços de saúde."
- name: tipo_sms_simplificado
description: "Versão simplificada da categoria de SMS, utilizada para classificação geral."
- name: tipo_sms_agrupado
description: "Variável de agrupamento relacionada a tipagem do estabelecimento."

# Tipagem dos Estabelecimentos (SUBGERAL)
- name: tipo_unidade_alternativo
description: "Classificação alternativa do tipo de unidade conforme categorização interna."
- name: tipo_unidade_agrupado
description: "Classificação agrupada do tipo de unidade de saúde."

# Localização
- name: id_ap
description: "Código da Área Programática."
- name: ap
description: "Descrição da Área Programática."
- name: endereco_cep
description: "CEP do estabelecimento."
- name: endereco_bairro
description: "Bairro onde o estabelecimento está localizado."
- name: endereco_logradouro
description: "Logradouro do endereço do estabelecimento."
- name: endereco_numero
description: "Número do endereço do estabelecimento."
- name: endereco_complemento
description: "Complemento do endereço do estabelecimento."
- name: endereco_latitude
description: "Latitude do estabelecimento para georreferenciamento."
- name: endereco_longitude
description: "Longitude do estabelecimento para georreferenciamento."

# Status
- name: ativa
description: "Indica o status operacional do estabelecimento ('sim' para ativo, 'não' para inativo)."

# Prontuário
- name: prontuario_tem
description: "Indica se o estabelecimento mantém prontuários dos pacientes."
- name: prontuario_versao
description: "Versão do prontuário utilizado pelo estabelecimento."
- name: prontuario_estoque_tem_dado
description: "Indica se os prontuários contêm dados disponíveis."
- name: prontuario_estoque_motivo_sem_dado
description: "Motivo pelo qual os prontuários não contêm dados."

# Informações de Contato
- name: telefone
description: "Número de telefone principal para contato com o estabelecimento."
- name: email
description: "Endereço de e-mail principal do estabelecimento."
- name: facebook
description: "Página do Facebook do estabelecimento."
- name: instagram
description: "Perfil do Instagram do estabelecimento."
- name: twitter
description: "Conta do Twitter do estabelecimento."

# Indicadores
- name: estabelecimento_sms_indicador
description: "Indica se o estabelecimento faz parte da rede municipal de saúde."
- name: vinculo_sus_indicador
description: "Indica se o estabelecimento possui vínculo com o SUS."
- name: atendimento_internacao_sus_indicador
description: "Indica se o estabelecimento oferece serviços de internação pelo SUS."
- name: atendimento_ambulatorial_sus_indicador
description: "Indica se o estabelecimento oferece serviços ambulatoriais pelo SUS."
- name: atendimento_sadt_sus_indicador
description: "Indica se o estabelecimento oferece Serviços Auxiliares de Diagnóstico e Terapia (SADT) pelo SUS."
- name: atendimento_urgencia_sus_indicador
description: "Indica se o estabelecimento oferece serviços de urgência pelo SUS."
- name: atendimento_outros_sus_indicador
description: "Indica se o estabelecimento oferece outros tipos de serviços pelo SUS."
- name: atendimento_vigilancia_sus_indicador
description: "Indica se o estabelecimento oferece serviços de vigilância em saúde pelo SUS."
- name: atendimento_regulacao_sus_indicador
description: "Indica se o estabelecimento atua em atividades de regulação de serviços de saúde pelo SUS."

# Metadados
- name: data_atualizao_registro
description: "Data em que o registro foi atualizado pela última vez."
- name: usuario_atualizador_registro
description: "Identificador do usuário que atualizou o registro pela última vez."
- name: mes_particao
description: "Mês utilizado para fins de particionamento dos dados."
- name: ano_particao
description: "Ano utilizado para fins de particionamento dos dados."
- name: data_particao
description: "Data específica utilizada para particionamento dos dados."
- name: data_carga
description: "Data em que os dados foram carregados no banco de dados."
- name: data_snapshot
description: "Data em que o snapshot dos dados foi capturado."
Loading
Loading