Pular para conteúdo

Regras do Opportunity Fit Score na v0.1

Este documento registra o contrato operacional do Opportunity Fit Score implementado no SotuHire v0.1 — MVP Core.

Objetivo

O Match Score responde se o currículo parece aderente aos requisitos. O Opportunity Fit Score responde se a oportunidade combina com as prioridades pessoais informadas pelo usuário.

Esses scores não devem ser confundidos. Uma vaga tecnicamente boa pode ser inadequada por salário, modalidade, localização, contrato ou senioridade.

Entradas

  • job["modality"];
  • job["location"];
  • job["salary_min"];
  • job["contract"];
  • job["seniority"];
  • UserPreferences.

Política de pontuação

Sinal Compatível Ausente Incompatível
Modalidade 100 60 25
Localização 100 60 35
Salário 100 ou proporcional 60 proporcional
Contrato 100 60 30
Senioridade 100 60 5 a 45

Somente preferências configuradas entram na média ponderada. Quando o usuário não configura preferências, o resultado é neutro.

Função pública

calculate_opportunity_fit_score(job, preferences) -> int

O resultado é sempre um inteiro entre 0 e 100 e pode ser usado pela recomendação final sem dependência de Streamlit.

Limites

  • o score não infere preferências;
  • salário ausente não significa salário ruim;
  • texto de localização é comparado de forma simples no MVP;
  • pesos customizados não podem ser negativos;
  • explicações detalhadas podem evoluir depois da validação da heurística.

Relação com a recomendação

O Opportunity Fit Score participa de build_recommendation(), mas não decide sozinho. Match, ATS e risco também importam.

flowchart LR
    A[Preferências] --> B[Opportunity Fit]
    C[Match] --> D[Recomendação]
    E[ATS] --> D
    F[Risco] --> D
    B --> D

Testes

  • modalidade, localização e salário alteram o score;
  • vaga vazia não quebra;
  • preferências vazias geram resultado neutro;
  • valores extremos permanecem entre 0 e 100.

Veja também Opportunity Fit Score para a visão de negócio mais ampla.

Integração com parser e histórico

Na v0.4, modalidade, localização, salário, contrato e senioridade podem ser detectados automaticamente pelo parser de vaga. O usuário revisa esses campos antes da análise.

O Opportunity Fit salvo no histórico representa as preferências vigentes no momento da análise. Alterar preferências depois não reescreve silenciosamente scores antigos.

Campos ausentes continuam neutros/parciais; o parser não deve inventar um valor para melhorar o fit.