package schema import ( "entgo.io/ent" "entgo.io/ent/schema/field" "entgo.io/ent/schema/index" ) // OrderMaterialLedger 工单物料台账(WMS 侧) // // 字段口径(2026-09-19 定稿,一个字段只有一个写者;详见 临时.md §2): // - total_qty 需求总量 [写者:MES 同步台账] // - out_qty 累计已发出 [写者:出库] // - returned_qty 累计已退回 [写者:退库收货] // - consumed_qty 累计已消耗 [写者:报工反冲核销] // // 派生量:net_out_qty = out_qty − returned_qty(净领用,用于超量拦截与「领料完结」判定)。 // 强约束:net_out_qty ≤ total_qty;等于时领料完结。退料后净额回落,可再次补料。 type OrderMaterialLedger struct { ent.Schema } func (OrderMaterialLedger) Fields() []ent.Field { return []ent.Field{ field.String("order_no").Comment("工单号"), field.String("material_code").Comment("物料编码"), field.String("material_name").Optional().Comment("物料名称(冗余)"), field.Int("total_qty").Default(0).Comment("物料总需求数量"), field.Int("out_qty").Default(0).Comment("累计已发出数量(仅出库写入)"), field.Int("returned_qty").Default(0).Comment("累计已退回数量(仅退库收货写入)"), field.Int("consumed_qty").Default(0).Comment("累计已消耗数量(仅报工反冲核销写入;不动库存)"), field.String("status").Default("进行中").Comment("进行中/领料完结"), // 目标工位:备料送到哪个装配工位(客户诉求 L297-300;MES 同步台账时传入) field.String("target_station").Optional().Comment("目标工位(装配工位号)"), // 完成时间(客户诉求 问题记录 L242-258):领料完结时刻,用于"完成时间"范围查询。 field.Int64("completed_at").Optional().Comment("领料完结时间(unix 秒)"), field.String("remark").Optional().Comment("备注"), field.Int64("created_at").DefaultFunc(nowUnix), field.Int64("updated_at").DefaultFunc(nowUnix), } } func (OrderMaterialLedger) Indexes() []ent.Index { return []ent.Index{ index.Fields("order_no"), index.Fields("material_code"), } }