PRD|采购数字化-子码选型模块-自动选型逻辑说明
1 自动选型核心原则与本期重点迭代内容
1.1 自动选型核心原则
- 自动选型按单张选型单执行,资源池在同一张选型单内共享。
- 自动选型只处理逻辑本身,前置校验、交互展示、接口同步等已由其他模块承接,本文不展开。
- 资源瓶颈限制是方案必须满足的约束:任一已选方案导致任一限制物料累计数量超限,即该方案不可选。
- 呆料积压限制仅作为子码排序优先级,不构成报错条件,也不存在“必须消化”“必须命中”的硬性要求。
- A类顶码(机型独配顶码)无需校验子码可用条件,因为只有一个子码,怎么都要排产;但若存在资源限制,仍需校验资源是否满足。
- **B类顶码(非机型独配且存在可用子码)仅允许“当前可用子码集合”参与自动选型。
- 任一 A 类顶码因资源限制无法分配,或任一 B 类顶码轮询全部可用子码后仍无法满足资源限制时,整张选型单直接报错终止。
- 在相同输入、相同约束、相同主数据前提下,自动选型结果应保持一致。
1.2 本期重点迭代内容
- 事实独配定义调整
- 顶码分类调整,加入异常无子码不参与运算逻辑
- 有效子码判断逻辑调整
- 统一顶码分类表述
- 增加子码排序逻辑
- 呆料积压无需考虑限制数量,改为考虑优先级
- 自动计算逻辑调整,优化整合
- 加入计算日志展示
- 报错内容整合
2 顶码分类与可用子码判定
2.1 顶码分类规则
| 分类 | 名称 | 定义 | 是否参与自动选型 |
|---|---|---|---|
| A类 | 机型独配顶码 | 机型独配顶码 | 是 |
| B类 | 可用非独配顶码 | 非机型独配顶码,按可用条件过滤后仍存在 >= 1 个可用子码 | 是 |
| C类 | 不可用非机型独配顶码 | 非机型独配顶码,按可用条件过滤后无可用子码 | 否 |
| D类 | 无效顶码 | 已失效顶码,或异常无真实子码的顶码 | 否 |
2.2 顶码分类流程图
2.3 可用子码判定规则
仅适用于非机型独配顶码。满足以下全部条件的子码,才视为可用子码:
- 子码信号代码有效:信号代码均为
NULL; - 子码关联的内外机信号代码有效:信号代码均为
NULL; - 子码关联的内外机量产状态有效:值均为
01或02; - 子码关联的内外机质量状态有效:值均不为
01或03。
明确口径:A类顶码无需考虑上述可用子码判定规则。
3 核心概念
3.1 机型独配
顶码展开后,子码数量 = 1,即一个顶码只有一个子码。
3.2 事实独配
事实独配是指:对于B类顶码(可用非机型独配顶码),在某一限制类型下,针对用户填写的候选物料集合,在该顶码的当前可用子码集合中,至少存在 1 个候选物料被所有可用子码共同命中,则认定该顶码对该物料构成事实独配。
3.2.1 判定规则
- 当用户填写物料数量 = 1 时,若该物料被该顶码全部可用子码共同命中,则构成事实独配;
- 当用户填写物料数量 >= 2 时,若其中任意一个物料被该顶码全部可用子码共同命中,则构成事实独配;
- 事实独配需明确落到具体物料值;
- 事实独配需按限制类型分别判断。
示例:
用户配置压缩机限制为 A、B、C。
某顶码 KH30001 的 3 个可用子码对应压缩机分别为 A、AB、AC。
由于 A 被全部子码共同命中,因此 KH30001 对压缩机 A 构成事实独配。
3.3 物料类型
当前至少支持以下 7 类核心选型依据物料:
- 压缩机
- 风机
- 压机
- 主芯片
- 主板
- 显示板
- 遥控器
4 约束类型与计算口径
4.1 资源瓶颈限制
用户填写:物料类型 + 物料编码 + 限制数量。
规则定义:
- 自动选型生成的整体方案,不允许超出任一资源限制;
- 只要某候选子码导致任一限制物料累计数量超上限,即该子码不可选;
- 多个资源限制并存时,必须同时满足;
- 资源在同一张选型单内共享,需边分配边扣减。
4.2 呆料积压限制
用户填写:物料类型 + 物料编码 + 限制优先级。
规则定义:
- 呆料仅作为子码排序优先级使用;
- 优先级数字越小,优先级越高;
- 命中更多呆料、命中更高优先级呆料的子码,在排序中优先;
- 未命中呆料不报错,系统继续按既定轮询规则分配。
4.3 数量计算口径
为兼容后续 BOM 单台消耗量不为 1 的场景,统一采用以下计算方式:
- 资源占用数量 = 需求数量 × 单台 BOM 中该资源物料消耗量
- 呆料命中数量 = 需求数量 × 单台 BOM 中该呆料物料消耗量
当前版本默认单台 BOM 中该物料消耗量为 1;后续若接入非 1 的消耗量,仍按上述统一公式计算,无需改动主流程。
5 成本逻辑
5.1 成本数据定义
系统支持单据绑定成本。成本字段本质上是成本偏差金额,例如:0、0.1、0.22、0.4。
规则定义:
- 数值越小,成本越优;
0表示成本最优,至少会有一个0;- 同一顶码下,系统会基于成本偏差金额生成成本排序值:
- 成本最优:排序值 = 0;
- 次优:排序值 = 1;
- 以此类推;
- 若某子码未匹配到成本,则展示为未维护。
5.2 A类顶码分配规则
A类顶码直接将需求量分配至唯一子码。
处理要求:
- 不校验子码可用条件;
- 若存在资源限制,则先校验该唯一子码分配后是否超出限制;
- 若超出限制,整张选型单直接报错终止。
5.3 成本使用规则
- 无资源限制时,成本直接参与子码排序;
- 有资源限制时,成本在“资源满足”的前提下参与子码排序;
- 若子码未维护成本,则排在已维护成本的子码之后;
- 若候选子码均未维护成本,则按子码末尾排序值进行排序。
6 排序规则
6.1 顶码排序规则
6.1.1 A类顶码排序
按顶码内置排序(数据库 ID)升序处理。
6.1.2 B类顶码排序
按以下优先顺序处理:
- 事实独配物料数量:从大到小,大值优先;
- 顶码可用子码中的最小成本偏差金额:从小到大,小值优先;若顶码全部可用子码均未维护成本,则排在已维护成本的顶码之后;
- 顶码需求总量:从大到小,大值优先;
- 顶码内置排序:数据库 ID 升序。
说明:第 2 条的比较口径是“顶码下全部可用子码中,最优那个子码对应的最小成本偏差金额”,不是顶码人工展示时的成本排序值。
| 排序优先级 | 维度 | 说明 |
|---|---|---|
| ① | 事实独配物料数量 | 从大到小,大值优先 |
| ② | 可用子码中与成本最优的最小差额 | 从小到大,小值优先 |
| ③ | 顶码合计总量 | 从大到小,大值优先 |
| ④ | 顶码内置排序(数据库 ID) | 升序 |
排序示例:
| 顶码 | 事实独配物料数 | 可用子码最小成本差额 | 顶码总量 |
|---|---|---|---|
| A | 2 | 0.1 | — |
| B | 1 | 0.01 | — |
| C | 0 | 0.01 | 大 |
| D | 0 | 0.2 | 小 |
最终排序:A > B > C > D
- A > B:A 事实独配数量(2)> B(1)
- B > C/D:B 有事实独配,C/D 无
- C > D:C 最小成本差额(0.01)< D(0.2)
6.2 子码排序规则
对单个顶码下的候选子码,按以下优先顺序排序:
- 命中的呆料数量:从多到少;
- 命中的高优先级呆料数量:从多到少,且优先级数字越小越优先;
- 成本排序值:从小到大,小值优先;未维护成本排在已维护成本之后;
- 子码末尾排序:大值优先。
| 排序优先级 | 维度 | 说明 |
|---|---|---|
| ① | 命中的呆料数量 | 从大到小,大值优先 |
| ② | 命中的高优先级呆料数量 | 从大到小,大值优先(优先级数值越小越高) |
| ③ | 成本排序值 | 从小到大,小值优先;未维护成本排在已维护成本之后 |
| ④ | 子码末尾排序 | 从大到小,大值优先 |
说明:在无呆料限制场景下,第 1、2 条自然不生效,子码实际按成本排序值和子码末尾排序处理。
6.3 稳定性原则
为确保同一输入下自动选型结果始终一致,系统必须满足以下稳定性原则:
- 顶码排序与子码排序都必须采用固定且完整的优先级链路;
- 当前排序维度相同的情况下,必须继续比较下一个优先级维度,直到得出唯一顺序;
- 若前置排序维度全部相同,则必须落到最终兜底字段;
- 顶码排序的最终兜底字段为:顶码内置排序(数据库 ID)升序;
- 子码排序的最终兜底字段为:子码末尾排序值从大到小;
- 实现层不得省略任一排序维度或兜底字段,否则视为不满足稳定性原则。
说明:稳定性原则的目标,是确保在相同输入、相同约束、相同主数据前提下,自动选型结果可重复、可验证、可复盘。
7 子码轮询分配规则
当场景中存在资源限制时,B类顶码(可用非机型独配顶码) 按“子码排序规则”得到排序列表后,按照列表顺序逐个尝试。
7.1 轮询逻辑
7.2 轮询说明
7.2.1 预分配说明
系统在轮询某个候选子码时,首先执行预分配判断。预分配阶段只做“是否超限”的判断。
7.2.2 资源扣减说明
只有当候选子码通过预分配校验后,系统才正式确认该子码为当前顶码的选型结果,并立即同步扣减当前选型单内共享资源池的剩余量。
7.2.3 事实独配处理说明
若当前顶码属于事实独配顶码,且当前候选子码预分配后已无法满足资源限制,则说明该顶码在当前限制条件下不存在可绕开的资源路径,此时系统不再继续尝试其他候选,直接整单报错终止。
7.2.4 非事实独配处理说明
若当前顶码不属于事实独配顶码,则当某个候选子码预分配超限时,系统跳过当前子码,继续按既定排序尝试下一个候选子码,直到找到可分配子码或全部候选尝试结束。
7.2.5 轮询结束说明
当以下两种情况之一发生时,当前顶码轮询结束:
- 已找到满足资源限制的候选子码,并完成正式分配;
- 全部可用子码均尝试完成,仍无可行方案,则整张选型单直接报错终止。
8 场景矩阵
| 场景 | 呆料限制 | 资源限制 | 逻辑主旨 |
|---|---|---|---|
| 场景 A | 无 | 无 | 直接按成本与固定排序规则分配 |
| 场景 B | 无 | 有 | 在整体方案不超出资源限制的前提下,成本能优则优 |
| 场景 C | 有 | 无 | 按呆料优先级与成本规则分配 |
| 场景 D | 有 | 有 | 在整体方案不超出资源限制的前提下,按呆料优先级与成本规则进行子码轮询分配 |
9 四类场景详细逻辑
9.1 场景 A:无呆料、无资源限制
9.1.1 触发条件
- 未配置任何呆料限制;
- 未配置任何资源限制。
9.1.2 顶码分类说明
本场景下,系统按统一顶码分类规则对选型单内顶码进行分类:
- A类:机型独配顶码;
- B类:非机型独配顶码,按可用条件过滤后仍存在 >= 1 个可用子码;
- C类:非机型独配顶码,按可用条件过滤后无可用子码;
- D类:已失效顶码,或异常无真实子码的顶码。
9.1.3 处理原则
- 本场景不存在资源限制,也不存在呆料优先级干扰;
- C类、D类顶码不参与运算;
- 计算顺序固定为:先完成全部 A 类顶码,再开始处理 B 类顶码;
- A类顶码按顶码排序规则逐个处理,直接分配唯一子码;
- B类顶码在 A 类全部处理完成后,再按顶码排序规则逐个处理,并按子码排序规则直接取首位子码;
- 本场景不存在资源报错路径。
9.1.4 场景流程图
9.1.5 处理步骤
- 按顶码分类规则完成顶码分类;
- C类、D类顶码不参与运算;
- 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码;
- A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
- 每个 B 类顶码按子码排序规则直接取首位子码;
- 全部分配完成后,输出自动选型结果。
9.2 场景 B:无呆料、有资源限制
9.2.1 触发条件
- 未配置呆料限制;
- 已配置一个或多个资源限制。
9.2.2 顶码分类说明
本场景下,系统按统一顶码分类规则对选型单内顶码进行分类:
- A类:机型独配顶码;
- B类:非机型独配顶码,按可用条件过滤后仍存在 >= 1 个可用子码;
- C类:非机型独配顶码,按可用条件过滤后无可用子码;
- D类:已失效顶码,或异常无真实子码的顶码。
9.2.3 处理原则
- 资源瓶颈限制为必须满足的硬约束;
- C类、D类顶码不参与运算;
- 计算顺序固定为:先完成全部 A 类顶码,再开始处理 B 类顶码;
- A类顶码按顶码排序规则逐个处理,分配唯一子码后立即执行资源校验;
- 任一 A 类顶码资源校验不通过,整张选型单直接报错终止;
- 仅当全部 A 类顶码处理完成且未报错后,才进入 B 类顶码处理阶段;
- B类顶码按顶码排序规则逐个处理;每个顶码先按子码排序规则形成候选顺序,再执行子码轮询与资源校验;
- 任一 B 类顶码轮询全部可用子码后仍无可行方案,则整张选型单直接报错终止。
9.2.4 场景流程图
9.2.5 处理步骤
- 完成顶码分类,剔除 C 类、D 类顶码;
- 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码并校验资源;
- 任一 A 类顶码资源校验不通过,整单报错终止;
- A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
- 每个 B 类顶码先按子码排序规则生成候选顺序,再执行子码轮询与资源校验;
- 任一 B 类顶码无可行子码,整单报错终止;
- 全部分配完成后,输出自动选型结果。
9.3 场景 C:有呆料、无资源限制
9.3.1 触发条件
- 已配置呆料限制;
- 未配置资源限制。
9.3.2 顶码分类说明
本场景下,系统按统一顶码分类规则进行顶码分类:
- A类:机型独配顶码;
- B类:非机型独配顶码,按可用条件过滤后仍存在 >= 1 个可用子码;
- C类:非机型独配顶码,按可用条件过滤后无可用子码;
- D类:已失效顶码,或异常无真实子码的顶码。
9.3.3 处理原则
- 本场景不存在资源限制,因此无需执行资源轮询;
- 呆料仅影响子码排序优先级,不影响是否可分配;
- C类、D类顶码不参与运算;
- 计算顺序固定为:先完成全部 A 类顶码,再开始处理 B 类顶码;
- A类顶码按顶码排序规则逐个处理,直接分配唯一子码;
- B类顶码在 A 类全部处理完成后,再按顶码排序规则逐个处理,并按子码排序规则直接取首位子码;
- 无需再区分“命中呆料顶码”与“未命中呆料顶码”分别执行不同流程;
- 呆料优先级已自然体现在子码排序结果中。
9.3.4 场景流程图
9.3.5 处理步骤
- 完成顶码分类,剔除 C 类、D 类顶码;
- 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码;
- A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
- 每个 B 类顶码按子码排序规则直接取首位子码,呆料优先级已在排序中体现;
- 全部分配完成后,输出自动选型结果。
说明:由于子码排序规则中“命中的呆料数量”“命中的高优先级呆料数量”优先,因此系统会自然优先选到更符合呆料目标的子码,无需额外增加其他处理逻辑。
9.4 场景 D:有呆料、有资源限制
9.4.1 触发条件
- 已配置呆料限制;
- 已配置资源限制。
9.4.2 顶码分类说明
本场景下,系统按统一顶码分类规则进行顶码分类:
- A类:机型独配顶码;
- B类:非机型独配顶码,按可用条件过滤后仍存在 >= 1 个可用子码;
- C类:非机型独配顶码,按可用条件过滤后无可用子码;
- D类:已失效顶码,或异常无真实子码的顶码。
若需要解释“该 B 类顶码是否具备消化呆料的潜力”,系统可额外记录“命中呆料顶码 / 未命中呆料顶码”标签,但该标签不改变主流程分支。
9.4.3 处理原则
- 资源限制必须满足,呆料仅影响子码排序先后;
- C类、D类顶码不参与运算;
- 计算顺序固定为:先完成全部 A 类顶码,再开始处理 B 类顶码;
- A类顶码按顶码排序规则逐个处理,分配唯一子码后立即执行资源校验;
- 任一 A 类顶码资源校验不通过,整张选型单直接报错终止;
- 仅当全部 A 类顶码处理完成且未报错后,才进入 B 类顶码处理阶段;
- B类顶码统一按同一逻辑处理:先按子码排序规则形成候选顺序,再执行子码轮询与资源校验;
- 无需再区分“命中呆料顶码”与“未命中呆料顶码”分别走不同流程;
- 任一 B 类顶码轮询全部可用子码后仍无可行方案,则整张选型单直接报错终止。
9.4.4 场景流程图
说明:本图与 9.2.4 场景 B 保持一致。因为只要存在资源限制,主流程就应统一;场景 D 仅在“子码排序规则”中额外纳入呆料优先级。
9.4.5 处理步骤
- 完成顶码分类,剔除 C 类、D 类顶码;
- 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码并校验资源;
- 任一 A 类顶码资源校验不通过,整单报错终止;
- A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
- 每个 B 类顶码先按子码排序规则生成候选顺序,再执行子码轮询与资源校验,呆料仅影响排序先后;
- 任一 B 类顶码无可行子码,整单报错终止;
- 全部分配完成后,输出自动选型结果。
说明:在该场景下,呆料仍然只影响排序顺序,不单独构成报错条件;系统统一按排序结果进行子码轮询即可,无需额外增加拆分处理逻辑。
10 自动选型总流程
11 报错规则
11.1 报错处理总原则
报错触发流程立即中断,不继续后续顶码的分配,需用户线下协调资源后重新计算。
- 任一报错场景发生后,整张选型单直接报错终止;
- 不保留部分成功、部分失败的自动选型结果;
- 错误信息统一按5段式结构输出:
- 计算结果
- 报错编码
- 报错内容
- 报错顶码
- 限制条件
- 处理建议
11.2 A类 / B类顶码报错
当 A类顶码分配时,或 B类中的事实独配顶码在子码轮询过程中,因资源瓶颈限制无法满足而导致方案不可继续时,系统按两段式结构输出错误信息。
11.2.1 A类顶码报错
报错内容:
- 计算结果:失败
- 报错编码:ERROR_001
- 报错内容:机型独配顶码限制数量无法满足
- 报错顶码:【顶码】
- 限制条件:【限制物料类型-限制编码-限制数量值】(多条时用 / 隔开)
- 处理建议:请线下协调对应限制物料资源数量;调整输入限制后重新发起自动选型计算。
11.2.2 B类顶码报错
报错内容:
- 计算结果:失败
- 报错编码:ERROR_002
- 报错内容:事实独配顶码限制数量无法满足
- 报错顶码:【顶码】
- 限制条件:【限制物料类型-限制编码-限制数量值】(多条时用 / 隔开)
- 处理建议:请线下协调对应限制物料资源数量;调整输入限制后重新发起自动选型计算。
11.3 无可行子码报错
当 B类顶码的全部可用子码按既定排序规则完成轮询后,仍均无法满足资源瓶颈限制时,系统按两段式结构输出错误信息。
报错内容:
- 计算结果:失败
- 报错编码:ERROR_003
- 报错内容:当前限制条件导致顶码无解
- 报错顶码:【顶码】
- 限制条件:【限制物料类型-限制编码-限制数量值】(多条时用 / 隔开)
- 处理建议:请线下协调对应限制物料资源数量;调整输入限制后重新发起自动选型计算。
11.4 无可计算顶码报错
当单据的顶码无A类或者B类顶码时,无法进行自动选型计算,单据报错。
报错内容:
- 计算结果:失败
- 报错编码:ERROR_004
- 报错内容:无可参与计算的顶码
- 报错顶码:-(固定展示-)
- 限制条件:-(固定展示-)
- 处理建议:此单据不满足自动选型条件,请人工手动选型。
12 规则总表
| 场景 | 处理对象 | 处理方式 | 是否可能报错 |
|---|---|---|---|
| 场景 A | A类顶码 | 直接分配唯一子码 | 否 |
| 场景 A | B类顶码 | 按子码排序规则直接取首位子码 | 否 |
| 场景 B | A类顶码 | 分配唯一子码并校验资源 | 是 |
| 场景 B | B类顶码 | 按子码排序后轮询,直到资源满足 | 是 |
| 场景 C | A类顶码 | 直接分配唯一子码 | 否 |
| 场景 C | B类顶码 | 按呆料优先级与成本规则直接取首位子码 | 否 |
| 场景 D | A类顶码 | 分配唯一子码并校验资源 | 是 |
| 场景 D | B类顶码 | 按呆料优先级与成本规则排序后轮询,直到资源满足 | 是 |
13 计算日志模块设计
13.1 模块定位
【自动选型计算日志】用于对一次自动选型任务的实际计算过程进行可视化还原,面向业务用户、产品、研发、测试提供统一的过程查看口径。
该模块不是对规则文档的重复罗列,而是将一次真实计算过程以“顶部概览 + 辅助说明 + 步骤卡片 + 顶码明细”的方式进行展示,帮助用户快速回答以下问题:
- 本次计算进入了哪个场景;
- 本次纳入计算的顶码有多少、分别是什么;
- 系统按什么顺序处理这些顶码;
- 每个顶码最终为什么成功、失败、跳过或未执行;
- 整张选型单最终为什么成功,或为什么失败终止。
13.2 设计目标
日志模块需同时满足以下目标:
- 业务可读:业务用户无需阅读底层规则文档,也能理解本次计算过程;
- 过程可回放:能够清晰还原“先做了什么,再做了什么,为什么这样做”;
- 异常可定位:一旦失败,可快速定位失败步骤、失败顶码、失败限制条件;
- 结果可核对:成功时可以直接核对最终选型结果,失败时可以直接查看错误结论与处理建议;
- 口径统一:日志中使用的术语、步骤命名、状态表达必须与自动选型主逻辑保持一致。
13.3 核心展示原则
13.3.1 日志服务于“过程解释”
日志用于解释系统如何完成自动选型,不替代主流程规则文档。
- 规则定义仍以正文规则为准;
- 日志以更易读的形式呈现“本次实际发生的计算过程”;
- 页面强调“发生了什么”和“为什么会这样”,而不是完整复述规则条文。
13.3.2 日志按“实际计算路径”动态生成
日志步骤不机械展示全部理论步骤,而是根据当前单据的实际计算路径动态生成。
例如:
- 若当前单据不存在 A 类顶码,则不展示“机型独配顶码分配”步骤;
- 若当前单据计算成功,则最终展示“输出自动选型结果”;
- 若当前单据计算失败,则最终展示“报错终止”;
- 若前序顶码报错,则后续未执行顶码只展示“未执行”结果,不继续生成明细过程。
13.3.3 日志按“单张选型单”组织
自动选型按单张选型单执行,因此日志也按单张选型单组织。
同一张选型单内:
- 共享同一份日志上下文;
- 共享同一资源池;
- 共享同一场景识别结果;
- 共享同一约束口径。
13.3.4 日志按“步骤 + 顶码逐条展开”组织
日志外层采用少量步骤式结构,降低业务阅读负担;步骤内部再按顶码逐条展开,保证过程可追溯。
页面阅读层级固定为:
- 第 1 层:整单概览;
- 第 2 层:步骤卡片;
- 第 3 层:顶码摘要行;
- 第 4 层:顶码展开明细。
13.3.5 默认先看结论,再看细节
日志应优先让用户快速看结论,再按需查看细节。
具体要求:
- 步骤卡片头部必须直接给出步骤标题、步骤状态、本步摘要;
- 顶码默认先展示一行结论;
- 用户点击后再查看完整过程;
- 失败顶码默认展开,确保异常信息优先暴露。
13.3.6 日志必须体现“先 A 后 B”的计算顺序
若当前单据同时存在 A 类顶码与 B 类顶码,则日志必须明确体现:
- 先处理 A 类顶码;
- A 类处理完成后,再进入 B 类顶码;
- 任一报错发生后,整单立即终止。
若不存在 A 类顶码,则日志直接从 B 类顶码分配步骤开始。
13.3.7 日志必须体现“整单终止”口径
任一报错触发后,日志必须明确说明:
- 报错发生在哪个步骤;
- 报错发生在哪个顶码;
- 对应限制条件是什么;
- 为什么不再继续后续候选或后续顶码;
- 哪些顶码因此未进入执行。
13.4 页面信息组织口径
13.4.1 顶部概览区
日志页顶部需以概览卡片形式展示本次计算的总体结果,帮助用户在进入步骤明细前先建立整体认知。
顶部概览固定展示以下 4 个指标卡:
| 指标项 | 展示内容 | 说明 |
|---|---|---|
| 当前场景 | A / B / C / D | 展示本次计算识别出的场景及简要说明 |
| 纳入计算顶码 | 数量 | 展示参与本次计算的顶码总数,可补充 A/B 类数量拆分 |
| 最终完成分配 | 数量 | 展示最终完成正式分配的顶码数,可补充类型拆分 |
| 整单结果 | 成功 / 失败 | 展示整张选型单最终结果及一句结果说明 |
说明:HTML 原型中的 Demo 切换仅用于原型展示成功态/失败态;正式业务页面默认仅展示当前一次真实计算结果,不提供业务用户手工切换成功/失败态。
13.4.2 辅助说明区
日志页面需提供一个默认折叠的辅助说明区,统一解释当前页面中的业务术语与计算口径。
命名固定为:
计算口径与业务术语说明
该区域默认折叠,用户按需展开;不应打断主流程阅读。
该区域至少覆盖以下内容:
- A类顶码(机型独配顶码);
- B类顶码(可用非独配顶码);
- C类 / D类顶码;
- 资源瓶颈限制;
- 呆料积压限制;
- 事实独配;
- 计算顺序;
- 成本排序口径。
13.4.3 主步骤区
主步骤区是日志主体,按步骤卡片形式展示本次自动选型过程。
每个步骤卡片头部固定包含:
- 步骤编号;
- 步骤标题;
- 步骤摘要;
- 步骤状态(成功 / 失败)。
步骤内部再根据步骤类型展示对应内容。
13.4.4 顶码明细区
在 A 类顶码分配步骤、B 类顶码分配步骤中,均需按顶码逐条展示。
每个顶码的展示结构固定为:
- 顶码摘要表中的一行结论;
- 对应的可展开详情卡片;
- 详情卡片中包含基础信息、排序结果、资源校验、处理结论等内容。
对于“未执行”的顶码:
- 仅在步骤汇总表中展示“未执行”及原因;
- 不生成展开明细卡片。
13.5 成功态与失败态口径
13.5.1 成功态
若所有参与计算的顶码均成功完成分配,则日志需展示:
- 顶部概览中的整单结果 = 成功;
- 主步骤区中的各步骤状态 = 成功;
- 最终步骤为“输出自动选型结果”;
- 最终结果汇总表中列出所有成功分配的顶码及最终子码。
13.5.2 失败态
若任一顶码触发报错,则日志需展示:
- 顶部概览中的整单结果 = 失败;
- 报错发生步骤的状态 = 失败;
- 最终步骤为“报错终止”;
- 步骤汇总表中清楚展示失败顶码与未执行顶码;
- 失败顶码默认展开明细;
- 页面最终展示错误编码、报错内容、报错顶码、限制条件、失败阶段与处理建议。
13.6 日志展示与规则文档的关系
日志模块只承接“解释实际计算过程”的职责,规则定义仍由正文其他章节给出。
因此:
- 第 1~12 章负责说明“系统应该如何算”;
- 第 13~14 章负责说明“系统算完以后,如何把过程展示出来”。
日志页面中的所有字段命名、分类名称、报错编码、排序依据表达,必须与前文规则定义保持一致,避免前后口径不统一。
14 结论
自动选型的核心不是单纯给顶码选一个子码,而是将顶码分类、可用子码过滤、事实独配识别、成本排序、呆料优先级、资源轮询与整单报错机制统一为一套可执行的规则体系。
- 语言收敛:统一顶码分类表述为 A / B / C / D;
- 逻辑收敛:将“命中呆料”从分类分支收敛为排序标签;
- 实现收敛:补充稳定性原则,明确最终兜底规则;
- 展示收敛:明确采用步骤流式全量计算日志,并给出完整 mock 示例。