From 901b6741ff85a73ba8e262327026bdc4b8800531 Mon Sep 17 00:00:00 2001 From: xst Date: Wed, 9 Sep 2026 09:31:55 +0800 Subject: [PATCH] =?UTF-8?q?test(=E8=BF=90=E5=8D=95=E8=B5=84=E6=96=99?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E5=8C=85=E4=B8=8B=E8=BD=BD):=20=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=96=87=E6=A1=A3=E4=B8=8E=20QE=20Fleet=20=E5=85=A8?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E6=B5=8B=E8=AF=95=E8=AE=BE=E8=AE=A1=E4=BA=A7?= =?UTF-8?q?=E7=89=A9=E5=85=A5=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 需求 v1.0 定稿(md+docx)与 UI 原型入库;确认单判定 docx 为同文载体、安徽运八并行无冲突 - 全流程产物:分析 + 59 测试点 + 85 用例 + 测试数据 145 组;评审 3 阻断与覆盖缺口 GAP-001 已修复,裁决 PASS_WITH_FIX - 导出 Excel(云效模型)+ XMind + 版本快照 v1;含 docx 生成脚本与转换校验产物 - .gitignore 排除 node_modules 与 Excel 锁文件 --- .claude/launch.json | 11 + .gitignore | 4 + decisions/运单资料文件包下载需求_确认结论.md | 50 + .../运单资料文件包下载需求_关联与冲突.md | 19 + .../analysis/运单资料文件包下载需求_分析.md | 163 ++ .../运单资料文件包下载需求_测试数据.md | 297 +++ .../运单资料文件包下载需求_测试策略.md | 22 + .../运单资料文件包下载需求_覆盖率审计.md | 254 +++ .../运单资料文件包下载需求_评审报告.md | 138 ++ .../运单资料文件包下载需求_质量裁决.md | 74 + .../运单资料文件包下载需求_风险评估.md | 21 + output/docx_check/check.docx | Bin 0 -> 17887 bytes output/docx_check/check.pdf | Bin 0 -> 246915 bytes .../docx_check/check_html.files/filelist.xml | 2 + .../docx_check/check_html.files/header.html | 13 + output/docx_check/check_html.html | 1882 +++++++++++++++++ output/docx_check/convert.ps1 | 13 + output/docx_check/convert_html.ps1 | 11 + .../运单资料文件包下载需求_测试用例.xlsx | Bin 0 -> 37787 bytes .../运单资料文件包下载需求/appium_tests.py | 151 ++ .../playwright_tests.py | 90 + .../运单资料文件包下载需求_执行报告.md | 161 ++ output/make_docx_waybill_package.js | 377 ++++ output/manifests/运单资料文件包下载需求.json | 553 +++++ .../运单资料文件包下载需求_analyze.json | 113 + .../运单资料文件包下载需求_design.json | 38 + .../运单资料文件包下载需求_execute.json | 31 + .../运单资料文件包下载需求_monitor.json | 17 + .../运单资料文件包下载需求_prepare.json | 84 + .../运单资料文件包下载需求_review.json | 39 + .../运单资料文件包下载需求/requirement.md | 247 +++ output/package-lock.json | 208 ++ output/package.json | 16 + .../运单资料文件包下载需求_测试用例.md | 147 ++ .../运单资料文件包下载需求_测试点.md | 575 +++++ .../运单资料文件包下载需求/VERSION_INDEX.md | 5 + .../v1/normalized_inputs/requirement.md | 247 +++ .../v1/snapshot_meta.json | 14 + .../v1/运单资料文件包下载需求.json | 543 +++++ .../v1/运单资料文件包下载需求_关联与冲突.md | 19 + .../v1/运单资料文件包下载需求_分析.md | 163 ++ .../v1/运单资料文件包下载需求_测试点.md | 575 +++++ .../v1/运单资料文件包下载需求_测试用例.md | 147 ++ .../v1/运单资料文件包下载需求_测试用例.xlsx | Bin 0 -> 37787 bytes .../运单资料文件包下载需求.xmind | Bin 0 -> 61538 bytes requirements/运单资料文件包下载需求.docx | Bin 0 -> 17887 bytes requirements/运单资料文件包下载需求.md | 258 +++ .../prototypes/anhuibaba_file_package.html | 391 ++++ 48 files changed, 8183 insertions(+) create mode 100644 .claude/launch.json create mode 100644 decisions/运单资料文件包下载需求_确认结论.md create mode 100644 output/analysis/运单资料文件包下载需求_关联与冲突.md create mode 100644 output/analysis/运单资料文件包下载需求_分析.md create mode 100644 output/analysis/运单资料文件包下载需求_测试数据.md create mode 100644 output/analysis/运单资料文件包下载需求_测试策略.md create mode 100644 output/analysis/运单资料文件包下载需求_覆盖率审计.md create mode 100644 output/analysis/运单资料文件包下载需求_评审报告.md create mode 100644 output/analysis/运单资料文件包下载需求_质量裁决.md create mode 100644 output/analysis/运单资料文件包下载需求_风险评估.md create mode 100644 output/docx_check/check.docx create mode 100644 output/docx_check/check.pdf create mode 100644 output/docx_check/check_html.files/filelist.xml create mode 100644 output/docx_check/check_html.files/header.html create mode 100644 output/docx_check/check_html.html create mode 100644 output/docx_check/convert.ps1 create mode 100644 output/docx_check/convert_html.ps1 create mode 100644 output/excel_reports/运单资料文件包下载需求_测试用例.xlsx create mode 100644 output/execution/运单资料文件包下载需求/appium_tests.py create mode 100644 output/execution/运单资料文件包下载需求/playwright_tests.py create mode 100644 output/execution/运单资料文件包下载需求_执行报告.md create mode 100644 output/make_docx_waybill_package.js create mode 100644 output/manifests/运单资料文件包下载需求.json create mode 100644 output/manifests/运单资料文件包下载需求_analyze.json create mode 100644 output/manifests/运单资料文件包下载需求_design.json create mode 100644 output/manifests/运单资料文件包下载需求_execute.json create mode 100644 output/manifests/运单资料文件包下载需求_monitor.json create mode 100644 output/manifests/运单资料文件包下载需求_prepare.json create mode 100644 output/manifests/运单资料文件包下载需求_review.json create mode 100644 output/normalized_inputs/运单资料文件包下载需求/requirement.md create mode 100644 output/package-lock.json create mode 100644 output/package.json create mode 100644 output/test_cases/运单资料文件包下载需求_测试用例.md create mode 100644 output/test_points/运单资料文件包下载需求_测试点.md create mode 100644 output/versions/运单资料文件包下载需求/VERSION_INDEX.md create mode 100644 output/versions/运单资料文件包下载需求/v1/normalized_inputs/requirement.md create mode 100644 output/versions/运单资料文件包下载需求/v1/snapshot_meta.json create mode 100644 output/versions/运单资料文件包下载需求/v1/运单资料文件包下载需求.json create mode 100644 output/versions/运单资料文件包下载需求/v1/运单资料文件包下载需求_关联与冲突.md create mode 100644 output/versions/运单资料文件包下载需求/v1/运单资料文件包下载需求_分析.md create mode 100644 output/versions/运单资料文件包下载需求/v1/运单资料文件包下载需求_测试点.md create mode 100644 output/versions/运单资料文件包下载需求/v1/运单资料文件包下载需求_测试用例.md create mode 100644 output/versions/运单资料文件包下载需求/v1/运单资料文件包下载需求_测试用例.xlsx create mode 100644 output/xmind_reports/运单资料文件包下载需求.xmind create mode 100644 requirements/运单资料文件包下载需求.docx create mode 100644 requirements/运单资料文件包下载需求.md create mode 100644 resources/prototypes/anhuibaba_file_package.html diff --git a/.claude/launch.json b/.claude/launch.json new file mode 100644 index 0000000..f84cd88 --- /dev/null +++ b/.claude/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.0.1", + "configurations": [ + { + "name": "prototypes", + "runtimeExecutable": "python", + "runtimeArgs": ["-m", "http.server", "8791", "--directory", "resources/prototypes"], + "port": 8791 + } + ] +} diff --git a/.gitignore b/.gitignore index 63679e5..4c9265c 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ __pycache__/ .idea/ .vscode/ + +# Node 依赖与 Office 锁文件不入库 +output/node_modules/ +~$* diff --git a/decisions/运单资料文件包下载需求_确认结论.md b/decisions/运单资料文件包下载需求_确认结论.md new file mode 100644 index 0000000..44e22a6 --- /dev/null +++ b/decisions/运单资料文件包下载需求_确认结论.md @@ -0,0 +1,50 @@ +# 确认结论模板 + +## 1. 基本信息 + +- 当前需求:requirements/运单资料文件包下载需求.md +- 关联历史需求:requirements/运单资料文件包下载需求.docx, requirements/安徽运八需求.md +- 确认状态:`已确认` +- 确认日期:2026-09-08 +- 确认人:QE Fleet 自动确认(依据:需求文档本身为 v1.0 定稿,第八章已记录需求方对 13 项待确认事项的全部决议;本确认单仅裁决与历史需求的归属关系,先例同 decisions/安徽运八需求_确认结论.md) + +## 2. 关系判定 + +- 关系类型:`替代` +- 判定理由: + 1. **运单资料文件包下载需求.docx(相似度 0.8336)**:与当前需求同名、同版本(v1.0 定稿)、同编写日期(2026-09-08),关键条目逐项比对一致(菜单名"运单文件包"、最小序号证件挂载规则、2000 行/10MB 上限、7 天保留期、第八章 13 项确认决议、"含司机及车辆证件"命名后缀均命中)。实为**同一需求文档的 Word 原始载体**,requirements/运单资料文件包下载需求.md 为其 Markdown 维护稿(流水线主输入)。相似度高源于同文异格式,不构成两个独立需求,无历史冲突面。 + 2. **安徽运八需求.md(相似度 0.1051)**:其自身确认结论(decisions/安徽运八需求_确认结论.md)已判定为并行模块——安徽运八省级监测数据上报 vs 本次运单资料文件包批量导出,功能无重叠、无共享口径。本次需求不读取、不修改其任何数据与规则。 + +## 3. 生效边界 + +- 生效范围:运八平台端 - 运单管理 - "运单文件包"新增菜单(上传清单、任务列表、文件包下载) +- 失效范围:无(纯新增功能,不改动既有功能) +- 影响模块:运单管理(新增入口)、文件打包/下载服务(新增)、司机与车辆档案、支付电子回单、运单合同附件(均为只读引用) +- 影响角色:运营人员(唯一可见角色) +- 影响接口或数据口径:新增清单上传、任务状态、失败清单、zip 下载及审计日志接口;不改动既有运单、支付、合同的数据口径 + +## 4. 冲突点 + +| 序号 | 当前需求条目 | 历史需求条目 | 冲突类型 | 最终确认口径 | +| --- | --- | --- | --- | --- | +| 1 | 无冲突(docx 为同文异格式载体) | — | 无 | 以 requirements/运单资料文件包下载需求.md 为唯一维护版 | +| 2 | 无冲突(与安徽运八为并行模块) | — | 无 | 无需处理 | + +## 5. 回写要求 + +- 是否需要回写当前需求:`否` +- 是否需要回写历史需求:`否` +- 需要补充的版本边界:无(docx 与 md 同为 v1.0 定稿,无版本分歧) +- 需要补充的替代/继承说明:docx 为源文件留存,md 为流水线主输入,二者内容一致 +- 需要补充的兼容策略:无 + +## 6. 重跑计划 + +- 需要重跑的需求列表:无 +- 重跑顺序建议:无需重跑 +- 是否允许在确认前继续导出:`允许` + +## 7. 备注 + +- 待跟进事项:无 +- 风险说明:文件包含司机身份证号(批次包命名含完整身份证号)及证件照片,属敏感个人信息导出场景——权限控制(仅运营人员可见)、下载审计日志、zip 不加密(依赖权限+审计,确认决议 #12)为合规测试重点(对应 RISK-COMPLIANCE);并发上限 1~2 与 1000 单/30 分钟性能要求对应 RISK-AVAILABILITY(P1)。 diff --git a/output/analysis/运单资料文件包下载需求_关联与冲突.md b/output/analysis/运单资料文件包下载需求_关联与冲突.md new file mode 100644 index 0000000..a68f2a9 --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_关联与冲突.md @@ -0,0 +1,19 @@ +# 运单资料文件包下载需求 关联需求与冲突检查 + +## 目标需求 +- `requirements\运单资料文件包下载需求.md` + +## 项目画像 +- `knowledge_base\00_project\project_profile.md` + +## 关联技术方案 +- 未识别到同主题技术方案文档。 + +## 关联需求识别 +| 序号 | 关联需求 | 相似度 | +| :--- | :--- | :--- | +| 1 | `requirements\运单资料文件包下载需求.docx` | 0.8336 | +| 2 | `requirements\安徽运八需求.md` | 0.1051 | + +## 潜在冲突与修改建议 +- 暂未识别到明显冲突条目。建议在需求评审时继续人工确认。 diff --git a/output/analysis/运单资料文件包下载需求_分析.md b/output/analysis/运单资料文件包下载需求_分析.md new file mode 100644 index 0000000..9b8800d --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_分析.md @@ -0,0 +1,163 @@ +# 运单资料文件包下载需求 结构化分析 + +> 生成时间: 2026-09-08 +> 需求文档: requirements/运单资料文件包下载需求.md(v1.0 定稿) +> 原始载体: requirements/运单资料文件包下载需求.docx(同版本 Word 载体,内容一致,见 decisions/运单资料文件包下载需求_确认结论.md) +> 原型: resources/prototypes/anhuibaba_file_package.html(任务列表 / 上传弹窗 / 文件包结构预览 / 失败清单) +> 项目画像: knowledge_base/00_project/project_profile.md +> 确认状态: 需求方已于 2026-09-08 确认全部 13 项待确认事项(需求文档第八章),本文档无遗留待确认项 + +## 1. 需求背景 + +运营人员在线下归档、审计、对账场景中需要按批次收集运单资料:运单合同、电子回单,以及司机证件照片、车辆证件照片。目前只能逐单进入运单详情手工下载整理,效率低且易遗漏。 + +## 2. 目标 + +提供"上传运单清单 → 系统自动生成资料文件包 → 任务完成后下载"的批量导出能力。核心规则:**司机姓名+身份证号+车牌号三要素完全一致的运单归为一批,生成一个文件包**;文件包内按运单建运单包;批次内**最小序号**运单包额外含司机及车辆证件照片。 + +**本期范围**:仅做资料导出打包;不新增数据采集,合同、电子回单、司机证件、车辆证件均读取运八平台现有数据。 + +## 3. 用户角色 + +| 角色 | 职责 | +| :--- | :--- | +| 运营人员 | 唯一可见角色:下载模板、上传清单、查看任务进度、下载文件包/失败清单 | +| 系统后台 | 异步打包任务:校验、归批、逐运单下载关联文件、组装 zip、清理过期包 | +| 平台管理员 | 权限分配(菜单仅授权运营人员) | + +## 4. 功能模块 + +### 4.1 菜单入口(运八平台端) +运单管理相关模块下新增独立菜单"运单文件包"。页面结构:上方"上传任务"入口(模板下载 + 上传按钮),下方"任务列表"。菜单需权限控制——文件包含身份证等敏感证件照片。 + +### 4.2 文件上传 +- 模板列:序号(正整数,全文件唯一)/ 货源单号 / 运单号,格式 .xlsx,提供模板下载。 +- 限制:单文件 ≤2000 行,≤10MB。 +- 文件级校验(整体拒绝,不创建任务):非 xlsx、列名缺失或不符、文件损坏、行数/大小超限。 +- 数据级校验(该行计入失败清单):序号非正整数或重复、货源单号/运单号为空、运单号不存在、货源单号与运单实际所属货源不一致、运单号文件内重复、运单缺司机或车辆信息无法归批。 +- 处理原则:文件级错误整体拒绝;数据级错误剔除失败行后继续处理有效行。 + +### 4.3 任务 +- 状态机:待处理 → 处理中 → 已完成(全部有效行成功)/ 已完成·部分失败(部分行失败)/ 失败(系统级错误整体未生成文件包)。 +- 任务列表字段:任务编号、源文件名、上传人、上传时间、任务状态、总行数/成功数/失败数、完成时间、操作(下载文件包——任务成功后显示;下载失败清单——存在失败行时显示,xlsx,含序号/货源单号/运单号/失败原因)。 + +### 4.4 文件包生成 +- 批次划分:按有效行运单在**系统内**的司机姓名+身份证号+车牌号归组。同一司机换车、同一车辆换司机拆分为不同批次。 +- 目录结构(三层):任务总包 `运单资料_【任务编号】.zip` → 批次包 `【司机姓名】-【身份证号】-【车牌号】` → 运单包 `【序号】-【运单号】-【货源单号】`(最小序号运单追加 `-含司机及车辆证件` 后缀)。 +- 运单包子目录:合同 / 电子回单 / 司机证件 / 车辆证件;文件保留系统原文件名,重名自动追加 (1)、(2)。 +- 内容矩阵:合同+电子回单 → 全部运单;司机证件+车辆证件 → 仅批次内最小序号运单(证件以最小序号运单挂载的司机、车辆档案为准)。 +- 合同口径:以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同。 +- 电子回单口径:运单全部支付记录对应的银行电子回单。 +- 文件缺失:不阻断任务,对应子目录不生成,原因记入失败清单;最小序号运单被剔除时重算最小序号并改挂证件;单个文件下载失败自动重试 3 次,仍失败记入失败清单。 + +### 4.5 下载 +任务完成后任务列表显示"下载"按钮,下载任务总包 zip;支持重复下载,不重复生成(幂等);下载记录审计日志(操作人、时间、任务编号);按批次文件包单独下载本期不做。 + +## 5. 核心规则 + +### 5.1 归批与证件挂载 +- 三要素 = 系统内司机姓名+身份证号+车牌号,完全一致归一批(非按上传行顺序、非按货源单号)。 +- 最小序号 = 上传清单中该批次内序号最小的运单;序号全文件唯一。 +- 单运单批次的运单包仍含司机及车辆证件。 +- 失败行剔除后,证件挂载到批次内剩余运单中序号最小者。 + +### 5.2 校验与失败处理 +- 文件级 → 整体拒绝;数据级 → 行级剔除继续。 +- 无电子回单(如运单被关闭、无支付记录):不阻断,子目录不生成,原因记失败清单。 + +### 5.3 异步与性能 +- 打包为后台异步任务,上传后无需等待;任务列表可见进度(成功/失败条数)。 +- 1000 单规模任务 30 分钟内完成。 +- 多任务并发:后台排队处理,并发上限 1~2,防磁盘/带宽压力。 + +### 5.4 存储与幂等 +- 文件包默认保留 7 天,过期自动清理,不可下载,需重新上传生成。 +- 同一任务重复点击下载不重复生成文件包。 +- 同一文件重复上传:允许,各自生成独立任务,不合并去重。 + +### 5.5 敏感数据合规 +- 司机身份证号、证件照片属敏感个人信息:菜单需权限控制、下载记审计日志。 +- 批次包命名含完整身份证号(确认决议 #3);zip 不加密,依赖权限+审计(确认决议 #12)。 + +## 6. 状态流转 + +``` +任务:待处理 → 处理中 → 已完成 | 已完成·部分失败 | 失败 +失败/完成后可删除任务重新上传(系统异常场景) +文件包:已生成 →(7天)→ 过期清理 → 不可下载 +``` + +## 7. 异常与边界场景(需求第六章汇总) + +1. 模板格式/列名错误 → 上传即拒绝 +2. 序号重复、非正整数 → 行级失败清单 +3. 运单号不存在 / 货源单号不匹配 → 行级失败清单 +4. 运单被关闭、未产生支付记录无电子回单 → 不阻断,记失败清单 +5. 运单缺司机或车辆信息无法归批 → 行级失败清单 +6. 批次内最小序号运单被剔除 → 证件改挂重算后的最小序号运单 +7. 同一文件重复上传 → 允许,独立任务 +8. 多任务并发 → 排队,并发上限 1~2 +9. 文件包超保留期 → 不可下载,重新上传 +10. 任务处理中系统异常 → 任务置"失败",支持删除重传 + +## 8. 歧义标注与待确认项 + +> ✅ **无遗留待确认项**:原 v0.1 草稿 13 项待确认事项已于 2026-09-08 经需求方全部确认并采纳文档建议方案(需求文档第八章确认决议记录): + +| # | 事项 | 确认结论 | +|:---:|:---|:---| +| 1 | 菜单名称与挂载位置 | "运单文件包",挂运单管理模块下 | +| 2 | 可见角色/权限 | 运营人员 | +| 3 | 批次文件包命名 | 司机姓名-身份证号-车牌号(含完整身份证号) | +| 4 | 运单包内子目录 | 合同/电子回单/司机证件/车辆证件 | +| 5 | "运单相关合同"范围 | 以运单详情-合同附件为准(含承运合同),不含委托合同/框架合同 | +| 6 | 货源单号与系统不一致时 | 该行失败 | +| 7 | 数据级校验失败行处理 | 剔除后继续,任务记"已完成·部分失败" | +| 8 | 失败行剔除后证件挂载 | 挂到批次内剩余运单的最小序号运单 | +| 9 | 行数/大小上限 | 2000 行 / 10MB | +| 10 | 文件包保留期 | 7 天 | +| 11 | 按批次包单独下载 | 本期不做 | +| 12 | zip 是否加密 | 不加密(依赖权限+审计) | +| 13 | 序号唯一性范围 | 全文件唯一 | + +## 9. 需求条目清单(追溯链骨干,供测试点/用例/覆盖率审计引用) + +| 需求条目 | 内容摘要 | 来源章节 | 优先级基准 | +| :--- | :--- | :--- | :---: | +| REQ-001 | 新增"运单文件包"菜单挂运单管理模块下,页面为上传入口+任务列表结构 | 4.1 | P0 | +| REQ-002 | 菜单权限控制:仅运营人员可见可操作(敏感数据) | 4.1/七 | P0 | +| REQ-003 | 模板下载:xlsx 模板,列=序号/货源单号/运单号 | 4.2.1 | P1 | +| REQ-004 | 上传限制:xlsx、≤2000 行、≤10MB | 4.2.1 | P1 | +| REQ-005 | 文件级校验整体拒绝:非 xlsx/列名缺失或不符/损坏/超限,不创建任务并提示具体原因 | 4.2.2 | P0 | +| REQ-006 | 数据级校验行级失败:序号非法/重复、单号为空、运单号不存在、货源不匹配、运单号文件内重复、无法归批 | 4.2.2 | P0 | +| REQ-007 | 数据级处理原则:剔除失败行继续有效行,任务记"已完成·部分失败" | 4.2.2 | P0 | +| REQ-008 | 任务状态机:待处理→处理中→已完成/已完成·部分失败/失败 | 4.3.1 | P0 | +| REQ-009 | 任务列表字段完整:任务编号/源文件名/上传人/上传时间/状态/总·成功·失败数/完成时间/操作 | 4.3.2 | P1 | +| REQ-010 | 批次划分:系统内司机姓名+身份证号+车牌号三要素归批,换车/换司机拆批 | 4.4.1 | P0 | +| REQ-011 | 三层目录结构与命名:总包/批次包/运单包命名规则,最小序号运单包带"-含司机及车辆证件"后缀 | 4.4.2 | P0 | +| REQ-012 | 运单包内容矩阵:合同+回单全员,司机证件+车辆证件仅最小序号运单;单运单批次仍含证件 | 4.4.3 | P0 | +| REQ-013 | 数据来源口径:合同=运单详情-合同附件(含承运不含委托/框架);回单=全部支付记录银行电子回单;证件=司机/车辆档案 | 4.4.3 | P1 | +| REQ-014 | 子目录组织与重名处理:合同/电子回单/司机证件/车辆证件子目录,原文件名保留,重名追加(1)(2) | 4.4.2 | P1 | +| REQ-015 | 文件缺失处理:无合同/回单不阻断记失败清单;最小序号剔除重算改挂;单文件下载失败重试 3 次 | 4.4.4 | P0 | +| REQ-016 | 下载:任务完成后可下载总包 zip;重复下载不重复生成(幂等) | 4.5/七 | P0 | +| REQ-017 | 下载审计日志:操作人、时间、任务编号 | 4.5/七 | P0 | +| REQ-018 | 失败清单下载:存在失败行时显示,xlsx 含序号/货源单号/运单号/失败原因 | 4.3.2 | P1 | +| REQ-019 | 异步处理:后台打包,上传后无需等待,列表可见进度 | 七 | P1 | +| REQ-020 | 性能:1000 单规模任务 30 分钟内完成 | 七 | P1 | +| REQ-021 | 保留期:7 天过期自动清理,不可下载需重新上传 | 七/六#9 | P1 | +| REQ-022 | 并发控制:多任务排队,并发上限 1~2 | 六#8 | P1 | +| REQ-023 | 重复上传:同一文件重复上传允许,独立任务不合并 | 六#7 | P2 | +| REQ-024 | 系统异常:任务处理中异常置"失败",支持删除后重新上传 | 六#10 | P1 | +| REQ-025 | 按批次文件包单独下载:本期不做(负向范围确认) | 4.5/八#11 | P3 | +| REQ-026 | zip 不加密,依赖权限控制+审计日志保障敏感数据(确认决议 #12) | 八#12 | P2 | + +## 10. 项目差异化约束 + +- 所属端:运八平台端(Web 管理后台,Vue.js + Element UI SPA),非 C 端。 +- 测试环境:管理端 https://ybxcx.ynyun8.com:8000/admin;超级管理员账号 super_admin(项目画像 §1)。 +- 文件存储依赖华为云 OBS(项目画像 §6.1)——打包任务需从 OBS 拉取合同/回单/证件原件,OBS 不可用是打包失败的主要外部依赖风险。 +- 敏感个人信息(身份证号、证件照片)导出场景:权限隔离 + 审计日志为合规必测项;批次包命名含完整身份证号放大泄露面。 +- Excel 大文件处理:本项目既有 Excel 导出惯例默认 20000 条(项目画像 §8.3),本需求上传方向限 2000 行/10MB,测试需覆盖边界(2000/2001 行、10MB 临界)。 +- 异步任务与并发:项目画像必测异常场景含"重复提交(幂等)、并发提交、超时重试、依赖服务不可用"——对应本需求重复下载幂等、并发任务排队、OBS 依赖失败重试 3 次。 +- 与 requirements/安徽运八需求.md 为并行模块(相似度 0.105,见 decisions/运单资料文件包下载需求_确认结论.md),不共享数据口径,无冲突防御需求;历史缺陷防御重点关注文件打包下载类通用缺陷(见 knowledge_base/02_history/historical_defects.md)。 +- 风险矩阵基线(output/analysis/运单资料文件包下载需求_风险评估.md):P0=0,P1=1(RISK-AVAILABILITY:并发/重试/幂等),P2=4(资损/合规/数据/兼容性);P1 风险对应测试点不得静默省略。 diff --git a/output/analysis/运单资料文件包下载需求_测试数据.md b/output/analysis/运单资料文件包下载需求_测试数据.md new file mode 100644 index 0000000..efbbfae --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_测试数据.md @@ -0,0 +1,297 @@ +# 运单资料文件包下载需求 测试数据 + +> 本文件由 data-builder Agent 自动生成,为测试用例提供精确数据支持。 +> 生成时间:2026-09-08 +> 数据依据:requirements/运单资料文件包下载需求.md(v1.0 定稿)、output/analysis/运单资料文件包下载需求_分析.md(REQ-001~026)、knowledge_base/00_project/project_profile.md、knowledge_base/01_standards/terminology.md、resources/prototypes/anhuibaba_file_package.html +> 来源标注说明:**需求提取**=可直接追溯至需求原文;**原型提取**=来自 UI 原型演示数据;**构造**=按需求示例风格构造的结构化数据;**需补充**=必须从测试环境获取/创建的真实数据,不得编造。 +> 数据ID前缀:ACC-账号 / XLS-上传清单行 / BND-边界值 / STT-状态 / IDC-ID与命名 / ERR-异常 / CMB-组合 / CNC-并发。 + +--- + +## 自动提取数据 + +### 账号数据 + +| 数据ID | 角色 | 账号 | 权限 | 用途 | 来源 | +| :--- | :--- | :--- | :--- | :--- | :--- | +| ACC-001 | 超级管理员(代行运营人员) | super_admin / 951260684NiAn.. | 全部权限(含"运单文件包"菜单) | 主流程上传/下载/审计日志操作人 | 项目画像 §1(测试环境真实账号) | +| ACC-002 | 运营人员(受控权限) | 需补充 | 仅授权"运单文件包"菜单 | 权限正向验证(REQ-002:菜单仅授权运营人员) | 需求提取(4.1/七章);账号需在平台管理-角色管理创建 | +| ACC-003 | 非授权角色(对照) | 需补充 | 未授权"运单文件包"菜单 | 菜单不可见/接口越权验证(敏感证件照片隔离) | 构造(需求 4.1 权限控制要求的反向场景) | +| ACC-004 | 车队长 | 13113113113 / 88888888 | 车队长端权限 | 后台造数:接单并分派运单,形成"车队长运单" | 项目画像 §1 | +| ACC-005 | 司机 | 15188888888 / 88888888 | 司机端权限 | 后台造数:司机接单/上传装卸货资料,形成可打款运单 | 项目画像 §1 | +| ACC-006 | 第二运营账号 | 需补充 | 与 ACC-001 等同 | 多账号并发上传、下载审计日志"操作人"字段区分验证 | 构造(需求 4.5 审计日志:操作人/时间/任务编号) | + +### 上传清单数据(合法行) + +> 模板 3 列:序号(正整数、全文件唯一)/ 货源单号 / 运单号(需求 4.2.1)。下表"系统内三要素"指该运单在系统中挂载的司机档案,用于批次划分(需求 4.4.1)。单号为需求示例风格格式,落地时须映射为测试环境真实运单(见数据缺口 #1)。 + +| 数据ID | 序号 | 货源单号 | 运单号 | 系统内三要素(司机/身份证/车牌) | 用途 | 来源 | +| :--- | :---: | :--- | :--- | :--- | :--- | :--- | +| XLS-001 | 1 | HY202609001 | YD20260901001 | 张三 / 340102199001011234 / 皖A12345 | 基准合法行(批次①成员) | 需求提取(五章示例);真实单号需补充 | +| XLS-002 | 2 | HY202609002 | YD20260901002 | 李四 / 340102199001015678 / 皖B67890 | 单运单批次(批次②) | 需求提取(五章示例);真实单号需补充 | +| XLS-003 | 3 | HY202609001 | YD20260901003 | 张三 / 340102199001011234 / 皖A12345 | 与 XLS-001 同批成员 | 需求提取(五章示例);真实单号需补充 | +| XLS-004 | 5 / 10 | HY202609001 | YD20260901004 / YD20260901005 | 张三 / 340102199001011234 / 皖A12345 | 非连续、乱序序号合法(最小序号判定与行顺序无关) | 构造(依据 4.4.1"非按上传行顺序") | +| XLS-005 | 50000 | HY202609001 | YD20260901006 | 张三 / 340102199001011234 / 皖A12345 | 大数值序号合法(序号不要求连续、不与行数挂钩) | 构造 | +| XLS-006 | 1~2000 | 真实货源单号 | 2000 个真实运单号 | 混合(多批次) | 行数上限合法文件(2000 行全有效) | 构造;运单号需补充 | +| XLS-007 | 1 | 真实货源单号 | 真实运单号 | 任意有效运单 | 最小合法清单(1 行) | 构造;运单号需补充 | +| XLS-008 | — | 序号 | 货源单号 | 运单号 | 模板下载产物(仅表头),作为后续所有清单的格式基准 | 需求提取(REQ-003);原型提取(运单清单模板.xlsx) | + +### 上传清单数据(非法行——数据级校验,行级剔除) + +> 预期处理:该行计入失败清单(xlsx,含序号/货源单号/运单号/失败原因),剔除后有效行继续处理,任务记"已完成·部分失败"(需求 4.2.2、确认决议 #7)。 + +| 数据ID | 构造行(序号/货源单号/运单号) | 预期失败原因 | 关联需求 | 来源 | +| :--- | :--- | :--- | :---: | :--- | +| XLS-101 | 0 / HY202609001 / YD20260901001 | 序号非正整数 | 4.2.2 | 构造 | +| XLS-102 | -1 / HY202609001 / YD20260901001 | 序号非正整数 | 4.2.2 | 构造 | +| XLS-103 | 1.5 / HY202609001 / YD20260901001 | 序号非正整数(小数) | 4.2.2 | 构造 | +| XLS-104 | abc / HY202609001 / YD20260901001 | 序号非正整数(非数字文本) | 4.2.2 | 构造 | +| XLS-105 | (空)/ HY202609001 / YD20260901001 | 序号非正整数(为空) | 4.2.2 | 构造 | +| XLS-106 | 两行序号均为 1(运单号不同) | 序号重复(重复行计入失败,首行有效性需验证) | 4.2.2、决议#13 | 构造 | +| XLS-107 | 1 / (空) / YD20260901001 | 货源单号为空 | 4.2.2 | 构造 | +| XLS-108 | 1 / HY202609001 / (空) | 运单号为空 | 4.2.2 | 构造 | +| XLS-109 | 1 / (空) / (空) | 货源单号、运单号均为空(验证失败原因提示合并或并列) | 4.2.2 | 构造 | +| XLS-110 | 1 / HY202609001 / YD20991231001 | 运单号在系统中不存在 | 4.2.2 | 构造 | +| XLS-111 | 1 / HY202609009 / 真实运单号 | 文件中货源单号与该运单实际所属货源不一致 | 4.2.2、决议#6 | 构造;真实运单号需补充 | +| XLS-112 | 两行同一运单号(序号 1、2 不同) | 同一运单号在文件中重复(重复行失败,首行保留) | 4.2.2 | 构造 | +| XLS-113 | 1 / 真实货源单号 / 系统内缺司机信息的运单号 | 运单缺少司机信息,无法归批 | 4.2.2、六#5 | 需补充(依赖环境运单) | +| XLS-114 | 1 / 真实货源单号 / 系统内缺车辆信息的运单号 | 运单缺少车辆信息,无法归批 | 4.2.2、六#5 | 需补充(依赖环境运单) | +| XLS-115 | 序号 4 与前文重复、且运单号与序号 2 行相同 | 单行多重非法(验证失败原因取值与优先级) | 4.2.2 | 构造 | + +### 状态数据 + +#### 任务状态机(需求 4.3.1) + +| 数据ID | 对象 | 状态值 | 驱动数据 | 来源 | +| :--- | :--- | :--- | :--- | :--- | +| STT-001 | 任务 | 待处理 | 上传成功但并发占满排队中(配合 CNC-003) | 需求提取(4.3.1) | +| STT-002 | 任务 | 处理中 | 有效行打包进行中,列表可见进度条(成功/失败条数,如原型 186/200) | 需求提取(4.3.1/七章);原型提取 | +| STT-003 | 任务 | 已完成 | 全部有效行成功(如 XLS-001~003 三行清单) | 需求提取(4.3.1) | +| STT-004 | 任务 | 已完成·部分失败 | 部分行数据级失败(如 5 行 3 成 2 败,同原型 RW20260907002) | 需求提取(4.3.1/决议#7);原型提取 | +| STT-005 | 任务 | 失败 | 系统级错误整体未生成文件包(如 OBS 不可用,见项目画像 §6.1) | 需求提取(4.3.1/六#10) | +| STT-006 | 任务 | 已过期(原型展示标签) | 文件包超 7 天保留期。注意:需求 4.3.1 状态机不含该状态,原型任务列表却显示"已过期"tag——状态字段值 vs 文件包生命周期标记的实现口径需澄清 | 原型提取(与需求差异标注) | +| STT-007 | 任务 | 已删除 | 失败任务支持删除后重新上传(原型"删除"按钮) | 需求提取(六#10);原型提取 | + +#### 运单侧驱动状态(决定电子回单/合同数据的有无,术语以 terminology.md 为准) + +| 数据ID | 对象 | 状态值 | 对文件包的影响 | 来源 | +| :--- | :--- | :--- | :--- | :--- | +| STT-011 | 运单 | 已结算/已打款 | 有支付记录 → 有银行电子回单(术语表:电子回单=运单产生支付记录后银行推送的回单) | 需求提取(4.4.3)+术语表 | +| STT-012 | 运单 | 运单关闭(司机取消) | 无支付记录 → 无电子回单,不阻断,记失败清单 | 需求提取(六#4)+术语表 | +| STT-013 | 运单 | 运输中(未产生支付) | 无电子回单,处理同 STT-012 | 构造(依据 4.4.3 回单口径推断) | +| STT-014 | 运单 | 含承运合同附件 | 合同目录导出该附件(含承运合同) | 需求提取(决议#5) | +| STT-015 | 运单 | 仅含委托合同/框架合同 | 合同目录不导出(不含委托合同/框架合同),原因记失败清单 | 需求提取(决议#5) | + +#### 文件包生命周期 + +| 数据ID | 对象 | 状态值 | 说明 | 来源 | +| :--- | :--- | :--- | :--- | :--- | +| STT-021 | 文件包 | 已生成(≤7 天) | 可重复下载、幂等不重复生成;zip 不加密(决议#12),下载记审计日志 | 需求提取(4.5/七章/决议#12) | +| STT-022 | 文件包 | 过期已清理(>7 天) | 不可下载,提示重新上传(原型提示文案:"文件包已超过 7 天保留期,请重新上传清单生成") | 需求提取(七章);原型提取 | + +### ID/编码数据 + +| 数据ID | 对象 | ID值/命名规则 | 说明 | 来源 | +| :--- | :--- | :--- | :--- | :--- | +| IDC-001 | 任务编号 | RW20260908001(原型格式:RW+日期+3位流水) | 系统生成;实际编码规则以实现为准,用例断言不得写死格式 | 原型提取;实现口径需补充 | +| IDC-002 | 运单号 | YD20260901001 | 需求示例格式;环境中真实运单号需补充 | 需求提取(五章示例) | +| IDC-003 | 货源单号 | HY202609001 | 需求示例格式;环境中真实货源单号需补充 | 需求提取(五章示例) | +| IDC-004 | 司机身份证号 | 340102199001011234(张三)、340102199001015678(李四) | 需求示例值(非真实档案);批次包名含完整身份证号(决议#3) | 需求提取(五章示例) | +| IDC-005 | 车牌号 | 皖A12345 / 皖B67890 | 需求示例值 | 需求提取(五章示例) | +| IDC-006 | 任务总包名 | `运单资料_【任务编号】.zip` | 一层目录 | 需求提取(4.4.2) | +| IDC-007 | 批次包名 | `【司机姓名】-【身份证号】-【车牌号】` | 二层目录,含完整 18 位身份证号 | 需求提取(4.4.2/决议#3) | +| IDC-008 | 运单包名 | `【序号】-【运单号】-【货源单号】`;最小序号追加 `-含司机及车辆证件` | 三层目录 | 需求提取(4.4.2) | +| IDC-009 | 子目录名 | 合同 / 电子回单 / 司机证件 / 车辆证件 | 四个固定子目录 | 需求提取(4.4.2/决议#4) | +| IDC-010 | 失败清单文件 | `失败清单_【任务编号】.xlsx`(原型:失败清单_RW20260907002.xlsx) | 含序号/货源单号/运单号/失败原因 4 列 | 需求提取(4.3.2);文件名原型提取 | +| IDC-011 | 模板文件名 | 运单清单模板.xlsx | 模板下载按钮产物 | 原型提取 | +| IDC-012 | 源文件名示例 | 运单清单_合肥仓0908.xlsx | 任务列表"源文件名"字段展示值 | 原型提取 | + +### 边界值数据 + +#### 行数边界(数据行数,不含表头行;上限 2000 行,需求 4.2.1/决议#9) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-001 | 行数 | 最小值-1 | 0(仅表头) | 需求未明确:按文件级拒绝 or 0 行任务——见数据缺口 #15 | 构造(边界推导) | +| BND-002 | 行数 | 最小值 | 1 | 正常创建任务 | 需求提取(上限规则的合法侧) | +| BND-003 | 行数 | 最小值+1 | 2 | 正常创建任务 | 构造 | +| BND-004 | 行数 | 最大值-1 | 1999 | 正常创建任务 | 构造 | +| BND-005 | 行数 | 最大值 | 2000 | 正常创建任务(≤2000 合法) | 需求提取(4.2.1) | +| BND-006 | 行数 | 最大值+1 | 2001 | 文件级整体拒绝,提示行数超限,不创建任务 | 需求提取(4.2.2) | +| BND-007 | 行数 | 性能基准 | 1000 | 1000 单规模任务 30 分钟内完成(REQ-020) | 需求提取(七章) | + +#### 文件大小边界(上限 10MB,需求 4.2.1/决议#9) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-011 | 文件大小 | 最大值-1 | 10MB-1B | 合法 | 构造(按上限推导);10MB=10^6 还是 2^20 字节需确认(缺口 #16) | +| BND-012 | 文件大小 | 最大值 | 10MB 整 | 合法("不超过 10MB"含等于) | 需求提取(原型 hintbox:"大小不超过 10MB") | +| BND-013 | 文件大小 | 最大值+1 | 10MB+1B | 文件级整体拒绝 | 需求提取(4.2.2"大小超上限") | +| BND-014 | 文件大小 | 下限 | 0 字节(空文件) | 文件级拒绝(损坏/空文件) | 构造 | +| BND-015 | 文件大小 | 典型值 | 12KB(3 行清单) | 合法 | 原型提取 | + +#### 序号数值边界(正整数,需求 4.2.1) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-021 | 序号 | 最小值-1 | 0 | 行级失败(非正整数) | 需求提取(4.2.2) | +| BND-022 | 序号 | 最小值 | 1 | 合法,可被判定为批次最小序号 | 需求提取(4.2.1) | +| BND-023 | 序号 | 最小值+1 | 2 | 合法 | 构造 | +| BND-024 | 序号 | 无上限合法值 | 50000 | 合法(序号唯一即可,不要求连续) | 构造 | +| BND-025 | 序号 | int32 上限 | 2147483647 | 合法(若后端用 32 位整型存储则为存储上限) | 构造 | +| BND-026 | 序号 | int32 上限+1 | 2147483648 | 溢出风险验证:合法或明确报错,不得异常成功/静默截断 | 构造 | +| BND-027 | 序号 | 超 Excel 精度 | 12345678901234567890(20 位) | Excel 15 位精度截断风险:验证读取值与录入值一致性,溢出须失败 | 构造 | + +#### 文件包保留期边界(7 天,需求七章/决议#10) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-031 | 保留期 | 最大值-1 | 完成后第 6 天 23:59 | 可下载 | 构造(按 7 天推导) | +| BND-032 | 保留期 | 最大值 | 完成后满 7 天整 | 临界:可下载/进入清理(以"完成时间+7天"为界的实现口径需确认) | 需求提取(七章) | +| BND-033 | 保留期 | 最大值+1 | 第 7 天+1(第 8 天) | 过期清理,不可下载,提示重新上传 | 需求提取(六#9);原型提示文案 | + +#### 单文件下载重试边界(重试 3 次,需求 4.4.4) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-041 | 重试次数 | -/最小 | 第 1、2 次失败 | 自动重试,任务继续 | 需求提取(4.4.4) | +| BND-042 | 重试次数 | 最大值 | 第 3 次成功 | 不记失败清单,文件正常入包 | 需求提取(4.4.4) | +| BND-043 | 重试次数 | 最大值+1 | 3 次全失败后第 4 次 | 不再重试,记入失败清单,不阻断其余文件 | 需求提取(4.4.4) | + +#### 并发上限边界(1~2,需求六#8) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-051 | 并发任务数 | 最小值 | 1 | 单任务直接处理 | 需求提取(六#8) | +| BND-052 | 并发任务数 | 最大值 | 2 | 两任务同时处理 | 需求提取(六#8) | +| BND-053 | 并发任务数 | 最大值+1 | 3 | 第 3 个任务排队"待处理",前序完成后自动开始 | 需求提取(六#8"后台排队") | + +#### 电子回单数量边界(回单=全部支付记录对应回单,需求 4.4.3) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-061 | 支付记录数 | 最小值-1 | 0 笔(无支付/运单关闭) | 不阻断:无"电子回单"子目录,失败清单记原因(原型文案示例:"无电子回单:运单无支付记录") | 需求提取(4.4.4/六#4) | +| BND-062 | 支付记录数 | 最小值 | 1 笔 | 电子回单目录 1 份回单 | 术语表+需求 4.4.3 | +| BND-063 | 支付记录数 | 最大值+方向 | 2 笔及以上 | 多份回单;同名回单自动追加 (1)、(2) | 需求提取(4.4.3/4.4.2) | + +#### 子目录内文件重名边界(原文件名保留、重名追加 (1)(2),需求 4.4.2) + +| 数据ID | 字段 | 边界类型 | 边界值 | 预期行为 | 来源 | +| :--- | :--- | :--- | :---: | :--- | :--- | +| BND-071 | 证件文件重名 | 重名+1 | 同目录第 2 个同名文件(如 身份证.jpg ×2) | 第 2 个命名为 身份证(1).jpg | 需求提取(4.4.2) | +| BND-072 | 证件文件重名 | 重名+2 | 同目录第 3 个同名文件 | 命名为 身份证(2).jpg | 需求提取(4.4.2) | +| BND-073 | 证件文件重名 | 名字已含后缀 | 档案中同时存在 身份证.jpg 与 身份证(1).jpg,再导出一份 身份证.jpg | 追加规则不与既有文件冲突(去重基于实际文件集合) | 构造 | + +--- + +## 构造数据 + +### 异常数据 + +#### 文件级异常(整体拒绝,不创建任务,需求 4.2.2) + +| 数据ID | 字段/对象 | 测试值 | 预期行为 | 类型 | 来源 | +| :--- | :--- | :--- | :--- | :--- | :--- | +| ERR-001 | 文件格式 | .xls(97-2003 老格式) | 上传即拒绝,提示仅支持 .xlsx | 参数非法 | 构造 | +| ERR-002 | 文件格式 | .csv / .docx / .jpg | 上传即拒绝 | 参数非法 | 构造 | +| ERR-003 | 文件格式 | 伪造 xlsx:zip/docx 改后缀名为 .xlsx | 拒绝(需魔数校验,防仅校验后缀) | 伪造格式 | 构造 | +| ERR-004 | 列名 | 缺失一列(仅"序号/运单号"两列) | 整体拒绝,提示列名缺失或不符 | 列名校验 | 需求提取(4.2.2) | +| ERR-005 | 列名 | 列名不符:`序号 `(尾空格)、`单号`、`序号(必填)`、`No.` | 整体拒绝 | 列名校验 | 构造(需求"列名缺失或不符") | +| ERR-006 | 列名 | 全半角/大小写变体:`序 号`、`货源单号` 全角空格分隔 | 整体拒绝(是否 trim 后匹配以实现为准,需验证) | 列名校验 | 构造 | +| ERR-007 | 列顺序 | 运单号列在货源单号列之前(列名均正确) | 需求未明确:按列名匹配应通过——预期口径需澄清(缺口 #15) | 边界探讨 | 构造 | +| ERR-008 | 文件完整性 | 截断的 xlsx / 伪 xlsx(zip 包无 workbook.xml) | 整体拒绝,提示文件损坏 | 文件损坏 | 需求提取(4.2.2) | +| ERR-009 | 多 Sheet | Sheet1 合法 + Sheet2 含额外数据 | 需求未明确(仅读 Sheet1 or 拒绝)——见缺口 #15 | 边界探讨 | 构造 | +| ERR-010 | 表头结构 | 表头行后含说明行/合并单元格/空行间隔 | 需求未明确;合并单元格读取行为需验证 | 边界探讨 | 构造 | + +#### 数据级行异常(行级失败清单,需求 4.2.2——数据构造见 XLS-101~115,此处为校验维度汇总) + +| 数据ID | 字段 | 测试值 | 预期行为 | 类型 | 来源 | +| :--- | :--- | :--- | :--- | :--- | :--- | +| ERR-020 | 序号 | 0 / -1 / 1.5 / abc / 空(对应 XLS-101~105) | 行级失败:序号非正整数 | 参数非法 | 需求提取 | +| ERR-021 | 序号 | 全文件内重复(对应 XLS-106) | 重复行计入失败清单 | 重复 | 需求提取(决议#13:全文件唯一) | +| ERR-022 | 货源单号/运单号 | 空串、纯空格 ` `(对应 XLS-107~109) | 行级失败:单号为空;验证空格是否等同空值(trim 行为) | 参数非法 | 需求提取+构造 | +| ERR-023 | 运单号 | 系统中不存在的单号(对应 XLS-110) | 行级失败:运单号在系统中不存在 | 数据不存在 | 需求提取 | +| ERR-024 | 货源单号 | 与运单实际所属货源不一致(对应 XLS-111) | 行级失败:货源单号不一致 | 数据不一致 | 需求提取(决议#6) | +| ERR-025 | 运单号 | 文件内重复出现(对应 XLS-112) | 重复行计入失败清单 | 重复 | 需求提取 | +| ERR-026 | 归批条件 | 运单缺司机信息或车辆信息(对应 XLS-113/114) | 行级失败:无法归批 | 数据缺失 | 需求提取(六#5) | +| ERR-027 | 运单号 | 前后带空格 `YD20260901001 `(系统存在该运单) | 需求未明确:trim 后匹配 or 判不存在——预期需确认 | 边界探讨 | 构造 | + +#### 安全异常数据(注入/超长/穿越——文件名类数据 Windows 本地选择文件时受系统限制,需通过接口层直传构造) + +| 数据ID | 字段 | 测试值 | 预期行为 | 类型 | 来源 | +| :--- | :--- | :--- | :--- | :--- | :--- | +| ERR-030 | 货源单号(SQL 注入) | `HY202609001' OR '1'='1` | 行级失败(查无此单),不得注入生效、不得 500 | SQL注入 | 构造 | +| ERR-031 | 运单号(SQL 注入) | `YD20260901001'; DROP TABLE waybill;--` | 行级失败,数据库无异常 | SQL注入 | 构造 | +| ERR-032 | 序号(SQL 注入) | `1 OR 1=1` | 行级失败:序号非正整数 | SQL注入 | 构造 | +| ERR-033 | 运单号(XSS) | `` | 行级失败;失败清单 xlsx 与页面回显转义,不执行脚本 | XSS | 构造 | +| ERR-034 | 源文件名(XSS) | `.xlsx`(接口构造) | 任务列表"源文件名"展示转义,不触发弹窗 | XSS | 构造 | +| ERR-035 | 运单号(超长文本) | 256+ 字符连续字符串 | 行级失败,不崩溃、不截断误判为存在 | 超长文本 | 构造 | +| ERR-036 | 源文件名(超长) | 255 字节边界文件名 / 300 字符文件名 | 正常处理或明确拒绝;列表展示截断(原型 `.te` 省略样式),下载失败清单文件名不异常 | 超长文本 | 构造 | +| ERR-037 | 源文件名(路径穿越) | `..\..\etc\passwd.xlsx`、`../../webapps/evil.xlsx`(接口构造) | 不得逃逸上传/下载目录;总包/失败清单命名不受污染 | 路径穿越 | 构造 | +| ERR-038 | 源文件名(特殊字符) | 含 `# % & { } ~ $ ! ' " @ + = 空格 全角字符` 的合法 xlsx | 正常上传处理,任务列表/失败清单展示与下载不异常 | 特殊字符 | 构造 | +| ERR-039 | 源文件名(Unicode) | emoji 文件名(运单清单🚛.xlsx)、生僻字(𠮷)、繁体 | 编码/存储/展示正常(UTF-8 兼容) | 编码兼容 | 构造 | +| ERR-040 | 司机姓名(影响批次包目录名) | 系统档案司机姓名含 `.` `-` 空格 `·`(如 阿依古丽·买买提)、含 Windows 非法字符 `\/:*?"<>|` 的档案 | 批次包命名 `【司机姓名】-【身份证号】-【车牌号】` 在 Windows/zip 内合法可解压;非法字符需实现侧处理 | 命名兼容 | 构造;档案需补充 | +| ERR-041 | 身份证号(敏感数据合规) | 批次包名含完整 18 位身份证号(340102199001011234) | 按决议#3/#12:zip 不加密,依赖菜单权限+下载审计日志;验证越权不可达、日志完整 | 敏感合规 | 需求提取(决议#3、#12) | + +### 组合数据 + +> 批次划分核心规则:系统内司机姓名+身份证号+车牌号三要素完全一致归一批(需求 4.4.1)。 + +| 数据ID | 组合场景 | 数据构成 | 预期行为 | 来源 | +| :--- | :--- | :--- | :--- | :--- | +| CMB-001 | 同司机同车多运单(基准示例) | 序号 1、3 均为 张三/340102199001011234/皖A12345 | 归 1 批;运单包 `1-…-含司机及车辆证件`(合同+回单+双方证件)、`3-…`(仅合同+回单) | 需求提取(五章示例) | +| CMB-002 | 单运单批次 | 序号 2:李四/340102199001015678/皖B67890 | 独立 1 批;运单包仍含司机及车辆证件 | 需求提取(五章/4.4.3) | +| CMB-003 | 同司机换车 | 序号 1:张三+皖A12345;序号 2:张三+皖C88888(身份证相同) | 拆分为 2 批 | 需求提取(4.4.1) | +| CMB-004 | 同车换司机 | 序号 1:张三+皖A12345;序号 2:王五+皖A12345 | 拆分为 2 批 | 需求提取(4.4.1) | +| CMB-005 | 同名同车不同身份证 | 序号 1:张三/340102199001011234/皖A12345;序号 2:张三/330102199201012345/皖A12345 | 拆分为 2 批(身份证号不同即不同批,验证三要素缺一不可) | 构造 | +| CMB-006 | 最小序号运单被剔除(校验失败) | 同批序号 1、3、5;序号 1 行运单号不存在 | 序号 1 记失败清单;重新计算最小序号,证件改挂序号 3,包名 `3-…-含司机及车辆证件` | 需求提取(4.4.4/六#6、决议#8) | +| CMB-007 | 跨货源归批 | 张三+皖A12345 的运单分属 HY202609001、HY202609002 两个货源 | 仍归 1 批(归批不看货源单号),两个运单包分属不同货源目录名 | 构造(依据 4.4.1) | +| CMB-008 | 乱序/非连续序号 | 同批序号 10、2、5 | 最小序号=2;序号 2 运单包含证件,命名按各自序号 | 需求提取(二章"最小序号运单"定义) | +| CMB-009 | 批次内混合成功失败 | 同批 3 行(序号 1、2、3),序号 1 运单不存在 | 有效 2 行成批,任务"已完成·部分失败";证件挂有效行最小序号 2 | 构造(组合 4.2.2+4.4.1) | +| CMB-010 | 最小序号运单全部文件下载失败 | 批次内序号 1 运单的合同/回单/证件 OBS 拉取均 3 次重试失败 | 需求 4.4.4 条款二"因文件缺失剔除、重算改挂"是否适用需澄清(缺口 #17);验证不阻断其余运单 | 需求提取(4.4.4)+构造 | +| CMB-011 | 最小序号运单无电子回单 | 批次内序号 1 运单无支付记录,序号 2 正常 | 解读一(不剔除):1 号包仍为最小序号、缺"电子回单"子目录、含证件;解读二(剔除改挂):证件改挂 2 号——两种解读需澄清(缺口 #17) | 需求提取(4.4.4 两条款并存)+构造 | +| CMB-012 | 多批次混合清单 | 张三批(2 运单)+李四批(1 运单)+王五批(1 运单),共 4 行 | 总包含 3 个批次包;每批各自最小序号含证件 | 需求提取(五章示例扩展) | +| CMB-013 | 同文件重复上传 | 同一 xlsx 上传 2 次 | 生成 2 个独立任务,各自打包、互不合并去重(REQ-023) | 需求提取(六#7) | +| CMB-014 | 多支付记录运单 | 1 个运单含 2 笔支付记录,2 份银行电子回单同名 | 电子回单目录 2 份回单,第 2 份追加 (1)(结合 BND-063/071) | 构造(术语表回单定义+4.4.2) | +| CMB-015 | 合同口径组合 | 运单 A 含承运合同;运单 B 仅委托合同;运单 C 含承运+框架合同 | A 导出;B 不导出并记失败清单;C 仅导出承运合同 | 需求提取(决议#5/REQ-013) | +| CMB-016 | 无合同运单 | 运单详情-合同附件为空 | 合同子目录不生成,不阻断,记失败清单 | 需求提取(4.4.4) | +| CMB-017 | 2000 行同司机单批次 | 2000 行全部为 张三/340102199001011234/皖A12345 的运单 | 归 1 批、1 个运单包层级树含 2000 个运单包(仅序号 1 含证件);验证打包性能与目录深度 | 构造 | +| CMB-018 | 全部行失败(0 有效行) | 2000 行全部非法(或 3 行全非法) | 需求未明确 0 有效行时任务终态(已完成·部分失败 or 失败 or 其他)与是否生成空文件包——见缺口 #14 | 构造(边界推导) | + +### 并发数据 + +| 数据ID | 场景 | 账号数 | 并发量 | 数据构成与说明 | 来源 | +| :--- | :--- | :---: | :---: | :--- | :--- | +| CNC-001 | 单任务处理(并发下限) | 1 | 1 | 1 个 1000 行清单任务独占处理 | 需求提取(六#8) | +| CNC-002 | 双任务并发(并发上限) | 1~2 | 2 | 2 个合法清单(如 500 行+500 行)几乎同时上传,两任务同时"处理中" | 需求提取(六#8) | +| CNC-003 | 三任务排队(超上限) | 1 | 3 | 第 3 个任务保持"待处理",任一前序完成后自动开始(配合 STT-001/BND-053) | 需求提取(六#8) | +| CNC-004 | 大小任务混跑 | 1 | 2 | 2000 行任务(XLS-006)+3 行任务(XLS-001~003)并发,小任务不被大任务长时间阻塞 | 构造 | +| CNC-005 | 同一任务并发下载 | 1 | 2+ | 已完成任务并发双击/双会话同时点"下载文件包":幂等,不重复生成文件包,均返回合法 zip | 需求提取(4.5/七章幂等) | +| CNC-006 | 性能基准 | 1 | 1 | 1000 单规模清单(如 500 批×2 运单混合 CMB-001/002 结构)30 分钟内完成 | 需求提取(七章 REQ-020) | +| CNC-007 | 多账号并发上传 | 2 | 2 | ACC-001 与 ACC-006 同时上传不同清单,任务互不干扰,上传人字段各自正确 | 构造 | +| CNC-008 | 上传按钮防重复提交 | 1 | 2+ | 同一文件选中后快速重复点击"开始上传并创建任务":仅创建 1 个任务(项目画像 §8.2 必测幂等) | 项目画像提取+构造 | + +--- + +## 数据缺口 + +| 序号 | 缺失数据 | 用途(关联数据ID) | 建议来源 | +| :--- | :--- | :--- | :--- | +| 1 | 测试环境真实运单号+货源单号映射(≥20 单:已完成且已打款、含 ≥1 笔支付记录与银行电子回单、运单详情含承运合同附件) | XLS-001~003/006/007、CMB-001/002/012 等全部合法行落地 | 测试环境运单管理/承运结算-电子回单查询现有数据;不足时用 ACC-004/005 走"发货源→接单→卸货→打款"完整流程造数 | +| 2 | 仅含委托合同的运单 1 单(合同附件仅委托合同) | CMB-015(合同口径排除验证)、STT-015 | 测试环境查找或通过合同管理-委托书合同造数 | +| 3 | 含框架合同(或仅框架合同)的运单 1 单 | CMB-015("不含框架合同"口径验证) | 测试环境合同管理模块查找 | +| 4 | 无支付记录的已关闭运单 1 单(司机取消终止流转) | BND-061、STT-012(无回单不阻断记失败清单) | 司机端接单后取消,或测试环境查找已关闭运单 | +| 5 | 系统内缺司机信息的运单 1 单、缺车辆信息的运单 1 单 | XLS-113/114、ERR-026(无法归批) | 承运管理后台造数清空关联字段,或查找历史脏数据 | +| 6 | 含 ≥2 笔支付记录的运单 1 单(多笔货主支付/分笔打款) | BND-063、CMB-014(多回单+回单重名 (1) 追加) | 对同一运单执行 2 次货主打款+财务打款流程 | +| 7 | 同名同车不同身份证号的司机档案 1 组(两个司机档案:姓名相同、车牌相同、身份证不同) | CMB-005(三要素缺一不可验证) | 承运管理-司机管理创建两个档案,车辆绑定同一辆车 | +| 8 | 同司机换车历史运单组、同车换司机历史运单组各 1 组 | CMB-003/004(拆批验证) | 司机档案换绑车辆后各跑 1 单;或两司机先后接同一车辆货源 | +| 9 | 运营人员专用账号(角色仅授权"运单文件包"菜单)+ 无该菜单权限的对照账号 | ACC-002/003(REQ-002 权限正向/反向、越权) | 平台管理-角色管理新建角色并配置菜单权限 | +| 10 | 第二运营账号(可与 #9 复用) | ACC-006、CNC-007(多账号并发上传、审计日志操作人区分) | 同 #9 | +| 11 | OBS 文件失效/证件照片缺失的运单(合同或回单或证件对象被删除、URL 失效) | BND-041~043、CMB-010(单文件下载失败重试 3 次场景) | 后台直接删除 OBS 对象或篡改档案文件 URL(需开发/运维配合) | +| 12 | 大文件构造物:2001 行 xlsx、10MB±1B xlsx、截断损坏 xlsx、伪装后缀 xlsx | BND-006/011~013/014、ERR-001/003/008 | 本地 Python(openpyxl) 脚本生成后存入测试数据目录,纳入版本管理之外的 fixtures | +| 13 | 司机/车辆档案中同名字件照片(同一档案上传 2~3 个同名附件) | BND-071~073、CMB-014(重名 (1)(2) 追加) | 司机管理-证件照片处重复上传同名文件 | +| 14 | "0 有效行"任务的预期终态(全部行数据级失败时:已完成·部分失败 / 失败 / 是否生成空包) | CMB-018、STT-004/005 边界 | 需求方/开发确认(需求 4.2.2 未覆盖全失败场景) | +| 15 | 文件级边界处理预期:0 行文件(仅表头)、多 Sheet、表头后附加行、列顺序颠倒 | BND-001、ERR-007/009/010 | 需求方/开发确认读取与拒绝口径 | +| 16 | 上限口径确认:10MB=10^6 还是 2^20 字节;2000 行是否含表头行;序号与运单号单元格为数值型 vs 文本型时的读取规则 | BND-005/011、XLS-006 | 开发确认实现口径后回填边界值定义 | +| 17 | "最小序号运单因文件缺失剔除改挂"的触发口径:无合同/无回单(4.4.4 条款一:不阻断仅记清单)是否也触发条款二的剔除改挂 | CMB-010/011(证件挂载预期直接冲突,影响 P0 断言) | 需求方/开发澄清 4.4.4 两条款关系 | +| 18 | 多机构部署形态确认 + B 机构运营账号与 B 机构有效运单(含证件回单资料) | ACC-B01(B 机构运营账号,行内临时记号)、YDB-001(B 机构运单,007/008 机构隔离断言) | 开发/运维确认部署形态;多机构环境由平台管理-机构管理造数;若为单机构部署或 super_admin 按设计跨机构可见,007/008 改用绑定 A 机构的非超管账号(ACC-002 补机构绑定)执行 | diff --git a/output/analysis/运单资料文件包下载需求_测试策略.md b/output/analysis/运单资料文件包下载需求_测试策略.md new file mode 100644 index 0000000..6a994ae --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_测试策略.md @@ -0,0 +1,22 @@ +# 运单资料文件包下载需求 测试策略 + +## 1. 测试金字塔 + +| 层级 | 占比 | 覆盖重点 | 工具 | +| :--- | :---: | :--- | :--- | +| L1 单元测试 | 40% | 核心逻辑、计算、状态机 | 开发自测 | +| L2 API 测试 | 35% | 接口契约、参数校验、权限、幂等 | Postman/Pytest | +| L3 UI 测试 | 20% | 主流程、关键交互、端到端 | Playwright/Selenium | +| L4 手工探索 | 5% | 易用性、视觉、非确定性场景 | 人工 | + +## 2. P0 必测清单 + + +## 3. 优先级覆盖规则 + +| 优先级 | 覆盖要求 | 评审标准 | +| :--- | :--- | :--- | +| P0 | 100% 覆盖,不可遗漏 | 必须包含正向+异常+边界+幂等 | +| P1 | ≥ 90% 覆盖 | 必须包含正向+异常 | +| P2 | ≥ 80% 覆盖 | 至少覆盖主流程+关键异常 | +| P3 | ≥ 60% 覆盖 | 覆盖典型场景 | diff --git a/output/analysis/运单资料文件包下载需求_覆盖率审计.md b/output/analysis/运单资料文件包下载需求_覆盖率审计.md new file mode 100644 index 0000000..a3ccbd9 --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_覆盖率审计.md @@ -0,0 +1,254 @@ +# 运单资料文件包下载需求 覆盖率审计 + +> 生成时间: 2026-09-08 +> 审计对象: output/test_points/运单资料文件包下载需求_测试点.md(59 个 TP)→ output/test_cases/运单资料文件包下载需求_测试用例.md(82 条 TC) +> 追溯骨干: output/analysis/运单资料文件包下载需求_分析.md 第 9 章(26 条 REQ) +> 风险基线: output/analysis/运单资料文件包下载需求_风险评估.md(P0=0,P1=1 RISK-AVAILABILITY,P2=4) +> 质量门限: fleet_config quality_gate.min_coverage = 0.95;P0 测试点→用例 100%;P1 测试点→用例 ≥90%;P0 风险 100% +> 审计方法: 以用例"备注列"与测试点"对应 REQ 标注"建立三级追溯;对全部 59 个 TP→TC 映射逐条核对关键验证点承接情况(非仅核对编号),并对 REQ→TP 表与 TP 描述的标注一致性做了交叉验证 + +## 覆盖概览 + +| 指标 | 值 | 目标 | 状态 | +| :--- | :---: | :---: | :---: | +| 需求→测试点覆盖率 | 100%(26/26) | ≥ 95% | ✅ | +| 测试点→用例覆盖率(全量) | 100%(59/59) | - | ✅ | +| P0 测试点→用例覆盖率 | 100%(25/25,且均有 P0 级用例承接) | 100% | ✅ | +| P1 测试点→用例覆盖率 | 100%(26/26) | ≥ 90% | ✅ | +| P2/P3 测试点→用例覆盖率 | 100%(8/8) | - | ✅ | +| P0 风险覆盖率 | 100%(P0 风险项=0,空集成立) | 100% | ✅ | +| P1 风险(RISK-AVAILABILITY)覆盖率 | 100%(关联缓解测试点全部有用例) | ≥ 90% | ✅ | +| 用例逆向追溯率 | 100%(82/82 条用例均可追溯到 REQ/TP) | - | ✅ | +| 过度覆盖率 | 0%(0/82 硬性冗余;另 1 条条件性冗余待 Q1 确认) | ≤ 5% | ✅ | + +**总体结论**: 三级追溯链完整,全部量化指标达标,无"无测试点的需求"、无"无用例的测试点"、无"无需求依据的用例"。但存在 7 项覆盖缺口,其中 **GAP-001 为 BLOCKED 级**(P0 需求 REQ-015 的关键验证点未固化为用例断言,源于需求 4.4.4 条款边界未确认),其余 6 项为待确认口径传导的断言未固化或边角场景未覆盖。详见"覆盖缺口"。 + +**抽查验证说明**(对可疑标注的实测核对,非仅采信编号): + +1. TC-001(冒烟)同时承接 TP-U-002/TP-T-001/TP-D-001 —— 核实其步骤覆盖模板下载→上传建任务→状态流转→下载解压全链路,与三个 TP 的主验证点相符;TP 的细粒度验证点(如统计卡片 +1、标签颜色)由 TC-010/032/033 完整承接,冒烟仅为主链路补充,判定合理。 +2. TC-030(TP-U-017)备注"防重复点击归 PLT_TMS_FPKG_074 验证" —— 核实 TC-074 确以"1 秒内连点 5 次 + 接口并发重放"验证防抖与幂等,交叉引用成立,非断言遗漏。 +3. TC-053/054(TP-P-007,全需求最易错点)—— 核实覆盖"校验失败剔除→证件改挂重算"与"单运单批次整批不生成"两条路径,但 TP-P-007 关键验证点 2"最小序号运单仅缺电子回单(文件缺失剔除)时同样重算挂载"无用例固化(用例文件自认数据缺口 #17 未收敛),登记为 GAP-001(BLOCKED)。 +4. TC-047(TP-P-002)为"同名同车牌不同身份证"变体 —— 核实在 TP-P-002 关键验证点范围内(同车牌+不同司机/身份证拆批),非冗余拆分。 +5. REQ-017 追溯表列有 TP-N-005,而 TP-N-005 描述写"对应 REQ-002/REQ-026" —— 核实其关键验证点含"审计日志可反查谁在何时下载了哪个任务(联动 TP-D-003)",实质支撑 REQ-017,判定为标注不一致而非覆盖缺口(建议下版统一 TP 描述)。 +6. TC-009(TP-U-001)"模板内填写说明不参与数据解析"与 TP-U-001 关键验证点逐字对应;TC-013(TP-U-004)"列顺序打乱允许"与 TP-U-004 关键验证点逐字对应 —— 标注可信。 + +## 需求→测试点 追溯矩阵 + +> 26/26 全覆盖。测试点列表以测试点文档文末"REQ 追溯对照表"为准,并已与各 TP 描述中的"对应 REQ-X"标注逐条交叉验证一致(除上述 TP-N-005 描述标注差异)。 + +| 需求条目 | 测试点 | 用例数 | 覆盖状态 | +| :--- | :--- | :---: | :---: | +| REQ-001: 新增"运单文件包"菜单挂运单管理下,上传入口+任务列表结构(P0) | TP-M-001、TP-U-002、TP-N-008 | 4(001/002/010/082) | ✅ | +| REQ-002: 菜单权限控制,仅运营人员可见可操作(P0) | TP-M-002、TP-M-003、TP-M-004、TP-M-005、TP-N-005 | 7(003~008/078) | ✅ | +| REQ-003: 模板下载 xlsx 三列(P1) | TP-U-001 | 1(009) | ✅ | +| REQ-004: 上传限制 xlsx、≤2000 行、≤10MB(P1) | TP-U-002、TP-U-006、TP-U-007、TP-U-017、TP-N-007 | 8(001/010/015~018/030/081) | ✅ | +| REQ-005: 文件级校验整体拒绝并提示具体原因(P0) | TP-U-002、TP-U-003、TP-U-004、TP-U-005 | 6(001/010~014) | ✅ | +| REQ-006: 数据级校验六类行级失败(P0) | TP-U-008~TP-U-016(9 个) | 11(019~029) | ✅ | +| REQ-007: 剔除失败行继续有效行,记"已完成·部分失败"(P0) | TP-U-015、TP-T-002 | 3(026/027/034) | ✅ | +| REQ-008: 任务状态机五态(P0) | TP-T-001、TP-T-002、TP-T-003、TP-D-004 | 7(001/032~036/068) | ✅ | +| REQ-009: 任务列表十字段完整(P1) | TP-T-004 | 2(037/038) | ✅ | +| REQ-010: 三要素归批,换车/换司机拆批(P0) | TP-P-001、TP-P-002 | 3(045~047) | ✅ | +| REQ-011: 三层目录结构与命名,最小序号带证件后缀(P0) | TP-P-003、TP-P-011、TP-T-008 | 3(044/048/060) | ✅ | +| REQ-012: 运单包内容矩阵,单运单批次仍含证件(P0) | TP-P-004、TP-P-012 | 2(049/061) | ✅ | +| REQ-013: 合同/回单/证件数据来源口径(P1) | TP-P-005、TP-P-006、TP-P-013 | 5(050~052/062/063) | ✅ | +| REQ-014: 子目录组织与重名追加 (1)(2)(P1) | TP-P-010 | 1(059) | ✅ | +| REQ-015: 文件缺失不阻断记清单;最小序号剔除重算改挂;单文件重试 3 次(P0) | TP-P-007、TP-P-008、TP-P-009、TP-P-013、TP-N-006 | 10(053~058/062/063/079/080) | ✅(⚠️ GAP-001 子验证点未固化) | +| REQ-016: 任务完成后下载总包 zip,重复下载幂等(P0) | TP-D-001、TP-D-002、TP-D-004、TP-D-005、TP-D-006、TP-N-007 | 8(001/065~071/081) | ✅ | +| REQ-017: 下载审计日志:操作人/时间/任务编号(P0) | TP-D-003、TP-N-005 | 2(067/078) | ✅(⚠️ GAP-004 失败清单留痕待确认) | +| REQ-018: 失败清单下载 xlsx 四列(P1) | TP-T-006 | 2(041/042) | ✅ | +| REQ-019: 异步处理,列表可见进度(P1) | TP-T-005 | 2(039/040) | ✅ | +| REQ-020: 1000 单规模 30 分钟内完成(P1) | TP-N-001 | 1(072) | ✅ | +| REQ-021: 保留 7 天过期清理不可下载(P1) | TP-N-004 | 2(076/077) | ✅(⚠️ GAP-003 展示/临界口径待确认) | +| REQ-022: 多任务排队,并发上限 1~2(P1) | TP-N-002、TP-N-003 | 3(073~075) | ✅ | +| REQ-023: 同一文件重复上传允许,独立任务(P2) | TP-U-018、TP-N-003 | 3(031/074/075) | ✅ | +| REQ-024: 系统异常置"失败",删除后重传(P1) | TP-T-003、TP-T-007、TP-N-006 | 5(035/036/043/079/080) | ✅ | +| REQ-025: 按批次包单独下载本期不做(P3,负向范围) | TP-D-005 | 1(069) | ✅ | +| REQ-026: zip 不加密,依赖权限+审计补偿(P2) | TP-P-014、TP-N-005(追溯表口径;TP-M-005 描述亦标注 REQ-026) | 4(007/008/064/078) | ✅ | + +## 测试点→用例 追溯矩阵 + +> 59/59 全覆盖,按模块归组呈现。用例编号省略前缀 PLT_TMS_FPKG_。"优先级"列为测试点优先级;已核实全部 P0 测试点均有 P0 级用例承接,无高风险场景下沉。 + +### 模块 TP-M 菜单与权限(5 个测试点) + +| 测试点 | 优先级 | 用例 | 覆盖状态 | +| :--- | :---: | :--- | :---: | +| TP-M-001 菜单入口与页面骨架 | P0 | 002 | ✅ | +| TP-M-002 运营人员可见可操作 | P0 | 003 | ✅ | +| TP-M-003 非授权角色不可见且 URL 直达被拦截 | P0 | 004、005 | ✅ | +| TP-M-004 接口层越权防御 | P1 | 006 | ✅ | +| TP-M-005 机构数据隔离 | P2 | 007、008 | ✅ | + +### 模块 TP-U 上传与校验(18 个测试点) + +| 测试点 | 优先级 | 用例 | 覆盖状态 | +| :--- | :---: | :--- | :---: | +| TP-U-001 模板下载 | P0 | 009 | ✅(⚠️ GAP-006 多 Sheet/合并单元格口径未覆盖) | +| TP-U-002 正常上传创建任务正向链路 | P0 | 001、010 | ✅ | +| TP-U-003 非 xlsx 格式整体拒绝 | P0 | 011 | ✅ | +| TP-U-004 列名缺失或不符整体拒绝 | P0 | 012、013 | ✅(⚠️ GAP-006 同上关联) | +| TP-U-005 文件损坏整体拒绝 | P1 | 014 | ✅ | +| TP-U-006 行数边界 2000/2001/空清单 | P1 | 015、016 | ✅(Q2/Q3 已收敛) | +| TP-U-007 文件大小边界 10MB 临界 | P1 | 017、018 | ✅ | +| TP-U-008 序号非正整数行级失败 | P0 | 019 | ✅(⚠️ GAP-005 序号极值边界未单列) | +| TP-U-009 序号重复行级失败(全文件唯一) | P0 | 020 | ✅ | +| TP-U-010 货源单号/运单号为空行级失败 | P0 | 021 | ✅ | +| TP-U-011 运单号不存在行级失败 | P0 | 022 | ✅(⚠️ GAP-007 大小写口径未显式覆盖) | +| TP-U-012 货源单号不一致行级失败 | P0 | 023 | ✅ | +| TP-U-013 运单号文件内重复行级失败 | P0 | 024 | ✅ | +| TP-U-014 缺司机/车辆信息无法归批 | P0 | 025 | ✅ | +| TP-U-015 单文件混合多类错误(规则组合) | P1 | 026、027 | ✅ | +| TP-U-016 单元格特殊字符与超长内容防御 | P1 | 028、029 | ✅ | +| TP-U-017 上传弹窗交互细项 | P1 | 030(防重复点击交叉引用 074) | ✅ | +| TP-U-018 同一文件重复上传独立任务 | P2 | 031 | ✅ | + +### 模块 TP-T 任务与列表(8 个测试点) + +| 测试点 | 优先级 | 用例 | 覆盖状态 | +| :--- | :---: | :--- | :---: | +| TP-T-001 状态机正向流转与状态标签 | P0 | 001、032、033 | ✅ | +| TP-T-002 已完成·部分失败状态 | P0 | 034 | ✅ | +| TP-T-003 失败状态与删除重传 | P1 | 035、036 | ✅ | +| TP-T-004 列表字段、排序与分页 | P1 | 037、038 | ✅ | +| TP-T-005 异步处理与进度可见 | P1 | 039、040 | ✅ | +| TP-T-006 失败清单下载内容 | P1 | 041、042 | ✅ | +| TP-T-007 处理中系统异常一致性 | P1 | 043 | ✅ | +| TP-T-008 任务详情与结构预览弹窗(原型功能) | P3 | 044 | ✅(⚠️ Q1 待确认,条件性 RED-001) | + +### 模块 TP-P 打包归批与文件包结构(14 个测试点) + +| 测试点 | 优先级 | 用例 | 覆盖状态 | +| :--- | :---: | :--- | :---: | +| TP-P-001 三要素归批正向 | P0 | 045 | ✅ | +| TP-P-002 换车/换司机拆批(规则组合) | P0 | 046、047 | ✅ | +| TP-P-003 三层目录结构与命名规则 | P0 | 048 | ✅ | +| TP-P-004 内容矩阵与单运单批次 | P0 | 049 | ✅ | +| TP-P-005 合同口径(含承运不含委托/框架) | P1 | 050 | ✅ | +| TP-P-006 电子回单与证件档案口径 | P1 | 051、052 | ✅ | +| TP-P-007 最小序号剔除后证件挂载重算 | P0 | 053、054 | ✅(⚠️ GAP-001 BLOCKED:文件缺失剔除路径断言未固化) | +| TP-P-008 文件缺失不阻断任务 | P0 | 055、056 | ✅ | +| TP-P-009 单文件下载失败自动重试 3 次 | P1 | 057、058 | ✅ | +| TP-P-010 子目录组织与重名文件处理 | P1 | 059 | ✅ | +| TP-P-011 批次包命名特殊字符与超长防御 | P1 | 060 | ✅ | +| TP-P-012 大批量打包完整性与统计一致性 | P1 | 061 | ✅ | +| TP-P-013 打包数据来源溯源与实时性 | P1 | 062、063 | ✅(⚠️ GAP-002 Q4 口径未确认) | +| TP-P-014 zip 不加密暴露面确认 | P2 | 064 | ✅ | + +### 模块 TP-D 下载与幂等审计(6 个测试点) + +| 测试点 | 优先级 | 用例 | 覆盖状态 | +| :--- | :---: | :--- | :---: | +| TP-D-001 任务完成后下载总包 | P0 | 001、065 | ✅ | +| TP-D-002 重复下载幂等 | P0 | 066 | ✅ | +| TP-D-003 下载审计日志 | P0 | 067 | ✅(⚠️ GAP-004 Q6 失败清单留痕待确认) | +| TP-D-004 处理中/未完成任务不可下载(双重校验) | P1 | 068 | ✅ | +| TP-D-005 按批次包单独下载不做(负向确认) | P3 | 069 | ✅ | +| TP-D-006 下载中断与大文件弱网 | P1 | 070、071 | ✅ | + +### 模块 TP-N 非功能:性能/并发/保留期/异常恢复(8 个测试点) + +| 测试点 | 优先级 | 用例 | 覆盖状态 | +| :--- | :---: | :--- | :---: | +| TP-N-001 性能基线 1000 单 30 分钟 | P1 | 072 | ✅ | +| TP-N-002 多任务并发排队上限 1~2 | P1 | 073 | ✅ | +| TP-N-003 并发提交与重复提交幂等 | P1 | 074、075 | ✅ | +| TP-N-004 保留期 7 天过期边界 | P1 | 076、077 | ✅(⚠️ GAP-003 Q5/临界口径待确认) | +| TP-N-005 敏感数据合规补偿控制 | P2 | 078 | ✅ | +| TP-N-006 OBS 依赖不可用降级与恢复 | P1 | 079、080 | ✅ | +| TP-N-007 zip 中文目录与多来源 xlsx 兼容性 | P2 | 081 | ✅ | +| TP-N-008 新增菜单对既有功能回归隔离 | P2 | 082 | ✅ | + +## 风险覆盖审计 + +| 风险项 | 等级 | 关联缓解测试点 | 用例承接 | 覆盖判定 | +| :--- | :---: | :--- | :--- | :---: | +| (无 P0 风险项) | P0 | - | - | ✅ 100%(空集成立,无阻断项) | +| RISK-AVAILABILITY 可用性(并发/重试/幂等/容量,评分 12) | P1 | TP-N-002(并发排队主场景)、TP-N-003(重复/并发提交幂等)、TP-D-002(下载幂等)、TP-P-009(OBS 重试 3 次)、TP-N-001(容量基线)、TP-T-007/TP-N-006(异常恢复) | 073、074/075、066、057/058、072、043、079/080 | ✅ 100% ≥ 90%(测试点文档明确"不得静默省略"的主场景 TP-N-002 已有专项用例 073) | +| RISK-FINANCIAL 资损(评分 5) | P2 | 无专属 TP(本需求为只读导出,无直接资损动作);缓解依赖幂等/并发类 TP | 同上幂等/并发用例 | ✅ 缓解面已覆盖 | +| RISK-COMPLIANCE 合规(评分 5) | P2 | TP-M-004、TP-M-005、TP-P-014、TP-N-005、TP-D-003 | 006、007/008、064、078、067 | ✅ 100%(权限+审计补偿链均有用例) | +| RISK-DATA 数据(评分 4) | P2 | TP-P-012、TP-P-013、TP-U-016 | 061、062/063、028/029 | ✅ 100% | +| RISK-COMPATIBILITY 兼容性(评分 3) | P2 | TP-N-007 | 081 | ✅ 100% | + +**说明**: 本项目 P0 风险 = 0,无 P0 风险阻断项。P1 风险 RISK-AVAILABILITY 的缓解面(并发排队、重复提交幂等、下载幂等、OBS 重试、容量基线、异常恢复共 7 个测试点)全部有用例承接且无断言缺失,覆盖率 100%,满足 ≥90% 目标。 + +## 覆盖缺口 + +### 缺口 GAP-001: 最小序号运单因文件缺失被剔除后证件改挂重算——关键验证点未固化为用例断言 【BLOCKED】 +- 需求条目: REQ-015(P0)/ 测试点 TP-P-007(P0,测试点文档自评"全需求最易错点") +- 缺口类型: 关键验证点未固化为用例(部分覆盖——TC-053/054 已覆盖"校验失败剔除"与"单运单批次整批剔除"两条路径,缺"文件缺失剔除"路径) +- 风险等级: P0 +- 现状: TP-P-007 关键验证点 2"最小序号运单仅缺电子回单(文件缺失剔除)时同样重算挂载"无用例承接;用例文件已自认该场景依赖需求 4.4.4 条款一(缺失不剔除仅记清单)与条款二(剔除改挂)的适用边界未确认(实现口径确认项 3,数据缺口 #17,CMB-010/011 未固化) +- 建议: 【阻断验收签发,不阻断用例执行】需求方确认 4.4.4 条款一/二在"最小序号运单仅缺回单/合同"场景的边界后,基于 TC-053 补充变体用例(批次最小序号运单仅缺回单)并固化证件改挂断言;确认前该子项按 BLOCKED 跟踪 + +### 缺口 GAP-002: 打包期间源数据变更口径(快照 vs 实时)未确认,断言无法取值 +- 需求条目: REQ-013/REQ-015(P1/P0)/ 测试点 TP-P-013 / 用例 063 +- 缺口类型: 断言未固化(用例已建,核心断言 1 依赖 Q4 二选一) +- 风险等级: P1 +- 现状: TC-063 仅能验证"全任务一致"(不混杂),无法验证口径正确性;新回单是否入包无判定基准 +- 建议: 需求方在快照/实时中二选一后回填 TC-063 断言 1,并同步 TP-P-013 回归口径 + +### 缺口 GAP-003: 过期任务展示形态与 7 天临界口径未确认,两条用例断言双口径悬置 +- 需求条目: REQ-021(P1)/ 测试点 TP-N-004 / 用例 076、077 +- 缺口类型: 断言未固化(TC-077 断言 1 依赖 Q5:新增"已过期"展示态 or 原状态+按钮置灰;TC-076 断言 2 依赖 BND-032"完成时间+7 天整"实现口径) +- 风险等级: P1 +- 建议: 确认 Q5 展示形态与保留期临界算法后回填断言;临界口径建议直接写死为"完成时间 +7×24h"或明确实现值 + +### 缺口 GAP-004: 失败清单下载是否记审计日志未确认,审计留痕范围存在豁口 +- 需求条目: REQ-017(P0)/ 测试点 TP-D-003 / 用例 067 +- 缺口类型: 断言未覆盖(失败清单含货源单号/运单号,属敏感业务数据,其下载留痕当前无用例断言,依赖 Q6) +- 风险等级: P1(REQ-017 主体"文件包下载审计"已由 TC-067 完整覆盖,本缺口为其延伸留痕项) +- 建议: 采纳用例文件建议"一并留痕"(与文件包下载同表或同流水),确认后在 TC-067 补充失败清单下载审计断言 + +### 缺口 GAP-005: 序号 int32 上限与 Excel 15 位精度截断边界无用例固化 +- 需求条目: REQ-006(P0)/ 测试点 TP-U-008 / 用例 019 +- 缺口类型: 边界场景无用例(用例文件实现口径确认项 9 自认"TP-U-008 未单列用例,建议执行 019 时顺带探测") +- 风险等级: P2(序号业务上通常 ≤2000,极值输入概率低,但一旦静默截断将破坏"最小序号"判定链) +- 建议: 在 TC-019 清单中显式追加 2 行极值序号数据(int32 上限、15 位以上数字),固化断言"合法或明确报错,不得静默截断" + +### 缺口 GAP-006: 多 Sheet 工作簿、表头后附加说明行、合并单元格清单的解析口径无用例 +- 需求条目: REQ-004/REQ-005(P1/P0)/ 测试点 TP-U-001、TP-U-004 +- 缺口类型: 边界场景无用例(数据缺口 #15 自认"本文件未固化断言") +- 风险等级: P2 +- 现状: TC-009 仅覆盖"模板自带说明行不参与解析"这一特例;用户自造多 Sheet/说明行/合并单元格文件的读取行为(读取首 Sheet?整体拒绝?)无任何用例约束 +- 建议: 补充 1 条解析口径用例,或经需求/开发确认后显式声明"仅读首 Sheet、其余忽略"并写入用例前置说明 + +### 缺口 GAP-007: 运单号大小写匹配口径未显式覆盖 +- 需求条目: REQ-006(P0)/ 测试点 TP-U-011 / 用例 022 +- 缺口类型: 边界场景无用例(TP-U-011 关键验证点含"大小写/前后空格匹配口径一致",TC-022 仅覆盖前后空格变体,无大小写变体行) +- 风险等级: P3 +- 建议: 在 TC-022 清单追加 1 行大小写变体运单号,验证存在性校验与实际导出同口径 + +## 过度覆盖 + +### 冗余 RED-001(条件性): TC-044 结构预览弹窗用例悬于未确认功能之上 +- 用例: PLT_TMS_FPKG_044(承接 TP-T-008,标注 REQ-011) +- 问题: "查看结构/文件包结构预览"仅见于原型、需求正文未定义(待确认 Q1)。当前状态下可追溯到 TP-T-008→REQ-011,不计为硬性冗余;但若需求方确认本期裁剪该功能,TC-044 即成为无需求依据的过度覆盖 +- 建议: Q1 确认裁剪则删除 TC-044 并同步移除 TP-T-008;确认实现则按弹窗实际字段回填断言后保留。冗余率影响: 裁剪情形下 1/82 ≈ 1.2%,仍 ≤ 5% 门限 + +**硬性冗余统计**: 0/82 = 0%(全部 82 条用例均可逆向追溯到 REQ/TP),≤ 5% 门限 ✅ + +**冗余倾向观察(不判为 RED,保留合理)**: TC-081 断言 3(.xls 改后缀 .xlsx 被拒)与 TC-011 部分重叠——属兼容性维度的跨模块交叉验证(RISK-COMPATIBILITY),且两用例执行环境不同(解压工具/浏览器 vs 接口直传),保留合理;TC-001 冒烟与明细用例存在主链路重叠,属用例文件声明的"端到端冒烟单独成条"设计原则,保留合理。 + +## 覆盖热力图 + +> 按 TP 文档六大模块统计。关联需求条目数为该模块 TP 触及的去重 REQ 数(一条 REQ 可跨多模块被计数,合计 40 条次 > 26 条);用例数含跨模块共用的 TC-001(冒烟,在三个模块各计 1 次,合计 84 计次 - 2 重复 = 82 条唯一)。 + +| 模块 | 关联需求条目 | 测试点(P0/P1/P2/P3) | 用例 | 覆盖密度 | +| :--- | :---: | :---: | :---: | :--- | +| 菜单与权限 | 3(REQ-001/002/026) | 5(3/1/1/0) | 7 | ███ 适中 | +| 上传与校验 | 7(REQ-001/003/004/005/006/007/023) | 18(11/6/1/0) | 24 | ██████████ 密集 | +| 任务与列表 | 7(REQ-007/008/009/011/018/019/024) | 8(2/5/0/1) | 14 | ██████ 较密 | +| 打包归批与文件包结构 | 7(REQ-010/011/012/013/014/015/026) | 14(6/7/1/0) | 20 | ████████ 密集 ⚠️ GAP-001 | +| 下载与幂等审计 | 4(REQ-008/016/017/025) | 6(3/2/0/1) | 8 | ███ 适中 ⚠️ GAP-004 | +| 非功能 | 12(REQ-001/002/004/015/016/017/020/021/022/023/024/026) | 8(0/5/3/0) | 11 | █████ 较密 ⚠️ GAP-003 | + +**盲区高亮**: + +- 无硬盲区: 不存在"无测试点的需求"(26/26)、"无用例的测试点"(59/59)、"无需求依据的用例"(82/82)。 +- 待确认型盲区(需求侧未决传导,非用例缺失): 集中在 **打包归批**(GAP-001,文件缺失剔除触发证件改挂的口径,BLOCKED)与 **非功能**(GAP-003,过期展示/临界口径);**下载与幂等审计** 的盲区为审计留痕范围延伸(GAP-004)。 +- 密度观察: 上传与校验(24 用例/18 TP,均值 1.33)与打包归批(20/14,均值 1.43)覆盖最厚,与"校验规则 + 归批规则是本需求复杂度核心"的判断一致;下载与幂等审计均值 1.33 但绝对量最少(8 条),其中 3 个 P0(下载/幂等/审计)均有专项 P0 用例,密度虽低但关键面无缺口。 +- 模块口径说明: 用例文件的模块分布(菜单权限 7/上传校验 13/数据校验 10/任务列表 13/打包归批 20/下载审计 7/非功能 11/跨模块冒烟 1)中,"数据校验"10 条在本热力图中并入"上传与校验"(对应 TP-U-008~016 的承接用例),"跨模块冒烟"001 按其实际承接的 TP 归入三个模块重复计数。 + +## 审计结论 + +量化指标全部达标(需求覆盖 100%、P0/P1 测试点覆盖 100%、过度覆盖 0%),追溯标注质量高(抽查 6 处可疑标注,5 处成立、1 处为无害的描述不一致)。**签发建议: 有条件通过** —— 以 GAP-001(BLOCKED,REQ-015 关键验证点"文件缺失剔除→证件改挂"断言未固化)的需求侧确认为签发前置条件;GAP-002~004 随 Q4/Q5/Q6 确认回填断言;GAP-005~007 为低成本补强项,建议随执行批次吸收。 diff --git a/output/analysis/运单资料文件包下载需求_评审报告.md b/output/analysis/运单资料文件包下载需求_评审报告.md new file mode 100644 index 0000000..9b7e83d --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_评审报告.md @@ -0,0 +1,138 @@ +# 运单资料文件包下载需求 评审报告 + +> 评审人: case-reviewer(Agentic QE Fleet · review 战区) +> 评审时间: 2026-09-08 +> 被评审对象: output/test_cases/运单资料文件包下载需求_测试用例.md(82 条,PLT_TMS_FPKG_001~082) +> 评审依据: agents/review/case_reviewer.md(7 维度)、knowledge_base/01_standards/review_checklist.md、test_case_template.md、definition_of_done.md +> 校准输入: requirements/运单资料文件包下载需求.md(v1.0 定稿,13 项确认决议)、output/test_points/运单资料文件包下载需求_测试点.md(59 测试点)、output/analysis/运单资料文件包下载需求_风险评估.md(P1=RISK-AVAILABILITY)、output/analysis/运单资料文件包下载需求_测试数据.md(145 组数据)、knowledge_base/01_standards/terminology.md +> 核验手段: 逐条人工评审 + 脚本核验(表格列数、编号连续性、优先级/类型/模块分布、必填列空值、数据 ID 与数据文件交叉比对) + +## 评审概览 + +| 指标 | 值 | +| :--- | :--- | +| 用例总数 | 82 | +| 阻断项 | 3 | +| 建议项 | 4 | +| 优化项 | 7 | +| 评分 | 89/100 | + +总体结论:用例集质量高——表头/列数/编号/模块路径零缺陷(脚本核验),59/59 测试点全部承接,13 项确认决议全部落地无违背,术语与术语表一致,预期结果普遍做到"UI/接口反馈 + 数据状态"双覆盖。3 个阻断项集中在 2 处测试数据引用缺陷与 1 处场景遗漏(0 有效行终态待确认项未显式标注),均可精确定位、快速修复;修复后即可达到可执行标准。 + +## 阻断项 + +### B-001: 039 的测试数据引用与数据文件定义冲突(XLS-006 行数标注错误) +- 用例编号: PLT_TMS_FPKG_039 +- 行号: 表格数据行第 39 行(文件 L69) +- 问题: 测试数据列标注 `XLS-006(1000 行)`,但 XLS-006 在测试数据文件中定义为 1~2000 行的"行数上限合法文件(2000 行全有效)"(测试数据文件 L35),且同文件 015/061/072/082 均按 2000 行使用 XLS-006。本用例步骤与前置条件均要求"1000 行规模合法清单(CNC-001/CNC-006)"。数据 ID 与行数标注自相矛盾,执行人按 ID 取数会取到 2000 行文件,与步骤"上传 1000 行清单"冲突,无法按写明数据直接操作。 +- 修复建议: 测试数据列改为 `BND-007(1000 行清单,按 CNC-006 的 500 批×2 运单混合结构构造)`,与 072 的写法保持一致。 +- 修复后预期: 数据 ID、步骤、前置条件、数据文件定义四方一致,执行人可直接构造 1000 行清单执行进度观察断言。 + +### B-002: 026 的数据构造自相矛盾(序号重复行 vs 序号互不相同) +- 用例编号: PLT_TMS_FPKG_026 +- 行号: 表格数据行第 26 行(文件 L56) +- 问题: 前置条件为"1 行合法(XLS-001)+1 行序号重复(XLS-106 重复行)+……各行序号取互不相同的合法值"。序号重复行必须与文件内另一行同序号才会触发"序号重复"失败;若按字面"各行序号互不相同"构造,该行不会失败,实际失败数=4,与预期断言"成功数=1+失败数=5=总行数 6"冲突。执行人按字面执行将得到与预期不符的结果。 +- 修复建议: 前置条件改写为"重复行与合法行 XLS-001 共用序号 1(XLS-001 为首现行保留并成功,重复行计失败,口径同 020),其余 4 个失败行(XLS-110/111/113/107)序号取互不相同的合法值(如 2/3/4/5)"。 +- 修复后预期: 按前置条件可直接构造 6 行数据,执行结果与断言 1/4(成功=1、失败=5)自洽,5 类失败原因互不串行。 + +### B-003: "全部行数据级失败(0 有效行)"场景无用例承接且待确认口径未显式标注 +- 用例编号: 无(场景缺口,涉及 CMB-018 / 数据缺口 #14) +- 行号: 用例集整体(文末"未收敛的 ⚠️ 待确认清单"与"其他实现口径确认项"均未收录该项) +- 问题: 需求 4.2.2 处理原则未定义"剔除失败行后 0 有效行"的任务终态(已完成·部分失败 or 失败)与是否生成空文件包;测试数据文件已将该场景构造为 CMB-018 并列为数据缺口 #14("需求方/开发确认")。用例文件对缺口 #15/#16/#17 均已显式纳入文末确认项,唯独遗漏 #14:既无用例承接该异常/边界场景,也无 ⚠️ 待确认标注。对照 review_checklist 阻断项"需求存在明显待确认项,但未显式标注"及 DoD §4"不得静默遗漏",属于状态流转维度的不闭合。 +- 修复建议: 新增 1 条 P1 功能测试用例(建议编号 PLT_TMS_FPKG_083,模块 平台端-运单管理-运单文件包-数据校验):前置构造 3 行全非法清单(XLS-101+XLS-110+XLS-107),断言任务终态、成功数=0、统计一致且对象存储无空包(口径按缺口 #14 确认后回填,暂按"已完成·部分失败、不生成空 zip"设计并在备注标注 `⚠️ 待确认:0 有效行终态,见数据缺口 #14`);同时在"其他实现口径确认项"补充缺口 #14 条目。 +- 修复后预期: 0 有效行边界具备可执行用例与显式待确认标注,与其他数据缺口处理方式一致,无静默遗漏。 + +## 建议项 + +### S-001: 007/008 多机构隔离用例的数据与环境前置未闭环 +- 用例编号: PLT_TMS_FPKG_007 / PLT_TMS_FPKG_008 +- 行号: 表格数据行第 37/38 行(文件 L37/L38) +- 问题: B 机构运营账号、任务编号 TB、运单号 YDB-001 均为行内临时记号,未分配数据 ID,也未列入数据缺口清单(缺口 #1 仅覆盖本机构运单号映射);测试环境是否为多机构部署亦无来源标注(脚本核验:YDB-001 是全部 82 条中唯一在数据文件无定义的引用)。执行前无法确认数据可获取,前置条件可复现性存疑。 +- 修复建议: 为 B 机构数据分配数据 ID(如 ACC-B01、YDB-001)并在测试数据文件"数据缺口"补充"多机构部署环境 + B 机构运营账号 + B 机构运单"条目;若测试环境不支持多机构部署,在 007/008 备注显式说明取舍原因,不得静默保留。 +- 修复后预期: 007/008 的前置条件可复现、数据来源可追溯,与全文件数据 ID 纪律一致。 + +### S-002: 007/008 以 super_admin 充当"A 机构运营账号"做隔离断言存在口径风险 +- 用例编号: PLT_TMS_FPKG_007 / PLT_TMS_FPKG_008 +- 行号: 表格数据行第 37/38 行(文件 L37/L38) +- 问题: 数据文件定义 ACC-001 为"超级管理员(代行运营人员)、全部权限"。超管在多机构部署下可能按设计具备跨机构可见性:若如此,断言"ACC-001 任务列表不显示 B 机构任务"会因角色能力而失败(误报缺陷),或掩盖机构隔离缺陷(漏报)。 +- 修复建议: 机构隔离断言改用绑定 A 机构的非超管运营账号(可复用 ACC-002 并补充机构绑定关系),或在 007 前置条件中先与开发确认 super_admin 在多机构下的可见范围并将结论写入预期结果。 +- 修复后预期: 隔离断言基于受控权限角色,失败时可归因到数据权限缺陷而非角色差异。 + +### S-003: 007 的 P2 与项目画像"权限类必测机构隔离"硬约束权重不匹配 +- 用例编号: PLT_TMS_FPKG_007(关联 PLT_TMS_FPKG_008) +- 行号: 表格数据行第 37 行(文件 L37) +- 问题: 项目画像 §10 要求权限类用例必须验证机构数据隔离,007 承载任务列表+下载双隔离主场景却为 P2(沿袭测试点 TP-M-005 的 P2 定级),008(上传行级失败隔离)同为 P2。按 review_checklist §8"不得把高风险场景错误下沉到 P2"的精神,主隔离场景降权依据不足。 +- 修复建议: 将 007 升为 P1(008 可保持 P2);或在"P2/P3 用例取舍说明"中补充机构隔离保持 P2 的权重论证(如当前部署形态下跨机构风险实际较低)。 +- 修复后预期: 优先级与项目画像硬约束的权重口径一致,或有显式的降权理由。 + +### S-004: 跨货源归批(不拆批侧)规则组合未承接 +- 用例编号: 无(建议并入 045 或 046,涉及 CMB-007) +- 行号: 关联表格数据行第 75/76 行(文件 L75/L76) +- 问题: "同一司机+身份证+车牌三要素一致、运单分属不同货源时仍归 1 批(归批不看货源单号)"是归批规则(REQ-010)的关键组合验证:现有用例覆盖了"任一要素不同即拆批"(046/047),但"三要素一致不因货源不同而拆批"的负向对照缺失;数据文件已构造 CMB-007 却无用例承接。 +- 修复建议: 在 045 或 046 的上传清单中并入 CMB-007 行组(张三+皖A12345 跨 HY202609001/HY202609002 的运单各 1 单),增加断言"跨货源运单仍归同一批次包,两个运单包分别按各自货源单号命名"。 +- 修复后预期: 归批维度"拆批"与"不拆批"两侧均有用例,防止实现按货源单号错误分组。 + +## 优化项 + +### O-001: 046 单条用例合并两个真实业务场景,与文末取舍说明表述不一致 +- 用例编号: PLT_TMS_FPKG_046 +- 行号: 表格数据行第 76 行(文件 L76) +- 说明: 046 含两次独立上传(CMB-003 同司机换车、CMB-004 同车换司机),而文末取舍说明将 TP-P-002 列为"不同真实业务场景拆为独立用例",与实际不符。两场景验证点同为"任一要素不同即拆批",故列为优化。 +- 建议: 拆为两条独立用例(同司机换车 / 同车换司机),或将取舍说明中 TP-P-002 的表述修正为"按要素维度拆分(046 换车与换司机、047 同名不同证)"。 + +### O-002: 033 五种状态颜色映射未列明"待处理"标签颜色 +- 用例编号: PLT_TMS_FPKG_033 +- 行号: 表格数据行第 63 行(文件 L63) +- 说明: 断言 2 仅列处理中蓝/已完成绿/失败红/已完成·部分失败橙,未明确"待处理"标签颜色(原型为灰色态)。 +- 建议: 补齐"待处理灰色",使五种状态的颜色映射断言完整闭环。 + +### O-003: 049 断言 2 措辞"(非空目录亦无文件)"存在歧义 +- 用例编号: PLT_TMS_FPKG_049 +- 行号: 表格数据行第 79 行(文件 L79) +- 说明: 括号内表述易被误读,测试点原文意图是"既不得生成空的司机/车辆证件子目录,也不得含任何证件文件"。 +- 建议: 改写为"确无司机证件/车辆证件子目录(既不生成空目录,目录内也不得含任何证件文件)"。 + +### O-004: 041"构造同 026 数据"的引用与实际失败集不一致 +- 用例编号: PLT_TMS_FPKG_041 +- 行号: 表格数据行第 71 行(文件 L71) +- 说明: 041 实际为 XLS-101/110/111/113 四类失败行(序号 0/不存在/错配/无法归批),026 为 XLS-106/110/111/113/107 五类;"构造同 026 数据"会误导执行人复制错误失败集。 +- 建议: 改为"参照 026 的构造方式,含 XLS-101/110/111/113 四类失败行 + 1 行合法行"。 + +### O-005: ERR-034(源文件名 XSS)已定义数据但无用例承接 +- 用例编号: 建议并入 PLT_TMS_FPKG_029 +- 行号: 关联表格数据行第 59 行(文件 L59) +- 说明: 数据文件定义了 ERR-034(`.xlsx`,接口构造,列表转义展示断言),029 已覆盖源文件名超长/特殊字符/Unicode,仅差 XSS 变体一处断言(属 TP-U-016 防御完整性)。 +- 建议: 在 029 断言 2 中并入"含脚本标签的源文件名在任务列表转义展示、不触发弹窗"。 + +### O-006: CNC-007(双账号并发上传)未承接 +- 用例编号: 建议并入 PLT_TMS_FPKG_073 或 066 +- 行号: 关联表格数据行第 103/96 行(文件 L103/L96) +- 说明: CNC-007(ACC-001 与 ACC-006 同时上传,任务互不干扰、上传人字段各自正确)为数据文件已构造的多账号并发场景,当前无用例覆盖;066 仅覆盖双账号下载。 +- 建议: 在 073 的 5 任务并发中安排双账号提交并核对上传人字段,成本极低。 + +### O-007: XLS-005/BND-024 与 XLS-115 两处已构造数据未承接 +- 用例编号: 建议在 019/026 执行时顺带探测 +- 行号: 关联表格数据行第 49/56 行(文件 L49/L56) +- 说明: 大数值序号 50000 合法(XLS-005/BND-024)与单行多重非法的失败原因取值优先级(XLS-115)均无用例显式承接;前者可与确认项 #9 的 BND-025~027 同批探测,后者可在 026 执行时顺带验证原因展示优先级(019 断言 2 已有"首要或并列展示"的铺垫)。 +- 建议: 不新增用例,在 019/026 的步骤或备注中补一句顺带探测说明即可。 + +## 专项核查结论(任务指定核查项) + +1. **预期结果双覆盖(UI/接口 + 数据状态)**: 通过。82 条用例的预期结果均同时覆盖页面/接口反馈与数据状态校验(典型:010 统计卡片计数与数据库任务表比对、011 数据库无任务记录、016 对象存储无空包残留、061 zip 全量清点与统计"不出现两张皮"、065 下载前后数据库字段一致、066 服务端完成时间与存储不变、076 保留期字段与清理记录)。仅 030(易用性)与 033(标签映射)以 UI 断言为主,与类型定位匹配,且状态字典的数据侧校验由 032 断言 4 兜底。 +2. **测试步骤引用具体测试数据**: 通过。全部 82 条步骤/数据列均引用数据文件 ID(XLS/ERR/BND/IDC/STT/CMB/CNC),脚本核验引用 ID 100% 在数据文件有定义(唯 B-001 的错误标注与 S-001 的 YDB-001 除外);多数步骤还写明构造手段(openpyxl 构造、接口直传、抓包重放、运维配合 mock)。 +3. **P1 风险 RISK-AVAILABILITY(并发排队/幂等/重试)专项**: 已覆盖且步骤可执行——073 并发上限与排队(BND-051~053/CNC-002/003,10 秒级轮询+终态逐一验证 zip,备注显式"不得省略")、074 毫秒级并发幂等(前端防抖+后端幂等键双断言,CNC-008)、075 上传超时提示与重试防双任务、057/058 OBS 单文件重试两侧边界(恰 3 次)、079/080 OBS 整体不可用降级与恢复、066 下载幂等(CNC-005 哈希比对)、043 处理中服务异常置失败。P1 风险缓解链完整。 +4. **术语一致性**: 通过。菜单名"运单文件包"、批次/文件包(批次包)/运单包/总包/最小序号运单/电子回单/失败清单/审计日志/幂等性等用法与需求二章、4.4.2 及 terminology.md 一致;角色用"车队长""运营人员"无同义词混用;"银行电子回单"口径与术语表定义吻合。 +5. **已确认决议核对(第八章 13 项)**: 全部落地且无违背——#1→002、#2→003/004、#3/#12→048/064、#4→049、#5→050、#6→023、#7→034、#8→053/054、#9→015/017、#10→076、#11→069(防过度实现)、#13→020。Q1/Q4/Q5/Q6 四项保留待确认已在 044/063/077/067 备注显式标注(符合 DoD,不计缺陷);Q2/Q3 的收敛在 015/016 备注留有"实现不符需回归修订"的触发条件,处理得当。 +6. **追溯与统计**: 59/59 测试点全部有用例承接(文件头映射表逐条核对无遗漏);历史缺陷 BUG-202607-01/02/03 分别落到 068、058/074、061/062/063 且备注带 [AI修正] 来源标注;文末自述的优先级/类型/模块分布与脚本实测完全一致。 + +## 维度评分 + +| 维度 | 得分 | 说明 | +| :--- | :---: | :--- | +| 结构完整性 | 20/20 | 表头与 template 逐字一致;82 行均 10 列、无残缺无全角竖线;必填列无空;模块全部为层级路径且分布与自述一致;编号 001~082 连续唯一(脚本核验) | +| 可执行性 | 18/25 | 数据 ID 纪律优秀、步骤含轮询/构造/抓包等可操作手段;扣分项:039 数据引用错误(B-001)、026 数据构造自相矛盾(B-002)、007/008 环境与数据前置未闭环(S-001/S-002) | +| 原子性 | 14/15 | 无"多关键断言混杂"的阻断问题;拆分/合并总体遵循文末原则;扣分项:046 双场景合一且取舍说明表述不一致(O-001) | +| 预期结果质量 | 18/20 | 预期具体可验证、普遍含数据库/对象存储侧校验、失败可定位(前端/后端/规则/数据/异步分层断言);扣分项:0 有效行状态流转场景缺失致覆盖不闭合(B-003) | +| 类型准确性 | 10/10 | 枚举全部合法且与内容匹配(安全性 10 条对应越权/注入/审计/合规,回归 7 条均有历史缺陷或冲突修订依据,性能 3 条对应 RT/并发容量);自述类型分布与实测一致 | +| 优先级合理性 | 9/10 | P0=32(39%)与测试点 P0 占比(42%)匹配,全部 P0 测试点有 P0 用例承接,无高风险下沉;扣分项:007 机构隔离 P2 权衡存疑(S-003) | +| **合计** | **89/100** | 3 个阻断项修复后即可达到可执行与可导出标准 | diff --git a/output/analysis/运单资料文件包下载需求_质量裁决.md b/output/analysis/运单资料文件包下载需求_质量裁决.md new file mode 100644 index 0000000..6637dea --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_质量裁决.md @@ -0,0 +1,74 @@ +# 运单资料文件包下载需求 质量裁决 + +## 裁决结果: 🔧 PASS_WITH_FIX + +**裁决时间**: 2026-09-08 17:46:10 +**裁决人**: quality-gatekeeper (Agentic QE Fleet · review 战区) + +## 裁决依据 + +| 检查项 | 实际值 | 阈值 | 状态 | +| :--- | :---: | :---: | :---: | +| 阻断项数量 | 0(原 3 项 B-001/B-002/B-003,已全部自动修复并复核落地) | ≤ 0(max_blockers=0) | ✅ | +| P0 测试点→用例覆盖率 | 100%(25/25,修复后 TP-P-007 增至 053/054/084 三路径承接) | 100% | ✅ | +| P0 风险覆盖率 | 100%(P0 风险项=0,空集成立) | 100% | ✅ | +| P1 风险(RISK-AVAILABILITY)覆盖率 | 100%(7 个缓解测试点全部有用例:073/074/075/066/057/058/072/043/079/080) | ≥ 90% | ✅ | +| 需求→测试点覆盖率 | 100%(26/26) | ≥ 95%(min_coverage=0.95) | ✅ | +| 待确认项 | 未处理 0(7 条用例 ⚠️ 均已显式标注 + 默认设计口径 + 回填路径,符合 DoD 不计缺陷) | 0(未处理) | ✅ | +| 用例文件存在 | 是,85 条(001~085 连续唯一,脚本核验 10 列/必填列无空/分布统计与文首自述一致) | 是 | ✅ | +| 测试数据构造(require_data_builder) | 满足:数据文件 145 组 + 缺口 #14~#18 已补(CMB-018、BND-007 1000 行、BND-025~027、ACC-B01/YDB-001) | 必须提供 | ✅ | +| 风险评估(require_risk_assessment) | 满足:5 项风险(P0=0 / P1=1 / P2=4),P1 缓解面 100% 承接 | 必须提供 | ✅ | +| 过度覆盖率 | 0%(82→85 条均可逆向追溯 REQ/TP;RED-001 条件性冗余 1/85≈1.2% ≤ 5%) | ≤ 5% | ✅ | + +**逐条对照 BLOCKED 条件(全部不成立)**: +1. 阻断项 > 0 —— 不成立:3 项阻断已全部修复落地(见自动修复摘要),抽查未发现新引入阻断; +2. P0 测试点覆盖率 < 100% —— 不成立:25/25 = 100%,且原 GAP-001 对应的 TP-P-007"文件缺失剔除→证件改挂"路径已由新增 P0 用例 084 固化断言; +3. P0 风险覆盖率 < 100% —— 不成立:P0 风险=0,空集成立; +4. 存在未解决的确认门禁 —— 不成立:设计战区确认门禁已 confirmed(需求 v1.0 定稿、13 项确认决议全部落地);剩余 Q1/Q4/Q5/Q6 与缺口 #14/#15/#17/#18 均为需求侧"待需求方/开发确认口径"类,已在用例中显式 ⚠️ 标注、给出默认设计口径(083 按"已完成·部分失败、不生成空 zip";084 按决议#8+4.4.4 条款二字面固化证件改挂断言;085 按"不得静默丢数据"不变式)与回填路径,对照评审报告对 Q1/Q4/Q5/Q6 的既有裁定("显式标注符合 DoD,不计缺陷")与 B-003 的修复方向(补用例 + 显式标注即为闭合态),此类项按同一口径判定为"已处理",不构成未解决确认门禁; +5. 测试用例文件不存在或为空 —— 不成立:85 条用例完整。 + +## 裁决详情 + +1. **评审阻断项修复复核(3/3 落地)**: + - B-001(039 数据引用冲突):测试数据列已改为 `BND-007(1000 行清单,按 CNC-006 的 500 批×2 运单混合结构构造)`,数据 ID、步骤(上传 1000 行)、断言(186/1000 形式)与数据文件定义(BND-007=1000 行性能基准)四方一致; + - B-002(026 序号自相矛盾):前置条件已改为"重复行与合法行 XLS-001 共用序号 1(首现行保留成功、重复行计失败,口径同 020),其余 4 个失败行序号取互不相同的合法值(如 2/3/4/5)",与断言"成功数=1+失败数=5=总行数 6"自洽; + - B-003(0 有效行场景遗漏):新增 PLT_TMS_FPKG_083(P1/功能测试/数据校验模块),按 CMB-018 构造 3 行全非法清单,断言含"无下载入口、对象存储无空包残留",备注 ⚠️ 指向文末确认项 #10(数据缺口 #14),确认项 #10 已收录该缺口——静默遗漏已闭合。 +2. **覆盖率缺口修复复核**: + - GAP-001(BLOCKED 级):新增 PLT_TMS_FPKG_084(P0/打包归批),最小序号运单因仅缺电子回单被剔除(CMB-010,缺口 #17),按决议#8+4.4.4 条款二字面口径固化证件改挂断言(断言 2:序号 3 运单包含证件后缀+四子目录、序号 5 仅合同+回单,且该断言在运单包最终形态两种口径下均须成立);TP-P-007 现有 053/054/084 三条覆盖"校验失败剔除/整批剔除/文件缺失剔除"全部路径,P0 关键验证点已固化为断言,GAP-001 在用例层面闭合(残留为需求侧 4.4.4 条款边界的口径回填,已显式标注); + - GAP-005:019 备注已锚定 BND-025/026/027 极值序号顺带探测(int32 上限 2147483647 / 上限+1 / 20 位超 Excel 精度),固化断言"合法或明确报错,不得静默截断",与确认项 #9、数据文件定义三方一致; + - GAP-006:新增 PLT_TMS_FPKG_085(P2/上传校验),固化"多 Sheet 数据无一被静默丢弃"不变式断言(要么全部解析总行数=3,要么整体拒绝),⚠️ 指向确认项 #1(缺口 #15); + - GAP-007:022 已追加运单号小写变体行(yd20260901001),断言 3 固化"存在性校验与实际导出同口径,不出现校验通过但导出缺单的不一致"; + - GAP-002/003/004:属断言取值类(用例 063/076/077/067 已建且已承接),随 Q4/Q5/Q6 确认回填,不构成覆盖缺口。 +3. **建议项/优化项采纳复核**:S-003(007 已升 P1,取舍说明同步更新);S-001/S-002(007/008 备注补环境依赖与替代口径"改用绑定 A 机构的非超管账号 ACC-002 补机构绑定执行,不得静默跳过",数据文件已补缺口 #18:ACC-B01/YDB-001);S-004(045 已并入 CMB-007 跨货源不拆批断言,批次①含 4-【CMB-007 运单号】-HY202609002,与 046 拆批两侧互补);O-001(取舍说明已改为"TP-P-002 按要素维度处理");O-002(033 已补"待处理灰",五色映射闭环);O-003(049 已改写为"既不生成空目录,目录内也不得含任何证件文件");O-004(041 已改为"参照 026 的构造方式,含 XLS-101/110/111/113 四类失败行 + 1 行合法行");O-005(029 数据列已含 ERR-034,断言 2 补 XSS 文件名转义展示不触发弹窗);O-006(073 已并入 CNC-007 双账号并发与上传人字段一一对应断言);O-007(主路径已采纳:019 极值探测锚定 BND-025~027;XLS-115 单行多重失败原因优先级与 BND-024 大数值合法序号未在 026/019 显式点名,见遗留事项 2)。 +4. **结构复核(脚本实测)**:85 行×10 列、编号 001~085 连续唯一、必填列无空值;文首统计与实测完全一致(P0=33/P1=43/P2=7/P3=2;功能 62/安全 10/回归 7/性能 3/兼容 1/易用 1/冒烟 1;菜单权限 7/上传校验 14/数据校验 11/任务列表 13/打包归批 21/下载审计 7/非功能 11/跨模块冒烟 1);用例编号与测试点映射总览已同步(TP-U-001→009/085、TP-U-004→012/013/085、TP-U-015→026/027/083、TP-P-007→053/054/084),59/59 测试点映射关系无断裂。 +5. **遗留非阻断事项(不改变裁决,建议导出前/执行前处理)**: + - ① 022 步骤 1 仍写"上传该 3 行清单",与前置条件"构造 4 行清单"(GAP-007 修复新增大小写变体行后)行数表述不一致。属文案级遗留(与评审 O-004 同族、按其定级口径为优化级):前置条件已完整定义 4 行且断言 1~3 均要求四行行为,不会导致错误判定或无法构造,不影响门禁,但建议导出前顺手将"3 行"改为"4 行"; + - ② O-007 部分残留:XLS-115(单行多重非法的失败原因优先级)与 XLS-005/BND-024(50000 合法大数值)未显式点名;019 断言 2 已有"一行并存多项问题时原因以首要或并列展示"铺垫、BND-026/027 已覆盖更极端的数值边界,可在执行 026/019 时按备注顺带探测,不再单独开项; + - ③ 断言回填类:063(Q4 快照/实时)、076/077(Q5 与 BND-032 临界口径)、067(Q6 失败清单留痕)、044(Q1 结构预览)、083(缺口 #14 终态)、084 断言 3(缺口 #17 条款边界)、085 断言 1 取值(缺口 #15 口径)——均已内置默认口径与回填路径,须在对应确认完成后回填,未确认前相关断言按用例内标注的默认口径执行并在执行报告记录。 + +## 自动修复摘要 + +| 序号 | 修复项 | 修复内容 | 抽查验证结果 | +| :--- | :--- | :--- | :--- | +| 1 | 评审 B-001 | 039 测试数据列 XLS-006(1000 行)→ BND-007(1000 行,按 CNC-006 结构构造) | ✅ 落地(用例表 039 行;数据文件 BND-007=1000 行一致) | +| 2 | 评审 B-002 | 026 前置条件改为重复行与 XLS-001 共用序号 1,其余 4 失败行序号 2/3/4/5 互不相同 | ✅ 落地(与断言成功 1+失败 5=6 自洽) | +| 3 | 评审 B-003 | 新增 PLT_TMS_FPKG_083(P1,0 有效行终态场景),确认项 #10 收录缺口 #14 | ✅ 落地(CMB-018 构造、⚠️ 显式标注、数据文件缺口 #14 在册) | +| 4 | 覆盖 GAP-001 | 新增 PLT_TMS_FPKG_084(P0,文件缺失剔除→证件改挂重算,固化决议#8+4.4.4 条款二字面断言) | ✅ 落地(TP-P-007→053/054/084,⚠️ 运单包最终形态待确认已标注) | +| 5 | 覆盖 GAP-005 | 019 备注锚定 BND-025/026/027 极值序号顺带探测,"合法或明确报错,不得静默截断" | ✅ 落地(与确认项 #9、数据文件定义一致) | +| 6 | 覆盖 GAP-006 | 新增 PLT_TMS_FPKG_085(P2,多 Sheet 不得静默丢数据不变式) | ✅ 落地(TP-U-001/TP-U-004 映射同步,确认项 #1/缺口 #15 收录) | +| 7 | 覆盖 GAP-007 | 022 清单追加大小写变体行,断言"存在性校验与实际导出同口径" | ✅ 落地(遗留步骤 1"3 行"文案未同步,见遗留事项①,非阻断) | +| 8 | 建议 S-001/S-002 | 数据文件补缺口 #18(ACC-B01/YDB-001/多机构部署形态),007/008 备注补环境依赖与替代口径 | ✅ 落地(缺口 #18 在册,007 备注含"不得静默跳过"约束) | +| 9 | 建议 S-003 | 007 由 P2 升 P1 | ✅ 落地(优先级列 P1,取舍说明同步"升为 P1") | +| 10 | 建议 S-004 | 045 并入 CMB-007 跨货源不拆批断言 | ✅ 落地(前置/步骤/断言 2/备注四处一致) | +| 11 | 优化 O-001~O-007 | 取舍说明表述修正、033 补待处理灰、049 措辞消歧、041 失败集改写、029 并入 ERR-034、073 并入 CNC-007、019 锚定极值探测 | ✅ 全部落地(O-007 的 XLS-115/BND-024 显式点名残留,见遗留事项②,非阻断) | +| 12 | 结构复核 | 85 行×10 列、编号连续、统计一致、类型合法、必填列无空 | ✅ 脚本实测通过(本次裁决独立复测) | + +## 后续步骤 + +- 🔧 自动修复已完成并通过复核:3 项评审阻断全部修复、GAP-001(BLOCKED 级)在用例层面闭合、GAP-005/006/007 已补齐、S-001~S-004 与 O-001~O-007 已采纳,修复后状态等同于 PASS(结构脚本核验零缺陷、三级追溯 26/26→59/59→85/85 无断裂)。 +- ✅ 可执行 `/qe-fleet export` 导出 Excel(建议导出前顺手修正 022 步骤 1 的"3 行→4 行"文案,1 处改动)。 +- 📋 需求侧确认回填清单(不阻断导出,须在执行前/执行中闭环,回填路径已内置于用例): + 1. Q1→044(结构预览裁剪或回填)、Q4→063 断言 1、Q5→077 断言 1 与 BND-032 临界(076)、Q6→067 失败清单留痕; + 2. 缺口 #14→083 断言 3/4 终态、#15→085 断言 1 取值、#17→084 断言 3 运单包最终形态、#18→007/008 多机构环境与 B 机构造数; + 3. 执行阶段按缺口清单 #1~#13 完成造数(2000 有效运单、多笔支付运单、OBS 失效对象等),并执行 019/026 时顺带探测 BND-024~027 与失败原因优先级。 +- 📝 本裁决为 review 战区最终裁定;若后续需求方确认口径与默认设计不符(如 083 终态确认为"失败"、084 确认为条款一不剔除),须按回填路径修订对应断言后重新执行 `/qe-fleet review` 复核,无需整体重新裁决。 diff --git a/output/analysis/运单资料文件包下载需求_风险评估.md b/output/analysis/运单资料文件包下载需求_风险评估.md new file mode 100644 index 0000000..a984540 --- /dev/null +++ b/output/analysis/运单资料文件包下载需求_风险评估.md @@ -0,0 +1,21 @@ +# 运单资料文件包下载需求 风险评估报告 + +> 生成时间: 2026-09-08T08:11:23.797170+00:00 + +## 风险概览 + +- 总风险项: 5 +- P0 高风险: 0 +- P1 中风险: 1 + +## 风险矩阵 + +| 风险ID | 类别 | 可能性(1-5) | 影响度(1-5) | 风险评分 | 等级 | 冲突放大 | +| :--- | :--- | :---: | :---: | :---: | :---: | :---: | +| RISK-AVAILABILITY | 可用性 | 3 | 4 | 12 | **P1** | 否 | +| RISK-FINANCIAL | 资损 | 1 | 5 | 5 | **P2** | 否 | +| RISK-COMPLIANCE | 合规 | 1 | 5 | 5 | **P2** | 否 | +| RISK-DATA | 数据 | 1 | 4 | 4 | **P2** | 否 | +| RISK-COMPATIBILITY | 兼容性 | 1 | 3 | 3 | **P2** | 否 | + +## 风险缓解建议 diff --git a/output/docx_check/check.docx b/output/docx_check/check.docx new file mode 100644 index 0000000000000000000000000000000000000000..50d4174c4a9278c1ae1fb00d15713cfc585804b1 GIT binary patch literal 17887 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