合同与调价函已强制作废原因。报价单仅有可选 remark 拼写;运输/车辆/结算/地磅的 cancel/void 无 body、无专用字段。用户确认采用独立字段三元组(方案 A),覆盖所列全部作废入口(含小程序);并明确:作废原因非必填,有则落库展示,无则可直接作废。
Goals:
invalid_*)。/cancel 语义(cancel_*)。is_voided / /void(void_*)。Non-Goals:
| 域 | 字段 | 理由 |
|---|---|---|
| CRM 报价单 | invalid_reason / invalid_time / invalid_by |
与合同、调价函一致 |
| PL(计划、加油、充值、维保、尿素、结算) | cancel_reason / cancel_time / cancel_by |
与 /cancel、cancelled 一致 |
地磅 db_weighing_slip |
void_reason / void_time / void_by |
与 is_voided、POST .../void 一致 |
*_reason:varchar(500),nullable。
*_time / *_by:作废成功时写入(即使原因为空,仍记录何时、何人作废)。
invalidReason → 写 invalid_*(原因可空;时间/人必写)。{ "cancelReason": "..." }。{ "voidReason": "..." }。invalid_*,不再向 remark 追加 【作废原因】。restore 时清空 cancel_reason / cancel_time / cancel_by。
docs/sql/shanxia2.0.sql 与 models。*_time/*_by 可追溯操作。void_*;原因非必填已确认。