From b423268ca0a43d707766def31d0babd6de176fbf Mon Sep 17 00:00:00 2001 From: miloskimatheus Date: Fri, 21 Feb 2025 15:39:27 -0300 Subject: [PATCH] adds coordinates raw model; improves ap model; adds geolocation on mva; adds tags to models --- dbt_project.yml | 15 +++-- .../dim_estabelecimento_sus_rio_historico.sql | 29 ++++++++- .../_area_programatica_schema.yml | 16 +++++ .../_area_programatica_sources.yml | 2 - .../raw_area_programatica__bairros_aps.sql | 17 ++--- models/raw/geo_pgeo3/_geo_pgeo3_schema.yml | 64 +++++++++++++++++++ models/raw/geo_pgeo3/_geo_pgeo3_sources.yml | 8 +++ ...eo_pgeo3__estabelecimentos_coordenadas.sql | 40 ++++++++++++ 8 files changed, 173 insertions(+), 18 deletions(-) create mode 100644 models/raw/area_programatica/_area_programatica_schema.yml create mode 100644 models/raw/geo_pgeo3/_geo_pgeo3_schema.yml create mode 100644 models/raw/geo_pgeo3/_geo_pgeo3_sources.yml create mode 100644 models/raw/geo_pgeo3/raw_geo_pgeo3__estabelecimentos_coordenadas.sql diff --git a/dbt_project.yml b/dbt_project.yml index ff2fbfa3..5e2953dd 100644 --- a/dbt_project.yml +++ b/dbt_project.yml @@ -109,7 +109,14 @@ models: dado_sensivel: nao area_programatica: +schema: brutos_area_programatica - +tags: "daily" + +tags: ["weekly", "subgeral", "monitora_reg", "cnes_subgeral"] + +labels: + dado_publico: sim + dado_pessoal: nao + dado_sensivel: nao + geo_pgeo3: + +schema: brutos_geo_pgeo3 + +tags: ["weekly", "subgeral", "monitora_reg", "cnes_subgeral"] +labels: dado_publico: sim dado_pessoal: nao @@ -239,7 +246,7 @@ models: dado_sensivel: nao rio: +schema: saude_rio - +tags: ["weekly", "saude_rio", "subgeral"] + +tags: ["weekly", "saude_rio", "subgeral", "cnes_subgeral"] +labels: dado_publico: sim dado_pessoal: sim @@ -247,7 +254,7 @@ models: facts: sisreg: +schema: saude_sisreg - +tags: "daily" + +tags: ["daily", "cnes", "sisreg"] +labels: dado_publico: nao dado_pessoal: nao @@ -325,7 +332,7 @@ models: dominio: subgeral sisreg_reports: +schema: projeto_sisreg_reports - +tags: ["weekly", "subgeral", "sisreg_reports"] + +tags: ["weekly", "subgeral", "sisreg", "sisreg_reports"] +labels: dado_publico: nao dado_pessoal: sim 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 eb563871..6a35050f 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 @@ -87,6 +87,23 @@ with from {{ ref("raw_area_programatica__bairros_aps") }} ), + -- Obtendo latitudes e longitudes dos estabelecimentos de saúde + coordenadas as ( + select id_cnes, latitude_api, longitude_api + from + ( + select + id_cnes, + latitude_api, + longitude_api, + row_number() over ( + partition by id_cnes order by data_extracao desc + ) as rn + from {{ ref("raw_geo_pgeo3__estabelecimentos_coordenadas") }} + ) + where rn = 1 + ), + -- Obtendo atributos de contato para os estabelecimentos contatos_aps as ( select id_cnes, telefone, email, facebook, instagram, twitter @@ -155,8 +172,12 @@ with cnes_web.endereco_logradouro, cnes_web.endereco_numero, cnes_web.endereco_complemento, - cnes_web.endereco_latitude, - cnes_web.endereco_longitude, + coalesce( + cnes_web.endereco_latitude, coordenadas.latitude_api + ) as endereco_latitude, + coalesce( + cnes_web.endereco_longitude, coordenadas.longitude_api + ) as endereco_longitude, cnes_web.id_motivo_desativacao, cnes_web.id_unidade, cnes_web.aberto_sempre, @@ -248,6 +269,10 @@ with on cast(brutos.id_estabelecimento_cnes as int64) = cast(contatos_aps.id_cnes as int64) left join aps_tb on cnes_web.endereco_bairro = aps_tb.bairro + left join + coordenadas + on cast(brutos.id_estabelecimento_cnes as int64) + = cast(coordenadas.id_cnes as int64) ), -- Seleção final diff --git a/models/raw/area_programatica/_area_programatica_schema.yml b/models/raw/area_programatica/_area_programatica_schema.yml new file mode 100644 index 00000000..6e2344dc --- /dev/null +++ b/models/raw/area_programatica/_area_programatica_schema.yml @@ -0,0 +1,16 @@ +models: + - name: raw_area_programatica__bairros_aps + description: As Áreas Programáticas de Saúde do Rio de Janeiro são 10 grandes regiões que dividem a cidade para fins de planejamento e gestão. Essa divisão facilita a organização do sistema de saúde e permite identificar e abordar problemas específicos de cada área. + columns: + - name: bairro + description: A coluna 'bairro' representa o nome do bairro na cidade do Rio de Janeiro. + data_type: string + quote: true + - name: ap + description: A coluna 'ap' representa o código da Área Programática, um identificador único para cada uma das 10 Áreas Programáticas da cidade do Rio de Janeiro. + data_type: int64 + quote: true + - name: ap_titulo + description: A coluna 'ap_titulo' representa o nome ou título da Área Programática correspondente. + data_type: string + quote: true diff --git a/models/raw/area_programatica/_area_programatica_sources.yml b/models/raw/area_programatica/_area_programatica_sources.yml index c965058b..97daa787 100644 --- a/models/raw/area_programatica/_area_programatica_sources.yml +++ b/models/raw/area_programatica/_area_programatica_sources.yml @@ -6,5 +6,3 @@ sources: schema: brutos_area_programatica_staging tables: - name: bairros_aps - - diff --git a/models/raw/area_programatica/raw_area_programatica__bairros_aps.sql b/models/raw/area_programatica/raw_area_programatica__bairros_aps.sql index 088039d2..d0a072af 100644 --- a/models/raw/area_programatica/raw_area_programatica__bairros_aps.sql +++ b/models/raw/area_programatica/raw_area_programatica__bairros_aps.sql @@ -1,13 +1,10 @@ -{{ - config( - alias="bairros_aps", - schema= "brutos_area_programatica" - ) -}} +{{ config(alias="bairros_aps", schema="brutos_area_programatica") }} -with source as ( - select * from {{ source('brutos_area_programatica_staging', 'bairros_aps') }} -) +with + source as ( + select bairro, ap, ap_titulo + from {{ source("brutos_area_programatica_staging", "bairros_aps") }} + ) select * -from source \ No newline at end of file +from source diff --git a/models/raw/geo_pgeo3/_geo_pgeo3_schema.yml b/models/raw/geo_pgeo3/_geo_pgeo3_schema.yml new file mode 100644 index 00000000..db093777 --- /dev/null +++ b/models/raw/geo_pgeo3/_geo_pgeo3_schema.yml @@ -0,0 +1,64 @@ +models: + - name: raw_geo_pgeo3__estabelecimentos_coordenadas + description: O modelo raw_geo_pgeo3__estabelecimentos_coordenadas contém dados geográficos relacionados a estabelecimentos de saúde. Estes dados são municipais, provenientes da API do IPP. + columns: + - name: id_cnes + description: Esta coluna representa o identificador único do estabelecimento de saúde. É um número de sete dígitos, preenchido com zeros à esquerda caso o número original tenha menos de sete dígitos. + data_type: string + quote: true + - name: endereco_cep + description: Esta coluna representa o Código de Endereçamento Postal (CEP) do endereço do estabelecimento de saúde. É um número de oito dígitos, preenchido com zeros à esquerda caso o número original tenha menos de oito dígitos. + data_type: string + quote: true + - name: endereco_bairro + description: Esta coluna representa o bairro do endereço do estabelecimento de saúde. + data_type: string + quote: true + - name: endereco_logradouro + description: Esta coluna contém o nome da rua do estabelecimento. + data_type: string + quote: true + - name: endereco_numero + description: Esta coluna contém o número do endereço do estabelecimento. + data_type: string + quote: true + - name: latitude_cep + description: Esta coluna contém a latitude do estabelecimento com base no CEP. + data_type: float64 + quote: true + - name: longitude_cep + description: Esta coluna representa a longitude do CEP do estabelecimento. + data_type: float64 + quote: true + - name: latitude_addr + description: Esta coluna representa a latitude do endereço do estabelecimento. + data_type: float64 + quote: true + - name: longitude_addr + description: Esta coluna representa a longitude do endereço do estabelecimento. + data_type: float64 + quote: true + - name: latitude_api + description: Latitude final à ser considerada (Tenta preencher com addr, e caso não consiga, tenta preencher com cep). + data_type: float64 + quote: true + - name: longitude_api + description: Longitude final à ser considerada (Tenta preencher com addr, e caso não consiga, tenta preencher com cep). + data_type: float64 + quote: true + - name: data_extracao + description: A data e hora em que os dados foram extraídos. + data_type: datetime + quote: true + - name: ano_particao + description: Esta coluna representa o ano da partição. + data_type: int64 + quote: true + - name: mes_particao + description: Esta coluna representa o mês da partição. + data_type: int64 + quote: true + - name: data_particao + description: Esta coluna representa a data da partição. É baseada na data_extração, e é utilizada para fins de organização dos dados e consultas mais rápidas. + data_type: date + quote: true diff --git a/models/raw/geo_pgeo3/_geo_pgeo3_sources.yml b/models/raw/geo_pgeo3/_geo_pgeo3_sources.yml new file mode 100644 index 00000000..f9f9d169 --- /dev/null +++ b/models/raw/geo_pgeo3/_geo_pgeo3_sources.yml @@ -0,0 +1,8 @@ +version: 2 + +sources: + - name: brutos_geo_pgeo3_staging + database: rj-sms + schema: brutos_geo_pgeo3_staging + tables: + - name: estabelecimentos_coordenadas \ No newline at end of file diff --git a/models/raw/geo_pgeo3/raw_geo_pgeo3__estabelecimentos_coordenadas.sql b/models/raw/geo_pgeo3/raw_geo_pgeo3__estabelecimentos_coordenadas.sql new file mode 100644 index 00000000..12434c1a --- /dev/null +++ b/models/raw/geo_pgeo3/raw_geo_pgeo3__estabelecimentos_coordenadas.sql @@ -0,0 +1,40 @@ +{{ + config( + schema="brutos_geo_pgeo3", + alias="estabelecimentos_coordenadas", + partition_by={ + "field": "data_particao", + "data_type": "date", + "granularity": "month", + }, + ) +}} + +with + source as ( + select + lpad(id_cnes, 7, '0') as id_cnes, + lpad(endereco_cep, 8, '0') as endereco_cep, + + endereco_bairro, + endereco_logradouro, + endereco_numero, + + safe_cast(latitude_cep as float64) as latitude_cep, + safe_cast(longitude_cep as float64) as longitude_cep, + safe_cast(latitude_addr as float64) as latitude_addr, + safe_cast(longitude_addr as float64) as longitude_addr, + safe_cast(latitude_api as float64) as latitude_api, + safe_cast(longitude_api as float64) as longitude_api, + + safe_cast(data_extracao as datetime) as data_extracao, + safe_cast(ano_particao as int64) as ano_particao, + safe_cast(mes_particao as int64) as mes_particao, + safe_cast(data_particao as date) as data_particao + + from {{ source("brutos_geo_pgeo3_staging", "estabelecimentos_coordenadas") }} + + ) + +select * +from source