W05 在途修订:差异评估结论审核件一个候选一张表 · 关键台账数据看板件(ledger-board)· S1 清单不再把人刚填的参数摆成缺口

活动包 `part-substitution-assessment`(case-model / manifest / report / target-style / badge / ledger-board 与两份包内测试)、
目标件「验收工单-01-差异评估结论审核」、`docs/ss02-act-05` 关键台账数据两份、端到端测试记录、e2e 脚本。
逐条口径见同批 CLAUDE.md 快照。2026-08-27 另一会话做的,一直留在工作树没入库;与同批另两条提交互相依赖。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0167qWjeyBwvfdGovd7FWbCu
This commit is contained in:
xcs
2026-08-27 23:20:15 +08:00
co-authored by Claude Fable 5
parent 0923fbfe4d
commit 909b1fe4b7
13 changed files with 1943 additions and 208 deletions
@@ -24,6 +24,7 @@ import { activityIdSchema } from '@contracts';
import { ASSESSMENT_SKILLS } from './skills.ts';
import { CMMN_XML, NARRATIVE, ASSESSMENT_PHASES, ASSESSMENT_STEPS } from './case-model.ts';
import { P08_MASTER_CREATE, P10_DOCUMENT_CREATE, EVAL_INPUT_LIST, DIFFERENCE_REVIEW, LANDING_CONFIRM } from './views/report.ts';
import { LEDGER_BOARD, LEDGER_BOARD_DATA } from './views/ledger-board.ts';
import { ACTIVITY_ID_TEXT, D, TOOL_COMPARE, TOOL_RECOMMEND } from './constants.ts';
export { D, RULE_VERSION, TOOL_COMPARE, TOOL_RECOMMEND } from './constants.ts';
@@ -89,7 +90,7 @@ export const manifest: ActivityManifest = {
identity: {
activityId: ACTIVITY_ID,
name: 'ACT-WORK-05 · 差异评估',
packageVersion: '1.4.7',
packageVersion: '1.6.2',
category: '需求分析与方案匹配',
sdkVersion: '0.1.0-m5',
checksum: 'dev-checksum-part-substitution-assessment',
@@ -109,20 +110,57 @@ export const manifest: ActivityManifest = {
data: {
type: 'object',
required: ['customerCode', 'requestDescription', 'originalInternalPn', 'candidateInternalPns'],
/*
* 运营端「启动活动」表单照这几个字段渲染(2026-08-27,`docs/API文档-活动模块.md` §4):
* `x-control` 定控件(combo = 选择 + 新增,textarea = 多行),`x-options` 指候选从哪张正式台账现读,`x-order` 定表单次序
* (清单存在 jsonb 里,书写顺序到不了运营端 —— PG 会按键长重排),
* `description` 是控件下那句辅助说明。台账里没有的值**照样启动**,启动后由 S0 的存在性核对派数据工单。
* datasheets 是文件,本期不上启动表单(在数据工单里传)。
*/
properties: {
customerCode: { type: 'string', title: '客户编码(L-02 客户主台账)', examples: ['CU-0142'] },
customerName: { type: 'string', title: '客户名称(仅客户不在库时填,启动后先建档)', examples: ['深圳恒星电源有限公司'] },
customerCode: {
type: 'string',
title: '客户',
description: '台账里有就直接选;是新客户就自己填客户编码,启动后派数据录入卡建档。',
examples: ['CU-0142'],
'x-control': 'combo',
'x-options': { ledger: 'customer.profile', value: 'customer_code', label: 'name' },
'x-order': 1,
},
customerName: {
type: 'string',
title: '客户名称(仅客户不在库时填)',
description: '新客户先把名字摆上,启动后建档时让人核。',
examples: ['深圳恒星电源有限公司'],
'x-order': 2,
},
requestDescription: {
type: 'string',
title: '客户需求(原始描述 —— 据此新建 P-01 需求主记录 · 版本 V1)',
title: '客户需求',
description: '保留原始需求语义,据此新建 P-01 需求主记录(版本 V1)。',
examples: ['工业电源项目在用 LM2596S-5.0(TI,12V→5V),原厂 PCN 转 NRND,客户要求验证替代料'],
'x-control': 'textarea',
'x-order': 3,
},
originalInternalPn: {
type: 'string',
title: '原内部料号',
description: '差异评估基准;库里没有该 PN 也可启动,启动后派数据工单补参数。',
examples: ['LM2596S-5.0'],
'x-control': 'combo',
'x-options': { ledger: 'parts.profile', value: 'internal_pn', label: 'internal_pn' },
'x-order': 4,
},
originalInternalPn: { type: 'string', title: '原内部料号(P-08)', examples: ['LM2596S-5.0'] },
candidateInternalPns: {
type: 'array',
title: '候选内部料号(数组,≥1;不在库的启动后经数据工单创建)',
title: '候选内部料号',
description: '被评估物料;库里有就直接选,没有就自己填料号,启动后经数据工单创建。',
items: { type: 'string' },
examples: [['XL2596S-5.0', 'LM2596S-ADJ']],
/* 运营端启动表单只选一颗(2026-08-27 用户定):摆成与原料号同款的下拉;提交的单个料号由后端包成一元数组,活动契约不变 */
'x-control': 'combo',
'x-options': { ledger: 'parts.profile', value: 'internal_pn', label: 'internal_pn' },
'x-order': 5,
},
datasheets: {
type: 'array',
@@ -257,7 +295,7 @@ export const manifest: ActivityManifest = {
skills: ASSESSMENT_SKILLS.map((s) => s.id),
models: ['deepseek-v4-flash'],
roles: ['FAE/RI'],
budget: { steps: 90, tokens: 600_000, activeMinutes: 120, humanCalls: 16 },
budget: { steps: 90, tokens: 2_000_000, activeMinutes: 120, humanCalls: 16 },
},
},
@@ -561,6 +599,9 @@ col({ name: 'internal_pn', type: 'text', label: '内部料号', primaryKey: true
{ name: 'eval-input-list', html: EVAL_INPUT_LIST },
{ name: 'difference-review', html: DIFFERENCE_REVIEW },
{ name: 'landing-confirm', html: LANDING_CONFIRM },
/* 运营中心 L2 的沙箱视图(2026-08-27,用户定替换掉全流程分支图):关键台账数据看板 —— 最近一次已放行
实例的落账快照,行由基座按 `data` 声明从正式表圈;无脚本,报高脚本由服务端出口注入 */
{ name: 'activity-ledger', html: LEDGER_BOARD, data: LEDGER_BOARD_DATA },
],
cardSchemas: {},
distillHooks: [{ on: 'terminal', prompt: '归纳本次差异评估:哪些候选、各自推荐等级与关键依据、UNKNOWN 挂了什么验证任务、审核是否被驳回过(为什么)、数据工单建了哪些主数据。' }],