-- 提现审批尝试补齐「资料资格版本 + 当次校验结果」留痕。 -- 背景:提现申请必须先校验申请店铺存在有效资料资格;本变更要求把本次依据的有效资料资格版本标识 -- 与当次校验结果(校验时间、是否通过、未通过稳定原因)冻结进当次审批尝试快照,并在提现详情可查。 -- -- 设计选择: -- 1. 记录落在审批尝试表而非提现申请表:尝试记录是每次提交或重提一条的不可变快照, -- 资格被替换或失效后,历史尝试仍返回提交时冻结的版本与结果,不被新版本改写。 -- 2. 未通过原因为稳定编码列(qualification_failure_reason),取值域为本变更登记的四种稳定原因 -- (资格不存在、已失效、已停用、资料未通过审批),由 CHECK 兜住半残取值; -- 通过时该列为空字符串。稳定编码用于机器判定与审计,中文文案由应用层按编码映射。 -- 3. qualification_version_id 记录当次依据的有效资格版本主键;未通过(资格不存在等)时为 0, -- 表示本次未依据任何有效版本。该列不建外键,关联由应用层显式校验(ENG-MODEL-001)。 -- 4. 新列一律带默认值,既有尝试行零变更:historical 尝试的 qualification_passed 为 0 且原因为空, -- 读侧据此按「历史尝试无资格校验留痕」处理,MUST NOT 反推或改写历史结果。 -- 5. 本迁移不新增企业微信模板控件:该留痕只用于本地不可变审批尝试快照与提现详情查询。 ALTER TABLE tb_commission_withdrawal_request_attempt ADD COLUMN IF NOT EXISTS qualification_version_id BIGINT NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS qualification_checked_at TIMESTAMPTZ, ADD COLUMN IF NOT EXISTS qualification_passed SMALLINT NOT NULL DEFAULT 0, ADD COLUMN IF NOT EXISTS qualification_failure_reason VARCHAR(64) NOT NULL DEFAULT ''; -- 启停类标记必须严格 0/1:判定端按 qualification_passed = 1 识别通过,其他取值会被静默视为未通过。 ALTER TABLE tb_commission_withdrawal_request_attempt ADD CONSTRAINT chk_commission_withdrawal_attempt_qualification_passed CHECK (qualification_passed IN (0, 1)); -- 通过时不得携带未通过原因;未通过时的稳定原因取值域由应用层校验。 -- qualification_passed = 0 且原因为空是合法的历史状态:早于 000237 的既有尝试行就是该形态, -- 读侧据此按「无资格校验留痕」处理,因此 MUST NOT 用 CHECK 把空原因一律判为非法。 ALTER TABLE tb_commission_withdrawal_request_attempt ADD CONSTRAINT chk_commission_withdrawal_attempt_qualification_reason CHECK (qualification_passed = 0 OR qualification_failure_reason = ''); COMMENT ON COLUMN tb_commission_withdrawal_request_attempt.qualification_version_id IS '本次提现依据的有效提现资料资格版本ID;早于 000237 的历史尝试与资格不存在时为 0'; COMMENT ON COLUMN tb_commission_withdrawal_request_attempt.qualification_checked_at IS '本次资料资格校验时间;早于 000237 的历史尝试为空'; COMMENT ON COLUMN tb_commission_withdrawal_request_attempt.qualification_passed IS '本次资料资格校验是否通过 0-未通过 1-通过'; COMMENT ON COLUMN tb_commission_withdrawal_request_attempt.qualification_failure_reason IS '未通过时的稳定原因编码 qualification_missing-资格不存在 qualification_invalidated-已失效 shop_disabled-已停用 qualification_not_approved-资料未通过审批;通过时为空字符串';