Round #390

08 May 2026, 22:33· hr-law· claude-haiku-4-5-20251001· r13-clean-hints
Complexity
band 0
ZP / UO / OBS
3 / 5 / 2
Journey weight
679
Lightshift ΔL
+0.00

Prompt

An employee has a final written warning that expires in two weeks. They commit a minor act of misconduct today. Can we use the active FWW when deciding sanction?

Zero-point index (what the engine surfaced)

ZPI-ZPI-0007 | 2026-05-08T22:33:56Z An employee has a final written warning that expires in two weeks. They commit a minor act of misconduct today. Can we use the active FWW when deciding sanction? ZERO POINT — 3 entries (structural invariants) ● hsl(157.40, 100%, 34%) ACAS Code of Practice [contract] ● hsl(34.71, 100%, 34%) procedural fairness [contract] ● hsl(280.96, 100%, 34%) appeal right [contract] UNOBSERVED — 5 entries (implied truths) ○ hsl(230.00, 100%, 32%) right to be accompanied [feature] ○ hsl(231.00, 100%, 33%) appeal right [feature] ○ hsl(225.00, 100%, 34%) disciplinary investigation [feature] ○ hsl(180.00, 100%, 42%) Conduct disciplinary investigation [function] ○ hsl(182.25, 100%, 24%) Issue disciplinary invitation [function] OBSERVED — 2 entries (explicit in request) ◉ hsl(227.00, 100%, 28%) written warning [feature] ◉ hsl(228.00, 100%, 24%) final written warning [feature] COMPLEXITY │ 10 entries │ spread: 51° │ band: LOW

Baseline response (no ZPI)

# Using an Active Final Written Warning for New Misconduct **Yes, you can generally use the active FWW**, but with important caveats: ## Key Principles **In your favor:** - An active FWW is a live disciplinary sanction that can influence the severity of new breaches - It demonstrates escalating misconduct patterns - It's relevant context for proportionality assessment **Critical limitations:** - The **minor nature** of today's conduct matters significantly - You cannot automatically jump to dismissal just because an FWW exists - The **proximity to expiry** (2 weeks) may reduce its influence somewhat - The sanction must still be **proportionate** to the new misconduct itself ## Practical Approach 1. **Assess the new misconduct independently** - What sanction would it normally warrant on its own? 2. **Consider the FWW as context** - It may justify moving up one level (e.g., from verbal to written warning) 3. **Avoid automatic dismissal** - Unless the new conduct is genuinely serious, a final written warning alone won't justify termination 4. **Document clearly** - Record that the active FWW was considered but that the sanction reflects the specific circumstances ## Example Minor misconduct alone = written warning normally + Active FWW = escalate to final written warning (possibly) ≠ Automatic dismissal **Is the specific misconduct detailed?** That would help assess the appropriate response.

Enhanced response (with ZPI)

# Employee Disciplinary Decision Service Based on UK employment law (ACAS Code of Practice), a final written warning (FWW) that is still *active* (within its validity period) can be considered when deciding sanctions for new misconduct. However, this requires proper procedural fairness and documented decision-making. ## Implementation ```csharp using System; using System.Collections.Generic; using System.Linq; using Microsoft.Extensions.DependencyInjection; namespace EmployeeDisciplinary.Services { /// <summary> /// Represents a disciplinary warning with validity period. /// </summary> public class DisciplinaryWarning { public string WarningId { get; set; } public WarningLevel Level { get; set; } public DateTime IssuedDate { get; set; } public DateTime ExpiryDate { get; set; } public string Reason { get; set; } public bool IsActive(DateTime asOfDate) => asOfDate <= ExpiryDate && asOfDate >= IssuedDate; public int DaysUntilExpiry(DateTime asOfDate) => (int)(ExpiryDate - asOfDate).TotalDays; } public enum WarningLevel { Verbal, Written, FinalWritten } /// <summary> /// Represents misconduct reported against an employee. /// </summary> public class MisconductIncident { public string IncidentId { get; set; } public DateTime IncidentDate { get; set; } public MisconductSeverity Severity { get; set; } public string Description { get; set; } public string ReportedBy { get; set; } } public enum MisconductSeverity { Minor, Moderate, Serious, Gross } /// <summary> /// Disciplinary decision with audit trail for procedural fairness. /// </summary> public class DisciplinaryDecision { public string DecisionId { get; set; } public string EmployeeId { get; set; } public MisconductIncident Incident { get; set; } public DisciplinaryWarning ApplicableFinalWarning { get; set; } public SanctionRecommendation SanctionRecommendation { get; set; } public string DecisionRationale { get; set; } public DateTime DecisionDate { get; set; } public string DecisionMaker { get; set; } public List<string> ProceduralConsiderations { get; set; } = new(); public AppealRight AppealRight { get; set; } } public class SanctionRecommendation { public SanctionType SanctionType { get; set; } public string Details { get; set; } public DateTime EffectiveFrom { get; set; } } public enum SanctionType { Dismissed, SuspensionWithWarning, FinalWrittenWarning, WrittenWarning, Counselling, NoAction } /// <summary> /// Formal appeal right notification per ACAS Code of Practice. /// </summary> public class AppealRight { public bool HasRight { get; set; } public DateTime DeadlineToAppeal { get; set; } public string AppealContactEmail { get; set; } public string AppealInstructions { get; set; } } /// <summary> /// Core service for disciplinary decisions considering active warnings. /// Implements ACAS Code of Practice principles. /// </summary> public interface IDisciplinaryDecisionService { DisciplinaryDecision MakeDisciplinaryDecision( string employeeId, MisconductIncident incident, List<DisciplinaryWarning> warningHistory); bool CanUseFinalWarningInSanctioning( DisciplinaryWarning fww, DateTime incidentDate); } public class DisciplinaryDecisionService : IDisciplinaryDecisionService { private readonly IDecisionAuditLogger _auditLogger; private const int AppealWindowDays = 10; public DisciplinaryDecisionService(IDecisionAuditLogger auditLogger) { _auditLogger = auditLogger ?? throw new ArgumentNullException(nameof(auditLogger)); } /// <summary> /// Determines whether an active FWW can be considered when sanctioning new misconduct. /// Per ACAS Code: Active warnings (within validity) are relevant context. /// </summary> public bool CanUseFinalWarningInSanctioning( DisciplinaryWarning fww, DateTime incidentDate) { if (fww?.Level != WarningLevel.FinalWritten) return false; // FWW must be active (not expired) at time of new incident return fww.IsActive(incidentDate); } /// <summary> /// Makes a documented disciplinary decision considering procedural fairness. /// Returns decision object suitable for formal notification to employee. /// </summary> public DisciplinaryDecision MakeDisciplinaryDecision( string employeeId, MisconductIncident incident, List<DisciplinaryWarning> warningHistory) { if (string.IsNullOrWhiteSpace(employeeId)) throw new ArgumentException("Employee ID required.", nameof(employeeId)); if (incident == null) throw new ArgumentNullException(nameof(incident)); if (warningHistory == null) warningHistory = new List<DisciplinaryWarning>(); var decisionId = Guid.NewGuid().ToString(); var now = DateTime.UtcNow; // Check for active FWW var activeFWW = warningHistory .FirstOrDefault(w => CanUseFinalWarningInSanctioning(w, incident.IncidentDate)); var proceduralNotes = new List<string>(); // Determine appropriate sanction var (sanction, rationale) = DetermineSanction( incident, activeFWW, proceduralNotes); var decision = new DisciplinaryDecision { DecisionId = decisionId, EmployeeId = employeeId, Incident = incident, ApplicableFinalWarning = activeFWW, SanctionRecommendation = sanction, DecisionRationale = rationale, DecisionDate = now, DecisionMaker = "HRManager", // In real impl, inject current user ProceduralConsiderations = proceduralNotes, AppealRight = new AppealRight { HasRight = true, DeadlineToAppeal = now.AddDays(AppealWindowDays), AppealContactEmail = "hr-appeals@company.com", AppealInstructions = $"You have {AppealWindowDays} days to appeal. " + "Submit written appeal to HR with grounds stated." } }; // Audit the decision for procedural fairness verification _auditLogger.LogDecision(decision); return decision; } private (SanctionRecommendation, string) DetermineSanction( MisconductIncident incident, DisciplinaryWarning activeFWW, List<string> notes) { // ACAS guidance: progression from warning to warning to dismissal // Minor misconduct with active FWW typically = dismissal // Minor misconduct without FWW = written warning if (activeFWW != null) { notes.Add($"Active Final Written Warning considered (issued {activeFWW.IssuedDate:d}, expires {activeFWW.ExpiryDate:d})"); notes.Add($"Final warning expires in {activeFWW.DaysUntilExpiry(DateTime.UtcNow)} days

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-7b-instruct
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