using System.Globalization; namespace SeaHaven.Services.Helpers { public static class WorkOrderNumberRules { private const int MaximumLength = 11; private const int MinimumProvisionalDigits = 5; public static bool IsProvisional(string? woNumber) => !string.IsNullOrWhiteSpace(woNumber) && woNumber.Trim().StartsWith("SH", StringComparison.OrdinalIgnoreCase); public static string FormatProvisional(long seed) { if (seed < 1) throw new ArgumentOutOfRangeException(nameof(seed), "Provisional WO number seed must be positive."); var digits = seed.ToString(CultureInfo.InvariantCulture) .PadLeft(MinimumProvisionalDigits, '0'); var provisional = $"SH{digits}"; if (provisional.Length > MaximumLength) throw new ArgumentOutOfRangeException(nameof(seed), "Provisional WO number exceeds the supported length."); return provisional; } } }