resuml 1.10.0 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1245,6 +1245,26 @@ function generateSummary(score, rating, hasJd) {
1245
1245
  }
1246
1246
  return `${base} \u2014 based on resume structure and content best practices.`;
1247
1247
  }
1248
+ function assessFit(keywords) {
1249
+ const { matchPercentage, missing } = keywords;
1250
+ if (matchPercentage >= 70) {
1251
+ return {
1252
+ level: "strong",
1253
+ message: "Strong fit \u2014 your resume aligns well with this job description."
1254
+ };
1255
+ }
1256
+ const topMissing = missing.slice(0, 5).join(", ");
1257
+ if (matchPercentage >= 50) {
1258
+ return {
1259
+ level: "partial",
1260
+ message: `Partial fit \u2014 consider emphasizing transferable skills. Key gaps: ${topMissing}.`
1261
+ };
1262
+ }
1263
+ return {
1264
+ level: "weak",
1265
+ message: `Weak fit \u2014 this role requires skills not well represented in your resume. Major gaps: ${topMissing}.`
1266
+ };
1267
+ }
1248
1268
  var weightMultiplier;
1249
1269
  var init_scoring = __esm({
1250
1270
  "src/ats/scoring.ts"() {
@@ -1264,8 +1284,10 @@ function analyzeAts(resume, options = {}) {
1264
1284
  const checks = runGenericChecks(resume, language);
1265
1285
  const genericScore = calculateScore(checks);
1266
1286
  let keywords;
1287
+ let fitAssessment;
1267
1288
  if (options.jobDescription) {
1268
1289
  keywords = matchJobDescription(resume, options.jobDescription, language);
1290
+ fitAssessment = assessFit(keywords);
1269
1291
  }
1270
1292
  const finalScore = calculateCombinedScore(genericScore, keywords?.matchPercentage);
1271
1293
  const rating = scoreToRating(finalScore);
@@ -1275,6 +1297,7 @@ function analyzeAts(resume, options = {}) {
1275
1297
  rating,
1276
1298
  checks,
1277
1299
  keywords,
1300
+ fitAssessment,
1278
1301
  summary
1279
1302
  };
1280
1303
  }
@@ -2144,6 +2167,17 @@ and matches them against the resume using stem matching. Results include:
2144
2167
  - **missing**: Keywords not found (add these to improve score)
2145
2168
  - **matchPercentage**: Percentage of JD keywords found in resume
2146
2169
 
2170
+ ## Fit Assessment
2171
+ When a job description is provided, a \`fitAssessment\` field is included in the result:
2172
+ | Match % | Level | Meaning |
2173
+ |---------|-------|---------|
2174
+ | >= 70% | strong | Resume aligns well with the job description |
2175
+ | 50-69% | partial | Some alignment; emphasize transferable skills |
2176
+ | < 50% | weak | Significant skill gaps; role may not match profile |
2177
+
2178
+ The assessment includes the top 5 missing keywords as specific gaps to address.
2179
+ Use this to advise users whether to apply or focus effort elsewhere.
2180
+
2147
2181
  ## Tips for improving ATS score
2148
2182
  1. Include all contact information (name, email, phone, city)
2149
2183
  2. Add a LinkedIn profile URL