FastAPI | Next.js | Groq | PostgreSQL | Docker
Plataforma para coleta, enriquecimento semântico e matching entre empresas e licitações públicas.
🔒 Nota de Portfólio: Código privado devido a diretrizes de propriedade intelectual e viabilidade comercial. Este repositório documenta a arquitetura, decisões de engenharia e os desafios técnicos no desenvolvimento para fins de portfólio.
O Portal Nacional de Contratações Públicas (PNCP) centraliza dados de licitações públicas brasileiras, porém identificar oportunidades realmente relevantes ainda é um processo trabalhoso para muitas empresas.
Entre os principais desafios estão:
- 📦 Grande volume de licitações publicadas diariamente
- 🔍 Descrições heterogêneas e pouco padronizadas
- 🌐 Dados distribuídos em múltiplos endpoints
⚠️ Instabilidade operacional da API pública (timeouts e indisponibilidades)- 🤝 Dificuldade em conectar o perfil comercial das empresas às oportunidades disponíveis
Este projeto consiste no desenvolvimento de uma plataforma para descoberta de oportunidades em licitações públicas, composta por um pipeline de coleta de dados, enriquecimento semântico com LLM, API REST e mecanismos de matching entre empresas e licitações.
graph TD
subgraph W[Workers]
B[Collector Worker]
D[Items Worker]
E[Analysis Worker]
H[Cleanup Worker]
end
subgraph APP[Aplicação]
I[FastAPI]
J([Frontend Next.js])
end
A([API Pública do PNCP])
C[(PostgreSQL)]
F([Groq API<br/>LLM])
K{{Redis<br/>Celery + Cache}}
A --> B
B -->|licitações| C
A --> D
D -->|itens| C
C <--> E
E -->|licitações| F
F -->|análises| E
C --> H
H --> C
C --> I
I --> C
K -.-> B
K -.-> D
K -.-> E
K -.-> H
I <--> K
I -->|REST API| J
J -->|perfil comercial| I
- Python
- FastAPI
- SQLAlchemy
- PostgreSQL
- Groq API
- GPT-OSS
- Next.js
- React
- TypeScript
- Tailwind CSS
- Docker
- Redis
- Celery
- Coleta periódica de licitações do PNCP
- Enriquecimento de dados utilizando LLM
- Geração automática de:
- descrição normalizada
- palavras-chave
- setores relacionados
- Mecanismo de matching entre empresas e licitações
- Cadastro de perfil comercial da empresa
- Recomendações personalizadas de licitações
- Pesquisa e filtragem de oportunidades
- Visualização detalhada de licitações e itens
- Cache de resultados com Redis
1. Instabilidade da API do PNCP
- Problema: Lentidão, timeouts e falhas em requisições consecutivas.
- Solução: Implementação de timeouts, retries controlados, delays entre chamadas e coleta periódica.
2. Dados heterogêneos e pouco estruturados
- Problema: As descrições das licitações variam significativamente em qualidade e nível de detalhe, podendo conter desde poucas palavras até longos textos administrativos, dificultando a identificação do objeto comercial da contratação.
- Solução: Utilização de LLM para normalizar as descrições, extrair palavras-chave relevantes e identificar os setores relacionados à contratação.
3. Licitações multidisciplinares
- Problema: Uma mesma licitação pode reunir produtos e serviços de diferentes áreas de atuação, tornando inadequada uma classificação única.
- Solução: Modelagem baseada em múltiplos setores relacionados, permitindo representar licitações que abrangem diferentes segmentos e melhorar estratégias de matching.
4. Limitações dos modelos de linguagem
- Problema: Modelos menores apresentaram baixa capacidade para interpretar corretamente descrições heterogêneas e identificar o contexto comercial das licitações.
- Solução: Comparação entre modelos executados localmente e modelos hospedados, resultando na adoção da API da Groq como estratégia para equilibrar qualidade das análises, latência operacional, custos e simplicidade da infraestrutura.
- Autenticação e gerenciamento de usuários e empresas
- Sistema de notificações de novas oportunidades
- Dashboard de recomendações
- Upload e gerenciamento de documentos
- Deploy e configuração do ambiente de produção
- Expansão do algoritmo de matching