feat: domínio cotas_dbt (Meta 3) - #16
Merged
Merged
Conversation
There was a problem hiding this comment.
Pull request overview
Este PR cria o novo domínio dbt cotas_dbt (Meta 3) para auditar o cumprimento de cotas de ações afirmativas (LPG e PNAB) no schema cotas, adicionando modelos bronze/silver/gold, macros de normalização e documentação do pipeline. Também endurece o tratamento de .env (templates versionados vs segredos ignorados) e corrige sources.yml que estava com marcadores de conflito.
Changes:
- Adiciona o domínio dbt
cotas_dbtcompleto (staging/normalização/fatos/relatórios) + testes emschema.yml. - Introduz macros utilitárias (
sem_acento,parse_valor,normaliza_documento,ano_edital,coalesce_por_nome,distribuicao_cotas) para robustez contra dados sujos e geração das métricas. - Ajusta infraestrutura local (compose/env/healthcheck) e adiciona DAG de ingestão do crosswalk territorial IBGE.
Reviewed changes
Copilot reviewed 40 out of 43 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| local.env | Sanitiza e transforma em template sem segredos para variáveis locais. |
| infra/env/.env.example | Pequeno ajuste de formatação no exemplo de env. |
| infra/docker-compose.yml | Ajusta leitura de envs opcionais e healthcheck do MinIO; injeta vars bbágil via environment. |
| dbt/minc/models/sources.yml | Remove marcadores de conflito e unifica lista de sources/tables. |
| dbt/minc/models/cotas_dbt/silver/territorio_municipio.sql | Colapsa crosswalk IBGE por município e cria chave `municipio |
| dbt/minc/models/cotas_dbt/silver/schema.yml | Define descrições e testes (unique/not_null/accepted_values) do silver. |
| dbt/minc/models/cotas_dbt/silver/perfil_agentes_normalizado.sql | Unifica perfis LPG+PNAB, dedup por documento e cria flags (raça/PCD/indígena). |
| dbt/minc/models/cotas_dbt/silver/identificadores_agentes_cotas.sql | View auxiliar de identificadores distintos para auditoria/testes. |
| dbt/minc/models/cotas_dbt/silver/edital_ano_por_arquivo.sql | Deriva ano por nome_arquivo como fallback de datação. |
| dbt/minc/models/cotas_dbt/silver/edital_ano_por_anexo.sql | Deriva ano por anexo PNAB via abas de definição de edital. |
| dbt/minc/models/cotas_dbt/silver/editais_unif.sql | Unifica editais e deriva ano (reconciliação). |
| dbt/minc/models/cotas_dbt/silver/diag_valores_cortados.sql | Diagnóstico do impacto do teto de parsing (R$10M). |
| dbt/minc/models/cotas_dbt/silver/contemplados_unif.sql | Unifica contemplados LPG+PNAB, remove “lixo” de planilha e consolida datação em camadas. |
| dbt/minc/models/cotas_dbt/silver/bbagil_ente_ano.sql | Modelo bbágil (disabled) para datação/localização por ente. |
| dbt/minc/models/cotas_dbt/gold/schema.yml | Define descrições/testes para fatos e relatórios gold. |
| dbt/minc/models/cotas_dbt/gold/fct_pagamentos_elegiveis.sql | Fato “payment-first” (1 linha por pagamento) com flags e território. |
| dbt/minc/models/cotas_dbt/gold/fct_pagamentos_bbagil.sql | Fato bbágil (disabled) para valor pago real via banco. |
| dbt/minc/models/cotas_dbt/gold/distribuicao_cotas_pnab.sql | Relatório de cotas PNAB via macro compartilhada. |
| dbt/minc/models/cotas_dbt/gold/distribuicao_cotas_lpg.sql | Relatório de cotas LPG (inclui território) via macro compartilhada. |
| dbt/minc/models/cotas_dbt/gold/comparativo_recebido_vs_pago.sql | Comparativo recebido vs pago (disabled). |
| dbt/minc/models/cotas_dbt/gold/cobertura_pagamentos.sql | Relatório de cobertura por ano (perfil/temporal/valor). |
| dbt/minc/models/cotas_dbt/bronze/stg_editais.sql | Staging de editais/instrumentos com coalesce por nome e parse de valor. |
| dbt/minc/models/cotas_dbt/bronze/stg_contemplados_pnab.sql | Staging contemplados PNAB com normalização de documento e parsing de valor. |
| dbt/minc/models/cotas_dbt/bronze/stg_contemplados_lpg.sql | Staging contemplados LPG com normalização e parsing de valor. |
| dbt/minc/models/cotas_dbt/bronze/stg_bbagil.sql | Staging bbágil (disabled) para valor pago via banco. |
| dbt/minc/models/cotas_dbt/bronze/stg_agentes_pnab_pj.sql | Staging perfil PNAB PJ (raça/PCD do representante + CNPJ real). |
| dbt/minc/models/cotas_dbt/bronze/stg_agentes_pnab_pf.sql | Staging perfil PNAB PF (CPF real + raça/PCD/indígena/quilombola). |
| dbt/minc/models/cotas_dbt/bronze/stg_agentes_pj.sql | Staging perfil LPG PJ (base + variantes) com normalização de doc. |
| dbt/minc/models/cotas_dbt/bronze/stg_agentes_pf.sql | Staging perfil LPG PF (base + variantes) com normalização de doc. |
| dbt/minc/models/cotas_dbt/bronze/stg_agentes_coletivos.sql | Staging perfil LPG coletivos/grupos (base + variantes). |
| dbt/minc/models/cotas_dbt/bronze/schema.yml | Descrições e alguns testes básicos para bronze. |
| dbt/minc/macros/sem_acento.sql | Macro para normalização textual sem depender de unaccent. |
| dbt/minc/macros/parse_valor.sql | Macro robusta para converter valores monetários sujos em numeric com teto. |
| dbt/minc/macros/normaliza_documento.sql | Macros para normalizar CPF/CNPJ e detectar documento mascarado. |
| dbt/minc/macros/distribuicao_cotas.sql | Macro central que calcula distribuição de cotas por ano/programa. |
| dbt/minc/macros/coalesce_por_nome.sql | Macro para resolver schema-drift coalescendo colunas por nome real. |
| dbt/minc/macros/ano_edital.sql | Macro para extrair ano (validado) de texto de edital. |
| dbt/minc/docs/estado_meta3_cotas.md | Documento de estado/execução do pipeline e como rodar. |
| dbt/minc/docs/dicionario_dados_cotas.md | Dicionário de dados do schema cotas derivado do dbt. |
| dbt/minc/dbt_project.yml | Registra o domínio cotas_dbt e materializações por camada. |
| dags/data_ingest/territorio/ingest_territorio_fcu_dag.py | Nova DAG para carregar crosswalk IBGE (território) no Postgres raw. |
| .gitignore | Passa a ignorar .env reais globalmente e libera apenas templates/versionados. |
| .env.example | Ajuste de formatação (removendo indentação). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Comment on lines
+3
to
+7
| translate( | ||
| lower(coalesce({{ col }}, '')), | ||
| 'áàâãäéèêëíìîïóòôõöúùûüçñ', | ||
| 'aaaaaeeeeiiiiooooouuuucn' | ||
| ) |
| +materialized: incremental | ||
| views: | ||
| +materialized: view | ||
| # Meta 3 — cotas/reservas (LPG + PNAB). Domínio próprio, schema minc_cotas, |
davi-aguiar-vieira
self-requested a review
July 18, 2026 01:43
davi-aguiar-vieira
approved these changes
Jul 18, 2026
LuizaMaluf
added a commit
that referenced
this pull request
Jul 30, 2026
O painel foi publicado em 22/06/2026 como diagnóstico de viabilidade, propondo nominalmente pipelines que ainda não existiam. As PRs #15 e #16 implementaram parte deles com nomes diferentes dos previstos. Esta revisão alinha o painel ao que está de fato na main. Aba Histórico (nova) - Placar por meta: Meta 3 (21 models), Meta 5 (4 golds), Metas 2 e 4 (zero) - Linha do tempo dos 5 PRs (abr-jul/2026) com etiquetas de impacto por meta, reconstruída a partir dos corpos dos PRs e dos commits - Tabela de 7 bloqueios abertos com natureza e o que destrava cada um - Ressalva sobre o veredito de cota ser binário e calculado sobre a fatia com perfil conhecido, não sobre o valor total pago Correções de referência (o previsto vs. o implementado) - agg_cotas_anuais -> distribuicao_cotas_lpg / distribuicao_cotas_pnab - status_cota_* (3 valores) -> status_sobre_com_perfil (binário: 'alcancada' / 'descumprida'; não existe categoria 'superada') - pct_negras/pct_indigenas/pct_pcd/pct_territorio_vulneravel -> formato longo: coluna grupo + pct_sobre_total / pct_sobre_com_perfil - pct_com_perfil/pct_sem_ano -> cobertura_valor_pct / cobertura_pessoas_pct / cobertura_temporal_pct - chave_doc -> identificador_unico - territorios_vulnerabilizados -> territorio_municipio - stg_agentes -> os 5 stg_agentes_* - agg_cotas_rouanet e fct_captacao_elegiveis marcados com a convenção ✦ (model proposto, não existe no projeto) Status das metas - Meta 2: registra que a ingestão existe mas nenhum model dbt foi construído - Meta 3 PNAB: denominador mede repasse a entes, não pagamento a pessoas; 4 models bbágil escritos com enabled=false, bloqueados por VPN - Meta 5 LPG/PNAB: cruzamento entre mecanismos passa de 'menor prioridade' para parcial — perfil_acesso_fomento.sequencia_fomento já identifica quem aparece nos dois programas, com 3 ressalvas (ordenação alfabética e não cronológica, base é ficha de inscrição e não contemplação, CPF PNAB PF anonimizado) - Meta 5 Rouanet: 'menor prioridade' -> 'bloqueado por falta de ingestão do SALIC'. Não é despriorização: o repositório não tem nenhum model, DAG ou source de SALIC/PRONAC/FSA. A contraparte Transferegov do cruzamento (identificadores_agentes) já está pronta Correção de bug pré-existente - '<R$360k' sem escape na aba Meta 2 fazia o browser parsear como tag e engolir o texto seguinte; virou '<R$360k' Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
LuizaMaluf
added a commit
that referenced
this pull request
Jul 30, 2026
Auditoria de cada meta contra o codigo da main, mais uma matriz Meta x Politica no topo da tela e correcoes de layout. Revisao meta por meta - Meta 2: 'Respondido' contradizia o proprio item abaixo dizendo que nao existe model nenhum. Virou 'Parcial - dado bruto sim, indicador nao'. Os ~R$2,9bi nao sao produzidos por nenhum SQL, teste ou doc do projeto (so aparecem no painel) - marcado como numero do diagnostico. Faltava o bloco Rouanet inteiro: a meta fala de recursos aplicados na cultura e a renuncia fiscal nao era avaliada. Adicionado como lacuna. - Meta 3: separada a cota territorial das outras tres. As de raca, etnia e PCD estao implementadas; a de territorio (20%) casa por nome de municipio e so ~47,5% dos pagamentos casam, entao o percentual e um piso. Adicionada a ressalva de que o veredito usa pct_sobre_com_perfil e nao o valor total pago que o PNC exige. - Meta 4: 'base_territorio_vulnerave' com 'flag_vulneravel' e 'flag_periferia' nunca existiu (git grep = 0). O que a PR #16 ingeriu e territorio_fcu_setores -> territorio_municipio com flag_territorio_vulneravel, sem flag_periferia separada. Adicionado bloco PNAB/LPG: a meta vale para essas politicas e a infraestrutura territorial existe e esta em uso na Meta 3 - e lacuna de escopo, nao de dado. - Meta 5: os '39,11% de novos entrantes' nao saem de nenhum model, e o metodo divergiu - o diagnostico media contemplacao cruzada entre ciclos, o pipeline combina autodeclaracao com flag de contemplacao. Extraidas duas ressalvas documentadas nos comentarios do proprio primeiro_acesso_contemplados: o CPF mascarado casa pelos 6 digitos centrais com risco de colisao, e a ingestao nao normaliza NBSP nos cabecalhos, criando colunas duplicadas contornadas via information_schema. - Rouanet: os 'Parcial' sugeriam progresso distribuido quando ha um unico bloqueio. Cada bloco agora abre com 'Bloqueio comum a toda a Rouanet' e os itens viraram 'Mapeado'. Confirmado por git grep: zero referencias a SALIC, PRONAC ou FSA no repositorio, e sources.yml declara apenas transferegov_fundo_a_fundo e bsc_pnab. Matriz Meta x Politica - Grid 4x3 clicavel no topo (12 celulas: 2 verdes, 4 azuis, 6 amarelas), cada uma com glifos de status, a limitacao que mais importa e contagem de itens. Clique rola ao bloco de detalhe e pisca. - Eixo de politica normalizado para LPG / PNAB / Rouanet. Onde o painel tinha bloco combinado, as duas celulas apontam ao mesmo ancora e dizem isso - sem fabricar simetria que nao existe. - Aviso de assimetria virou legenda da matriz, explicando por que a coluna Rouanet e uniforme. Layout - .vm-politicas saiu de auto-fill para 3 colunas fixas, alinhando o detalhe ao eixo da matriz; blocos combinados usam span 2. Media query colapsa em 1 coluna abaixo de 880px. - Status deixou de ser coluna fixa de 90px e virou badge acima do titulo - os rotulos longos nao quebram mais em 4 linhas. - auto-fill -> auto-fit nas 7 regras de grid restantes: auto-fill reserva trilhas de 280px mesmo sem conteudo, encostando os itens a esquerda em telas largas. Afetava .resp-grid (2 instancias), .bloco-grid (1) e .col-grid (2, com um unico filho cada). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Meta 3 — Domínio
cotas_dbt(cotas de ações afirmativas)Adiciona o domínio dbt que audita o cumprimento das cotas de ações afirmativas (raça/cor, PCD, indígena e território) da LPG e da PNAB, no schema
cotas. Também organiza a segurança dos.enve documenta o pipeline.O que este PR entrega
Modelos dbt (21 modelos + 6 macros) — arquitetura medalhão bronze -> silver -> gold:
perfil_agentes_normalizado(dedup por documento),contemplados_unif(núcleo do lado-valor + datação de ano em 3 camadas + limpeza de lixo de planilha),territorio_municipio(crosswalk IBGE).fct_pagamentos_elegiveis(fato, 1 linha/pagamento),cobertura_pagamentos, e as cotas separadas por programa:distribuicao_cotas_lpg(4 cotas, incl. território 20%) edistribuicao_cotas_pnab(3 cotas).Resultados:
Documentação (
dbt/minc/docs/): estado do projeto (feito / em progresso / a fazer) + dicionário de dados do schemacotas.Correção incidental
Este PR também corrige o
dbt/minc/models/sources.yml, que está na main com marcadores de conflito não resolvidos (<<<<<<</=======/>>>>>>>, herdados da PR #15). As listas de sources foram unidas corretamente.Fora do escopo (aguardando)
stg_bbagil,fct_pagamentos_bbagiletc.) estão incluídos mas desabilitados (enabled=false) até a extração gerarbsc_pnab.fato_bbagil.