namespace Admin.NET.Plugin.AiDOP.Infrastructure.S8; /// /// G-06 最小问题台账三档状态短码 ↔ 主链状态集合的静态映射。 /// 口径来源《G-06 最小问题台账》§五;不落库、不可配置、不支持运行期追加; /// 短码白名单固定为 discovered / processing / closed,留空视为全量; /// hold / suspend / pending / all 等一律视为非法参数。 /// public static class S8IssueLedgerStates { /// 台账状态短码:已登记但尚未被接单。 public const string Discovered = "discovered"; /// 台账状态短码:已进入处置链路。 public const string Processing = "processing"; /// 台账状态短码:终局(CLOSED / REJECTED)。 public const string Closed = "closed"; /// 短码 → 主链状态集合。挂起不存在,hold / suspend / pending 均视为非法参数。 private static readonly IReadOnlyDictionary> ShortCodeToStatuses = new Dictionary>(StringComparer.Ordinal) { [Discovered] = new[] { "NEW" }, [Processing] = new[] { "ASSIGNED", "IN_PROGRESS", "PENDING_VERIFICATION", "ESCALATED", "RESOLVED" }, [Closed] = new[] { "CLOSED", "REJECTED" } }; /// 由主链状态解析台账短码;未归类返回 null。 public static string? TryGetShortCode(string? status) { if (string.IsNullOrWhiteSpace(status)) return null; return status switch { "NEW" => Discovered, "ASSIGNED" or "IN_PROGRESS" or "PENDING_VERIFICATION" or "ESCALATED" or "RESOLVED" => Processing, "CLOSED" or "REJECTED" => Closed, _ => null }; } /// 由台账短码获取对应主链状态集合;未知短码返回空集合。 public static IReadOnlyList GetStatuses(string? shortCode) { if (string.IsNullOrWhiteSpace(shortCode)) return Array.Empty(); return ShortCodeToStatuses.TryGetValue(shortCode, out var statuses) ? statuses : Array.Empty(); } /// 三档短码对应的全部主链状态集合(便于查询层复用)。 public static IReadOnlyList AllStatuses { get; } = new[] { "NEW", "ASSIGNED", "IN_PROGRESS", "PENDING_VERIFICATION", "ESCALATED", "RESOLVED", "CLOSED", "REJECTED" }; }