Skip to content

Commit

Permalink
feat: add pssicossocial dbt model
Browse files Browse the repository at this point in the history
  • Loading branch information
folhesgabriel committed Apr 3, 2024
1 parent 746fb53 commit d9124b2
Show file tree
Hide file tree
Showing 2 changed files with 346 additions and 23 deletions.
148 changes: 148 additions & 0 deletions models/br_ms_sia/br_ms_sia__psicossocial.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
{{
config(
alias="psicossocial",
schema="br_ms_sia",
materialized="table",
partition_by={
"field": "ano",
"data_type": "int64",
"range": {"start": 2005, "end": 2024, "interval": 1},
},
cluster_by=["mes", "sigla_uf"],
)
}}


with
sia_add_municipios as (
-- Adicionar id_municipio de 7 dígitos
select
psicossocial.*,
mun.id_municipio as id_municipio_executante,
mun_res.id_municipio as id_municipio_residencia
from `basedosdados.br_ms_sia_staging.psicossocial` as psicossocial
left join
(
select id_municipio, id_municipio_6
from `basedosdados.br_bd_diretorios_brasil.municipio`
) as mun
on psicossocial.ufmun = mun.id_municipio_6
left join
(
select id_municipio, id_municipio_6
from `basedosdados.br_bd_diretorios_brasil.municipio`
) as mun_res
on psicossocial.munpac = mun_res.id_municipio_6

)

select
safe_cast(ano as int64) ano,
safe_cast(mes as int64) mes,
safe_cast(sigla_uf as string) sigla_uf,
safe_cast(id_municipio_executante as string) id_municipio,
safe_cast(cnes_exec as string) id_estabelecimento_cnes,
safe_cast(cnes_esf as string) id_estabelecimento_cnes_familia,
-- colunas removidas da materilização final pois estão todas presentes
-- na tabela de estabelecimento -> basedosdados.br_ms_cnes.estabelecimento
-- safe_cast(gestao as string) id_gestao,
-- safe_cast(condic as string) tipo_gestao,
-- safe_cast(tpups as string) tipo_unidade,
-- safe_cast(tippre__ as string) tipo_prestador,
-- safe_cast(mn_ind as string) tipo_mantenedor_estabelecimento,
-- safe_cast(cnpjcpf as string) cnpj_estabelecimento_executante,
-- safe_cast(cnpjmnt as string) cnpj_mantenedora_estabalecimento,
-- safe_cast(nat_jur as string) natureza_juridica_estabelecimento,
safe_cast(pa_proc_id as string) id_procedimento_ambulatorial,
safe_cast(pa_srv as string) id_servico_especializado,
safe_cast(pa_class_s as string) id_classificacao_servico,
-- retirada pois apresenta dígitos sem sentido
-- safe_cast(cns_pac as string) id_cns_paciente_criptografado,
safe_cast(
format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', inicio)) as date
) data_inicio_atendimento,
safe_cast(
format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', fim)) as date
) data_termino_atendimento,
safe_cast(permanen as string) permanencia_atendimento,
safe_cast(mot_cob as string) motivo_saida_permanencia,
safe_cast(
format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', dt_motcob)) as date
) as data_motivo_saida_permanencia,
safe_cast(substr(dt_process, 1, 4) as int64) as ano_processamento,
safe_cast(substr(dt_process, 5, 2) as int64) as mes_processamento,
safe_cast(substr(dt_atend, 1, 4) as int64) as ano_atendimento,
safe_cast(substr(dt_atend, 5, 2) as int64) as mes_atendimento,
safe_cast(
format_date('%Y-%m-%d', safe.parse_date('%Y%m%d', dtnasc)) as date
) data_nascimento_paciente,
safe_cast(id_municipio_residencia as string) id_municipio_residencia_paciente,
safe_cast(ltrim(cast(origem_pac as string), '0') as string) origem_paciente,
safe_cast(ltrim(cast(nacion_pac as string), '0') as string) nacionalidade_paciente,
safe_cast(tpidadepac as string) tipo_idade,
safe_cast(idadepac as int64) idade_paciente,
safe_cast(sexopac as string) sexo_paciente,
safe_cast(racacor as string) raca_cor_paciente,
safe_cast(etnia as string) etnia_paciente,
case
when catend = '00' then '0' else cast(ltrim(catend, '0') as string)
end as carater_atendimento,
safe_cast(
trim(case when length(trim(cidpri)) = 3 then cidpri else null end) as string
) as cid_principal_categoria,
safe_cast(
trim(
case
when length(trim(cidpri)) = 4 and cidpri != '0000'
then cidpri
when
length(trim(cidpri)) = 3
and cidpri in (
select subcategoria
from `basedosdados-dev.br_bd_diretorios_brasil.cid_10`
where length(subcategoria) = 3
)
then cidpri
else null
end
) as string
) as cid_principal_subcategoria,
safe_cast(
trim(case when length(trim(cidassoc)) = 3 then cidassoc else null end) as string
) as cid_causas_associadas_categoria,
safe_cast(
trim(
case
when length(trim(cidassoc)) = 4 and cidassoc != '0000'
then cidassoc
when
length(trim(cidassoc)) = 3
and cidassoc in (
select subcategoria
from `basedosdados-dev.br_bd_diretorios_brasil.cid_10`
where length(subcategoria) = 3
)
then cidassoc
else null
end
) as string
) as cid_causas_associadas_subcategoria,
safe_cast(tp_droga as string) tipo_droga,
safe_cast(destinopac as string) destino_paciente,
safe_cast(loc_realiz as string) local_realizacao_atendimento,
safe_cast(
case
when sit_rua = 'S' then '1' when sit_rua = 'N' then '0' else sit_rua
end as int64
) indicador_situacao_rua,
safe_cast(cob_esf as int64) indicador_estrategia_familia,
safe_cast(pa_qtdpro as int64) quantidade_produzida_procedimento,
safe_cast(pa_qtdapr as int64) quantidade_aprovada_procedimento,
safe_cast(qtdate as int64) quantidade_atendimentos,
safe_cast(qtdpcn as string) quantidade_pacientes,
from sia_add_municipios as t
{% if is_incremental() %}
where
date(cast(ano as int64), cast(mes as int64), 1)
> (select max(date(cast(ano as int64), cast(mes as int64), 1)) from {{ this }})
{% endif %}
221 changes: 198 additions & 23 deletions models/br_ms_sia/schema.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,22 @@
---
version: 2
models:
- name: br_ms_sia__dicionario
description: Dicionário
columns:
- name: id_tabela
description: ID Tabela
- name: nome_coluna
description: Nome da coluna
- name: chave
description: Chave
- name: cobertura_temporal
description: Cobertura temporal
- name: valor
description: Valor
- name: br_ms_sia__producao_ambulatorial
description: Esta tabela contém o registro de processos ambulatorias realizados
em todo sistema de saúde nacional - público e privado.
tests:
- dbt_utils.unique_combination_of_columns:
combination_of_columns:
- ano
- mes
- id_estabelecimento_cnes
- instrumento_registro
- id_processamento_ambulatorial
- id_cbo_2002
- not_null_proportion_multiple_columns:
at_least: 0.05
columns:
- name: ano
description: Ano
Expand Down Expand Up @@ -239,16 +241,189 @@ models:
description: Tipo de erro de Quantidade Produzida
- name: flag_erro_corpo_apac
description: FLAG de erro de corpo da APAC
- name: br_ms_sia__dicionario
description: Dicionário
- name: br_ms_sia__psicossocial
description: Esta tabela contém o registro de processos ambulatorias de atendimento
psicossial no sistema público de saúde nacional.
columns:
- name: id_tabela
description: ID Tabela
- name: nome_coluna
description: Nome da coluna
- name: chave
description: Chave
- name: cobertura_temporal
description: Cobertura temporal
- name: valor
description: Valor
- name: ano
description: Ano
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__ano')
field: ano.ano
- name: mes
description: Mês
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__mes')
field: mes.mes
- name: sigla_uf
description: Sigla da Unidade da Federação
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__uf')
field: sigla
- name: id_municipio
description: ID Município - IBGE 7 Dígitos
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__municipio')
field: id_municipio
- name: id_estabelecimento_cnes
description: ID Estabelecimento - CNES
- name: id_estabelecimento_cnes_familia
description: Código do SCNES do Estabelecimento de Saúde Unidade da Saúde
da Família da região
- name: id_gestao
description: ID do tipo de gestão do estabelecimento
- name: tipo_gestao
description: Tipo de gestão do estabelecimento
- name: tipo_unidade
description: Tipo de estabelecimento
- name: tipo_prestador
description: Tipo de Prestador
- name: tipo_mantenedor_estabelecimento
description: Tipo de manutenção do estabelecimento
- name: cnpj_estabelecimento_executante
description: CNPJ do Estabelecimento executante
- name: cnpj_mantenedora_estabalecimento
description: CNPJ da Mantenedora do Estabelecimento
- name: natureza_juridica_estabelecimento
description: Natureza jurídica do operador do estabelecimento # Não possui teste pois a coluna foi excluida na materialização
- name: id_procedimento_ambulatorial
description: Ação Realizada
- name: id_servico_especializado
description: Código do Serviço Especializado / Classificação CBO (de acordo
com o CNES)
- name: id_classificacao_servico
description: Código da Classificação do Serviço
- name: id_cns_paciente_criptografado
description: Número do CNS (Cartão Nacional de Saúde) do paciente (criptografia)
- name: data_inicio_atendimento
description: Data de Início do Atendimento
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__data')
field: data.data
- name: data_termino_atendimento
description: Data de Fim do Atendimento
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__data')
field: data.data
- name: permanencia_atendimento
description: Permanência em Atendimento
- name: motivo_saida_permanencia
description: Motivo de Saída/Permanência
- name: data_motivo_saida_permanencia
description: Data da ocorrência no caso de alta, transferência ou óbito
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__data')
field: data.data
- name: ano_processamento
description: Ano do processamento
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__ano')
field: ano.ano
- name: mes_processamento
description: Mês do processamento
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__mes')
field: mes.mes
- name: ano_atendimento
description: Ano do atendimento
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__ano')
field: ano.ano
- name: mes_atendimento
description: Mês do atendimento
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__mes')
field: mes.mes
- name: data_nascimento_paciente
description: Data de nascimento do paciente
tests:
- relationships:
to: ref('br_bd_diretorios_data_tempo__data')
field: data.data
- name: id_municipio_residencia_paciente
description: ID Município - IBGE 7 Dígitos
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__municipio')
field: id_municipio
- name: origem_paciente
description: Origem do paciente
- name: nacionalidade_paciente
description: Nacionalidade do paciente
- name: tipo_idade
description: Tipo da Idade do paciente em anos, meses ou dias. Calculado a
partir da data de nascimento
- name: idade_paciente
description: Idade do paciente
- name: sexo_paciente
description: Sexo do paciente
- name: raca_cor_paciente
description: Raça/cor do paciente
- name: etnia_paciente
description: Etnia do paciente
- name: carater_atendimento
description: Caráter de atendimento (APAC ou BPA-I)
- name: cid_principal_categoria
description: Identificador da categoria da Classificação Internacional de
Doenças (CID10) principal da Autorização de Procedimento Ambulatorial de
Alta complexidade (APAC) ou do Boletim de Produção Ambulatorial Individualizado
(BPA-I)
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__cid_10')
field: categoria
- name: cid_principal_subcategoria
description: Identificador da subcategoria da Classificação Internacional
de Doenças (CID10) principal da Autorização de Procedimento Ambulatorial
de Alta complexidade (APAC) ou do Boletim de Produção Ambulatorial Individualizado
(BPA-I)
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__cid_10')
field: subcategoria
- name: cid_causas_associadas_categoria
description: Identificador da categoria da Classificação Internacional de
Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial
de Alta complexidade (APAC)
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__cid_10')
field: categoria
- name: cid_causas_associadas_subcategoria
description: Identificador da subcategoria da Classificação Internacional
de Doenças (CID10) causas associadas a Autorização de Procedimento Ambulatorial
de Alta complexidade (APAC)
tests:
- relationships:
to: ref('br_bd_diretorios_brasil__cid_10')
field: subcategoria
- name: tipo_droga
description: Tipo de Droga
- name: destino_paciente
description: Destino do paciente
- name: local_realizacao_atendimento
description: Local de Realização
- name: indicador_situacao_rua
description: Situação de Rua
- name: indicador_estrategia_familia
description: Indica se a região de atendimento do paciente tem cobertura de
Estratégia Saúde da Família
- name: quantidade_produzida_procedimento
description: Quantidade produzida (apresentada) do procedimento
- name: quantidade_aprovada_procedimento
description: Quantidade aprovada do procedimento
- name: quantidade_atendimentos
description: Quantidade de Atendimentos
- name: quantidade_pacientes
description: Quantidade de pacientes

0 comments on commit d9124b2

Please sign in to comment.