系统 SHALL 为下列实体提供独立作废/取消原因三元组,且不得仅将原因拼入通用 remark 作为唯一存储:
crm_quote:invalid_reason、invalid_time、invalid_bypl_plan、pl_vehicle_fuel_register、pl_vehicle_recharge_apply、pl_vehicle_maintenance_apply、pl_vehicle_urea_apply、pl_freight_settlement:cancel_reason、cancel_time、cancel_bydb_weighing_slip:void_reason、void_time、void_by原因字段长度 SHALL 为 varchar(500) 且允许 NULL。合同与调价函既有 invalid_* 行为 SHALL 保持不变。
对报价单 invalid、运输计划 cancel、加油/充值/维保/尿素申请 cancel、运费结算 cancel、地磅 void,系统 SHALL 接受可选原因(请求体字段可缺省或为空)。原因 trim 后为空时 SHALL 将原因列置为 NULL,且 SHALL NOT 因此拒绝作废。无论原因是否填写,作废成功时 SHALL 写入作废时间与操作人,并按既有规则更新作废/取消状态。
is_voided=1),原因列为 NULL,时间与操作人已落库报价单作废若提供原因,SHALL 写入 invalid_reason(及时间、操作人);SHALL NOT 再向 remark 追加「【作废原因】」前缀文本作为主存储。未提供原因时 SHALL 仍写入 invalid_time 与 invalid_by,invalid_reason 为 NULL。
invalid_reason 等于提交原因,且不以「【作废原因】」形式追加为 remark 的唯一来源invalid_reason 为空,invalid_time 与 invalid_by 已写入加油登记从已作废恢复为正常时,系统 SHALL 清空 cancel_reason、cancel_time、cancel_by。
web-admin 中上述业务的作废操作 SHALL 提供作废原因输入(选填),允许不填直接确认作废。miniprogram 中充值申请、加油登记、地磅单的作废操作 SHALL 同样允许选填原因。已作废单据的查看态:若有已保存原因则 SHALL 展示;有作废时间/操作人时一并展示。