namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.L1;
///
/// IQC 过账 domain 解析(Phase 5B-3 §3.1)。
///
/// **设计事实**:本系统一个 tenant 下可有多个 domain(按公司/工厂分区),故 domain **不是** tenant 级 1:1 映射,
/// 而是随收货/检验记录来自源数据(IqcInventoryEvent.DomainCode,源自 PurOrdRctDetail/MissedPrint.Domain)。
/// 本解析器职责 = **校验并规范化**该 domain:非空 → 返回 trim 值;空/未知 → 抛错(消费端转 Retryable)。
/// **硬约束**:禁止任何 `8010` 硬编码 fallback;禁止在无法确定 domain 时静默默认。
///
public sealed class IqcDomainResolver : ITransient
{
/// 解析 domain:非空返回规范化值;空 → 抛错,由消费端转 Retryable(不 fallback 8010)。
public string Resolve(long tenantId, string candidateDomain)
{
var d = candidateDomain?.Trim();
if (string.IsNullOrEmpty(d))
throw new InvalidOperationException($"IQC domain 未解析(tenant={tenantId}):事件未携带 domain 且无 tenant→domain 权威映射,拒绝 8010 fallback。");
return d;
}
}