-- ai_op_queue：AI 写操作暂存表（人在环 HITL 写入闭环）。
-- ProposeWrite 只写 draft；用户在对话内点【确认】后，确定性 confirm 端点才执行。
-- 覆盖 update / create / delete / examine / generate（sOpType 区分）。
--   update/delete/examine：用 sTargetBillId 指向目标记录；改字段用 sField/sNewValue。
--   create/generate：整表 payload 存 sPayload（列->值 JSON）；generate 的源引用存 sSourceRef。
-- bAutoExecute=1（如报价）→ ERP 确认后自动执行并回 sResultBillId；=0 → 预填表单让用户手动提交。
CREATE TABLE IF NOT EXISTS ai_op_queue (
  sId             varchar(64)   NOT NULL PRIMARY KEY,   -- 操作/深链 token
  sUserId         varchar(64),
  sConversationId varchar(96),
  sBrandsId       varchar(32),
  sSubsidiaryId   varchar(32),
  sOpType         varchar(16),                          -- update | create | delete | examine | generate
  sTargetFormId   varchar(64),
  sTargetModuleId varchar(64),
  sTargetTable    varchar(64),
  sTargetBillId   varchar(64),                          -- 目标记录 sId（update/delete/examine 用）
  sField          varchar(64),                          -- 目标列（技术名）
  sFieldLabel     varchar(128),                         -- 目标列中文名
  sOldValue       varchar(500),
  sNewValue       varchar(500),
  sPayload        text,                                 -- create/update 的列->值 JSON（整表写入）
  sSourceRef      text,                                 -- generate：源表单 + 选中明细 sId 集合 JSON
  bAutoExecute    tinyint       NOT NULL DEFAULT 0,     -- 1=ERP 确认后自动执行；0=预填表单等用户提交
  sDescription    varchar(500),                         -- 人类可读的改动描述
  sStatus         varchar(16),                          -- draft | confirmed | executing | executed | failed | cancelled | expired
  sResultBillId   varchar(64),                          -- 执行后生成/影响的单据 id
  sResultMsg      varchar(500),
  sErrorMsg       varchar(1000),
  tCreateDate     datetime,
  tConfirmDate    datetime,
  tExecutedDate   datetime,
  tExpireAt       datetime,
  KEY idx_conv (sConversationId, sStatus)
);
