Adiciona scripts de validação pós transmissão de listas nominais #55
Adiciona scripts de validação pós transmissão de listas nominais #55waltmatheus wants to merge 1 commit intomainfrom
Conversation
…s no contexto de alterações no código fonte das listas
WalkthroughAs mudanças implementam três scripts SQL destinados à validação de dados nominais para registros de diabetes, hipertensão e citopatologia. Cada script cria uma tabela temporária para armazenar contadores (linhas, chaves e métricas específicas), executa consultas dinâmicas sobre tabelas de dados nominais e utiliza CTEs para pivotar os resultados, permitindo a comparação entre os dados antes e após as alterações. Changes
Sequence Diagram(s)sequenceDiagram
participant S as SQL Script
participant D as Executor Dinâmico
participant T as Tabela Temporária
participant P as CTE/Pivot
S->>D: Iterar sobre tabelas "dados_nominais_..."
D->>T: Inserir estatísticas coletadas
T->>P: Consolidar dados via CTE Pivot
P->>S: Retornar resultado agregado
Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Tip 🌐 Web search-backed reviews and chat
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (4)
validacoes_listas_nominais/validacoes_pos_transmissao_lista_nomical_diabetes.sql (3)
1-17: Sugestão: Utilizar "IF NOT EXISTS" na criação da tabela temporária.
O comentário indica a intenção de criar a tabela apenas se ela não existir, mas o comando atual é apenas "CREATE TEMP TABLE". Considere usar "CREATE TEMP TABLE IF NOT EXISTS validacao_lista_nominal_diabeticos (...)" para evitar erros em execuções sucessivas ou em contextos de testes repetidos.
27-81: Construção dinâmica da consulta de inserção.
A utilização do comando "EXECUTE format(...)" com os placeholders %L e %I previne problemas de injeção SQL e garante a formatação correta dos identificadores e literais.
- É recomendado verificar se os campos usados na concatenação (por exemplo, "cidadao_nome||dt_nascimento") possuem os tipos ou conversões esperados, a fim de evitar possíveis inconsistências na união dos valores.
De modo geral, a estrutura da query dinâmica com os CTEs "duplicados" e "dem_num", bem como a junção entre eles, está correta e clara.
86-184: Consulta de pivotagem e agregação dos dados.
A construção do CTE "tabela_pivotada" utiliza corretamente as funções de agregação combinadas com instruções CASE para consolidar os dados antes e depois da alteração.
- Os cálculos de variação, realizados via subtração dos totais "antes" e "depois", facilitam a análise comparativa dos dados dos registros.
- Recomenda-se a inclusão de comentários adicionais explicando cada métrica (por exemplo, para "cont_linhas_diabetes_variacao" ou "numerador_diabetes_variacao") para melhorar a legibilidade e manutenção futura do script, especialmente considerando que scripts semelhantes são utilizados para outros conjuntos de dados.
validacoes_listas_nominais/validacoes_pos_transmissao_lista_nomical_hipertensao.sql (1)
5-17: Sugestão: Uso de IF NOT EXISTS na criação da tabela temporáriaEmbora o comentário indique "Criar a tabela se ela não existir", a instrução SQL não utiliza o modificador
IF NOT EXISTS. Recomendo atualizar para evitar erros caso a tabela já exista na sessão. Além disso, verifique se o nome da colunacidadaos_com_consulta_sem_diagnoticoestá intencionalmente escrito dessa forma ou se trata de um possível erro de digitação (talvez "diagnostico").
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
validacoes_listas_nominais/validacoes_pos_transmissao_lista_nomical_diabetes.sql(1 hunks)validacoes_listas_nominais/validacoes_pos_transmissao_lista_nomical_hipertensao.sql(1 hunks)validacoes_listas_nominais/validacoes_pos_transmissao_lista_nominal_citopatologico.sql(1 hunks)
🔇 Additional comments (11)
validacoes_listas_nominais/validacoes_pos_transmissao_lista_nomical_diabetes.sql (2)
19-25: Validação da consulta de iteração sobre as tabelas.
A consulta que percorre os schemas com prefixo "dados_nominais_" e filtra os nomes "lista_nominal_diabeticos" e "lista_nominal_diabeticos_obsoleta" está bem construída. Certifique-se de que todos os schemas relevantes seguem este padrão para garantir que nenhuma tabela seja omitida ou considerada indevidamente.
82-83: Fechamento correto do bloco anônimo.
O loop e o bloco anônimo (DO $$ ... end; $$;) estão devidamente encerrados, garantindo a execução isolada do script.validacoes_listas_nominais/validacoes_pos_transmissao_lista_nominal_citopatologico.sql (5)
16-21: Revisão da iteração sobre as tabelas.
A lógica que itera sobre as tabelas dos schemas que começam comdados_nominais_e as filtra pelos nomes'lista_nominal_citopatologico'e'lista_nominal_citopatologico_obsoleta'está clara e atende ao propósito de agregar os dados de validação.
23-56: Validação do dynamic SQL e uso de CTEs.
A construção do dynamic SQL com a funçãoEXECUTE format()e a utilização das CTEs (duplicadosedem_num) tornam o script flexível e legível. Utilizar os placeholders%Le%Igarante a correta formatação dos literais e identificadores, minimizando riscos de injeção SQL. Apenas certifique-se de que os valores passados (comor.table_schemaer.table_name) estejam corretos e adequadamente escapados conforme as necessidades do ambiente de execução.
63-67: Verificação da consulta adicional.
A consulta realizada em linhas 63 a 67 busca informações nainformation_schema.tablespara uma tabela chamadatemp_transmissor_validacao_listas_nominais. No entanto, o script principal cria e utiliza a tabela temporáriavalidacao_lista_nominal_citopatologico. É importante confirmar se essa consulta extra é necessária para o fluxo de validação ou se pode ser um resquício do código anterior.
69-123: Análise da consulta pivotada.
A consulta com a CTEtabela_pivotadaconsolida os resultados de validação de forma clara, agregando os dados porschema_nomee realizando cálculos para determinar as variações dos registros (antes e depois da alteração). Os casos condicionais utilizandoCASEparecem estar estruturados adequadamente. Verifique se os nomes das tabelas (lista_nominal_citopatologicoelista_nominal_citopatologico_obsoleta) e os cálculos realizados (diferenças entre as contagens) estão de acordo com os requisitos do processo de validação.
5-13: Sugestão para criação da tabela temporária.
A tabelavalidacao_lista_nominal_citopatologicoé criada sem a cláusulaIF NOT EXISTS, embora o comentário indique a criação condicional ("se ela não existir"). Para evitar erros em execuções repetidas na mesma sessão, considere utilizar:CREATE TEMP TABLE IF NOT EXISTS validacao_lista_nominal_citopatologico ( schema_nome TEXT, table_name text, cont_linhas BIGINT, cont_chaves_nominais_distintas BIGINT, denominador_cito BIGINT, numerador_cito BIGINT );validacoes_listas_nominais/validacoes_pos_transmissao_lista_nomical_hipertensao.sql (4)
19-25: Comentário: Iteração sobre tabelas de dados nominaisA consulta para iterar sobre as tabelas com schema iniciando em
dados_nominais_e filtrando porlista_nominal_hipertensoselista_nominal_hipertensos_obsoletaestá bem construída e cumpre seu objetivo.
54-65: Validação: Correspondência dos campos no INSERTA estrutura do
INSERT INTOe a seleção dos campos dos CTEsdem_numeduplicadosestão consistentes. Certifique-se de que a correspondência dos dados para cada coluna na tabela de validação atende aos requisitos definidos para a validação dos dados nominais de hipertensos.
82-83: Comentário: Finalização correta do bloco PL/pgSQLA finalização do bloco de iteração com
END LOOP;e o término do bloco comend; $$;estão corretos e bem estruturados.
86-184: Revisão: Lógica de Pivotagem e AgregaçãoA consulta que utiliza a CTE
tabela_pivotadapara realizar a pivotagem e sumarizar os contadores antes e depois das alterações está bem elaborada. Ela utiliza instruçõesSUMcom condições definidas viaCASEpara calcular as variações dos diversos indicadores.
Recomendo revisar se os critérios aplicados (por exemplo, a identificação das tabelas antigas versus novas) estão alinhados com os requisitos de validação dos dados. Além disso, confirme que os nomes dos campos, especialmente aqueles com possível erro de digitação (comocidadaos_com_consulta_sem_diagnotico), estejam consistentes em todas as partes do script.
| EXECUTE format( | ||
| 'WITH duplicados AS ( | ||
| SELECT | ||
| %L AS table_schema, | ||
| %L AS table_name, | ||
| COUNT(1) AS cont_linhas, | ||
| COUNT(DISTINCT cidadao_nome||dt_nascimento) AS cont_chaves_nominais_distintas | ||
| FROM %I.%I | ||
| GROUP BY 1 | ||
| ) | ||
| -- Checar denominador e numerador | ||
| , dem_num AS ( | ||
| SELECT | ||
| %L AS table_schema, | ||
| %L AS table_name, | ||
| count(DISTINCT l.cidadao_nome||l.dt_nascimento) AS hipertensao_denominador, | ||
| count(DISTINCT CASE WHEN l.possui_hipertensao_autorreferida IS TRUE THEN l.cidadao_nome||l.dt_nascimento END) AS cidadaos_autorreferidos, | ||
| count(DISTINCT CASE WHEN l.possui_hipertensao_diagnosticada IS TRUE THEN l.cidadao_nome||l.dt_nascimento END) AS cidadaos_diagnosticados, | ||
| count(DISTINCT CASE | ||
| WHEN l.realizou_consulta_ultimos_6_meses IS TRUE AND realizou_afericao_ultimos_6_meses IS TRUE | ||
| THEN l.cidadao_nome||l.dt_nascimento | ||
| END) AS numerador_hipertensao, |
There was a problem hiding this comment.
Correção: Qualificação completa do alias na condição CASE
Na definição do CASE para calcular numerador_hipertensao, a condição utiliza l.realizou_consulta_ultimos_6_meses IS TRUE corretamente, porém a segunda condição não está qualificada com o alias (realizou_afericao_ultimos_6_meses IS TRUE). É recomendado incluir o alias para evitar ambiguidade ou erro de coluna não encontrada.
- WHEN l.realizou_consulta_ultimos_6_meses IS TRUE AND realizou_afericao_ultimos_6_meses IS TRUE
+ WHEN l.realizou_consulta_ultimos_6_meses IS TRUE AND l.realizou_afericao_ultimos_6_meses IS TRUE 📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| EXECUTE format( | |
| 'WITH duplicados AS ( | |
| SELECT | |
| %L AS table_schema, | |
| %L AS table_name, | |
| COUNT(1) AS cont_linhas, | |
| COUNT(DISTINCT cidadao_nome||dt_nascimento) AS cont_chaves_nominais_distintas | |
| FROM %I.%I | |
| GROUP BY 1 | |
| ) | |
| -- Checar denominador e numerador | |
| , dem_num AS ( | |
| SELECT | |
| %L AS table_schema, | |
| %L AS table_name, | |
| count(DISTINCT l.cidadao_nome||l.dt_nascimento) AS hipertensao_denominador, | |
| count(DISTINCT CASE WHEN l.possui_hipertensao_autorreferida IS TRUE THEN l.cidadao_nome||l.dt_nascimento END) AS cidadaos_autorreferidos, | |
| count(DISTINCT CASE WHEN l.possui_hipertensao_diagnosticada IS TRUE THEN l.cidadao_nome||l.dt_nascimento END) AS cidadaos_diagnosticados, | |
| count(DISTINCT CASE | |
| WHEN l.realizou_consulta_ultimos_6_meses IS TRUE AND realizou_afericao_ultimos_6_meses IS TRUE | |
| THEN l.cidadao_nome||l.dt_nascimento | |
| END) AS numerador_hipertensao, | |
| EXECUTE format( | |
| 'WITH duplicados AS ( | |
| SELECT | |
| %L AS table_schema, | |
| %L AS table_name, | |
| COUNT(1) AS cont_linhas, | |
| COUNT(DISTINCT cidadao_nome||dt_nascimento) AS cont_chaves_nominais_distintas | |
| FROM %I.%I | |
| GROUP BY 1 | |
| ) | |
| -- Checar denominador e numerador | |
| , dem_num AS ( | |
| SELECT | |
| %L AS table_schema, | |
| %L AS table_name, | |
| count(DISTINCT l.cidadao_nome||l.dt_nascimento) AS hipertensao_denominador, | |
| count(DISTINCT CASE WHEN l.possui_hipertensao_autorreferida IS TRUE THEN l.cidadao_nome||l.dt_nascimento END) AS cidadaos_autorreferidos, | |
| count(DISTINCT CASE WHEN l.possui_hipertensao_diagnosticada IS TRUE THEN l.cidadao_nome||l.dt_nascimento END) AS cidadaos_diagnosticados, | |
| count(DISTINCT CASE | |
| WHEN l.realizou_consulta_ultimos_6_meses IS TRUE AND l.realizou_afericao_ultimos_6_meses IS TRUE | |
| THEN l.cidadao_nome||l.dt_nascimento | |
| END) AS numerador_hipertensao, |
Alterações de código das listas nominais
Motivo do ajuste:
Adiconar scripts para facilitar a validação das listas nominais pós transmissão no contexto de alterações do código fonte das listas a serem transmitidas. O script incui a leitura de todas as tabelas de municípios com transmissores.
Validações quantitativas
Análises quantitativas nessa planilha
Summary by CodeRabbit