| 12345678910111213141516171819202122232425262728293031323334353637 |
- namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Receipt;
- /// <summary>
- /// C2 收货运行期门(Phase 6A 实核 `@IsRctTemp>0 && @QtyAcc>0 && @RctDetails<>''` 的业务语义抽象)。
- /// 语义:有待转正式收货明细 && 接受收货数>0 && 有可收明细(Status='N')。
- /// **不因 IQC 已标合格就直接过账**——须满足运行期门才进入 C2/C5。
- /// </summary>
- public sealed class PurchaseReceiptGateInput
- {
- /// <summary>是否存在待转正式收货明细(@IsRctTemp>0)。</summary>
- public bool HasPendingReceipt { get; set; }
- /// <summary>接受收货数(@QtyAcc)。</summary>
- public decimal AcceptedQty { get; set; }
- /// <summary>是否存在 Status='N' 的可收明细(@RctDetails<>'')。</summary>
- public bool HasReceivableDetails { get; set; }
- }
- public sealed class PurchaseReceiptGateResult
- {
- public bool CanCreate { get; set; }
- public string Reason { get; set; }
- }
- public static class PurchaseReceiptRuntimeGate
- {
- public static PurchaseReceiptGateResult Evaluate(PurchaseReceiptGateInput input)
- {
- if (input == null) throw new ArgumentNullException(nameof(input));
- if (!input.HasPendingReceipt)
- return new PurchaseReceiptGateResult { CanCreate = false, Reason = "无待转正式收货明细(IsRctTemp)" };
- if (input.AcceptedQty <= 0m)
- return new PurchaseReceiptGateResult { CanCreate = false, Reason = "接受收货数为 0" };
- if (!input.HasReceivableDetails)
- return new PurchaseReceiptGateResult { CanCreate = false, Reason = "无可收明细(Status='N')" };
- return new PurchaseReceiptGateResult { CanCreate = true };
- }
- }
|