约束命中校验
上线前与每日运行后的约束体检:7 类约束有没有正确命中、有没有标在该标的位置、冲突时优先级有没有生效。本页是约束引擎(O11)的验收界面。
约束类型
7类
4 类不允许调出 + 2 类不允许入 + 1 类未进入模型
命中合计
28,328行
合计含跨类重复计数
标注完整性
99.2%
缺 61 个单元格标注
冲突案例
18行
双方受限,需取消 SKC 标色
优先级校验
通过
不允许调出 > 调拨入 > 补货入
待确认项
1项
不允许补货入命中 905 行,需业务确认
7 类约束命中分布
分母为候选池 14,968 行| 编号 | 约束类型 | 约束项名称 | 标注粒度 | 标注色 / 色值 | 命中数 | 占候选池 | 状态 |
|---|---|---|---|---|---|---|---|
| C-01 | 不允许调出 | 新品保护期 | 门店-SKC | #ff595e | 13,394 | 89.5% | 正常 |
| C-02 | 不允许调出 | 新店保护期 | 门店 | #ff595e | 312 | 2.1% | 正常 |
| C-03 | 不允许调出 | 近期调入 SKU 保护 | 门店-SKU | #ff595e | 7,310 | 48.8% | 正常 |
| C-04 | 不允许调出 | 在单在途/特殊约束 | 门店-SKC | #ff595e | 2,015 | 13.5% | 正常 |
| C-05 | 不允许调拨入 | 门店禁止调入 | 门店-SKC | #896bb3 | 3,466 | 23.2% | 正常 |
| C-06 | 不允许补货入 | 门店禁止补入 | 门店-SKC | #3e8965 | 905 | 6% | 待确认 |
| C-07 | 未进入模型 | 未进入本次决策 | 门店-SKC | #999999 | 926 | 6.2% | 正常 |
命中占比
占比可叠加,不可简单求和为什么命中率这么高
新品保护期覆盖门店-SKC 粒度 13,394 行,占候选池近九成。这不代表规则有 bug,而是候选池本身包含了大量保护期内的新款 —— 建议核对候选池生成规则,而不是先怀疑约束。
标注位置完整性校验
缺失集中在尺码级标注:61 个单元格因调入方无在单在途记录未生成| 约束项 | 应标注字段 | 应标单元格数 | 实际标注数 | 缺失 | 结论 |
|---|---|---|---|---|---|
| 新品保护期 | SKC 编号 + 调入方名称(模型);无该字段时只标 SKC 编号 | 26,788 | 26,788 | 0 | 完整 |
| 新店保护期 | 调入方名称(模型),对新店整体出库限制生效 | 312 | 312 | 0 | 完整 |
| 近期调入 SKU 保护 | 调出方 / 调入方「模型补调后库存(含在单在途)」对应尺码单元格 | 7,310 | 7,249 | 61 | 缺失 0.8% |
| 其他不允许调出 | SKC 编号 + 调入方名称(人工) | 4,030 | 4,030 | 0 | 完整 |
| 不允许调拨入 | SKC 编号 + 调入方名称 + 调出方名称(双方受限时只标门店名) | 9,286 | 9,286 | 0 | 完整 |
| 不允许补货入 | SKC 编号 + 调入方名称 + 调出方名称 | 1,810 | 1,810 | 0 | 完整 |
| 本次未进入模型 | SKC 编号 + 调入方名称(人工) | 1,852 | 1,852 | 0 | 完整 |
冲突优先级校验(O11 核心规则)
冲突判定逻辑必须可配置、可回归测试STEP 1
不允许调出
优先级 1 · #ff595e
STEP 2
不允许调拨入
优先级 2 · #896bb3
STEP 3
不允许补货入
优先级 3 · #3e8965
STEP 4
双方受限
SKC 编号取消标色
| 冲突场景 | 应标注结果 | 校验结果 | 案例行 |
|---|---|---|---|
| 不允许调出 + 不允许调拨入(同侧) | 取优先级高者:标不允许调出(红),紫色不出现在同一单元格 | 通过 | 3 行 |
| 不允许调出(调入方) + 不允许调拨入(调出方) | SKC 编号取消标色;调入方门店名标红、调出方门店名标紫 | 通过 | 24AW-3668 |
| 不允许调出 + 不允许补货入 | 标不允许调出(红),绿色只在补货场景行生效 | 通过 | 2 行 |
| 不允许调拨入 + 不允许补货入 | 标不允许调拨入(紫),优先级高于补货入 | 通过 | 5 行 |
| 近期调入 SKU 保护 + 其他调出保护 | 颜色相同不冲突,尺码单元格与 SKC 单元格同时标注 | 通过 | 8 行 |
| 未进入模型 + 任意其他约束 | 7-不参与补调与其他约束互斥,不可能同时标注 | 通过 | 0 行 |
不允许调出 优先级 1不允许调拨入 优先级 2不允许补货入 优先级 3未进入模型 与任何约束互斥
3 个真实疑问案例的复核结论
来自《补货调拨决策模型约束标注颜色说明》的原始疑问| 案例 | 原始疑问 | 系统字段表现 | 结论 | 落地动作 |
|---|---|---|---|---|
| 案例一 · SKC 编号单独标红 | 为什么只标了 SKC 编号,没标「调入方名称(模型)」? | 本项目补调单导出字段经个性化调整后没有「调入方名称(模型)」字段,只有「调入方名称(人工)」(已更名为「调入门店名称」) | 不属于漏标。约束命中正确,属于字段裁剪导致的标注位置降级,需在字段字典中登记该差异 | 在 io-template 字段字典登记;导出模板补齐映射关系 |
| 案例二 · SKC 紫色 + 调出门店紫色 | 紫色标在调出门店上是什么意思? | SKC 编号紫色与「调出门店名称」紫色连读 = 该调出门店本身禁止该 SKC 调拨入(不是禁止调出) | 命中「不允许调拨入」约束,标注位置正确;紫色必须同时出现在 SKC 与对应门店名字段才能表达完整语义 | 保持现有规则;在决策表约束说明列补文字解释 |
| 案例三 · SKC 标色冲突 | 为什么这一行 SKC 编号完全没有颜色? | 调入门店标红(不允许调出)+ 调出门店标紫(不允许调拨入),SKC 编号需同时标红与标紫而冲突 | 按文档规则「双方受限时取消 SKC 编号标色,只标门店名」,因此 SKC 无颜色是正确表现 | 已在 dec-list 增加「双方受限,取消 SKC 标色」文字说明 |
约束与目标库存的关系(关键设计原则)
- 目标库存计算
- 只与需求、覆盖期、安全库存有关
- 约束作用点
- 计算之后的库存流向选择
- 约束能否改小目标库存
- 不能。目标库存是「该店该款需要多少货」的客观判断
- 约束能做什么
- 换流向:仓补 → 门店调 → 换店 → 下沉 → 放弃
- 被约束过滤的后果
- 该行不出现补调量,但不等于该店不缺货
- 因此在报表上的体现
- 缺货风险与约束命中必须分开展示
!这条原则是所有约束配置的护栏:一旦允许约束改动目标库存,模型的可解释性就彻底崩塌。
待确认项
| 编号 | 问题 | 风险 | 建议 |
|---|---|---|---|
| Q-01 | 「不允许补货入」命中 905 行(6.0%) | 规则疑似刚实装,历史数据无对照 | 抽样 20 行人工复核标注位置 |
| Q-02 | 新店保护期口径 7 天 vs 10 天不一致 | WOD 文档写 7 天,API 契约写 10 天 | 以 M10 参数配置为准,默认 10 天可配 |
| Q-03 | 尺码级标注缺失 61 格 | 调入方无在单在途记录时不生成该单元格 | 无单元格时改为在合计列标注并加文字说明 |
| Q-04 | 约束命中率 80.4% 偏高 | 业务可能误判为模型失效 | 在驾驶舱增加「候选池生成规则」下钻说明 |
i设计说明:约束校验页的存在意义是「上线前敢开、上线后敢查」。7 类约束每一类都要有命中数、标注位置、冲突结论三件套,否则约束引擎出问题只能靠业务在 Excel 里肉眼发现。