Round #467

09 May 2026, 15:44· hr-law· grok-4.3· r13-clean-hints
Complexity
band 0
ZP / UO / OBS
3 / 0 / 1
Journey weight
250
Lightshift ΔL
+0.50

Prompt

We are restructuring and one of three identical roles is no longer needed. How do we decide which employees are in the selection pool for redundancy?

Zero-point index (what the engine surfaced)

ZPI-ZPI-0004 | 2026-05-09T15:44:59Z We are restructuring and one of three identical roles is no longer needed. How do we decide which employees are in the selection pool for redundancy? ZERO POINT — 3 entries (structural invariants) ● hsl(142.90, 100%, 38%) selection criteria [contract] ● hsl(124.95, 100%, 38%) individual consultation [contract] ● hsl(69.11, 100%, 38%) statutory redundancy pay [contract] UNOBSERVED — 0 entries (implied truths) OBSERVED — 1 entries (explicit in request) ◉ hsl(251.00, 100%, 38%) selection pool [feature] COMPLEXITY │ 4 entries │ spread: 0° │ band: LOW

Baseline response (no ZPI)

**All three employees should be placed in the selection pool.** When three roles are genuinely identical and only two are needed, the correct and safest approach is to treat the entire group as the redundancy pool. This is the standard expectation under UK employment law (and similar principles in many other jurisdictions) to ensure the process is fair and defensible. ### Why all three go into the pool - The roles are the same, so there is no objective basis for automatically excluding one person before scoring. - Excluding someone at the outset (e.g., “we’ve decided it’s X”) risks claims of unfair selection or discrimination. - Tribunals generally expect the pool to include everyone whose work is of the same or similar kind unless there is a clear, documented reason why a narrower pool is justified. ### How to run the selection process fairly Once the pool is confirmed as all three employees, you must apply a transparent, objective, and non-discriminatory selection method: 1. **Define clear selection criteria** (ideally 4–6 criteria) Common, acceptable criteria include: - Skills, qualifications and experience relevant to the remaining roles - Performance / appraisal records - Disciplinary record (live warnings only) - Attendance record (with adjustments for disability-related absence) - Flexibility / willingness to undertake other duties Avoid or heavily weight against: - Pure “last in, first out” (LIFO) as the main criterion — it can be age-discriminatory. - Subjective factors such as “attitude” or “fit” without measurable evidence. 2. **Score each employee** against the criteria using a consistent scoring matrix. Ideally two managers score independently and then moderate to reduce bias. 3. **Consult** with the affected employees (individually and/or collectively) before final decisions. Explain the pool, the criteria, the scoring method, and invite them to comment or provide additional information. 4. **Consider alternatives to redundancy** for the lowest-scoring employee(s) (redeployment, reduced hours, etc.). 5. **Document everything** — the rationale for the pool, the criteria, scores, consultation notes, and why the lowest scorer was selected. ### Quick checklist before proceeding - Are the three roles truly identical in duties, grade, location and reporting line? (If not, the pool may need adjusting.) - Have you explored whether any of the three could be redeployed elsewhere? - Are you applying the same criteria and process consistently? - Have you allowed reasonable time for consultation? **Important disclaimer**: This is general guidance based on standard UK redundancy principles. Employment law is fact-specific and varies by country. You should take advice from an employment lawyer or your HR adviser before implementing any selection process, especially if any of the employees have protected characteristics, are on maternity leave, or have less than two years’ service.

Enhanced response (with ZPI)

```csharp using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; namespace RedundancyManagement { public record Employee( Guid Id, string Name, int Age, int YearsOfService, decimal WeeklyPay, string Role, Dictionary<string, decimal> Scores); public interface ISelectionCriterion { string Name { get; } decimal Score(Employee employee); } public sealed class LastInFirstOutCriterion : ISelectionCriterion { public string Name => "Last In First Out"; public decimal Score(Employee employee) => -employee.YearsOfService; } public sealed class PerformanceCriterion : ISelectionCriterion { public string Name => "Performance"; public decimal Score(Employee employee) => employee.Scores.GetValueOrDefault("Performance", 0); } public interface IRedundancySelector { IReadOnlyList<Employee> DetermineSelectionPool( IReadOnlyList<Employee> allEmployees, string redundantRole); IReadOnlyList<Employee> ApplySelectionCriteria( IReadOnlyList<Employee> pool, IEnumerable<ISelectionCriterion> criteria, int numberToSelect); } public sealed class RedundancySelector : IRedundancySelector { public IReadOnlyList<Employee> DetermineSelectionPool( IReadOnlyList<Employee> allEmployees, string redundantRole) { if (string.IsNullOrWhiteSpace(redundantRole)) throw new ArgumentException("Role must be provided", nameof(redundantRole)); return allEmployees .Where(e => e.Role.Equals(redundantRole, StringComparison.OrdinalIgnoreCase)) .ToList(); } public IReadOnlyList<Employee> ApplySelectionCriteria( IReadOnlyList<Employee> pool, IEnumerable<ISelectionCriterion> criteria, int numberToSelect) { if (pool.Count < numberToSelect) throw new InvalidOperationException("Pool is smaller than number to select."); var criteriaList = criteria.ToList(); if (!criteriaList.Any()) throw new ArgumentException("At least one selection criterion is required."); return pool .OrderByDescending(e => criteriaList.Sum(c => c.Score(e))) .Take(pool.Count - numberToSelect) .ToList(); } } public interface IStatutoryRedundancyPayCalculator { decimal Calculate(Employee employee, DateTime calculationDate); } public sealed class StatutoryRedundancyPayCalculator : IStatutoryRedundancyPayCalculator { private const decimal WeeklyCap = 643.00m; // 2024-25 rate public decimal Calculate(Employee employee, DateTime calculationDate) { if (employee.YearsOfService < 2) return 0; var age = employee.Age; var service = Math.Min(employee.YearsOfService, 20); var weeklyPay = Math.Min(employee.WeeklyPay, WeeklyCap); decimal multiplier = 0; for (int i = 0; i < service; i++) { int yearAge = age - (service - i); multiplier += yearAge >= 41 ? 1.5m : yearAge >= 22 ? 1.0m : 0.5m; } return Math.Round(multiplier * weeklyPay, 2); } } public static class ServiceCollectionExtensions { public static IServiceCollection AddRedundancyServices(this IServiceCollection services) { services.AddSingleton<ISelectionCriterion, LastInFirstOutCriterion>(); services.AddSingleton<ISelectionCriterion, PerformanceCriterion>(); services.AddSingleton<IRedundancySelector, RedundancySelector>(); services.AddSingleton<IStatutoryRedundancyPayCalculator, StatutoryRedundancyPayCalculator>(); return services; } } } ```

Grader chain

Each grader reads the same baseline + enhanced pair and casts an independent verdict. Disagreement is the framework's own signal — not noise to be averaged away.

V1samba/Meta-Llama-3.3-70B-Instruct
Better
V4qwen2.5-coder-3b-instruct
Better
V5openrouter/qwen/qwen3-235b-a22b-2507
Better
V7qwen2.5-coder-7b-instruct
Better
V8openai/gpt-4.1
Better
V9anthropic/claude-opus-4-7
Worse
V12openai/gpt-4o
Better

Comments

Our grader said what it said. What do you say? Comment as a guest below.

No comments yet. Be the first to say what you make of this round.

← back to all rounds