Motor de Busca e Coleta de Oportunidades
🔍 Motor de Busca e Coleta de Oportunidades
Section titled “🔍 Motor de Busca e Coleta de Oportunidades”1. Objetivo do Motor
Section titled “1. Objetivo do Motor”A Ferramenta de Busca e Coleta de Oportunidades tem como objetivo localizar, extrair, interpretar, normalizar e armazenar automaticamente oportunidades acadêmicas e profissionais publicadas por universidades, agências de fomento, institutos de pesquisa e organizações em âmbito nacional e internacional.
O sistema opera de forma contínua e autônoma, identificando novas publicações, aditivos e encerramento de prazos sem necessidade de intervenção humana manual.
2. Tipologia de Oportunidades Mapeadas
Section titled “2. Tipologia de Oportunidades Mapeadas”O motor reconhece e categoriza automaticamente as seguintes modalidades:
- Bolsas de Estudo: Apoio financeiro estudantil, bolsas de mérito e bolsas institucionais;
- Iniciação Científica (IC): Bolsas PIBIC, PIBITI, voluntárias e de laboratórios;
- Monitorias de Disciplina: Vagas para auxílio didático a turmas de graduação;
- Programas de Extensão: Projetos de impacto comunitário (PIBEX);
- Estágios e Trainees: Oportunidades curriculares e não-curriculares no mercado;
- Intercâmbios & Mobilidade: Programas de intercâmbio bilateral e bolsas internacionais;
- Pós-Graduação: Seleção de Mestrado acadêmico/profissional, Doutorado e Pós-Doutorado;
- Summer/Winter Schools: Escolas de curta duração em centros de excelência;
- Chamadas de Artigos (Call for Papers): Submissões para revistas científicas e congressos;
- Eventos & Conferências: Simpósios, congressos e encontros científicos;
- Competições & Hackathons: Maratonas de inovação e olimpíadas do conhecimento;
- Auxílios Estudantis: Assistência estudantil, auxílio alimentação, moradia e transporte;
- Financiamentos & Editais Gerais: Fomento a projetos de pesquisa e inovação tecnológica.
3. Arquitetura Geral de Coleta Híbrida
Section titled “3. Arquitetura Geral de Coleta Híbrida”Devido à grande diversidade de formatos e maturidade tecnológica das universidades (algumas disponibilizam APIs modernas, enquanto outras publicam apenas PDFs escaneados como imagem), o motor adota uma estratégia híbrida em cascata:
Universidades & Agências │ ▼Descoberta da Fonte (APIs / RSS / Sitemaps / Crawling) │ ▼Coleta de Documentos (HTML / PDFs / Imagens) │ ▼Extração de Texto & OCR (Tesseract / Visão Computacional) │ ▼Interpretação e Estruturação via IA (Gemini / LLMs) │ ▼Normalização de Dados (Schema Único de Oportunidade) │ ▼Banco de Dados & Motor de Compatibilidade (Match com Perfil) │ ▼Notificação Contextual ao Estudante4. Estratégias e Prioridades de Coleta
Section titled “4. Estratégias e Prioridades de Coleta”Para otimizar desempenho e minimizar consumo de banda, o motor tenta os métodos na seguinte ordem estrita:
- APIs REST/GraphQL: Método prioritário sempre que a instituição disponibilizar endpoint público ou autenticado. Oferece dados estruturados, alta velocidade e estabilidade.
- Feeds RSS/Atom: Varredura ágil de canais de notícias e editais de portais universitários (
/rss.xml,/feed), dispensando web scraping pesado. - Sitemap XML: Consulta periódica a
sitemap.xmlpara detectar novas URLs e alterações recentes de páginas com baixíssimo custo computacional. - Respeito a
robots.txt: Consulta obrigatória para identificar diretórios públicos e regras de acesso de crawlers éticos. - Scraping HTML Resiliente: Extração seletiva baseada em heurísticas de busca de termos-chave em português (editais, bolsas, monitoria), inglês (scholarships, grants, calls) e espanhol (convocatorias, becas).
- Download e Extração de PDFs: Download assíncrono dos editais em arquivo PDF com extração do fluxo de texto nativo.
- OCR (Reconhecimento Óptico de Caracteres): Acionado exclusivamente quando o arquivo PDF for composto por imagens escaneadas sem camada de texto.
5. Pipeline de Extração com Inteligência Artificial
Section titled “5. Pipeline de Extração com Inteligência Artificial”Uma vez extraído o texto bruto do edital, o conteúdo é submetido a um modelo de IA que identifica e extrai os campos estruturados:
{ "institution": "Universidade Federal de Santa Maria", "campus": "Campus Sede", "title": "Edital de Seleção para Iniciação Científica - Laboratório de Sistemas Inteligentes", "category": "RESEARCH_SCHOLARSHIP", "academicLevel": "UNDERGRADUATE", "courses": ["Ciência da Computação", "Sistemas de Informação", "Engenharia de Computação"], "requirements": [ "Matrícula ativa a partir do 3º semestre", "Conhecimento em Python e Aprendizado de Máquina", "Disponibilidade de 20h semanais" ], "stipendAmount": 700.00, "currency": "BRL", "openDate": "2026-03-01T00:00:00Z", "deadline": "2026-03-20T23:59:59Z", "officialUrl": "https://ufsm.br/editais/001-2026", "pdfUrl": "https://ufsm.br/editais/001-2026.pdf"}6. Normalização, Tradução e Atualização Incremental
Section titled “6. Normalização, Tradução e Atualização Incremental”- Schema Único de Dados: Independentemente de o edital vir do Brasil, Alemanha ou Estados Unidos, todos os dados são normalizados para os contratos do
@lib/shared. - Tradução Multilíngue: Oportunidades internacionais são indexadas com suporte multilíngue para busca, preservando intacto o texto original no idioma de origem.
- Atualização Incremental: O sistema guarda o hash de páginas e arquivos já processados. Apenas itens com hash alterado ou novas URLs são reanalisados pela IA, economizando recursos de computação.
- Controle de Duplicidade: Verificação multidimensional via URL canônica, código oficial do edital e similaridade de embeddings de título e resumo.
- Agendamento Dinâmico: Fontes com grande fluxo de publicação (ex: reitorias e agências nacionais) são verificadas a cada 30 minutos; páginas departamentais menores são agendadas em janelas de 2 a 12 horas.
7. Diretório Oficial de Fontes Acadêmicas (/diretorio-fontes)
Section titled “7. Diretório Oficial de Fontes Acadêmicas (/diretorio-fontes)”O Diretório de Fontes é o catálogo centralizado e homologado de portais de editais, universidades e agências de fomento:
- Mapeamento Curado: Cadastro inicial de fontes como CNPq, CAPES, FAPESP, FAPERGS, Santander Open Academy, DAAD, Fulbright e portais universitários oficiais.
- Indicação Comunitária (
SourceSubmission): Estudantes e pesquisadores podem sugerir novos portais para a rede. A equipe avalia e homologa os robôs. - Varredura Sob Demanda com Bot: O discente pode solicitar que os robôs do Academic Companion acessem imediatamente uma fonte específica para minerar oportunidades recentes.
8. Governança Computacional: Lotes de 3 Editais e Débito Justo de Tokens
Section titled “8. Governança Computacional: Lotes de 3 Editais e Débito Justo de Tokens”Devido ao alto custo de infraestrutura de nuvem, scraping com headless browsers, OCR e análise semântica por LLMs, o sistema aplica um modelo de computação sustentável e transparente:
- Exibição Estrita em Lotes de 3 Editais: No Scholarship Finder e na varredura por bots, as oportunidades são apresentadas em lotes de 3 por vez (
pageSize = 3). - Débito Amigável de 1 Token por Edital (3 Tokens por Lote): Cada lote de 3 editais minerados ou carregados consome exatamente 3 tokens (
AI_USAGE) da carteira do estudante (user_wallets). - Integração com Bônus e Convites: Estudantes sem saldo recebem orientações imediatas para recarga ou para convidar colegas (+20 tokens tanto para o indicador quanto para o indicado).
9. Especificação Técnica do AcademicCrawlerBot & Telemetria
Section titled “9. Especificação Técnica do AcademicCrawlerBot & Telemetria”O robô de coleta (apps/backend/src/modules/crawler/) é projetado com princípios de alta disponibilidade e rastreabilidade:
9.1. Headers Éticos & Anti-Bloqueio
Section titled “9.1. Headers Éticos & Anti-Bloqueio”O robô se identifica transparentemente em todas as requisições HTTP:
User-Agent: AcademicCompanionBot/1.0 (+https://acad.ufsm.br/bot; bot@acad.ufsm.br)Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: pt-BR,pt;q=0.9,en-US;q=0.8,en;q=0.7Cache-Control: no-cache9.2. Extração Semântica e Normalização (SemanticCrawlerParser)
Section titled “9.2. Extração Semântica e Normalização (SemanticCrawlerParser)”- Âncoras & Links: Extração seletiva de tags
<a>vinculadas a editais, chamadas e PDFs. - Detecção Léxica: Reconhecimento contextual de bolsas (
PIBIC,PIBITI,PIBEX,Monitoria,Mobilidade). - Valores Monetários: Captura de padrões como
R$ 700,00/mês, aplicando valores canônicos caso não explicitados no resumo. - Limite Estrito: Corte determinístico de até 3 editais por lote de processamento.
9.3. Telemetria e Auditoria (CrawlLog)
Section titled “9.3. Telemetria e Auditoria (CrawlLog)”Cada disparo do robô gera um registro imutável em crawl_logs:
durationMs: Tempo total de ida e volta da requisição em milissegundos.httpStatus: Código de resposta HTTP (200, 301, 403, 500).itemsFound: Contagem de links de editais detectados.executedBy: Identificador do usuário solicitante ouSYSTEM.- Endpoint de Telemetria:
GET /api/sources/:id/logspara auditoria do histórico de execuções.
9.4. Governança Segura no Painel Administrativo (AdminPasswordModal)
Section titled “9.4. Governança Segura no Painel Administrativo (AdminPasswordModal)”Para proteger o ecossistema de fontes e evitar operações acidentais ou não autorizadas, a interface administrativa (apps/admin/src/pages/sources/Sources.tsx) exige obrigatoriamente a confirmação por senha do administrador (POST /api/admin/verify-password) antes de efetivar qualquer ação crítica:
- Cadastro e Edição: Validação da senha antes de persistir alterações cadastrais ou adicionar novas fontes ao catálogo.
- Alternância de Status: Pausa ou reativação do monitoramento automático sob confirmação com senha.
- Disparo do Robô Minerador (“Minerar Agora”): Exige autenticação de senha antes de acionar o worker de coleta.
- Moderação de Indicações Comunitárias:
- Aprovação: Confirmação por senha antes de promover a fonte para o catálogo oficial e creditar +20 tokens de IA na carteira do discente.
- Recusa: Confirmação por senha com envio de parecer técnico orientador ao discente.
- Exclusão Definitiva: Confirmação com senha em modal de estilo destrutivo (
variant="destructive").