Pular para conteúdo

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 localStorage ou sessionStorage.
  • 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.