v1.8.2 - Perfil Profissional Universal, Inteligência Multiárea & Captura Assistida Segura¶
A v1.8.2 transforma o ProfileContext preparado na v1.8.1 em uma área real do produto: um Perfil
Profissional Universal persistido localmente, editável no frontend moderno e reutilizável por Radar,
Wishlist, Match, ATS, Tailor, Fontes e Captura.
Objetivo da versão¶
- criar um perfil central local-first e baseado em evidências;
- representar trajetórias profissionais, acadêmicas, técnicas, científicas, artísticas e formativas;
- evitar que o SotuHire assuma TI/dev, GitHub, CLT, graduação, experiência formal ou registro profissional;
- permitir importação de texto com IA opcional e fallback local;
- manter revisão humana obrigatória antes de confirmar itens extraídos;
- preparar captura assistida autenticada segura, iniciada pelo usuário e sem segredos de sessão.
Perfil Profissional Universal¶
Foram adicionados modelos em modules/profile/models.py:
UniversalCareerProfile;ProfileItem;ProfileSourceSummary;UniversalCareerProfileState;ProfileDeduplicationSuggestion;ProfileImportDraft.
O store local fica em data/profile/profiles.json por padrão, ou no diretório definido por
SOTUHIRE_DATA_DIR. A estrutura já suporta um perfil ativo e fica preparada para múltiplos perfis
locais no futuro, sem autenticação, cloud ou multi-tenant.
Cada ProfileItem preserva:
type;title;description;area/domain;source;evidence;confidence;confirmed_by_user;- timestamps.
Itens vindos de IA ou fallback local são rascunhos. Itens adicionados ou editados manualmente são marcados como confirmados pelo usuário.
Tipos e áreas¶
O perfil aceita tipos universais como educação, ensino técnico, graduação, pós-graduação, idiomas, certificações, registros profissionais, estágios, trainee, voluntariado, freelancer, pesquisa, publicações, portfólio, GitHub, Behance, ArtStation, práticas clínicas, sala de aula, laboratório, obra, campo, soft skills, ferramentas, métodos e restrições.
O extrator local reconhece sinais conservadores para áreas como:
- saúde;
- direito;
- engenharia;
- educação;
- artes e design;
- pesquisa e laboratório;
- turismo e serviços;
- administração e operações;
- tecnologia e dados.
Registros profissionais são tratados como fato apenas quando aparecem no texto ou no perfil:
CREA, CFT, CRQ, COREN, CRP, CRM, OAB, CRC, CAU, CREF, CRF, CRMV, CRESS, CRN, CRO
API de Perfil¶
Nova API:
GET /api/v1/profile
PUT /api/v1/profile
POST /api/v1/profile/items
PATCH /api/v1/profile/items/{item_id}
DELETE /api/v1/profile/items/{item_id}
POST /api/v1/profile/import-text
POST /api/v1/profile/deduplicate
GET /api/v1/profile/context
Todos os endpoints usam o envelope padrão { ok, data, warnings, request_id }.
Importação de texto¶
POST /api/v1/profile/import-text aceita textos de currículo comum, currículo Lattes, portfólio,
certificados, histórico profissional, notas manuais, projetos, produção científica/artística,
formação técnica, idiomas, registros profissionais e experiências não formais.
Com IA habilitada, o Prompt Registry usa profile_items_extractor_v1. O prompt exige JSON
estruturado, não assume TI/dev/GitHub, não inventa formação/experiência/certificação/registro e
marca tudo como confirmed_by_user=false.
Se IA estiver desligada, indisponível ou retornar JSON inválido, o backend usa fallback local e
mantém needs_user_review=true.
Frontend¶
Nova rota:
/profile
A tela Perfil permite:
- editar dados básicos;
- adicionar item manual;
- filtrar itens por tipo;
- editar título, domínio e evidência de item;
- remover item;
- importar texto por tipo de fonte;
- revisar itens extraídos antes de adicionar ao perfil;
- visualizar badges de origem, confiança e confirmação.
O modo Demo usa dados fictícios. O modo API Real não mistura dados demo silenciosamente quando o backend local não possui perfil.
Integrações¶
Radar e Wishlist¶
POST /api/v1/radar/wishlists/draft usa ProfileContextOrchestrator com o perfil persistido quando
use_profile_context=true. A tela Radar mostra o badge Contexto do perfil aplicado. O rascunho
continua sem persistência automática e sempre exige revisão humana.
Match, ATS e Tailor¶
apps/api/services/analysis.py adiciona contexto do perfil de forma conservadora:
- localmente, o contexto pode enriquecer a evidência enviada para as análises;
- para provider externo, o contexto só é enviado se
allow_memory_context=true; - quando não é enviado ao provider externo, a API retorna warning em vez de vazar dados;
- score final e regras continuam no backend/core.
Fontes e Captura¶
POST /api/v1/sources/authenticated-captures salva texto visível ou selecionado de uma página
autenticada como item de Caixa de Entrada para revisão. A captura assistida:
- exige
user_review_required=true; - não salva candidatura automaticamente;
- não armazena cookie, token, sessão ou headers autenticados;
- marca
auto_apply=false; - adiciona sinais locais do perfil, como itens confirmados encontrados e possíveis gaps de registros.
Captura Assistida Autenticada¶
A captura assistida é local, manual e iniciada pelo usuário. Ela pode ser usada após login manual feito pela pessoa em uma página aberta, inclusive no navegador autenticado existente, mas a v1.8.2 não altera a lógica sensível de Chromium/CDP.
Fora do escopo:
- auto-apply;
- candidatura automática;
- automação de login;
- bypass de CAPTCHA;
- navegação automatizada em massa;
- coleta de cookie, token, sessão ou headers autenticados;
- envio automático de mensagem para recrutadores.
Segurança e privacidade¶
- O perfil é salvo localmente.
- API key continua backend-side e nunca retorna ao frontend.
- O frontend não salva chave em
localStorageousessionStorage. - IA sugere; backend valida; usuário revisa.
- Dados sensíveis do perfil só entram em payload externo quando
allow_memory_context=true. - Registros profissionais ausentes viram gap ou item a confirmar, nunca fato inventado.
Testes¶
Foram adicionados testes para:
- CRUD de perfil;
- importação local e IA fake;
- fallback quando IA falha;
- revisão obrigatória;
- deduplicação;
- exemplos multiárea;
- Wishlist usando perfil persistido;
- captura assistida autenticada sem segredo;
- OpenAPI com
/api/v1/profile; - frontend smoke da rota
/profile.
Limitações conhecidas¶
- Ainda não há upload direto de arquivo para o Perfil; a importação é por texto colado.
- Deduplicação retorna sugestões e não faz merge destrutivo automático.
- O Kanban ainda usa o contexto do perfil indiretamente pelos fluxos de análise; visualizações mais ricas por candidatura ficam para versões futuras.
- Captura assistida foi preparada no backend/API; melhorias específicas no popup da extensão podem evoluir em ciclos posteriores.
Próximos passos¶
- v1.9.0: Scheduled Radar & Notifications.
- Aprofundar matching adaptativo por domínio.
- Exibir mais sinais do Perfil dentro do detalhe de candidatura.
- Adicionar importação de arquivos diretamente no Perfil, se necessário.