plan-sess_670cd81b-64f1-4c5d-8667-6f4ca9a6b250.md 5.6 KB

智能清洗「待人工确认」流程重构计划(完整版·含严格测试清单)

问题根因(探索结论)

# 问题 根因
1 为什么人工确认 + 展示不行 AI 判定有 5 类放不行的结论(无合适模板 / 需结构归一即合并单元格·多级表头 / 模型未给出列绑定 / 置信度不达标 / token 预算耗尽),原因已落库但界面只平铺行,多了没法看
2 确认一个其他丢了吗 数据没丢(ai_clean_job status=NEED_REVIEW 永久保存),但没有按案件查询待人工清单的接口,跳去清洗页后界面就"看不见"了;SUPERSEDED 枚举从无写入
3 人工确认页无数据 cleanProgress 融合模式删掉 sessionStorage 文件树,而清洗页建树只读 sessionStorage、零后端兜底,树空在消费 focusKey 前就 return
4 细节 bug ① Skip 计数与明细不符 ② /aiClean/jobs 无 caseId 隔离 ③ 重跑会重判所有待人工 job ④ NeedReviewItem 缺 jobId/fileId ⑤ 「去人工确认」跳转没带 redirect

设计决策(已确认)

  1. 清洗页内建「待人工确认」工作清单(按案件从后端拉,处理一个刷新一个)
  2. 只清洗该表(单 sheet 提交、reClean=0),成功后自动标记 SUPERSEDED
  3. 重跑智能清洗跳过待人工表;清单每条提供「AI 重新判定」(token 不设限,按需随时重判)

后端改造(ai-server)

  1. GET /aiClean/review/list:按上下文案件查 NEED_REVIEW job,返回 jobId/fileId/sheetId/文件名/sheet 名/原因/置信度/时间。
  2. GET /aiClean/review/detail?jobId=:单条详情——VerifyReport(列绑定/逐列错误率/被拒列/预览 5 行)+ 模型草稿 + 置信度 + 模型名/token。
  3. POST /aiClean/review/resolve:批量置 SUPERSEDED;doClean 成功回调加钩子 markSupersededBySheet(任何清洗入口成功即自动消项)。
  4. POST /aiClean/review/rejudge?jobId=:单条重新 AI 判定(复用 AiCleanService.run,允许 NEED_REVIEW/SKIP/FAIL,线程带案件上下文)。
  5. prepareJob 跳过 status=NEED_REVIEW 的 job(不重判)。
  6. Skip 分支同样 addReview;NeedReviewItem 补 jobId/fileId(旧 JSON 兼容)。
  7. /aiClean/jobs 加 caseId 过滤;/dm/getFiles 支持 batchId 过滤。

前端改造(ai-electron/frontend)

  1. 清洗页树兜底:sessionStorage 空且有 focusKey/batchId 时调 /dm/getFiles 重建树、定位文件根只放该文件子树,再走 focusKey 定位/预览(修复问题 3)。
  2. 清洗页左栏「待人工确认」工作清单面板:sheet 名+原因+置信度+操作(处理/查看详情/AI 重新判定);「处理」加载该文件树并选中 sheet,进入"仅清洗当前表"模式——「导入数据」只提交当前 sheet 子树(reClean=0,后端零改动);完成后清单自动消项。
  3. 判定详情可视化:弹窗展示置信度总览、逐列校验表格、预览样本 5 行、模型草稿(折叠)、模型名/token。
  4. 清单实时更新:进入页面/清洗完成回流/emitter 事件(cleanProgress SSE 批次终态时广播)三钩子 + 20s 轻轮询兜底。
  5. 进度页 AI 卡:卡内 ≤3 条(截断+tooltip),「查看全部 N」开抽屉(全量表格 + 顶部原因说明文案 + 行操作)。
  6. 跳转补 redirect;TS 类型与 governApi 封装同步(list/detail/resolve/rejudge)。

测试文件与预期路径

  • 文件 A:周海--车辆登记信息.xls(5.6KB,sheet「机动车信息」模板匹配失败)→ AI 判定 → 待人工路径
  • 文件 B:周海--通信18905810269.xls(92KB,通信记录可匹配模板)→ 系统既有清洗路径
  • 组合:A+B 同批 = 混合批次(B 走 doClean、A 走 AI 判定)

严格测试清单(浏览器逐条验证,输出 smart-clean-test-cases.md 到根目录记录结果)

一、上传解析:① 上传 A → 树出现、模板匹配失败、智能可用 ② 上传 B → 匹配模板成功 ③ A+B 同批 → 各自状态正确 ④ 重复上传 A(MD5 已还原)→ 跳过解析(原行为回归) 二、AI 路径(A 单独):⑤ 智能 → AI 卡判定 0/1→1/1 ⑥ 结论=待人工、失败 0 ⑦ 处理日志两条记录正确 ⑧ 卡内 ≤3 条+抽屉+原因文案 ⑨ 详情弹窗四块内容齐全 ⑩ AI 重新判定跑通且结果刷新 三、既有路径(B 单独):⑪ 无 AI 表 → doClean 推进 → 环形到 100% → 完成态 ⑫ 业务表入库数据验证 四、混合批次:⑬ A+B 智能清洗 → B 交既有清洗一次 doClean、A 待人工、批次 DONE ⑭ B 已入库、A 待人工互不影响 五、待人工闭环(核心):⑮ 去人工确认 → 清洗页有树有预览(问题 3 验证)⑯ 清洗页清单可见含原因 ⑰ 清单「处理」→ 树定位+选中 ⑱ 配规则导入 → 只洗该表 → 清单自动消项 ⑲ 多文件场景其余待人工不丢 ⑳ 清洗页内详情弹窗可用 ㉑ 清洗页内 AI 重新判定可用 六、旧入口回归:㉒ 上传页行级手动清洗 ㉓ 上传页整页手动清洗 ㉔ importList 重新清洗(reClean=1&fileId)㉕ 进度页「改为手动清洗」按 batchId 兜底建树 七、细节修复验证:㉖ Skip 入清单且计数一致 ㉗ /aiClean/jobs 案件隔离 ㉘ 重跑智能清洗不重判待人工(日志验证)㉙ 重判后命中模板 → dispatchExisting 路径 ㉚ SSE 断连/页面刷新恢复回归

每条记录:操作步骤 → 预期 → 实际 → 截图;发现 bug 即修复并重跑该条 + 相关回归条目;全部勾选后才算完成。