PRD|采购数字化-子码选型模块-自动选型逻辑说明

1 自动选型核心原则与本期重点迭代内容

1.1 自动选型核心原则

  1. 自动选型按单张选型单执行,资源池在同一张选型单内共享
  2. 自动选型只处理逻辑本身,前置校验、交互展示、接口同步等已由其他模块承接,本文不展开。
  3. 资源瓶颈限制是方案必须满足的约束:任一已选方案导致任一限制物料累计数量超限,即该方案不可选。
  4. 呆料积压限制仅作为子码排序优先级,不构成报错条件,也不存在“必须消化”“必须命中”的硬性要求。
  5. A类顶码(机型独配顶码)无需校验子码可用条件,因为只有一个子码,怎么都要排产;但若存在资源限制,仍需校验资源是否满足。
  6. **B类顶码(非机型独配且存在可用子码)仅允许“当前可用子码集合”参与自动选型。
  7. 任一 A 类顶码因资源限制无法分配,或任一 B 类顶码轮询全部可用子码后仍无法满足资源限制时,整张选型单直接报错终止
  8. 在相同输入、相同约束、相同主数据前提下,自动选型结果应保持一致。

1.2 本期重点迭代内容

  1. 事实独配定义调整
  2. 顶码分类调整,加入异常无子码不参与运算逻辑
  3. 有效子码判断逻辑调整
  4. 统一顶码分类表述
  5. 增加子码排序逻辑
  6. 呆料积压无需考虑限制数量,改为考虑优先级
  7. 自动计算逻辑调整,优化整合
  8. 加入计算日志展示
  9. 报错内容整合

2 顶码分类与可用子码判定

2.1 顶码分类规则

分类 名称 定义 是否参与自动选型
A类 机型独配顶码 机型独配顶码
B类 可用非独配顶码 非机型独配顶码,按可用条件过滤后仍存在 >= 1 个可用子码
C类 不可用非机型独配顶码 非机型独配顶码,按可用条件过滤后无可用子码
D类 无效顶码 已失效顶码,或异常无真实子码的顶码

2.2 顶码分类流程图

读取顶码

顶码是否已失效

归为D类:已失效顶码

是否存在真实子码

归为D类:异常无真实子码

展开子码数量是否=1

归为A类:机型独配顶码

按可用子码规则过滤

过滤后是否至少有1个可用子码

归为B类:可用的非机型独配顶码

归为C类:不可用的非机型独配顶码

2.3 可用子码判定规则

仅适用于非机型独配顶码。满足以下全部条件的子码,才视为可用子码:

  1. 子码信号代码有效:信号代码均为 NULL
  2. 子码关联的内外机信号代码有效:信号代码均为 NULL
  3. 子码关联的内外机量产状态有效:值均为 0102
  4. 子码关联的内外机质量状态有效:值均不为 0103

明确口径: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 类核心选型依据物料:

  1. 压缩机
  2. 风机
  3. 压机
  4. 主芯片
  5. 主板
  6. 显示板
  7. 遥控器

4 约束类型与计算口径

4.1 资源瓶颈限制

用户填写:物料类型 + 物料编码 + 限制数量

规则定义:

  • 自动选型生成的整体方案,不允许超出任一资源限制;
  • 只要某候选子码导致任一限制物料累计数量超上限,即该子码不可选;
  • 多个资源限制并存时,必须同时满足;
  • 资源在同一张选型单内共享,需边分配边扣减。

4.2 呆料积压限制

用户填写:物料类型 + 物料编码 + 限制优先级

规则定义:

  • 呆料仅作为子码排序优先级使用;
  • 优先级数字越小,优先级越高;
  • 命中更多呆料、命中更高优先级呆料的子码,在排序中优先;
  • 未命中呆料不报错,系统继续按既定轮询规则分配。

4.3 数量计算口径

为兼容后续 BOM 单台消耗量不为 1 的场景,统一采用以下计算方式:

  • 资源占用数量 = 需求数量 × 单台 BOM 中该资源物料消耗量
  • 呆料命中数量 = 需求数量 × 单台 BOM 中该呆料物料消耗量

当前版本默认单台 BOM 中该物料消耗量为 1;后续若接入非 1 的消耗量,仍按上述统一公式计算,无需改动主流程。


5 成本逻辑

5.1 成本数据定义

系统支持单据绑定成本。成本字段本质上是成本偏差金额,例如:00.10.220.4

规则定义:

  • 数值越小,成本越优;
  • 0 表示成本最优,至少会有一个0;
  • 同一顶码下,系统会基于成本偏差金额生成成本排序值
    • 成本最优:排序值 = 0;
    • 次优:排序值 = 1;
    • 以此类推;
  • 若某子码未匹配到成本,则展示为未维护

5.2 A类顶码分配规则

A类顶码直接将需求量分配至唯一子码。

处理要求:

  • 不校验子码可用条件;
  • 若存在资源限制,则先校验该唯一子码分配后是否超出限制;
  • 若超出限制,整张选型单直接报错终止。

5.3 成本使用规则

  • 无资源限制时,成本直接参与子码排序;
  • 有资源限制时,成本在“资源满足”的前提下参与子码排序;
  • 若子码未维护成本,则排在已维护成本的子码之后;
  • 若候选子码均未维护成本,则按子码末尾排序值进行排序。

6 排序规则

6.1 顶码排序规则

6.1.1 A类顶码排序

按顶码内置排序(数据库 ID)升序处理。

6.1.2 B类顶码排序

按以下优先顺序处理:

  1. 事实独配物料数量:从大到小,大值优先;
  2. 顶码可用子码中的最小成本偏差金额:从小到大,小值优先;若顶码全部可用子码均未维护成本,则排在已维护成本的顶码之后;
  3. 顶码需求总量:从大到小,大值优先;
  4. 顶码内置排序:数据库 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. 命中的高优先级呆料数量:从多到少,且优先级数字越小越优先;
  3. 成本排序值:从小到大,小值优先;未维护成本排在已维护成本之后;
  4. 子码末尾排序:大值优先。
排序优先级 维度 说明
命中的呆料数量 从大到小,大值优先
命中的高优先级呆料数量 从大到小,大值优先(优先级数值越小越高)
成本排序值 从小到大,小值优先;未维护成本排在已维护成本之后
子码末尾排序 从大到小,大值优先

说明:在无呆料限制场景下,第 1、2 条自然不生效,子码实际按成本排序值和子码末尾排序处理。

6.3 稳定性原则

为确保同一输入下自动选型结果始终一致,系统必须满足以下稳定性原则

  1. 顶码排序与子码排序都必须采用固定且完整的优先级链路;
  2. 当前排序维度相同的情况下,必须继续比较下一个优先级维度,直到得出唯一顺序;
  3. 若前置排序维度全部相同,则必须落到最终兜底字段
  4. 顶码排序的最终兜底字段为:顶码内置排序(数据库 ID)升序
  5. 子码排序的最终兜底字段为:子码末尾排序值从大到小
  6. 实现层不得省略任一排序维度或兜底字段,否则视为不满足稳定性原则。

说明:稳定性原则的目标,是确保在相同输入、相同约束、相同主数据前提下,自动选型结果可重复、可验证、可复盘。


7 子码轮询分配规则

当场景中存在资源限制时,B类顶码(可用非机型独配顶码) 按“子码排序规则”得到排序列表后,按照列表顺序逐个尝试。

7.1 轮询逻辑

开始

读取当前顶码可用子码排序列表,取第一个

取当前候选子码进行预分配

累计资源是否任一超限

确认分配并扣减资源

当前顶码分配完成,轮询结束

当前顶码是否事实独配顶码

❌ 报错,整单报错终止

是否还有下一个候选子码

跳过当前子码,取下一个子码继续轮询

7.2 轮询说明

7.2.1 预分配说明

系统在轮询某个候选子码时,首先执行预分配判断。预分配阶段只做“是否超限”的判断。

7.2.2 资源扣减说明

只有当候选子码通过预分配校验后,系统才正式确认该子码为当前顶码的选型结果,并立即同步扣减当前选型单内共享资源池的剩余量。

7.2.3 事实独配处理说明

若当前顶码属于事实独配顶码,且当前候选子码预分配后已无法满足资源限制,则说明该顶码在当前限制条件下不存在可绕开的资源路径,此时系统不再继续尝试其他候选,直接整单报错终止。

7.2.4 非事实独配处理说明

若当前顶码不属于事实独配顶码,则当某个候选子码预分配超限时,系统跳过当前子码,继续按既定排序尝试下一个候选子码,直到找到可分配子码或全部候选尝试结束。

7.2.5 轮询结束说明

当以下两种情况之一发生时,当前顶码轮询结束:

  1. 已找到满足资源限制的候选子码,并完成正式分配;
  2. 全部可用子码均尝试完成,仍无可行方案,则整张选型单直接报错终止。

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 场景流程图

开始

按顶码分类规则完成分类

剔除C类、D类顶码

按顶码排序规则生成A类处理顺序

A类顶码是否全部处理完成

取当前A类顶码并分配唯一子码

按顶码排序规则生成B类处理顺序

B类顶码是否全部处理完成

取当前B类顶码

按子码排序规则取首位子码

✅ 输出自动选型结果

9.1.5 处理步骤

  1. 按顶码分类规则完成顶码分类;
  2. C类、D类顶码不参与运算;
  3. 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码;
  4. A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
  5. 每个 B 类顶码按子码排序规则直接取首位子码;
  6. 全部分配完成后,输出自动选型结果。

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 场景流程图

开始

按顶码分类规则完成分类

剔除C类、D类顶码

按顶码排序规则生成A类处理顺序

A类顶码是否全部处理完成

取当前A类顶码并分配唯一子码

资源校验是否通过

❌ 整单报错终止

确认分配并扣减资源

按顶码排序规则生成B类处理顺序

B类顶码是否全部处理完成

取当前B类顶码

按子码排序规则形成候选顺序

执行子码轮询与预分配校验

是否找到可分配子码

确认分配并扣减资源

✅ 输出自动选型结果

9.2.5 处理步骤

  1. 完成顶码分类,剔除 C 类、D 类顶码;
  2. 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码并校验资源;
  3. 任一 A 类顶码资源校验不通过,整单报错终止;
  4. A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
  5. 每个 B 类顶码先按子码排序规则生成候选顺序,再执行子码轮询与资源校验;
  6. 任一 B 类顶码无可行子码,整单报错终止;
  7. 全部分配完成后,输出自动选型结果。

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 场景流程图

开始

按顶码分类规则完成分类

剔除C类、D类顶码

按顶码排序规则生成A类处理顺序

A类顶码是否全部处理完成

取当前A类顶码并分配唯一子码

按顶码排序规则生成B类处理顺序

B类顶码是否全部处理完成

取当前B类顶码

按子码排序规则(含呆料优先级)取首位子码

✅ 输出自动选型结果

9.3.5 处理步骤

  1. 完成顶码分类,剔除 C 类、D 类顶码;
  2. 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码;
  3. A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
  4. 每个 B 类顶码按子码排序规则直接取首位子码,呆料优先级已在排序中体现;
  5. 全部分配完成后,输出自动选型结果。

说明:由于子码排序规则中“命中的呆料数量”“命中的高优先级呆料数量”优先,因此系统会自然优先选到更符合呆料目标的子码,无需额外增加其他处理逻辑。


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 仅在“子码排序规则”中额外纳入呆料优先级。

开始

按顶码分类规则完成分类

剔除C类、D类顶码

按顶码排序规则生成A类处理顺序

A类顶码是否全部处理完成

取当前A类顶码并分配唯一子码

资源校验是否通过

❌ 整单报错终止

确认分配并扣减资源

按顶码排序规则生成B类处理顺序

B类顶码是否全部处理完成

取当前B类顶码

按子码排序规则形成候选顺序

执行子码轮询与预分配校验

是否找到可分配子码

确认分配并扣减资源

✅ 输出自动选型结果

9.4.5 处理步骤

  1. 完成顶码分类,剔除 C 类、D 类顶码;
  2. 按顶码排序规则先处理全部 A 类顶码,逐个分配唯一子码并校验资源;
  3. 任一 A 类顶码资源校验不通过,整单报错终止;
  4. A 类顶码全部完成后,再按顶码排序规则处理 B 类顶码;
  5. 每个 B 类顶码先按子码排序规则生成候选顺序,再执行子码轮询与资源校验,呆料仅影响排序先后;
  6. 任一 B 类顶码无可行子码,整单报错终止;
  7. 全部分配完成后,输出自动选型结果。

说明:在该场景下,呆料仍然只影响排序顺序,不单独构成报错条件;系统统一按排序结果进行子码轮询即可,无需额外增加拆分处理逻辑。


10 自动选型总流程

开始

读取选型单、约束、主数据

顶码分类

是否存在呆料限制

是否存在资源限制

是否存在资源限制

进入场景A

进入场景B

进入场景C

进入场景D

按场景规则分配

是否存在报错

整单报错终止

输出自动选型结果

结束


11 报错规则

11.1 报错处理总原则

报错触发流程立即中断,不继续后续顶码的分配,需用户线下协调资源后重新计算。

  1. 任一报错场景发生后,整张选型单直接报错终止;
  2. 不保留部分成功、部分失败的自动选型结果;
  3. 错误信息统一按5段式结构输出:
    1. 计算结果
    2. 报错编码
    3. 报错内容
    4. 报错顶码
    5. 限制条件
    6. 处理建议

11.2 A类 / B类顶码报错

当 A类顶码分配时,或 B类中的事实独配顶码在子码轮询过程中,因资源瓶颈限制无法满足而导致方案不可继续时,系统按两段式结构输出错误信息。

11.2.1 A类顶码报错

报错内容:

  1. 计算结果:失败
  2. 报错编码:ERROR_001
  3. 报错内容:机型独配顶码限制数量无法满足
  4. 报错顶码:【顶码】
  5. 限制条件:【限制物料类型-限制编码-限制数量值】(多条时用 / 隔开)
  6. 处理建议:请线下协调对应限制物料资源数量;调整输入限制后重新发起自动选型计算。

11.2.2 B类顶码报错

报错内容:

  1. 计算结果:失败
  2. 报错编码:ERROR_002
  3. 报错内容:事实独配顶码限制数量无法满足
  4. 报错顶码:【顶码】
  5. 限制条件:【限制物料类型-限制编码-限制数量值】(多条时用 / 隔开)
  6. 处理建议:请线下协调对应限制物料资源数量;调整输入限制后重新发起自动选型计算。

11.3 无可行子码报错

当 B类顶码的全部可用子码按既定排序规则完成轮询后,仍均无法满足资源瓶颈限制时,系统按两段式结构输出错误信息。

报错内容:

  1. 计算结果:失败
  2. 报错编码:ERROR_003
  3. 报错内容:当前限制条件导致顶码无解
  4. 报错顶码:【顶码】
  5. 限制条件:【限制物料类型-限制编码-限制数量值】(多条时用 / 隔开)
  6. 处理建议:请线下协调对应限制物料资源数量;调整输入限制后重新发起自动选型计算。

11.4 无可计算顶码报错

当单据的顶码无A类或者B类顶码时,无法进行自动选型计算,单据报错。

报错内容:

  1. 计算结果:失败
  2. 报错编码:ERROR_004
  3. 报错内容:无可参与计算的顶码
  4. 报错顶码:-(固定展示-)
  5. 限制条件:-(固定展示-)
  6. 处理建议:此单据不满足自动选型条件,请人工手动选型。

12 规则总表

场景 处理对象 处理方式 是否可能报错
场景 A A类顶码 直接分配唯一子码
场景 A B类顶码 按子码排序规则直接取首位子码
场景 B A类顶码 分配唯一子码并校验资源
场景 B B类顶码 按子码排序后轮询,直到资源满足
场景 C A类顶码 直接分配唯一子码
场景 C B类顶码 按呆料优先级与成本规则直接取首位子码
场景 D A类顶码 分配唯一子码并校验资源
场景 D B类顶码 按呆料优先级与成本规则排序后轮询,直到资源满足

13 计算日志模块设计

13.1 模块定位

【自动选型计算日志】用于对一次自动选型任务的实际计算过程进行可视化还原,面向业务用户、产品、研发、测试提供统一的过程查看口径。

该模块不是对规则文档的重复罗列,而是将一次真实计算过程以“顶部概览 + 辅助说明 + 步骤卡片 + 顶码明细”的方式进行展示,帮助用户快速回答以下问题:

  1. 本次计算进入了哪个场景;
  2. 本次纳入计算的顶码有多少、分别是什么;
  3. 系统按什么顺序处理这些顶码;
  4. 每个顶码最终为什么成功、失败、跳过或未执行;
  5. 整张选型单最终为什么成功,或为什么失败终止。

13.2 设计目标

日志模块需同时满足以下目标:

  1. 业务可读:业务用户无需阅读底层规则文档,也能理解本次计算过程;
  2. 过程可回放:能够清晰还原“先做了什么,再做了什么,为什么这样做”;
  3. 异常可定位:一旦失败,可快速定位失败步骤、失败顶码、失败限制条件;
  4. 结果可核对:成功时可以直接核对最终选型结果,失败时可以直接查看错误结论与处理建议;
  5. 口径统一:日志中使用的术语、步骤命名、状态表达必须与自动选型主逻辑保持一致。

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 类顶码,则日志必须明确体现:

  1. 先处理 A 类顶码;
  2. A 类处理完成后,再进入 B 类顶码;
  3. 任一报错发生后,整单立即终止。

若不存在 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 类顶码分配步骤中,均需按顶码逐条展示。

每个顶码的展示结构固定为:

  1. 顶码摘要表中的一行结论;
  2. 对应的可展开详情卡片;
  3. 详情卡片中包含基础信息、排序结果、资源校验、处理结论等内容。

对于“未执行”的顶码:

  • 仅在步骤汇总表中展示“未执行”及原因;
  • 不生成展开明细卡片。

13.5 成功态与失败态口径

13.5.1 成功态

若所有参与计算的顶码均成功完成分配,则日志需展示:

  • 顶部概览中的整单结果 = 成功;
  • 主步骤区中的各步骤状态 = 成功;
  • 最终步骤为“输出自动选型结果”;
  • 最终结果汇总表中列出所有成功分配的顶码及最终子码。

13.5.2 失败态

若任一顶码触发报错,则日志需展示:

  • 顶部概览中的整单结果 = 失败;
  • 报错发生步骤的状态 = 失败;
  • 最终步骤为“报错终止”;
  • 步骤汇总表中清楚展示失败顶码与未执行顶码;
  • 失败顶码默认展开明细;
  • 页面最终展示错误编码、报错内容、报错顶码、限制条件、失败阶段与处理建议。

13.6 日志展示与规则文档的关系

日志模块只承接“解释实际计算过程”的职责,规则定义仍由正文其他章节给出。

因此:

  • 第 1~12 章负责说明“系统应该如何算”;
  • 第 13~14 章负责说明“系统算完以后,如何把过程展示出来”。

日志页面中的所有字段命名、分类名称、报错编码、排序依据表达,必须与前文规则定义保持一致,避免前后口径不统一。

14 结论

自动选型的核心不是单纯给顶码选一个子码,而是将顶码分类、可用子码过滤、事实独配识别、成本排序、呆料优先级、资源轮询与整单报错机制统一为一套可执行的规则体系。

  1. 语言收敛:统一顶码分类表述为 A / B / C / D;
  2. 逻辑收敛:将“命中呆料”从分类分支收敛为排序标签;
  3. 实现收敛:补充稳定性原则,明确最终兜底规则;
  4. 展示收敛:明确采用步骤流式全量计算日志,并给出完整 mock 示例。