O problema
Editais públicos reúnem prazos, exigências e critérios em PDFs extensos. Encontrar uma informação é apenas parte do trabalho: quem usa a resposta também precisa conferir o documento, a página e o trecho que a sustentam.
O que o MVP faz
O GovIntel AI permite cadastrar uma empresa, enviar editais privados, acompanhar o processamento dos arquivos, pesquisar o conteúdo por significado e fazer perguntas sobre um documento. As respostas do chat são acompanhadas de citações vinculadas ao texto persistido. O fluxo é executado localmente com Docker Compose; o repositório documenta a configuração e os limites atuais.
A decisão de arquitetura
O upload não espera pela leitura e indexação do PDF. A API Django registra o edital e um evento de processamento na mesma transação. Um relay publica o evento no RabbitMQ, e um worker Celery extrai o texto por página, aplica OCR quando necessário, divide o conteúdo em trechos e gera embeddings locais. O PostgreSQL com pgvector mantém os vetores usados na busca; Redis apoia cache e limitação de requisições.
flowchart LR
N["Next.js<br/>Interface"]
A["API Django"]
DB[("PostgreSQL<br/>Dados + Outbox")]
MQ["RabbitMQ"]
C["Worker Celery"]
PDF["Leitura do PDF"]
CH["Separação em trechos"]
EM["Geração de embeddings"]
V[("pgvector<br/>Índice vetorial")]
Q["Pergunta do usuário"]
S["Busca semântica"]
CTX["Contexto relevante"]
CHAT["Resposta do chat"]
N --> A
A -->|"Salvar PDF e evento"| DB
DB -.->|"Publicar evento"| MQ
MQ -.-> C
C --> PDF
PDF --> CH
CH --> EM
EM --> V
Q --> N
N -->|"Consultar"| A
A --> S
S --> V
V --> CTX
CTX --> CHAT
CHAT --> N
A outbox evita publicar uma tarefa para um edital que não foi salvo. Identificadores estáveis e uma chave de idempotência tratam uploads repetidos e entregas duplicadas da fila.
Respostas que podem ser conferidas
O chat recebe apenas trechos recuperados para a consulta. Antes de entregar uma resposta, o backend valida as citações contra o documento, o trecho e a página persistidos, dentro do tenant do usuário. Quando a evidência é insuficiente ou o provedor não está disponível, o fluxo declara a limitação em vez de apresentar uma resposta sem base verificável.
O isolamento por empresa também é aplicado às consultas, ao cache, aos arquivos e às tarefas. Os PDFs permanecem fora da árvore pública da aplicação.
Interface do protótipo
As imagens abaixo mostram a interface local. A tela de conversa está em estado vazio; ela apresenta a área reservada para as fontes, sem simular uma resposta gerada.


Evidências e estágio atual
O estudo de caso registrado em setembro de 2026 informa 167 testes de backend e 43 de frontend passando em 18/09/2026. O fluxo de ponta a ponta foi exercitado com Playwright e um provedor de IA simulado para manter o teste determinístico. Essa validação não substitui um teste real de latência, custo e qualidade do provedor.
O projeto segue como MVP local. Entre os próximos passos documentados estão armazenamento privado adequado à hospedagem, operação periódica da outbox e revisão do fluxo autenticado em dispositivos móveis. A implementação e as instruções para executá-la estão no repositório do GovIntel AI.