| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.L1;
- /// <summary>
- /// consume 时重新加载的收货可变状态(Runtime Gate 新鲜度 + 收货上下文)。
- /// 由 L0 loader 从标准层/源提供——**不取自事件 payload**。
- /// </summary>
- public sealed class IqcReceiptState
- {
- /// <summary>检验单/收货上下文是否存在(不存在=数据未就绪,可重试)。</summary>
- public bool Found { get; set; }
- // Runtime Gate 新鲜数据
- public bool HasPendingReceipt { get; set; } // @IsRctTemp>0
- public bool HasReceivableDetails { get; set; } // @RctDetails<>''
- // 收货上下文(构造 C5 命令 / C6 对账 / C7 任务)
- public string ItemNum { get; set; }
- public string Location { get; set; }
- public string LotSerial { get; set; }
- public string Refs { get; set; }
- public string RctNbr { get; set; } // 新收货号
- public string PurOrd { get; set; }
- public int PurLine { get; set; }
- public string Potype { get; set; }
- public decimal OrderedQty { get; set; }
- public decimal BeforeReceivedQty { get; set; }
- public decimal ReturnedQty { get; set; }
- public decimal SampleQty { get; set; }
- /// <summary>
- /// L0 freshness 水位(Phase B8):标准层该记录的最近同步时点(源自 `mdp_std_*.sync_time`)。
- /// null=未知。消费端据此与事件发生时刻比对:标准层落后于事件 → 不过账、事件保持 retryable,避免用陈旧态过账。
- /// </summary>
- public DateTime? SourceSyncedAt { get; set; }
- }
- /// <summary>
- /// L1→L0 边界 port:给定 (tenant, domain, FBILLNO) 加载**最新**收货状态。
- /// L0 下阶段实现:从 `mdp_std_*`(IQC 检验单 std + 采购收货 std)读取;本阶段仅定义 port,不建 mdp entity/transform。
- ///
- /// L0 下阶段须提供的最小数据 = <see cref="IqcReceiptState"/> 全字段:
- /// Found / HasPendingReceipt(IsRctTemp) / HasReceivableDetails(Status='N' 明细) /
- /// ItemNum / Location / LotSerial / Refs / RctNbr / PurOrd / PurLine / Potype /
- /// OrderedQty(QtyOrded) / BeforeReceivedQty(PurOrdDetail.RctQty) / ReturnedQty(QtyReturned) / SampleQty(InsSampleQty)。
- /// </summary>
- public interface IIqcReceiptStateLoader
- {
- Task<IqcReceiptState> LoadAsync(long tenantId, string domainCode, string fbillno);
- }
|