Voto Consciente

Metodologia

Explicações sobre como o Voto Consciente funciona em duas versões: uma para o público geral e outra detalhada para pesquisadores, desenvolvedores e curiosos.

Para o público geral

Em linguagem simples: o que cada número significa e como interpretar.

De onde vêm os dados

Tudo o que você vê neste site vem da API pública da Câmara dos Deputados (dadosabertos.camara.leg.br): votos, presenças, gastos, proposições e discursos. Os dados são atualizados periodicamente — a data da última atualização aparece no topo de cada página.

As 5 métricas que avaliamos

  • Presença Geral: o quanto o deputado compareceu às sessões do plenário.
  • Presença em Comissão: o quanto compareceu às reuniões das comissões em que atua, somadas ao plenário.
  • Gastos CEAP: quanto gastou em média por mês com a Cota Parlamentar (passagens aéreas, hospedagem, alimentação, etc.).
  • Proposições aprovadas: quantos projetos de autoria dele foram aprovados em pelo menos uma etapa.
  • Independência partidária: com que frequência votou diferente da orientação oficial do próprio partido.

Nota geral do deputado (Score composto)

É uma nota de 0 a 100 que junta as 5 métricas em um único número. Mas o que conta como “bom deputado” depende dos seus valores — por isso você pode ajustar o peso de cada métrica nos controles da listagem de deputados. A comparação é feita sempre entre deputados do mesmo estado, para não comparar realidades muito diferentes.

Gráfico de Gastos CEAP

Mostra três informações por mês:

  • O quanto o deputado gastou.
  • A média mensal do estado dele.
  • A faixa típica de variação entre os colegas do mesmo estado.

Pontos em vermelho indicam meses em que o gasto do próprio deputado superou o dobro da média mensal dele — é uma comparação com o próprio histórico, não com a média do estado. É possível ter um mês sem alerta vermelho mesmo gastando bem acima da média do estado (o deputado pode gastar consistentemente alto) e, inversamente, um mês com alerta vermelho mesmo abaixo da média do estado (se o histórico do deputado é baixo, qualquer pico dobra a média dele).

Buscar discursos

A busca encontra discursos com significado próximo, não só palavras exatas. Por exemplo: buscar “criança” também encontra discursos sobre “infância”, “adolescentes” ou “menores”.

Resumo IA e Chat IA do deputado

O Resumo IA gera um texto curto sobre o deputado a partir das estatísticas (presença, votações, gastos) combinadas com seus discursos mais representativos. O Chat IA permite fazer perguntas sobre o mesmo conjunto de informações. Ambos são gerados por modelos de linguagem (IA) e podem conter erros ou imprecisões — sempre confira as fontes nas outras abas do perfil.

Afinidade política (quiz)

Você responde Sim ou Não a perguntas baseadas em votações reais da Câmara. O site mostra os deputados que votaram da mesma forma que você nessas votações. Pode filtrar por estado (UF) para ver os candidatos da sua região.

Mapa de Discursos

Cada deputado é um ponto no gráfico. Pontos próximos = deputados que falam dos mesmos temas. A cor indica o tema principal de cada um, descoberto automaticamente a partir do conteúdo das próprias falas (não é uma lista pré-definida).

Mapa de Votação

Parecido com o Mapa de Discursos, mas baseado em como os deputados votaram, não no que falaram. Os blocos coloridos são grupos que costumam votar juntos. A porcentagem que aparece ao lado de cada bloco (ex.: “PL · UNIÃO · MDB — 64%”) mede o quanto o padrão de voto do deputado se alinha àquele bloco — quanto maior, mais alinhado.

Explorar — gráfico personalizado

A página Explorar deixa você montar qualquer combinação de métricas dos deputados num gráfico. Escolha o que vai no eixo horizontal, no eixo vertical, o que determina a cor e o tamanho dos pontos — a partir de cerca de 20 indicadores disponíveis (presença, gastos, ideologia, agressividade, votos, discursos e mais).

Além do gráfico de dispersão, você pode alternar para Tabela ou Barras: escolha uma categoria (partido, estado, alinhamento) para agrupar os deputados e veja a média, mediana ou contagem de qualquer métrica por grupo.

Também há uma caixa de pergunta em linguagem natural: escreva o que quer ver (ex.: “deputados mais agressivos do PL vs PT”) e uma IA escolhe automaticamente quais métricas colocar em cada eixo. A URL é atualizada e pode ser compartilhada.

Análise de Discurso (IA)

Uma IA lê cada discurso e dá três notas de 1 a 100: o quão agressivo é o tom, a posição em uma escala social (progressista ↔ conservador) e em uma escala econômica (estatista ↔ liberal). Também identifica alvos nomeados que o discurso critica ou elogia (pessoas, partidos, instituições, grupos).

A IA não analisa todos os discursos — a Câmara registra dezenas de milhares por legislatura. Para cada deputado e ano, priorizamos as falas com maior probabilidade de revelar posicionamentos reais: discursos que citam projetos de lei específicos, falas em dias de votação nominal e discursos de líderes ou relatores. Os demais são representados por uma amostra diversificada por tema. No total, cerca de 30% do corpus (≈ 13 000–15 000 discursos por legislatura) é enviado para análise.

O que este site NÃO faz

  • Não recomenda em quem votar. Apresenta dados públicos para você pesquisar e decidir.
  • “Votou Sim” não significa apoio à causa: depende sempre do texto da proposição. Consulte o conteúdo antes de tirar conclusões.
  • Independência partidária alta não é necessariamente boa nem ruim — depende dos seus valores.
  • Análises geradas por IA podem conter erros e devem ser auditadas contra os dados originais.
  • Deputados que tomaram posse depois do início da legislatura podem ter números proporcionalmente distorcidos.

Para pesquisadores, desenvolvedores e curiosos

Fontes, fórmulas, modelos, parâmetros, filtros e referências.

Fonte de dados

Todos os dados vêm exclusivamente da API pública da Câmara dos Deputados (dadosabertos.camara.leg.br). Cobrimos a 57ª Legislatura (2023–2027). Os dados são atualizados periodicamente via ETL automatizado com sua respectiva data da última atualização no topo de cada página.

Métricas individuais

Presença Geral (%)

Proporção de sessões plenárias em que o deputado registrou presença, sobre o total de sessões plenárias do período. O plenário é o único tipo de evento com denominador idêntico para todos os deputados, tornando a comparação justa. Faltas justificadas não são consideradas presença.

Melhor: Alto percentualPior: Baixo percentual

Presença em Comissão (%)

Proporção de eventos das próprias comissões do deputado, mais as sessões plenárias, em que ele efetivamente compareceu, sobre o total de eventos esperados no período. Mede o engajamento nas atividades legislativas ordinárias, onde a maior parte do trabalho técnico acontece antes de chegar ao plenário.

Melhor: Alto percentualPior: Baixo percentual

CEAP — Cota para Exercício da Atividade Parlamentar

Média mensal dos gastos do deputado com a CEAP (passagens aéreas, hospedagem, alimentação, combustível, etc.). Usar a média mensal, em vez do total, normaliza a comparação entre deputados que ocuparam o cargo por períodos diferentes. A cota máxima mensal varia por estado (entre R$ 30 mil e R$ 46 mil). No score composto, menor gasto é melhor: o percentil da CEAP é invertido antes de ser ponderado.

Melhor: Gasto baixoPior: Gasto alto

Proposições aprovadas

Quantidade de proposições das quais o deputado é autor principal ou coautor que foram aprovadas em pelo menos uma etapa do processo legislativo (comissão ou plenário). Não exige sanção presidencial; propostas aprovadas em comissão já contam.

Melhor: Número maiorPior: Zero ou baixo

Independência partidária (%)

Fração de votações em que o deputado votou de forma diferente da orientação oficial do seu partido (excluindo votações em que o partido liberou a bancada). Uma independência alta pode indicar postura crítica ou simplesmente desalinhamento ideológico, logo, interprete com cautela.

Melhor: Alto (vota diferente do partido com frequência)Pior: Baixo (segue sempre o partido)

Gastos CEAP — gráfico mensal

A aba Gastos CEAP mostra três séries no gráfico de gasto mensal:

  • Deputado: total de CEAP do próprio parlamentar naquele mês.
  • Média UF: média mensal dos demais deputados do mesmo estado e legislatura — referência de comparação com o grupo.
  • Faixa UF (±1σ): faixa cinza ao redor da média da UF, correspondente a ±1 desvio padrão. Mostra a dispersão dos gastos entre os colegas do mesmo estado: quanto mais larga a faixa, mais heterogêneo o comportamento de gasto na UF naquele mês.

Pontos vermelhos no gráfico (alerta de gasto)

Um mês é destacado em vermelho quando o gasto do deputado supera 2× a sua própria média mensal ao longo da legislatura. É um indicador de variação dentro do histórico do próprio deputado, não uma comparação com a média da UF.

Concretamente, o cálculo é:

média_dep = soma dos totais mensais do deputado ÷ nº de meses
alerta no mês m ⟺ total_dep[m] > 2 × média_dep

Por isso é possível ver um mês sem alerta vermelho mesmo quando o gasto está bem acima da Média UF (o deputado pode gastar consistentemente acima do grupo) e, inversamente, um mês com alerta mesmo abaixo da Média UF (se o deputado tem um padrão historicamente baixo, qualquer pico sai do dobro da média dele).

Score composto

O score composto é uma média ponderada dos cinco percentis estaduais. Para cada deputado, calculamos o percentil dele em relação aos demais deputados do mesmo estado na 57ª Legislatura.

score = (w₁ × P_presença_geral + w₂ × P_presença_comissão
         + w₃ × (1 − P_ceap) + w₄ × P_proposições + w₅ × P_independência)
         ÷ (w₁ + w₂ + w₃ + w₄ + w₅)

Os pesos (w₁–w₅) variam de 0 a 5 e podem ser ajustados nos controles da listagem de deputados. O valor padrão é 1 para todos. O resultado fica entre 0 e 100, por exemplo, um score de 80 significa que o deputado está melhor que 80% dos colegas do estado de acordo com os pesos escolhidos.

Busca de discursos

Os discursos e notas taquigráficas são coletados da API da Câmara e indexados com dois mecanismos combinados:

  • Busca textual (FTS): PostgreSQL full-text search com dicionário português, que encontra discursos que contêm as palavras da busca ou variações morfológicas.
  • Busca semântica (vetorial): cada discurso é convertido em um vetor de 384 dimensões pelo modelo paraphrase-multilingual-MiniLM-L12-v2. A busca encontra discursos com significado próximo ao da consulta, mesmo sem correspondência exata de palavras.
  • Score híbrido: o ranking final combina os dois métodos, 40% peso textual + 60% peso semântico, priorizando relevância de conteúdo.

Resumo por IA

O resumo de cada deputado é gerado por um modelo de linguagem (Claude) a partir de dados estruturados combinados com até 5 discursos representativos. Esses discursos são selecionados por proximidade ao centróide semânticodo deputado: calcula-se a média de todos os seus vetores de discurso, e os 5 mais próximos dessa média são os que melhor representam os temas que ele aborda com mais consistência. Discursos esporádicos ou fora do padrão habitual ficam distantes do centróide e não são incluídos.

Afinidade política

O quiz de afinidade compara as respostas do eleitor com os votos efetivos dos deputados em votações nominais reais da Câmara, sobre temas selecionados pela curadoria.

  1. Cada pergunta é amarrada a uma proposição específica e à votação correspondente. A pergunta indica qual é o significado do voto “Sim” naquele contexto (ex.: aprovar a redação atual, ampliar um direito, etc.).
  2. Para cada deputado, contamos quantas das suas perguntas respondidas pelo eleitor correspondem ao voto real do deputado. Votos “Ausente” e “Abstenção” não entram no cálculo, apenas Sim e Não são comparáveis.
  3. Score de afinidade = perguntas casadas ÷ perguntas comparáveis. Resultado entre 0 e 100%.
  4. Mostramos os 5 deputados mais alinhados, exigindo no mínimo 2 perguntas comparáveis para evitar ranking baseado em uma única coincidência.

O detalhamento de cada match é exibido junto ao resultado: você pode ver pergunta a pergunta como o deputado votou e por quê foi (ou não) considerado um match.

Mapa de Discursos

O Mapa posiciona cada deputado em um plano 2D de acordo com a semelhança entre os temas dos seus discursos. Os temas não são uma lista fixa e são descobertos a partir do conteúdo das próprias falas:

  1. Cada discurso vira um vetor de 384 dimensões pelo modelo de IA paraphrase-multilingual-MiniLM-L12-v2, o mesmo usado na busca semântica.
  2. Os vetores passam por UMAP para reduzir a dimensionalidade e por HDBSCAN para agrupar discursos com significado próximo. Cada grupo é um tema. Discursos que não se encaixam em nenhum grupo são marcados como ruído e ficam de fora dos clusters.
  3. Cada tema recebe um rótulo automático com as palavras-chave mais distintivas do grupo (TF-IDF). Os rótulos são cruas, ou seja, em vez de “Saúde” você pode ver “câncer, doenças, pacientes”. Isso é proposital: o tema vem dos dados, não de uma categoria pré-definida.
  4. Para cada deputado calculamos um vetor de afinidade temática (a fração dos seus discursos em cada tema). O UMAP 2D sobre essa matriz produz as coordenadas no mapa: deputados com misturas temáticas parecidas ficam próximos.
  5. A cor de cada ponto é o tema dominante do deputado. O tamanho é proporcional à raiz quadrada do nº de discursos, assim, quem fala mais aparece maior.

O mapa é recalculado a cada atualização dos dados. Os agrupamentos podem mudar de uma execução para outra (mesmo com os mesmos discursos, o UMAP introduz alguma variação). Interprete padrões e proximidades relativas, não posições absolutas.

Mapa de Votação

O Mapa de Votação posiciona cada deputado em um plano 2D de acordo com a similaridade do seu padrão de votação nominal em plenário. Os blocos não são as bancadas oficiais e são descobertos a partir dos votos efetivamente registrados:

  1. Construímos uma matriz deputado × votação apenas com votações nominais da 57ª Legislatura. Cada célula recebe +1 (Sim), −1 (Não), 0 (Abstenção / Obstrução / Branco) ou fica vazia (Ausente).
  2. Filtramos votações pouco informativas: as com menos de 50 votos registrados e as quase-unânimes (mais de 95% dos deputados votando do mesmo lado) são removidas, porque não distinguem blocos. Deputados com menos de 50% de participação também saem do mapa, senão a imputação dos votos faltantes puxaria esses deputados artificialmente para o bloco majoritário.
  3. Os votos faltantes restantes são preenchidos com a média da votação. Em seguida aplicamos PCA para projetar a matriz em 2D e HDBSCAN para agrupar deputados com padrões parecidos. Quem não se encaixa em nenhum grupo é marcado como ruído e fica sem cor de bloco.
  4. Cada bloco recebe um rótulo automático com os três partidos mais frequentes nele e suas proporções (ex.: “PT 24% · PSB 14% · PCdoB 9%”). O rótulo descreve a composição, não atribui um nome ideológico.
  5. Para cada deputado calculamos a proximidade (cosine similarity) entre o seu vetor de votos e o centróide de cada bloco. Os três blocos com proximidade positiva mais alta aparecem no tooltip (caixa de informação ao passar o mouse). Assim, um deputado pode estar fortemente alinhado com um bloco e ainda ter afinidade parcial com outro.
  6. A cor de cada ponto é o bloco dominante. O tamanho é proporcional ao número de votos registrados, de modo que quem participou mais aparece maior.

Como ler a porcentagem de proximidade

O número que aparece ao lado de cada bloco no tooltip (ex.: “PL · UNIÃO · MDB — 64%”) é a similaridade por cosseno × 100 entre o vetor de votos do deputado e o centróide do bloco. Não é a fração dos votos do deputado que coincidiram com o bloco, mas sim uma medida geométrica de alinhamento de direção:

  • 100%: vetor idêntico ao do bloco — vota Sim/Não no mesmo padrão e com a mesma intensidade dos membros típicos.
  • ~0%: vetor ortogonal ao do bloco — sem relação aparente entre os padrões de voto.
  • Negativo: vota majoritariamente no sentido oposto ao do bloco (proximidades negativas são omitidas do tooltip).
  • Valores intermediários (ex.: 64%) indicam alinhamento forte, mas não em lockstep — o deputado segue a direção do bloco na maioria das pautas controversas, com alguma variação independente (abstenções, obstruções ou divergências pontuais).

Por isso é possível um deputado ter proximidade alta com um bloco e ao mesmo tempo aparecer sem cor de bloco (ruído do HDBSCAN ): a direção do voto dele alinha com o bloco, mas o seu padrão individual não é denso o suficiente em torno do centróide para ser classificado dentro do agrupamento.

O mapa é recalculado a cada atualização dos dados. Diferente do Mapa de Discursos, este parte de dados estruturados (Sim/Não), então a posição de cada deputado é mais estável entre execuções. Interprete os blocos como padrões de coalizão, não como classificação ideológica definitiva.

Análise de Discurso (IA) — barema

O Mapa Ideológico e a aba Análise de Discurso em cada perfil usam um modelo de IA para pontuar cada discurso parlamentar em três dimensões: agressividade (1–100), escala social (progressista → conservador, 1–100) e escala econômica (estatista → liberal, 1–100). O modelo também extrai os alvos nomeados (pessoas, partidos, instituições, grupos) que cada discurso critica ou elogia.

O texto abaixo é exatamente o que enviamos ao modelo como instrução. É a única definição operacional do que cada pontuação significa, e deve ser interpretado como o barema da análise. O modelo informado é o configurado atualmente via DISCURSO_PROVIDER / DISCURSO_MODEL — cada pontuação no banco também grava qual modelo a produziu, então execuções com modelos diferentes ficam auditáveis individualmente.

Como o score do deputado é agregado

  • Cada deputado recebe a média ponderada pelo tamanho (caracteres) das pontuações dos seus discursos. Discursos longos pesam mais que discursos curtos, refletindo melhor o tom geral.
  • Excluímos discursos puramente procedurais ou cerimoniais (boas-vindas, registros de presença, homenagens) — o mesmo filtro do Mapa de Discursos.
  • Deputados com menos de 3 discursos analisados não aparecem no Mapa Ideológico, para não posicioná-los em coordenadas extremas com base em uma única fala atípica.
  • Os alvos são contados por frequência (top 5 por deputado). A cor da barra mostra a valência média das menções: vermelha quando o alvo é tratado como adversário, verde quando é elogiado, cinza quando neutro.
  • Alinhamento ao governo (Governo / Oposição / Independente) é uma classificação manual por partido para a 57ª Legislatura, baseada no apoio público anunciado ao governo federal. Pode estar desatualizada se o partido mudou de posição.

Análise de Discurso (IA) — amostragem do corpus

A 57ª Legislatura acumula 48 345 discursos elegíveis (≥ 250 caracteres, não procedurais). Enviar todos ao modelo de linguagem seria dispendioso e redundante — a maioria das falas não contém posicionamento sobre políticas concretas. O ETL executa um amostrador baseado em sinal antes da etapa de pontuação, selecionando ≈ 13 000–15 000 discursos (≈ 30% do corpus) e gravando os selecionados na tabela public.discurso_sample.

1. Filtros de pré-seleção

  • Descartados discursos com menos de 250 caracteres de sumário + transcrição.
  • Descartados discursos procedurais ou cerimoniais detectados por padrão de texto: boas-vindas, registros de presença, homenagens, votos de pêsames (mesmo filtro do Mapa de Discursos).

2. Âncoras — sempre incluídos

Certos discursos são selecionados incondicionalmente por terem sinal estrutural forte, com limites por parlamentar/ano para evitar dominância de líderes prolíficos:

CritérioDetecçãoLimite / ano
Menção explícita a proposiçãoRegex \m(PL|PEC|MPV|PLP|…)\s*\d no texto (hit rate: 3,6%)sem limite
Dia de votação nominalData do discurso coincide com uma votacao.tipo = ‘Nominal’ (hit rate: 82% — muito frequente)5 por parlamentar/ano, ordenado por signal_score desc
Parlamentar em cargo de liderançaorgaos_deputados.cargo contém líder, relator, presidente ou vice-líder na data do discurso10 por parlamentar/ano

3. Pontuação de sinal

Cada discurso recebe um signal_score calculado por:

signal_score =
  4.0 × bill_mention          -- citou número de proposição
+ 3.0 × vote_proximity        -- discurso em dia de votação nominal
+ 3.0 × leadership_role       -- parlamentar era líder/relator/presidente
+ session_weight              -- Ordem do Dia=2.0, Grande Expediente=1.5,
                              --   Discurso=1.2, Pela Ordem=0.5, else=1.0
+ 100.0 × cluster_rarity      -- 1 / n_discursos no cluster (tópico raro)
+ 0.3 × ln(1 + text_len)      -- bônus logarítmico pelo comprimento

4. Seleção por diversidade — MMR

Para os discursos não selecionados como âncoras, o corpus é estratificado por (parlamentar × ano × cluster de tema). Dentro de cada estrato, aplicamos Maximal Marginal Relevance (MMR, λ = 0,6) sobre os embeddings de 384 dimensões: seleciona 1 discurso por estrato de forma que o escolhido seja ao mesmo tempo de alto sinal e semanticamente distinto dos já selecionados no mesmo grupo. O resultado é uma cobertura temática diversa sem repetição de argumentos similares.

5. Cotas por parlamentar/ano

  • Todo parlamentar com discursos elegíveis recebe pelo menos 3 discursos não-âncora na amostra (SAMPLE_MIN_BASE), garantindo representatividade mínima.
  • Discursos de tópicos raros (clusters com menos de 300 falas em todo o corpus) recebem prioridade de inclusão para evitar que assuntos de nicho desapareçam da análise.

6. Metadados de seleção

Cada discurso amostrado tem sua razão de inclusão gravada na coluna selection_reasons TEXT[]:

anchor:bill_mentionanchor:vote_proximityanchor:leaderrare_topicmmr:representativequota:base

Para forçar uma re-amostragem completa basta incrementar a variável de ambiente SAMPLE_VERSION. O amostrador é incremental por padrão: reprocessa apenas os grupos (parlamentar × ano) com discursos novos.

Explorar — análise exploratória

Catálogo de métricas, gráfico de dispersão, pivot e consulta por linguagem natural.

Catálogo de métricas

O endpoint GET /api/explorar/catalog expõe as ~20 métricas disponíveis. Cada métrica tem chave, rótulo, grupo, tipo (numeric | categorical), unidade e higher_is_better. Os grupos são:

GrupoMétricas
identidadepartido, uf, alinhamento (categóricas — usadas em cor e agrupamento)
ideologiaideologia_econ, ideologia_social, agressividade, n_discursos_scored
atividadepresenca_rate, presenca_comissao_rate, proposicoes_aprovadas, independencia_score, eligible_votes
gastosceap_monthly_avg
mapasvote_x, vote_y, n_votos, speech_x, speech_y, n_discursos_map

O payload de deputies ( GET /api/explorar/deputados) retorna uma linha por deputado com todos esses campos, resultado de um LEFT JOIN entre deputies, deputy_scores, deputy_discurso_scores, deputy_vote_map, deputy_speech_map e partidos_alinhamento. Deputados sem dados em alguma tabela aparecem com null naquelas colunas e são omitidos do gráfico de dispersão quando o eixo selecionado não tem valor.

Gráfico de dispersão (Fase 1)

O frontend busca os dois endpoints uma única vez via SWR e mantém os dados em memória. Toda a filtragem (UF, alinhamento, busca por nome) é feita client-side. O componente genérico Scatter<T> recebe funções acessoras (xAccessor, yAccessor, rAccessor, colorFn) e renderiza via SVG.

  • Cor categórica: alinhamento usa três cores fixas (governo/oposição/independente); partido e UF usam uma paleta de 20 cores com mapeamento determinístico por ordem alfabética dos valores únicos.
  • Cor numérica: gradiente sequencial azul claro → azul escuro (valor mínimo → máximo do conjunto filtrado).
  • Tamanho: proporcional ao valor da métrica escolhida, interpolado entre 3,5 px (min) e 12 px (max).
  • URL compartilhável: todos os parâmetros de visualização (x, y, color, size, mode, groupBy, pivotMetric, agg) são codificados nos query params da URL via useSearchParams + router.push.

Pivot — tabela e barras (Fase 2)

Os modos Tabela e Barras reutilizam o mesmo payload de deputies. O agrupamento e a agregação acontecem no cliente via useMemo — os ≤ 600 deputies são rápidos o suficiente para não justificar uma rota de agregação no backend. Agregações disponíveis:

  • Média: soma ÷ contagem de valores não-nulos no grupo.
  • Mediana: valor central após ordenação (interpolado para grupos de tamanho par).
  • Contagem: número de deputados com valor não-nulo para a métrica escolhida.

O gráfico de barras usa recharts (já presente como dependência para os gráficos de CEAP). A tabela inclui uma mini-barra de progresso inline normalizada pelo valor máximo do grupo.

Consulta em linguagem natural (Fase 3)

O endpoint POST /api/explorar/nl recebe uma pergunta em texto livre e retorna um view-spec — um objeto JSON com as chaves x, y, color, size e, opcionalmente, filterUF e filterAlinhamento.

  • O sistema embute o catálogo de métricas (chave, tipo, unidade) no prompt de sistema. O modelo responde apenas com JSON — sem markdown ou texto extra.
  • O backend valida cada chave retornada contra METRIC_BY_KEY e NUMERIC_KEYS; chaves inválidas são substituídas pelos defaults. Isso elimina qualquer superfície de injeção via resposta do modelo.
  • Taxa limitada a 15 requisições/hora por IP (bucket Redis hourly).
  • Erros transientes do provedor de IA (402, conexão, timeout) retornam HTTP 503 com mensagem ao usuário; erros de validação retornam os defaults silenciosamente.

O frontend aplica o spec retornado diretamente ao estado de URL (router.push) e exibe a rationale da IA em um banner verde descartável abaixo da barra de consulta. O gráfico re-renderiza pelo mesmo código do Fase 1, sem renderer separado.

Limitações

  • Dados de CEAP de 2025 podem estar incompletos se a Câmara ainda não publicou o arquivo do ano corrente.
  • A métrica de proposições aprovadas não distingue propostas de grande impacto de emendas menores.
  • Independência partidária alta não é necessariamente boa ou ruim, depende dos valores do eleitor.
  • Deputados com pouco tempo de mandato (tomaram posse depois do início da legislatura) podem ter percentis distorcidos.
  • Este site não emite recomendações de voto. Os dados são apresentados para facilitar pesquisa própria do eleitor.
  • Votações por tema: “Votou Sim” não significa apoio à causa. A Câmara classifica proposições por tema, mas um voto “Sim” pode tanto avançar quanto restringir direitos naquela área. Consulte o texto da proposição para interpretar cada voto.
  • Afinidade: só consegue calcular afinidade em relação às proposições incluídas no quiz. Um deputado pode ter score baixo simplesmente por ter estado ausente nas votações cobertas, sem que isso reflita seu posicionamento geral.
  • Mapa de Discursos: os temas são descobertos por algoritmo, sem revisão humana. Então, é possível que um cluster misture assuntos parecidos ou que um discurso relevante seja classificado como ruído. Discursos curtos ou puramente cerimoniais ficam sobrerrepresentados em clusters de boilerplate.
  • Mapa de Votação: os blocos refletem padrões de voto em plenário, não posições ideológicas. Deputados que entraram tarde no mandato ou que faltaram a muitas sessões podem ser excluídos do mapa pelo filtro de participação mínima. Votações quase-unânimes (típicas de matérias administrativas) são descartadas porque não diferenciam coalizões, então o mapa reflete principalmente as pautas controversas da legislatura.
  • Análise de Discurso (IA): as pontuações são opiniões de um modelo de linguagem sobre cada discurso, não verdades absolutas. O modelo pode errar em discursos ambíguos, sarcásticos ou com contexto faltante. Sempre que possível, audite os discursos exemplares mostrados no perfil. A escala de agressividade não distingue alvos legítimos (autoridades sob críticas justificadas) de ataques infundados — interprete sempre junto do conteúdo. A classificação governo / oposição é curada manualmente e pode ficar desatualizada se um partido mudar de posição na legislatura. Amostragem: apenas ≈ 30% dos discursos é analisado pela IA — discursos puramente procedurais, falas muito curtas e falas sem sinal temático claro são excluídos. Parlamentares que discursam muito sobre temas sem número de proposição associado podem ter cobertura menor que a média.

Código-fonte disponível em GitHub · Dados públicos da Câmara dos Deputados