Release 1 (R1) - MVP e Integracao Full-Stack¶
A Release 1 (R1) do projeto Dito e Feito consolida o primeiro marco principal de entrega do Squad 4 para a disciplina de Metodos de Desenvolvimento de Software (MDS 2026/1 - UnB). O objetivo principal desta release foi estabelecer uma arquitetura basica integrada e funcional (Minimal Viable Product - MVP), provando a viabilidade tecnica do cruzamento de discursos parlamentares com dados de votacao nominal por meio de Inteligencia Artificial.
1. Escopo e Tecnologias¶
O sistema propoe-se a auditar a coerencia parlamentar ao correlacionar discursos em plenaria de senadores e deputados com seus votos efetivos em sessoes nominais.
A stack tecnologica adotada e distribuida da seguinte forma:
| Camada | Tecnologia | Versao / Detalhe |
|---|---|---|
| Backend - Framework | Python + Flask | flask, flask-cors |
| Backend - PLN (local) | BERTimbau | neuralmind/bert-base-portuguese-cased via HuggingFace |
| Backend - LLM (nuvem) | Groq API (Llama-3) | llama-3.1-8b-instant / llama-3.3-70b-versatile |
| Backend - LLM (fallback) | OpenRouter API | meta-llama/llama-3.1-8b-instruct:free |
| Backend - Web Scraping | BeautifulSoup 4 | Pronunciamentos do Senado |
| Backend - HTTP | Requests | APIs abertas da Camara e Senado |
| Banco de Dados | PostgreSQL 15 | Hospedado no Supabase |
| Banco - Driver | psycopg2-binary | Conexao direta via DATABASE_URL |
| Banco - Semantica | pgvector | Indice ivfflat para embeddings vector(768) |
| Frontend - Framework | React 19 + Vite 8 | SPA moderna |
| Frontend - Roteamento | React Router DOM v7 | Rotas declarativas |
| Frontend - Graficos | Recharts 3 | Graficos interativos |
| Frontend - HTTP | Axios 1 | Camada de servico em src/services/api.js |
| Frontend - Icones | Lucide React | Biblioteca de icones |
| Frontend - CSS | Tailwind CSS v4 | Utilitarios de estilo |
| Documentacao | MkDocs Material | Deploy automatico via GitHub Pages |
| CI/CD | GitHub Actions | 2 workflows configurados |
2. Arquitetura e Estrutura de Pastas¶
A organizacao do codigo-fonte esta dividida em duas areas principais de desenvolvimento (frontend e backend), apoiadas por uma camada de persistencia no Supabase e automacao via GitHub Actions.
A arvore simplificada do repositorio na R1 e:
2026-1-Squad4-Dito_e_Feito/
├── .github/
│ └── workflows/
│ ├── main.yml # CI/CD: build, MkDocs, GitHub Pages
│ └── metrics.yml # CI/CD: coleta metricas do repositorio
├── analytics/
│ └── index.html # Dashboard de metricas do repositorio
├── backend/
│ ├── api.py # Servidor Flask (porta 5001) - Core da API
│ ├── pipe.py # Pipeline local com BERTimbau
│ ├── scan_senators.py # Orquestrador de varredura em lote
│ ├── dashboard.html # Dashboard Vanilla JS servido pela API
│ ├── dashboard_metrics.json # Cache local dos dados analisados
│ ├── requirements.txt # Dependencias Python
│ └── database/
│ ├── schema.sql # DDL do banco de dados
│ ├── Migrations.sql # Historico de migracoes
│ └── Conexao.md # Guia de conexao ao Supabase
├── frontend/
│ ├── package.json # Dependencias Node.js
│ ├── vite.config.js # Configuracao do bundler
│ └── src/
│ ├── App.jsx # Roteamento principal (React Router DOM)
│ ├── main.jsx # Entry point da SPA
│ ├── pages/ # Paginas da aplicacao (7 paginas)
│ ├── components/ # Componentes reutilizaveis (9 componentes)
│ └── services/
│ └── api.js # Camada de servico Axios
├── docs/ # Fonte da documentacao MkDocs
├── scripts/
│ └── collect.js # Script de coleta de metricas do GitHub
├── mkdocs.yml # Configuracao do site de documentacao
└── README.md # Apresentacao geral do projeto
3. Detalhes de Implementacao¶
Backend¶
- Endpoints da API Flask: Disponibilizacao de endpoints REST na porta 5001 (
/api/health,/api/dashboard-metrics,/api/senadores,/api/deputados,/api/politico/<id_externo>e/api/analisar). - Scraping Concorrente: O script de coleta de pronunciamentos do Senado usa pooling concorrente via
ThreadPoolExecutorpara otimizar o tempo de varredura. - Resiliencia e Fallback de IA: Caso as chaves de API das LLMs externas (Groq ou OpenRouter) nao estejam disponiveis ou apresentem erro, o sistema utiliza o calculo local de indice Jaccard sintatico. Caso o banco de dados PostgreSQL esteja fora do ar, o backend le e serve dados a partir do cache JSON local (
dashboard_metrics.json).
Frontend¶
- Interface SPA: Estrutura responsiva com layout modular (Sidebar, Header, Footer) e 7 paginas roteadas (Visao Geral, Politicos, Perfil, Comparacao, Relatorios e Sobre).
- Consumo de Endpoints: Camada base de servico usando Axios configurada para se comunicar com a porta 5001 do Flask.
Banco de Dados¶
- PostgreSQL 15 no Supabase: Schema completo contendo 6 tabelas relacionais (
parlamentar,discurso,proposicao,votacao,voto,score_coerencia). - Indexacao pgvector: Criacao de indices do tipo
ivfflatnas colunas de embeddings para busca semantica de alta velocidade no cruzamento de discursos e ementas.
CI/CD e Documentacao¶
- Workflow Principal: Pipeline no GitHub Actions responsavel por fazer a coleta periodica de metricas do GitHub, compilar os arquivos markdown de documentacao e realizar o deploy do site statico final para a branch
gh-pages. - MkDocs Material: Layout de navegacao moderno dividindo a documentacao em sprints, requisitos, frontend, backend, tecnologias e estudos.
4. Guia de Instalacao e Execucao Local¶
Backend¶
- Navegue ate a pasta do backend:
- Crie e ative o ambiente virtual:
- Instale as dependencias necessarias:
- Crie o arquivo
.envcom base no arquivo.env.examplepreenchendo as chaves do Supabase, Groq e OpenRouter. - Inicie a API Flask:
Frontend¶
- Navegue ate a pasta do frontend:
- Instale as dependencias do projeto:
- Execute a aplicacao em modo de desenvolvimento:
5. Integrantes do Squad 4¶
- Gabriel Velho de Souza
- Gustavo Antonio
- Juan Costa
- Sauhan Ferreira