# Safe Test Report Generator

> 根据客户信息、样品信息、检测时间、测试说明、现场图片及 CSV/TXT 测试数据，生成严格复现“生成报告示范.pdf”可见版式的正式中文检测报告 DOCX。只要用户提到按检测报告示范/PDF/模板生成报告、要求首页陕西电子/长岭电气标识、目录点线与页码、字体字号颜色一致，或提供 RCS、远场扫描、反射损耗、复介电常数、屏蔽效能数据要求生成 Word 报告，就应使用本 Skill。支持六类测试数据部分缺省；遇到缺失、歧义或不一致时必须询问，不得补造数据。

- Skill: `ganyangyu/safe-test-report-generator` (Agent Skill, multi-file: 17 files)
- Install (CLI): `npx skillmds@latest add ganyangyu/safe-test-report-generator`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ganyangyu/safe-test-report-generator/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: Ganyangyu (https://skillmd.com/u/ganyangyu)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/ganyangyu/safe-test-report-generator

---


# Test Report Generator

根据新项目数据生成正式 `.docx` 检测报告。`assets/reference.pdf` 是可见版式的最高依据，`assets/reference.docx` 是可编辑结构参考。开始生成前必须完整阅读 `references/pdf-visual-spec.md`。报告曲线必须调用 `$plot-from-data` 的 `line_training_curve` 视觉体系绘制；结果分析和结论必须调用 `$humanizer-zh`，采用正式技术文本模式优化。

## 版式权威顺序

1. `assets/reference.pdf`：决定整份报告的页面视觉、字体体系、页眉页脚及分页。
2. `references/pdf-visual-spec.md`：记录从 PDF 提炼的执行规则和视觉门禁。
3. `assets/reference.docx`：用户最后校正的前三页 Word 版式基准；第一页必须直接复制模板原始结构，只替换客户、样品、日期、人员等字段，禁止重新绘制封面表格、标签、段落或间距；目录缓存页码等明显错误必须修复。

封面必须直接复用 `assets/reference.docx` 第一页的原始结构。该第一页中的品牌图片、段落、表格、行高、间距、对齐和字体均不得重新绘制；只替换客户、样品、日期、人员等字段内容。品牌图片仍必须与 `assets/brand-header-from-pdf.png` 字节一致。不得复制参考报告的签字、印章或旧项目照片。

封面排版还必须遵守：除主标题外汉字为宋体小四；英文为 Times New Roman 10 号并放在对应汉字正下方；左列统一左对齐；编制/审核/批准使用同一左列结构，但右侧不得自动填入姓名，必须留给用户手写签字；审核行右侧固定保留“检测报告专用章”，沿用模板原位置并与上方日期值列对齐；编制行和批准行右侧为空。客户确认提示紧接在样品数量之后。说明页声明和设备部分用宋体四号；“检测地点：”“环境条件：”必须带中文全角冒号，信息区与上方说明正文使用相同左边界，标签及内容全部左对齐，并使用宋体小四。目录文字和页码使用宋体四号加粗；点引导线单独使用约 7.5 pt，形成更小、更密的圆点。正文页眉报告编号使用黑色宋体小四。

报告编号默认由生成器自动分配为 `SCXL-YYYYMMDD-N`。日期取生成当天，`N` 为输出目录中当天报告的最小可用顺序号；例如 2026-08-15 的第一份为 `SCXL-20260815-1`。前缀不得写成 `SXCL`。

## 必须保留的报告结构

1. 封面：检测单位、报告标题、报告编号、客户、地址、样品、规格、编号、数量、日期、编制/审核/批准空白签字位，以及固定的“检测报告专用章”文字。
2. 说明页：固定声明、检测设备、检测地点与环境条件。
3. 目录。
4. `1 试验概况`：保持示范报告的 1.1-1.9 层级。
5. `2 试验内容和结果`：仅加入本次实际提供的数据项目。
6. `3 试验中出现的问题及处理情况`。
7. `4 试验结论`。
8. `5 附件 试验数据`：CSV 项目加入完整原始数据表；远场扫描 TXT 的大矩阵只说明文件、尺寸和范围，不展开或嵌入原始矩阵。
9. 末尾使用“报告结束，以下空白”。

固定声明、品牌元素、页眉页脚、字体、字号、颜色、段落层级、目录点引导线、表格样式、题注样式、页码形式，以 `assets/reference.pdf` 为准。

## 输入

优先读取一个报告信息 JSON，字段规范见 `references/input-schema.md` 和 `assets/report-info-template.json`。用户也可以在对话中提供这些信息；将其整理成同样的结构后再生成。

数据文件支持以下六类，允许部分缺省：

- `RCS测试数据_多频点.csv`
- `反射损耗_不同厚度.csv`
- `复介电常数_样品A.csv`
- `复介电常数_样品B.csv`
- `屏蔽效能_复合材料.csv`
- `s_rcs_*.txt`：GBK 编码远场扫描数据，含文件头、`//Amplitude` 和 `//Phase` 矩阵。

允许文件名变化，但表头必须能唯一映射到 `references/data-mapping.md` 中的字段。

## 工作流

1. 列出全部输入文件并读取报告信息。
2. 校验所有必填元信息、日期顺序、CSV 表头、数值列和图片路径。
3. 对缺失或歧义项一次性向用户提问。不得用示范报告中的项目数据填补新报告。
4. 运行：

   ```powershell
   python scripts/analyze_test_data.py --input-dir <数据目录> --output-dir <工作目录>/analysis
   ```

5. 阅读生成的 `analysis.json`，核对测试项目、单位、统计量和异常警告。
6. 明确调用 `$plot-from-data`，读取其 `line_training_curve` 参考参数后运行：

   ```powershell
   python scripts/plot_report_data.py --analysis <工作目录>/analysis/analysis.json --input-dir <数据目录> --output-dir <工作目录>/plots
   ```

   该脚本是本 Skill 对 `plot-from-data` 样式的报告适配器。它保留 sans-serif、四边框、朝外刻度、无网格和白底灰框图例；不得添加原始数据中不存在的训练断点线或参考线。所有 PNG 必须为 300 dpi，并生成 `plot-manifest.json`，记录源 CSV、输出图、SHA256 和 dpi。
7. 根据 `analysis.json` 写出结果分析和结论草稿，明确调用 `$humanizer-zh` 进行正式技术文本优化。不得采用第一人称、情绪化或口语化表达。删除“测试数据统计结果显示”“测试结果表明”“综上所述”“值得注意”等套话，直接陈述数据；不得修改任何数值、单位、范围、条件和判断边界。将最终文本保存为 `humanized-text.json`。可先运行 `scripts/prepare_humanized_text.py` 生成保数值草稿，再按 `$humanizer-zh` 审阅。
8. 按 `references/pdf-visual-spec.md` 生成报告。生成脚本必须以 `assets/reference.docx` 为输入模板，保留第一页所有原始 OOXML/表格/段落/图片/行高/间距，只替换字段值；不得重新生成第一页。运行：

   ```powershell
   python scripts/generate_report.py --info <报告信息.json> --analysis <analysis.json> --plot-manifest <plot-manifest.json> --humanized-text <humanized-text.json> --input-dir <数据目录> --output <输出目录>/检测报告.docx
   ```

9. 每个测试项目按测试目的、测试步骤、测试结果、曲线图、统计分析文字的顺序编写。图像只能取自 `plot-manifest.json`，分析文字只能取自 `humanized-text.json`。
   `s_rcs_*.txt` 必须识别为 `far_field_amplitude`，不得与绝对 RCS 数据混用。正文生成角度-频率热力图、9.5/10.0/10.5 GHz 方向曲线和 0° 频响三图；Amplitude 和 Phase 原始矩阵只作完整性校验，因数据量大不在 DOCX 中展开或嵌入。纵轴和色标使用“远场幅度/dB”，不得使用 `dBsm`。
10. 结论汇总各项目的主要指标。用户未提供判定限值时，不得写“合格”“满足标准”等判定性结论。
11. 附件表使用原始 CSV 全量数据，不得抽样或省略。跨页表格重复表头。
12. 目录必须包含 1.1-1.9 和 1.8.1-1.8.2，使用细密点引导线与右对齐的动态页码字段；不得使用手写静态页码。
13. 运行结构验证：

    ```powershell
   python scripts/verify_report.py --docx <报告.docx> --info <报告信息.json> --analysis <analysis.json> --plot-manifest <plot-manifest.json> --humanized-text <humanized-text.json> --input-dir <数据目录> --brand-image assets/brand-header-from-pdf.png
    ```

14. 验证必须通过 `plots_generated_by_plot_from_data`、`plots_300_dpi_and_complete`、`conclusions_humanized` 和 `humanized_numeric_fidelity` 四项门禁。
15. 只交付 `.docx`。PDF 或渲染图片只能用于内部质量检查，不作为最终输出。
16. 生成脚本必须调用 `scripts/refresh_word_fields.ps1`，通过 Microsoft Word 刷新并保存 `PAGE`、`NUMPAGES` 和 `PAGEREF`。随后验证目录缓存页码不是全部为 `1`，再导出内部 QA PDF 并检查每一页。前三页与 `assets/reference.docx` 核对，整份报告与 `assets/reference.pdf` 核对；检查品牌图、字体颜色与大小、目录细密点线和页码、分页、图表清晰度、表格续页、页眉页脚、题注和末页。任一项不一致时修改并重新渲染。

## 数据安全规则

- 不推断不存在的测量值。
- 不把空值当作 0。
- 不擅自改变单位。
- `s_rcs_*.txt` 文件头标明“数据归一化：否”且未提供 RCS 标定时，只能按未标定远场幅度处理；不得写绝对 RCS、隐身性能提升或合格性判断。
- 不用文件名替代无法确认的样品名称。
- 发现日期逆序、非数值数据、列长度不一致、重复频点或缺失列时停止并说明。
- 图片缺失时保留明确占位并询问用户；不得使用示范报告旧图片。
- 品牌图片不属于项目现场图片，不得因用户选择“无现场照片”而省略。
- 不得复制参考 PDF 中的签字图和红色印章；它们属于旧报告认证信息。

## 输出命名

默认：`检测报告_SCXL-YYYYMMDD-N.docx`，由生成脚本按实际生成日期和当日顺序自动命名。

## 资源

- `assets/reference.docx`：用户最后校正的前三页格式示范。
- `assets/reference.pdf`：可见版式最高依据。
- `assets/brand-header-from-pdf.png`：从参考 PDF 原样提取的封面品牌图片。
- `assets/report-info-template.json`：标准信息输入示例。
- `references/input-schema.md`：元信息字段定义。
- `references/data-mapping.md`：五类 CSV 和远场扫描 TXT 的识别与统计规则。
- `references/pdf-visual-spec.md`：PDF 版式参数、目录结构与视觉门禁。
- `scripts/analyze_test_data.py`：只负责数据校验和统计分析，不绘图。
- `scripts/far_field_data.py`：解析和校验 GBK 远场扫描 TXT 的文件头、幅度矩阵和相位矩阵。
- `scripts/plot_report_data.py`：适配 `plot-from-data/line_training_curve` 视觉体系，生成 300 dpi 曲线和绘图清单。
- `scripts/prepare_humanized_text.py`：生成可供 `humanizer-zh` 正式技术文本模式审阅的保数值草稿。
- `scripts/generate_report.py`：按 PDF 视觉规范生成 DOCX，默认强制嵌入固定品牌图片。
- `scripts/verify_report.py`：核验品牌图片、目录/页码字段、附件完整性和占位符。
- `scripts/refresh_word_fields.ps1`：使用 Microsoft Word 刷新并保存目录、页码和交叉引用字段。

