Files
Yb-QaAutomationHub/output/writeback_decisions.py
T
xst 8c61209dd4 test(物流公司管理需求): 需求文档与 QE Fleet 全流程设计产物入库
- 需求 v1.1 + 2026-09-29 需求方确认的 Q7~Q19 决议(含 BR-07/BR-09/6.7/6.9 矛盾表述修订)
- 测试点 159 个、测试用例 164 条(P0 55/P1 81/P2 23/P3 5),需求→测试点→用例三级追溯覆盖率 100%
- 质量裁决 PASS(首轮 PASS_WITH_FIX,13 项待确认确认后复裁决升级);评审原始 2 阻断项+9 建议项+3 优化项已全部修复
- 确认单:与 4 个历史需求均为并行关系、0 冲突、0 回写
- 附导出 v1/v2 版本快照、Playwright/Appium 脚本骨架、覆盖率审计脚本与指标、评审修复脚本
2026-09-29 10:03:35 +08:00

79 lines
6.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""把 2026-09-29 需求方确认结论回写标准化需求文档(含矛盾表述修订)。"""
from __future__ import annotations
import sys
from pathlib import Path
REPO = Path(__file__).resolve().parent.parent
sys.stdout.reconfigure(encoding="utf-8")
REQ = REPO / "output" / "normalized_inputs" / "物流公司管理需求" / "requirement.md"
text = REQ.read_text(encoding="utf-8")
orig = text
REPLACEMENTS = [
# 1) BR-07.2 —— 澄清"货源维度"与"运单维度"
(
"2. 所选物流公司仅作为**该货源及其关联运单的记录信息**展示与追溯,不参与货源、运单、结算的任何流程判断与计费(见 1.4 设计原则)。",
"2. 所选物流公司记录于**货源维度**并随货源展示;核算时作为修改核算弹窗的**默认带入值**(弹窗初始无值),核算保存后写入运单表(**运单维度**)。两者均仅作记录展示与追溯,不参与货源、运单、结算的任何流程判断与计费(见 1.4 设计原则,Q8 决议)。",
),
# 2) 6.7.3
(
"3. 保存货源时写入所选公司信息快照;该信息随货源展示,并作为其关联运单的记录信息。",
"3. 保存货源时写入所选公司信息快照;该信息随货源展示,并在核算时作为修改核算弹窗的默认带入值(运单侧的记录以核算保存写入运单表为准,见 Q8 决议)。",
),
# 3) BR-09.2 —— 修订与 6.6 矛盾的表述
(
"2. **运单管理**:显示运单关联货源上记录的物流公司(随货源带入);未关联的显示\"无外协公司\"。",
"2. **运单管理**:显示**运单表**记录的物流公司(核算保存时写入;货源所选公司由核算弹窗默认带入);未核算或未关联的显示\"无外协公司\",不联表实时取货源当前值(Q8 决议)。",
),
# 4) 6.9 表格行
(
"| 运单管理(整车运输 → 运输管理 → 运单管理) | 关联货源上记录的物流公司 | 无外协公司 |",
"| 运单管理(整车运输 → 运输管理 → 运单管理) | 运单表记录的物流公司(核算保存写入;未核算不取货源当前值) | 无外协公司 |",
),
# 5) Q7 待确认标记 → 已确认
(
"> ⚠️ 待确认 Q7:**批量核算**是否需要支持批量填充物流公司/客户收货地址?当前口径:仅单笔\"修改核算\"弹窗中填写,批量核算逻辑不变。",
"> ✅ 已确认 Q7(2026-09-29):**批量核算不支持**批量填充物流公司/客户收货地址;批量核算逻辑不变,两个字段仅单笔\"修改核算\"弹窗中填写。",
),
]
for old, new in REPLACEMENTS:
cnt = text.count(old)
if cnt != 1:
raise SystemExit(f"❌ 命中 {cnt} 次(期望 1):{old[:50]!r}")
text = text.replace(old, new)
print(f"✅ 已修订:{old[:32]}...")
# 6) 追加 2026-09-29 确认决议块
ANCHOR = "4. 货源列表、运单管理、打款列表都要显示物流公司 → 已纳入 FR-10 / BR-09 / 6.9。"
if ANCHOR not in text:
raise SystemExit("❌ 未找到决议块插入锚点")
BLOCK = ANCHOR + """
**补充确认(2026-09-29,需求方逐项确认,QE Fleet 流水线记录)**:
| 编号 | 问题 | 决议 |
|:---:|:---|:---|
| Q8 | 运单管理列/打款筛选/导出的"物流公司"取值口径(BR-09/6.9 与 6.6 表述不一致) | **显示一律以运单表为准**。货源所选物流公司为**货源维度**记录;核算时自动带入"修改核算"弹窗(弹窗初始无值,**未核算的运单没有值**),确认核算后写入运单表(**运单维度**)。列表/筛选/导出取运单表快照,未核算或未关联显示"无外协公司",**不联表实时取货源当前值**。BR-09.2 / 6.9 / BR-07.2 / 6.7 已同步修订。 |
| Q9 | BR-04 删除保护是否覆盖"仅被货源引用、无运单"的公司 | **不覆盖**。仍仅"存在生效中合同"与"被任一运单引用"两条件阻断删除;货源列表按快照展示名称,不受影响。 |
| Q10 | 合同附件扩展名大小写(.PDF/.Jpg 是否放行) | **大小写不敏感**:.PDF/.Jpg 等同 .pdf/.jpg 放行(白名单按扩展名小写归一后判定)。 |
| Q11 | 联系方式是否允许座机/国际前缀 | **仅手机号**(`1[3-9]\\d{9}`);座机(0871-…)与国际前缀(+86…)不支持。 |
| Q12 | 简称码是否仅接受大写字母 | **不做限制**(该字段仅做记录、不参与任何流程):大小写均不阻断,行为需确定、可解释。 |
| Q13 | 唯一性判重是否对首尾空格 trim | **提交前 trim 后判重**:"甲公司 "与"甲公司"视为重复。 |
| Q14 | 统一社会信用代码是否校验第 18 位国标校验位 | **仅按 BR-01 正则校验**字符集与长度,不额外校验校验位(校验位错误但格式合法的号码可保存)。 |
| Q15 | 纯空格/空白字符在必填文本字段的处理 | **trim 后为空视为未填**,按空值阻断(必填字段)。 |
| Q16 | 简称码空值与"排除自身"校验范围 | 简称码空值**不参与**全平台唯一(多家公司可同时留空);编辑时**名称/统一社会信用代码/简称码/合同编号均排除自身**。 |
| Q17 | 垫资-货主打款 / 垫资-财务打款两页是否同口径改造 | **本期不改造**(两页保持原样);需回归验证其查询与打款功能不受本次改造影响。 |
| Q18 | 平台两个"运费核算"菜单的处理范围 | **仅改造 整车运输 → 承运结算 → 运费核算**;"运单认证核算 → 运费核算"不处理。 |
| Q19 | "客户收货地址"的展示载体 | 以**运单详情只读展示**为验收基线;**不加入运单管理列表列**;导出暂不要求包含该列。 |
"""
text = text.replace(ANCHOR, BLOCK)
print("✅ 已追加 Q8~Q19 补充确认决议块(12 项)")
REQ.write_text(text, encoding="utf-8")
print(f"\n需求文档已更新:{REQ}")
print(f"行数 {len(orig.splitlines())} -> {len(text.splitlines())}")