From ef4deeba26663c2a060c451aa2b3ebb9e00a3671 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Wed, 11 Sep 2024 15:48:54 -0300 Subject: [PATCH 01/28] =?UTF-8?q?Inicio=20da=20cria=C3=A7=C3=A3o=20das=20t?= =?UTF-8?q?abelas=20mestres=20CNES=20referentes=20a=20toda=20a=20rede=20p?= =?UTF-8?q?=C3=BAblica=20do=20munic=C3=ADpio=20do=20rio=20de=20janeiro.=20?= =?UTF-8?q?S=C3=A9rie=20hist=C3=B3rica.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_mart_cnes_subgeral_schema.yml | 72 +++++++++ .../_mart_cnes_subgeral_sources.yml | 18 +++ ...stabelecimento_sus_mrj_serie_historica.sql | 151 ++++++++++++++++++ .../cnes_subgeral/_cnes_subgeral_schema.yml | 38 +++++ .../cnes_subgeral/_cnes_subgeral_sources.yml | 8 + ...stabelecimento_sus_mrj_serie_historica.sql | 43 +++++ 6 files changed, 330 insertions(+) create mode 100644 models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml create mode 100644 models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml create mode 100644 models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql create mode 100644 models/raw/cnes_subgeral/_cnes_subgeral_schema.yml create mode 100644 models/raw/cnes_subgeral/_cnes_subgeral_sources.yml create mode 100644 models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql diff --git a/models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml b/models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml new file mode 100644 index 00000000..a8498a66 --- /dev/null +++ b/models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml @@ -0,0 +1,72 @@ +version: 2 + +models: + - name: mart_cnes_subgeral__estabelecimento_sus_mrj_serie_historica + description: Esta tabela contém dados a respeito de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. + columns: + - name: ano + description: Ano de referência dos dados + - name: mes + description: Mês de referência dos dados + - name: esfera + description: Classificação administrativa da esfera governamental (federal, estadual, municipal) + - name: id_ap + description: Código da Área de Planejamento + - name: ap + description: Descrição da Área de Planejamento + - name: cep + description: CEP do estabelecimento + - name: id_estabelecimento_cnes + description: Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento + - name: nome_razao_social + description: Razão social do estabelecimento conforme registro oficial + - name: nome_fantasia + description: Nome fantasia do estabelecimento + - name: id_natureza_juridica + description: Código da natureza jurídica do estabelecimento + - name: natureza_juridica + 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 + - name: tipo_unidade + description: Código do tipo de unidade de saúde + - name: tipo_unidade_descr + description: Descrição do tipo de unidade de saúde + - name: tipo_unidade_agrupado + description: Classificação agrupada do tipo de unidade + - 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: 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 + - name: indicador_estabelecimento_sms + description: Indicador se o estabelecimento é parte da rede municipal de saúde + - name: indicador_vinculo_sus + description: Indica se o estabelecimento possui vínculo com o SUS + - name: indicador_atendimento_internacao_sus + description: Indica se o estabelecimento oferece serviços de internação pelo SUS + - name: indicador_atendimento_ambulatorial_sus + description: Indica se o estabelecimento oferece serviços ambulatoriais pelo SUS + - name: indicador_atendimento_sadt_sus + description: Indica se o estabelecimento oferece Serviços Auxiliares de Diagnóstico e Terapia pelo SUS + - name: indicador_atendimento_urgencia_sus + description: Indica se o estabelecimento oferece serviços de urgência pelo SUS + - name: indicador_atendimento_outros_sus + description: Indica se o estabelecimento oferece outros tipos de serviços pelo SUS não especificados anteriormente + - name: indicador_atendimento_vigilancia_sus + description: Indica se o estabelecimento oferece serviços de vigilância em saúde pelo SUS + - name: indicador_atendimento_regulacao_sus + description: Indica se o estabelecimento atua em atividades de regulação de serviços de saúde pelo SUS \ No newline at end of file diff --git a/models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml b/models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml new file mode 100644 index 00000000..b9511689 --- /dev/null +++ b/models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml @@ -0,0 +1,18 @@ +sources: + - name: brutos_cnes_web_staging + database: rj-sms + schema: brutos_cnes_web_staging + tables: + - name: tbNaturezaJuridica + + - name: brutos_datasus + database: rj-sms-dev + schema: brutos_datasus + tables: + - name: tipo_gestao + + - name: subgeral_padronizacoes + database: rj-sms-sandbox + schema: subgeral_padronizacoes + tables: + - name: padronizacao_estabelecimentos \ No newline at end of file diff --git a/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql b/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql new file mode 100644 index 00000000..d1aeffe9 --- /dev/null +++ b/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql @@ -0,0 +1,151 @@ +{{ + config( + schema="mart_cnes_subgeral__estabelecimento_sus_mrj_serie_historica", + alias="estabelecimento_sus_mrj_serie_historica" + ) +}} + +WITH estabelecimentos_brutos AS ( + SELECT * + FROM {{ ref("raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica") }} +), + +estabelecimentos_atributos_cnes_web AS ( + SELECT + DISTINCT id_cnes, + id_tipo_estabelecimento, + nome_razao_social, + nome_fantasia, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_bairro, + endereco_latitude, + endereco_longitude + FROM {{ ref("raw_cnes_web__estabelecimento") }} +), + +estabelecimentos_atributos_subgeral AS ( + SELECT + ESFERA as esfera, + AP as id_ap, + AP_TITULO as ap, + CNES as id_estabelecimento_cnes, + TIPO_UNIDADE_AGRUPADO as tipo_unidade_agrupado, + + FROM {{ source("subgeral_padronizacoes", "padronizacao_estabelecimentos") }} +), + +tp_gestao AS ( + SELECT + DISTINCT id_tipo_gestao, + UPPER(tipo_gestao_descr) as tipo_gestao_descr + FROM {{ source("brutos_datasus", "tipo_gestao") }} +), + +nat_jur AS ( + SELECT + DISTINCT CO_NATUREZA_JUR AS id_nat_jur, + DS_NATUREZA_JUR AS natureza_juridica + FROM {{ source("brutos_cnes_web_staging", "tbNaturezaJuridica") }} +), + +tp_unidade AS ( + SELECT + DISTINCT id_tipo_unidade, + descricao AS tipo_unidade_descr + FROM {{ ref("raw_cnes_web__tipo_unidade") }} +), + +turno AS ( + SELECT + DISTINCT id_turno_atendimento, + descricao AS turno_atendimento + FROM {{ ref("raw_cnes_web__turno_atendimento") }} +), + +joined AS ( + SELECT + brutos.*, + + cnes_web.nome_razao_social, + cnes_web.nome_fantasia, + cnes_web.endereco_logradouro, + cnes_web.endereco_numero, + cnes_web.endereco_complemento, + cnes_web.endereco_bairro, + cnes_web.endereco_latitude, + cnes_web.endereco_longitude, + + subgeral.tipo_unidade_agrupado, + subgeral.esfera, + subgeral.id_ap, + subgeral.ap, + + tp_gestao.tipo_gestao_descr, + nat_jur.natureza_juridica, + tp_unidade.tipo_unidade_descr, + turno.turno_atendimento, + + CASE + when (cnes_web.nome_fantasia like 'SMS %') or (cnes_web.nome_fantasia = 'RIOSAUDE') then 1 + else 0 + END AS indicador_estabelecimento_sms + + FROM estabelecimentos_brutos AS brutos + + LEFT JOIN estabelecimentos_atributos_cnes_web AS cnes_web + ON cast(brutos.id_estabelecimento_cnes as int) = cast(cnes_web.id_cnes as int) + + LEFT JOIN estabelecimentos_atributos_subgeral AS subgeral + ON cast(brutos.id_estabelecimento_cnes as int) = cast(subgeral.id_estabelecimento_cnes as int) + + LEFT JOIN nat_jur + ON cast(brutos.id_natureza_juridica as int) = cast(nat_jur.id_nat_jur as int) + + LEFT JOIN tp_unidade + ON cast(brutos.tipo_unidade as int) = cast(tp_unidade.id_tipo_unidade as int) + + LEFT JOIN turno + ON cast(brutos.tipo_turno as int) = cast(turno.id_turno_atendimento as int) + + LEFT JOIN tp_gestao + ON brutos.tipo_gestao = tp_gestao.id_tipo_gestao +) + +SELECT + ano, + mes, + esfera, + id_ap, + ap, + cep, + id_estabelecimento_cnes, + nome_razao_social, + nome_fantasia, + id_natureza_juridica, + natureza_juridica, + tipo_gestao, + tipo_gestao_descr, + tipo_unidade, + tipo_unidade_descr, + tipo_unidade_agrupado, + tipo_turno, + turno_atendimento, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + indicador_estabelecimento_sms + indicador_vinculo_sus, + indicador_atendimento_internacao_sus, + indicador_atendimento_ambulatorial_sus, + indicador_atendimento_sadt_sus, + indicador_atendimento_urgencia_sus, + indicador_atendimento_outros_sus, + indicador_atendimento_vigilancia_sus, + indicador_atendimento_regulacao_sus + +FROM joined \ No newline at end of file diff --git a/models/raw/cnes_subgeral/_cnes_subgeral_schema.yml b/models/raw/cnes_subgeral/_cnes_subgeral_schema.yml new file mode 100644 index 00000000..0d6c0d41 --- /dev/null +++ b/models/raw/cnes_subgeral/_cnes_subgeral_schema.yml @@ -0,0 +1,38 @@ +version: 2 + +models: + - name: raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica + description: Esta tabela contém dados a respeito de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. + columns: + - name: ano + description: Ano + - name: mes + description: Mês + - name: cep + description: CEP do Estabelecimento + - name: id_estabelecimento_cnes + description: CNES do Estabelecimento + - name: id_natureza_juridica + description: Natureza Jurídica do Estabelecimento + - name: tipo_gestao + description: Tipo de Gestão do Estabelecimento + - name: tipo_unidade + description: Tipo de Unidade do Estabelecimento + - name: tipo_turno + description: Tipo de Turno do Estabelecimento + - name: indicador_vinculo_sus + description: Indicador de Vinculação ao SUS + - name: indicador_atendimento_internacao_sus + description: Indicador de Atendimento de Internação pelo SUS + - name: indicador_atendimento_ambulatorial_sus + description: Indicador de Atendimento Ambulatorial pelo SUS + - name: indicador_atendimento_sadt_sus + description: Indicador de Atendimento de SADT pelo SUS + - name: indicador_atendimento_urgencia_sus + description: Indicador de Atendimento de Urgência pelo SUS + - name: indicador_atendimento_outros_sus + description: Indicador de Atendimento de Outros Serviços pelo SUS + - name: indicador_atendimento_vigilancia_sus + description: Indicador de Atendimento de Vigilância pelo SUS + - name: indicador_atendimento_regulacao_sus + description: Indicador de Atendimento de Regulação pelo SUS \ No newline at end of file diff --git a/models/raw/cnes_subgeral/_cnes_subgeral_sources.yml b/models/raw/cnes_subgeral/_cnes_subgeral_sources.yml new file mode 100644 index 00000000..fb22a37e --- /dev/null +++ b/models/raw/cnes_subgeral/_cnes_subgeral_sources.yml @@ -0,0 +1,8 @@ +version: 2 + +sources: + - name: brutos_cnes_ftp + database: rj-sms + schema: brutos_cnes_ftp + tables: + - name: estabelecimento \ No newline at end of file diff --git a/models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql b/models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql new file mode 100644 index 00000000..a3965139 --- /dev/null +++ b/models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql @@ -0,0 +1,43 @@ +{{ + config( + schema="raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica", + alias="brutos_estabelecimento_sus_mrj_serie_historica" + ) +}} + +with source as (select * from {{ source("brutos_cnes_ftp", "estabelecimento") }} ) + +select + ano, + mes, + cep, + id_estabelecimento_cnes, + id_natureza_juridica, + tipo_gestao, + tipo_unidade, + tipo_turno, + indicador_vinculo_sus, + indicador_atendimento_internacao_sus, + indicador_atendimento_ambulatorial_sus, + indicador_atendimento_sadt_sus, + indicador_atendimento_urgencia_sus, + indicador_atendimento_outros_sus, + indicador_atendimento_vigilancia_sus, + indicador_atendimento_regulacao_sus + +from + source + +where + sigla_uf = "RJ" + and id_municipio_6 = "330455" + and ( + indicador_vinculo_sus = 1 + or indicador_atendimento_internacao_sus = 1 + or indicador_atendimento_ambulatorial_sus = 1 + or indicador_atendimento_sadt_sus = 1 + or indicador_atendimento_urgencia_sus = 1 + or indicador_atendimento_outros_sus = 1 + or indicador_atendimento_vigilancia_sus = 1 + or indicador_atendimento_regulacao_sus = 1 + ) \ No newline at end of file From 0fae74007f2b22ccd886b496dac5f39cb9e6397f Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Wed, 11 Sep 2024 16:59:29 -0300 Subject: [PATCH 02/28] =?UTF-8?q?Adi=C3=A7=C3=A3o=20de=20uma=20v=C3=ADrgul?= =?UTF-8?q?a;=20Adi=C3=A7=C3=A3o=20das=20unidades=20antigas=20da=20SMSDC?= =?UTF-8?q?=20na=20flag=20SMS.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql b/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql index d1aeffe9..27f9a0ed 100644 --- a/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql +++ b/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql @@ -88,7 +88,7 @@ joined AS ( turno.turno_atendimento, CASE - when (cnes_web.nome_fantasia like 'SMS %') or (cnes_web.nome_fantasia = 'RIOSAUDE') then 1 + when (cnes_web.nome_fantasia like 'SMS %') or (cnes_web.nome_fantasia = 'RIOSAUDE') or (cnes_web.nome_fantasia = 'SMSDC %') then 1 else 0 END AS indicador_estabelecimento_sms @@ -138,7 +138,7 @@ SELECT endereco_complemento, endereco_latitude, endereco_longitude, - indicador_estabelecimento_sms + indicador_estabelecimento_sms, indicador_vinculo_sus, indicador_atendimento_internacao_sus, indicador_atendimento_ambulatorial_sus, From ba0817fab9d0941eba37b3052f3577c14c5c956b Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Fri, 13 Sep 2024 16:14:45 -0300 Subject: [PATCH 03/28] =?UTF-8?q?Altera=C3=A7=C3=B5es=20na=20tabela=20hist?= =?UTF-8?q?=C3=B3rica=20de=20municipios=20do=20mrj=20com=20vinculo=20com?= =?UTF-8?q?=20sus=20e=20tamb=C3=A9m=20na=20tabela=20mestre=20de=20estabele?= =?UTF-8?q?cimentos=20da=20sms=20rio.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...stabelecimento_sus_mrj_serie_historica.sql | 151 ---------- .../core/dimensions/dim_estabelecimento.sql | 191 +++++-------- .../_mart_saude_cnes_schema.yml} | 68 ++++- .../_mart_saude_cnes_sources.yml} | 7 +- .../dim_estabelecimento_sus_rio_historico.sql | 261 ++++++++++++++++++ .../cnes_subgeral/_cnes_subgeral_schema.yml | 38 --- .../cnes_subgeral/_cnes_subgeral_sources.yml | 8 - ...stabelecimento_sus_mrj_serie_historica.sql | 43 --- models/raw/cnes_web/_cnes_sources.yml | 3 +- .../raw_cnes_web__natureza_juridica.sql | 28 ++ 10 files changed, 429 insertions(+), 369 deletions(-) delete mode 100644 models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql rename models/marts/{cnes_subgeral/_mart_cnes_subgeral_schema.yml => saude_cnes/_mart_saude_cnes_schema.yml} (51%) rename models/marts/{cnes_subgeral/_mart_cnes_subgeral_sources.yml => saude_cnes/_mart_saude_cnes_sources.yml} (75%) create mode 100644 models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql delete mode 100644 models/raw/cnes_subgeral/_cnes_subgeral_schema.yml delete mode 100644 models/raw/cnes_subgeral/_cnes_subgeral_sources.yml delete mode 100644 models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql create mode 100644 models/raw/cnes_web/raw_cnes_web__natureza_juridica.sql diff --git a/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql b/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql deleted file mode 100644 index 27f9a0ed..00000000 --- a/models/marts/cnes_subgeral/estabelecimento_sus_mrj_serie_historica.sql +++ /dev/null @@ -1,151 +0,0 @@ -{{ - config( - schema="mart_cnes_subgeral__estabelecimento_sus_mrj_serie_historica", - alias="estabelecimento_sus_mrj_serie_historica" - ) -}} - -WITH estabelecimentos_brutos AS ( - SELECT * - FROM {{ ref("raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica") }} -), - -estabelecimentos_atributos_cnes_web AS ( - SELECT - DISTINCT id_cnes, - id_tipo_estabelecimento, - nome_razao_social, - nome_fantasia, - endereco_logradouro, - endereco_numero, - endereco_complemento, - endereco_bairro, - endereco_latitude, - endereco_longitude - FROM {{ ref("raw_cnes_web__estabelecimento") }} -), - -estabelecimentos_atributos_subgeral AS ( - SELECT - ESFERA as esfera, - AP as id_ap, - AP_TITULO as ap, - CNES as id_estabelecimento_cnes, - TIPO_UNIDADE_AGRUPADO as tipo_unidade_agrupado, - - FROM {{ source("subgeral_padronizacoes", "padronizacao_estabelecimentos") }} -), - -tp_gestao AS ( - SELECT - DISTINCT id_tipo_gestao, - UPPER(tipo_gestao_descr) as tipo_gestao_descr - FROM {{ source("brutos_datasus", "tipo_gestao") }} -), - -nat_jur AS ( - SELECT - DISTINCT CO_NATUREZA_JUR AS id_nat_jur, - DS_NATUREZA_JUR AS natureza_juridica - FROM {{ source("brutos_cnes_web_staging", "tbNaturezaJuridica") }} -), - -tp_unidade AS ( - SELECT - DISTINCT id_tipo_unidade, - descricao AS tipo_unidade_descr - FROM {{ ref("raw_cnes_web__tipo_unidade") }} -), - -turno AS ( - SELECT - DISTINCT id_turno_atendimento, - descricao AS turno_atendimento - FROM {{ ref("raw_cnes_web__turno_atendimento") }} -), - -joined AS ( - SELECT - brutos.*, - - cnes_web.nome_razao_social, - cnes_web.nome_fantasia, - cnes_web.endereco_logradouro, - cnes_web.endereco_numero, - cnes_web.endereco_complemento, - cnes_web.endereco_bairro, - cnes_web.endereco_latitude, - cnes_web.endereco_longitude, - - subgeral.tipo_unidade_agrupado, - subgeral.esfera, - subgeral.id_ap, - subgeral.ap, - - tp_gestao.tipo_gestao_descr, - nat_jur.natureza_juridica, - tp_unidade.tipo_unidade_descr, - turno.turno_atendimento, - - CASE - when (cnes_web.nome_fantasia like 'SMS %') or (cnes_web.nome_fantasia = 'RIOSAUDE') or (cnes_web.nome_fantasia = 'SMSDC %') then 1 - else 0 - END AS indicador_estabelecimento_sms - - FROM estabelecimentos_brutos AS brutos - - LEFT JOIN estabelecimentos_atributos_cnes_web AS cnes_web - ON cast(brutos.id_estabelecimento_cnes as int) = cast(cnes_web.id_cnes as int) - - LEFT JOIN estabelecimentos_atributos_subgeral AS subgeral - ON cast(brutos.id_estabelecimento_cnes as int) = cast(subgeral.id_estabelecimento_cnes as int) - - LEFT JOIN nat_jur - ON cast(brutos.id_natureza_juridica as int) = cast(nat_jur.id_nat_jur as int) - - LEFT JOIN tp_unidade - ON cast(brutos.tipo_unidade as int) = cast(tp_unidade.id_tipo_unidade as int) - - LEFT JOIN turno - ON cast(brutos.tipo_turno as int) = cast(turno.id_turno_atendimento as int) - - LEFT JOIN tp_gestao - ON brutos.tipo_gestao = tp_gestao.id_tipo_gestao -) - -SELECT - ano, - mes, - esfera, - id_ap, - ap, - cep, - id_estabelecimento_cnes, - nome_razao_social, - nome_fantasia, - id_natureza_juridica, - natureza_juridica, - tipo_gestao, - tipo_gestao_descr, - tipo_unidade, - tipo_unidade_descr, - tipo_unidade_agrupado, - tipo_turno, - turno_atendimento, - endereco_bairro, - endereco_logradouro, - endereco_numero, - endereco_complemento, - endereco_latitude, - endereco_longitude, - indicador_estabelecimento_sms, - indicador_vinculo_sus, - indicador_atendimento_internacao_sus, - indicador_atendimento_ambulatorial_sus, - indicador_atendimento_sadt_sus, - indicador_atendimento_urgencia_sus, - indicador_atendimento_outros_sus, - indicador_atendimento_vigilancia_sus, - indicador_atendimento_regulacao_sus - -FROM joined \ No newline at end of file diff --git a/models/marts/core/dimensions/dim_estabelecimento.sql b/models/marts/core/dimensions/dim_estabelecimento.sql index bb63a34c..8df9d417 100644 --- a/models/marts/core/dimensions/dim_estabelecimento.sql +++ b/models/marts/core/dimensions/dim_estabelecimento.sql @@ -1,138 +1,83 @@ -{{ 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) - ), - - unidade as ( - select * - from {{ ref("raw_cnes_web__tipo_unidade") }} - where data_particao = (select versao from versao_atual) - ), - - turno as ( - select * - from {{ ref("raw_cnes_web__turno_atendimento") }} - where data_particao = (select versao from versao_atual) - ), - - 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 - ), - - estab_aux as (select * from {{ ref("raw_sheets__estabelecimento_auxiliar") }}), - - contatos_aps as ( - select * from {{ ref("raw_plataforma_smsrio__estabelecimento_contato") }} - ), - - 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) - ) +current_period as ( + select + current_year.ano_atual, + max(mes) as competencia_atual + from source + join current_year on source.ano = current_year.ano_atual + group by current_year.ano_atual +) select - -- Primary key - est.id_unidade, + -- primary key + id_unidade, - -- Foreign keys - est.id_cnes, - est.id_tipo_unidade, - est.id_distrito_sanitario_corrigido as area_programatica, - est.cnpj_mantenedora, + -- foreign keys + id_cnes, + id_tipo_unidade, + area_programatica, + 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, + -- 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, - -- Metadata + -- metadata data_atualizao_registro, usuario_atualizador_registro, - est.mes_particao, - est.ano_particao, - est.data_particao, - est.data_carga, - est.data_snapshot, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot -from estab_final as est -left join turno using (id_turno_atendimento) -left join unidade using (id_tipo_unidade) +from + source + join current_period on source.ano = current_period.ano_atual and source.mes = current_period.competencia_atual +where + indicador_estabelecimento_sms = 1 order by ativa desc, - est.id_tipo_unidade asc, + id_tipo_unidade asc, area_programatica asc, - est.endereco_bairro asc, - est.nome_fantasia asc + endereco_bairro asc, + nome_fantasia asc diff --git a/models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml similarity index 51% rename from models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml rename to models/marts/saude_cnes/_mart_saude_cnes_schema.yml index a8498a66..231d4b4b 100644 --- a/models/marts/cnes_subgeral/_mart_cnes_subgeral_schema.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml @@ -24,7 +24,7 @@ models: description: Nome fantasia do estabelecimento - name: id_natureza_juridica description: Código da natureza jurídica do estabelecimento - - name: natureza_juridica + - 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) @@ -69,4 +69,68 @@ models: - name: indicador_atendimento_vigilancia_sus description: Indica se o estabelecimento oferece serviços de vigilância em saúde pelo SUS - name: indicador_atendimento_regulacao_sus - description: Indica se o estabelecimento atua em atividades de regulação de serviços de saúde pelo SUS \ No newline at end of file + description: Indica se o estabelecimento atua em atividades de regulação de serviços de saúde pelo SUS + - name: area_programatica + description: Refined sanitary district code used for categorizing the establishment within a specific administrative area. + - name: tipo_sms_agrupado + description: Grouping variable for SMS related to health communication strategies or categories. + - name: tipo + description: Description of the unit, indicating the type classification of the healthcare facility unit. + - name: tipo_sms + description: Category or type of SMS related to health services. + - name: tipo_sms_simplificado + description: Simplified version of the SMS category, used for general classification. + - name: cnpj_mantenedora + description: CNPJ of the entity maintaining the establishment, crucial for legal and financial accountability. + - name: ativa + description: Indicates operational status of the establishment based on the presence of a deactivation reason. + - name: id_unidade + description: Identifier for a specific unit within the establishment. + - name: nome_limpo + description: Cleaned or formatted name of the establishment for reporting or formal use. + - name: nome_sigla + description: Abbreviated form of the establishment’s name. + - name: nome_complemento + description: Additional naming details that complement the primary name of the establishment. + - name: responsavel_sms + description: Person responsible for the SMS system or health management. + - name: administracao + description: Describes the type of administration or management style of the establishment. + - name: prontuario_tem + description: Indicates whether patient records are maintained. + - name: prontuario_versao + description: Version control for patient records. + - name: prontuario_estoque_tem_dado + description: Indicates if patient records contain data. + - name: prontuario_estoque_motivo_sem_dado + description: Reason provided when patient records do not contain data. + - name: telefone + description: Primary telephone contact number for the establishment. + - name: email + description: Primary email address for communication with the establishment. + - name: facebook + description: Facebook page of the establishment. + - name: instagram + description: Instagram profile of the establishment. + - name: twitter + description: Twitter handle of the establishment. + - name: aberto_sempre + description: Indicates whether the establishment operates continuously, 24/7. + - name: diretor_clinico_cpf + description: CPF number of the clinical director, important for legal identification. + - name: diretor_clinico_conselho + description: Professional council registration number of the clinical director. + - name: data_atualizao_registro + description: Date when the record was last updated. + - name: usuario_atualizador_registro + description: Username or identifier of the person who last updated the record. + - name: mes_particao + description: Month used for data partitioning purposes. + - name: ano_particao + description: Year used for data partitioning purposes. + - name: data_particao + description: Specific date used for data partitioning. + - name: data_carga + description: Date when data was loaded into the database. + - name: data_snapshot + description: Date when the data snapshot was taken. diff --git a/models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml similarity index 75% rename from models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml rename to models/marts/saude_cnes/_mart_saude_cnes_sources.yml index b9511689..53356161 100644 --- a/models/marts/cnes_subgeral/_mart_cnes_subgeral_sources.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml @@ -1,9 +1,10 @@ sources: - - name: brutos_cnes_web_staging + + - name: brutos_cnes_ftp database: rj-sms - schema: brutos_cnes_web_staging + schema: brutos_cnes_ftp tables: - - name: tbNaturezaJuridica + - name: estabelecimento - name: brutos_datasus database: rj-sms-dev diff --git a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql new file mode 100644 index 00000000..f1aec9e4 --- /dev/null +++ b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql @@ -0,0 +1,261 @@ +{{ + config( + schema="mart_saude_cnes__estabelecimento_sus_rio_historico", + alias="estabelecimento_sus_rio_historico", + ) +}} + +WITH + +-- Obtendo a data mais atual +versao_atual AS ( + SELECT MAX(data_particao) AS versao + FROM {{ ref("raw_cnes_web__tipo_unidade") }} +), + +-- Obtendo todos os estabelecimentos do MRJ que possuem vinculo com o SUS +estabelecimentos_brutos AS ( + SELECT + ano, + mes, + cep, + id_estabelecimento_cnes, + id_natureza_juridica, + tipo_gestao, + tipo_unidade, + tipo_turno, + indicador_vinculo_sus, + indicador_atendimento_internacao_sus, + indicador_atendimento_ambulatorial_sus, + indicador_atendimento_sadt_sus, + indicador_atendimento_urgencia_sus, + indicador_atendimento_outros_sus, + indicador_atendimento_vigilancia_sus, + indicador_atendimento_regulacao_sus + FROM {{ source("brutos_cnes_ftp", "estabelecimento") }} + WHERE + sigla_uf = "RJ" + AND id_municipio_6 = "330455" + AND ( + indicador_vinculo_sus = 1 + OR indicador_atendimento_internacao_sus = 1 + OR indicador_atendimento_ambulatorial_sus = 1 + OR indicador_atendimento_sadt_sus = 1 + OR indicador_atendimento_urgencia_sus = 1 + OR indicador_atendimento_outros_sus = 1 + OR indicador_atendimento_vigilancia_sus = 1 + OR indicador_atendimento_regulacao_sus = 1 + ) +), + +-- Obtendo atributos dos estabelecimentos via tabela desnormalizada proveniente do CNES WEB +estabelecimentos_atributos_cnes_web AS ( + SELECT + id_cnes, + nome_razao_social, + nome_fantasia, + cnpj_mantenedora, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + id_motivo_desativacao, + id_unidade, + aberto_sempre, + diretor_clinico_cpf, + diretor_clinico_conselho, + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot, + id_distrito_sanitario, + telefone, + email + FROM {{ ref("raw_cnes_web__estabelecimento") }} + WHERE data_particao = (SELECT versao FROM versao_atual) +), + +-- Obtendo atributos dos estabelecimentos via tabela proveniente da SUBGERAL +estabelecimentos_atributos_subgeral AS ( + SELECT + ESFERA AS esfera, + AP AS id_ap, + AP_TITULO AS ap, + CNES AS id_estabelecimento_cnes, + TIPO_UNIDADE_AGRUPADO AS tipo_unidade_agrupado + FROM {{ source("subgeral_padronizacoes", "padronizacao_estabelecimentos") }} +), + +-- Obtendo atributos dos estabelecimentos via tabela proveniente da DIT +estabelecimentos_atributos_dit AS ( + SELECT * + FROM {{ ref("raw_sheets__estabelecimento_auxiliar") }} +), + +-- Obtendo atributos de contato para os estabelecimentos +contatos_aps AS ( + SELECT * + FROM {{ ref("raw_plataforma_smsrio__estabelecimento_contato") }} +), + +-- Carregando tabelas utilizadas para mapear códigos em suas descrições textuais +tp_gestao AS ( + SELECT + DISTINCT id_tipo_gestao AS id_tipo_gestao, + UPPER(tipo_gestao_descr) AS tipo_gestao_descr + FROM {{ source("brutos_datasus", "tipo_gestao") }} +), + +nat_jur AS ( + SELECT + id_natureza_juridica, + descricao AS natureza_juridica_descr + FROM {{ ref("raw_cnes_web__natureza_juridica") }} + WHERE data_particao = (SELECT versao FROM versao_atual) + +), + +tp_unidade AS ( + SELECT + id_tipo_unidade, + descricao AS tipo_unidade_descr + FROM {{ ref("raw_cnes_web__tipo_unidade") }} + WHERE data_particao = (SELECT versao FROM versao_atual) +), + +turno AS ( + SELECT + id_turno_atendimento, + descricao AS turno_atendimento + FROM {{ ref("raw_cnes_web__turno_atendimento") }} + WHERE data_particao = (SELECT versao FROM versao_atual) +), + +-- Juntando todos os atributos e mappings, para enriquecer a tabela final de estabelecimentos +estabelecimentos_final AS ( + SELECT + brutos.*, + cnes_web.*, + subgeral.tipo_unidade_agrupado, + subgeral.esfera, + subgeral.id_ap, + subgeral.ap, + tp_gestao.tipo_gestao_descr, + nat_jur.natureza_juridica_descr, + tp_unidade.tipo_unidade_descr, + turno.turno_atendimento, + SPLIT(cnes_web.telefone, "/") AS telefone_cnes, + contatos_aps.telefone AS telefone_aps, + cnes_web.email AS email_cnes, + contatos_aps.email AS email_aps, + contatos_aps.facebook, + contatos_aps.instagram, + contatos_aps.twitter, + estabelecimentos_atributos_dit.agrupador_sms, + estabelecimentos_atributos_dit.tipo_sms, + estabelecimentos_atributos_dit.tipo_sms_simplificado, + estabelecimentos_atributos_dit.nome_limpo, + REGEXP_REPLACE( + estabelecimentos_atributos_dit.nome_limpo, + r'(CF |CSE |CMS |UPA 24h |POLICLINICA |HOSPITAL MUNICIPAL |COORD DE EMERGENCIA REGIONAL CER |MATERNIDADE )', + '' + ) AS nome_complemento, + estabelecimentos_atributos_dit.nome_sigla, + estabelecimentos_atributos_dit.prontuario_tem, + estabelecimentos_atributos_dit.prontuario_versao, + estabelecimentos_atributos_dit.responsavel_sms, + estabelecimentos_atributos_dit.administracao, + estabelecimentos_atributos_dit.prontuario_estoque_tem_dado, + estabelecimentos_atributos_dit.prontuario_estoque_motivo_sem_dado, + COALESCE( + estabelecimentos_atributos_dit.area_programatica, cnes_web.id_distrito_sanitario + ) AS id_distrito_sanitario_corrigido, + CASE + WHEN (cnes_web.nome_fantasia LIKE 'SMS %' OR cnes_web.nome_fantasia LIKE 'SMSDC %' OR cnes_web.nome_fantasia = 'RIOSAUDE') THEN 1 + ELSE 0 + END AS indicador_estabelecimento_sms + FROM estabelecimentos_brutos AS brutos + LEFT JOIN estabelecimentos_atributos_cnes_web AS cnes_web ON brutos.id_estabelecimento_cnes = cnes_web.id_cnes + LEFT JOIN estabelecimentos_atributos_subgeral AS subgeral ON brutos.id_estabelecimento_cnes = subgeral.id_estabelecimento_cnes + LEFT JOIN nat_jur ON brutos.id_natureza_juridica = nat_jur.id_natureza_juridica + LEFT JOIN tp_unidade ON brutos.tipo_unidade = tp_unidade.id_tipo_unidade + LEFT JOIN turno ON brutos.tipo_turno = turno.id_turno_atendimento + LEFT JOIN tp_gestao ON brutos.tipo_gestao = tp_gestao.id_tipo_gestao + LEFT JOIN estabelecimentos_atributos_dit ON brutos.id_estabelecimento_cnes = estabelecimentos_atributos_dit.id_cnes + LEFT JOIN contatos_aps ON brutos.id_estabelecimento_cnes = contatos_aps.id_cnes +) + +-- Seleção final +SELECT + ano, + mes, + esfera, + id_distrito_sanitario_corrigido AS area_programatica, + id_ap, + ap, + cep AS endereco_cep, + id_estabelecimento_cnes AS id_cnes, + nome_razao_social, + nome_fantasia, + id_natureza_juridica, + natureza_juridica_descr, + tipo_gestao, + tipo_gestao_descr, + tipo_unidade AS id_tipo_unidade, + tipo_unidade_descr AS tipo, -- Renomear para tipo_cnes + tipo_unidade_agrupado, + tipo_turno, + turno_atendimento, + agrupador_sms AS tipo_sms_agrupado, + tipo_sms, + tipo_sms_simplificado, + cnpj_mantenedora, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + IF(id_motivo_desativacao = "", "sim", "não") AS ativa, + indicador_estabelecimento_sms, + indicador_vinculo_sus, + indicador_atendimento_internacao_sus, + indicador_atendimento_ambulatorial_sus, + indicador_atendimento_sadt_sus, + indicador_atendimento_urgencia_sus, + indicador_atendimento_outros_sus, + indicador_atendimento_vigilancia_sus, + indicador_atendimento_regulacao_sus, + id_unidade, + nome_limpo, + nome_sigla, + nome_complemento, + responsavel_sms, + administracao, + prontuario_tem, + prontuario_versao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado, + COALESCE(telefone_aps, telefone_cnes) AS telefone, + COALESCE(email_aps, email_cnes) AS email, + facebook, + instagram, + twitter, + aberto_sempre, + diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Metadata + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot +FROM estabelecimentos_final diff --git a/models/raw/cnes_subgeral/_cnes_subgeral_schema.yml b/models/raw/cnes_subgeral/_cnes_subgeral_schema.yml deleted file mode 100644 index 0d6c0d41..00000000 --- a/models/raw/cnes_subgeral/_cnes_subgeral_schema.yml +++ /dev/null @@ -1,38 +0,0 @@ -version: 2 - -models: - - name: raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica - description: Esta tabela contém dados a respeito de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. - columns: - - name: ano - description: Ano - - name: mes - description: Mês - - name: cep - description: CEP do Estabelecimento - - name: id_estabelecimento_cnes - description: CNES do Estabelecimento - - name: id_natureza_juridica - description: Natureza Jurídica do Estabelecimento - - name: tipo_gestao - description: Tipo de Gestão do Estabelecimento - - name: tipo_unidade - description: Tipo de Unidade do Estabelecimento - - name: tipo_turno - description: Tipo de Turno do Estabelecimento - - name: indicador_vinculo_sus - description: Indicador de Vinculação ao SUS - - name: indicador_atendimento_internacao_sus - description: Indicador de Atendimento de Internação pelo SUS - - name: indicador_atendimento_ambulatorial_sus - description: Indicador de Atendimento Ambulatorial pelo SUS - - name: indicador_atendimento_sadt_sus - description: Indicador de Atendimento de SADT pelo SUS - - name: indicador_atendimento_urgencia_sus - description: Indicador de Atendimento de Urgência pelo SUS - - name: indicador_atendimento_outros_sus - description: Indicador de Atendimento de Outros Serviços pelo SUS - - name: indicador_atendimento_vigilancia_sus - description: Indicador de Atendimento de Vigilância pelo SUS - - name: indicador_atendimento_regulacao_sus - description: Indicador de Atendimento de Regulação pelo SUS \ No newline at end of file diff --git a/models/raw/cnes_subgeral/_cnes_subgeral_sources.yml b/models/raw/cnes_subgeral/_cnes_subgeral_sources.yml deleted file mode 100644 index fb22a37e..00000000 --- a/models/raw/cnes_subgeral/_cnes_subgeral_sources.yml +++ /dev/null @@ -1,8 +0,0 @@ -version: 2 - -sources: - - name: brutos_cnes_ftp - database: rj-sms - schema: brutos_cnes_ftp - tables: - - name: estabelecimento \ No newline at end of file diff --git a/models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql b/models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql deleted file mode 100644 index a3965139..00000000 --- a/models/raw/cnes_subgeral/raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica.sql +++ /dev/null @@ -1,43 +0,0 @@ -{{ - config( - schema="raw_cnes_subgeral__estabelecimento_sus_mrj_serie_historica", - alias="brutos_estabelecimento_sus_mrj_serie_historica" - ) -}} - -with source as (select * from {{ source("brutos_cnes_ftp", "estabelecimento") }} ) - -select - ano, - mes, - cep, - id_estabelecimento_cnes, - id_natureza_juridica, - tipo_gestao, - tipo_unidade, - tipo_turno, - indicador_vinculo_sus, - indicador_atendimento_internacao_sus, - indicador_atendimento_ambulatorial_sus, - indicador_atendimento_sadt_sus, - indicador_atendimento_urgencia_sus, - indicador_atendimento_outros_sus, - indicador_atendimento_vigilancia_sus, - indicador_atendimento_regulacao_sus - -from - source - -where - sigla_uf = "RJ" - and id_municipio_6 = "330455" - and ( - indicador_vinculo_sus = 1 - or indicador_atendimento_internacao_sus = 1 - or indicador_atendimento_ambulatorial_sus = 1 - or indicador_atendimento_sadt_sus = 1 - or indicador_atendimento_urgencia_sus = 1 - or indicador_atendimento_outros_sus = 1 - or indicador_atendimento_vigilancia_sus = 1 - or indicador_atendimento_regulacao_sus = 1 - ) \ No newline at end of file diff --git a/models/raw/cnes_web/_cnes_sources.yml b/models/raw/cnes_web/_cnes_sources.yml index 3ff8b102..acfba671 100644 --- a/models/raw/cnes_web/_cnes_sources.yml +++ b/models/raw/cnes_web/_cnes_sources.yml @@ -17,4 +17,5 @@ sources: - name: tbDadosProfissionalSus - name: rlEstabEquipeProf - name: tbTipoEquipe - - name: tbArea \ No newline at end of file + - name: tbArea + - name: tbNaturezaJuridica \ No newline at end of file diff --git a/models/raw/cnes_web/raw_cnes_web__natureza_juridica.sql b/models/raw/cnes_web/raw_cnes_web__natureza_juridica.sql new file mode 100644 index 00000000..5c33c150 --- /dev/null +++ b/models/raw/cnes_web/raw_cnes_web__natureza_juridica.sql @@ -0,0 +1,28 @@ +{{ + config( + alias="natureza_juridica", + ) +}} + +with source as (select * from {{ source("brutos_cnes_web_staging", "tbNaturezaJuridica") }}) + +select + -- pk + safe_cast(CO_NATUREZA_JUR as string) as id_natureza_juridica, + + -- common + safe_cast(DS_NATUREZA_JUR as string) as descricao, + + -- metadata + safe_cast(mes_particao as string) as mes_particao, + safe_cast(ano_particao as string) as ano_particao, + concat( + safe_cast(ano_particao as string), + '-', + safe_cast(mes_particao as string), + '-01' + ) as data_particao, + safe_cast(_data_carga as datetime) as data_carga, + safe_cast(_data_snapshot as datetime) as data_snapshot + +from source \ No newline at end of file From 5dafb2e6afc7f22e9e4d6a748c72630f1b2c29d8 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Tue, 17 Sep 2024 17:39:38 -0300 Subject: [PATCH 04/28] =?UTF-8?q?Altera=C3=A7=C3=B5es=20nas=20estruturas?= =?UTF-8?q?=20dos=20modelos:=20estabelecimento=5Fsus=5Frio=5Fhistorico;=20?= =?UTF-8?q?estabelecimento=5Fauxiliar.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../saude_cnes/_mart_saude_cnes_schema.yml | 220 ++++++++------- .../saude_cnes/_mart_saude_cnes_sources.yml | 8 +- .../dim_estabelecimento_sus_rio_historico.sql | 251 ++++++++++++------ models/raw/sheets/_sheets_schema.yml | 15 +- .../raw_sheets__estabelecimento_auxiliar.sql | 11 +- 5 files changed, 311 insertions(+), 194 deletions(-) diff --git a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml index 231d4b4b..60acda98 100644 --- a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml @@ -1,136 +1,158 @@ version: 2 models: - - name: mart_cnes_subgeral__estabelecimento_sus_mrj_serie_historica - description: Esta tabela contém dados a respeito de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. + - 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 + description: "Ano de referência dos dados." - name: mes - description: Mês de referência dos dados - - name: esfera - description: Classificação administrativa da esfera governamental (federal, estadual, municipal) - - name: id_ap - description: Código da Área de Planejamento - - name: ap - description: Descrição da Área de Planejamento - - name: cep - description: CEP do estabelecimento - - name: id_estabelecimento_cnes - description: Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento + 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 + description: "Razão social do estabelecimento conforme registro oficial." - name: nome_fantasia - description: Nome fantasia do estabelecimento + 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 + description: "Código da natureza jurídica do estabelecimento." - name: natureza_juridica_descr - description: Descrição da natureza jurídica do estabelecimento + 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) + 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 - - name: tipo_unidade - description: Código do tipo de unidade de saúde - - name: tipo_unidade_descr - description: Descrição do tipo de unidade de saúde - - name: tipo_unidade_agrupado - description: Classificação agrupada do tipo de unidade + 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) + description: "Código indicativo do turno de atendimento (manhã, tarde, integral)." - name: turno_atendimento - description: Descrição do turno de 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 + description: "Bairro onde o estabelecimento está localizado." - name: endereco_logradouro - description: Logradouro do endereço do estabelecimento + description: "Logradouro do endereço do estabelecimento." - name: endereco_numero - description: Número do endereço do estabelecimento + description: "Número do endereço do estabelecimento." - name: endereco_complemento - description: Complemento do endereço do estabelecimento + description: "Complemento do endereço do estabelecimento." - name: endereco_latitude - description: Latitude do estabelecimento para georreferenciamento + description: "Latitude do estabelecimento para georreferenciamento." - name: endereco_longitude - description: Longitude do estabelecimento para georreferenciamento - - name: indicador_estabelecimento_sms - description: Indicador se o estabelecimento é parte da rede municipal de saúde - - name: indicador_vinculo_sus - description: Indica se o estabelecimento possui vínculo com o SUS - - name: indicador_atendimento_internacao_sus - description: Indica se o estabelecimento oferece serviços de internação pelo SUS - - name: indicador_atendimento_ambulatorial_sus - description: Indica se o estabelecimento oferece serviços ambulatoriais pelo SUS - - name: indicador_atendimento_sadt_sus - description: Indica se o estabelecimento oferece Serviços Auxiliares de Diagnóstico e Terapia pelo SUS - - name: indicador_atendimento_urgencia_sus - description: Indica se o estabelecimento oferece serviços de urgência pelo SUS - - name: indicador_atendimento_outros_sus - description: Indica se o estabelecimento oferece outros tipos de serviços pelo SUS não especificados anteriormente - - name: indicador_atendimento_vigilancia_sus - description: Indica se o estabelecimento oferece serviços de vigilância em saúde pelo SUS - - name: indicador_atendimento_regulacao_sus - description: Indica se o estabelecimento atua em atividades de regulação de serviços de saúde pelo SUS - - name: area_programatica - description: Refined sanitary district code used for categorizing the establishment within a specific administrative area. - - name: tipo_sms_agrupado - description: Grouping variable for SMS related to health communication strategies or categories. - - name: tipo - description: Description of the unit, indicating the type classification of the healthcare facility unit. - - name: tipo_sms - description: Category or type of SMS related to health services. - - name: tipo_sms_simplificado - description: Simplified version of the SMS category, used for general classification. - - name: cnpj_mantenedora - description: CNPJ of the entity maintaining the establishment, crucial for legal and financial accountability. + description: "Longitude do estabelecimento para georreferenciamento." + + # Status - name: ativa - description: Indicates operational status of the establishment based on the presence of a deactivation reason. - - name: id_unidade - description: Identifier for a specific unit within the establishment. - - name: nome_limpo - description: Cleaned or formatted name of the establishment for reporting or formal use. - - name: nome_sigla - description: Abbreviated form of the establishment’s name. - - name: nome_complemento - description: Additional naming details that complement the primary name of the establishment. - - name: responsavel_sms - description: Person responsible for the SMS system or health management. - - name: administracao - description: Describes the type of administration or management style of the establishment. + description: "Indica o status operacional do estabelecimento ('sim' para ativo, 'não' para inativo)." + + # Prontuário - name: prontuario_tem - description: Indicates whether patient records are maintained. + description: "Indica se o estabelecimento mantém prontuários dos pacientes." - name: prontuario_versao - description: Version control for patient records. + description: "Versão do prontuário utilizado pelo estabelecimento." - name: prontuario_estoque_tem_dado - description: Indicates if patient records contain data. + description: "Indica se os prontuários contêm dados disponíveis." - name: prontuario_estoque_motivo_sem_dado - description: Reason provided when patient records do not contain data. + description: "Motivo pelo qual os prontuários não contêm dados." + + # Informações de Contato - name: telefone - description: Primary telephone contact number for the establishment. + description: "Número de telefone principal para contato com o estabelecimento." - name: email - description: Primary email address for communication with the establishment. + description: "Endereço de e-mail principal do estabelecimento." - name: facebook - description: Facebook page of the establishment. + description: "Página do Facebook do estabelecimento." - name: instagram - description: Instagram profile of the establishment. + description: "Perfil do Instagram do estabelecimento." - name: twitter - description: Twitter handle of the establishment. - - name: aberto_sempre - description: Indicates whether the establishment operates continuously, 24/7. - - name: diretor_clinico_cpf - description: CPF number of the clinical director, important for legal identification. - - name: diretor_clinico_conselho - description: Professional council registration number of the clinical director. + description: "Conta do Twitter do estabelecimento." + + # Indicadores + - name: indicador_estabelecimento_sms + description: "Indica se o estabelecimento faz parte da rede municipal de saúde." + - name: indicador_vinculo_sus + description: "Indica se o estabelecimento possui vínculo com o SUS." + - name: indicador_atendimento_internacao_sus + description: "Indica se o estabelecimento oferece serviços de internação pelo SUS." + - name: indicador_atendimento_ambulatorial_sus + description: "Indica se o estabelecimento oferece serviços ambulatoriais pelo SUS." + - name: indicador_atendimento_sadt_sus + description: "Indica se o estabelecimento oferece Serviços Auxiliares de Diagnóstico e Terapia (SADT) pelo SUS." + - name: indicador_atendimento_urgencia_sus + description: "Indica se o estabelecimento oferece serviços de urgência pelo SUS." + - name: indicador_atendimento_outros_sus + description: "Indica se o estabelecimento oferece outros tipos de serviços pelo SUS." + - name: indicador_atendimento_vigilancia_sus + description: "Indica se o estabelecimento oferece serviços de vigilância em saúde pelo SUS." + - name: indicador_atendimento_regulacao_sus + 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: Date when the record was last updated. + description: "Data em que o registro foi atualizado pela última vez." - name: usuario_atualizador_registro - description: Username or identifier of the person who last updated the record. + description: "Identificador do usuário que atualizou o registro pela última vez." - name: mes_particao - description: Month used for data partitioning purposes. + description: "Mês utilizado para fins de particionamento dos dados." - name: ano_particao - description: Year used for data partitioning purposes. + description: "Ano utilizado para fins de particionamento dos dados." - name: data_particao - description: Specific date used for data partitioning. + description: "Data específica utilizada para particionamento dos dados." - name: data_carga - description: Date when data was loaded into the database. + description: "Data em que os dados foram carregados no banco de dados." - name: data_snapshot - description: Date when the data snapshot was taken. + description: "Data em que o snapshot dos dados foi capturado." diff --git a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml index 53356161..ed276a91 100644 --- a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml @@ -5,13 +5,7 @@ sources: schema: brutos_cnes_ftp tables: - name: estabelecimento - - - name: brutos_datasus - database: rj-sms-dev - schema: brutos_datasus - tables: - - name: tipo_gestao - + - name: subgeral_padronizacoes database: rj-sms-sandbox schema: subgeral_padronizacoes diff --git a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql index f1aec9e4..3ab6e1a9 100644 --- a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql @@ -11,7 +11,7 @@ WITH versao_atual AS ( SELECT MAX(data_particao) AS versao FROM {{ ref("raw_cnes_web__tipo_unidade") }} -), +), -- OBS: Não faz mais sentido pegar a versão de alguma outra tabela, sem ser tipo_unidade? -- Obtendo todos os estabelecimentos do MRJ que possuem vinculo com o SUS estabelecimentos_brutos AS ( @@ -80,35 +80,52 @@ estabelecimentos_atributos_cnes_web AS ( WHERE data_particao = (SELECT versao FROM versao_atual) ), --- Obtendo atributos dos estabelecimentos via tabela proveniente da SUBGERAL -estabelecimentos_atributos_subgeral AS ( - SELECT - ESFERA AS esfera, - AP AS id_ap, - AP_TITULO AS ap, - CNES AS id_estabelecimento_cnes, - TIPO_UNIDADE_AGRUPADO AS tipo_unidade_agrupado - FROM {{ source("subgeral_padronizacoes", "padronizacao_estabelecimentos") }} -), - --- Obtendo atributos dos estabelecimentos via tabela proveniente da DIT -estabelecimentos_atributos_dit AS ( - SELECT * +-- Obtendo atributos auxiliares dos estabelecimentos via classificação interna construída pela SMS +estabelecimentos_atributos AS ( + SELECT + id_cnes, + indicador_estabelecimento_sms, + tipo_unidade_subgeral, + tipo_unidade_agrupado_subgeral, + esfera_subgeral, + area_programatica, + area_programatica_descr, + agrupador_sms, + tipo_sms, + tipo_sms_simplificado, + nome_limpo, + nome_sigla, + prontuario_tem, + prontuario_versao, + responsavel_sms, + administracao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado FROM {{ ref("raw_sheets__estabelecimento_auxiliar") }} ), -- Obtendo atributos de contato para os estabelecimentos contatos_aps AS ( - SELECT * + SELECT + id_cnes, + telefone, + email, + facebook, + instagram, + twitter FROM {{ ref("raw_plataforma_smsrio__estabelecimento_contato") }} ), -- Carregando tabelas utilizadas para mapear códigos em suas descrições textuais tp_gestao AS ( - SELECT - DISTINCT id_tipo_gestao AS id_tipo_gestao, - UPPER(tipo_gestao_descr) AS tipo_gestao_descr - FROM {{ source("brutos_datasus", "tipo_gestao") }} + SELECT * FROM UNNEST([ + STRUCT("D" AS id_tipo_gestao, "DUPLA" AS tipo_gestao_descr), + STRUCT("E", "ESTADUAL"), + STRUCT("M", "MUNICIPAL"), + STRUCT("Z", "SEM GESTAO"), + STRUCT("S", "SEM GESTAO"), + STRUCT("-Z", "NAO INFORMADO") + ]) ), nat_jur AS ( @@ -139,118 +156,181 @@ turno AS ( -- Juntando todos os atributos e mappings, para enriquecer a tabela final de estabelecimentos estabelecimentos_final AS ( SELECT - brutos.*, - cnes_web.*, - subgeral.tipo_unidade_agrupado, - subgeral.esfera, - subgeral.id_ap, - subgeral.ap, + -- Brutos FTP DATASUS + brutos.ano, + brutos.mes, + brutos.cep, + brutos.id_estabelecimento_cnes, + brutos.id_natureza_juridica, + brutos.tipo_gestao, + brutos.tipo_unidade, + brutos.tipo_turno, + brutos.indicador_vinculo_sus, + brutos.indicador_atendimento_internacao_sus, + brutos.indicador_atendimento_ambulatorial_sus, + brutos.indicador_atendimento_sadt_sus, + brutos.indicador_atendimento_urgencia_sus, + brutos.indicador_atendimento_outros_sus, + brutos.indicador_atendimento_vigilancia_sus, + brutos.indicador_atendimento_regulacao_sus, + + -- CNES Web + cnes_web.nome_razao_social, + cnes_web.nome_fantasia, + cnes_web.cnpj_mantenedora, + cnes_web.endereco_bairro, + cnes_web.endereco_logradouro, + cnes_web.endereco_numero, + cnes_web.endereco_complemento, + cnes_web.endereco_latitude, + cnes_web.endereco_longitude, + cnes_web.id_motivo_desativacao, + cnes_web.id_unidade, + cnes_web.aberto_sempre, + cnes_web.diretor_clinico_cpf, + cnes_web.diretor_clinico_conselho, + cnes_web.data_atualizao_registro, + cnes_web.usuario_atualizador_registro, + cnes_web.mes_particao, + cnes_web.ano_particao, + cnes_web.data_particao, + cnes_web.data_carga, + cnes_web.data_snapshot, + cnes_web.email AS email_cnes, + SPLIT(cnes_web.telefone, "/") AS telefone_cnes, + + -- Atributos criados in house + estabelecimentos_atributos.indicador_estabelecimento_sms, + estabelecimentos_atributos.tipo_unidade_subgeral AS tipo_unidade_alternativo, + estabelecimentos_atributos.tipo_unidade_agrupado_subgeral AS tipo_unidade_agrupado, + estabelecimentos_atributos.esfera_subgeral AS esfera, + estabelecimentos_atributos.area_programatica AS id_ap, + estabelecimentos_atributos.area_programatica_descr AS ap, + estabelecimentos_atributos.agrupador_sms, + estabelecimentos_atributos.tipo_sms, + estabelecimentos_atributos.tipo_sms_simplificado, + estabelecimentos_atributos.nome_limpo, + estabelecimentos_atributos.nome_sigla, + estabelecimentos_atributos.prontuario_tem, + estabelecimentos_atributos.prontuario_versao, + estabelecimentos_atributos.responsavel_sms, + estabelecimentos_atributos.administracao, + estabelecimentos_atributos.prontuario_estoque_tem_dado, + estabelecimentos_atributos.prontuario_estoque_motivo_sem_dado, + REGEXP_REPLACE( + estabelecimentos_atributos.nome_limpo, + r'(CF |CSE |CMS |UPA 24h |POLICLINICA |HOSPITAL MUNICIPAL |COORD DE EMERGENCIA REGIONAL CER |MATERNIDADE )', + '' + ) AS nome_complemento, + + -- Mappings oficiais do CNES / DATASUS tp_gestao.tipo_gestao_descr, nat_jur.natureza_juridica_descr, tp_unidade.tipo_unidade_descr, turno.turno_atendimento, - SPLIT(cnes_web.telefone, "/") AS telefone_cnes, + + -- Informações de Contato contatos_aps.telefone AS telefone_aps, - cnes_web.email AS email_cnes, - contatos_aps.email AS email_aps, contatos_aps.facebook, contatos_aps.instagram, contatos_aps.twitter, - estabelecimentos_atributos_dit.agrupador_sms, - estabelecimentos_atributos_dit.tipo_sms, - estabelecimentos_atributos_dit.tipo_sms_simplificado, - estabelecimentos_atributos_dit.nome_limpo, - REGEXP_REPLACE( - estabelecimentos_atributos_dit.nome_limpo, - r'(CF |CSE |CMS |UPA 24h |POLICLINICA |HOSPITAL MUNICIPAL |COORD DE EMERGENCIA REGIONAL CER |MATERNIDADE )', - '' - ) AS nome_complemento, - estabelecimentos_atributos_dit.nome_sigla, - estabelecimentos_atributos_dit.prontuario_tem, - estabelecimentos_atributos_dit.prontuario_versao, - estabelecimentos_atributos_dit.responsavel_sms, - estabelecimentos_atributos_dit.administracao, - estabelecimentos_atributos_dit.prontuario_estoque_tem_dado, - estabelecimentos_atributos_dit.prontuario_estoque_motivo_sem_dado, - COALESCE( - estabelecimentos_atributos_dit.area_programatica, cnes_web.id_distrito_sanitario - ) AS id_distrito_sanitario_corrigido, - CASE - WHEN (cnes_web.nome_fantasia LIKE 'SMS %' OR cnes_web.nome_fantasia LIKE 'SMSDC %' OR cnes_web.nome_fantasia = 'RIOSAUDE') THEN 1 - ELSE 0 - END AS indicador_estabelecimento_sms + contatos_aps.email AS email_aps, + FROM estabelecimentos_brutos AS brutos LEFT JOIN estabelecimentos_atributos_cnes_web AS cnes_web ON brutos.id_estabelecimento_cnes = cnes_web.id_cnes - LEFT JOIN estabelecimentos_atributos_subgeral AS subgeral ON brutos.id_estabelecimento_cnes = subgeral.id_estabelecimento_cnes LEFT JOIN nat_jur ON brutos.id_natureza_juridica = nat_jur.id_natureza_juridica LEFT JOIN tp_unidade ON brutos.tipo_unidade = tp_unidade.id_tipo_unidade LEFT JOIN turno ON brutos.tipo_turno = turno.id_turno_atendimento LEFT JOIN tp_gestao ON brutos.tipo_gestao = tp_gestao.id_tipo_gestao - LEFT JOIN estabelecimentos_atributos_dit ON brutos.id_estabelecimento_cnes = estabelecimentos_atributos_dit.id_cnes + LEFT JOIN estabelecimentos_atributos ON brutos.id_estabelecimento_cnes = estabelecimentos_atributos.id_cnes LEFT JOIN contatos_aps ON brutos.id_estabelecimento_cnes = contatos_aps.id_cnes ) -- Seleção final SELECT + -- Identificação ano, mes, - esfera, - id_distrito_sanitario_corrigido AS area_programatica, - id_ap, - ap, - cep AS endereco_cep, id_estabelecimento_cnes AS id_cnes, + id_unidade, nome_razao_social, nome_fantasia, + nome_limpo, + nome_sigla, + nome_complemento, + cnpj_mantenedora, + + -- Responsabilização + esfera, id_natureza_juridica, natureza_juridica_descr, tipo_gestao, tipo_gestao_descr, - tipo_unidade AS id_tipo_unidade, - tipo_unidade_descr AS tipo, -- Renomear para tipo_cnes - tipo_unidade_agrupado, + responsavel_sms, + administracao, + diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Atributos tipo_turno, turno_atendimento, - agrupador_sms AS tipo_sms_agrupado, + aberto_sempre, + + -- Tipagem dos Estabelecimentos (CNES) + tipo_unidade AS id_tipo_unidade, + tipo_unidade_descr AS tipo, -- Renomear para tipo_cnes? + + -- Tipagem dos Estabelecimentos (DIT) tipo_sms, tipo_sms_simplificado, - cnpj_mantenedora, + agrupador_sms AS tipo_sms_agrupado, + + -- Tipagem dos Estabelecimentos (SUBGERAL) + tipo_unidade_alternativo, + tipo_unidade_agrupado, + + -- Localização + id_ap, + ap, + cep AS endereco_cep, endereco_bairro, endereco_logradouro, endereco_numero, endereco_complemento, endereco_latitude, endereco_longitude, - IF(id_motivo_desativacao = "", "sim", "não") AS ativa, - indicador_estabelecimento_sms, - indicador_vinculo_sus, - indicador_atendimento_internacao_sus, - indicador_atendimento_ambulatorial_sus, - indicador_atendimento_sadt_sus, - indicador_atendimento_urgencia_sus, - indicador_atendimento_outros_sus, - indicador_atendimento_vigilancia_sus, - indicador_atendimento_regulacao_sus, - id_unidade, - nome_limpo, - nome_sigla, - nome_complemento, - responsavel_sms, - administracao, + + -- Status + CASE + WHEN id_motivo_desativacao IS NULL OR id_motivo_desativacao = '' THEN 'sim' + ELSE 'não' + END AS ativa, + + -- Prontuário prontuario_tem, prontuario_versao, prontuario_estoque_tem_dado, prontuario_estoque_motivo_sem_dado, + + -- Informações de contato COALESCE(telefone_aps, telefone_cnes) AS telefone, COALESCE(email_aps, email_cnes) AS email, facebook, instagram, twitter, - aberto_sempre, - diretor_clinico_cpf, - diretor_clinico_conselho, - -- Metadata + -- Indicadores + indicador_estabelecimento_sms, + indicador_vinculo_sus, + indicador_atendimento_internacao_sus, + indicador_atendimento_ambulatorial_sus, + indicador_atendimento_sadt_sus, + indicador_atendimento_urgencia_sus, + indicador_atendimento_outros_sus, + indicador_atendimento_vigilancia_sus, + indicador_atendimento_regulacao_sus, + + -- Metadados data_atualizao_registro, usuario_atualizador_registro, mes_particao, @@ -258,4 +338,5 @@ SELECT data_particao, data_carga, data_snapshot -FROM estabelecimentos_final + +FROM estabelecimentos_final \ No newline at end of file diff --git a/models/raw/sheets/_sheets_schema.yml b/models/raw/sheets/_sheets_schema.yml index 35e55f06..2b1954fd 100644 --- a/models/raw/sheets/_sheets_schema.yml +++ b/models/raw/sheets/_sheets_schema.yml @@ -10,12 +10,16 @@ models: name: raw_sheets__estabelecimento_auxiliar__id_cnes__unique - relationships: name: raw_sheets__estabelecimento_auxiliar__id_cnes__relationship - to: ref('dim_estabelecimento') + to: ref('estabelecimento_sus_rio_historico') field: id_cnes + - name: indicador_estabelecimento_sms + description: Indica se o estabelecimento é pertencente a rede assistencial da Secretaria Municipal de Saúde do Rio de Janeiro (1=SIM, 0=NAO) - name: tipo_sms description: Classificação alternativa ao CNES de tipos de unidades - name: tipo_sms_simplificado description: Classificação alternativa ao CNES de tipos de unidades abreviada + - name: agrupador_sms + description: Classificação alternativa ao CNES - name: nome_fantasia description: Nome fantasia de unidade de saúde - name: nome_limpo @@ -39,6 +43,15 @@ models: description: Subcretaria responsável dentro da SMS - name: administracao description: Administradora da unidade de saúde. + - name: tipo_unidade_subgeral + description: Classificação alternativa ao CNES de tipos de unidades + - name: tipo_unidade_agrupado_subgeral + description: Classificação alternativa ao CNES + - name: esfera_subgeral + description: Classificação alternativa de esfera + - name: area_programatica_descr + description: Descrição da Área Programática + - name: raw_sheets__material_mestre description: Tabela cadastral de materiais da SMS-Rio columns: diff --git a/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql b/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql index 2d4098cd..4b143960 100644 --- a/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql +++ b/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql @@ -16,13 +16,15 @@ select format("%07d", cast(id_cnes as int64)) as id_cnes, -- fix cases where 0 on the left is lost -- Common fields + indicador_estabelecimento_sms, + if(agrupador_sms = "nan", null, agrupador_sms) as agrupador_sms, if(tipo_sms = "nan", null, tipo_sms) as tipo_sms, if(tipo_sms_simplificado = "nan", null, tipo_sms_simplificado) as tipo_sms_simplificado, safe_cast(nome_fantasia as string) as nome_fantasia, if(nome_limpo = "nan", null, nome_limpo) as nome_limpo, - if(sigla = "nan", null, sigla) as nome_sigla, - if(distrito_sanitario = "nan", null, distrito_sanitario) as area_programatica, + if(nome_sigla = "nan", null, nome_sigla) as nome_sigla, + if(area_programatica = "nan", null, area_programatica) as area_programatica, if(prontuario_tem = "nan", null, prontuario_tem) as prontuario_tem, if(prontuario_versao = "nan", null, prontuario_versao) as prontuario_versao, if(prontuario_estoque_tem_dado = "nan", null, prontuario_estoque_tem_dado) as prontuario_estoque_tem_dado, @@ -30,5 +32,10 @@ select if(responsavel_sms = "nan", null, responsavel_sms) as responsavel_sms, if(administracao = "nan", null, administracao) as administracao, + tipo_unidade_subgeral, + tipo_unidade_agrupado_subgeral, + esfera_subgeral, + area_programatica_descr + from source From 3fea421fdf3f9fd6326adbfcffa582b4827f2133 Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Wed, 18 Sep 2024 10:47:07 -0300 Subject: [PATCH 05/28] Fix typo in dbt project --- dbt_project.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt_project.yml b/dbt_project.yml index 8d6df6ef..b8d9f98d 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -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: From 9085cea8ad51ab7ab911c1be904642dee6c2ff95 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Fri, 20 Sep 2024 16:11:55 -0300 Subject: [PATCH 06/28] =?UTF-8?q?Corre=C3=A7=C3=A3o=20de=20bugs?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dimensions/dim_estabelecimento.sql | 128 +++++++++--------- .../saude_cnes/_mart_saude_cnes_schema.yml | 18 +-- .../saude_cnes/_mart_saude_cnes_sources.yml | 11 +- .../dim_estabelecimento_sus_rio_historico.sql | 77 ++++++----- .../raw_sheets__estabelecimento_auxiliar.sql | 4 +- 5 files changed, 124 insertions(+), 114 deletions(-) diff --git a/models/marts/core/dimensions/dim_estabelecimento.sql b/models/marts/core/dimensions/dim_estabelecimento.sql index 8df9d417..b7e1ec9e 100644 --- a/models/marts/core/dimensions/dim_estabelecimento.sql +++ b/models/marts/core/dimensions/dim_estabelecimento.sql @@ -10,74 +10,78 @@ current_year as ( current_period as ( select - current_year.ano_atual, - max(mes) as competencia_atual + 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 -) +), -select - -- primary key - id_unidade, +final as ( + select + -- primary key + id_unidade, - -- foreign keys - id_cnes, - id_tipo_unidade, - area_programatica, - cnpj_mantenedora, + -- foreign keys + id_cnes, + id_tipo_unidade, + id_ap as area_programatica, + cnpj_mantenedora, - -- 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, + -- 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, - -- metadata - data_atualizao_registro, - usuario_atualizador_registro, - mes_particao, - ano_particao, - data_particao, - data_carga, - data_snapshot + -- metadata + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot -from - source - join current_period on source.ano = current_period.ano_atual and source.mes = current_period.competencia_atual -where - indicador_estabelecimento_sms = 1 + from + source + join current_period on source.ano = current_period.ano_atual and source.mes = current_period.competencia_atual + where + estabelecimento_sms_indicador = 1 + + order by + ativa desc, + id_tipo_unidade asc, + area_programatica asc, + endereco_bairro asc, + nome_fantasia asc +) -order by - ativa desc, - id_tipo_unidade asc, - area_programatica asc, - endereco_bairro asc, - nome_fantasia asc +select * from final \ No newline at end of file diff --git a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml index 60acda98..883b0863 100644 --- a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml @@ -122,23 +122,23 @@ models: description: "Conta do Twitter do estabelecimento." # Indicadores - - name: indicador_estabelecimento_sms + - name: estabelecimento_sms_indicador description: "Indica se o estabelecimento faz parte da rede municipal de saúde." - - name: indicador_vinculo_sus + - name: vinculo_sus_indicador description: "Indica se o estabelecimento possui vínculo com o SUS." - - name: indicador_atendimento_internacao_sus + - name: atendimento_internacao_sus_indicador description: "Indica se o estabelecimento oferece serviços de internação pelo SUS." - - name: indicador_atendimento_ambulatorial_sus + - name: atendimento_ambulatorial_sus_indicador description: "Indica se o estabelecimento oferece serviços ambulatoriais pelo SUS." - - name: indicador_atendimento_sadt_sus + - name: atendimento_sadt_sus_indicador description: "Indica se o estabelecimento oferece Serviços Auxiliares de Diagnóstico e Terapia (SADT) pelo SUS." - - name: indicador_atendimento_urgencia_sus + - name: atendimento_urgencia_sus_indicador description: "Indica se o estabelecimento oferece serviços de urgência pelo SUS." - - name: indicador_atendimento_outros_sus + - name: atendimento_outros_sus_indicador description: "Indica se o estabelecimento oferece outros tipos de serviços pelo SUS." - - name: indicador_atendimento_vigilancia_sus + - name: atendimento_vigilancia_sus_indicador description: "Indica se o estabelecimento oferece serviços de vigilância em saúde pelo SUS." - - name: indicador_atendimento_regulacao_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 diff --git a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml index ed276a91..c4be7835 100644 --- a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml @@ -5,9 +5,10 @@ sources: schema: brutos_cnes_ftp tables: - name: estabelecimento - - - name: subgeral_padronizacoes - database: rj-sms-sandbox - schema: subgeral_padronizacoes + - name: leito + + - name: brutos_cnes_web_staging + database: rj-sms + schema: brutos_cnes_web_staging tables: - - name: padronizacao_estabelecimentos \ No newline at end of file + - name: tbLeito \ No newline at end of file diff --git a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql index 3ab6e1a9..1284fc56 100644 --- a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql @@ -2,6 +2,11 @@ config( schema="mart_saude_cnes__estabelecimento_sus_rio_historico", alias="estabelecimento_sus_rio_historico", + partition_by = { + 'field': 'data_carga', + 'data_type': 'timestamp', + 'granularity': 'day' + } ) }} @@ -24,14 +29,14 @@ estabelecimentos_brutos AS ( tipo_gestao, tipo_unidade, tipo_turno, - indicador_vinculo_sus, - indicador_atendimento_internacao_sus, - indicador_atendimento_ambulatorial_sus, - indicador_atendimento_sadt_sus, - indicador_atendimento_urgencia_sus, - indicador_atendimento_outros_sus, - indicador_atendimento_vigilancia_sus, - indicador_atendimento_regulacao_sus + indicador_vinculo_sus as vinculo_sus_indicador, + indicador_atendimento_internacao_sus as atendimento_internacao_sus_indicador, + indicador_atendimento_ambulatorial_sus as atendimento_ambulatorial_sus_indicador, + indicador_atendimento_sadt_sus as atendimento_sadt_sus_indicador, + indicador_atendimento_urgencia_sus as atendimento_urgencia_sus_indicador, + indicador_atendimento_outros_sus as atendimento_outros_sus_indicador, + indicador_atendimento_vigilancia_sus as atendimento_vigilancia_sus_indicador, + indicador_atendimento_regulacao_sus as atendimento_regulacao_sus_indicador FROM {{ source("brutos_cnes_ftp", "estabelecimento") }} WHERE sigla_uf = "RJ" @@ -84,7 +89,7 @@ estabelecimentos_atributos_cnes_web AS ( estabelecimentos_atributos AS ( SELECT id_cnes, - indicador_estabelecimento_sms, + indicador_estabelecimento_sms as estabelecimento_sms_indicador, tipo_unidade_subgeral, tipo_unidade_agrupado_subgeral, esfera_subgeral, @@ -126,7 +131,7 @@ tp_gestao AS ( STRUCT("S", "SEM GESTAO"), STRUCT("-Z", "NAO INFORMADO") ]) -), +), -- Definição proveniente do CNES FTP DATASUS nat_jur AS ( SELECT @@ -165,14 +170,14 @@ estabelecimentos_final AS ( brutos.tipo_gestao, brutos.tipo_unidade, brutos.tipo_turno, - brutos.indicador_vinculo_sus, - brutos.indicador_atendimento_internacao_sus, - brutos.indicador_atendimento_ambulatorial_sus, - brutos.indicador_atendimento_sadt_sus, - brutos.indicador_atendimento_urgencia_sus, - brutos.indicador_atendimento_outros_sus, - brutos.indicador_atendimento_vigilancia_sus, - brutos.indicador_atendimento_regulacao_sus, + brutos.vinculo_sus_indicador, + brutos.atendimento_internacao_sus_indicador, + brutos.atendimento_ambulatorial_sus_indicador, + brutos.atendimento_sadt_sus_indicador, + brutos.atendimento_urgencia_sus_indicador, + brutos.atendimento_outros_sus_indicador, + brutos.atendimento_vigilancia_sus_indicador, + brutos.atendimento_regulacao_sus_indicador, -- CNES Web cnes_web.nome_razao_social, @@ -200,7 +205,7 @@ estabelecimentos_final AS ( SPLIT(cnes_web.telefone, "/") AS telefone_cnes, -- Atributos criados in house - estabelecimentos_atributos.indicador_estabelecimento_sms, + estabelecimentos_atributos.estabelecimento_sms_indicador, estabelecimentos_atributos.tipo_unidade_subgeral AS tipo_unidade_alternativo, estabelecimentos_atributos.tipo_unidade_agrupado_subgeral AS tipo_unidade_agrupado, estabelecimentos_atributos.esfera_subgeral AS esfera, @@ -237,20 +242,20 @@ estabelecimentos_final AS ( contatos_aps.email AS email_aps, FROM estabelecimentos_brutos AS brutos - LEFT JOIN estabelecimentos_atributos_cnes_web AS cnes_web ON brutos.id_estabelecimento_cnes = cnes_web.id_cnes - LEFT JOIN nat_jur ON brutos.id_natureza_juridica = nat_jur.id_natureza_juridica - LEFT JOIN tp_unidade ON brutos.tipo_unidade = tp_unidade.id_tipo_unidade - LEFT JOIN turno ON brutos.tipo_turno = turno.id_turno_atendimento + LEFT JOIN estabelecimentos_atributos_cnes_web AS cnes_web ON cast(brutos.id_estabelecimento_cnes as int64) = cast(cnes_web.id_cnes as int64) + LEFT JOIN nat_jur ON cast(brutos.id_natureza_juridica as int64) = cast(nat_jur.id_natureza_juridica as int64) + LEFT JOIN tp_unidade ON cast(brutos.tipo_unidade as int64) = cast(tp_unidade.id_tipo_unidade as int64) + LEFT JOIN turno ON cast(brutos.tipo_turno as int64) = cast(turno.id_turno_atendimento as int64) LEFT JOIN tp_gestao ON brutos.tipo_gestao = tp_gestao.id_tipo_gestao - LEFT JOIN estabelecimentos_atributos ON brutos.id_estabelecimento_cnes = estabelecimentos_atributos.id_cnes - LEFT JOIN contatos_aps ON brutos.id_estabelecimento_cnes = contatos_aps.id_cnes + LEFT JOIN estabelecimentos_atributos ON cast(brutos.id_estabelecimento_cnes as int64) = cast(estabelecimentos_atributos.id_cnes as int64) + LEFT JOIN contatos_aps ON cast(brutos.id_estabelecimento_cnes as int64) = cast(contatos_aps.id_cnes as int64) ) -- Seleção final SELECT -- Identificação - ano, - mes, + cast(ano as int64) as ano, + cast(mes as int64) as mes, id_estabelecimento_cnes AS id_cnes, id_unidade, nome_razao_social, @@ -320,15 +325,15 @@ SELECT twitter, -- Indicadores - indicador_estabelecimento_sms, - indicador_vinculo_sus, - indicador_atendimento_internacao_sus, - indicador_atendimento_ambulatorial_sus, - indicador_atendimento_sadt_sus, - indicador_atendimento_urgencia_sus, - indicador_atendimento_outros_sus, - indicador_atendimento_vigilancia_sus, - indicador_atendimento_regulacao_sus, + estabelecimento_sms_indicador, + vinculo_sus_indicador, + atendimento_internacao_sus_indicador, + atendimento_ambulatorial_sus_indicador, + atendimento_sadt_sus_indicador, + atendimento_urgencia_sus_indicador, + atendimento_outros_sus_indicador, + atendimento_vigilancia_sus_indicador, + atendimento_regulacao_sus_indicador, -- Metadados data_atualizao_registro, diff --git a/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql b/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql index 4b143960..00e9396e 100644 --- a/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql +++ b/models/raw/sheets/raw_sheets__estabelecimento_auxiliar.sql @@ -16,7 +16,7 @@ select format("%07d", cast(id_cnes as int64)) as id_cnes, -- fix cases where 0 on the left is lost -- Common fields - indicador_estabelecimento_sms, + cast(indicador_estabelecimento_sms as int64) as indicador_estabelecimento_sms, if(agrupador_sms = "nan", null, agrupador_sms) as agrupador_sms, if(tipo_sms = "nan", null, tipo_sms) as tipo_sms, @@ -24,7 +24,7 @@ select safe_cast(nome_fantasia as string) as nome_fantasia, if(nome_limpo = "nan", null, nome_limpo) as nome_limpo, if(nome_sigla = "nan", null, nome_sigla) as nome_sigla, - if(area_programatica = "nan", null, area_programatica) as area_programatica, + if(area_programatica = "nan", null, cast(area_programatica as int64)) as area_programatica, if(prontuario_tem = "nan", null, prontuario_tem) as prontuario_tem, if(prontuario_versao = "nan", null, prontuario_versao) as prontuario_versao, if(prontuario_estoque_tem_dado = "nan", null, prontuario_estoque_tem_dado) as prontuario_estoque_tem_dado, From 2d8f3389bfccb2857e3fcbc36aeda5627252fece Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Fri, 20 Sep 2024 16:54:13 -0300 Subject: [PATCH 07/28] =?UTF-8?q?Altera=C3=A7=C3=B5es=20na=20sela=C3=A7?= =?UTF-8?q?=C3=A3o=20final=20do=20modelo=20historico.=20Tipagem=20e=20CTE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dim_estabelecimento_sus_rio_historico.sql | 168 +++++++++--------- 1 file changed, 86 insertions(+), 82 deletions(-) diff --git a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql index 1284fc56..85f88889 100644 --- a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql @@ -249,99 +249,103 @@ estabelecimentos_final AS ( LEFT JOIN tp_gestao ON brutos.tipo_gestao = tp_gestao.id_tipo_gestao LEFT JOIN estabelecimentos_atributos ON cast(brutos.id_estabelecimento_cnes as int64) = cast(estabelecimentos_atributos.id_cnes as int64) LEFT JOIN contatos_aps ON cast(brutos.id_estabelecimento_cnes as int64) = cast(contatos_aps.id_cnes as int64) -) +), -- Seleção final -SELECT - -- Identificação - cast(ano as int64) as ano, - cast(mes as int64) as mes, - id_estabelecimento_cnes AS id_cnes, - id_unidade, - nome_razao_social, - nome_fantasia, - nome_limpo, - nome_sigla, - nome_complemento, - cnpj_mantenedora, +final as ( + SELECT + -- Identificação + cast(ano as int64) as ano, + cast(mes as int64) as mes, + lpad(id_estabelecimento_cnes, 7, '0') AS id_cnes, + id_unidade, + nome_razao_social, + nome_fantasia, + nome_limpo, + nome_sigla, + nome_complemento, + lpad(cnpj_mantenedora, 14, '0') AS cnpj_mantenedora, - -- Responsabilização - esfera, - id_natureza_juridica, - natureza_juridica_descr, - tipo_gestao, - tipo_gestao_descr, - responsavel_sms, - administracao, - diretor_clinico_cpf, - diretor_clinico_conselho, + -- Responsabilização + esfera, + cast(id_natureza_juridica as int64) as id_natureza_juridica, + natureza_juridica_descr, + tipo_gestao, + tipo_gestao_descr, + responsavel_sms, + administracao, + lpad(diretor_clinico_cpf, 11, '0') AS diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Atributos + cast(tipo_turno as int64) as tipo_turno, + turno_atendimento, + aberto_sempre, - -- Atributos - tipo_turno, - turno_atendimento, - aberto_sempre, + -- Tipagem dos Estabelecimentos (CNES) + cast(tipo_unidade as int64) AS id_tipo_unidade, + tipo_unidade_descr AS tipo, -- Renomear para tipo_cnes? - -- Tipagem dos Estabelecimentos (CNES) - tipo_unidade AS id_tipo_unidade, - tipo_unidade_descr AS tipo, -- Renomear para tipo_cnes? + -- Tipagem dos Estabelecimentos (DIT) + tipo_sms, + tipo_sms_simplificado, + agrupador_sms AS tipo_sms_agrupado, - -- Tipagem dos Estabelecimentos (DIT) - tipo_sms, - tipo_sms_simplificado, - agrupador_sms AS tipo_sms_agrupado, + -- Tipagem dos Estabelecimentos (SUBGERAL) + tipo_unidade_alternativo, + tipo_unidade_agrupado, - -- Tipagem dos Estabelecimentos (SUBGERAL) - tipo_unidade_alternativo, - tipo_unidade_agrupado, + -- Localização + id_ap, + ap, + lpad(cep, 8, '0') as endereco_cep, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, - -- Localização - id_ap, - ap, - cep AS endereco_cep, - endereco_bairro, - endereco_logradouro, - endereco_numero, - endereco_complemento, - endereco_latitude, - endereco_longitude, + -- Status + CASE + WHEN id_motivo_desativacao IS NULL OR id_motivo_desativacao = '' THEN 'sim' + ELSE 'não' + END AS ativa, - -- Status - CASE - WHEN id_motivo_desativacao IS NULL OR id_motivo_desativacao = '' THEN 'sim' - ELSE 'não' - END AS ativa, + -- Prontuário + prontuario_tem, + prontuario_versao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado, - -- Prontuário - prontuario_tem, - prontuario_versao, - prontuario_estoque_tem_dado, - prontuario_estoque_motivo_sem_dado, + -- Informações de contato + COALESCE(telefone_aps, telefone_cnes) AS telefone, + COALESCE(email_aps, email_cnes) AS email, + facebook, + instagram, + twitter, - -- Informações de contato - COALESCE(telefone_aps, telefone_cnes) AS telefone, - COALESCE(email_aps, email_cnes) AS email, - facebook, - instagram, - twitter, + -- Indicadores + estabelecimento_sms_indicador, + vinculo_sus_indicador, + atendimento_internacao_sus_indicador, + atendimento_ambulatorial_sus_indicador, + atendimento_sadt_sus_indicador, + atendimento_urgencia_sus_indicador, + atendimento_outros_sus_indicador, + atendimento_vigilancia_sus_indicador, + atendimento_regulacao_sus_indicador, - -- Indicadores - estabelecimento_sms_indicador, - vinculo_sus_indicador, - atendimento_internacao_sus_indicador, - atendimento_ambulatorial_sus_indicador, - atendimento_sadt_sus_indicador, - atendimento_urgencia_sus_indicador, - atendimento_outros_sus_indicador, - atendimento_vigilancia_sus_indicador, - atendimento_regulacao_sus_indicador, + -- Metadados + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot - -- Metadados - data_atualizao_registro, - usuario_atualizador_registro, - mes_particao, - ano_particao, - data_particao, - data_carga, - data_snapshot + FROM estabelecimentos_final +) -FROM estabelecimentos_final \ No newline at end of file +select * from final \ No newline at end of file From 675b3cf229fc6a8e65d976f706d6c0e4cf9d0278 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Mon, 23 Sep 2024 19:04:14 -0300 Subject: [PATCH 08/28] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20modelo=20CNES=20?= =?UTF-8?q?de=20leitos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../saude_cnes/_mart_saude_cnes_schema.yml | 171 ++++++++++++++++++ .../saude_cnes/_mart_saude_cnes_sources.yml | 8 +- .../dim_leito_sus_rio_historico.sql | 164 +++++++++++++++++ models/raw/cnes_web/_cnes_schema.yml | 35 +++- models/raw/cnes_web/_cnes_sources.yml | 3 +- models/raw/cnes_web/raw_cnes_web__leito.sql | 21 +++ 6 files changed, 393 insertions(+), 9 deletions(-) create mode 100644 models/marts/saude_cnes/dim_leito_sus_rio_historico.sql create mode 100644 models/raw/cnes_web/raw_cnes_web__leito.sql diff --git a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml index 883b0863..c689976f 100644 --- a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml @@ -156,3 +156,174 @@ models: 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." + + - name: leito_sus_rio_historico + description: Esta tabela contém dados sobre todos os leitos dos 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." + + # Campos específicos da tabela de leitos + - name: tipo_leito + description: "Identificador do tipo de leito disponível." + - name: tipo_leito_descr + description: "Descrição do tipo de leito disponível." + - name: tipo_especialidade_leito + description: "Identificador da especialidade do leito." + - name: tipo_especialidade_leito_descr + description: "Descrição da especialidade do leito." + - name: quantidade_total + description: "Quantidade total de leitos disponíveis." + - name: quantidade_contratado + description: "Quantidade de leitos contratados." + - name: quantidade_sus + description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." \ No newline at end of file diff --git a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml index c4be7835..a28ffa5f 100644 --- a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml +++ b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml @@ -5,10 +5,4 @@ sources: schema: brutos_cnes_ftp tables: - name: estabelecimento - - name: leito - - - name: brutos_cnes_web_staging - database: rj-sms - schema: brutos_cnes_web_staging - tables: - - name: tbLeito \ No newline at end of file + - name: leito \ No newline at end of file diff --git a/models/marts/saude_cnes/dim_leito_sus_rio_historico.sql b/models/marts/saude_cnes/dim_leito_sus_rio_historico.sql new file mode 100644 index 00000000..f435ca86 --- /dev/null +++ b/models/marts/saude_cnes/dim_leito_sus_rio_historico.sql @@ -0,0 +1,164 @@ +{{ + config( + schema="mart_saude_cnes__leito_rio_historico", + alias="leito_sus_rio_historico" + ) +}} + +with + +-- Obtendo a data mais atual +versao_atual AS ( + SELECT MAX(data_particao) AS versao + FROM {{ ref("raw_cnes_web__tipo_unidade") }} +), -- OBS: Não faz mais sentido pegar a versão de alguma outra tabela, sem ser tipo_unidade? + +leitos_mapping_cnesftp as ( + select * from unnest([ + STRUCT(1 as tipo_leito, "CIRURGICO" as tipo_leito_descr), + STRUCT(2, "CLINICO"), + STRUCT(3, "COMPLEMENTAR"), + STRUCT(4, "OBSTETRICO"), + STRUCT(5, "PEDIATRICO"), + STRUCT(6, "OUTROS"), + STRUCT(7, "HOSPITAL / DIA") + ]) +), + +leitos_mapping_cnesweb as ( + select + distinct id_leito_especialidade as tipo_especialidade_leito, + leito_especialidade as tipo_especialidade_leito_descr + from {{ ref("raw_cnes_web__leito") }} +), + +estabelecimentos_mrj_sus as ( + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where data_particao = (select versao from versao_atual) +), + +leitos_mrj_sus as ( + select + lt.tipo_leito, + lt.tipo_especialidade_leito, + lt.quantidade_total, + lt.quantidade_contratado, + lt.quantidade_sus, + + ftp.tipo_leito_descr, + web.tipo_especialidade_leito_descr, + estabs.* + + from {{ source("brutos_cnes_ftp", "leito") }} as lt + left join leitos_mapping_cnesftp as ftp on safe_cast(lt.tipo_leito as int64) = ftp.tipo_leito + left join leitos_mapping_cnesweb as web on safe_cast(lt.tipo_especialidade_leito as int64) = safe_cast(web.tipo_especialidade_leito as int64) + left join estabelecimentos_mrj_sus as estabs on lt.ano = estabs.ano and lt.mes = estabs.mes and safe_cast(lt.id_estabelecimento_cnes as int64) = safe_cast(estabs.id_cnes as int64) + + where lt.ano >= 2008 and lt.id_estabelecimento_cnes in (select distinct id_cnes from estabelecimentos_mrj_sus) +), + +final as ( + SELECT + --------------------------------- ESTABELECIMENTOS + -- Identificação + ano, + mes, + id_cnes, + id_unidade, + nome_razao_social, + nome_fantasia, + nome_limpo, + nome_sigla, + nome_complemento, + cnpj_mantenedora, + + -- Responsabilização + esfera, + id_natureza_juridica, + natureza_juridica_descr, + tipo_gestao, + tipo_gestao_descr, + responsavel_sms, + administracao, + diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Atributos + tipo_turno, + turno_atendimento, + aberto_sempre, + + -- Tipagem dos Estabelecimentos (CNES) + id_tipo_unidade, + tipo, + + -- Tipagem dos Estabelecimentos (DIT) + tipo_sms, + tipo_sms_simplificado, + tipo_sms_agrupado, + + -- Tipagem dos Estabelecimentos (SUBGERAL) + tipo_unidade_alternativo, + tipo_unidade_agrupado, + + -- Localização + id_ap, + ap, + endereco_cep, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + + -- Status + ativa, + + -- Prontuário + prontuario_tem, + prontuario_versao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado, + + -- Informações de contato + telefone, + email, + facebook, + instagram, + twitter, + + -- Indicadores + estabelecimento_sms_indicador, + vinculo_sus_indicador, + atendimento_internacao_sus_indicador, + atendimento_ambulatorial_sus_indicador, + atendimento_sadt_sus_indicador, + atendimento_urgencia_sus_indicador, + atendimento_outros_sus_indicador, + atendimento_vigilancia_sus_indicador, + atendimento_regulacao_sus_indicador, + + -- Metadados + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot, + + --------------------------------- LEITOS + tipo_leito, + tipo_leito_descr, + tipo_especialidade_leito, + tipo_especialidade_leito_descr, + quantidade_total, + quantidade_contratado, + quantidade_sus + + FROM leitos_mrj_sus + WHERE id_cnes is not null + ORDER BY ano asc, mes asc, id_cnes asc, tipo_leito_descr asc, tipo_especialidade_leito_descr asc +) + +select * from final \ No newline at end of file diff --git a/models/raw/cnes_web/_cnes_schema.yml b/models/raw/cnes_web/_cnes_schema.yml index e4199d7d..aedf3a84 100644 --- a/models/raw/cnes_web/_cnes_schema.yml +++ b/models/raw/cnes_web/_cnes_schema.yml @@ -641,4 +641,37 @@ models: description: Esta coluna representa a data e hora em que o snapshot dos dados foi tirado. É útil para rastrear as alterações históricas nos dados ao longo do tempo. O tipo de dados dessa coluna é datetime. - data_type: datetime \ No newline at end of file + data_type: datetime + + - name: raw_cnes_web__leito + description: Relação de todos os tipos de leitos encontrados no CNES. + columns: + - name: id_leito_especialidade + description: Código de tipo específico de leito + - name: leito_especialidade + description: Descrição do tipo específico de leito + - name: id_leito_tipo + description: Código de tipo de leito + - name: mes_particao + description: Isso representa o mês da partição de dados. É usado para organizar + os dados por períodos de tempo para consultas e análises eficientes. O + valor está no formato de string. + - name: ano_particao + description: Esta coluna representa o ano da partição. É um valor de string que + corresponde ao ano em que os dados foram particionados. Essa + informação é crucial para entender o contexto temporal dos dados. + - name: data_particao + description: Esta coluna representa a data da partição. É um valor de string que + combina o ano e o mês da partição em uma única data (no formato + 'AAAA-MM-01'). Essa data é importante para entender quando os dados + foram particionados e pode ser usada para análise baseada em tempo. + - name: data_carga + description: Esta coluna representa a data e hora em que os dados foram + carregados no banco de dados. É um valor de data e hora que fornece + informações precisas sobre quando os dados foram disponibilizados no + banco de dados. Essas informações são úteis para rastrear atualizações + de dados e garantir a atualidade dos dados. + - name: data_snapshot + description: Esta coluna representa a data e hora em que o snapshot dos dados + foi tirado. É útil para rastrear as alterações históricas nos dados ao + longo do tempo. O tipo de dados dessa coluna é datetime. \ No newline at end of file diff --git a/models/raw/cnes_web/_cnes_sources.yml b/models/raw/cnes_web/_cnes_sources.yml index acfba671..3f5203c5 100644 --- a/models/raw/cnes_web/_cnes_sources.yml +++ b/models/raw/cnes_web/_cnes_sources.yml @@ -18,4 +18,5 @@ sources: - name: rlEstabEquipeProf - name: tbTipoEquipe - name: tbArea - - name: tbNaturezaJuridica \ No newline at end of file + - name: tbNaturezaJuridica + - name: tbLeito \ No newline at end of file diff --git a/models/raw/cnes_web/raw_cnes_web__leito.sql b/models/raw/cnes_web/raw_cnes_web__leito.sql new file mode 100644 index 00000000..25b7dc27 --- /dev/null +++ b/models/raw/cnes_web/raw_cnes_web__leito.sql @@ -0,0 +1,21 @@ +{{ + config( + alias="leito_tipo", + ) +}} + +with + source as ( + select * from {{ source("brutos_cnes_web_staging", "tbLeito") }} + ) + +select + safe_cast(CO_LEITO as int64) as id_leito_especialidade, + safe_cast(DS_LEITO as string) as leito_especialidade, + safe_cast(TP_LEITO as int64) as id_leito_tipo, + safe_cast(_data_carga as date format 'DD/MM/YYY') as data_carga, + safe_cast(_data_snapshot as date format 'DD/MM/YYY') as data_snapshot, + safe_cast(mes_particao as string) as mes_particao, + safe_cast(ano_particao as string) as ano_particao, + concat(ano_particao, '-', mes_particao, '-', '01') as data_particao, +from source \ No newline at end of file From bdc6b88cce5a0c604cd8b30540a4c848dcfb55b3 Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Mon, 23 Sep 2024 19:09:51 -0300 Subject: [PATCH 09/28] chore: re-organiza arquivos, corige nome de dataset materializado e corrige referencia de teste --- .../core/dimensions/_dimensions_schema.yml | 157 ++++++++++++++++- .../dim_estabelecimento_sus_rio_historico.sql | 6 +- .../saude_cnes/_mart_saude_cnes_schema.yml | 158 ------------------ .../saude_cnes/_mart_saude_cnes_sources.yml | 14 -- models/raw/sheets/_sheets_schema.yml | 2 +- 5 files changed, 160 insertions(+), 177 deletions(-) rename models/marts/{saude_cnes => core/dimensions}/dim_estabelecimento_sus_rio_historico.sql (98%) delete mode 100644 models/marts/saude_cnes/_mart_saude_cnes_schema.yml delete mode 100644 models/marts/saude_cnes/_mart_saude_cnes_sources.yml diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index 34c19841..50d71681 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -565,5 +565,160 @@ models: - name: grupo.comprimento description: Quantidade de caracteres do nome do grupo. data_type: int64 - + - 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." + diff --git a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql b/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql similarity index 98% rename from models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql rename to models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql index 85f88889..00b3a493 100644 --- a/models/marts/saude_cnes/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql @@ -1,9 +1,9 @@ {{ config( - schema="mart_saude_cnes__estabelecimento_sus_rio_historico", + schema="saude_cnes", alias="estabelecimento_sus_rio_historico", partition_by = { - 'field': 'data_carga', + 'field': 'data_particao', 'data_type': 'timestamp', 'granularity': 'day' } @@ -37,7 +37,7 @@ estabelecimentos_brutos AS ( indicador_atendimento_outros_sus as atendimento_outros_sus_indicador, indicador_atendimento_vigilancia_sus as atendimento_vigilancia_sus_indicador, indicador_atendimento_regulacao_sus as atendimento_regulacao_sus_indicador - FROM {{ source("brutos_cnes_ftp", "estabelecimento") }} + FROM {{ ref("raw_cnes_ftp__estabelecimento") }} WHERE sigla_uf = "RJ" AND id_municipio_6 = "330455" diff --git a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml b/models/marts/saude_cnes/_mart_saude_cnes_schema.yml deleted file mode 100644 index 883b0863..00000000 --- a/models/marts/saude_cnes/_mart_saude_cnes_schema.yml +++ /dev/null @@ -1,158 +0,0 @@ -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." diff --git a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml b/models/marts/saude_cnes/_mart_saude_cnes_sources.yml deleted file mode 100644 index c4be7835..00000000 --- a/models/marts/saude_cnes/_mart_saude_cnes_sources.yml +++ /dev/null @@ -1,14 +0,0 @@ -sources: - - - name: brutos_cnes_ftp - database: rj-sms - schema: brutos_cnes_ftp - tables: - - name: estabelecimento - - name: leito - - - name: brutos_cnes_web_staging - database: rj-sms - schema: brutos_cnes_web_staging - tables: - - name: tbLeito \ No newline at end of file diff --git a/models/raw/sheets/_sheets_schema.yml b/models/raw/sheets/_sheets_schema.yml index 1ef815cb..6ddde511 100644 --- a/models/raw/sheets/_sheets_schema.yml +++ b/models/raw/sheets/_sheets_schema.yml @@ -10,7 +10,7 @@ models: name: raw_sheets__estabelecimento_auxiliar__id_cnes__unique - relationships: name: raw_sheets__estabelecimento_auxiliar__id_cnes__relationship - to: ref('estabelecimento_sus_rio_historico') + to: ref('dim_estabelecimento_sus_rio_historico') field: id_cnes - name: indicador_estabelecimento_sms description: Indica se o estabelecimento é pertencente a rede assistencial da Secretaria Municipal de Saúde do Rio de Janeiro (1=SIM, 0=NAO) From c1e75ff92b95179211b54364d4925d659a6b7f40 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Wed, 25 Sep 2024 15:07:43 -0300 Subject: [PATCH 10/28] =?UTF-8?q?Corre=C3=A7=C3=A3o=20de=20bugs=20nos=20mo?= =?UTF-8?q?dels=20de=20estabelecimentos=20e=20leitos.=20Comentei=20um=20te?= =?UTF-8?q?ste=20no=20sheets=20por=20enquanto.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dimensions/_dimensions_schema.yml | 173 +++++++++++++++++- .../dim_estabelecimento_sus_rio_historico.sql | 8 +- .../dim_leito_sus_rio_historico.sql | 39 ++-- models/raw/sheets/_sheets_schema.yml | 9 +- 4 files changed, 200 insertions(+), 29 deletions(-) diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index 50d71681..e3f36ea3 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -565,7 +565,7 @@ models: - name: grupo.comprimento description: Quantidade de caracteres do nome do grupo. data_type: int64 - - name: estabelecimento_sus_rio_historico + - name: dim_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: @@ -721,4 +721,175 @@ models: - name: data_snapshot description: "Data em que o snapshot dos dados foi capturado." + - name: leito_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: + # --------------------------------- ESTABELECIMENTOS + # 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." + # --------------------------------- LEITOS + - name: tipo_leito + description: "Identificador do tipo de leito disponível." + - name: tipo_leito_descr + description: "Descrição do tipo de leito disponível." + - name: tipo_especialidade_leito + description: "Identificador da especialidade do leito." + - name: tipo_especialidade_leito_descr + description: "Descrição da especialidade do leito." + - name: quantidade_total + description: "Quantidade total de leitos disponíveis." + - name: quantidade_contratado + description: "Quantidade de leitos contratados." + - name: quantidade_sus + description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." \ No newline at end of file diff --git a/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql b/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql index 00b3a493..6621b9f5 100644 --- a/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql @@ -4,7 +4,7 @@ alias="estabelecimento_sus_rio_historico", partition_by = { 'field': 'data_particao', - 'data_type': 'timestamp', + 'data_type': 'date', 'granularity': 'day' } ) @@ -339,9 +339,9 @@ final as ( -- Metadados data_atualizao_registro, usuario_atualizador_registro, - mes_particao, - ano_particao, - data_particao, + safe_cast(mes_particao as int64) as mes_particao, + safe_cast(ano_particao as int64) as ano_particao, + parse_date('%Y-%m-%d', data_particao) as data_particao, data_carga, data_snapshot diff --git a/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql index e25bf9d7..ac422f33 100644 --- a/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql +++ b/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql @@ -1,17 +1,16 @@ {{ config( - schema="mart_saude_cnes__leito_rio_historico", + schema="saude_cnes", alias="leito_sus_rio_historico" ) }} with --- Obtendo a data mais atual -versao_atual AS ( - SELECT MAX(data_particao) AS versao - FROM {{ ref("raw_cnes_web__tipo_unidade") }} -), -- OBS: Não faz mais sentido pegar a versão de alguma outra tabela, sem ser tipo_unidade? +versao_atual as ( + select MAX(data_particao) as versao + from {{ ref("raw_cnes_web__tipo_unidade") }} +), leitos_mapping_cnesftp as ( select * from unnest([ @@ -33,22 +32,22 @@ leitos_mapping_cnesweb as ( ), estabelecimentos_mrj_sus as ( - select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where data_particao = (select versao from versao_atual) + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) ), leitos_mrj_sus as ( select - lt.tipo_leito, - lt.tipo_especialidade_leito, - lt.quantidade_total, - lt.quantidade_contratado, - lt.quantidade_sus, + lt.tipo_leito, + lt.tipo_especialidade_leito, + lt.quantidade_total, + lt.quantidade_contratado, + lt.quantidade_sus, - ftp.tipo_leito_descr, - web.tipo_especialidade_leito_descr, - estabs.* + ftp.tipo_leito_descr, + web.tipo_especialidade_leito_descr, + estabs.* - from {{ source("brutos_cnes_ftp", "leito") }} as lt + from {{ ref("raw_cnes_ftp__leito") }} as lt left join leitos_mapping_cnesftp as ftp on safe_cast(lt.tipo_leito as int64) = ftp.tipo_leito left join leitos_mapping_cnesweb as web on safe_cast(lt.tipo_especialidade_leito as int64) = safe_cast(web.tipo_especialidade_leito as int64) left join estabelecimentos_mrj_sus as estabs on lt.ano = estabs.ano and lt.mes = estabs.mes and safe_cast(lt.id_estabelecimento_cnes as int64) = safe_cast(estabs.id_cnes as int64) @@ -57,7 +56,7 @@ leitos_mrj_sus as ( ), final as ( - SELECT + select --------------------------------- ESTABELECIMENTOS -- Identificação ano, @@ -156,9 +155,9 @@ final as ( quantidade_contratado, quantidade_sus - FROM leitos_mrj_sus - WHERE id_cnes is not null - ORDER BY ano asc, mes asc, id_cnes asc, tipo_leito_descr asc, tipo_especialidade_leito_descr asc + from leitos_mrj_sus + where id_cnes is not null + order by ano asc, mes asc, id_cnes asc, tipo_leito_descr asc, tipo_especialidade_leito_descr asc ) select * from final \ No newline at end of file diff --git a/models/raw/sheets/_sheets_schema.yml b/models/raw/sheets/_sheets_schema.yml index 6ddde511..ea0a7eb6 100644 --- a/models/raw/sheets/_sheets_schema.yml +++ b/models/raw/sheets/_sheets_schema.yml @@ -8,10 +8,11 @@ models: data_tests: - unique: name: raw_sheets__estabelecimento_auxiliar__id_cnes__unique - - relationships: - name: raw_sheets__estabelecimento_auxiliar__id_cnes__relationship - to: ref('dim_estabelecimento_sus_rio_historico') - field: id_cnes +# comentando momentaneamente até finalizarmos a tabela auxiliar +# - relationships: +# name: raw_sheets__estabelecimento_auxiliar__id_cnes__relationship +# to: ref('dim_estabelecimento_sus_rio_historico') +# field: id_cnes - name: indicador_estabelecimento_sms description: Indica se o estabelecimento é pertencente a rede assistencial da Secretaria Municipal de Saúde do Rio de Janeiro (1=SIM, 0=NAO) - name: tipo_sms From 8fb9263ca8ac6bead0faf005c78766278a237f8a Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Wed, 25 Sep 2024 15:45:38 -0300 Subject: [PATCH 11/28] construcao do modelo de habilitacoes --- .../core/dimensions/_dimensions_schema.yml | 183 +++++++++++++++++- .../dim_habilitacao_sus_rio_historico.sql | 64 ++++++ models/raw/cnes_web/_cnes_sources.yml | 3 +- .../raw_cnes_web__tipo_habilitacao.sql | 22 +++ 4 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql create mode 100644 models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index e3f36ea3..735fc043 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -721,7 +721,7 @@ models: - name: data_snapshot description: "Data em que o snapshot dos dados foi capturado." - - name: leito_sus_rio_historico + - name: dim_leito_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: @@ -892,4 +892,183 @@ models: - name: quantidade_contratado description: "Quantidade de leitos contratados." - name: quantidade_sus - description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." \ No newline at end of file + description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." + + - name: dim_habilitacao_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: + # --------------------------------- ESTABELECIMENTOS + # 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." + + # --------------------------------- HABILITACOES + - name: id_habilitacao + description: "Identificador único da habilitação de um estabelecimento de saúde." + - name: nivel_habilitacao + description: "Nível de habilitação do estabelecimento de saúde." + - name: habilitacao_ativa_indicador + description: "Indicador se a habilitação está ativa (1) ou não (0)." + - name: habilitacao_ano_inicio + description: "Ano de início da habilitação." + - name: habilitacao_mes_inicio + description: "Mês de início da habilitação." + - name: habilitacao_ano_fim + description: "Ano de término da habilitação, se aplicável." + - name: habilitacao_mes_fim + description: "Mês de término da habilitação, se aplicável." + - name: habilitacao + description: "Descrição detalhada da habilitação." + - name: tipo_origem + description: "Tipo de origem da habilitação." + - name: tipo_habilitacao + description: "Tipo de habilitação." \ No newline at end of file diff --git a/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql new file mode 100644 index 00000000..9e713024 --- /dev/null +++ b/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql @@ -0,0 +1,64 @@ +{{ + config( + schema="saude_cnes", + alias="habilitacao_sus_rio_historico" + ) +}} + +with +versao_atual as ( + select MAX(data_particao) as versao + from {{ ref("raw_cnes_web__tipo_unidade") }} +), + +habilitacoes as ( + select + ano, + mes, + id_estabelecimento_cnes as id_cnes, + tipo_habilitacao as id_habilitacao, + nivel_habilitacao, + case + when ano_competencia_final = 9999 then 1 + else 0 + end as habilitacao_ativa_indicador, + ano_competencia_inicial as habilitacao_ano_inicio, + mes_competencia_inicial as habilitacao_mes_inicio, + case + when ano_competencia_final = 9999 then NULL + else ano_competencia_final + end as habilitacao_ano_fim, + case + when mes_competencia_final = 99 then NULL + else mes_competencia_final + end as habilitacao_mes_fim + from + {{ref("raw_cnes_ftp__habilitacao")}} +), + +habilitacoes_mapping_cnesweb as ( + select + id_habilitacao, + habilitacao, + tipo_origem, + tipo_habilitacao + + from {{ ref("raw_cnes_web__tipo_habilitacao") }} + where data_particao = (SELECT versao FROM versao_atual) +), + +estabelecimentos_mrj_sus as ( + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) +), + +final as ( + select + estabs.* except (ano, mes, id_cnes), + hab.*, + map.* except (id_habilitacao), + from habilitacoes as hab + left join habilitacoes_mapping_cnesweb as map on safe_cast(hab.id_habilitacao as int64) = safe_cast(map.id_habilitacao as int64) + left join estabelecimentos_mrj_sus as estabs on (hab.ano = estabs.ano and hab.mes = estabs.mes and safe_cast(hab.id_cnes as int64) = safe_cast(estabs.id_cnes as int64)) +) + +select * from final \ No newline at end of file diff --git a/models/raw/cnes_web/_cnes_sources.yml b/models/raw/cnes_web/_cnes_sources.yml index 3f5203c5..27d21b5d 100644 --- a/models/raw/cnes_web/_cnes_sources.yml +++ b/models/raw/cnes_web/_cnes_sources.yml @@ -19,4 +19,5 @@ sources: - name: tbTipoEquipe - name: tbArea - name: tbNaturezaJuridica - - name: tbLeito \ No newline at end of file + - name: tbLeito + - name: tbSubGruposHabilitacao \ No newline at end of file diff --git a/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql b/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql new file mode 100644 index 00000000..7f06a11a --- /dev/null +++ b/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql @@ -0,0 +1,22 @@ +{{ + config( + alias="tipo_habilitacao", + ) +}} + +with +source as ( + select * from {{ source("brutos_cnes_web_staging", "tbSubGruposHabilitacao") }} +) + +select + safe_cast(CO_CODIGO_GRUPO as int64) as id_habilitacao, + UPPER(NO_DESCRICAO_GRUPO) as habilitacao, + TP_ORIGEM as tipo_origem, + TP_HABILITACAO as tipo_habilitacao, + safe_cast(_data_carga as date format 'DD/MM/YYY') as data_carga, + safe_cast(_data_snapshot as date format 'DD/MM/YYY') as data_snapshot, + safe_cast(mes_particao as string) as mes_particao, + safe_cast(ano_particao as string) as ano_particao, + concat(ano_particao, '-', mes_particao, '-', '01') as data_particao, +from source \ No newline at end of file From 0005967bc93cd71c23b05993b6679ae1714e9d41 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Wed, 25 Sep 2024 15:53:29 -0300 Subject: [PATCH 12/28] =?UTF-8?q?corre=C3=A7=C3=A3o=20de=20regra=20de=20se?= =?UTF-8?q?lecao=20/=20filtragem=20nos=20modelos=20de=20leito=20e=20habili?= =?UTF-8?q?tacao?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dimensions/dim_habilitacao_sus_rio_historico.sql | 11 ++++++----- .../core/dimensions/dim_leito_sus_rio_historico.sql | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql index 9e713024..f3929823 100644 --- a/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql +++ b/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql @@ -9,7 +9,11 @@ with versao_atual as ( select MAX(data_particao) as versao from {{ ref("raw_cnes_web__tipo_unidade") }} -), +), + +estabelecimentos_mrj_sus as ( + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) +), habilitacoes as ( select @@ -34,6 +38,7 @@ habilitacoes as ( end as habilitacao_mes_fim from {{ref("raw_cnes_ftp__habilitacao")}} + where ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) ), habilitacoes_mapping_cnesweb as ( @@ -47,10 +52,6 @@ habilitacoes_mapping_cnesweb as ( where data_particao = (SELECT versao FROM versao_atual) ), -estabelecimentos_mrj_sus as ( - select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) -), - final as ( select estabs.* except (ano, mes, id_cnes), diff --git a/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql index ac422f33..fa8d0f20 100644 --- a/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql +++ b/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql @@ -52,7 +52,7 @@ leitos_mrj_sus as ( left join leitos_mapping_cnesweb as web on safe_cast(lt.tipo_especialidade_leito as int64) = safe_cast(web.tipo_especialidade_leito as int64) left join estabelecimentos_mrj_sus as estabs on lt.ano = estabs.ano and lt.mes = estabs.mes and safe_cast(lt.id_estabelecimento_cnes as int64) = safe_cast(estabs.id_cnes as int64) - where lt.ano >= 2008 and lt.id_estabelecimento_cnes in (select distinct id_cnes from estabelecimentos_mrj_sus) + where lt.ano >= 2008 and safe_cast(lt.id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) ), final as ( From ea951a25988574c4c8d0007f3303e260b783e004 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Wed, 25 Sep 2024 17:23:06 -0300 Subject: [PATCH 13/28] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20modelo=20de=20eq?= =?UTF-8?q?uipamento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dimensions/_dimensions_schema.yml | 173 +++++++++++++++++- .../marts/core/dimensions/dim_equipamento.sql | 62 +++++++ models/raw/cnes_web/_cnes_sources.yml | 4 +- .../raw_cnes_web__tipo_equipamento.sql | 15 ++ ..._cnes_web__tipo_equipamento_especifico.sql | 16 ++ 5 files changed, 268 insertions(+), 2 deletions(-) create mode 100644 models/marts/core/dimensions/dim_equipamento.sql create mode 100644 models/raw/cnes_web/raw_cnes_web__tipo_equipamento.sql create mode 100644 models/raw/cnes_web/raw_cnes_web__tipo_equipamento_especifico.sql diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index 735fc043..71561cec 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -1071,4 +1071,175 @@ models: - name: tipo_origem description: "Tipo de origem da habilitação." - name: tipo_habilitacao - description: "Tipo de habilitação." \ No newline at end of file + description: "Tipo de habilitação." + + - name: dim_habilitacao_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: + # --------------------------------- ESTABELECIMENTOS + # 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." + + # --------------------------------- EQUIPAMENTOS + - name: equipamento_tipo + description: "Tipo geral do equipamento." + - name: equipamento_especifico_tipo + description: "Tipo específico do equipamento." + - name: equipamentos_quantidade + description: "Quantidade total de equipamentos do tipo especificado." + - name: equipamentos_quantidade_ativos + description: "Quantidade de equipamentos ativos do tipo especificado." + - name: equipamento + description: "Descrição geral do equipamento." + - name: equipamento_especifico + description: "Descrição específica do equipamento." diff --git a/models/marts/core/dimensions/dim_equipamento.sql b/models/marts/core/dimensions/dim_equipamento.sql new file mode 100644 index 00000000..c1fd992d --- /dev/null +++ b/models/marts/core/dimensions/dim_equipamento.sql @@ -0,0 +1,62 @@ +{{ + config( + schema="saude_cnes", + alias="equipamento_sus_rio_historico" + ) +}} + +with +versao_atual as ( + select MAX(data_particao) as versao + from {{ ref("raw_cnes_web__tipo_unidade") }} +), + +estabelecimentos_mrj_sus as ( + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) +), + +equip as ( + select + ano, + mes, + lpad(id_estabelecimento_cnes, 7, '0') as id_cnes, + safe_cast(tipo_equipamento as int64) as equipamento_tipo, + safe_cast(id_equipamento as int64) as equipamento_especifico_tipo, + safe_cast(quantidade_equipamentos as int64) as equipamentos_quantidade, + safe_cast(quantidade_equipamentos_ativos as int64) as equipamentos_quantidade_ativos, + + from {{ ref("raw_cnes_ftp__equipamento") }} + where indicador_equipamento_disponivel_sus = 1 and ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) +), + +equip_mapping_geral as ( + select + equipamento_tipo, + equipamento + from {{ref ("raw_cnes_web__tipo_equipamento") }} + where data_particao = (SELECT versao FROM versao_atual) +), + +equip_mapping_especifico as ( + select + equipamento_especifico_tipo, + equipamento_tipo, + equipamento_especifico + from {{ref ("raw_cnes_web__tipo_equipamento_especifico") }} + where data_particao = (SELECT versao FROM versao_atual) +), + +final as ( + select + estabs.* except(id_cnes, ano, mes), + equip.*, + map_geral.* except(equipamento_tipo), + map_espec.* except(equipamento_tipo, equipamento_especifico_tipo) + + from equip + left join estabelecimentos_mrj_sus as estabs using (id_cnes, ano, mes) + left join equip_mapping_geral as map_geral using (equipamento_tipo) + left join equip_mapping_especifico as map_espec using (equipamento_tipo, equipamento_especifico_tipo) +) + +select * from final \ No newline at end of file diff --git a/models/raw/cnes_web/_cnes_sources.yml b/models/raw/cnes_web/_cnes_sources.yml index 27d21b5d..86acb4fa 100644 --- a/models/raw/cnes_web/_cnes_sources.yml +++ b/models/raw/cnes_web/_cnes_sources.yml @@ -20,4 +20,6 @@ sources: - name: tbArea - name: tbNaturezaJuridica - name: tbLeito - - name: tbSubGruposHabilitacao \ No newline at end of file + - name: tbSubGruposHabilitacao + - name: tbTipoEquipamento + - name: tbEquipamento \ No newline at end of file diff --git a/models/raw/cnes_web/raw_cnes_web__tipo_equipamento.sql b/models/raw/cnes_web/raw_cnes_web__tipo_equipamento.sql new file mode 100644 index 00000000..288741fe --- /dev/null +++ b/models/raw/cnes_web/raw_cnes_web__tipo_equipamento.sql @@ -0,0 +1,15 @@ + {{ config(alias="tipo_equipamento") }} + +with +source as (select * from {{ source("brutos_cnes_web_staging", "tbTipoEquipamento") }}) + +select + safe_cast(CO_TIPO_EQUIPAMENTO as int64) as equipamento_tipo, + upper(DS_TIPO_EQUIPAMENTO) as equipamento, + safe_cast(_data_carga as date format 'DD/MM/YYY') as data_carga, + safe_cast(_data_snapshot as date format 'DD/MM/YYY') as data_snapshot, + safe_cast(mes_particao as string) as mes_particao, + safe_cast(ano_particao as string) as ano_particao, + concat(ano_particao, '-', mes_particao, '-', '01') as data_particao + +from source \ No newline at end of file diff --git a/models/raw/cnes_web/raw_cnes_web__tipo_equipamento_especifico.sql b/models/raw/cnes_web/raw_cnes_web__tipo_equipamento_especifico.sql new file mode 100644 index 00000000..bdf37a70 --- /dev/null +++ b/models/raw/cnes_web/raw_cnes_web__tipo_equipamento_especifico.sql @@ -0,0 +1,16 @@ + {{ config(alias="tipo_equipamento_especifico") }} + +with +source as (select * from {{ source("brutos_cnes_web_staging", "tbEquipamento") }}) + +select + safe_cast(CO_EQUIPAMENTO as int64) as equipamento_especifico_tipo, + safe_cast(CO_TIPO_EQUIPAMENTO as int64) as equipamento_tipo, + upper(DS_EQUIPAMENTO) as equipamento_especifico, + safe_cast(_data_carga as date format 'DD/MM/YYY') as data_carga, + safe_cast(_data_snapshot as date format 'DD/MM/YYY') as data_snapshot, + safe_cast(mes_particao as string) as mes_particao, + safe_cast(ano_particao as string) as ano_particao, + concat(ano_particao, '-', mes_particao, '-', '01') as data_particao + +from source \ No newline at end of file From 41463d07daa4aa0ae394c092946532a98c1ffb4a Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Thu, 26 Sep 2024 14:34:24 -0300 Subject: [PATCH 14/28] refactor: folder structure --- .../core/dimensions/_dimensions_schema.yml | 680 +----------------- .../dimensions/rio/_dimensions_rio_schema.yml | 172 +++++ .../dim_estabelecimento_sus_rio_historico.sql | 0 3 files changed, 173 insertions(+), 679 deletions(-) create mode 100644 models/marts/core/dimensions/rio/_dimensions_rio_schema.yml rename models/marts/core/dimensions/{ => rio}/dim_estabelecimento_sus_rio_historico.sql (100%) diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index 71561cec..bc955fa4 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -564,682 +564,4 @@ models: description: Descrição abreviada do nome do grupo do CID. Um CID pode pertencer a mais de um grupo. - name: grupo.comprimento description: Quantidade de caracteres do nome do grupo. - data_type: int64 - - name: dim_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." - - - name: dim_leito_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: - # --------------------------------- ESTABELECIMENTOS - # 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." - - # --------------------------------- LEITOS - - name: tipo_leito - description: "Identificador do tipo de leito disponível." - - name: tipo_leito_descr - description: "Descrição do tipo de leito disponível." - - name: tipo_especialidade_leito - description: "Identificador da especialidade do leito." - - name: tipo_especialidade_leito_descr - description: "Descrição da especialidade do leito." - - name: quantidade_total - description: "Quantidade total de leitos disponíveis." - - name: quantidade_contratado - description: "Quantidade de leitos contratados." - - name: quantidade_sus - description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." - - - name: dim_habilitacao_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: - # --------------------------------- ESTABELECIMENTOS - # 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." - - # --------------------------------- HABILITACOES - - name: id_habilitacao - description: "Identificador único da habilitação de um estabelecimento de saúde." - - name: nivel_habilitacao - description: "Nível de habilitação do estabelecimento de saúde." - - name: habilitacao_ativa_indicador - description: "Indicador se a habilitação está ativa (1) ou não (0)." - - name: habilitacao_ano_inicio - description: "Ano de início da habilitação." - - name: habilitacao_mes_inicio - description: "Mês de início da habilitação." - - name: habilitacao_ano_fim - description: "Ano de término da habilitação, se aplicável." - - name: habilitacao_mes_fim - description: "Mês de término da habilitação, se aplicável." - - name: habilitacao - description: "Descrição detalhada da habilitação." - - name: tipo_origem - description: "Tipo de origem da habilitação." - - name: tipo_habilitacao - description: "Tipo de habilitação." - - - name: dim_habilitacao_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: - # --------------------------------- ESTABELECIMENTOS - # 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." - - # --------------------------------- EQUIPAMENTOS - - name: equipamento_tipo - description: "Tipo geral do equipamento." - - name: equipamento_especifico_tipo - description: "Tipo específico do equipamento." - - name: equipamentos_quantidade - description: "Quantidade total de equipamentos do tipo especificado." - - name: equipamentos_quantidade_ativos - description: "Quantidade de equipamentos ativos do tipo especificado." - - name: equipamento - description: "Descrição geral do equipamento." - - name: equipamento_especifico - description: "Descrição específica do equipamento." + data_type: int64 \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml new file mode 100644 index 00000000..7bc230ee --- /dev/null +++ b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml @@ -0,0 +1,172 @@ +version: 2 +models: + - name: dim_habilitacao_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: + # --------------------------------- ESTABELECIMENTOS + # 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." + + # --------------------------------- EQUIPAMENTOS + - name: equipamento_tipo + description: "Tipo geral do equipamento." + - name: equipamento_especifico_tipo + description: "Tipo específico do equipamento." + - name: equipamentos_quantidade + description: "Quantidade total de equipamentos do tipo especificado." + - name: equipamentos_quantidade_ativos + description: "Quantidade de equipamentos ativos do tipo especificado." + - name: equipamento + description: "Descrição geral do equipamento." + - name: equipamento_especifico + description: "Descrição específica do equipamento." diff --git a/models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql similarity index 100% rename from models/marts/core/dimensions/dim_estabelecimento_sus_rio_historico.sql rename to models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql From 8b13f63f953f2a1f3595a76e65256ba94f794b05 Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Thu, 26 Sep 2024 14:59:16 -0300 Subject: [PATCH 15/28] refactor: folder structure --- .../dimensions/{ => rio}/dim_habilitacao_sus_rio_historico.sql | 0 .../core/dimensions/{ => rio}/dim_leito_sus_rio_historico.sql | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename models/marts/core/dimensions/{ => rio}/dim_habilitacao_sus_rio_historico.sql (100%) rename models/marts/core/dimensions/{ => rio}/dim_leito_sus_rio_historico.sql (100%) diff --git a/models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql similarity index 100% rename from models/marts/core/dimensions/dim_habilitacao_sus_rio_historico.sql rename to models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql diff --git a/models/marts/core/dimensions/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql similarity index 100% rename from models/marts/core/dimensions/dim_leito_sus_rio_historico.sql rename to models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql From 2f8f6289e42a7176e189a3265ae72ca15a5e0543 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Thu, 26 Sep 2024 16:50:23 -0300 Subject: [PATCH 16/28] =?UTF-8?q?Cria=C3=A7=C3=A3o=20do=20modelo=20de=20pr?= =?UTF-8?q?ofissionais=20e=20corre=C3=A7=C3=A3o=20de=20um=20type=20no=20sc?= =?UTF-8?q?hema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dimensions/_dimensions_schema.yml | 2 +- .../dim_profissional_sus_rio_historico.sql | 212 ++++++++++++++++++ 2 files changed, 213 insertions(+), 1 deletion(-) create mode 100644 models/marts/core/dimensions/dim_profissional_sus_rio_historico.sql diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index 71561cec..0ac7a626 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -1073,7 +1073,7 @@ models: - name: tipo_habilitacao description: "Tipo de habilitação." - - name: dim_habilitacao_sus_rio_historico + - name: dim_equipamento_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: diff --git a/models/marts/core/dimensions/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/dim_profissional_sus_rio_historico.sql new file mode 100644 index 00000000..f0248dc4 --- /dev/null +++ b/models/marts/core/dimensions/dim_profissional_sus_rio_historico.sql @@ -0,0 +1,212 @@ +{{ + config( + schema="saude_cnes", + alias="profissional_sus_rio_historico", + materialized="table", + tags=["weekly"], + ) +}} + +with +versao_atual as ( + select MAX(data_particao) as versao + from {{ ref("raw_cnes_web__tipo_unidade") }} +), + +estabelecimentos_mrj_sus as ( + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) +), + +profissionais_mrj as ( +select + ano, + mes, + concat(ano, '-', lpad(cast(mes as string), 2, '0')) data_registro, + id_estabelecimento_cnes, + sigla_uf, + cartao_nacional_saude as profissional_cns, + nome as profissional_nome, + cbo_2002 as id_cbo, + substring(tipo_vinculo, 1, 4) as id_tipo_vinculo, + substring(tipo_vinculo, 1, 2) as id_vinculacao, + left(cbo_2002, 4) as id_cbo_familia, + id_registro_conselho, + tipo_conselho as id_tipo_conselho, + carga_horaria_outros, + carga_horaria_hospitalar, + carga_horaria_ambulatorial, + carga_horaria_outros + carga_horaria_hospitalar + carga_horaria_ambulatorial as carga_horaria_total + +from {{ ref("raw_cnes_ftp__profissional") }} + +where + ano >= 2008 + and sigla_uf = "RJ" + and ( + indicador_atende_sus = 1 + or indicador_vinculo_contratado_sus = 1 + or indicador_vinculo_autonomo_sus = 1 + ) + and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) +), + +/* --- GERANDO CARDINALIDADE: +profissionais_cnesweb as ( + select + distinct cns, + id_codigo_sus, + nome, + data_atualizacao, + row_number() over (partition by nome, id_codigo_sus, cns order by data_atualizacao desc) as ordenacao + from {{ ref("raw_cnes_web__dados_profissional_sus") }} + WHERE data_particao = (SELECT versao FROM versao_atual) and cns != "" +), +*/ + +cbo as (select * from {{ ref("raw_datasus__cbo") }}), +cbo_fam as (select * from {{ ref("raw_datasus__cbo_fam") }}), + +tipo_vinculo as ( + select + concat(id_vinculacao, tipo) as codigo_tipo_vinculo, + descricao, + from {{ ref("raw_cnes_web__tipo_vinculo") }} + WHERE data_particao = (SELECT versao FROM versao_atual) +), + +vinculo as ( + select + id_vinculacao, + descricao, + from {{ ref("raw_cnes_web__vinculo") }} + WHERE data_particao = (SELECT versao FROM versao_atual) +), + +profissional_dados_hci as (select distinct cns, cpf, dados, endereco from {{ ref("mart_historico_clinico__paciente") }}), + +final AS ( + SELECT + STRUCT( + estabs.data_atualizao_registro, + estabs.usuario_atualizador_registro, + estabs.mes_particao, + estabs.ano_particao, + estabs.data_particao, + estabs.data_carga, + estabs.data_snapshot + ) AS metadados, + + STRUCT( + -- Identificação + estabs.ano, + estabs.mes, + estabs.id_cnes, + estabs.id_unidade, + estabs.nome_razao_social, + estabs.nome_fantasia, + estabs.nome_limpo, + estabs.nome_sigla, + estabs.nome_complemento, + estabs.cnpj_mantenedora, + + -- Responsabilização + estabs.esfera, + estabs.id_natureza_juridica, + estabs.natureza_juridica_descr, + estabs.tipo_gestao, + estabs.tipo_gestao_descr, + estabs.responsavel_sms, + estabs.administracao, + estabs.diretor_clinico_cpf, + estabs.diretor_clinico_conselho, + + -- Atributos + estabs.tipo_turno, + estabs.turno_atendimento, + estabs.aberto_sempre, + + -- Tipagem dos Estabelecimentos (CNES) + estabs.id_tipo_unidade, + estabs.tipo, + + -- Tipagem dos Estabelecimentos (DIT) + estabs.tipo_sms, + estabs.tipo_sms_simplificado, + estabs.tipo_sms_agrupado, + + -- Tipagem dos Estabelecimentos (SUBGERAL) + estabs.tipo_unidade_alternativo, + estabs.tipo_unidade_agrupado, + + -- Localização + estabs.id_ap, + estabs.ap, + estabs.endereco_cep, + estabs.endereco_bairro, + estabs.endereco_logradouro, + estabs.endereco_numero, + estabs.endereco_complemento, + estabs.endereco_latitude, + estabs.endereco_longitude, + + -- Status + estabs.ativa, + + -- Prontuário + estabs.prontuario_tem, + estabs.prontuario_versao, + estabs.prontuario_estoque_tem_dado, + estabs.prontuario_estoque_motivo_sem_dado, + + -- Informações de contato + estabs.telefone, + estabs.email, + estabs.facebook, + estabs.instagram, + estabs.twitter, + + -- Indicadores + estabs.estabelecimento_sms_indicador, + estabs.vinculo_sus_indicador, + estabs.atendimento_internacao_sus_indicador, + estabs.atendimento_ambulatorial_sus_indicador, + estabs.atendimento_sadt_sus_indicador, + estabs.atendimento_urgencia_sus_indicador, + estabs.atendimento_outros_sus_indicador, + estabs.atendimento_vigilancia_sus_indicador, + estabs.atendimento_regulacao_sus_indicador + ) AS estabelecimentos, + + STRUCT( + --cod_sus.id_codigo_sus as profissional_codigo_sus, + p.data_registro, + hci.cpf, + p.profissional_cns, + p.profissional_nome, + vinculacao.descricao AS vinculacao, + tipo_vinculo.descricao AS vinculo_tipo, + p.id_cbo, + ocup.descricao AS cbo, + p.id_cbo_familia, + ocupf.descricao AS cbo_familia, + p.id_registro_conselho, + p.id_tipo_conselho, + hci.dados, + hci.endereco, + p.carga_horaria_outros, + p.carga_horaria_hospitalar, + p.carga_horaria_ambulatorial, + p.carga_horaria_total + ) AS profissionais + + FROM profissionais_mrj AS p + LEFT JOIN profissional_dados_hci AS hci ON SAFE_CAST(p.profissional_cns AS INT64) = (SELECT SAFE_CAST(cns AS INT64) FROM UNNEST(hci.cns) AS cns LIMIT 1) + LEFT JOIN estabelecimentos_mrj_sus AS estabs ON p.ano = estabs.ano AND p.mes = estabs.mes AND SAFE_CAST(p.id_estabelecimento_cnes AS INT64) = SAFE_CAST(estabs.id_cnes AS INT64) + LEFT JOIN cbo AS ocup ON p.id_cbo = ocup.id_cbo + LEFT JOIN cbo_fam AS ocupf ON LEFT(p.id_cbo_familia, 4) = ocupf.id_cbo_familia + LEFT JOIN tipo_vinculo ON p.id_tipo_vinculo = tipo_vinculo.codigo_tipo_vinculo + LEFT JOIN vinculo AS vinculacao ON p.id_vinculacao = vinculacao.id_vinculacao + --left join (select * from profissionais_cnesweb where ordenacao = 1) as cod_sus on p.profissional_cns = cod_sus.cns +) + +select * from final \ No newline at end of file From d17371ea0ab91fe1e47686e964d4b1feb740e1f8 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Thu, 26 Sep 2024 16:55:52 -0300 Subject: [PATCH 17/28] Modelo de profissionais --- .../dimensions/{ => rio}/dim_profissional_sus_rio_historico.sql | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename models/marts/core/dimensions/{ => rio}/dim_profissional_sus_rio_historico.sql (100%) diff --git a/models/marts/core/dimensions/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql similarity index 100% rename from models/marts/core/dimensions/dim_profissional_sus_rio_historico.sql rename to models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql From 5170a5009363d17ca4aeecce5e1e15f977b89f75 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Thu, 26 Sep 2024 18:02:28 -0300 Subject: [PATCH 18/28] =?UTF-8?q?mudan=C3=A7a=20no=20schema?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dimensions/_dimensions_schema.yml | 680 +----------------- .../dimensions/rio/_dimensions_rio_schema.yml | 508 +++++++++++++ 2 files changed, 509 insertions(+), 679 deletions(-) diff --git a/models/marts/core/dimensions/_dimensions_schema.yml b/models/marts/core/dimensions/_dimensions_schema.yml index 71561cec..bc955fa4 100644 --- a/models/marts/core/dimensions/_dimensions_schema.yml +++ b/models/marts/core/dimensions/_dimensions_schema.yml @@ -564,682 +564,4 @@ models: description: Descrição abreviada do nome do grupo do CID. Um CID pode pertencer a mais de um grupo. - name: grupo.comprimento description: Quantidade de caracteres do nome do grupo. - data_type: int64 - - name: dim_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." - - - name: dim_leito_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: - # --------------------------------- ESTABELECIMENTOS - # 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." - - # --------------------------------- LEITOS - - name: tipo_leito - description: "Identificador do tipo de leito disponível." - - name: tipo_leito_descr - description: "Descrição do tipo de leito disponível." - - name: tipo_especialidade_leito - description: "Identificador da especialidade do leito." - - name: tipo_especialidade_leito_descr - description: "Descrição da especialidade do leito." - - name: quantidade_total - description: "Quantidade total de leitos disponíveis." - - name: quantidade_contratado - description: "Quantidade de leitos contratados." - - name: quantidade_sus - description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." - - - name: dim_habilitacao_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: - # --------------------------------- ESTABELECIMENTOS - # 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." - - # --------------------------------- HABILITACOES - - name: id_habilitacao - description: "Identificador único da habilitação de um estabelecimento de saúde." - - name: nivel_habilitacao - description: "Nível de habilitação do estabelecimento de saúde." - - name: habilitacao_ativa_indicador - description: "Indicador se a habilitação está ativa (1) ou não (0)." - - name: habilitacao_ano_inicio - description: "Ano de início da habilitação." - - name: habilitacao_mes_inicio - description: "Mês de início da habilitação." - - name: habilitacao_ano_fim - description: "Ano de término da habilitação, se aplicável." - - name: habilitacao_mes_fim - description: "Mês de término da habilitação, se aplicável." - - name: habilitacao - description: "Descrição detalhada da habilitação." - - name: tipo_origem - description: "Tipo de origem da habilitação." - - name: tipo_habilitacao - description: "Tipo de habilitação." - - - name: dim_habilitacao_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: - # --------------------------------- ESTABELECIMENTOS - # 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." - - # --------------------------------- EQUIPAMENTOS - - name: equipamento_tipo - description: "Tipo geral do equipamento." - - name: equipamento_especifico_tipo - description: "Tipo específico do equipamento." - - name: equipamentos_quantidade - description: "Quantidade total de equipamentos do tipo especificado." - - name: equipamentos_quantidade_ativos - description: "Quantidade de equipamentos ativos do tipo especificado." - - name: equipamento - description: "Descrição geral do equipamento." - - name: equipamento_especifico - description: "Descrição específica do equipamento." + data_type: int64 \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml index 7bc230ee..85c1a9d0 100644 --- a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml +++ b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml @@ -1,5 +1,334 @@ version: 2 models: + - name: dim_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." + + - name: dim_leito_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: + # --------------------------------- ESTABELECIMENTOS + # 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." + + # --------------------------------- LEITOS + - name: tipo_leito + description: "Identificador do tipo de leito disponível." + - name: tipo_leito_descr + description: "Descrição do tipo de leito disponível." + - name: tipo_especialidade_leito + description: "Identificador da especialidade do leito." + - name: tipo_especialidade_leito_descr + description: "Descrição da especialidade do leito." + - name: quantidade_total + description: "Quantidade total de leitos disponíveis." + - name: quantidade_contratado + description: "Quantidade de leitos contratados." + - name: quantidade_sus + description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." + - name: dim_habilitacao_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. @@ -157,6 +486,185 @@ models: - name: data_snapshot description: "Data em que o snapshot dos dados foi capturado." + # --------------------------------- HABILITACOES + - name: id_habilitacao + description: "Identificador único da habilitação de um estabelecimento de saúde." + - name: nivel_habilitacao + description: "Nível de habilitação do estabelecimento de saúde." + - name: habilitacao_ativa_indicador + description: "Indicador se a habilitação está ativa (1) ou não (0)." + - name: habilitacao_ano_inicio + description: "Ano de início da habilitação." + - name: habilitacao_mes_inicio + description: "Mês de início da habilitação." + - name: habilitacao_ano_fim + description: "Ano de término da habilitação, se aplicável." + - name: habilitacao_mes_fim + description: "Mês de término da habilitação, se aplicável." + - name: habilitacao + description: "Descrição detalhada da habilitação." + - name: tipo_origem + description: "Tipo de origem da habilitação." + - name: tipo_habilitacao + description: "Tipo de habilitação." + + - name: dim_equipamento_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: + # --------------------------------- ESTABELECIMENTOS + # 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." + # --------------------------------- EQUIPAMENTOS - name: equipamento_tipo description: "Tipo geral do equipamento." From 8c3271677efa2438d2bda0a150cb5bab83919145 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Thu, 26 Sep 2024 19:19:36 -0300 Subject: [PATCH 19/28] corrigindo tipagem --- models/marts/core/dimensions/dim_estabelecimento.sql | 8 ++++---- .../dimensions/rio/dim_profissional_sus_rio_historico.sql | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/models/marts/core/dimensions/dim_estabelecimento.sql b/models/marts/core/dimensions/dim_estabelecimento.sql index b7e1ec9e..065c62c7 100644 --- a/models/marts/core/dimensions/dim_estabelecimento.sql +++ b/models/marts/core/dimensions/dim_estabelecimento.sql @@ -24,8 +24,8 @@ final as ( -- foreign keys id_cnes, - id_tipo_unidade, - id_ap as area_programatica, + safe_cast(id_tipo_unidade as string) as id_tipo_unidade, + safe_cast(id_ap as string) as area_programatica, cnpj_mantenedora, -- common fields @@ -64,8 +64,8 @@ final as ( -- metadata data_atualizao_registro, usuario_atualizador_registro, - mes_particao, - ano_particao, + safe_cast(mes_particao as string) as mes_particao, + safe_cast(ano_particao as string) as ano_particao, data_particao, data_carga, data_snapshot diff --git a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql index f0248dc4..467a2ceb 100644 --- a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql @@ -191,8 +191,8 @@ final AS ( ocupf.descricao AS cbo_familia, p.id_registro_conselho, p.id_tipo_conselho, - hci.dados, - hci.endereco, + hci.dados as profissional_dados_hci, + hci.endereco as endereco_profissional_hci, p.carga_horaria_outros, p.carga_horaria_hospitalar, p.carga_horaria_ambulatorial, From 7013a6ecfaf714e438cc72f4fb9807cba6dd8b2c Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Fri, 27 Sep 2024 16:37:52 -0300 Subject: [PATCH 20/28] =?UTF-8?q?corre=C3=A7=C3=A3o=20de=20queries=20que?= =?UTF-8?q?=20estavam=20gerando=20cardinalidade;=20cria=C3=A7=C3=A3o=20de?= =?UTF-8?q?=20structs;=20movimenta=C3=A7=C3=A3o=20do=20modelo=20hist=C3=B3?= =?UTF-8?q?rico=20de=20equipamentos;=20corre=C3=A7=C3=A3o=20de=20schema.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../marts/core/dimensions/dim_equipamento.sql | 62 ------ .../dimensions/rio/_dimensions_rio_schema.yml | 201 ++++++++++++++++- .../rio/dim_equipamento_sus_rio_historico.sql | 157 ++++++++++++++ .../rio/dim_habilitacao_sus_rio_historico.sql | 135 +++++++++++- .../rio/dim_leito_sus_rio_historico.sql | 202 +++++++++--------- .../dim_profissional_sus_rio_historico.sql | 1 + .../raw_cnes_web__dados_profissional_sus.sql | 2 + .../raw_cnes_web__tipo_habilitacao.sql | 2 + 8 files changed, 591 insertions(+), 171 deletions(-) delete mode 100644 models/marts/core/dimensions/dim_equipamento.sql create mode 100644 models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql diff --git a/models/marts/core/dimensions/dim_equipamento.sql b/models/marts/core/dimensions/dim_equipamento.sql deleted file mode 100644 index c1fd992d..00000000 --- a/models/marts/core/dimensions/dim_equipamento.sql +++ /dev/null @@ -1,62 +0,0 @@ -{{ - config( - schema="saude_cnes", - alias="equipamento_sus_rio_historico" - ) -}} - -with -versao_atual as ( - select MAX(data_particao) as versao - from {{ ref("raw_cnes_web__tipo_unidade") }} -), - -estabelecimentos_mrj_sus as ( - select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) -), - -equip as ( - select - ano, - mes, - lpad(id_estabelecimento_cnes, 7, '0') as id_cnes, - safe_cast(tipo_equipamento as int64) as equipamento_tipo, - safe_cast(id_equipamento as int64) as equipamento_especifico_tipo, - safe_cast(quantidade_equipamentos as int64) as equipamentos_quantidade, - safe_cast(quantidade_equipamentos_ativos as int64) as equipamentos_quantidade_ativos, - - from {{ ref("raw_cnes_ftp__equipamento") }} - where indicador_equipamento_disponivel_sus = 1 and ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) -), - -equip_mapping_geral as ( - select - equipamento_tipo, - equipamento - from {{ref ("raw_cnes_web__tipo_equipamento") }} - where data_particao = (SELECT versao FROM versao_atual) -), - -equip_mapping_especifico as ( - select - equipamento_especifico_tipo, - equipamento_tipo, - equipamento_especifico - from {{ref ("raw_cnes_web__tipo_equipamento_especifico") }} - where data_particao = (SELECT versao FROM versao_atual) -), - -final as ( - select - estabs.* except(id_cnes, ano, mes), - equip.*, - map_geral.* except(equipamento_tipo), - map_espec.* except(equipamento_tipo, equipamento_especifico_tipo) - - from equip - left join estabelecimentos_mrj_sus as estabs using (id_cnes, ano, mes) - left join equip_mapping_geral as map_geral using (equipamento_tipo) - left join equip_mapping_especifico as map_espec using (equipamento_tipo, equipamento_especifico_tipo) -) - -select * from final \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml index 85c1a9d0..bf96f8fc 100644 --- a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml +++ b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml @@ -157,7 +157,7 @@ models: description: "Data em que o snapshot dos dados foi capturado." - name: dim_leito_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. + description: Esta tabela contém dados sobre os leitos de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. columns: # --------------------------------- ESTABELECIMENTOS @@ -330,7 +330,7 @@ models: description: "Quantidade de leitos disponíveis pelo Sistema Único de Saúde (SUS)." - name: dim_habilitacao_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. + description: Esta tabela contém dados sobre as habilitações de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. columns: # --------------------------------- ESTABELECIMENTOS @@ -509,7 +509,7 @@ models: description: "Tipo de habilitação." - name: dim_equipamento_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. + description: Esta tabela contém dados sobre os equipamentos de todos os estabelecimentos de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. columns: # --------------------------------- ESTABELECIMENTOS @@ -678,3 +678,198 @@ models: description: "Descrição geral do equipamento." - name: equipamento_especifico description: "Descrição específica do equipamento." + + - name: dim_profissional_sus_rio_historico + description: Esta tabela contém dados sobre todos os profissionais de saúde do Município do Rio de Janeiro que possuem algum tipo de vínculo com o SUS. + + columns: + # --------------------------------- ESTABELECIMENTOS + # 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." + + # --------------------------- PROFISSIONAIS + - name: data_registro + description: "Data do registro" + - name: cpf + description: "CPF do profissional." + - name: profissional_cns + description: "Número do CNS (Cartão Nacional de Saúde) do profissional." + - name: profissional_nome + description: "Nome completo do profissional." + - name: vinculacao + description: "Descrição da vinculação do profissional." + - name: vinculo_tipo + description: "Tipo de vínculo do profissional." + - name: id_cbo + description: "Código Brasileiro de Ocupações (CBO) do profissional." + - name: cbo + description: "Descrição do Código Brasileiro de Ocupações (CBO) do profissional." + - name: id_cbo_familia + description: "Código da família CBO do profissional." + - name: cbo_familia + description: "Descrição da família do Código Brasileiro de Ocupações (CBO) do profissional." + - name: id_registro_conselho + description: "Identificador de registro no conselho profissional." + - name: id_tipo_conselho + description: "Tipo de conselho do profissional." + - name: profissional_dados_hci + description: "Dados adicionais do profissional provenientes do HCI." + - name: endereco_profissional_hci + description: "Endereço do profissional proveniente do HCI." + - name: carga_horaria_outros + description: "Carga horária em outros tipos de serviços fora do ambiente hospitalar ou ambulatorial." + - name: carga_horaria_hospitalar + description: "Carga horária em ambiente hospitalar." + - name: carga_horaria_ambulatorial + description: "Carga horária em ambiente ambulatorial." + - name: carga_horaria_total + description: "Carga horária total do profissional." \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql new file mode 100644 index 00000000..1232f280 --- /dev/null +++ b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql @@ -0,0 +1,157 @@ +{{ + config( + schema="saude_cnes", + alias="equipamento_sus_rio_historico" + ) +}} + +with +versao_atual as ( + select MAX(data_particao) as versao + from {{ ref("raw_cnes_web__tipo_unidade") }} +), + +estabelecimentos_mrj_sus as ( + select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) +), + +equip as ( + select + ano, + mes, + lpad(id_estabelecimento_cnes, 7, '0') as id_cnes, + safe_cast(tipo_equipamento as int64) as equipamento_tipo, + safe_cast(id_equipamento as int64) as equipamento_especifico_tipo, + safe_cast(quantidade_equipamentos as int64) as equipamentos_quantidade, + safe_cast(quantidade_equipamentos_ativos as int64) as equipamentos_quantidade_ativos, + + from {{ ref("raw_cnes_ftp__equipamento") }} + where indicador_equipamento_disponivel_sus = 1 and ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) +), + +equip_mapping_geral as ( + select + equipamento_tipo, + equipamento + from {{ref ("raw_cnes_web__tipo_equipamento") }} + where data_particao = (SELECT versao FROM versao_atual) +), + +equip_mapping_especifico as ( + select + equipamento_especifico_tipo, + equipamento_tipo, + equipamento_especifico + from {{ref ("raw_cnes_web__tipo_equipamento_especifico") }} + where data_particao = (SELECT versao FROM versao_atual) +), + +final as ( + select + struct ( + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot + ) as metadados, + + struct ( + -- Identificação + estabs.ano, + estabs.mes, + estabs.id_cnes, + id_unidade, + nome_razao_social, + nome_fantasia, + nome_limpo, + nome_sigla, + nome_complemento, + cnpj_mantenedora, + + -- Responsabilização + esfera, + id_natureza_juridica, + natureza_juridica_descr, + tipo_gestao, + tipo_gestao_descr, + responsavel_sms, + administracao, + diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Atributos + tipo_turno, + turno_atendimento, + aberto_sempre, + + -- Tipagem dos Estabelecimentos (CNES) + id_tipo_unidade, + tipo, + + -- Tipagem dos Estabelecimentos (DIT) + tipo_sms, + tipo_sms_simplificado, + tipo_sms_agrupado, + + -- Tipagem dos Estabelecimentos (SUBGERAL) + tipo_unidade_alternativo, + tipo_unidade_agrupado, + + -- Localização + id_ap, + ap, + endereco_cep, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + + -- Status + ativa, + + -- Prontuário + prontuario_tem, + prontuario_versao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado, + + -- Informações de contato + telefone, + email, + facebook, + instagram, + twitter, + + -- Indicadores + estabelecimento_sms_indicador, + vinculo_sus_indicador, + atendimento_internacao_sus_indicador, + atendimento_ambulatorial_sus_indicador, + atendimento_sadt_sus_indicador, + atendimento_urgencia_sus_indicador, + atendimento_outros_sus_indicador, + atendimento_vigilancia_sus_indicador, + atendimento_regulacao_sus_indicador + ) as estabelecimentos, + + struct( + equip.equipamento_tipo, + equipamento, + equipamento_especifico_tipo, + equipamento_especifico, + equipamentos_quantidade, + equipamentos_quantidade_ativos + ) as equipamentos + + from equip + left join estabelecimentos_mrj_sus as estabs using (id_cnes, ano, mes) + left join equip_mapping_geral as map_geral using (equipamento_tipo) + left join equip_mapping_especifico as map_espec using (equipamento_tipo, equipamento_especifico_tipo) +) + +select * from final \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql index f3929823..6535e57c 100644 --- a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql @@ -41,22 +41,143 @@ habilitacoes as ( where ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) ), -habilitacoes_mapping_cnesweb as ( - select +habilitacoes_mapping_cnesweb AS ( + SELECT id_habilitacao, habilitacao, tipo_origem, tipo_habilitacao + FROM + {{ ref("raw_cnes_web__tipo_habilitacao") }} + WHERE + data_particao = (SELECT versao FROM versao_atual) - from {{ ref("raw_cnes_web__tipo_habilitacao") }} - where data_particao = (SELECT versao FROM versao_atual) + -- removendo ids ambiguos (não unicos).. são poucos + AND id_habilitacao NOT IN ( + SELECT + id_habilitacao + FROM ( + SELECT + id_habilitacao, + COUNT(*) AS contagem + FROM + {{ ref("raw_cnes_web__tipo_habilitacao") }} + WHERE + data_particao = (SELECT versao FROM versao_atual) + GROUP BY + id_habilitacao + HAVING + contagem > 1 + ) + ) ), final as ( select - estabs.* except (ano, mes, id_cnes), - hab.*, - map.* except (id_habilitacao), + struct ( + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot + ) as metadados, + + struct ( + -- Identificação + estabs.ano, + estabs.mes, + estabs.id_cnes, + id_unidade, + nome_razao_social, + nome_fantasia, + nome_limpo, + nome_sigla, + nome_complemento, + cnpj_mantenedora, + + -- Responsabilização + esfera, + id_natureza_juridica, + natureza_juridica_descr, + tipo_gestao, + tipo_gestao_descr, + responsavel_sms, + administracao, + diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Atributos + tipo_turno, + turno_atendimento, + aberto_sempre, + + -- Tipagem dos Estabelecimentos (CNES) + id_tipo_unidade, + tipo, + + -- Tipagem dos Estabelecimentos (DIT) + tipo_sms, + tipo_sms_simplificado, + tipo_sms_agrupado, + + -- Tipagem dos Estabelecimentos (SUBGERAL) + tipo_unidade_alternativo, + tipo_unidade_agrupado, + + -- Localização + id_ap, + ap, + endereco_cep, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + + -- Status + ativa, + + -- Prontuário + prontuario_tem, + prontuario_versao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado, + + -- Informações de contato + telefone, + email, + facebook, + instagram, + twitter, + + -- Indicadores + estabelecimento_sms_indicador, + vinculo_sus_indicador, + atendimento_internacao_sus_indicador, + atendimento_ambulatorial_sus_indicador, + atendimento_sadt_sus_indicador, + atendimento_urgencia_sus_indicador, + atendimento_outros_sus_indicador, + atendimento_vigilancia_sus_indicador, + atendimento_regulacao_sus_indicador + ) as estabelecimentos, + + struct ( + hab.id_habilitacao, + habilitacao, + habilitacao_ativa_indicador, + nivel_habilitacao, + tipo_origem, + tipo_habilitacao, + habilitacao_ano_inicio, + habilitacao_mes_inicio, + habilitacao_ano_fim, + habilitacao_mes_fim + ) as habilitacoes + from habilitacoes as hab left join habilitacoes_mapping_cnesweb as map on safe_cast(hab.id_habilitacao as int64) = safe_cast(map.id_habilitacao as int64) left join estabelecimentos_mrj_sus as estabs on (hab.ano = estabs.ano and hab.mes = estabs.mes and safe_cast(hab.id_cnes as int64) = safe_cast(estabs.id_cnes as int64)) diff --git a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql index fa8d0f20..1fac12bb 100644 --- a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql @@ -26,9 +26,10 @@ leitos_mapping_cnesftp as ( leitos_mapping_cnesweb as ( select - distinct id_leito_especialidade as tipo_especialidade_leito, + id_leito_especialidade as tipo_especialidade_leito, leito_especialidade as tipo_especialidade_leito_descr from {{ ref("raw_cnes_web__leito") }} + where data_particao = (select versao from versao_atual) ), estabelecimentos_mrj_sus as ( @@ -56,104 +57,107 @@ leitos_mrj_sus as ( ), final as ( - select - --------------------------------- ESTABELECIMENTOS - -- Identificação - ano, - mes, - id_cnes, - id_unidade, - nome_razao_social, - nome_fantasia, - nome_limpo, - nome_sigla, - nome_complemento, - cnpj_mantenedora, - - -- Responsabilização - esfera, - id_natureza_juridica, - natureza_juridica_descr, - tipo_gestao, - tipo_gestao_descr, - responsavel_sms, - administracao, - diretor_clinico_cpf, - diretor_clinico_conselho, - - -- Atributos - tipo_turno, - turno_atendimento, - aberto_sempre, - - -- Tipagem dos Estabelecimentos (CNES) - id_tipo_unidade, - tipo, - - -- Tipagem dos Estabelecimentos (DIT) - tipo_sms, - tipo_sms_simplificado, - tipo_sms_agrupado, - - -- Tipagem dos Estabelecimentos (SUBGERAL) - tipo_unidade_alternativo, - tipo_unidade_agrupado, - - -- Localização - id_ap, - ap, - endereco_cep, - endereco_bairro, - endereco_logradouro, - endereco_numero, - endereco_complemento, - endereco_latitude, - endereco_longitude, - - -- Status - ativa, - - -- Prontuário - prontuario_tem, - prontuario_versao, - prontuario_estoque_tem_dado, - prontuario_estoque_motivo_sem_dado, - - -- Informações de contato - telefone, - email, - facebook, - instagram, - twitter, - - -- Indicadores - estabelecimento_sms_indicador, - vinculo_sus_indicador, - atendimento_internacao_sus_indicador, - atendimento_ambulatorial_sus_indicador, - atendimento_sadt_sus_indicador, - atendimento_urgencia_sus_indicador, - atendimento_outros_sus_indicador, - atendimento_vigilancia_sus_indicador, - atendimento_regulacao_sus_indicador, - - -- Metadados - data_atualizao_registro, - usuario_atualizador_registro, - mes_particao, - ano_particao, - data_particao, - data_carga, - data_snapshot, - - --------------------------------- LEITOS - tipo_leito, - tipo_leito_descr, - tipo_especialidade_leito, - tipo_especialidade_leito_descr, - quantidade_total, - quantidade_contratado, - quantidade_sus + select + STRUCT ( + data_atualizao_registro, + usuario_atualizador_registro, + mes_particao, + ano_particao, + data_particao, + data_carga, + data_snapshot + ) as metadados, + + STRUCT( + -- Identificação + ano, + mes, + id_cnes, + id_unidade, + nome_razao_social, + nome_fantasia, + nome_limpo, + nome_sigla, + nome_complemento, + cnpj_mantenedora, + + -- Responsabilização + esfera, + id_natureza_juridica, + natureza_juridica_descr, + tipo_gestao, + tipo_gestao_descr, + responsavel_sms, + administracao, + diretor_clinico_cpf, + diretor_clinico_conselho, + + -- Atributos + tipo_turno, + turno_atendimento, + aberto_sempre, + + -- Tipagem dos Estabelecimentos (CNES) + id_tipo_unidade, + tipo, + + -- Tipagem dos Estabelecimentos (DIT) + tipo_sms, + tipo_sms_simplificado, + tipo_sms_agrupado, + + -- Tipagem dos Estabelecimentos (SUBGERAL) + tipo_unidade_alternativo, + tipo_unidade_agrupado, + + -- Localização + id_ap, + ap, + endereco_cep, + endereco_bairro, + endereco_logradouro, + endereco_numero, + endereco_complemento, + endereco_latitude, + endereco_longitude, + + -- Status + ativa, + + -- Prontuário + prontuario_tem, + prontuario_versao, + prontuario_estoque_tem_dado, + prontuario_estoque_motivo_sem_dado, + + -- Informações de contato + telefone, + email, + facebook, + instagram, + twitter, + + -- Indicadores + estabelecimento_sms_indicador, + vinculo_sus_indicador, + atendimento_internacao_sus_indicador, + atendimento_ambulatorial_sus_indicador, + atendimento_sadt_sus_indicador, + atendimento_urgencia_sus_indicador, + atendimento_outros_sus_indicador, + atendimento_vigilancia_sus_indicador, + atendimento_regulacao_sus_indicador + ) as estabelecimentos, + + STRUCT ( + tipo_leito, + tipo_leito_descr, + tipo_especialidade_leito, + tipo_especialidade_leito_descr, + quantidade_total, + quantidade_contratado, + quantidade_sus + ) as leitos from leitos_mrj_sus where id_cnes is not null diff --git a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql index 467a2ceb..506e2f7d 100644 --- a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql @@ -206,6 +206,7 @@ final AS ( LEFT JOIN cbo_fam AS ocupf ON LEFT(p.id_cbo_familia, 4) = ocupf.id_cbo_familia LEFT JOIN tipo_vinculo ON p.id_tipo_vinculo = tipo_vinculo.codigo_tipo_vinculo LEFT JOIN vinculo AS vinculacao ON p.id_vinculacao = vinculacao.id_vinculacao + -- Removido temporariamente por estar gerando cardinalidade (cada cns unico possui mais de um cod_sus associado no cnes web) --left join (select * from profissionais_cnesweb where ordenacao = 1) as cod_sus on p.profissional_cns = cod_sus.cns ) diff --git a/models/raw/cnes_web/raw_cnes_web__dados_profissional_sus.sql b/models/raw/cnes_web/raw_cnes_web__dados_profissional_sus.sql index c6491d3c..3ff884c3 100644 --- a/models/raw/cnes_web/raw_cnes_web__dados_profissional_sus.sql +++ b/models/raw/cnes_web/raw_cnes_web__dados_profissional_sus.sql @@ -1,3 +1,5 @@ +-- ATENCAO: CADA CNS UNICO PODE POSSUIR MAIS DE UM ID_CODIGO_SUS, PORTANTO, PODE GERAR CARDINALIDADE AO PERFORMAR JOINS + {{ config( alias="dados_profissionais_sus", diff --git a/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql b/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql index 7f06a11a..17d86d11 100644 --- a/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql +++ b/models/raw/cnes_web/raw_cnes_web__tipo_habilitacao.sql @@ -1,3 +1,5 @@ +-- ATENCAO: ID_HABILITACAO NAO É UNIQUE, PORTANTO PODE GERAR CARDINALIDADE AO SER UTILIZADO EM JOINS + {{ config( alias="tipo_habilitacao", From c9269a7b2b11f7ff8d28d764ea7793b6cb58f74f Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Mon, 30 Sep 2024 14:21:32 -0300 Subject: [PATCH 21/28] =?UTF-8?q?Remo=C3=A7=C3=A3o=20de=20registros=20dupl?= =?UTF-8?q?icados=20e=20altera=C3=A7=C3=A3o=20da=20string=20"nan"=20nos=20?= =?UTF-8?q?para=20NULL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rio/dim_profissional_sus_rio_historico.sql | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql index 506e2f7d..fc45da47 100644 --- a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql @@ -17,14 +17,17 @@ estabelecimentos_mrj_sus as ( select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) ), -profissionais_mrj as ( +profissionais_mrj_non_unique as ( select ano, mes, concat(ano, '-', lpad(cast(mes as string), 2, '0')) data_registro, id_estabelecimento_cnes, sigla_uf, - cartao_nacional_saude as profissional_cns, + case + when cartao_nacional_saude = "nan" then NULL + else cartao_nacional_saude + end as profissional_cns, nome as profissional_nome, cbo_2002 as id_cbo, substring(tipo_vinculo, 1, 4) as id_tipo_vinculo, @@ -50,6 +53,10 @@ where and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) ), +profissionais_mrj as ( + select distinct * from profissionais_mrj_non_unique +), + /* --- GERANDO CARDINALIDADE: profissionais_cnesweb as ( select From ae1d8dd3c2dc2db588f86ec5b1fcedb18c55395c Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Mon, 30 Sep 2024 17:28:52 -0300 Subject: [PATCH 22/28] minor changes --- .../rio/dim_equipamento_sus_rio_historico.sql | 12 ++++++++---- .../dim_estabelecimento_sus_rio_historico.sql | 9 +++++++-- .../rio/dim_habilitacao_sus_rio_historico.sql | 12 ++++++++---- .../rio/dim_leito_sus_rio_historico.sql | 12 ++++++++---- .../rio/dim_profissional_sus_rio_historico.sql | 17 +++++++++-------- 5 files changed, 40 insertions(+), 22 deletions(-) diff --git a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql index 1232f280..b4dc1c93 100644 --- a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql @@ -15,7 +15,7 @@ estabelecimentos_mrj_sus as ( select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) ), -equip as ( +equip_non_unique as ( select ano, mes, @@ -26,7 +26,11 @@ equip as ( safe_cast(quantidade_equipamentos_ativos as int64) as equipamentos_quantidade_ativos, from {{ ref("raw_cnes_ftp__equipamento") }} - where indicador_equipamento_disponivel_sus = 1 and ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) + where indicador_equipamento_disponivel_sus = 1 and ano >= 2010 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) +), + +equip as ( + select distinct * from equip_non_unique ), equip_mapping_geral as ( @@ -60,8 +64,6 @@ final as ( struct ( -- Identificação - estabs.ano, - estabs.mes, estabs.id_cnes, id_unidade, nome_razao_social, @@ -140,6 +142,8 @@ final as ( ) as estabelecimentos, struct( + estabs.ano, + estabs.mes, equip.equipamento_tipo, equipamento, equipamento_especifico_tipo, diff --git a/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql index 6621b9f5..3cc5dc4d 100644 --- a/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql @@ -19,7 +19,7 @@ versao_atual AS ( ), -- OBS: Não faz mais sentido pegar a versão de alguma outra tabela, sem ser tipo_unidade? -- Obtendo todos os estabelecimentos do MRJ que possuem vinculo com o SUS -estabelecimentos_brutos AS ( +estabelecimentos_brutos_non_unique AS ( SELECT ano, mes, @@ -39,7 +39,8 @@ estabelecimentos_brutos AS ( indicador_atendimento_regulacao_sus as atendimento_regulacao_sus_indicador FROM {{ ref("raw_cnes_ftp__estabelecimento") }} WHERE - sigla_uf = "RJ" + ano >= 2010 + AND sigla_uf = "RJ" AND id_municipio_6 = "330455" AND ( indicador_vinculo_sus = 1 @@ -53,6 +54,10 @@ estabelecimentos_brutos AS ( ) ), +estabelecimentos_brutos as ( + select distinct * from estabelecimentos_brutos_non_unique +), + -- Obtendo atributos dos estabelecimentos via tabela desnormalizada proveniente do CNES WEB estabelecimentos_atributos_cnes_web AS ( SELECT diff --git a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql index 6535e57c..8278b48b 100644 --- a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql @@ -15,7 +15,7 @@ estabelecimentos_mrj_sus as ( select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) ), -habilitacoes as ( +habilitacoes_non_unique as ( select ano, mes, @@ -38,7 +38,11 @@ habilitacoes as ( end as habilitacao_mes_fim from {{ref("raw_cnes_ftp__habilitacao")}} - where ano >= 2008 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) + where ano >= 2010 and safe_cast(id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) +), + +habilitacoes as ( + select distinct * from habilitacoes_non_unique ), habilitacoes_mapping_cnesweb AS ( @@ -86,8 +90,6 @@ final as ( struct ( -- Identificação - estabs.ano, - estabs.mes, estabs.id_cnes, id_unidade, nome_razao_social, @@ -166,6 +168,8 @@ final as ( ) as estabelecimentos, struct ( + estabs.ano, + estabs.mes, hab.id_habilitacao, habilitacao, habilitacao_ativa_indicador, diff --git a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql index 1fac12bb..c96125a6 100644 --- a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql @@ -36,7 +36,7 @@ estabelecimentos_mrj_sus as ( select * from {{ ref("dim_estabelecimento_sus_rio_historico") }} where safe_cast(data_particao as string) = (select versao from versao_atual) ), -leitos_mrj_sus as ( +leitos_mrj_sus_non_unique as ( select lt.tipo_leito, lt.tipo_especialidade_leito, @@ -53,7 +53,11 @@ leitos_mrj_sus as ( left join leitos_mapping_cnesweb as web on safe_cast(lt.tipo_especialidade_leito as int64) = safe_cast(web.tipo_especialidade_leito as int64) left join estabelecimentos_mrj_sus as estabs on lt.ano = estabs.ano and lt.mes = estabs.mes and safe_cast(lt.id_estabelecimento_cnes as int64) = safe_cast(estabs.id_cnes as int64) - where lt.ano >= 2008 and safe_cast(lt.id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) + where lt.ano >= 2010 and safe_cast(lt.id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) +), + +leitos_mrj_sus as ( + select distinct * from leitos_mrj_sus_non_unique ), final as ( @@ -70,8 +74,6 @@ final as ( STRUCT( -- Identificação - ano, - mes, id_cnes, id_unidade, nome_razao_social, @@ -150,6 +152,8 @@ final as ( ) as estabelecimentos, STRUCT ( + ano, + mes, tipo_leito, tipo_leito_descr, tipo_especialidade_leito, diff --git a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql index fc45da47..e460e992 100644 --- a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql @@ -43,7 +43,7 @@ select from {{ ref("raw_cnes_ftp__profissional") }} where - ano >= 2008 + ano >= 2010 and sigla_uf = "RJ" and ( indicador_atende_sus = 1 @@ -105,8 +105,6 @@ final AS ( STRUCT( -- Identificação - estabs.ano, - estabs.mes, estabs.id_cnes, estabs.id_unidade, estabs.nome_razao_social, @@ -187,9 +185,11 @@ final AS ( STRUCT( --cod_sus.id_codigo_sus as profissional_codigo_sus, p.data_registro, + estabs.ano, + estabs.mes, hci.cpf, - p.profissional_cns, - p.profissional_nome, + p.profissional_cns as cns, + p.profissional_nome as nome, vinculacao.descricao AS vinculacao, tipo_vinculo.descricao AS vinculo_tipo, p.id_cbo, @@ -198,12 +198,13 @@ final AS ( ocupf.descricao AS cbo_familia, p.id_registro_conselho, p.id_tipo_conselho, - hci.dados as profissional_dados_hci, - hci.endereco as endereco_profissional_hci, p.carga_horaria_outros, p.carga_horaria_hospitalar, p.carga_horaria_ambulatorial, - p.carga_horaria_total + p.carga_horaria_total, + hci.dados as profissional_dados_hci, + hci.endereco as endereco_profissional_hci + ) AS profissionais FROM profissionais_mrj AS p From 77977d633e7f61129d568d924ee0688219f2b2a5 Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Mon, 7 Oct 2024 18:53:32 -0300 Subject: [PATCH 23/28] add policy tags --- models/marts/core/dimensions/rio/_dimensions_rio_schema.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml index bf96f8fc..04c7d900 100644 --- a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml +++ b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml @@ -43,8 +43,12 @@ models: description: "Administração do estabelecimento." - name: diretor_clinico_cpf description: "CPF do diretor clínico do estabelecimento." + policy_tags: + - '{{ var ("TAG_CPF") }}' - name: diretor_clinico_conselho description: "Número de registro no conselho profissional do diretor clínico." + policy_tags: + - '{{ var ("TAG_CRM") }}' # Atributos - name: tipo_turno From 5f08ef803bdccf669abd0e614a2b4caabffae3c1 Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Mon, 7 Oct 2024 18:54:52 -0300 Subject: [PATCH 24/28] Disable deployment of non-validated models in production --- .../core/dimensions/rio/dim_equipamento_sus_rio_historico.sql | 1 + .../core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql | 1 + models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql | 1 + .../core/dimensions/rio/dim_profissional_sus_rio_historico.sql | 1 + 4 files changed, 4 insertions(+) diff --git a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql index b4dc1c93..e8fd9cf0 100644 --- a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql @@ -1,5 +1,6 @@ {{ config( + enabled=false, schema="saude_cnes", alias="equipamento_sus_rio_historico" ) diff --git a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql index 8278b48b..e2e28147 100644 --- a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql @@ -1,5 +1,6 @@ {{ config( + enabled=false, schema="saude_cnes", alias="habilitacao_sus_rio_historico" ) diff --git a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql index c96125a6..544b510f 100644 --- a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql @@ -1,5 +1,6 @@ {{ config( + enabled=false, schema="saude_cnes", alias="leito_sus_rio_historico" ) diff --git a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql index e460e992..b9eb782f 100644 --- a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql @@ -1,5 +1,6 @@ {{ config( + enabled=false, schema="saude_cnes", alias="profissional_sus_rio_historico", materialized="table", From a1366f92833501396774096eed8312fb3a555a47 Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Mon, 7 Oct 2024 19:39:38 -0300 Subject: [PATCH 25/28] =?UTF-8?q?Correctly=20arrange=20metadata=20columns?= =?UTF-8?q?=20for=20improved=20data=20organization=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dimensions/rio/dim_estabelecimento_sus_rio_historico.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql index 3cc5dc4d..c9e8fa36 100644 --- a/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql @@ -260,8 +260,6 @@ estabelecimentos_final AS ( final as ( SELECT -- Identificação - cast(ano as int64) as ano, - cast(mes as int64) as mes, lpad(id_estabelecimento_cnes, 7, '0') AS id_cnes, id_unidade, nome_razao_social, @@ -344,6 +342,8 @@ final as ( -- Metadados data_atualizao_registro, usuario_atualizador_registro, + cast(ano as int64) as ano, + cast(mes as int64) as mes, safe_cast(mes_particao as int64) as mes_particao, safe_cast(ano_particao as int64) as ano_particao, parse_date('%Y-%m-%d', data_particao) as data_particao, From 6adc5804390a3dcce91fc84622963172959b51fe Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Tue, 8 Oct 2024 07:09:23 -0300 Subject: [PATCH 26/28] Remove legacy source freshness check for Vitacare paciente_historico --- .../raw/prontuario_vitacare/_prontuario_vitacare_sources.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml b/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml index 3d0ad0a3..2b942c9c 100644 --- a/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml +++ b/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml @@ -14,10 +14,6 @@ sources: warn_after: {count: 4, period: hour} error_after: {count: 24, period: hour} - name: paciente_historico_eventos - loaded_at_field: "CAST(updated_at AS TIMESTAMP)" - freshness: - warn_after: {count: 30, period: day} - error_after: {count: 60, period: day} - name: atendimento_eventos - name: atendimentos_historico - name: vacinas_historico From 59efd93828b14f6f803f6ca29cf5c33495299e2d Mon Sep 17 00:00:00 2001 From: ThiagoTrabach Date: Tue, 8 Oct 2024 07:09:52 -0300 Subject: [PATCH 27/28] Remove legacy source freshness check for Vitacare paciente_historico --- .../raw/prontuario_vitacare/_prontuario_vitacare_sources.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml b/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml index 3d0ad0a3..2b942c9c 100644 --- a/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml +++ b/models/raw/prontuario_vitacare/_prontuario_vitacare_sources.yml @@ -14,10 +14,6 @@ sources: warn_after: {count: 4, period: hour} error_after: {count: 24, period: hour} - name: paciente_historico_eventos - loaded_at_field: "CAST(updated_at AS TIMESTAMP)" - freshness: - warn_after: {count: 30, period: day} - error_after: {count: 60, period: day} - name: atendimento_eventos - name: atendimentos_historico - name: vacinas_historico From 66e731d3e5da9f105cdb39913ff554f28dd2a386 Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Tue, 8 Oct 2024 15:39:12 -0300 Subject: [PATCH 28/28] =?UTF-8?q?Corre=C3=A7=C3=A3o=20na=20convers=C3=A3o?= =?UTF-8?q?=20de=20data;=20altera=C3=A7=C3=A3o=20dos=20nomes=20ano=20e=20m?= =?UTF-8?q?es=20para=20ano=5Fcompetencia=20e=20mes=5Fcompetencia;=20mudan?= =?UTF-8?q?=C3=A7a=20na=20posi=C3=A7=C3=A3o=20dessas=20vari=C3=A1veis=20no?= =?UTF-8?q?s=20modelos=20para=20"metadados".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/dimensions/dim_estabelecimento.sql | 8 ++++---- .../dimensions/rio/_dimensions_rio_schema.yml | 20 +++++++++---------- .../rio/dim_equipamento_sus_rio_historico.sql | 6 +++--- .../dim_estabelecimento_sus_rio_historico.sql | 4 ++-- .../rio/dim_habilitacao_sus_rio_historico.sql | 6 +++--- .../rio/dim_leito_sus_rio_historico.sql | 8 ++++---- .../dim_profissional_sus_rio_historico.sql | 6 +++--- .../raw_cnes_web__estabelecimento.sql | 5 +++-- 8 files changed, 32 insertions(+), 31 deletions(-) diff --git a/models/marts/core/dimensions/dim_estabelecimento.sql b/models/marts/core/dimensions/dim_estabelecimento.sql index 065c62c7..8cf2d0dd 100644 --- a/models/marts/core/dimensions/dim_estabelecimento.sql +++ b/models/marts/core/dimensions/dim_estabelecimento.sql @@ -5,15 +5,15 @@ with source as ( ), current_year as ( - select max(ano) as ano_atual from source + select max(ano_competencia) as ano_atual from source ), current_period as ( select cast(current_year.ano_atual as int64) as ano_atual, - cast(max(mes) as int64) as competencia_atual + cast(max(mes_competencia) as int64) as competencia_atual from source - join current_year on source.ano = current_year.ano_atual + join current_year on source.ano_competencia = current_year.ano_atual group by current_year.ano_atual ), @@ -72,7 +72,7 @@ final as ( from source - join current_period on source.ano = current_period.ano_atual and source.mes = current_period.competencia_atual + join current_period on source.ano_competencia = current_period.ano_atual and source.mes_competencia = current_period.competencia_atual where estabelecimento_sms_indicador = 1 diff --git a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml index 04c7d900..523e445c 100644 --- a/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml +++ b/models/marts/core/dimensions/rio/_dimensions_rio_schema.yml @@ -5,9 +5,9 @@ models: columns: # Identificação - - name: ano + - name: ano_competencia description: "Ano de referência dos dados." - - name: mes + - name: mes_competencia description: "Mês de referência dos dados." - name: id_cnes description: "Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento." @@ -166,9 +166,9 @@ models: columns: # --------------------------------- ESTABELECIMENTOS # Identificação - - name: ano + - name: ano_competencia description: "Ano de referência dos dados." - - name: mes + - name: mes_competencia description: "Mês de referência dos dados." - name: id_cnes description: "Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento." @@ -339,9 +339,9 @@ models: columns: # --------------------------------- ESTABELECIMENTOS # Identificação - - name: ano + - name: ano_competencia description: "Ano de referência dos dados." - - name: mes + - name: mes_competencia description: "Mês de referência dos dados." - name: id_cnes description: "Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento." @@ -518,9 +518,9 @@ models: columns: # --------------------------------- ESTABELECIMENTOS # Identificação - - name: ano + - name: ano_competencia description: "Ano de referência dos dados." - - name: mes + - name: mes_competencia description: "Mês de referência dos dados." - name: id_cnes description: "Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento." @@ -689,9 +689,9 @@ models: columns: # --------------------------------- ESTABELECIMENTOS # Identificação - - name: ano + - name: ano_competencia description: "Ano de referência dos dados." - - name: mes + - name: mes_competencia description: "Mês de referência dos dados." - name: id_cnes description: "Código Nacional de Estabelecimento de Saúde (CNES) do estabelecimento." diff --git a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql index e8fd9cf0..8674b318 100644 --- a/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_equipamento_sus_rio_historico.sql @@ -54,6 +54,8 @@ equip_mapping_especifico as ( final as ( select struct ( + estabs.ano_competencia, + estabs.mes_competencia, data_atualizao_registro, usuario_atualizador_registro, mes_particao, @@ -143,8 +145,6 @@ final as ( ) as estabelecimentos, struct( - estabs.ano, - estabs.mes, equip.equipamento_tipo, equipamento, equipamento_especifico_tipo, @@ -154,7 +154,7 @@ final as ( ) as equipamentos from equip - left join estabelecimentos_mrj_sus as estabs using (id_cnes, ano, mes) + left join estabelecimentos_mrj_sus as estabs on equip.id_cnes = estabs.id_cnes and equip.ano = estabs.ano_competencia and equip.mes = estabs.mes_competencia left join equip_mapping_geral as map_geral using (equipamento_tipo) left join equip_mapping_especifico as map_espec using (equipamento_tipo, equipamento_especifico_tipo) ) diff --git a/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql index c9e8fa36..0a670520 100644 --- a/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_estabelecimento_sus_rio_historico.sql @@ -342,8 +342,8 @@ final as ( -- Metadados data_atualizao_registro, usuario_atualizador_registro, - cast(ano as int64) as ano, - cast(mes as int64) as mes, + cast(ano as int64) as ano_competencia, + cast(mes as int64) as mes_competencia, safe_cast(mes_particao as int64) as mes_particao, safe_cast(ano_particao as int64) as ano_particao, parse_date('%Y-%m-%d', data_particao) as data_particao, diff --git a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql index e2e28147..a9ccbe49 100644 --- a/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_habilitacao_sus_rio_historico.sql @@ -80,6 +80,8 @@ habilitacoes_mapping_cnesweb AS ( final as ( select struct ( + estabs.ano_competencia, + estabs.mes_competencia, data_atualizao_registro, usuario_atualizador_registro, mes_particao, @@ -169,8 +171,6 @@ final as ( ) as estabelecimentos, struct ( - estabs.ano, - estabs.mes, hab.id_habilitacao, habilitacao, habilitacao_ativa_indicador, @@ -185,7 +185,7 @@ final as ( from habilitacoes as hab left join habilitacoes_mapping_cnesweb as map on safe_cast(hab.id_habilitacao as int64) = safe_cast(map.id_habilitacao as int64) - left join estabelecimentos_mrj_sus as estabs on (hab.ano = estabs.ano and hab.mes = estabs.mes and safe_cast(hab.id_cnes as int64) = safe_cast(estabs.id_cnes as int64)) + left join estabelecimentos_mrj_sus as estabs on (hab.ano = estabs.ano_competencia and hab.mes = estabs.mes_competencia and safe_cast(hab.id_cnes as int64) = safe_cast(estabs.id_cnes as int64)) ) select * from final \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql index 544b510f..40600761 100644 --- a/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_leito_sus_rio_historico.sql @@ -52,7 +52,7 @@ leitos_mrj_sus_non_unique as ( from {{ ref("raw_cnes_ftp__leito") }} as lt left join leitos_mapping_cnesftp as ftp on safe_cast(lt.tipo_leito as int64) = ftp.tipo_leito left join leitos_mapping_cnesweb as web on safe_cast(lt.tipo_especialidade_leito as int64) = safe_cast(web.tipo_especialidade_leito as int64) - left join estabelecimentos_mrj_sus as estabs on lt.ano = estabs.ano and lt.mes = estabs.mes and safe_cast(lt.id_estabelecimento_cnes as int64) = safe_cast(estabs.id_cnes as int64) + left join estabelecimentos_mrj_sus as estabs on lt.ano = estabs.ano_competencia and lt.mes = estabs.mes_competencia and safe_cast(lt.id_estabelecimento_cnes as int64) = safe_cast(estabs.id_cnes as int64) where lt.ano >= 2010 and safe_cast(lt.id_estabelecimento_cnes as int64) in (select distinct safe_cast(id_cnes as int64) from estabelecimentos_mrj_sus) ), @@ -64,6 +64,8 @@ leitos_mrj_sus as ( final as ( select STRUCT ( + ano_competencia, + mes_competencia, data_atualizao_registro, usuario_atualizador_registro, mes_particao, @@ -153,8 +155,6 @@ final as ( ) as estabelecimentos, STRUCT ( - ano, - mes, tipo_leito, tipo_leito_descr, tipo_especialidade_leito, @@ -166,7 +166,7 @@ final as ( from leitos_mrj_sus where id_cnes is not null - order by ano asc, mes asc, id_cnes asc, tipo_leito_descr asc, tipo_especialidade_leito_descr asc + order by ano_competencia asc, mes_competencia asc, id_cnes asc, tipo_leito_descr asc, tipo_especialidade_leito_descr asc ) select * from final \ No newline at end of file diff --git a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql index b9eb782f..81ab2b48 100644 --- a/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql +++ b/models/marts/core/dimensions/rio/dim_profissional_sus_rio_historico.sql @@ -95,6 +95,8 @@ profissional_dados_hci as (select distinct cns, cpf, dados, endereco from {{ ref final AS ( SELECT STRUCT( + estabs.ano_competencia, + estabs.mes_competencia, estabs.data_atualizao_registro, estabs.usuario_atualizador_registro, estabs.mes_particao, @@ -186,8 +188,6 @@ final AS ( STRUCT( --cod_sus.id_codigo_sus as profissional_codigo_sus, p.data_registro, - estabs.ano, - estabs.mes, hci.cpf, p.profissional_cns as cns, p.profissional_nome as nome, @@ -210,7 +210,7 @@ final AS ( FROM profissionais_mrj AS p LEFT JOIN profissional_dados_hci AS hci ON SAFE_CAST(p.profissional_cns AS INT64) = (SELECT SAFE_CAST(cns AS INT64) FROM UNNEST(hci.cns) AS cns LIMIT 1) - LEFT JOIN estabelecimentos_mrj_sus AS estabs ON p.ano = estabs.ano AND p.mes = estabs.mes AND SAFE_CAST(p.id_estabelecimento_cnes AS INT64) = SAFE_CAST(estabs.id_cnes AS INT64) + LEFT JOIN estabelecimentos_mrj_sus AS estabs ON p.ano = estabs.ano_competencia AND p.mes = estabs.mes_competencia AND SAFE_CAST(p.id_estabelecimento_cnes AS INT64) = SAFE_CAST(estabs.id_cnes AS INT64) LEFT JOIN cbo AS ocup ON p.id_cbo = ocup.id_cbo LEFT JOIN cbo_fam AS ocupf ON LEFT(p.id_cbo_familia, 4) = ocupf.id_cbo_familia LEFT JOIN tipo_vinculo ON p.id_tipo_vinculo = tipo_vinculo.codigo_tipo_vinculo diff --git a/models/raw/cnes_web/raw_cnes_web__estabelecimento.sql b/models/raw/cnes_web/raw_cnes_web__estabelecimento.sql index fa14626a..d0ad6e98 100644 --- a/models/raw/cnes_web/raw_cnes_web__estabelecimento.sql +++ b/models/raw/cnes_web/raw_cnes_web__estabelecimento.sql @@ -80,5 +80,6 @@ select '-01' ) as data_particao, safe_cast(_data_carga as datetime) as data_carga, - safe_cast(_data_snapshot as datetime) as data_snapshot -from source + safe_cast(concat(safe_cast(_data_snapshot as string), '-01') as datetime) as data_snapshot + +from source \ No newline at end of file