using SqlSugar;
namespace Admin.NET.Plugin.AiDOP.MaterialWarehouse.InventoryPosting.Entity;
///
/// DOP-L3 IQC 入库过账头 / 幂等锚(结构层)。
/// 幂等键(DB UNIQUE)= tenant_id + domain_code + FBILLNO —— 统一 IQC 入库事件业务幂等键。
/// **禁止**用 FINSPECTSTATUS='检验完成' 判断是否已入库;改用本表 DB 唯一约束 + 状态。
/// 注意:Phase 2 仅建结构;完整幂等处理逻辑(先查/占位/AlreadyProcessed)在 Phase 4 实现。
///
[SugarTable("ado_iqc_inventory_posting", "DOP-L3 IQC入库过账头/幂等锚")]
[SugarIndex("uk_ado_iqc_posting_fbillno", nameof(TenantId), OrderByType.Asc, nameof(DomainCode), OrderByType.Asc, nameof(FbillNo), OrderByType.Asc, IsUnique = true)]
public class AdoIqcInventoryPosting : AdoInvEntityBase
{
/// 来料检验单号(qms_qcp_inspbill.lydjbh / FBILLNO)——幂等键第 3 维。
[SugarColumn(ColumnName = "fbillno", ColumnDescription = "来料检验单号FBILLNO", Length = 50, IsNullable = false, DefaultValue = "")]
public string FbillNo { get; set; }
[SugarColumn(ColumnName = "receiver", ColumnDescription = "收货单号Receiver", Length = 50, IsNullable = true)]
public string Receiver { get; set; }
[SugarColumn(ColumnName = "rct_qc_nbr", ColumnDescription = "检验单号RctQCNbr(旧对账关联键)", Length = 100, IsNullable = true)]
public string RctQcNbr { get; set; }
[SugarColumn(ColumnName = "item_num", ColumnDescription = "物料号", Length = 50, IsNullable = true)]
public string ItemNum { get; set; }
/// 过账状态:PENDING / PROCESSING / POSTED / FAILED / ALREADY_PROCESSED(Phase 4 驱动)。
[SugarColumn(ColumnName = "posting_status", ColumnDescription = "过账状态", Length = 20, IsNullable = false, DefaultValue = "PENDING")]
public string PostingStatus { get; set; }
/// 过账模式:DISABLED / SHADOW / AUTHORITATIVE。本批次最高只允许 SHADOW。
[SugarColumn(ColumnName = "posting_mode", ColumnDescription = "过账模式(DISABLED/SHADOW/AUTHORITATIVE)", Length = 20, IsNullable = false, DefaultValue = "SHADOW")]
public string PostingMode { get; set; }
/// MRB 状态(0 无 / 1 挑选 / 2 退货 / 3 让步接收)——来自 C1 IqcResultMapping。
[SugarColumn(ColumnName = "mrb_status", ColumnDescription = "MRB状态", DefaultValue = "0")]
public int MrbStatus { get; set; }
/// 命中分支号 1-5(C1)。
[SugarColumn(ColumnName = "branch_no", ColumnDescription = "IQC路由分支号1-5", DefaultValue = "0")]
public int BranchNo { get; set; }
/// 本次过账对应的库存事务组 Id(关联 ado_inventory_transaction.transaction_group_id)。
[SugarColumn(ColumnName = "transaction_group_id", ColumnDescription = "库存事务组Id", IsNullable = true)]
public long? TransactionGroupId { get; set; }
}