export function calculateJobseekerQualitySignals(
input: JobseekerQualityScoreInput,
): QualitySignal[] {
return [
{ key: "avatar", weight: 15, earned: isFieldFilled(input.avatar_url) ? 15 : 0 },
{ key: "job_title", weight: 10, earned: isFieldFilled(input.job_title) ? 10 : 0 },
{ key: "bio", weight: 10, earned: stripHtmlToText(input.description).length >= 100 ? 10 : 0 },
{ key: "country", weight: 5, earned: isFieldFilled(input.country) ? 5 : 0 },
{ key: "skills", weight: 10, earned: input.skillsCount >= 3 ? 10 : 0 },
{ key: "experience", weight: 10, earned: input.experienceCount >= 1 ? 10 : 0 },
{ key: "education", weight: 5, earned: input.educationCount >= 1 ? 5 : 0 },
{ key: "rate", weight: 5, earned: isFieldFilled(input.desired_compensation) ? 5 : 0 },
{ key: "phone", weight: 5, earned: isFieldFilled(input.phone) ? 5 : 0 },
{ key: "cv", weight: 5, earned: input.hasProfileCv ? 5 : 0 },
{ key: "email", weight: 10, earned: input.emailConfirmed ? 10 : 0 },
{ key: "verification", weight: 10, earned: Math.min(Math.floor((input.verificationPercentage ?? 0) / 10), 10) },
];
}
export function calculateJobseekerQualityScore(input: JobseekerQualityScoreInput): number {
const total = calculateJobseekerQualitySignals(input).reduce((sum, signal) => sum + signal.earned, 0);
return Math.max(0, Math.min(100, total));
}