feat: Expand UK institution recognition with professional bodies and variations

- Add CIPD, CIMA, ACCA, ICAEW, ICAS, CII, CIPS, CMI as recognized professional bodies
- Add 40+ university name variations (e.g., "Hull University" → "University of Hull")
- Add automatic "X University" ↔ "University of X" pattern transformation
- Improves education verification accuracy for common CV name formats

🤖 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-21 20:42:35 +00:00
parent 4337f7a381
commit 0457271b57

View File

@@ -156,6 +156,24 @@ public static class UKInstitutions
"University for the Creative Arts",
"Ravensbourne University London",
// Professional Bodies (accredited qualification-awarding)
"CIPD",
"Chartered Institute of Personnel and Development",
"CIMA",
"Chartered Institute of Management Accountants",
"ACCA",
"Association of Chartered Certified Accountants",
"ICAEW",
"Institute of Chartered Accountants in England and Wales",
"ICAS",
"Institute of Chartered Accountants of Scotland",
"CII",
"Chartered Insurance Institute",
"CIPS",
"Chartered Institute of Procurement and Supply",
"CMI",
"Chartered Management Institute",
// Business Schools (accredited)
"Henley Business School",
"Warwick Business School",
@@ -231,6 +249,77 @@ public static class UKInstitutions
["Queen Mary"] = "Queen Mary University of London",
["Royal Holloway University"] = "Royal Holloway, University of London",
["RHUL"] = "Royal Holloway, University of London",
["Hull University"] = "University of Hull",
["Hull"] = "University of Hull",
// Additional "X University" variations for "University of X" institutions
["Birmingham University"] = "University of Birmingham",
["Bristol University"] = "University of Bristol",
["Edinburgh University"] = "University of Edinburgh",
["Exeter University"] = "University of Exeter",
["Glasgow University"] = "University of Glasgow",
["Leeds University"] = "University of Leeds",
["Leicester University"] = "University of Leicester",
["Liverpool University"] = "University of Liverpool",
["Manchester University"] = "University of Manchester",
["Nottingham University"] = "University of Nottingham",
["Sheffield University"] = "University of Sheffield",
["Southampton University"] = "University of Southampton",
["Warwick University"] = "University of Warwick",
["York University"] = "University of York",
["Bath University"] = "University of Bath",
["Bradford University"] = "University of Bradford",
["Brighton University"] = "University of Brighton",
["Derby University"] = "University of Derby",
["Dundee University"] = "University of Dundee",
["Essex University"] = "University of Essex",
["Greenwich University"] = "University of Greenwich",
["Hertfordshire University"] = "University of Hertfordshire",
["Huddersfield University"] = "University of Huddersfield",
["Kent University"] = "University of Kent",
["Lincoln University"] = "University of Lincoln",
["Plymouth University"] = "University of Plymouth",
["Portsmouth University"] = "University of Portsmouth",
["Reading University"] = "University of Reading",
["Salford University"] = "University of Salford",
["Surrey University"] = "University of Surrey",
["Sussex University"] = "University of Sussex",
["Westminster University"] = "University of Westminster",
["Winchester University"] = "University of Winchester",
["Wolverhampton University"] = "University of Wolverhampton",
["Worcester University"] = "University of Worcester",
["Aberdeen University"] = "University of Aberdeen",
["Stirling University"] = "University of Stirling",
["Strathclyde University"] = "University of Strathclyde",
["Aberystwyth University"] = "Aberystwyth University",
["Bangor University"] = "Bangor University",
["Swansea University"] = "Swansea University",
// London university variations
["UCL"] = "University College London",
["University College, London"] = "University College London",
["East London University"] = "University of East London",
["London Metropolitan"] = "London Metropolitan University",
["London Met"] = "London Metropolitan University",
["South Bank University"] = "London South Bank University",
["LSBU"] = "London South Bank University",
// Other common variations
["Open University"] = "The Open University",
["OU"] = "The Open University",
["Northumbria"] = "Northumbria University",
["De Montfort"] = "De Montfort University",
["DMU"] = "De Montfort University",
["Sheffield Hallam"] = "Sheffield Hallam University",
["Nottingham Trent"] = "Nottingham Trent University",
["NTU"] = "Nottingham Trent University",
["Oxford Brookes"] = "Oxford Brookes University",
["MMU"] = "Manchester Metropolitan University",
["Manchester Met"] = "Manchester Metropolitan University",
["Liverpool John Moores"] = "Liverpool John Moores University",
["LJMU"] = "Liverpool John Moores University",
["UWE"] = "University of the West of England",
["West of England"] = "University of the West of England",
};
/// <summary>
@@ -283,6 +372,11 @@ public static class UKInstitutions
if (NameVariations.TryGetValue(normalised, out var officialName))
return officialName;
// Try automatic "X University" ↔ "University of X" transformation
var transformed = TryTransformUniversityName(normalised);
if (transformed != null && RecognisedInstitutions.Contains(transformed))
return transformed;
// Handle compound names (e.g., "Loughborough College/Motorsport UK Academy")
// Split by common separators and check each part
var separators = new[] { '/', '&', '-', '', '—', ',' };
@@ -323,4 +417,27 @@ public static class UKInstitutions
return null;
}
/// <summary>
/// Attempts to transform university name between common formats:
/// "X University" ↔ "University of X"
/// </summary>
private static string? TryTransformUniversityName(string name)
{
// Try "X University" → "University of X"
if (name.EndsWith(" University", StringComparison.OrdinalIgnoreCase))
{
var place = name[..^11].Trim(); // Remove " University"
return $"University of {place}";
}
// Try "University of X" → "X University"
if (name.StartsWith("University of ", StringComparison.OrdinalIgnoreCase))
{
var place = name[14..].Trim(); // Remove "University of "
return $"{place} University";
}
return null;
}
}