feat: Add legal compliance changes

- Replace 'diploma mill' language with objective 'unaccredited institution' terminology
- Rename DiplomaMills.cs to UnaccreditedInstitutions.cs with neutral language
- Update EducationVerificationResult.IsUnaccredited property
- Update flag titles to 'Unaccredited Institution' and 'Institution Requires Verification'
- Add legal disclaimer to verification report page
- Add Privacy Policy page (/privacy) with UK GDPR compliance info
- Add Terms of Service page (/terms) with candidate notice requirements
- Add footer links to Privacy and Terms pages
- Update all tests to use new terminology

🤖 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:52:12 +00:00
parent 49e4f74768
commit 0c42842655
9 changed files with 401 additions and 57 deletions

View File

@@ -14,17 +14,17 @@ public sealed class EducationVerifierService : IEducationVerifierService
{
var institution = education.Institution;
// Check for diploma mill first (highest priority flag)
if (DiplomaMills.IsDiplomaMill(institution))
// Check for unaccredited institution first (highest priority flag)
if (UnaccreditedInstitutions.IsUnaccredited(institution))
{
return new EducationVerificationResult
{
ClaimedInstitution = institution,
Status = "DiplomaMill",
Status = "Unaccredited",
IsVerified = false,
IsDiplomaMill = true,
IsUnaccredited = true,
IsSuspicious = true,
VerificationNotes = "Institution is on the diploma mill blacklist",
VerificationNotes = "Institution not found in QAA/HESA register of recognised institutions",
ClaimedStartDate = education.StartDate,
ClaimedEndDate = education.EndDate,
DatesArePlausible = true,
@@ -34,16 +34,16 @@ public sealed class EducationVerifierService : IEducationVerifierService
}
// Check for suspicious patterns
if (DiplomaMills.HasSuspiciousPattern(institution))
if (UnaccreditedInstitutions.HasSuspiciousPattern(institution))
{
return new EducationVerificationResult
{
ClaimedInstitution = institution,
Status = "Suspicious",
IsVerified = false,
IsDiplomaMill = false,
IsUnaccredited = false,
IsSuspicious = true,
VerificationNotes = "Institution name contains suspicious patterns common in diploma mills",
VerificationNotes = "Institution name contains patterns that may indicate unaccredited status",
ClaimedStartDate = education.StartDate,
ClaimedEndDate = education.EndDate,
DatesArePlausible = true,
@@ -64,7 +64,7 @@ public sealed class EducationVerifierService : IEducationVerifierService
MatchedInstitution = officialName,
Status = "Recognised",
IsVerified = true,
IsDiplomaMill = false,
IsUnaccredited = false,
IsSuspicious = false,
VerificationNotes = institution.Equals(officialName, StringComparison.OrdinalIgnoreCase)
? "Verified UK higher education institution"
@@ -88,7 +88,7 @@ public sealed class EducationVerifierService : IEducationVerifierService
ClaimedInstitution = institution,
Status = "Unknown",
IsVerified = false,
IsDiplomaMill = false,
IsUnaccredited = false,
IsSuspicious = false,
VerificationNotes = isUnknownInstitution ? null : "Institution not found in UK recognised institutions database. May be an international institution.",
ClaimedStartDate = education.StartDate,