Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Flexibiliza troca de colunas de códigos por nomes legíveis #10

Merged
merged 4 commits into from
Sep 14, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions macros/utilidades/filtrar_regex.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{#
SPDX-FileCopyrightText: 2022 ImpulsoGov <[email protected]>

SPDX-License-Identifier: MIT
#}



{%- macro filtrar_regex(iteravel, expressao_regular) -%}
{% set re = modules.re %}
{% set filtrado = [] %}
{%- for texto in iteravel -%}
{%- if re.match(expressao_regular, texto) -%}
{%- set _ = filtrado.append(texto) -%}
{%- endif -%}
{%- endfor -%}
{{- return(filtrado) -}}
{%- endmacro -%}
31 changes: 31 additions & 0 deletions macros/utilidades/filtrar_regex.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# SPDX-FileCopyrightText: 2022 Impulso Gov <[email protected]>
#
# SPDX-License-Identifier: MIT


version: 2

macros:

- name: filtrar_regex
description: >
A partir de um iterável e um padrão de expressão regular, retorna uma
lista apenas com os elementos que correspondem ao padrão.

docs:
show: true

arguments:
- name: iteravel
type: Iterable[str]
description: >
Lista ou outro iterável cujos elementos sejam todos textos a serem
comparados com um padrão de expressão regular.

- name: expressao_regular
type: str
description: >
Texto com padrão de
[expressão regular](https://docs.python.org/3/library/re.html)
nativo do Python, que será comparado com os elementos do iterável de
entrada e filtrar os que devem aparecer na lista de saída.
22 changes: 16 additions & 6 deletions macros/utilidades/nomear_estabelecimentos.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,24 @@ SPDX-License-Identifier: MIT
todos_estabelecimentos_valor="Todos",
cte_resultado="com_nomes_estabelecimentos"
) %}
{%- set re = modules.re -%}
{%- set lista_de_codigos_colunas = adapter.get_columns_in_relation(
source("codigos", "estabelecimentos")
) -%}
{%- set lista_de_codigos_coluna_id = "estabelecimento" + re.match(
".*estabelecimento.*(_id.*)",
coluna_estabelecimento_id
).groups(1)[0]
-%}
{{ cte_resultado }} AS (
SELECT
t.*,
{% if todos_estabelecimentos_id is not none -%}
(
CASE
WHEN
{{ coluna_estabelecimento_id }} = '{{ todos_estabelecimentos_id }}'
t.{{ coluna_estabelecimento_id }}
= '{{ todos_estabelecimentos_id }}'
THEN '{{ todos_estabelecimentos_valor }}'
ELSE
{%- endif %} coalesce(
Expand All @@ -29,18 +39,18 @@ SELECT
)
{%- if todos_sexos_id is not none -%}
END
){%- endif %} AS {{ coluna_estabelecimento_nome}}
){%- endif %} AS {{ coluna_estabelecimento_nome }}
FROM {{ relacao }} t
LEFT JOIN (
SELECT
{%- for coluna in adapter.get_columns_in_relation(
source("codigos", "estabelecimentos")
) %}
{%- for coluna in lista_de_codigos_colunas %}
{{coluna.quoted}} AS "estabelecimento_{{coluna.name}}"
{{- "," if not loop.last }}
{%- endfor %}
FROM {{ source("codigos", "estabelecimentos") }}
) estabelecimento
USING ({{ coluna_estabelecimento_id }})
ON
t.{{ coluna_estabelecimento_id }}
= estabelecimento.{{ lista_de_codigos_coluna_id }}
)
{%- endmacro -%}
18 changes: 12 additions & 6 deletions macros/utilidades/nomear_racas_cores.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,37 @@ SPDX-License-Identifier: MIT
todas_racas_cores_valor="Todas",
cte_resultado="com_nomes_racas_cores"
) %}
{%- set re = modules.re -%}
{%- set lista_de_codigos_colunas = adapter.get_columns_in_relation(
source("codigos", "racas_cores")
) -%}
{%- set lista_de_codigos_coluna_id = (
"raca_cor"
+ re.match(".*raca_cor.*(_id.*)", coluna_raca_cor_id).groups(1)[0]
) -%}
{{ cte_resultado }} AS (
SELECT
t.*,
{% if todas_racas_cores_id is not none -%}
(
CASE
WHEN
{{ coluna_raca_cor_id }} = '{{ todas_racas_cores_id }}'
t.{{ coluna_raca_cor_id }} = '{{ todas_racas_cores_id }}'
THEN '{{ todas_racas_cores_valor }}'
ELSE
{%- endif %} raca_cor.raca_cor_nome
{%- if todas_racas_cores_id is not none -%}
END
){%- endif %} AS {{ coluna_raca_cor_nome}}
){%- endif %} AS {{ coluna_raca_cor_nome }}
FROM {{ relacao }} t
LEFT JOIN (
SELECT
{%- for coluna in adapter.get_columns_in_relation(
source("codigos", "racas_cores")
) %}
{%- for coluna in lista_de_codigos_colunas %}
{{coluna.quoted}} AS "raca_cor_{{coluna.name}}"
{{- "," if not loop.last }}
{%- endfor %}
FROM {{ source("codigos", "racas_cores") }}
) raca_cor
USING ({{ coluna_raca_cor_id }})
ON t.{{ coluna_raca_cor_id }} = raca_cor.{{ lista_de_codigos_coluna_id }}
)
{%- endmacro -%}
17 changes: 11 additions & 6 deletions macros/utilidades/nomear_sexos.sql
Original file line number Diff line number Diff line change
Expand Up @@ -13,31 +13,36 @@ SPDX-License-Identifier: MIT
todos_sexos_valor="Todos",
cte_resultado="com_nomes_sexos"
) %}
{%- set re = modules.re -%}
{%- set lista_de_codigos_colunas = adapter.get_columns_in_relation(
source("codigos", "sexos")
) -%}
{%- set lista_de_codigos_coluna_id = (
"sexo" + re.match(".*sexo.*(_id.*)", coluna_sexo_id).groups(1)[0]
) -%}
{{ cte_resultado }} AS (
SELECT
t.*,
{% if todos_sexos_id is not none -%}
(
CASE
WHEN
{{ coluna_sexo_id }} = '{{ todos_sexos_id }}'
t.{{ coluna_sexo_id }} = '{{ todos_sexos_id }}'
THEN '{{ todos_sexos_valor }}'
ELSE
{%- endif %} sexo.sexo_nome
{%- if todos_sexos_id is not none -%}
END
){%- endif %} AS {{ coluna_sexo_nome}}
){%- endif %} AS {{ coluna_sexo_nome }}
FROM {{ relacao }} t
LEFT JOIN (
SELECT
{%- for coluna in adapter.get_columns_in_relation(
source("codigos", "sexos")
) %}
{%- for coluna in lista_de_codigos_colunas %}
{{coluna.quoted}} AS "sexo_{{coluna.name}}"
{{- "," if not loop.last }}
{%- endfor %}
FROM {{ source("codigos", "sexos") }}
) sexo
USING ({{ coluna_sexo_id }})
ON t.{{ coluna_sexo_id }} = sexo.{{ lista_de_codigos_coluna_id }}
)
{%- endmacro -%}
88 changes: 58 additions & 30 deletions macros/utilidades/preparar_uso_externo.sql
Original file line number Diff line number Diff line change
Expand Up @@ -21,64 +21,92 @@ SPDX-License-Identifier: MIT
],
cte_resultado="final"
) %}
{% set re = modules.re %}
{%- set re = modules.re -%}
{%- set colunas = [] -%}
{%- for coluna in adapter.get_columns_in_relation(ref(relacao)) -%}
{%- set _ = colunas.append(coluna.name) -%}
{%- endfor -%}
{%- set ultima_cte = ref(relacao) -%}
{%- if "sexo_id_sigtap" in colunas %}
{%- set ctes = [ref(relacao)] -%}
{#- Trocar códigos de categorias de sexo por nomes legíveis -#}
{%- set colunas_sexo_ids = filtrar_regex(colunas, ".*sexo.*_id.*") -%}
{%- for coluna_sexo_id in colunas_sexo_ids %}
{%- set coluna_sexo_nome=(
re.match("(.*sexo.*)_id.*", coluna_sexo_id).groups(1)[0]
) -%}
{%- set cte = "com_nomes_sexos_" + loop.index|string -%}
{{ nomear_sexos(
relacao=ultima_cte,
coluna_sexo_nome="sexo",
relacao=ctes|last,
coluna_sexo_nome=coluna_sexo_nome,
coluna_sexo_id=coluna_sexo_id,
todos_sexos_id=none,
cte_resultado="com_nomes_sexos"
cte_resultado=cte
) }},
{%- set ultima_cte = "com_nomes_sexos" -%}
{%- endif %}
{%- if "raca_cor_id_sigtap" in colunas %}
{%- set _ = colunas.append(coluna_sexo_nome) -%}
{%- set _ = ctes.append(cte) -%}
{%- endfor %}
{#- Trocar códigos de categorias de raça/cor por nomes legíveis -#}
{%- set colunas_raca_cor_ids = filtrar_regex(colunas, ".*raca_cor.*_id.*") -%}
{%- for coluna_raca_cor_id in colunas_raca_cor_ids %}
{%- set coluna_raca_cor_nome=(
re.match("(.*raca_cor.*)_id.*", coluna_raca_cor_id).groups(1)[0]
) -%}
{%- set cte = "com_nomes_racas_cores_" + loop.index|string -%}
{{ nomear_racas_cores(
relacao=ultima_cte,
coluna_raca_cor_nome="raca_cor",
todos_racas_cores_id=none,
cte_resultado="com_nomes_racas_cores"
relacao=ctes|last,
coluna_raca_cor_nome=coluna_raca_cor_nome,
coluna_raca_cor_id=coluna_raca_cor_id,
todas_racas_cores_id=none,
cte_resultado=cte
) }},
{%- set ultima_cte = "com_nomes_racas_cores" -%}
{%- endif %}
{%- if "estabelecimento_id_scnes" in colunas %}
{%- set _ = colunas.append(coluna_raca_cor_nome) -%}
{%- set _ = ctes.append(cte) -%}
{%- endfor %}
{#- Trocar códigos de estabelecimentos por nomes legíveis -#}
{%- set colunas_estabelecimento_ids = filtrar_regex(
colunas,
".*estabelecimento.*_id.*",
) -%}
{%- for coluna_estabelecimento_id in colunas_estabelecimento_ids -%}
{%- set coluna_estabelecimento_nome=(
re.match("(.*estabelecimento.*)_id.*", coluna_estabelecimento_id)
.groups(1)[0]
) -%}
{%- set cte = "com_linhas_estabelecimentos_" + loop.index|string -%}
{{ classificar_caps_linha(
relacao=ultima_cte,
relacao=ctes|last,
coluna_estabelecimento_id=coluna_estabelecimento_id,
coluna_linha_perfil="estabelecimento_linha_perfil",
coluna_linha_idade="estabelecimento_linha_idade",
cte_resultado="com_linhas_cuidado"
cte_resultado=cte
) }},
{%- set _ = ctes.append(cte) -%}
{%- set _ = colunas.append("estabelecimento_linha_perfil") -%}
{%- set _ = colunas.append("estabelecimento_linha_idade") -%}
{%- set ultima_cte = "com_linhas_cuidado" -%}
{%- endif %}
{%- if "estabelecimento_id_scnes" in colunas %}
{%- set cte = "com_nomes_estabelecimentos_" + loop.index|string -%}
{{ nomear_estabelecimentos(
relacao=ultima_cte,
coluna_estabelecimento_nome="estabelecimento",
cte_resultado="com_nomes_estabelecimentos"
relacao=ctes|last,
coluna_estabelecimento_id=coluna_estabelecimento_id,
coluna_estabelecimento_nome=coluna_estabelecimento_nome,
cte_resultado=cte
) }},
{%- set _ = colunas.append("estabelecimento") -%}
{%- set ultima_cte = "com_nomes_estabelecimentos" -%}
{%- endif %}
{%- set _ = ctes.append(cte) -%}
{%- endfor %}
{%- if (
"periodo_data_inicio" in colunas
) and (
"unidade_geografica_id" in colunas
)
%}
{%- set cte = "com_datas_legiveis" -%}
{{ adicionar_datas_legiveis(
relacao=ultima_cte,
cte_resultado="com_datas_legiveis"
relacao=ctes|last,
cte_resultado=cte
) }},
{%- set _ = colunas.append("periodo") -%}
{%- set _ = colunas.append("nome_mes") -%}
{%- set _ = colunas.append("periodo_ordem") -%}
{%- set ultima_cte = "com_datas_legiveis" -%}
{%- set _ = ctes.append(cte) -%}
{%- endif %}
{{ cte_resultado }} AS (
SELECT
Expand All @@ -99,6 +127,6 @@ SPDX-License-Identifier: MIT
{%- endif %}
{%- endif %}
{%- endfor %}
FROM {{ ultima_cte }}
FROM {{ ctes|last }}
)
{%- endmacro -%}
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ resumo AS (
(
tornandose_inativos - tornandose_inativos_anterior
) AS dif_tornandose_inativos_anterior,
sexo_predominante.sexo_predominante_id_sigtap AS sexo_id_sigtap,
sexo_predominante.sexo_predominante_id_sigtap,
sexo_predominante.sexo_predominante_quantidade,
idade_media.usuarios_idade_media,
now() AS atualizacao_data
Expand All @@ -148,7 +148,7 @@ resumo AS (
)
),
{{ ultimas_competencias(
relacao="final",
relacao="resumo",
fontes=[
"raas_psicossocial_disseminacao",
"bpa_i_disseminacao"
Expand Down