v1.9.3 — Public Exams & Edital Intelligence Foundation¶
A v1.9.3 cria a primeira fundação real de Editais / Concursos no SotuHire, sem transformar o produto em um sistema completo de concursos.
O SotuHire ajuda a organizar e interpretar editais, mas o edital oficial sempre prevalece. Revise manualmente requisitos, datas, taxa, documentos, conteúdo programático e regras da banca.
Objetivo¶
Separar oportunidades públicas de vagas privadas e criar uma base local-first para:
- importar texto colado de edital;
- extrair campos úteis com parser local;
- usar IA/Gemini opcional apenas como extrator assistido;
- comparar requisitos com o Perfil Profissional Universal;
- usar evidências acadêmicas/Lattes confirmadas;
- gerar score inicial, checklist e plano de estudo simples;
- preparar Radar e Tracker para oportunidade pública.
Módulo core¶
modules/public_exams/
__init__.py
models.py
parser.py
service.py
scoring.py
store.py
study_plan.py
formatters.py
Modelos principais:
ExamNotice;ExamRole;ExamRequirement;ExamTimeline;ExamSubject;ExamFitScore;StudyPlanDraft.
Importação¶
O endpoint POST /api/v1/public-exams/import recebe texto colado e retorna um rascunho:
{
"text": "texto colado do edital",
"source_url": "",
"source_name": "",
"use_ai": false,
"language": "pt-BR"
}
O rascunho sempre vem com needs_user_review=true. Nada é salvo automaticamente.
Parser local¶
O parser local busca padrões de:
- órgão/instituição;
- banca organizadora;
- número do edital;
- cargo/função;
- nível e escolaridade;
- registro profissional;
- salário/vencimento/bolsa;
- taxa de inscrição;
- carga horária, vagas e cadastro reserva;
- local de prova ou lotação;
- inscrição, pagamento, prova, resultado e recursos;
- requisitos gerais;
- documentos;
- etapas;
- conteúdo programático.
Quando o texto é curto, ambíguo ou incompleto, o parser adiciona warnings em vez de inventar dados.
IA opcional¶
O prompt public_exam_notice_extractor_v1 permite estruturar o edital com Gemini quando o backend local está configurado.
Regras:
- a IA só organiza o texto fornecido;
- a IA não salva edital;
- a IA não decide elegibilidade;
- a IA não inventa datas, salário, taxa, banca, órgão, requisito ou conteúdo;
- resposta vazia, inválida ou pouco útil cai para parser local.
Perfil, Lattes e Career Context¶
POST /api/v1/public-exams/{notice_id}/analyze usa:
- Perfil Profissional Universal;
CareerContextPurpose.PUBLIC_EXAMS;- evidências acadêmicas/Lattes confirmadas;
- experiência, formação, registros, certificações, localização e preferências.
Regras conservadoras:
- requisito legal sem evidência vira
missingouuncertain; - registro profissional não é presumido;
- graduação em andamento não conta como concluída;
- edital não cria item de Perfil por si só.
Frontend¶
A rota /public-exams oferece:
- textarea para colar edital;
- URL/fonte opcionais;
- horas semanais disponíveis;
- toggle para usar IA/Gemini se configurada;
- análise local/fallback;
- cartões de órgão, banca, cargos, taxa, salário, datas e requisitos;
- warnings;
- salvar edital revisado;
- comparar com Perfil;
- Exam Fit Score;
- checklist;
- plano de estudo inicial.
Não há botão de inscrição automática.
Radar e Tracker¶
A v1.9.3 prepara tipos e status para oportunidades públicas:
job
public_exam
academic_call
scholarship
residency
internship_public
Status públicos preparados:
noticed
reviewing_notice
requirements_review
registered_manually
studying
exam_scheduled
document_pending
result_waiting
approved
rejected
archived
Fora de escopo¶
- PDF/HTML direto;
- crawler de editais;
- busca automática na internet;
- login em banca/órgão;
- scraping autenticado;
- inscrição automática;
- pagamento automático;
- boleto automático;
- envio automático de documentos;
- score final decidido apenas por IA.
Segurança¶
O fluxo não altera:
/api/v1/sources/authenticated-browser/status
/api/v1/sources/authenticated-browser/launch
/api/v1/sources/authenticated-browser/collect
modules/scraping/browser_session.py
modules/scraping/connectors/authenticated_browser.py
Também não cria docs/ethics/allowed-vs-not-allowed.md.