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"
};
}