Skip to content

feat: domínio cotas_dbt (Meta 3) - #16

Merged
davi-aguiar-vieira merged 1 commit into
mainfrom
feature/cotas-meta3
Jul 18, 2026
Merged

feat: domínio cotas_dbt (Meta 3)#16
davi-aguiar-vieira merged 1 commit into
mainfrom
feature/cotas-meta3

Conversation

@ananunesv

Copy link
Copy Markdown
Collaborator

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 .env e documenta o pipeline.

O que este PR entrega

Modelos dbt (21 modelos + 6 macros) — arquitetura medalhão bronze -> silver -> gold:

  • Bronze: staging de perfil (LPG + PNAB) e de contemplados, com chave de documento normalizada.
  • Silver: 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).
  • Gold: fct_pagamentos_elegiveis (fato, 1 linha/pagamento), cobertura_pagamentos, e as cotas separadas por programa: distribuicao_cotas_lpg (4 cotas, incl. território 20%) e distribuicao_cotas_pnab (3 cotas).

Resultados:

  • Cotas LPG completas: negra (25%), indígena (10%), PCD (5%), território vulnerabilizado (20%).
  • Cotas PNAB: negra, indígena, PCD.
  • Cobertura de ano: 56,2% -> 61,6% (nova camada de datação por nome de arquivo).

Documentação (dbt/minc/docs/): estado do projeto (feito / em progresso / a fazer) + dicionário de dados do schema cotas.

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)

  • Modelos bbágil (stg_bbagil, fct_pagamentos_bbagil etc.) estão incluídos mas desabilitados (enabled=false) até a extração gerar bsc_pnab.fato_bbagil .
  • Querido Diário e refino do casamento territorial: planejados, documentados.

Copilot AI review requested due to automatic review settings July 16, 2026 03:31

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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_dbt completo (staging/normalização/fatos/relatórios) + testes em schema.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'
)
Comment thread dbt/minc/dbt_project.yml
+materialized: incremental
views:
+materialized: view
# Meta 3 — cotas/reservas (LPG + PNAB). Domínio próprio, schema minc_cotas,
@davi-aguiar-vieira
davi-aguiar-vieira self-requested a review July 18, 2026 01:43
@davi-aguiar-vieira
davi-aguiar-vieira merged commit 71e162f into main Jul 18, 2026
6 checks passed
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 '&lt;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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants