Pular para conteúdo

Regras do Opportunity Fit Score

O Opportunity Fit Score transforma preferências do usuário em cálculo claro e auditável.

Entradas

  • vaga normalizada;
  • preferências do usuário;
  • pesos;
  • campos ausentes;
  • sinais de risco.

Subscores

Subscore Exemplo
Modalidade remoto recebe 100 se usuário prioriza remoto
Localização Jacareí/SJC/SP recebem bônus conforme preferência
Salário abaixo do mínimo reduz score
Contrato estágio/júnior/CLT/PJ conforme aceitação
Senioridade sênior derruba score para usuário júnior
Velocidade processo claro e recente aumenta score
Risco descrição vaga/genérica reduz score

Campos ausentes

Campo ausente não deve ser tratado como zero automaticamente. Ele deve gerar incerteza.

Exemplo:

salário ausente -> score parcial + warning
modalidade ausente -> score parcial + warning

Recomendação

  • apply: boa técnica e boa aderência pessoal.
  • apply_with_adjustments: boa, mas currículo precisa ajuste.
  • save_for_later: potencial, mas faltam dados.
  • ignore: incompatível ou alto risco.

Transparência

Todo score deve vir com explicação simples.

A vaga caiu de 85 para 62 porque é presencial fora da região preferida e não informa salário.

Implementação v0.1

A função pública da v0.1 é calculate_opportunity_fit_score(). Ela recebe uma vaga normalizada e UserPreferences, calcula apenas os subscores configurados e devolve um inteiro entre 0 e 100.

Quando nenhuma preferência concreta foi configurada, a função usa um valor neutro para permitir que a análise continue sem fingir precisão. Campos ausentes recebem pontuação parcial, preservando a diferença entre “incompatível” e “não informado”.

Pesos disponíveis:

  • modality_weight;
  • location_weight;
  • salary_weight;
  • contract_weight;
  • seniority_weight.

Cenários mínimos de teste

  • modalidade preferida aumenta o score;
  • localização incompatível reduz o score;
  • salário abaixo do mínimo reduz proporcionalmente;
  • contrato aceito aumenta o score;
  • vaga sênior reduz fortemente o fit de um perfil júnior;
  • campos ausentes não quebram a função;
  • resultado nunca fica abaixo de 0 ou acima de 100.