Integração e API (Rotas e Swagger)
Esta documentação especifica todas as rotas ativas da API ContraDito. Ela serve como guia oficial de integração para a equipe de Front-end (Next.js).
1. Visão Geral da Integração
- URL Base Local:
http://localhost:8000 - Porta de Desenvolvimento (CORS): O frontend Next.js deve rodar em
http://localhost:3000para estar coberto pelas regras de liberação de CORS. - Documentação Interativa (Swagger): Com os contêineres em execução, toda a documentação de schemas, contratos e testes de rotas está disponível automaticamente em
http://localhost:8000/docs(ou na porta configurada para a API). - Caches: Rotas de listagem geral possuem cache em memória com validade de 1 hora (
3600segundos). - Ausência de Score: As métricas de Coherence Score e a flag dados_insuficientes foram removidas definitivamente.
2. Detalhamento das Rotas por Categoria
Categoria A: Parlamentares (Perfil, Votos e Afinidades)
1. Listar e Filtrar Políticos
- Método / Path:
GET /api/{casa}/politicos - Parâmetros:
{casa}(Path):"camara"ou"senado"(obrigatório).busca(Query, opcional): Busca por parte do nome de urna.partido(Query, opcional): Sigla do partido (ex:PL,PT).estado(Query, opcional): Sigla da UF com 2 letras (ex:SP,DF).pagina(Query, opcional): Inteiro (padrão1).tamanho(Query, opcional): Inteiro (padrão20).
2. Obter Perfil Detalhado
- Método / Path:
GET /api/{casa}/politicos/{id_parlamentar} - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_parlamentar}(Path): ID numérico do político.
3. Linha do Tempo de Votações (Individual)
- Método / Path:
GET /api/{casa}/politicos/{id_parlamentar}/timeline - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_parlamentar}(Path): ID do político.
4. Afinidades Políticas (Gêmeo e Antípoda)
- Método / Path:
GET /api/{casa}/politicos/{id_parlamentar}/afinidades - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_parlamentar}(Path): ID do político.
5. Fidelidade Partidária Bruta
- Método / Path:
GET /api/{casa}/politicos/{id_parlamentar}/fidelidade - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_parlamentar}(Path): ID do político.
Categoria B: Análises Comparativas e Partidos
6. Comparação Direta entre Dois Parlamentares
- Método / Path:
GET /api/comparar - Parâmetros (Query):
politico_id_1(Query): ID do primeiro parlamentar (obrigatório).politico_id_2(Query): ID do segundo parlamentar (obrigatório).casa(Query):"camara"ou"senado"(obrigatório).
7. Coesão de Voto dos Partidos
- Método / Path:
GET /api/{casa}/partidos/coesao - Parâmetros:
{casa}(Path):"camara"ou"senado".
[!IMPORTANT] Processamento e Cache: Este endpoint calcula a coesão média de todos os partidos de forma analítica e dinâmica. Para isso, o backend executa internamente a função
_obter_todos_os_votos, que busca sequencialmente a totalidade de votos do banco de dados em lotes (chunks de 1000 registros). Devido à alta carga dessa operação, a ativação e respeito ao cache de 1 hora (expire=3600) são críticos para evitar degradação de performance na API e sobrecarga no Supabase.
Categoria C: Proposições (Matérias e Polarização)
8. Listar Proposições
- Método / Path:
GET /api/{casa}/proposicoes - Parâmetros:
{casa}(Path):"camara"ou"senado"(obrigatório).busca(Query, opcional): Busca por termo no ID, ementa ou resumo executivo.ano(Query, opcional): Filtro por ano.tipo(Query, opcional): Tipo de matéria (ex:PL,PEC).apenas_analisadas(Query, opcional): Exibir apenas proposições com resumo da IA (analisadas) (trueoufalse).pagina(Query, opcional): Inteiro (padrão1).tamanho(Query, opcional): Inteiro (padrão20).
9. Obter Detalhes da Proposição
- Método / Path:
GET /api/{casa}/proposicoes/{id_proposicao} - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_proposicao}(Path): UUID da proposição.
10. Polarização de Plenário
- Método / Path:
GET /api/{casa}/proposicoes/{id_proposicao}/polarizacao - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_proposicao}(Path): UUID da proposição.
Categoria D: Discursos, Chunks e Votos Brutos
11. Listar Discursos Gerais
- Método / Path:
GET /api/{casa}/discursos - Parâmetros:
{casa}(Path):"camara"ou"senado".politico_id(Query, opcional): Filtro por ID do parlamentar.termo(Query, opcional): Termo para pesquisar no texto do discurso.pagina(Query, opcional): Inteiro (padrão1).tamanho(Query, opcional): Inteiro (padrão20).
12. Listar Discursos de um Político
- Método / Path:
GET /api/{casa}/politicos/{id_parlamentar}/discursos - Parâmetros:
{casa}(Path):"camara"ou"senado".{id_parlamentar}(Path): ID do político.pagina(Query, opcional): Inteiro (padrão1).tamanho(Query, opcional): Inteiro (padrão20).
13. Obter Detalhes do Discurso
- Método / Path:
GET /api/{casa}/discursos/{discurso_id} - Parâmetros:
{casa}(Path):"camara"ou"senado".{discurso_id}(Path): UUID do discurso.
14. Chunks de um Discurso
- Método / Path:
GET /api/{casa}/discursos/{discurso_id}/chunks - Parâmetros:
{casa}(Path):"camara"ou"senado".{discurso_id}(Path): UUID do discurso.
15. Listar Votos Nominais Brutos
- Método / Path:
GET /api/{casa}/votos - Parâmetros:
{casa}(Path):"camara"ou"senado".politico_id(Query, opcional): Filtro por político.proposicao_id(Query, opcional): Filtro por proposição.apenas_com_discursos(Query, opcional): Filtrar apenas votos que possuem discursos associados (trueoufalse).pagina(Query, opcional): Inteiro (padrão1).tamanho(Query, opcional): Inteiro (padrão20).