feat: Add text analysis checks for CV verification

Implement four new CV verification checks without external APIs:

1. Buzzword detection - flags excessive clichés (50+ patterns)
2. Vague achievement detection - identifies weak language vs quantified results
3. Skills/job title alignment - checks skills match claimed roles (25+ role mappings)
4. Unrealistic metrics detection - flags implausible claims (>200% growth, etc.)

New files:
- ITextAnalysisService interface
- TextAnalysisResult models
- TextAnalysisService implementation (~400 lines)

Integration:
- Added "Analysing Content" processing stage
- Flags appear under Plausibility category
- TextAnalysis section added to veracity report

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-25 04:30:11 +00:00
parent a132efd907
commit 2575e2be95
7 changed files with 721 additions and 1 deletions

View File

@@ -20,6 +20,7 @@ public sealed class ProcessCVCheckJobTests : IDisposable
private readonly Mock<ICompanyVerifierService> _companyVerifierServiceMock;
private readonly Mock<IEducationVerifierService> _educationVerifierServiceMock;
private readonly Mock<ITimelineAnalyserService> _timelineAnalyserServiceMock;
private readonly Mock<ITextAnalysisService> _textAnalysisServiceMock;
private readonly Mock<IAuditService> _auditServiceMock;
private readonly Mock<ILogger<ProcessCVCheckJob>> _loggerMock;
private readonly ProcessCVCheckJob _sut;
@@ -41,6 +42,7 @@ public sealed class ProcessCVCheckJobTests : IDisposable
_companyVerifierServiceMock = new Mock<ICompanyVerifierService>();
_educationVerifierServiceMock = new Mock<IEducationVerifierService>();
_timelineAnalyserServiceMock = new Mock<ITimelineAnalyserService>();
_textAnalysisServiceMock = new Mock<ITextAnalysisService>();
_auditServiceMock = new Mock<IAuditService>();
_loggerMock = new Mock<ILogger<ProcessCVCheckJob>>();
@@ -51,6 +53,7 @@ public sealed class ProcessCVCheckJobTests : IDisposable
_companyVerifierServiceMock.Object,
_educationVerifierServiceMock.Object,
_timelineAnalyserServiceMock.Object,
_textAnalysisServiceMock.Object,
_auditServiceMock.Object,
_loggerMock.Object);
}
@@ -1073,6 +1076,10 @@ public sealed class ProcessCVCheckJobTests : IDisposable
_timelineAnalyserServiceMock
.Setup(x => x.Analyse(It.IsAny<List<EmploymentEntry>>()))
.Returns(timelineResult);
_textAnalysisServiceMock
.Setup(x => x.Analyse(It.IsAny<CVData>()))
.Returns(new TextAnalysisResult());
}
private static CVData CreateTestCVData(int employmentCount = 1)