/**
 * 生成《巴青牧业大脑软件测试计划(STP).docx》
 * 严格遵循 test/软件测试计划(STP).docx（GJB 438C-2021 第 7.3 节）正文格式。
 */
const fs = require('fs');
const path = require('path');
const {
  Document, Packer, Paragraph, TextRun,
  Table, TableRow, TableCell, WidthType, AlignmentType, VerticalAlign,
  PageBreak
} = require('docx');

const FONT = '宋体';
const SZ = 21;

function title(t) {
  return new Paragraph({
    spacing: { before: 200, after: 120 },
    children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true })],
  });
}

function h1(t) {
  return new Paragraph({
    spacing: { before: 240, after: 120 },
    children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true, color: '0000FF' })],
  });
}

function h2(t) {
  return new Paragraph({
    spacing: { before: 180, after: 100 },
    children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true })],
  });
}

function h3(t) {
  return new Paragraph({
    spacing: { before: 140, after: 80 },
    children: [new TextRun({ text: t, font: FONT, size: SZ, bold: true })],
  });
}

function p(t) {
  return new Paragraph({
    indent: { firstLine: 420 },
    spacing: { after: 90, line: 360 },
    children: [new TextRun({ text: t, font: FONT, size: SZ })],
  });
}

function bullet(t) {
  return new Paragraph({
    indent: { left: 420, hanging: 210 },
    spacing: { after: 70, line: 360 },
    children: [new TextRun({ text: '• ' + t, font: FONT, size: SZ })],
  });
}

function itemLetter(letter, t) {
  return new Paragraph({
    indent: { firstLine: 420 },
    spacing: { after: 70, line: 360 },
    children: [new TextRun({ text: `${letter}. ${t}`, font: FONT, size: SZ })],
  });
}

function centerP(t, bold) {
  return new Paragraph({
    alignment: AlignmentType.CENTER,
    spacing: { after: 80, line: 360 },
    children: [new TextRun({ text: t, font: FONT, size: SZ, bold: !!bold })],
  });
}

/** 政务项目文档封面要素 */
function coverBlock() {
  return [
    centerP('（内部资料  注意保密）', true),
    p(''),
    centerP('巴青牧业大脑及巴青农资商城信息化建设项目', true),
    centerP('软 件 测 试 计 划', true),
    centerP('（STP）', true),
    p(''),
    tbl(['项目', '内容'], [
      ['文档标识号', 'BQ-STP-V1.0'],
      ['版本号', 'V1.0'],
      ['发行号', '001'],
      ['编制单位', '项目第三方测试组'],
      ['编制日期', '2026年6月'],
    ]),
    p(''),
    tbl(['角色', '姓名', '单位', '日期', '签名'], [
      ['编制', '', '项目第三方测试组', '', ''],
      ['审核', '', '项目承建单位', '', ''],
      ['会签', '', '项目监理单位', '', ''],
      ['批准', '', '巴青县人民政府项目主管部门', '', ''],
    ]),
    new Paragraph({ children: [new PageBreak()] }),
  ];
}

function tbl(headers, rows) {
  return new Table({
    width: { size: 100, type: WidthType.PERCENTAGE },
    rows: [
      new TableRow({
        children: headers.map(h => new TableCell({
          verticalAlign: VerticalAlign.CENTER,
          children: [new Paragraph({
            alignment: AlignmentType.CENTER,
            children: [new TextRun({ text: h, bold: true, font: FONT, size: 20 })],
          })],
        })),
      }),
      ...rows.map(r => new TableRow({
        children: r.map(c => new TableCell({
          children: [new Paragraph({
            children: [new TextRun({ text: c, font: FONT, size: 20 })],
          })],
        })),
      })),
    ],
  });
}

/** 3.x 测试现场（严格 3.x.1～3.x.9 九个子节，引导语与 GJB 438C 模板一致） */
function siteBlock(num, name, intro, software, hardware, materials, accounts, org, personnel, training, testItems) {
  return [
    h2(`3.${num}  ${name}`),
    p('本条应标识一个或多个用于测试的测试现场，并分条描述每个现场的软件测试环境。如果所有测试可以在一个现场实施，本条及其子条只给出一次。如果多个测试现场采用相同或相似的软件测试环境，则应在一起讨论。可以通过引用前面的描述来减少测试现场说明信息的重复。'),
    p(intro),
    h3(`3.${num}.1  软件项`),
    p('(若适用)本条应按名字、编号和版本标识在测试现场执行计划测试活动所需的软件项(如操作系统、编译程序、通信软件、相关应用软件、数据库、输入文件、代码检查程序、动态路径分析程序、测试驱动程序、预处理器、测试数据产生器、测试控制软件、其他专用测试软件和后处理器等)。本条应描述每个软件项的用途、媒体(磁带、盘等)，标识那些期望由现场提供的软件项，标识与软件项有关的保密措施或其他保密性与私密性问题。'),
    ...software.map(s => bullet(s)),
    p('上述软件项中，操作系统、数据库、中间件及浏览器由测试现场提供或协调；被测应用软件及配套脚本由项目承建单位部署并提供版本说明。测试数据均为脱敏模拟数据。'),
    h3(`3.${num}.2  硬件及固件项`),
    p('(若适用)本条应按名字、编号和版本标识在测试现场用于软件测试环境中的计算机硬件、接口设备、通信设备、测试数据归约设备、仪器设备(如附加的外围设备(磁带机、打印机、绘图仪)、测试消息生成器、测试计时设备和测试事件记录仪等)和固件项。本条应描述每项的用途，陈述每项所需的使用时间与数量，标识那些期望由现场提供的项，标识与这些项有关的保密措施或其他保密性与私密性问题。'),
    ...hardware.map(s => bullet(s)),
    h3(`3.${num}.3  其他材料`),
    p('本条应标识并描述在测试现场执行测试所需的任何其他材料。这些材料可包括手册、软件清单、被测试软件的媒体、测试用数据的媒体、输出的样本清单和其他表格或说明。本条应标识需交付给现场的项和期望由现场提供的项。(若适用)本描述应包括材料的类型、布局和数量。本条应标识与这些项有关的保密措施或其他保密性与私密性问题。'),
    ...materials.map(s => bullet(s)),
    h3(`3.${num}.4  所有权种类、需方权利与许可证`),
    p('本条应标识与软件测试环境中每个元素有关的所有权种类、需方权利与许可证等问题。'),
    p('服务器、网络链路及基础运行环境由需方（巴青县人民政府及项目主管部门）提供或协调；被测应用软件源代码及部署包著作权归项目承建单位所有。测试期间，需方、监理单位及第三方检测机构享有按本计划及合同约定开展合格性测试、见证测试的使用权。测试过程不涉及真实公民个人信息及商业秘密，均采用脱敏模拟数据。开源组件（Spring Boot、Vue、MySQL、Redis、Element UI 等）使用遵循相应开源许可证及政务信息化项目建设规范。'),
    h3(`3.${num}.5  安装、测试与控制`),
    p('本条应标识开发方为执行以下各项工作的计划，可能需要与测试现场人员共同合作：'),
    itemLetter('a', '获取和开发软件测试环境中的每个元素：测试负责人确认被测软件版本标识（V1.0 / Git Tag v1.0.0-test）及《系统部署手册》清单；测试期间未经测试负责人书面批准，不得变更服务器配置、数据库结构及被测软件版本；'),
    itemLetter('b', '使用前，安装与测试软件测试环境中的每项：按《系统部署手册》完成应用服务、Nginx 反向代理、MySQL、Redis 安装配置，执行健康检查及冒烟测试通过后，方可开展正式合格性测试；'),
    itemLetter('c', '控制与维护软件测试环境中的每项：每日测试开始前检查服务可用性；缺陷修复后由承建单位发布新版本并提交《版本变更说明》，测试组执行回归验证并更新测试记录。'),
    h3(`3.${num}.6  参与组织`),
    p('本条应标识参与现场测试的组织和它们的角色与职责。'),
    p(org),
    h3(`3.${num}.7  人员`),
    p('本条应标识在测试阶段测试现场所需人员的数量、类型和技术水平，需要他们的日期与时间，及任何特殊需要，如为保证广泛测试工作的连续性与一致性的轮班操作与关键技能的保持。'),
    p(personnel),
    p('本现场统一测试账号如下（集成测试环境，仅供本项目合格性测试使用）：'),
    tbl(['序号', '访问地址', '用户名', '密码', '角色说明'], accounts),
    h3(`3.${num}.8  定向计划`),
    p('本条应描述测试前和测试期间给出的任何定向培训。此信息应与 3.' + num + '.7 所给的人员要求有关。培训可包括用户指导、操作员指导、维护与控制组指导和对全体人员定向的简述。如果预料有大量培训的话，可单独制定一个计划而在此引用。'),
    p(training),
    h3(`3.${num}.9  要执行的测试`),
    p('本条应标识在该测试现场计划执行的测试。每个测试项应有唯一的名称和标识。测试项描述的是测试用例的集合，此处不描述具体测试用例；具体测试用例、测试步骤及预期结果见《软件测试说明(STD)》。'),
    tbl(['测试项标识', '测试项名称', '测试方法', '计划用例数', 'STD 引用'], testItems),
    p(`本现场上述测试项合计计划执行 ${testItems.reduce((s, r) => s + parseInt(r[3], 10), 0)} 条测试用例，详细目录见 STD 附录 A。`),
  ];
}

/** 第 4～8 章及附录（GJB 438C STP 正文后续章节） */
function chaptersAfterEnv() {
  return [
    h1('4  测试标识'),
    p('本章应标识合格性测试的级别、类别、条件及计划执行的测试项，作为组织实施测试和编制 STD 的依据。'),

    h2('4.1  一般信息'),
    p('本条给出合格性测试的一般信息。'),

    h3('4.1.1  测试级别'),
    p('本条应标识被测软件的测试级别。'),
    p('本项目合格性测试级别为 CSCI 级合格性测试。针对 6 个软件配置项分别开展功能、接口、权限、安全、集成及回归测试；跨系统 Open API 数据联调作为系统集成级验证项，在大屏与商城后台测试现场同步执行。单元测试、单元集成测试由开发方在研制阶段完成，本 STP 不重复安排。'),

    h3('4.1.2  测试类别'),
    p('本条应标识测试类别及各类别适用范围。'),
    tbl(['测试类别', '适用范围', '说明'], [
      ['功能测试', '全部 6 个 CSCI', '验证合同及 SRS 规定业务功能正确实现'],
      ['接口测试', '后台、大屏、商城 Open API', '验证 REST API 请求/响应、鉴权及数据格式'],
      ['权限与安全测试', '全部 Web/H5 端', 'RBAC 权限、JWT 鉴权、越权、操作审计'],
      ['兼容性测试', 'H5/大屏端', 'Chrome/Edge/微信浏览器、1920×1080 及移动分辨率'],
      ['易用性测试', '牧民 H5、商城 H5', '主流程操作步骤、空态与错误提示'],
      ['集成测试', '大屏↔商城 Open API', '交易销售统计数据口径一致、缓存策略有效'],
      ['回归测试', '缺陷修复后', '对受影响模块及核心链路抽样/全量复测'],
      ['验收测试(UAT)', '全部 CSCI', '需方/监理见证，确认 STR 及验收结论'],
    ]),

    h3('4.1.3  一般测试条件'),
    p('本条应描述执行测试的一般条件与约束。'),
    bullet('被测软件版本为 V1.0（Git Tag v1.0.0-test），与 STP 1.5 基线一致；'),
    bullet('测试环境为 117.180.211.14、117.180.211.17 集成测试环境，网络稳定、服务可用；'),
    bullet('测试数据均为脱敏模拟数据，禁止录入真实公民个人信息及商业秘密；'),
    bullet('测试账号按第 3 章各现场 3.x.7 规定分配，不得共用个人生产账号；'),
    bullet('缺陷按致命/严重/一般/轻微四级管理，致命、严重缺陷修复后必须回归；'),
    bullet('测试过程接受需方代表及监理单位监督见证，关键业务用例需现场签认。'),

    h3('4.1.4  测试进展'),
    p('本条应描述测试工作的组织方式与进展安排。'),
    p('测试工作按 STP 1.4 里程碑 T1～T6 推进：先完成 STP 评审与环境确认（T1），再执行冒烟测试（T2），随后按 STD 开展全量合格性测试（T3），并行开展跨系统集成测试（T4），缺陷修复后进行回归测试（T5），最后组织 UAT 验收测试并由需方/监理签认 STR（T6）。每日测试组提交测试日报，每周提交测试周报。'),

    h3('4.1.5  数据记录、整理和分析'),
    p('本条应描述测试数据的记录、整理和分析要求。'),
    itemLetter('a', '记录：每条用例执行后填写测试记录表，记录执行人、时间、实际结果、通过/不通过判定及截图/日志证据；'),
    itemLetter('b', '整理：缺陷统一录入缺陷台账，关联用例编号、CSCI、模块、严重级别及复现步骤；'),
    itemLetter('c', '分析：每日汇总通过率、缺陷分布、阻塞项；测试结束后编制 STR，给出总体评估及验收建议；'),
    itemLetter('d', '归档：测试记录、缺陷台账、STR 及 STP/STD 一并纳入项目验收档案。'),

    h3('4.1.6  测试方法'),
    p('本条应标识本项目采用的测试方法（GJB 438C 新增要求）。'),
    tbl(['测试方法', '适用测试项', '工具/手段'], [
      ['黑盒测试', '全部功能/流程/易用性测试项', '手工操作 + 浏览器/移动端'],
      ['接口测试', 'REST API、Open API 测试项', 'Postman、curl、JUnit/MockMvc 自动化脚本'],
      ['安全测试', '鉴权、权限、审计测试项', '多角色账号对比、未授权访问验证'],
      ['对比测试', '大屏指标一致性测试项', '后台源数据与前端展示抽样核对'],
      ['探索性测试', '冒烟及 UAT 阶段', '测试人员依据业务经验补充场景'],
    ]),

    h2('4.2  计划执行的测试'),
    p('本条应标识计划执行的测试项。每个测试项应有唯一标识，描述测试用例的集合；具体用例见 STD。'),

    h3('4.2.1  静态检查'),
    p('本条应标识计划执行的静态检查活动（若适用）。'),
    tbl(['检查项标识', '检查内容', '方法', '通过准则'], [
      ['SI-001', '交付文档完整性检查', '文档清单核对', 'STP/STD/部署手册/需求文档齐全'],
      ['SI-002', '需求可追溯性检查', '需求-用例矩阵核对', '312 条用例与合同功能 100% 对应'],
      ['SI-003', '测试环境配置检查', '环境确认单', '6 个 CSCI 访问地址及账号可用'],
    ]),

    h3('4.2.2  动态测试'),
    p('本条应标识计划执行的动态测试项，按 CSCI 汇总如下（各现场明细见 3.x.9）：'),
    tbl(['CSCI', '测试现场', '测试项数', '计划用例数', '主要测试内容'], [
      ['BQ-BRAIN-CLIENT', '§3.1', '6', '86', '系统管理、交易市场、疫病诊疗、标准政策、产业数据等'],
      ['BQ-BRAIN-SCREEN', '§3.2', '4', '32', '大屏各专题展示、数据一致性、Open API 集成'],
      ['BQ-BRAIN-H5', '§3.3', '5', '48', '便民服务、预约问诊、AI 助手、兼容性'],
      ['BQ-BRAIN-JY', '§3.4', '4', '38', '供应商/承销商业务、角色隔离、行情结算'],
      ['BQ-SHOP-CLIENT', '§3.5', '5', '58', '平台审核、店铺经营、库存售后、Open API'],
      ['BQ-SHOP-APP', '§3.6', '5', '50', '浏览购物、下单支付、订单售后、会员入驻'],
      ['合计', '—', '29', '312', '—'],
    ]),
    p('全部 29 个测试项、312 条测试用例的标识、名称及与需求的对应关系见附录 A；《软件测试说明(STD)》给出 60 条代表性用例的详细测试过程，其余用例按 STD 附录 A 及模块测试用例文档执行。'),

    h1('5  测试进度'),
    p('本章应给出合格性测试活动的进度安排，包括各阶段起止时间、工作内容、参与方及交付物。'),
    tbl(['阶段', '计划起止时间', '工作内容', '参与方', '输出物'], [
      ['T1 计划评审', '2026-05-18～05-19', 'STP/STD 评审、环境确认、账号开通', '需方、监理、承建方、测试组', 'STP（评审版）、环境确认单'],
      ['T2 冒烟测试', '2026-05-20', '6 个 CSCI 核心链路快速验证', '测试组、承建方', '冒烟测试记录'],
      ['T3 合格性测试', '2026-05-21～05-29', '按 STD 执行 312 条用例', '测试组', '测试记录、缺陷台账'],
      ['T4 集成测试', '2026-05-27～05-28', '大屏↔商城 Open API 联调', '测试组、承建方', '集成测试记录'],
      ['T5 回归测试', '2026-05-30～06-01', '缺陷修复后回归验证', '测试组、承建方', '回归测试记录'],
      ['T6 验收测试(UAT)', '2026-06-02～06-06', '需方/监理见证、签认 STR', '需方、监理、测试组', 'STR、验收意见'],
    ]),
    p('若测试进度因环境故障、重大缺陷或需方要求调整，由测试负责人提出变更申请，经监理及需方书面确认后执行，并更新本计划及 STD 相关章节。'),

    h1('6  测试终止条件'),
    p('本章应给出终止全部或部分合格性测试活动的条件。'),
    p('满足以下全部条件时，可终止合格性测试并进入 UAT/验收阶段：'),
    itemLetter('a', '312 条测试用例已全部执行完毕，总体通过率 ≥ 98%，核心业务流程（登录、权限、主业务闭环）100% 通过；'),
    itemLetter('b', '无致命、严重缺陷遗留；一般缺陷已修复或经需方书面确认可延期处理；'),
    itemLetter('c', '跨系统 Open API 集成测试通过，大屏与商城统计数据口径一致；'),
    itemLetter('d', '性能指标（管理端页面 ≤ 3s、常规 API ≤ 2s）在集成测试环境满足要求；'),
    itemLetter('e', '安全测试无高危漏洞，身份认证、权限控制、操作审计有效；'),
    itemLetter('f', 'STR 编制完成，测试记录、缺陷台账完整，监理及需方对测试充分性无异议。'),
    p('出现以下情形时，应暂停或终止当前轮次测试，待问题解决后重新启动：'),
    bullet('测试环境不可用且 4 小时内无法恢复；'),
    bullet('发现致命缺陷导致核心业务无法继续测试；'),
    bullet('需方或监理书面要求暂停测试。'),

    h1('7  需求的可追踪性'),
    p('本章应描述需求与测试项/测试用例之间的可追溯关系。'),

    h2('7.1  正向追溯'),
    p('本条应给出从每个测试项/测试用例到所涉及需求的可追溯性。'),
    tbl(['CSCI', '测试项数', '用例数', '需求/doc 引用'], [
      ['BQ-BRAIN-CLIENT', '6', '86', 'doc/各业务模块功能需求、REQ-CL-*'],
      ['BQ-BRAIN-SCREEN', '4', '32', 'doc/大屏/、ruoyi-screen/doc/、REQ-SC-*'],
      ['BQ-BRAIN-H5', '5', '48', 'ruoyi-ui-app/doc/、doc/app/、REQ-H5-*'],
      ['BQ-BRAIN-JY', '4', '38', 'doc/交易市场平台/、doc/app/、REQ-JY-*'],
      ['BQ-SHOP-CLIENT', '5', '58', 'baqing-shop/doc/平台后台、店铺后台、REQ-SH-*'],
      ['BQ-SHOP-APP', '5', '50', 'baqing-shop/doc/消费者APP/、REQ-AP-*'],
      ['合计', '29', '312', '合同功能清单 + SRS，覆盖率 100%'],
    ]),
    p('每条测试用例在 STD 4.x.y.1「涉及的需求」中标注对应需求编号；测试项与用例的对应关系见各现场 3.x.9 及附录 A。'),

    h2('7.2  逆向追溯'),
    p('本条应给出从每个需求到涉及它的测试用例的可追溯性。'),
    p('合同功能清单及 SRS 中每一条功能需求，均至少对应附录 A 中一条测试用例；核心业务流程需求对应 STD 第 4 章 60 条代表性用例。跨系统 Open API 需求由 TI-SC-004（大屏集成）与 TI-SH-005（商城 Open API）共同覆盖。需求-用例追踪矩阵作为项目档案单独维护，本 STP 以附录 A 统计表及 STD 第 5 章追溯说明为准。'),

    h1('8  注解'),
    p('本章给出有助于理解本文档的术语、缩略语及背景信息。'),

    h2('8.1  术语与缩略语'),
    p('本条列出本文档及配套 STD/STR 中使用的术语与缩略语。'),
    tbl(['缩略语/术语', '含义'], [
      ['STP', 'Software Test Plan，软件测试计划'],
      ['STD', 'Software Test Description，软件测试说明'],
      ['STR', 'Software Test Report，软件测试报告'],
      ['CSCI', 'Computer Software Configuration Item，计算机软件配置项'],
      ['UAT', 'User Acceptance Test，用户验收测试'],
      ['RBAC', 'Role-Based Access Control，基于角色的访问控制'],
      ['JWT', 'JSON Web Token，身份认证令牌'],
      ['SRS', 'Software Requirements Specification，软件需求规格说明'],
      ['SDP', 'Software Development Plan，软件开发计划'],
      ['Open API', '对外数据开放接口（本项目指农资商城 /api/open/stats/*）'],
      ['H5', 'HTML5 移动端 Web 应用'],
      ['合格性测试', '验证 CSCI 是否满足规定需求的测试，本项目指功能/接口/安全/集成等测试'],
      ['测试项', '测试用例的集合，具有唯一标识，见各现场 3.x.9'],
      ['需方', '巴青县人民政府及项目主管部门，为本项目建设与验收的组织方'],
    ]),

    h2('8.2  背景信息'),
    p('本条提供有助于理解本测试计划编制背景的项目信息。'),
    p('巴青牧业大脑及巴青农资商城信息化建设项目，是西藏自治区那曲市巴青县落实数字乡村战略、推动牦牛产业高质量发展的重点政务信息化工程。项目建设目标是构建覆盖畜牧资源管理、疫病诊疗、养殖标准、牦牛交易市场、产业政策、共同富裕成果展示、产业数据决策分析及农资电商交易的综合性数字化平台。'),
    p('本 STP 在集成测试环境（117.180.211.14、117.180.211.17）上组织实施合格性测试，测试结论将作为项目竣工验收及成果移交的重要依据。测试工作接受项目监理单位监督，关键节点需需方代表见证并签认。'),

    h1('附录'),
    p('附录可用来提供那些为便于文档维护而单独出版的信息(例如图表、分类数据)。为便于处理，附录可单独装订成册。附录应按字母顺序(A,B等)编排。'),

    h1('附录 A  测试项及用例统计明细'),
    p('本附录汇总 6 个 CSCI、29 个测试项及 312 条测试用例的统计信息，与第 3 章 3.x.9、第 4 章 4.2 及 STD 保持一致。'),
    tbl(['CSCI', '测试项数', '业务模块数', '计划用例数', '测试现场'], [
      ['BQ-BRAIN-CLIENT', '6', '18', '86', '§3.1'],
      ['BQ-BRAIN-SCREEN', '4', '5', '32', '§3.2'],
      ['BQ-BRAIN-H5', '5', '8', '48', '§3.3'],
      ['BQ-BRAIN-JY', '4', '6', '38', '§3.4'],
      ['BQ-SHOP-CLIENT', '5', '10', '58', '§3.5'],
      ['BQ-SHOP-APP', '5', '5', '50', '§3.6'],
      ['合计', '29', '52', '312', '—'],
    ]),
    p('全部 312 条测试用例唯一标识及名称目录见《软件测试说明(STD)》附录 A。'),

    h1('附录 B  测试环境拓扑及访问说明'),
    p('本附录描述集成测试环境部署拓扑及各 CSCI 访问路径，供测试人员及验收组现场使用。'),
    tbl(['部署节点', 'IP/域名', '子路径', '后端服务', '端口'], [
      ['巴青牧业大脑', '117.180.211.14', '/client/', 'baqing-admin', '8010'],
      ['巴青牧业大脑', '117.180.211.14', '/screen/', 'baqing-admin /bigScreen/*', '8010'],
      ['巴青牧业大脑', '117.180.211.14', '/bqH5/', 'baqing-admin /app/*', '8010'],
      ['巴青牧业大脑', '117.180.211.14', '/bqjy/', 'baqing-admin /app/*', '8010'],
      ['巴青农资商城', '117.180.211.17', '/shopClient/', 'baqing-shop /agri/*', '8020'],
      ['巴青农资商城', '117.180.211.17', '/bqShop/', 'baqing-shop /api/*', '8020'],
      ['跨系统接口', '117.180.211.17', '/api/open/stats/*', 'baqing-shop Open API', '8020'],
    ]),
    p('网络拓扑：测试客户端经 Nginx 反向代理访问各前端应用；牧业大脑大屏通过 HTTP 客户端调用农资商城 Open API 获取交易统计数据；两系统共用 MySQL 8.0、Redis 6.x 运行于各自服务器。'),

    h1('附录 C  集成测试环境及账号清单'),
    p('本附录汇总全部集成测试环境访问地址及测试账号（脱敏模拟账号，仅供本项目合格性测试使用）。'),
    tbl(['序号', '子系统', '访问地址', '用户名', '密码', '角色'], [
      ['1', '牧业大脑-运营管理后台', 'http://117.180.211.14/client/', 'admin', 'admin123', '超级管理员'],
      ['2', '牧业大脑-可视化大屏', 'http://117.180.211.14/screen/', 'admin', 'admin123', '大屏管理员'],
      ['3', '牧业大脑-牧民综合服务H5', 'http://117.180.211.14/bqH5/', 'ceshi3', '123456', '牧民/普通用户'],
      ['4', '牧业大脑-交易市场H5', 'http://117.180.211.14/bqjy/', 'gys0014', '123456', '供应商'],
      ['5', '牧业大脑-交易市场H5', 'http://117.180.211.14/bqjy/', 'cxs0012', '123456', '承销商'],
      ['6', '农资商城-平台/店铺后台', 'http://117.180.211.17/shopClient/', 'admin', 'admin123', '平台管理员'],
      ['7', '农资商城-消费者H5', 'http://117.180.211.17/bqShop/', 'test', '123456', 'C端会员/买家'],
    ]),

    h1('附录 D  缺陷分级与处置规则'),
    p('本附录规定合格性测试期间缺陷分级标准及处置要求，作为 STR 缺陷统计及竣工验收判定的统一依据。'),
    tbl(['级别', '定义', '处置要求', '是否允许遗留'], [
      ['致命', '系统崩溃、数据丢失、核心功能完全不可用', '立即修复，修复后全量回归', '否'],
      ['严重', '主要功能错误、安全越权、业务流程无法闭环', '优先修复，修复后回归相关用例', '否'],
      ['一般', '次要功能缺陷、界面问题、非核心数据展示异常', '计划修复或经需方确认延期', '需书面确认'],
      ['轻微', '文字、排版、提示语等不影响功能的瑕疵', '可纳入后续版本优化', '可遗留'],
    ]),
  ];
}

const children = [
  ...coverBlock(),
  title('7.3  软件测试计划(STP)'),
  title('巴青牧业大脑及巴青农资商城信息化建设项目'),
  p(''),

  h1('说明：'),
  p('1.《软件测试计划》(STP)描述对计算机软件配置项 CSCI、系统或子系统进行合格性测试的计划安排。内容包括进行测试的环境、测试工作的标识及测试工作的时间安排等。'),
  p('2.通常每个项目只有一个 STP，使得需方能够对合格性测试计划的充分性作出评估。'),
  h1('软件测试计划的正文的格式如下：'),

  h1('1  引言'),
  p('本章应分成以下几条。'),

  h2('1.1  标识'),
  p('本条应包含本文档适用的系统和软件的完整标识，(若适用)包括标识号、标题、缩略词语、版本号和发行号。'),
  tbl(['项目', '内容'], [
    ['文档标识号', 'BQ-STP-V1.0'],
    ['文档标题', '巴青牧业大脑软件测试计划'],
    ['项目名称', '巴青牧业大脑及巴青农资商城信息化建设项目'],
    ['建设地点', '西藏自治区那曲市巴青县'],
    ['缩略语', 'STP—软件测试计划；STD—软件测试说明；STR—软件测试报告；CSCI—计算机软件配置项；UAT—用户验收测试'],
    ['文档版本号', 'V1.0'],
    ['发行号', '001'],
    ['编制日期', '2026年6月'],
    ['被测软件版本', 'V1.0'],
  ]),
  p('被测软件配置项（CSCI）完整标识如下：'),
  tbl(['CSCI 标识', '配置项名称', '版本', '承制方', '部署路径/说明'], [
    ['BQ-BRAIN-CLIENT', '巴青牧业大脑—运营管理后台', 'V1.0', '项目承建单位', '117.180.211.14/client/'],
    ['BQ-BRAIN-SCREEN', '巴青牧业大脑—数字畜牧可视化大屏', 'V1.0', '项目承建单位', '117.180.211.14/screen/'],
    ['BQ-BRAIN-H5', '巴青牧业大脑—牧民综合服务移动端', 'V1.0', '项目承建单位', '117.180.211.14/bqH5/'],
    ['BQ-BRAIN-JY', '巴青牧业大脑—牦牛交易市场移动端', 'V1.0', '项目承建单位', '117.180.211.14/bqjy/'],
    ['BQ-SHOP-CLIENT', '巴青农资商城—平台及店铺管理后台', 'V1.0', '项目承建单位', '117.180.211.17/shopClient/'],
    ['BQ-SHOP-APP', '巴青农资商城—消费者移动端', 'V1.0', '项目承建单位', '117.180.211.17/bqShop/'],
  ]),

  h2('1.2  系统概述'),
  p('本条应简述本文档适用的系统和软件的用途。它应描述系统与软件的一般性质；概述系统开发、运行和维护的历史；标识项目的投资方、需方、用户、开发方和支持机构；标识当前和计划的运行现场；并列出其他有关文档。'),
  p('巴青牧业大脑及巴青农资商城信息化建设项目，是巴青县落实数字乡村战略、推动牦牛产业高质量发展的重要政务信息化工程。系统建设目标是构建覆盖畜牧资源管理、疫病诊疗服务、养殖标准体系、牦牛交易市场、产业政策服务、共同富裕成果展示、产业数据决策分析及农资电商交易的综合性数字化平台，实现“数据一屏观、业务一网办、服务一站式”。'),
  p('系统一般性质：采用 B/S 与移动端 H5 相结合的架构；后端基于 Spring Boot，前端基于 Vue/uni-app；数据层 MySQL + Redis；统一身份认证与 RBAC 权限控制；关键操作留痕审计；两系统通过 Open API 实现交易统计数据互联互通，支撑大屏决策展示。'),
  p('开发历史：项目于 2025 年立项，2025 年 12 月完成需求确认与总体设计，2026 年上半年完成开发集成，当前处于集成测试与验收准备阶段。'),
  tbl(['角色', '单位/机构', '职责'], [
    ['投资方/需方', '巴青县人民政府（项目主管部门）', '提出建设需求、组织验收、确认测试结论'],
    ['用户', '县农牧局、各乡镇、合作社、牧民、商户及消费者', '业务使用与验收见证'],
    ['开发方/承制方', '项目承建单位', '软件开发、部署、缺陷修复、配合测试'],
    ['测试组织', '第三方检测机构（或项目测试组）', '编制并执行 STP/STD，出具 STR'],
    ['支持机构', '项目监理单位', '监督测试过程合规性、见证关键节点'],
  ]),
  p('当前运行现场：117.180.211.14（巴青牧业大脑集成测试环境）、117.180.211.17（巴青农资商城集成测试环境）。计划运行现场：政务云/政务专网生产环境（竣工验收后迁移部署）。'),
  p('有关文档：《项目建设方案》《招标文件/采购合同》《软件研制任务书》《软件需求规格说明(SRS)》《软件测试说明(STD)》《软件测试报告(STR)》《系统部署手册》、各业务模块功能需求及测试用例文档。'),

  h2('1.3  文档概述'),
  p('本条应概括本文档的用途与内容，并描述与其使用有关的保密性或私密性要求。'),
  p('本文档依据 GJB 438C-2021《军用软件开发文档通用要求》第 7.3 节、GB/T 8567-2006《计算机软件文档编制规范》及项目采购合同、招标文件约定，规定巴青牧业大脑及巴青农资商城 V1.0 合格性测试的总体计划，明确测试环境、测试现场、组织人员、培训安排及与验收的衔接关系，作为组织实施测试、开展监理见证、编制 STD/STR 及项目竣工验收的依据。'),
  p('本计划覆盖 6 个软件配置项。配套《软件测试说明(STD)》按合同功能清单及需求规格说明设计测试用例，需求可追溯覆盖率目标 100%。测试工作包括：功能测试、接口测试、权限与安全测试、兼容性测试、易用性测试、跨系统集成测试及回归测试。'),
  p('合格性测试通过准则（竣工验收判定依据）：'),
  tbl(['序号', '验收指标', '判定标准'], [
    ['1', '需求覆盖', '合同及 SRS 规定功能点 100% 纳入测试范围，用例与需求双向可追溯'],
    ['2', '用例通过率', '总体测试用例通过率 ≥ 98%；核心业务流程（登录、权限、主业务闭环）100% 通过'],
    ['3', '缺陷遗留', '无致命、严重缺陷遗留；一般缺陷有明确修复计划或经需方书面确认可延期'],
    ['4', '性能（常规）', '管理端页面响应 ≤ 3s；常规 API 响应 ≤ 2s（集成测试环境）'],
    ['5', '安全', '身份认证、权限控制、操作日志审计有效；无越权访问、SQL 注入等高危漏洞'],
    ['6', '集成', '牧业大脑大屏与农资商城 Open API 数据联调正确，指标口径一致'],
    ['7', '文档', 'STR 测试报告、缺陷台账、测试记录完整，监理及需方签认'],
  ]),
  p('保密性要求：本文档及附件含系统部署地址、测试账号等敏感信息，属政务项目内部资料，仅限项目业主、监理、承建方及授权检测机构使用，未经授权不得复制、传播或用于本项目以外用途。'),

  h2('1.4  与其他计划的关系'),
  p('(若有)本条应描述本计划和有关的项目管理计划之间的关系。'),
  p('本文档与项目管理体系文件的关系如下：'),
  tbl(['相关计划/文档', '关系说明'], [
    ['《政府采购合同/项目建设合同》', '规定建设范围、功能指标、验收标准及付款节点，是本计划的根本依据'],
    ['《软件研制任务书》', '明确 CSCI 划分及交付物，测试范围与之对齐'],
    ['《软件需求规格说明(SRS)》', '需求基线，STD 测试用例逐条追溯'],
    ['《软件测试说明(STD)》', '在 STP 基础上细化测试用例、步骤及预期结果'],
    ['《软件测试报告(STR)》', '记录 STP/STD 规定的测试执行结果及验收结论'],
    ['《项目开发计划(SDP)》', '开发进度与版本发布计划，测试进度与之协调'],
    ['《项目监理规划》', '监理见证测试过程，审核 STP/STR 等关键文档'],
  ]),
  p('测试进度与项目里程碑协调安排如下：'),
  tbl(['阶段', '计划时间', '主要工作', '参与方', '输出物'], [
    ['T1 计划评审', '2026-05-18～05-19', 'STP 评审、环境确认、账号开通', '需方、监理、承建方、测试组', 'STP（评审版）、环境确认单'],
    ['T2 冒烟测试', '2026-05-20', '6 个 CSCI 核心链路快速验证', '测试组、承建方', '冒烟测试记录'],
    ['T3 合格性测试', '2026-05-21～05-29', '按 STD 执行全量用例', '测试组', '测试记录、缺陷台账'],
    ['T4 集成测试', '2026-05-27～05-28', '跨系统 Open API、大屏数据联调', '测试组、承建方', '集成测试记录'],
    ['T5 回归测试', '2026-05-30～06-01', '缺陷修复后全量/抽样回归', '测试组、承建方', '回归测试记录'],
    ['T6 验收测试(UAT)', '2026-06-02～06-06', '需方/监理见证、确认 STR', '需方、监理、测试组', 'STR、验收意见'],
  ]),

  h2('1.5  基线'),
  p('给出编写本软件测试计划的输入基线，如软件需求规格说明。'),
  bullet('需求基线：《软件需求规格说明》V1.0、各业务模块功能需求文档（doc/ 目录）、《农资商城功能清单》V2.0（baqing-shop/doc/）；'),
  bullet('设计基线：《系统总体技术方案》V1.0、《数据库设计说明》V1.0；'),
  bullet('代码基线：huimv-baqing、huimv-baqing-shop/baqing-shop 代码仓库指定 Tag v1.0.0-test；'),
  bullet('数据基线：sql/ 目录初始化脚本及测试数据脚本（脱敏）；'),
  bullet('环境基线：《系统部署手册》及 117.180.211.14、117.180.211.17 集成测试环境部署清单。'),

  h1('2  引用文件'),
  p('本章应列出本文档引用的所有文档的编号、标题、修订版本和日期。本章还应标识不能通过正常的供货渠道获得的所有文档的来源。'),
  tbl(['编号', '标题', '修订版本', '日期', '来源'], [
    ['REF-01', 'GJB 438C-2021 军用软件开发文档通用要求', '2021版', '2021-08', '国家军用标准'],
    ['REF-02', 'GB/T 8567-2006 计算机软件文档编制规范', '2006版', '2006-07', '国家标准'],
    ['REF-03', 'GB/T 25000.51-2016 系统与软件质量模型', '2016版', '2016-10', '国家标准'],
    ['REF-04', 'GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求', '2019版', '2019-08', '国家标准'],
    ['REF-05', '巴青牧业大脑及农资商城信息化建设采购合同', 'V1.0', '2025-12', '项目档案'],
    ['REF-06', '软件需求规格说明及功能需求文档汇编', 'V1.0', '2026-05', '项目承建单位'],
    ['REF-07', '巴青牧业大脑软件测试说明(STD)', 'V1.0', '2026-06', 'test/'],
    ['REF-08', '系统部署手册及环境配置说明', 'V1.0', '2026-05', '项目档案'],
    ['REF-09', '农资商城功能清单', 'V2.0', '2026-05', 'baqing-shop/doc/'],
  ]),

  h1('3  软件测试环境'),
  p('本章应分条描述每一预计的测试现场的软件测试环境。可以引用软件开发计划(SDP)中所描述的资源。'),
  p('本项目合格性测试共设置 6 个测试现场，分别对应 6 个软件配置项。巴青牧业大脑相关现场部署于 117.180.211.14，巴青农资商城相关现场部署于 117.180.211.17。各现场通过 Nginx 按子路径分发前端应用，共用 MySQL 8.0、Redis 6.x 等基础中间件。'),
  p('测试环境拓扑概述（GJB 438C 要求）：测试客户端（PC/移动终端）经政务专网或互联网访问 Nginx 反向代理；117.180.211.14 部署 baqing-admin 及 4 个前端应用（/client/、/screen/、/bqH5/、/bqjy/）；117.180.211.17 部署 baqing-shop 及 2 个前端应用（/shopClient/、/bqShop/）；大屏通过 Open API（117.180.211.17/api/open/stats/*）拉取商城交易统计数据。详细拓扑见附录 B。'),
  p('集成测试环境访问地址及测试账号汇总如下：'),
  tbl(['序号', 'CSCI', '访问地址', '用户名', '密码', '角色'], [
    ['1', 'BQ-BRAIN-CLIENT', 'http://117.180.211.14/client/', 'admin', 'admin123', '运营管理后台管理员'],
    ['2', 'BQ-BRAIN-SCREEN', 'http://117.180.211.14/screen/', 'admin', 'admin123', '大屏管理员'],
    ['3', 'BQ-BRAIN-H5', 'http://117.180.211.14/bqH5/', 'ceshi3', '123456', '牧民/普通用户'],
    ['4', 'BQ-BRAIN-JY', 'http://117.180.211.14/bqjy/', 'gys0014', '123456', '交易市场—供应商'],
    ['5', 'BQ-BRAIN-JY', 'http://117.180.211.14/bqjy/', 'cxs0012', '123456', '交易市场—承销商'],
    ['6', 'BQ-SHOP-CLIENT', 'http://117.180.211.17/shopClient/', 'admin', 'admin123', '商城平台管理员'],
    ['7', 'BQ-SHOP-APP', 'http://117.180.211.17/bqShop/', 'test', '123456', '商城消费者/会员'],
  ]),
  p('各 CSCI 测试范围及测试类型汇总如下：'),
  tbl(['CSCI 标识', '测试现场', '主要测试范围', '测试类型'], [
    ['BQ-BRAIN-CLIENT', '§3.1', '系统管理/监控、交易市场平台、牧业疫病诊疗、牧业养殖科技、养殖标准体系、畜牧流通资源、产业政策、共同富裕、产业数据模型、疾病检测上报、视频监控、数据中枢、科技平台等', '功能/接口/权限/安全/审计'],
    ['BQ-BRAIN-SCREEN', '§3.2', '首页概览、畜牧资源、交易销售、共同富裕、疫病风险等大屏专题', '功能/数据一致性/展示/集成'],
    ['BQ-BRAIN-H5', '§3.3', '养殖资讯、畜牧资源、农技课堂、预约服务、在线问诊、AI 助手、牦牛行情等', '功能/兼容性/易用性'],
    ['BQ-BRAIN-JY', '§3.4', '供应商/承销商订单、行情、店铺、结算等交易市场业务', '功能/权限/流程/角色隔离'],
    ['BQ-SHOP-CLIENT', '§3.5', '平台审核、店铺经营、商品/订单/库存/售后/财务、Open API', '功能/接口/审核流程/集成'],
    ['BQ-SHOP-APP', '§3.6', '浏览搜索、购物车、下单支付、订单售后、评价、会员入驻', '功能/流程/支付(模拟)'],
  ]),

  ...siteBlock(
    1,
    '巴青牧业大脑—运营管理后台测试现场',
    '本现场用于 BQ-BRAIN-CLIENT 合格性测试。被测对象为运营管理后台 Web 应用，访问地址 http://117.180.211.14/client/，后端 baqing-admin（Spring Boot，端口 8010）。覆盖系统管理/监控、交易市场平台（供应商/承销商/订单/行情/进栏/隔离等）、牧业疫病诊疗服务（预约/接诊/医疗资源/AI 诊断）、牧业养殖科技服务（科技资源/知识库/专家预约）、养殖标准体系（饲喂/休药期/禁配/出栏等标准）、畜牧流通资源、产业政策（宣传/补贴/项目）、共同富裕（项目/成果/年度报告）、产业数据模型（牧场/草场/草畜平衡/牦牛资产/疾病预警）、疾病检测与上报、视频监控对接、牧业产业数据中枢、科技平台（网上培训/实战培训）等政务管理功能，是牧业大脑核心业务管理入口。',
    [
      '操作系统：CentOS 7 / Windows Server 2019（服务器）；Windows 10/11（测试客户端）；',
      '浏览器：Google Chrome 120+、Microsoft Edge 120+（政务办公环境常用浏览器）；',
      '被测前端：ruoyi-ui（Vue 2 + Element UI，Nginx 路径 /client/）；',
      '被测后端：baqing-admin（Spring Boot 2.7 + Spring Security + JWT，API 前缀 /prod-api）；',
      '数据库：MySQL 8.0；缓存：Redis 6.x；Web 服务器：Nginx 1.20+；',
      '任务调度：Quartz；文件存储：本地 profile 目录；',
      '扩展服务：大模型知识库 HTTP 对接（ruoyi.kb）、商城 Open API 客户端（大屏交易销售）；',
      '测试工具：Postman（接口测试）、浏览器开发者工具、项目配套自动化测试脚本（JUnit/MockMvc）。',
    ],
    [
      '应用服务器：117.180.211.14，CPU ≥ 4 核、内存 ≥ 16GB、磁盘 ≥ 500GB；',
      '测试客户端：PC × 2，CPU ≥ 4 核、内存 ≥ 8GB、分辨率 1920×1080；',
      '网络：可稳定访问 http://117.180.211.14/client/ 及后端 API。',
    ],
    [
      '《软件测试说明(STD)》及本 STP；',
      '《运营管理后台功能需求及测试用例》（doc/ 目录各模块）；',
      '脱敏测试数据：供应商、承销商、兽医、专家、机构、标准、政策、产业数据等；',
      '缺陷记录表、测试记录表、环境确认单、版本变更说明模板。',
    ],
    [['1', 'http://117.180.211.14/client/', 'admin', 'admin123', '超级管理员/平台运营']],
    '① 需方（巴青县人民政府项目主管部门）——确认测试范围、参与 UAT 见证、签认 STR；② 监理单位——审核测试过程合规性、见证关键节点；③ 项目承建单位——环境维护、缺陷修复、版本发布、业务规则讲解；④ 第三方测试组——编制 STD、执行测试、缺陷跟踪、编制 STR。',
    '测试负责人 1 名（12 人天）：5 年以上政务信息化测试经验，负责计划组织、进度协调及 STR 审核；测试工程师 2 名（各 10 人天）：负责用例执行、缺陷记录及回归；开发支持 1 名（6 人天）：环境维护与缺陷修复验证；需方业务代表 1 名（3 人天）：参与关键模块见证。测试周期：2026-05-20～2026-05-29。',
    '测试启动前组织半日（4 小时）集中培训：系统总体架构、各业务域测试范围、RBAC 权限模型、测试账号分配、缺陷分级与提交规范、政务系统安全测试要点（越权、审计、脱敏）。各重点模块测试前由承建方讲解业务规则（约 30 分钟/模块）。',
    [
      ['TI-CL-001', '系统管理与权限安全', '黑盒/接口/安全', '18', 'STD §4.1'],
      ['TI-CL-002', '交易市场平台', '黑盒/流程', '20', 'STD §4.1'],
      ['TI-CL-003', '疫病诊疗与养殖科技', '黑盒/流程', '18', 'STD §4.1'],
      ['TI-CL-004', '标准/政策/共同富裕', '黑盒', '16', 'STD §4.1'],
      ['TI-CL-005', '产业数据与资源管理', '黑盒', '10', 'STD §4.1'],
      ['TI-CL-006', '监控/数据中枢/接口', '黑盒/接口', '4', 'STD §4.1'],
    ]
  ),

  ...siteBlock(
    2,
    '巴青牧业大脑—数字畜牧可视化大屏测试现场',
    '本现场用于 BQ-BRAIN-SCREEN 合格性测试。被测对象为数字畜牧可视化大屏 Web 应用，部署路径 /screen/，前端 ruoyi-screen（Vue 3 + Vite + ECharts），后端 /bigScreen/* 接口。覆盖首页概览、畜牧资源（AI 诊断统计）、交易销售（含农资商城数据聚合）、共同富裕、疫病风险等专题，支撑县级领导决策展示。',
    [
      '浏览器：Google Chrome 120+（全屏模式，1920×1080 或 3840×2160）；',
      '被测前端：ruoyi-screen（Vue 3 + Vite + ECharts）；',
      '被测后端：baqing-admin 大屏模块 /bigScreen/*；',
      '跨系统接口：调用巴青农资商城 http://117.180.211.17 Open API（/api/open/stats/*）获取交易统计数据；',
      '外部数据：天启气象 API（按环境变量配置，测试环境可用 Mock）。',
    ],
    [
      '展示终端：PC 或大屏终端，独立显卡，分辨率 ≥ 1920×1080；',
      '网络：可访问 http://117.180.211.14/screen/ 及 117.180.211.17 Open API。',
    ],
    [
      '《大屏各模块功能需求及测试用例》（doc/大屏/ 目录）；',
      '大屏指标口径说明及 Open API 联调文档；',
      '测试记录表、数据核对清单。',
    ],
    [['1', 'http://117.180.211.14/screen/', 'admin', 'admin123', '大屏管理员']],
    '需方——指标口径确认及验收见证；监理——过程监督；承建方——数据联调及缺陷修复；测试组——执行测试及编制记录。',
    '测试工程师 1 名（8 人天）：熟悉数据可视化及指标核对；需方业务代表 1 名（2 人天）：确认指标业务含义。测试周期：2026-05-22～2026-05-23。',
    '测试前 2 小时培训：大屏布局与模块说明、数据刷新机制、与农资商城 Open API 联调方法、验收指标核对要点。',
    [
      ['TI-SC-001', '大屏鉴权与首页概览', '黑盒', '8', 'STD §4.2'],
      ['TI-SC-002', '畜牧资源/交易销售专题', '黑盒/对比', '10', 'STD §4.2'],
      ['TI-SC-003', '共同富裕/疫病风险专题', '黑盒', '8', 'STD §4.2'],
      ['TI-SC-004', '数据一致性/Open API集成', '接口/对比', '6', 'STD §4.2'],
    ]
  ),

  ...siteBlock(
    3,
    '巴青牧业大脑—牧民综合服务移动端测试现场',
    '本现场用于 BQ-BRAIN-H5 合格性测试。被测对象为牧民综合服务 H5 应用，部署路径 /bqH5/，前端 ruoyi-ui-app（uni-app）。覆盖首页九宫格、养殖资讯、畜牧资源、农技课堂、用药工具、牦牛行情、预约服务、在线问诊、AI 助手、消息及个人中心等便民服务功能。',
    [
      '移动端浏览器：微信内置浏览器、Chrome 移动设备模拟（Android/iOS）；',
      '被测前端：ruoyi-ui-app（uni-app，H5 路径 /bqH5/）；',
      '被测后端：baqing-admin /app/* 移动端接口；',
      '依赖服务：大模型 AI 对话（/v1/chat/completions 转发）、在线预约/问诊模块。',
    ],
    [
      '测试手机：Android 10+ × 2 部，屏幕 ≥ 6 英寸；或 PC 浏览器移动模拟（375×812）；',
      '网络：4G/Wi-Fi，可访问 http://117.180.211.14/bqH5/。',
    ],
    [
      '《移动端测试用例》（ruoyi-ui-app/doc/移动端测试用例.md）；',
      '各 app 模块接口说明（doc/app/ 目录）；',
      '牧民测试账号及预约/问诊测试数据。',
    ],
    [['1', 'http://117.180.211.14/bqH5/', 'ceshi3', '123456', '注册牧民/普通用户']],
    '需方——便民服务流程确认；监理——过程监督；承建方——环境及 AI 服务支持；测试组——执行测试。',
    '测试工程师 1 名（8 人天）：具备移动端 H5 及微信浏览器兼容性测试经验。测试周期：2026-05-23～2026-05-24。',
    '测试前 2 小时培训：移动端主功能路径、AI 助手与预约模块操作、易用性及兼容性测试要点。',
    [
      ['TI-H5-001', '登录/Tab/双语i18n', '黑盒', '8', 'STD §4.3'],
      ['TI-H5-002', '资讯/资源/课堂/用药/行情', '黑盒', '12', 'STD §4.3'],
      ['TI-H5-003', '预约服务全链路', '黑盒/流程', '12', 'STD §4.3'],
      ['TI-H5-004', '问诊/AI助手/消息/个人中心', '黑盒', '10', 'STD §4.3'],
      ['TI-H5-005', '微信/浏览器兼容性', '兼容性', '6', 'STD §4.3'],
    ]
  ),

  ...siteBlock(
    4,
    '巴青牧业大脑—牦牛交易市场移动端测试现场',
    '本现场用于 BQ-BRAIN-JY 合格性测试。被测对象为牦牛交易市场 H5 应用，部署路径 /bqjy/，前端 ruoyi-jiaoyi（uni-app）。覆盖供应商、承销商两种角色的首页、订单管理、行情查看、店铺及结算等业务，验证多角色权限隔离及与后台交易市场模块的数据联动。',
    [
      '移动端浏览器：微信内置浏览器、Chrome 移动模式；',
      '被测前端：ruoyi-jiaoyi（uni-app，路径 /bqjy/）；',
      '被测后端：/app/supplier/*、/app/distributor/*、/app/yakMarket/* 等；',
      '关联后台：运营管理后台交易市场模块（tradeMarket）。',
    ],
    [
      '测试手机：Android 10+ × 2 部；',
      '网络：可访问 http://117.180.211.14/bqjy/。',
    ],
    [
      '《交易市场功能需求及测试用例》（doc/交易市场平台/、doc/app/ 目录）；',
      '供应商/承销商测试主档、订单及行情测试数据。',
    ],
    [
      ['1', 'http://117.180.211.14/bqjy/', 'gys0014', '123456', '供应商'],
      ['2', 'http://117.180.211.14/bqjy/', 'cxs0012', '123456', '承销商'],
    ],
    '需方交易市场业务代表——业务规则确认及见证；监理——过程监督；承建方——数据支持；测试组——分角色执行测试。',
    '测试工程师 1 名（8 人天）：分别使用供应商、承销商账号验证权限隔离；需方代表 1 名（2 人天）。测试周期：2026-05-24～2026-05-25。',
    '测试前 2 小时培训：供应商/承销商角色差异、订单状态流转、与后台数据联动规则及验收核对要点。',
    [
      ['TI-JY-001', '供应商角色业务', '黑盒/流程', '12', 'STD §4.4'],
      ['TI-JY-002', '承销商角色业务', '黑盒/流程', '12', 'STD §4.4'],
      ['TI-JY-003', '角色隔离与权限', '安全/黑盒', '6', 'STD §4.4'],
      ['TI-JY-004', '行情/进栏/结算', '黑盒', '8', 'STD §4.4'],
    ]
  ),

  ...siteBlock(
    5,
    '巴青农资商城—平台及店铺管理后台测试现场',
    '本现场用于 BQ-SHOP-CLIENT 合格性测试。被测对象为农资商城 Web 管理端，访问地址 http://117.180.211.17/shopClient/，后端 baqing-shop（Spring Boot，端口 8020）。覆盖平台后台（商户入驻审核、店铺/商品审核、订单监管、商城设置、财务管理—资金概览/提现审核/提现汇总、外部 Open API 数据统计）及店铺商家后台（商品发布、订单管理/发货、库存管理—入库/出库/调整/查询/日志、售后管理、财务中心—账户/提现/资金概览、配送设置），并验证 /api/open/stats/* 对外统计数据服务供牧业大脑大屏调用。',
    [
      '浏览器：Google Chrome 120+、Microsoft Edge 120+；',
      '被测前端：ruoyi-ui（Vue 2，路径 /shopClient/）；',
      '被测后端：baqing-shop（Spring Boot 2.7，API 前缀 /agri/*，端口 8020）；',
      '数据库：MySQL 8.0；缓存：Redis 6.x；',
      '支付：微信支付（测试环境模拟通道）；',
      '对外接口：/api/open/stats/*（供牧业大脑大屏调用）；',
      '安全组件：JWT 认证、RBAC 权限、操作日志审计。',
    ],
    [
      '应用服务器：117.180.211.17，Nginx 反代 /shopClient/；',
      '测试客户端：PC × 2，1920×1080 分辨率。',
    ],
    [
      '《农资商城功能清单 V2.0》（baqing-shop/doc/）；',
      '平台后台、店铺后台各模块需求及测试用例；',
      '商户/店铺/商品/订单测试数据；Open API Token 配置文档。',
    ],
    [['1', 'http://117.180.211.17/shopClient/', 'admin', 'admin123', '平台管理员']],
    '需方——电商监管流程确认及 UAT 见证；监理——过程监督；承建方——环境、支付 Mock 及缺陷修复；测试组——分平台/店铺流程执行测试。',
    '测试工程师 2 名（各 8 人天）：分别负责平台审核与商家经营流程；开发支持 1 名（6 人天）。测试周期：2026-05-25～2026-05-26。',
    '测试前半日（4 小时）培训：商城业务架构、平台/店铺权限模型、订单状态机、支付与售后规则、Open API 接口规范。',
    [
      ['TI-SH-001', '平台入驻/店铺/商品审核', '黑盒/流程', '16', 'STD §4.5'],
      ['TI-SH-002', '平台订单/财务/商城设置', '黑盒', '14', 'STD §4.5'],
      ['TI-SH-003', '店铺商品/订单/发货', '黑盒/流程', '14', 'STD §4.5'],
      ['TI-SH-004', '库存/售后/财务中心', '黑盒', '10', 'STD §4.5'],
      ['TI-SH-005', 'Open API/安全接口', '接口/安全', '4', 'STD §4.5'],
    ]
  ),

  ...siteBlock(
    6,
    '巴青农资商城—消费者移动端测试现场',
    '本现场用于 BQ-SHOP-APP 合格性测试。被测对象为消费者 H5 应用，部署路径 /bqShop/，前端 shop-app（uni-app Vue3）。覆盖首页浏览、分类搜索、购物车、下单支付、订单跟踪、确认收货、售后申请、商品评价、会员注册登录及商户入驻申请等 B2C 电商全流程。',
    [
      '移动端浏览器：微信内置浏览器（支付场景）、Chrome 移动模式；',
      '被测前端：shop-app（uni-app Vue3，路径 /bqShop/）；',
      '被测后端：baqing-shop /api/* 会员端接口；',
      '支付：微信 JSAPI（测试环境模拟通道，验证业务逻辑）。',
    ],
    [
      '测试手机：Android 10+ × 2 部，安装微信客户端；',
      '网络：可访问 http://117.180.211.17/bqShop/。',
    ],
    [
      '消费者端各模块需求及测试用例（baqing-shop/doc/消费者APP/）；',
      '已上架商品、店铺、运费模板测试数据；会员账号及收货地址数据。',
    ],
    [['1', 'http://117.180.211.17/bqShop/', 'test', '123456', 'C 端会员/买家']],
    '需方——购物流程确认；监理——过程监督；承建方——支付 Mock 及数据支持；测试组——执行全流程测试。',
    '测试工程师 1 名（8 人天）：覆盖完整购物流程及售后场景。测试周期：2026-05-26～2026-05-27。',
    '测试前 2 小时培训：消费者端主流程、支付模拟通道说明、售后类型区分及验收测试要点。',
    [
      ['TI-AP-001', '会员登录/首页/搜索', '黑盒', '10', 'STD §4.6'],
      ['TI-AP-002', '商品详情/购物车', '黑盒', '10', 'STD §4.6'],
      ['TI-AP-003', '下单/支付流程', '黑盒/流程', '10', 'STD §4.6'],
      ['TI-AP-004', '订单/物流/确认收货', '黑盒/流程', '10', 'STD §4.6'],
      ['TI-AP-005', '售后/评价/商户入驻', '黑盒/流程', '10', 'STD §4.6'],
    ]
  ),

  ...chaptersAfterEnv(),

  p(''),
  p('—— 文档结束 ——'),
];

const doc = new Document({
  title: '巴青牧业大脑软件测试计划(STP)',
  creator: '项目第三方测试组',
  description: '巴青牧业大脑及巴青农资商城合格性测试计划（GJB 438C）',
  sections: [{ properties: {}, children }],
});

const outPath = path.join(__dirname, '巴青牧业大脑软件测试计划(STP).docx');
const tmpPath = path.join(__dirname, '_stp_gen_tmp.docx');
Packer.toBuffer(doc).then(buffer => {
  try {
    fs.writeFileSync(outPath, buffer);
    console.log('Generated:', outPath);
  } catch (e) {
    if (e.code === 'EBUSY') {
      fs.writeFileSync(tmpPath, buffer);
      console.log('Target locked, written to:', tmpPath);
      console.log('Close STP.docx and rename _stp_gen_tmp.docx if needed.');
    } else throw e;
  }
}).catch(err => {
  console.error(err);
  process.exit(1);
});
