فهرست منبع

feat(mdp): ship neutral layer through 1.0.565 with integration plans

Land the uncommitted neutral-layer projection, location-role scripts, and a single DDL catalog. S5_L1_002 keeps work orders without BOM; 165 inventory writes doc_qty from QtyRequired. Also include the integration task books, rules, and related docs.

Co-authored-by: Cursor <cursoragent@cursor.com>
YY968XX 1 روز پیش
والد
کامیت
c6a6d96db0
100فایلهای تغییر یافته به همراه3893 افزوده شده و 7 حذف شده
  1. 3 1
      .cursor/rules/README.md
  2. 33 0
      .cursor/rules/best-solution-default.mdc
  3. 4 2
      .cursor/rules/collaboration-scope.mdc
  4. 30 0
      .cursor/rules/impact-backtrace.mdc
  5. 7 0
      .gitignore
  6. 5 3
      AGENTS.md
  7. BIN
      WMS-barcode-1A03N54.png
  8. BIN
      WMS-qr-1A03N54.png
  9. BIN
      _uat_screenshots/UAT-CBI-01.png
  10. BIN
      _uat_screenshots/UAT-CBI-01b.png
  11. BIN
      _uat_screenshots/UAT-CBI-02.png
  12. BIN
      _uat_screenshots/UAT-CBI-02b.png
  13. BIN
      _uat_screenshots/UAT-CBI-03.png
  14. BIN
      _uat_screenshots/UAT-DIA-01.png
  15. BIN
      _uat_screenshots/UAT-DIA-01b.png
  16. BIN
      _uat_screenshots/UAT-DIA-02.png
  17. BIN
      _uat_screenshots/UAT-DIA-02b.png
  18. BIN
      _uat_screenshots/UAT-DIA-03.png
  19. BIN
      _uat_screenshots/UAT-DIA-03b.png
  20. BIN
      _uat_screenshots/UAT-DIA-04.png
  21. BIN
      _uat_screenshots/UAT-IMP-01.png
  22. BIN
      _uat_screenshots/UAT-IMP-01b.png
  23. BIN
      _uat_screenshots/UAT-IMP-02.png
  24. BIN
      _uat_screenshots/UAT-IMP-02b.png
  25. BIN
      _uat_screenshots/UAT-IMP-03.png
  26. BIN
      _uat_screenshots/UAT-S0-07.png
  27. BIN
      _uat_screenshots/UAT-S0-07b.png
  28. BIN
      _uat_screenshots/UAT-S0-08.png
  29. BIN
      _uat_screenshots/UAT-S9-01.png
  30. BIN
      _uat_screenshots/UAT-S9-01b.png
  31. BIN
      _uat_screenshots/UAT-S9-01c.png
  32. BIN
      _uat_screenshots/UAT-S9-02.png
  33. BIN
      _uat_screenshots/UAT-S9-03.png
  34. BIN
      _uat_screenshots/UAT-S9-03b.png
  35. BIN
      _uat_screenshots/UAT-S9-04.png
  36. BIN
      _uat_screenshots/UAT-S9-04b.png
  37. BIN
      _uat_screenshots/UAT-S9-05.png
  38. BIN
      _uat_screenshots/_00_initial_state.png
  39. BIN
      _uat_screenshots/_01_s1_dashboard.png
  40. BIN
      _uat_screenshots/_02_s1_current.png
  41. BIN
      _uat_screenshots/_03_s1_after_refresh.png
  42. BIN
      _uat_screenshots/_cbi01_answer_check.png
  43. BIN
      _uat_screenshots/_cbi01_grid_initial.png
  44. BIN
      _uat_screenshots/_cbi02_panel_open.png
  45. BIN
      _uat_screenshots/_cbi02_s3_state.png
  46. BIN
      _uat_screenshots/_current_state.png
  47. BIN
      _uat_screenshots/_dbg_menu_state.png
  48. BIN
      _uat_screenshots/_dia01_s1_no_evidence.png
  49. BIN
      _uat_screenshots/_dia01b_evidence_list.png
  50. BIN
      _uat_screenshots/_dia03_approve1.png
  51. BIN
      _uat_screenshots/_tmp_dia01_check.png
  52. BIN
      _uat_screenshots/_tmp_dia02_plan.png
  53. BIN
      _uat_screenshots/_tmp_dia03_check.png
  54. BIN
      _uat_screenshots/_tmp_dia03_panel.png
  55. BIN
      _uat_screenshots/_tmp_export.png
  56. BIN
      _uat_screenshots/_tmp_imp_detail.png
  57. BIN
      _uat_screenshots/_tmp_plan_form.png
  58. BIN
      _uat_screenshots/login.png
  59. 0 0
      contract-review-extract.txt
  60. 1 1
      doc/README.md
  61. 90 0
      doc/_analyze_s1_style.py
  62. 17 0
      doc/_bid_footer_fix.log
  63. BIN
      doc/_bid_preview/_check/junction.jpg
  64. BIN
      doc/_bid_preview/_check/spot1.jpg
  65. BIN
      doc/_bid_preview/_check/spot2.jpg
  66. BIN
      doc/_bid_preview/_check/tail.jpg
  67. BIN
      doc/_bid_preview/_check/toc.jpg
  68. BIN
      doc/_bid_preview/mso17B4.tmp
  69. BIN
      doc/_bid_preview/mso42B6.tmp
  70. BIN
      doc/_bid_preview/mso83E2.tmp
  71. BIN
      doc/_bid_preview/响应文件-2026年河南产互联制造业数据智能运营平台研发项目-北京智造易科技有限公司.pdf
  72. BIN
      doc/_bid_preview/响应文件(完整版)-2026年河南产互联制造业数据智能运营平台研发项目.pdf
  73. BIN
      doc/_bid_preview/响应文件(完整版)-2026年河南产互联制造业数据智能运营平台研发项目(已签章).pdf
  74. BIN
      doc/_bid_preview/附件五-技术方案-第2章 系统功能展示.pdf
  75. BIN
      doc/_bid_preview/附件五-技术方案(完整版).pdf
  76. BIN
      doc/_bid_preview/附件六-实施与服务方案(完整版).pdf
  77. 25 0
      doc/_check_s1_styles.py
  78. 44 0
      doc/_check_uat_menus.py
  79. 84 0
      doc/_compare_s1_cover_struct.py
  80. 31 0
      doc/_find_sysdb.py
  81. 80 0
      doc/_fix_uat_dp_menus.py
  82. 82 0
      doc/_gen_flow_diagrams.py
  83. 1338 0
      doc/_gen_s1style_delivery.py
  84. 83 0
      doc/_grant_uat_menus.py
  85. 30 0
      doc/_refresh_bbp_v05.py
  86. 159 0
      doc/_refresh_release_v05_docs.py
  87. 41 0
      doc/_refresh_toc_s1style.py
  88. 49 0
      doc/_refresh_toc_v05.py
  89. 810 0
      doc/_tmp_blueprint_scan.txt
  90. 467 0
      doc/_tmp_bp_text.txt
  91. 380 0
      doc/_tmp_ch5.txt
  92. BIN
      doc/_tmp_docx_out/_debug_404_evidence.png
  93. BIN
      doc/_tmp_docx_out/_debug_layout.png
  94. BIN
      doc/_tmp_docx_out/_debug_layout2.png
  95. BIN
      doc/_tmp_docx_out/_debug_sysmenu.png
  96. BIN
      doc/_tmp_docx_out/flows/cb_func_s9_007.png
  97. BIN
      doc/_tmp_docx_out/flows/cb_overall.png
  98. BIN
      doc/_tmp_docx_out/flows/int_func_s9_001.png
  99. BIN
      doc/_tmp_docx_out/flows/int_func_s9_002.png
  100. BIN
      doc/_tmp_docx_out/flows/int_func_s9_003.png

+ 3 - 1
.cursor/rules/README.md

@@ -11,7 +11,9 @@
 
 | 文件 | 说明 | 生效方式 |
 |------|------|---------|
-| `collaboration-scope.mdc` | 改前清单待确认、跨模块影响须先预警、小问题最小改动不大重构等 | `alwaysApply: true` |
+| `impact-backtrace.mdc` | **强制**:任何方案先从改动点**反向推演全部影响面**(调用方、数据契约、多来源、多租户、运行面、守卫测试),并写出「反向影响推演」小节 | `alwaysApply: true` |
+| `best-solution-default.mdc` | **强制**:默认交付**根治性最佳方案**,禁止擅自降级为临时/过渡/兜底方案,除非用户明文要求 | `alwaysApply: true` |
+| `collaboration-scope.mdc` | 改前清单待确认、跨模块影响须先预警、小问题**改动范围**最小不大重构等 | `alwaysApply: true` |
 | `git-submit-intent.mdc` | 用户说「提交」时默认 **commit + push**;仅用户明确说不 push 时才只 commit | `alwaysApply: true` |
 | `version-bump-on-commit.mdc` | 发版必升号;提交改动到前端/后端代码或配置时递增对应端版本号,纯文档/规则不升号 | `alwaysApply: true` |
 | `aidop-func-code-menu.mdc` | 新 Ai-DOP 功能菜单须登记 `FUNC-Sn-nnn`(`aidopFuncCodes.ts` + 三联文档),导航按方案 A 展示、不改 `Title` | `alwaysApply: true` |

+ 33 - 0
.cursor/rules/best-solution-default.mdc

@@ -0,0 +1,33 @@
+---
+description: 默认交付根治性最佳方案,禁止擅自降级为临时过渡/权宜方案,除非用户明文要求
+alwaysApply: true
+---
+
+# 默认最佳方案(强制)
+
+## 硬性要求
+
+默认**一律给根治性的最佳方案**。**不得**在用户未明文要求时,自行降级为临时、过渡、兜底、权宜方案。
+
+## 明确禁止
+
+- 临时兜底、硬编码绕过、写死特例、`TODO 后续再改` 式交付。
+- 只改表象不改根因(如:指标算错就在展示层截断/取绝对值,而不修口径与映射)。
+- 因为「最佳方案改动大」就**默默**换成小修,却不告知用户被放弃的方案。
+- 在多个来源/租户中只把当前出问题的那个特判掉,留下同类隐患。
+
+## 成本高时怎么办
+
+仍以**最佳方案为主推荐**,同时给出成本、风险与可分期路径,由用户决策;
+**不得**替用户把结论定成过渡方案。若用户选择分期,须写明**根治目标**与**收口条件**。
+
+## 与「最小改动」的关系(优先级)
+
+`collaboration-scope.mdc` 的「小问题最小改动、不大重构」约束的是**改动范围**——别顺手动无关代码;
+它**不是**允许方案将就。二者同时成立:**范围最小 + 方案最优**。
+字面冲突时,**方案质量以本规则为准**,范围边界仍按 `collaboration-scope.mdc`。
+
+## 例外(必须是用户明文表述)
+
+如「先临时顶一下」「只要最小改动」「先绕过,后面再根治」「保持现状别动架构」。
+口头例外只对**本次任务**生效,不改变默认值。

+ 4 - 2
.cursor/rules/collaboration-scope.mdc

@@ -1,5 +1,5 @@
 ---
-description: 改代码前先列清单待确认;跨模块影响须预警;小问题最小改动、不大重构
+description: 改代码前先列清单待确认;跨模块影响须预警;小问题改动范围最小、不大重构
 alwaysApply: true
 ---
 
@@ -26,7 +26,9 @@ alwaysApply: true
 
 示例:改 S1 时若会动到 S6 共用的请求层或公共看板组件,须说明「本次会影响 S6 生产执行的 xxx(如:同一套基础查询参数、同一 API)」,待确认后再改。
 
-## 小问题:最小改动,不大重构
+## 小问题:改动范围最小,不大重构
+
+> 本节约束的是**改动范围**,不是方案质量。方案默认取根治性最佳方案,见 [`best-solution-default.mdc`](best-solution-default.mdc);两者同时成立:**范围最小 + 方案最优**。
 
 - 修小 bug、小交互、小样式时:**只做必要修改**,避免顺手重构、扩框架、改全局架构。  
 - 若存在**更大方案**(抽公共组件、换目录结构、动框架/中间件/全局配置等):**单独给出建议 + 利弊 + 可选方案**,由用户决策;**不默认替用户上大改**。  

+ 30 - 0
.cursor/rules/impact-backtrace.mdc

@@ -0,0 +1,30 @@
+---
+description: 任何方案都必须从改动点反向推演全部影响面并写入「反向影响推演」小节,禁止只验证局部
+alwaysApply: true
+---
+
+# 反向影响推演(强制)
+
+## 硬性要求
+
+方案在**交付给用户或落地之前**,必须从**改动点**出发**反向**推演所有可能受影响的地方,并在方案中写出**「反向影响推演」**小节。
+**禁止**只为修好触发问题的那一条路径就宣布完成。
+
+## 每个改动点至少反查这六类
+
+1. **代码调用面**:该方法/类/常量/SQL 片段的**全部**调用方(实际检索,不靠印象)。
+2. **数据契约面**:被改的表/列/枚举值/JSON 字段,还有**哪些模块**在读写(KPI SQL、看板、查询页、监控、诊断证据、ChatBI、导出)。
+3. **多数据源面**:同一条链路上的**其它来源**是否也会走到(T8 / 165 MES·WMS / 自建单 / 我方标准 API 入站),某源缺字段时行为如何。
+4. **多租户 / Domain 面**:租户投影、`tenant_id`、`domain` 过滤是否仍然成立。
+5. **运行面**:迁移脚本、启动期 DDL、种子数据、定时任务、缓存、部署配置。
+6. **验证面**:是否有守卫测试能卡住回归;没有就补。
+
+## 小节写法
+
+列出「已核查的面 → 结论」,结论只能是三种之一:**无影响** / **需同步改(列出文件)** / **需你决策(列出选项)**。
+不得用「应该不影响」「大概没问题」代替实际检索结果。
+
+## 反例与正例
+
+- ❌ 改 `mdp_std_inv_trans.trans_type` 的映射语义,只验证 S5 库存页正常 → 交付。
+- ✅ 同一改动先反查:S3/S5/S6/S7 的 KPI SQL、S8 监控、智慧诊断证据 SQL、ChatBI、进出存查询页、`mdp_std_inv_trans_unmapped` 隔离与告警、T8 与 165 两个来源各自的字段可得性,逐条给出结论,再交付。

+ 7 - 0
.gitignore

@@ -83,3 +83,10 @@ Admin.NET.Application.dll
 Admin.NET.Core.pdb
 Admin.NET.Plugin.*.deps.json
 Admin.NET.*.xml
+
+# 本地构建 / 调试残留(禁止入库)
+/_tmp_*
+/_tmp_*/
+
+# UAT 后端发布产物(按环境现场生成,含连接配置,不入库)
+/.uat-backend/

+ 5 - 3
AGENTS.md

@@ -4,9 +4,11 @@
 
 **全体团队成员**在本仓库开发时均应遵守,包括但不限于:
 
-- 动手改代码前先列改动清单,**经确认后再改**  
-- 改动若**波及其他功能模块**,须单独写出跨模块影响并**等待决策**  
-- 小问题**最小改动**,非必要不大重构;更大方案以**建议**形式交负责人决策  
+- 动手改代码前先列改动清单,**经确认后再改** 
+- 任何方案须从改动点**反向推演全部影响面**并写出「反向影响推演」小节,禁止只验证局部;详见 **[`.cursor/rules/impact-backtrace.mdc`](.cursor/rules/impact-backtrace.mdc)** 
+- 默认交付**根治性最佳方案**,未经明文要求不得降级为临时/过渡/兜底方案;详见 **[`.cursor/rules/best-solution-default.mdc`](.cursor/rules/best-solution-default.mdc)** 
+- 改动若**波及其他功能模块**,须单独写出跨模块影响并**等待决策** 
+- 小问题**改动范围最小**,非必要不大重构(约束范围、不是让方案将就);更大方案以**建议**形式交负责人决策 
 - **发版必升号**;执行 Git 提交时,版本号只跟随**本次提交实际纳入的对应端代码/配置改动**递增:提交前端代码/配置才递增 `Web/package.json` 的 `version` patch,提交后端代码/配置才递增 `server/Admin.NET.Web.Entry/Admin.NET.Web.Entry.csproj` 的 `<Version>` / `<AssemblyVersion>` / `<FileVersion>` patch;某端未纳入本次提交则不升该端版本,**纯文档/规则提交不递增前后端版本号**。详见 **[`.cursor/rules/version-bump-on-commit.mdc`](.cursor/rules/version-bump-on-commit.mdc)**。
 - 用户说 **「提交」** 时默认 **commit + push** 到跟踪远端,不得只 commit 不 push;详见 **[`.cursor/rules/git-submit-intent.mdc`](.cursor/rules/git-submit-intent.mdc)**。
 - 新增 **Ai-DOP 功能菜单** 须登记 **`FUNC-Sn-nnn`** 并维护 [`Web/src/constants/aidopFuncCodes.ts`](Web/src/constants/aidopFuncCodes.ts);导航展示用方案 A(侧栏短标、映射表注入),**勿**把编号写入 `sys_menu.Title`。详见 **[`.cursor/rules/aidop-func-code-menu.mdc`](.cursor/rules/aidop-func-code-menu.mdc)**。

BIN
WMS-barcode-1A03N54.png


BIN
WMS-qr-1A03N54.png


BIN
_uat_screenshots/UAT-CBI-01.png


BIN
_uat_screenshots/UAT-CBI-01b.png


BIN
_uat_screenshots/UAT-CBI-02.png


BIN
_uat_screenshots/UAT-CBI-02b.png


BIN
_uat_screenshots/UAT-CBI-03.png


BIN
_uat_screenshots/UAT-DIA-01.png


BIN
_uat_screenshots/UAT-DIA-01b.png


BIN
_uat_screenshots/UAT-DIA-02.png


BIN
_uat_screenshots/UAT-DIA-02b.png


BIN
_uat_screenshots/UAT-DIA-03.png


BIN
_uat_screenshots/UAT-DIA-03b.png


BIN
_uat_screenshots/UAT-DIA-04.png


BIN
_uat_screenshots/UAT-IMP-01.png


BIN
_uat_screenshots/UAT-IMP-01b.png


BIN
_uat_screenshots/UAT-IMP-02.png


BIN
_uat_screenshots/UAT-IMP-02b.png


BIN
_uat_screenshots/UAT-IMP-03.png


BIN
_uat_screenshots/UAT-S0-07.png


BIN
_uat_screenshots/UAT-S0-07b.png


BIN
_uat_screenshots/UAT-S0-08.png


BIN
_uat_screenshots/UAT-S9-01.png


BIN
_uat_screenshots/UAT-S9-01b.png


BIN
_uat_screenshots/UAT-S9-01c.png


BIN
_uat_screenshots/UAT-S9-02.png


BIN
_uat_screenshots/UAT-S9-03.png


BIN
_uat_screenshots/UAT-S9-03b.png


BIN
_uat_screenshots/UAT-S9-04.png


BIN
_uat_screenshots/UAT-S9-04b.png


BIN
_uat_screenshots/UAT-S9-05.png


BIN
_uat_screenshots/_00_initial_state.png


BIN
_uat_screenshots/_01_s1_dashboard.png


BIN
_uat_screenshots/_02_s1_current.png


BIN
_uat_screenshots/_03_s1_after_refresh.png


BIN
_uat_screenshots/_cbi01_answer_check.png


BIN
_uat_screenshots/_cbi01_grid_initial.png


BIN
_uat_screenshots/_cbi02_panel_open.png


BIN
_uat_screenshots/_cbi02_s3_state.png


BIN
_uat_screenshots/_current_state.png


BIN
_uat_screenshots/_dbg_menu_state.png


BIN
_uat_screenshots/_dia01_s1_no_evidence.png


BIN
_uat_screenshots/_dia01b_evidence_list.png


BIN
_uat_screenshots/_dia03_approve1.png


BIN
_uat_screenshots/_tmp_dia01_check.png


BIN
_uat_screenshots/_tmp_dia02_plan.png


BIN
_uat_screenshots/_tmp_dia03_check.png


BIN
_uat_screenshots/_tmp_dia03_panel.png


BIN
_uat_screenshots/_tmp_export.png


BIN
_uat_screenshots/_tmp_imp_detail.png


BIN
_uat_screenshots/_tmp_plan_form.png


BIN
_uat_screenshots/login.png


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 0 - 0
contract-review-extract.txt


+ 1 - 1
doc/README.md

@@ -70,7 +70,7 @@
 | [plan/当前系统针对标准和非标BOM的适用情况分析.md](./plan/当前系统针对标准和非标BOM的适用情况分析.md) | **待讨论**:标准 / MTO / 轻非标 / 真 ETO 对现有三轨 BOM 的适配结论;内部 UAT 见 `UAT-INT-005` |
 | [plan/S0未走数据中台的问题.md](./plan/S0未走数据中台的问题.md) | **待讨论**:S0 与中台双向断(写出不进中台、入站不回灌、BOM 双轨);内部 UAT 见 `UAT-INT-006` |
 | [plan/AIDOP标准与非标双模BOM升级方案.md](./plan/AIDOP标准与非标双模BOM升级方案.md) | **目标方案(最佳完整路径)**:统一修订权威、标准/非标双模、三轨迁入摘除、中台闭环与 165 出站反向 |
-| [plan/第三方标准API推数入站方案.md](./plan/第三方标准API推数入站方案.md) | **方式丙终态**:`POST /api/v1/mdp/inbound/{entityCode}`;五层(身份/契约/摄取/规范/发布);UAT-INT-004 |
+| [plan/第三方标准API推数入站方案.md](./plan/第三方标准API推数入站方案.md) | **方式丙终态**:`POST /api/mdp/inbound/{entityCode}`(不带 `/v1/`);五层(身份/契约/摄取/规范/发布);UAT-INT-004 |
 | [plan/S8/S8数据库处理优化方案.md](./plan/S8/S8数据库处理优化方案.md) | S8 调度、检测日志、通知扫描与数据库写入压力优化方案 |
 | [plan/aidopdev_165库容量与增量写入分析_20260716.md](./plan/aidopdev_165库容量与增量写入分析_20260716.md) | 165/`aidopdev` 库容量快照、Top 表、调度增量写入与治理建议(2026-07-16) |
 | [plan/新系统数据库简明介绍与S1数据流.md](./plan/新系统数据库简明介绍与S1数据流.md) | 新系统数据库简明说明,并以 S1 为例说明数据中台流转 |

+ 90 - 0
doc/_analyze_s1_style.py

@@ -0,0 +1,90 @@
+# -*- coding: utf-8 -*-
+"""剖析 S1 模块四份交付文档的格式与风格特征,输出对比基线报告。"""
+from __future__ import annotations
+
+import sys
+from pathlib import Path
+
+from docx import Document
+from docx.shared import Pt
+
+BASE = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联")
+
+S1 = [
+    "S1产销协同业务需求描述-V0.4.docx",
+    "S1产销协同模块蓝图设计方案-V2.2.docx",
+    "S1产销协同模块详细设计说明书-V1.2.docx",
+    "S1产销协同模块用户操作手册-V1.2.docx",
+]
+
+MINE = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联\待确认")
+MINE_UM = "系统集成-用户操作手册-V0.5.docx"
+
+
+def style_of(p):
+    try:
+        return p.style.name
+    except Exception:
+        return "?"
+
+
+def run_font(p):
+    for r in p.runs:
+        if r.text.strip():
+            f = r.font
+            sz = f.size.pt if f.size else None
+            return f"{f.name}/{sz}/b={f.bold}"
+    return "-"
+
+
+def dump_doc(path: Path, full: bool):
+    d = Document(str(path))
+    print(f"\n{'='*70}\nFILE {path.name}")
+    # styles statistics
+    from collections import Counter
+    cnt = Counter(style_of(p) for p in d.paragraphs if p.text.strip())
+    print("STYLE_STATS", dict(cnt))
+    # Normal style font
+    try:
+        n = d.styles["Normal"]
+        print("NORMAL_FONT", n.font.name, n.font.size.pt if n.font.size else None)
+    except Exception as e:
+        print("NORMAL_FONT ?", e)
+    # core properties
+    cp = d.core_properties
+    print("CORE title=", cp.title, "| author=", cp.author)
+    # headings outline
+    print("--- HEADINGS ---")
+    for p in d.paragraphs:
+        s = style_of(p)
+        if s.startswith(("Heading", "标题")) and p.text.strip():
+            print(f"  [{s}] {p.text.strip()}")
+    print("--- TABLES ---", len(d.tables))
+    for i, t in enumerate(d.tables[:6]):
+        hdr = [c.text.strip().replace("\n", "/") for c in t.rows[0].cells]
+        print(f"  T{i} rows={len(t.rows)} hdr={hdr[:6]}")
+    if full:
+        print("--- FULL TEXT ---")
+        for p in d.paragraphs:
+            t = p.text.rstrip()
+            if t:
+                print(f"[{style_of(p)}|{run_font(p)}] {t}")
+        for i, t in enumerate(d.tables):
+            print(f"--- TABLE {i} ---")
+            for r in t.rows:
+                print("  | " + " | ".join(c.text.replace("\n", "⏎").strip() for c in r.cells))
+
+
+def main():
+    which = sys.argv[1] if len(sys.argv) > 1 else "um"
+    if which == "um":
+        dump_doc(BASE / S1[3], full=True)
+        print("\n\n########## 对比:本次生成的操作手册 ##########")
+        dump_doc(MINE / MINE_UM, full=True)
+    else:
+        idx = {"brd": 0, "bbp": 1, "dds": 2}[which]
+        dump_doc(BASE / idx if isinstance(idx, Path) else BASE / S1[idx], full=False)
+
+
+if __name__ == "__main__":
+    main()

+ 17 - 0
doc/_bid_footer_fix.log

@@ -0,0 +1,17 @@
+ui_s0_bom.png	页脚 y=1392~1412 字号=23 已替换
+ui_s0_customer.png	页脚 y=1392~1412 字号=23 已替换
+ui_s0_location.png	页脚 y=1392~1412 字号=23 已替换
+ui_s0_material.png	页脚 y=1392~1412 字号=23 已替换
+ui_s0_routing.png	页脚 y=1392~1412 字号=23 已替换
+ui_s0_supplier.png	页脚 y=1392~1412 字号=23 已替换
+ui_s5_inout.png	页脚 y=1392~1412 字号=23 已替换
+ui_s5_iqc.png	页脚 y=1392~1412 字号=23 已替换
+ui_s5_stock.png	页脚 y=1392~1412 字号=23 已替换
+ui_s5_stocktake.png	页脚 y=1392~1412 字号=23 已替换
+ui_s6_equipment.png	页脚 y=1392~1412 字号=23 已替换
+ui_s6_ipqc.png	页脚 y=1392~1412 字号=23 已替换
+ui_s6_tooling.png	页脚 y=1392~1412 字号=23 已替换
+ui_s7_fqc_result.png	页脚 y=1392~1412 字号=23 已替换
+ui_s7_fqc_task.png	页脚 y=1392~1412 字号=23 已替换
+ui_s7_prodin.png	页脚 y=1392~1412 字号=23 已替换
+ui_s7_shipment.png	页脚 y=1392~1412 字号=23 已替换

BIN
doc/_bid_preview/_check/junction.jpg


BIN
doc/_bid_preview/_check/spot1.jpg


BIN
doc/_bid_preview/_check/spot2.jpg


BIN
doc/_bid_preview/_check/tail.jpg


BIN
doc/_bid_preview/_check/toc.jpg


BIN
doc/_bid_preview/mso17B4.tmp


BIN
doc/_bid_preview/mso42B6.tmp


BIN
doc/_bid_preview/mso83E2.tmp


BIN
doc/_bid_preview/响应文件-2026年河南产互联制造业数据智能运营平台研发项目-北京智造易科技有限公司.pdf


BIN
doc/_bid_preview/响应文件(完整版)-2026年河南产互联制造业数据智能运营平台研发项目.pdf


BIN
doc/_bid_preview/响应文件(完整版)-2026年河南产互联制造业数据智能运营平台研发项目(已签章).pdf


BIN
doc/_bid_preview/附件五-技术方案-第2章 系统功能展示.pdf


BIN
doc/_bid_preview/附件五-技术方案(完整版).pdf


BIN
doc/_bid_preview/附件六-实施与服务方案(完整版).pdf


+ 25 - 0
doc/_check_s1_styles.py

@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+"""检查 S1 模板 docx 的表格样式/标题样式 ID/页面设置,供生成器复用。"""
+from __future__ import annotations
+
+import re
+import zipfile
+from pathlib import Path
+
+BASE = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联")
+
+for name in [
+    "S1产销协同业务需求描述-V0.4.docx",
+    "S1产销协同模块蓝图设计方案-V2.2.docx",
+    "S1产销协同模块详细设计说明书-V1.2.docx",
+    "S1产销协同模块用户操作手册-V1.2.docx",
+]:
+    z = zipfile.ZipFile(BASE / name)
+    xml = z.read("word/document.xml").decode("utf-8")
+    tbl_styles = sorted(set(re.findall(r'<w:tblStyle w:val="([^"]+)"', xml)))
+    p_styles = sorted(set(re.findall(r'<w:pStyle w:val="([^"]+)"', xml)))
+    sect = re.search(r"<w:pgSz[^/]*/>", xml)
+    print(name)
+    print("  tblStyles:", tbl_styles)
+    print("  pStyles:", p_styles[:20])
+    print("  pgSz:", sect.group(0) if sect else None)

+ 44 - 0
doc/_check_uat_menus.py

@@ -0,0 +1,44 @@
+# -*- coding: utf-8 -*-
+"""检查 UAT 库 SysMenu 是否缺 业务动作日志/出站回写队列 菜单行;缺则按兄弟行模板补齐。"""
+from __future__ import annotations
+
+import sys
+
+import pymysql
+
+CONN = dict(host="123.60.180.165", port=3306, user="aidopremote", password="1234567890aiDOP#",
+            database="aidopdev", charset="utf8mb4", connect_timeout=15)
+
+IDS = [1320990000400, 1320990000401, 1320990000402, 1320990000403, 1320990000404,
+       1320990000405, 1320990000406, 1320990000407, 1320990000408, 1320990000201]
+
+
+def main():
+    mode = sys.argv[1] if len(sys.argv) > 1 else "check"
+    conn = pymysql.connect(**CONN)
+    try:
+        cur = conn.cursor()
+        cur.execute("SHOW COLUMNS FROM SysMenu")
+        cols = [r[0] for r in cur.fetchall()]
+        print("COLUMNS", cols)
+        marks = ",".join(str(i) for i in IDS)
+        cur.execute(f"SELECT * FROM SysMenu WHERE Id IN ({marks})")
+        rows = cur.fetchall()
+        found = {r[0]: r for r in rows}
+        print("FOUND", sorted(found))
+        missing = [i for i in IDS if i not in found]
+        print("MISSING", missing)
+        # 打印 sibling 行(数据任务日志 0405)全字段作为模板
+        tpl_id = 1320990000405
+        if tpl_id in found:
+            print("TEMPLATE ROW (0405):")
+            for c, v in zip(cols, found[tpl_id]):
+                print(f"   {c} = {v!r}")
+        if mode == "fix" and missing:
+            print("fix mode not implemented yet")
+    finally:
+        conn.close()
+
+
+if __name__ == "__main__":
+    main()

+ 84 - 0
doc/_compare_s1_cover_struct.py

@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+"""对比 S1 与本次修改文档的封面细节、图片数量与标题结构差异。"""
+from __future__ import annotations
+
+import zipfile
+from pathlib import Path
+
+from docx import Document
+
+BASE = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联")
+MINE = BASE / "待确认"
+
+S1 = [
+    "S1产销协同业务需求描述-V0.4.docx",
+    "S1产销协同模块蓝图设计方案-V2.2.docx",
+    "S1产销协同模块详细设计说明书-V1.2.docx",
+    "S1产销协同模块用户操作手册-V1.2.docx",
+]
+MINE_DOCS = [
+    "系统集成业务需求描述-V0.5.docx",
+    "系统集成模块蓝图设计方案-V0.5.docx",
+    "系统集成模块详细设计说明书-V0.5.docx",
+    "运营改善业务需求描述-V0.5.docx",
+    "运营改善模块蓝图设计方案-V0.5.docx",
+    "运营改善模块详细设计说明书-V0.5.docx",
+    "九宫格智慧运营看板模块详细设计说明书-V0.1.docx",
+]
+
+
+def img_count(path: Path) -> int:
+    with zipfile.ZipFile(path) as z:
+        return len([n for n in z.namelist() if n.startswith("word/media/")])
+
+
+def headings_of(d: Document):
+    out = []
+    for p in d.paragraphs:
+        s = p.style.name
+        if s.startswith(("Heading", "标题")) and p.text.strip():
+            out.append(f"[{s}] {p.text.strip()}")
+    return out
+
+
+def cover_info(d: Document, n=12):
+    out = []
+    for p in d.paragraphs[:n]:
+        if p.text.strip():
+            f = None
+            for r in p.runs:
+                if r.text.strip():
+                    f = r.font
+                    break
+            sz = f.size.pt if f and f.size else None
+            out.append(f"  ({f.name if f else '-'}/{sz}/b={f.bold if f else '-'}) {p.text.strip()}")
+    return out
+
+
+def dump(path: Path, show_heads: bool = True, head_limit: int = 100):
+    d = Document(str(path))
+    print(f"\n{'='*66}\n{path.name}  imgs={img_count(path)}  tables={len(d.tables)}")
+    print("-- 封面段落 --")
+    print("\n".join(cover_info(d)))
+    if d.tables:
+        t = d.tables[0]
+        print(f"-- 首表 {len(t.rows)}行 --")
+        for r in t.rows[:3]:
+            print("  | " + " | ".join(c.text.strip().replace("\n", "/") for c in r.cells))
+    if show_heads:
+        hs = headings_of(d)
+        print(f"-- 标题 {len(hs)} 个 --")
+        print("\n".join("  " + h for h in hs[:head_limit]))
+
+
+def main():
+    print("########## S1 基线 ##########")
+    for name in S1:
+        dump(BASE / name, show_heads=False)
+    print("\n\n########## 本次修改的文档 ##########")
+    for name in MINE_DOCS:
+        dump(MINE / name, show_heads=True)
+
+
+if __name__ == "__main__":
+    main()

+ 31 - 0
doc/_find_sysdb.py

@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+"""探测 165 服务器上 sys_menu / sys_role_menu 所在的库。"""
+from __future__ import annotations
+
+import pymysql
+
+CONN = dict(host="123.60.180.165", port=3306, user="aidopremote", password="1234567890aiDOP#",
+            charset="utf8mb4", connect_timeout=15)
+
+conn = pymysql.connect(**CONN)
+try:
+    cur = conn.cursor()
+    cur.execute("SHOW DATABASES")
+    dbs = [r[0] for r in cur.fetchall()]
+    print("DATABASES", dbs)
+    for db in dbs:
+        if db in ("information_schema", "mysql", "performance_schema", "sys"):
+            continue
+        try:
+            cur.execute(
+                "SELECT TABLE_NAME FROM information_schema.TABLES "
+                "WHERE TABLE_SCHEMA=%s AND LOWER(TABLE_NAME) IN ('sysmenu','sysrolemenu','sysuser','systenant','sys_menu','sys_role_menu')",
+                (db,),
+            )
+            hits = [r[0] for r in cur.fetchall()]
+            if hits:
+                print(db, "->", hits)
+        except Exception as e:
+            print(db, "ERR", e)
+finally:
+    conn.close()

+ 80 - 0
doc/_fix_uat_dp_menus.py

@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+"""补齐 UAT 库缺失的 2 个数据平台菜单(业务动作日志/出站回写队列)+ 租户链接。
+
+等价于 AidopMenuLinkSync.EnsureDataPlatformSeedMenus + 租户链接同步的启动效果。
+用法:python _fix_uat_dp_menus.py check | fix | revoke
+"""
+from __future__ import annotations
+
+import sys
+from datetime import datetime
+
+import pymysql
+
+CONN = dict(host="123.60.180.165", port=3306, user="aidopremote", password="1234567890aiDOP#",
+            database="aidopdev", charset="utf8mb4", connect_timeout=15)
+
+PID = 1320990000400
+CREATE_TIME = datetime(2022, 2, 10)
+
+MENUS = [
+    dict(Id=1320990000407, Pid=PID, Type=2, Name="aidopDataPlatformActionRunLogs",
+         Path="/aidop/data-platform/action-run-logs", Component="/aidop/data-platform/actionRunLogs",
+         Title="业务动作日志", Icon="ele-Document", OrderNo=55,
+         Remark="订单评审、排程、下达、采购闭环等动作运行日志"),
+    dict(Id=1320990000408, Pid=PID, Type=2, Name="aidopDataPlatformOutbox",
+         Path="/aidop/data-platform/outbox", Component="/aidop/data-platform/outbox",
+         Title="出站回写队列", Icon="ele-Upload", OrderNo=57,
+         Remark="Outbox 死信监控与手工重推"),
+]
+
+TM_ID_BASE = 8382990001000  # SysTenantMenu 本次插入 Id 段
+
+
+def main():
+    mode = sys.argv[1] if len(sys.argv) > 1 else "check"
+    conn = pymysql.connect(**CONN)
+    try:
+        cur = conn.cursor()
+        marks = ",".join(str(m["Id"]) for m in MENUS)
+        cur.execute(f"SELECT Id, Title, Status FROM SysMenu WHERE Id IN ({marks})")
+        print("SYSMENU", cur.fetchall())
+        cur.execute("SHOW COLUMNS FROM SysTenantMenu")
+        tm_cols = [r[0] for r in cur.fetchall()]
+        print("TM COLUMNS", tm_cols)
+        cur.execute("SELECT Id FROM SysTenant")
+        tenants = [(r[0], None) for r in cur.fetchall()]
+        print("TENANTS", tenants)
+
+        if mode == "fix":
+            for m in MENUS:
+                cur.execute(
+                    "INSERT INTO SysMenu (Id, Pid, Type, Name, Path, Component, Redirect, Permission, Title, Icon,"
+                    " IsIframe, OutLink, IsHide, IsKeepAlive, IsAffix, OrderNo, Status, Remark, CreateTime)"
+                    " VALUES (%s,%s,%s,%s,%s,%s,NULL,NULL,%s,%s,0,NULL,0,1,0,%s,1,%s,%s)",
+                    (m["Id"], m["Pid"], m["Type"], m["Name"], m["Path"], m["Component"], m["Title"],
+                     m["Icon"], m["OrderNo"], m["Remark"], CREATE_TIME),
+                )
+            i = 0
+            for (tid, _ttype) in tenants:
+                for m in MENUS:
+                    cur.execute("SELECT COUNT(*) FROM SysTenantMenu WHERE TenantId=%s AND MenuId=%s",
+                                (tid, m["Id"]))
+                    if cur.fetchone()[0]:
+                        continue
+                    cur.execute("INSERT INTO SysTenantMenu (Id, TenantId, MenuId) VALUES (%s,%s,%s)",
+                                (TM_ID_BASE + i, tid, m["Id"]))
+                    i += 1
+            conn.commit()
+            print("FIX DONE, tenant links inserted:", i)
+        elif mode == "revoke":
+            cur.execute(f"DELETE FROM SysTenantMenu WHERE Id BETWEEN {TM_ID_BASE} AND {TM_ID_BASE + 999}")
+            cur.execute(f"DELETE FROM SysMenu WHERE Id IN ({marks})")
+            conn.commit()
+            print("REVOKE DONE")
+    finally:
+        conn.close()
+
+
+if __name__ == "__main__":
+    main()

+ 82 - 0
doc/_gen_flow_diagrams.py

@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+"""生成蓝图用业务流程图(每功能 1 张 + 每模块总体 1 张),S1 蓝图风格:横向流程框图。
+
+输出:doc/_tmp_docx_out/flows/{module}_{key}.png
+"""
+from __future__ import annotations
+
+import sys
+from pathlib import Path
+
+import matplotlib
+
+matplotlib.use("Agg")
+import matplotlib.pyplot as plt
+from matplotlib.patches import FancyArrowPatch, FancyBboxPatch
+
+HERE = Path(__file__).resolve().parent
+sys.path.insert(0, str(HERE))
+
+from _gen_s9_modules_data import MODULES  # noqa: E402
+
+OUT = HERE / "_tmp_docx_out" / "flows"
+OUT.mkdir(parents=True, exist_ok=True)
+
+plt.rcParams["font.family"] = ["Microsoft YaHei"]
+plt.rcParams["axes.unicode_minus"] = False
+
+# 模块总体流程(手工概括,与文档 1.2 总体业务流程图呼应)
+OVERALL = {
+    "系统集成": ["第三方系统(ERP/MES/WMS)", "数据源登记/标准API推数(方式丙)", "同步任务执行与清洗标准化", "贴源/标准/指标层入仓", "业务模块与看板消费", "出站回写第三方系统"],
+    "S9": ["运营指标主数据", "指标层日批计算", "九宫格总览(红黄绿预警)", "格子下钻模块看板", "联动智慧诊断"],
+    "运营诊断": ["看板未达标指标", "智慧诊断环节识别", "七维下钻根因溯源", "诊断结论与报告", "转改善闭环"],
+    "运营改善": ["诊断问题建档", "审批派单到责任人", "行动项执行跟踪", "有效性验证(前后对比)", "复盘闭环与经验固化"],
+    "ChatBI": ["看板/九宫格上下文", "自然语言提问", "意图解析与指标聚合", "结论与建议输出", "跳转看板或诊断"],
+}
+
+MODULE_PREFIX = {"系统集成": "int", "S9": "s9", "运营诊断": "od", "运营改善": "oi", "ChatBI": "cb"}
+
+
+def draw_flow(title: str, steps: list[tuple[str, str]], out: Path):
+    """steps: [(活动名称, 执行角色)],横向框图 + 箭头。"""
+    n = len(steps)
+    w = max(8.0, 1.9 * n + 1.2)
+    fig, ax = plt.subplots(figsize=(w, 1.9), dpi=200)
+    ax.set_xlim(0, n * 1.9 + 0.4)
+    ax.set_ylim(0, 1.9)
+    ax.axis("off")
+    ax.text(n * 0.95 + 0.2, 1.68, title, ha="center", va="center", fontsize=12, fontweight="bold", color="#1F3864")
+    box_w, box_h, y0 = 1.55, 0.78, 0.42
+    for i, (name, role) in enumerate(steps):
+        x0 = 0.2 + i * 1.9
+        box = FancyBboxPatch((x0, y0), box_w, box_h, boxstyle="round,pad=0.06",
+                             fc="#E8F1FA", ec="#2E75B6", lw=1.4)
+        ax.add_patch(box)
+        ax.text(x0 + box_w / 2, y0 + box_h * 0.62, name, ha="center", va="center",
+                fontsize=10.5, fontweight="bold", color="#1F3864", wrap=True)
+        ax.text(x0 + box_w / 2, y0 + box_h * 0.24, role, ha="center", va="center",
+                fontsize=8.5, color="#595959")
+        if i < n - 1:
+            ar = FancyArrowPatch((x0 + box_w + 0.07, y0 + box_h / 2), (x0 + 1.9 + 0.13, y0 + box_h / 2),
+                                 arrowstyle="-|>", mutation_scale=16, color="#2E75B6", lw=1.6)
+            ax.add_patch(ar)
+    fig.savefig(out, bbox_inches="tight", facecolor="white")
+    plt.close(fig)
+    print("FLOW", out.name)
+
+
+def main():
+    for mod_key, mod in MODULES.items():
+        prefix = MODULE_PREFIX[mod_key]
+        draw_flow(f"{mod['module_title']}·总体业务流程", [(s, "") for s in OVERALL[mod_key]],
+                  OUT / f"{prefix}_overall.png")
+        for feat in mod["features"]:
+            if feat.get("impl_status") == "未实现":
+                continue
+            steps = [(name, role) for _no, name, role, _desc, _inp, _out in feat["flow_steps"]]
+            draw_flow(f"{feat['name']}({feat['func']})业务流程", steps,
+                      OUT / f"{prefix}_{feat['func'].lower().replace('-', '_')}.png")
+
+
+if __name__ == "__main__":
+    main()

+ 1338 - 0
doc/_gen_s1style_delivery.py

@@ -0,0 +1,1338 @@
+# -*- coding: utf-8 -*-
+"""S1 风格四合一交付文档生成器(BRD / BBP / DDS / UM)。
+
+以 S1 模块四份文档为模板底(复制后清空正文,保留 styles.xml 与页面设置),
+按 S1 实测版式重写全部内容:
+- BRD:封面 28/22/13 + 文档编号表;H2 范围说明 + H2(一)功能名(REQ-xxx)+ H3 功能说明/业务描述
+- BBP:封面 26/26/14 + 版本行;H1「N  功能名(FUNC-xxx)」+ 7 子节 + 流程图 + 活动/情形/权限/接口/报表五表
+- DDS:封面项目信息表;1.文档概述/2.总体设计/3.功能详设/4.数据库/5.接口/6.安全多租户/7.附录
+- UM :封面 18/24/22 + 作者日期版本行;1.系统登录与首页 + 2.模块操作说明(步骤表+截图+注意+FAQ)
+
+数据源:_gen_s9_modules_data.MODULES(功能/流程/规则/角色/接口/报表/TC)+ 本文件 ENRICH(UM步骤、BBP表格行、DDS设计细节)。
+用法:
+  python _gen_s1style_delivery.py gen      # 生成到 doc/_tmp_docx_out/s1style/
+  python _gen_s1style_delivery.py deploy   # 生成并部署到待确认目录(旧版移入 _backup_20260915_pre_s1style)
+"""
+from __future__ import annotations
+
+import shutil
+import sys
+from pathlib import Path
+
+from docx import Document
+from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_BREAK
+from docx.oxml import OxmlElement
+from docx.oxml.ns import qn
+from docx.shared import Cm, Pt, RGBColor
+
+HERE = Path(__file__).resolve().parent
+sys.path.insert(0, str(HERE))
+
+from _gen_s9_modules_data import MODULES  # noqa: E402
+
+BASE = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联")
+PENDING = BASE / "待确认"
+BACKUP = PENDING / "_backup_20260915_pre_s1style"
+OUT = HERE / "_tmp_docx_out" / "s1style"
+SHOTS = HERE / "_tmp_docx_out" / "shots"
+FLOWS = HERE / "_tmp_docx_out" / "flows"
+
+TPL = {
+    "brd": BASE / "S1产销协同业务需求描述-V0.4.docx",
+    "bbp": BASE / "S1产销协同模块蓝图设计方案-V2.2.docx",
+    "dds": BASE / "S1产销协同模块详细设计说明书-V1.2.docx",
+    "um": BASE / "S1产销协同模块用户操作手册-V1.2.docx",
+}
+
+FONT = "微软雅黑"
+HDR_FILL = "D6E3F0"
+CN_NUM = "零一二三四五六七八九十"
+TODAY_ISO = "2026-09-15"
+TODAY_CN = "2026年9月15日"
+TODAY_SLASH = "2026/09/15"
+SYSTEM_NAME = "Ai-DOP智慧运营管理系统"
+AUTHOR = "智造易项目组"
+
+FLOW_PREFIX = {"系统集成": "int", "S9": "s9", "运营诊断": "od", "运营改善": "oi", "ChatBI": "cb"}
+
+
+# ─────────────────────────────────────────────────────────────
+# 基础辅助
+# ─────────────────────────────────────────────────────────────
+
+def new_doc(kind: str) -> Document:
+    """复制 S1 模板并清空正文(保留 sectPr),样式/页面设置全部继承 S1。"""
+    OUT.mkdir(parents=True, exist_ok=True)
+    tmp = OUT / f"_tpl_{kind}.docx"
+    shutil.copy2(TPL[kind], tmp)
+    doc = Document(str(tmp))
+    body = doc.element.body
+    for child in list(body):
+        if child.tag == qn("w:sectPr"):
+            continue
+        body.remove(child)
+    return doc
+
+
+def set_font(run, *, size=None, bold=None):
+    run.font.name = FONT
+    r_pr = run._element.get_or_add_rPr()
+    r_fonts = r_pr.find(qn("w:rFonts"))
+    if r_fonts is None:
+        r_fonts = OxmlElement("w:rFonts")
+        r_pr.insert(0, r_fonts)
+    r_fonts.set(qn("w:ascii"), FONT)
+    r_fonts.set(qn("w:hAnsi"), FONT)
+    r_fonts.set(qn("w:eastAsia"), FONT)
+    if size is not None:
+        run.font.size = size
+    if bold is not None:
+        run.bold = bold
+
+
+def para(doc, text="", *, size=None, bold=False, align=None, style=None, space_after=None):
+    p = doc.add_paragraph(style=style) if style else doc.add_paragraph()
+    if align is not None:
+        p.alignment = align
+    if space_after is not None:
+        p.paragraph_format.space_after = Pt(space_after)
+    if text:
+        run = p.add_run(text)
+        set_font(run, size=Pt(size) if size else None, bold=bold)
+    return p
+
+
+def h1(doc, text):
+    p = doc.add_paragraph(style="Heading 1")
+    p.add_run(text)
+    return p
+
+
+def h2(doc, text):
+    p = doc.add_paragraph(style="Heading 2")
+    p.add_run(text)
+    return p
+
+
+def h3(doc, text):
+    p = doc.add_paragraph(style="Heading 3")
+    p.add_run(text)
+    return p
+
+
+def page_break(doc):
+    p = doc.add_paragraph()
+    p.add_run().add_break(WD_BREAK.PAGE)
+
+
+def add_toc(doc):
+    """插入 TOC 域(Word 打开刷新后生成实际目录)。"""
+    p = doc.add_paragraph()
+    r = p.add_run()
+    f1 = OxmlElement("w:fldChar")
+    f1.set(qn("w:fldCharType"), "begin")
+    instr = OxmlElement("w:instrText")
+    instr.set(qn("xml:space"), "preserve")
+    instr.text = r' TOC \o "1-3" \h \z \u '
+    f2 = OxmlElement("w:fldChar")
+    f2.set(qn("w:fldCharType"), "separate")
+    t = OxmlElement("w:t")
+    t.text = "(在 Word 中右键“更新域”生成目录)"
+    f3 = OxmlElement("w:fldChar")
+    f3.set(qn("w:fldCharType"), "end")
+    r._element.append(f1)
+    r._element.append(instr)
+    r._element.append(f2)
+    r._element.append(t)
+    r2 = p.add_run()
+    r2._element.append(f3)
+    return p
+
+
+def shade(cell, fill=HDR_FILL):
+    tc_pr = cell._element.get_or_add_tcPr()
+    old = tc_pr.find(qn("w:shd"))
+    if old is not None:
+        tc_pr.remove(old)
+    shd = OxmlElement("w:shd")
+    shd.set(qn("w:val"), "clear")
+    shd.set(qn("w:color"), "auto")
+    shd.set(qn("w:fill"), fill)
+    tc_pr.append(shd)
+
+
+def cell_text(cell, text, *, bold=False, center=False, size=10.5):
+    cell.text = ""
+    p = cell.paragraphs[0]
+    if center:
+        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    run = p.add_run(str(text))
+    set_font(run, size=Pt(size), bold=bold)
+
+
+def set_table_borders(table, *, full_width=True):
+    tbl_pr = table._element.tblPr
+    borders = OxmlElement("w:tblBorders")
+    for edge in ("top", "left", "bottom", "right", "insideH", "insideV"):
+        e = OxmlElement(f"w:{edge}")
+        e.set(qn("w:val"), "single")
+        e.set(qn("w:sz"), "4")
+        e.set(qn("w:color"), "000000")
+        borders.append(e)
+    tbl_pr.append(borders)
+    tbl_w = tbl_pr.find(qn("w:tblW"))
+    if tbl_w is None:
+        tbl_w = OxmlElement("w:tblW")
+        tbl_pr.append(tbl_w)
+    if full_width:
+        tbl_w.set(qn("w:w"), "5000")
+        tbl_w.set(qn("w:type"), "pct")
+    else:
+        tbl_w.set(qn("w:w"), "0")
+        tbl_w.set(qn("w:type"), "auto")
+
+
+def data_table(doc, headers, rows, *, size=10.5, center_cols=(0,)):
+    """S1 风格数据表:无边框样式、手动单线边框、表头底纹 D6E3F0 加粗居中、100% 宽。"""
+    t = doc.add_table(rows=len(rows) + 1, cols=len(headers))
+    set_table_borders(t)
+    for i, htxt in enumerate(headers):
+        cell_text(t.rows[0].cells[i], htxt, bold=True, center=True, size=size)
+        shade(t.rows[0].cells[i])
+    for r, row in enumerate(rows, 1):
+        for c, val in enumerate(row):
+            cell_text(t.rows[r].cells[c], val, center=(c in center_cols), size=size)
+    return t
+
+
+def kv_table(doc, pairs, *, key_fill=HDR_FILL):
+    """封面信息表(左键右值,auto 宽)。"""
+    t = doc.add_table(rows=len(pairs), cols=2)
+    set_table_borders(t, full_width=False)
+    for i, (k, v) in enumerate(pairs):
+        cell_text(t.rows[i].cells[0], k, bold=True, center=True)
+        cell_text(t.rows[i].cells[1], v, center=True)
+        shade(t.rows[i].cells[0], key_fill)
+        t.rows[i].cells[0].width = Cm(4.5)
+        t.rows[i].cells[1].width = Cm(8.5)
+    return t
+
+
+def picture(doc, img: Path, *, width_cm=15.0, center=True):
+    p = doc.add_paragraph()
+    if center:
+        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    run = p.add_run()
+    run.add_picture(str(img), width=Cm(width_cm))
+    return p
+
+
+def caption(doc, text):
+    return para(doc, text, size=10)
+
+
+def cover_gap(doc, n=3):
+    for _ in range(n):
+        para(doc, "")
+
+
+def version_table(doc, rows, *, bbp_style=False):
+    """版本记录表。bbp_style=True 时表头为 日期|姓名|版本|变更说明(S1 BBP 风格)。"""
+    headers = ["日期", "姓名", "版本", "变更说明"] if bbp_style else ["日期", "版本", "修订人", "变更说明"]
+    data_rows = [(r[0], r[1], r[2], r[3]) for r in rows]
+    return data_table(doc, headers, data_rows, center_cols=(0, 1, 2))
+
+
+def front_matter(doc, *, version_rows, bbp_style=False):
+    """版本记录页 + 目录页。"""
+    page_break(doc)
+    para(doc, "版本记录", size=16, bold=True)
+    version_table(doc, version_rows, bbp_style=bbp_style)
+    page_break(doc)
+    para(doc, "目录", size=16, bold=True)
+    add_toc(doc)
+    page_break(doc)
+
+
+# ─────────────────────────────────────────────────────────────
+# 版本计划(用户决策:V0.5 变更说明直接写变更内容;九宫格 DDS/UM 保持 V0.1)
+# ─────────────────────────────────────────────────────────────
+
+HIST_ROWS = [
+    ("2026-07-30", "V0.1", AUTHOR, "初版建立"),
+    ("2026-07-30", "V0.2", AUTHOR, "对齐项目合同里的技术规范需求与功能要求;统一 REQ/FUNC 编号与版式"),
+    ("2026-09-04", "V0.3", AUTHOR, "九宫格含 S9 全场关键指标看板;数据对接服务归入系统集成"),
+    ("2026-09-04", "V0.4", AUTHOR, "统一系统名称与文档版式,并修订范围与用词"),
+]
+
+V05_DESC = {
+    ("ChatBI", "brd"): "修订智能问答需求描述,明确报表与历史为规范目标态;统一 S1 文档版式",
+    ("ChatBI", "bbp"): "补充智能问答业务流程图与活动、情形、权限、接口、报表设计表;统一 S1 蓝图版式",
+    ("ChatBI", "dds"): "补问问答接口设计、壳表现状与降级处理设计;统一 S1 详设版式",
+    ("ChatBI", "um"): "补问浮窗操作步骤、结构化回答说明与界面截图;统一 S1 手册版式",
+    ("S9", "brd"): "修订九宫格与 S9 看板需求描述并统一 S1 文档版式",
+    ("S9", "bbp"): "补充九宫格与 S9 看板业务流程图及活动、情形、权限、接口、报表设计表;统一 S1 蓝图版式",
+    ("运营诊断", "brd"): "修订智慧诊断需求描述并统一 S1 文档版式",
+    ("运营诊断", "bbp"): "补充智慧诊断业务流程图及活动、情形、权限、接口、报表设计表;统一 S1 蓝图版式",
+    ("运营诊断", "dds"): "补充诊断 API、环节矩阵与七维下钻设计;统一 S1 详设版式",
+    ("运营诊断", "um"): "补充诊断闭环操作步骤与界面截图;统一 S1 手册版式",
+    ("运营改善", "brd"): "修订改善闭环需求描述并统一 S1 文档版式",
+    ("运营改善", "bbp"): "补充改善计划台账入口、改善闭环流程图及设计表;统一 S1 蓝图版式",
+    ("运营改善", "dds"): "补充改善计划数据表结构、审批流集成与有效性验证设计;统一 S1 详设版式",
+    ("运营改善", "um"): "补充改善建档、审批、验证与台账查询操作说明及界面截图;统一 S1 手册版式",
+    ("系统集成", "brd"): "补充第三方标准 API 推数入站(方式丙)需求;统一 S1 文档版式",
+    ("系统集成", "bbp"): "补充方式丙推数入站流程、业务动作日志与出站回写队列方案及流程图;统一 S1 蓝图版式",
+    ("系统集成", "dds"): "补充方式丙入站接口、入站台账与快照表结构、出站回写设计;统一 S1 详设版式",
+    ("系统集成", "um"): "补充数据任务日志、业务动作日志、出站回写队列操作说明与界面截图;统一 S1 手册版式",
+}
+
+
+def version_rows(mod_key: str, kind: str):
+    if mod_key == "S9" and kind == "dds":
+        return [("2026-09-15", "V0.1", AUTHOR, "初版建立(补齐九宫格模块详细设计,含数据库设计与功能处理)")]
+    if mod_key == "S9" and kind == "um":
+        return [("2026-09-15", "V0.1", AUTHOR, "初版建立(补齐九宫格用户操作手册,含界面截图与操作步骤)")]
+    return list(HIST_ROWS) + [("2026-09-15", "V0.5", AUTHOR, V05_DESC[(mod_key, kind)])]
+
+
+def doc_version(mod_key: str, kind: str) -> str:
+    if mod_key == "S9" and kind in ("dds", "um"):
+        return "V0.1"
+    return "V0.5"
+
+
+# ─────────────────────────────────────────────────────────────
+# 交付清单(文件名、封面短名、文档编号、旧版文件)
+# ─────────────────────────────────────────────────────────────
+
+DELIVER = {
+    "ChatBI": {
+        "cover_short": "ChatBI智能报表",
+        "doc_no_dds": "CBI-DDS-001", "doc_no_um": "CBI-UM-001",
+        "files": {"brd": "ChatBI智能报表业务需求描述-V0.5.docx",
+                  "bbp": "ChatBI智能报表模块蓝图设计方案-V0.5.docx",
+                  "dds": "ChatBI智能报表模块详细设计说明书-V0.5.docx",
+                  "um": "ChatBI智能报表-用户操作手册-V0.5.docx"},
+        "old": ["ChatBI智能报表业务需求描述-V0.4.docx", "ChatBI智能报表模块蓝图设计方案-V0.4.docx",
+                "ChatBI智能报表模块详细设计说明书-V0.4.docx", "ChatBI智能报表-用户操作手册-V0.4.docx"],
+    },
+    "S9": {
+        "cover_short": "九宫格智慧运营看板",
+        "doc_no_dds": "S9-DDS-001", "doc_no_um": "S9-UM-001",
+        "files": {"brd": "九宫格智慧运营看板业务需求描述-V0.5.docx",
+                  "bbp": "九宫格智慧运营看板模块蓝图设计方案-V0.5.docx",
+                  "dds": "九宫格智慧运营看板模块详细设计说明书-V0.1.docx",
+                  "um": "九宫格智慧运营看板-用户操作手册-V0.1.docx"},
+        "old": ["九宫格智慧运营看板业务需求描述-V0.4.docx", "九宫格智慧运营看板模块蓝图设计方案-V0.4.docx",
+                "九宫格智慧运营看板模块详细设计说明书-V0.1.docx", "九宫格智慧运营看板-用户操作手册-V0.1.docx"],
+    },
+    "运营诊断": {
+        "cover_short": "运营诊断",
+        "doc_no_dds": "OD-DDS-001", "doc_no_um": "OD-UM-001",
+        "files": {"brd": "运营诊断业务需求描述-V0.5.docx",
+                  "bbp": "运营诊断模块蓝图设计方案-V0.5.docx",
+                  "dds": "运营诊断模块详细设计说明书-V0.5.docx",
+                  "um": "运营诊断-用户操作手册-V0.5.docx"},
+        "old": ["运营诊断业务需求描述-V0.4.docx", "运营诊断模块蓝图设计方案-V0.4.docx",
+                "运营诊断模块详细设计说明书-V0.4.docx", "运营诊断-用户操作手册-V0.4.docx"],
+    },
+    "运营改善": {
+        "cover_short": "运营改善",
+        "doc_no_dds": "OI-DDS-001", "doc_no_um": "OI-UM-001",
+        "files": {"brd": "运营改善业务需求描述-V0.5.docx",
+                  "bbp": "运营改善模块蓝图设计方案-V0.5.docx",
+                  "dds": "运营改善模块详细设计说明书-V0.5.docx",
+                  "um": "运营改善-用户操作手册-V0.5.docx"},
+        "old": ["运营改善业务需求描述-V0.5.docx", "运营改善模块蓝图设计方案-V0.5.docx",
+                "运营改善模块详细设计说明书-V0.5.docx", "运营改善-用户操作手册-V0.5.docx"],
+    },
+    "系统集成": {
+        "cover_short": "系统集成",
+        "doc_no_dds": "INT-DDS-001", "doc_no_um": "INT-UM-001",
+        "files": {"brd": "系统集成业务需求描述-V0.5.docx",
+                  "bbp": "系统集成模块蓝图设计方案-V0.5.docx",
+                  "dds": "系统集成模块详细设计说明书-V0.5.docx",
+                  "um": "系统集成-用户操作手册-V0.5.docx"},
+        "old": ["系统集成业务需求描述-V0.5.docx", "系统集成模块蓝图设计方案-V0.5.docx",
+                "系统集成模块详细设计说明书-V0.5.docx", "系统集成-用户操作手册-V0.5.docx"],
+    },
+}
+
+
+# ─────────────────────────────────────────────────────────────
+# 模块级数据(UM 介绍、BBP 总体、DDS 架构/术语/数据库/接口)
+# ─────────────────────────────────────────────────────────────
+
+MODULE_META = {
+    "系统集成": {
+        "um_intro": "系统集成模块是 Ai-DOP 平台的数据底座,负责第三方系统(ERP/MES/WMS)的多模式对接采集、清洗标准化、同步监控与出站回写。本手册将指导您如何使用数据源管理、同步配置中心、日志查询与出站回写队列等功能。",
+        "bbp_overall_intro": "系统集成模块覆盖从第三方系统接入登记、同步任务配置执行、数据清洗入仓到出站回写的全链路,下图展示了总体业务流程。",
+        "bbp_design": "前端:Vue3 + Element Plus,数据对接服务配置与监控页面。后端:Admin.NET + 数据对接服务分层(贴源/标准/明细/指标)+ 出站回写队列;对接方式含数据库直连、HTTP API 拉取与第三方标准 API 推数入站(方式丙:签名鉴权、幂等去重、全量快照+差集、NDJSON 批量、日终对账)。",
+        "dds_scope": "本说明书覆盖系统集成模块的第三方系统同步、日志查询、第三方系统事务三个功能的详细设计,含数据对接服务(数据源管理、同步配置中心、数据任务日志、业务动作日志、出站回写队列)与方式丙标准 API 推数入站。",
+        "dds_arch": "系统集成采用数据对接服务分层架构:接入层(数据库直连执行器、HTTP API 拉取执行器、方式丙标准 API 推数入站)→ 贴源层 ODS → 标准层 STD → 明细层 DWD → 指标层 DWS;出站侧经 Outbox 幂等待推表统一回写第三方系统。同步任务由调度作业触发,执行结果写入数据任务日志与业务动作日志。",
+        "terms": [("MDP", "数据对接服务(Manufacturing Data Platform),负责采集、清洗、分层入仓与回写"),
+                  ("方式丙", "第三方标准 API 推数入站:对方系统按我方标准 API 主动推送数据,含签名鉴权与幂等"),
+                  ("ODS/STD/DWD/DWS", "贴源层/标准层/明细层/指标层,数据对接服务分层模型"),
+                  ("Outbox", "出站回写幂等待推表,统一承载回写第三方系统的事务"),
+                  ("NDJSON", "逐行 JSON 批量推送格式,每行独立幂等键"),
+                  ("AccessKey", "方式丙入站授权标识,配合签名头鉴权")],
+        "modules_tbl": [("INT-M01", "第三方系统同步", "数据源登记、同步任务配置与触发;方式丙推数入站", "数据对接服务"),
+                        ("INT-M02", "日志查询", "数据任务日志与业务动作日志的监控追溯", "INT-M01"),
+                        ("INT-M03", "第三方系统事务", "出站回写队列监控与失败容错", "INT-M01")],
+        "db_intro": "系统集成模块数据表归属数据对接服务(mdp_*)与运行保障(ado_mdp_*),覆盖接入配置、入站台账、出站回写与文件导入四类。",
+        "db_tables": [("mdp_source", "数据源登记", "连接类型/参数/凭据引用/状态"),
+                      ("mdp_entity", "源实体登记", "实体编码/来源对象/同步方向"),
+                      ("mdp_field_mapping", "字段映射", "源字段↔标准字段映射与转换"),
+                      ("mdp_sync_task", "同步任务业务配置", "task_code/task_type/consumer_modules/config_version"),
+                      ("mdp_sync_task_step", "任务步骤配置", "步骤顺序/执行器/参数"),
+                      ("mdp_sync_task_schedule", "任务调度配置", "定时/实时策略与调度作业关联"),
+                      ("mdp_sync_task_param", "任务参数", "参数键值"),
+                      ("mdp_sync_task_formula", "任务公式", "清洗转换公式"),
+                      ("mdp_inbound_grant", "入站对接授权", "access_key/对接编码/启用状态"),
+                      ("mdp_inbound_request", "入站请求台账", "幂等键/请求哈希/批次/回执/耗时"),
+                      ("mdp_inbound_envelope", "入站原始信封归档", "原始报文归档(mediumtext)"),
+                      ("mdp_inbound_snapshot", "全量快照登记", "快照状态 OPEN/DIFF_BLOCKED 等"),
+                      ("mdp_inbound_conflict", "入站冲突记录", "快照差集冲突明细"),
+                      ("mdp_field_map", "标准字段映射(入站)", "对外规范字段↔内部字段"),
+                      ("mdp_outbox", "出站回写 Outbox", "幂等键/报文/状态/重试/错误码"),
+                      ("mdp_file_import_batch", "文件导入批次", "批次/文件/状态"),
+                      ("mdp_file_import_row", "文件导入行", "行数据与校验结果"),
+                      ("mdp_file_import_error", "文件导入错误", "错误行与原因"),
+                      ("ado_mdp_hot_watch", "热点监听", "热表变更监听配置"),
+                      ("ado_mdp_rebuild_lock", "重建锁", "分层重建互斥锁")],
+        "db_core": ["mdp_sync_task", "mdp_inbound_request", "mdp_outbox"],
+        "db_rel": "mdp_sync_task 1—n mdp_sync_task_step/schedule/param/formula(config_version 版本化);mdp_inbound_request 按 (tenant_id, access_key, entity_code, idempotency_key) 唯一幂等;mdp_inbound_snapshot 1—n mdp_inbound_conflict;mdp_outbox 按 idem_key 幂等去重;核心查询均带 tenant_id 索引。",
+        "if_list": [("POST", "api/mdp/inbound/{entityCode}", "方式丙·接收推数(签名鉴权+幂等)"),
+                    ("GET", "api/mdp/inbound/{entityCode}/schema", "方式丙·对外规范字段 JSON Schema"),
+                    ("POST", "api/mdp/inbound/{entityCode}/snapshots", "方式丙·开启全量快照"),
+                    ("POST", "api/mdp/inbound/{entityCode}/snapshots/{snapshotId}/commit", "方式丙·提交快照差集"),
+                    ("POST", "api/mdp/inbound/{entityCode}/bulk", "方式丙·NDJSON 分块批量推送"),
+                    ("GET", "api/mdp/inbound/{entityCode}/digest", "方式丙·日终对账摘要"),
+                    ("GET", "api/mdp/inbound/receipts/{syncBatchId}", "方式丙·按批次查回执"),
+                    ("动态API", "api/MdpSyncTask/* 等", "数据源/同步任务/日志/队列的页面管理接口")],
+        "if_detail": "方式丙全部端点类级启用 InboundSignature 签名鉴权(签名串 方法&路径&参数&body 摘要),未开通的对接编码一律拒绝;推数按 (access_key, entity_code, idempotency_key) 幂等去重,重复请求返回原回执;全量快照差集冲突进入 DIFF_BLOCKED,须 force 提交或人工处理;日终对账按 date 输出双方计数摘要。",
+        "if_seq": "第三方系统 → 计算签名 → POST api/mdp/inbound/{entityCode} → 鉴权/幂等校验 → 清洗标准化 → 写入贴源/标准层 → 记录入站台账与回执 → 第三方按批次查回执与日终对账。",
+    },
+    "S9": {
+        "um_intro": "九宫格智慧运营看板模块是 Ai-DOP 平台的管理层总览入口,一屏展示 S1~S9 各模块核心 KPI 与红黄绿预警,并可下钻至 S9 全场关键指标看板与智慧诊断。本手册将指导您如何使用九宫格与 S9 全场关键指标看板。",
+        "bbp_overall_intro": "九宫格智慧运营看板覆盖从指标主数据、日批计算到总览预警、看板下钻与诊断联动的全链路,下图展示了总体业务流程。",
+        "bbp_design": "前端:Vue3 + Element Plus;九宫格首页与动态看板(DynamicModuleDashboard)。后端:Admin.NET + 指标层日批计算(KPI 原子聚合层→维度聚合→看板配置驱动展示);与智慧诊断、ChatBI 联动。",
+        "dds_scope": "本说明书覆盖九宫格智慧运营看板(FUNC-S9-005)与 S9 全场关键指标看板(FUNC-S9-004)两个功能的详细设计。",
+        "dds_arch": "看板采用配置驱动架构:运营指标主数据(KPI Master)定义口径与阈值 → 指标层日批(原子聚合层→维度值日表)→ 看板页面配置(dashboard_page_config/widget)→ AidopKanban API 聚合输出 → 前端动态看板渲染。九宫格首页布局由 home_module/layout_item 驱动。",
+        "terms": [("KPI Master", "运营指标主数据,定义指标编码、公式、层级与红黄绿阈值"),
+                  ("L1/L2/L3/L4", "指标层级,L1 为管理层核心指标,逐级下钻"),
+                  ("原子聚合层", "KPI 最小颗粒度日粒度聚合表,存可二次聚合基础量"),
+                  ("红黄绿", "达标状态:达标绿、预警黄、未达标红"),
+                  ("动态看板", "按页面配置动态渲染的模块看板(DynamicModuleDashboard)")],
+        "modules_tbl": [("S9-M01", "九宫格智慧运营看板", "S1~S9 模块格子总览、红黄绿预警、全屏与下钻", "指标层日批"),
+                        ("S9-M02", "S9 全场关键指标看板", "全场 L1/L2 指标卡、趋势、筛选与诊断联动", "S9-M01")],
+        "db_intro": "九宫格模块数据表归属智慧运营指标体系(ado_smart_ops_*),覆盖指标主数据、日批聚合、看板配置与业务事实四类。",
+        "db_tables": [("ado_smart_ops_kpi_master", "运营指标主数据", "指标编码/公式/层级/红黄绿阈值"),
+                      ("ado_smart_ops_kpi_atomic_day", "KPI 原子聚合层(日)", "日粒度分子/分母/样本数等基础量"),
+                      ("ado_smart_ops_kpi_dimension_value_day", "KPI 维度值日表", "按维度聚合的日指标值"),
+                      ("ado_smart_ops_kpi_target_config", "KPI 目标配置", "目标值与生效区间"),
+                      ("ado_smart_ops_kpi_calc_config", "KPI 计算配置", "计算规则与调度"),
+                      ("ado_smart_ops_kpi_calc_run_log", "KPI 计算运行日志", "批次/耗时/结果"),
+                      ("ado_smart_ops_kpi_business_input", "KPI 业务补录", "人工补录指标数据"),
+                      ("ado_smart_ops_kpi_dimension_config", "KPI 维度配置", "维度定义与取值"),
+                      ("ado_smart_ops_home_module", "九宫格模块呈现", "模块布局 card_grid/table_list"),
+                      ("ado_smart_ops_home_layout_item", "九宫格布局项", "格子顺序与展示配置"),
+                      ("ado_smart_ops_dashboard_page_config", "看板页面配置", "页面结构与筛选项"),
+                      ("ado_smart_ops_dashboard_widget", "看板部件配置", "指标卡/趋势图等部件"),
+                      ("ado_smart_ops_business_fact", "业务事实表", "指标计算源事实")],
+        "db_core": ["ado_smart_ops_kpi_master", "ado_smart_ops_kpi_atomic_day"],
+        "db_rel": "kpi_master 按 (metric_code, tenant_id) 唯一,父子自关联(parent_id)形成 L1~L4 树;kpi_atomic_day 按 (tenant_id, metric_code, stat_date, 维度键) 聚合,向上汇入 dimension_value_day;dashboard_page_config 1—n dashboard_widget;home_module 1—n home_layout_item。",
+        "if_list": [("GET", "api/AidopKanban/home-l1", "首页 L1 指标总览"),
+                    ("GET", "api/AidopKanban/home-grid/{moduleCode}", "九宫格模块格子数据"),
+                    ("GET", "api/AidopKanban/module-detail", "模块详情看板数据"),
+                    ("GET", "api/AidopKanban/dashboard-page", "动态看板页面配置与数据"),
+                    ("GET", "api/AidopKanban/smart-diagnosis/{moduleCode}", "智慧诊断联动入口")],
+        "if_detail": "看板接口按租户隔离,指标值来自维度值日表与原子聚合层日批结果;筛选上下文(时间/组织/产品等)在各接口间透传,保证九宫格→看板→诊断口径一致。",
+        "if_seq": "日批作业 → 原子聚合层/维度值日表 → 用户打开九宫格 → home-grid 聚合 → 点击格子 → dashboard-page 渲染模块看板 → 未达标项 → smart-diagnosis 联动。",
+    },
+    "运营诊断": {
+        "um_intro": "运营诊断模块是 Ai-DOP 平台的智能分析入口,承接九宫格与看板未达标指标,以订单为主线开展环节级诊断、七维下钻根因溯源,并输出诊断结论转改善闭环。本手册将指导您如何使用智慧诊断功能。",
+        "bbp_overall_intro": "运营诊断覆盖从未达标指标接入、环节识别、根因下钻到诊断报告与转改善的全链路,下图展示了总体业务流程。",
+        "bbp_design": "前端:Vue3 + Element Plus;智慧诊断页(环节诊断矩阵、目标&现状、主要问题、下钻证据区)。后端:Admin.NET + AidopKanban 诊断 API,基于统一数据抽取能力与指标层/明细层计算;改善任务生成并入 FUNC-S9-006。",
+        "dds_scope": "本说明书覆盖智慧诊断(FUNC-S9-006)的详细设计,含环节诊断矩阵、目标&现状、主要问题下钻与转改善入口。",
+        "dds_arch": "智慧诊断采用指标驱动的规则诊断架构:指标层日批结果 + 明细层单据数据 → 诊断规则引擎(环节阈值/断点/滞后识别)→ 诊断结论(环节矩阵/目标&现状/主要问题)→ L3/L4 证据下钻 → 改善计划生成(AdoSmartOpsImprovementPlan API)。",
+        "terms": [("环节矩阵", "以业务环节(订单/采购/备料/生产/入库/发运等)为行、指标为列的诊断总览"),
+                  ("七维下钻", "订单、物料、供应商、产线、仓库、时间段、人员七类根因溯源维度"),
+                  ("目标&现状", "诊断页展示指标目标值与当前实际值的对比区"),
+                  ("主要问题", "诊断输出的问题清单,可逐条下钻证据并转改善计划")],
+        "modules_tbl": [("OD-M01", "智慧诊断", "环节异常识别、七维根因下钻、诊断结论与转改善", "九宫格/看板、指标层")],
+        "db_intro": "智慧诊断本身不新增业务表,诊断计算直接读取九宫格指标层(ado_smart_ops_kpi_*)、明细层单据与各模块业务表;诊断产生的改善任务落库于运营改善模块表(ado_smart_ops_improvement_*)。",
+        "db_tables": [("(读取)ado_smart_ops_kpi_dimension_value_day", "指标日结果", "诊断输入:达标状态与偏差"),
+                      ("(读取)ado_smart_ops_kpi_master", "指标主数据", "诊断输入:阈值与口径"),
+                      ("(写入)ado_smart_ops_improvement_plan", "改善计划", "转改善输出(见运营改善模块)")],
+        "db_core": [],
+        "db_rel": "诊断侧无独立表结构;读取侧关系见九宫格模块详细设计说明书。",
+        "if_list": [("GET", "api/AidopKanban/smart-diagnosis/{moduleCode}", "智慧诊断主页数据(环节矩阵/目标现状/主要问题)"),
+                    ("GET", "api/AidopKanban/smart-diagnosis/{moduleCode}/evidence", "主要问题下钻证据明细"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/createFromDiagnosis", "由诊断主要问题生成改善计划")],
+        "if_detail": "诊断接口按模块编码与筛选上下文(期间/组织等)返回环节状态、目标&现状、主要问题列表;evidence 接口按问题与维度返回单据级证据;转改善调用运营改善模块接口并回写改善计划编号。",
+        "if_seq": "看板未达标项 → smart-diagnosis 主页 → 主要问题 → evidence 下钻明细 → 确认结论 → createFromDiagnosis 生成改善计划。",
+    },
+    "运营改善": {
+        "um_intro": "运营改善模块是 Ai-DOP 平台的闭环整改入口,承接诊断输出的问题建档,完成审批派单、行动跟踪与有效性验证,并提供改善计划台账集中查询。本手册将指导您如何使用改善计划与效果验证功能。",
+        "bbp_overall_intro": "运营改善覆盖从诊断问题建档、审批派单、行动项跟踪到效果量化复盘的全链路,下图展示了总体业务流程。",
+        "bbp_design": "前端:Vue3 + Element Plus;智慧诊断页改善闭环区与改善计划台账页。后端:Admin.NET + AdoSmartOpsImprovementPlan API + 平台审批流;效果验证对比基线与当前 KPI 并保留验证证据。",
+        "dds_scope": "本说明书覆盖改善计划与效果验证(REQ-S9-007,FUNC 并入 FUNC-S9-006)的详细设计,含诊断闭环建档、审批派单、行动跟踪、有效性验证与改善计划台账。",
+        "dds_arch": "运营改善采用计划驱动的闭环架构:诊断主要问题 → 改善计划(问题建档/行动项 JSON/责任人/到期日)→ 平台审批流派单(FlowInstanceId 回写)→ 行动项执行与日志 → 有效性验证(基线/目标/验证值/自动评价)→ 闭环;台账页提供多条件集中查询。",
+        "terms": [("改善计划", "由诊断问题建档的整改单,含根因、行动项、责任人与计划完成日"),
+                  ("行动项", "改善计划内的具体执行事项,可逐项跟踪状态"),
+                  ("有效性验证", "到期对比改善前后指标,输出验证结论(有效/部分有效/无效)"),
+                  ("改善计划台账", "全部改善计划的集中查询页,支持多条件筛选")],
+        "modules_tbl": [("OI-M01", "改善计划与效果验证", "问题建档、审批派单、行动跟踪、效果复盘与台账查询", "运营诊断、审批流")],
+        "db_intro": "运营改善模块数据表为 ado_smart_ops_improvement_* 系列,覆盖计划、行动项、日志、通知与验证五类。",
+        "db_tables": [("ado_smart_ops_improvement_plan", "智慧诊断改善计划", "计划单号/问题/根因/行动项/状态/验证结论"),
+                      ("ado_smart_ops_improvement_action", "改善行动项", "行动项明细/责任人/状态"),
+                      ("ado_smart_ops_improvement_action_log", "行动项日志", "状态流转与操作留痕"),
+                      ("ado_smart_ops_improvement_action_notice", "行动项通知", "到期提醒与催办"),
+                      ("ado_smart_ops_improvement_verify_log", "有效性验证日志", "验证提交与对比证据")],
+        "db_core": ["ado_smart_ops_improvement_plan"],
+        "db_rel": "improvement_plan 按 (tenant_id, plan_no) 唯一,1—n improvement_action;行动项状态流转写 action_log;验证提交写 verify_log;plan.flow_instance_id 关联平台审批流实例;按 (tenant_id, factory_id, module_code, status) 与 (tenant_id, due_date) 建索引支撑台账筛选。",
+        "if_list": [("POST", "api/AdoSmartOpsImprovementPlan/createFromDiagnosis", "由诊断主要问题生成改善计划"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/page", "改善计划台账分页查询"),
+                    ("GET", "api/AdoSmartOpsImprovementPlan/detail", "改善计划详情"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/submitApproval", "提交审批派单"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/startExecution", "开始执行"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/updateActionItem", "更新行动项状态"),
+                    ("GET", "api/AdoSmartOpsImprovementPlan/verificationDashboard", "有效性验证仪表(基线/当前对比)"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/submitVerification", "提交验证结论"),
+                    ("POST", "api/AdoSmartOpsImprovementPlan/close", "关闭改善计划")],
+        "if_detail": "台账分页支持状态/责任人/模块/到期区间筛选;提交审批后写回 flow_instance_id 并进入审批中心待办;验证仪表返回基线值、目标值与当前 KPI 对比,提交验证后允许关闭或继续跟踪。",
+        "if_seq": "诊断生成计划 → 保存行动项 → submitApproval 审批派单 → startExecution → updateActionItem 跟踪 → verificationDashboard 对比 → submitVerification → close 闭环。",
+    },
+    "ChatBI": {
+        "um_intro": "ChatBI 智能报表模块是 Ai-DOP 平台的自然语言问数入口,嵌入九宫格与模块看板,以对话方式返回运营指标结论、证据与建议。本手册将指导您如何使用 ChatBI 智能问答。",
+        "bbp_overall_intro": "ChatBI 覆盖从看板上下文、自然语言提问、意图解析与指标聚合到结论输出与看板/诊断跳转的链路,下图展示了总体业务流程。",
+        "bbp_design": "前端:Vue3 + Element Plus;看板内 ChatBI 浮窗。后端:ChatBIController + ChatBIService,意图解析后按当前模块聚合已发布运营指标作答,DeepSeek 可用时润色,不可用时回退本地模板答案。",
+        "dds_scope": "本说明书覆盖 ChatBI 智能问答(FUNC-S9-007)的详细设计;报表与历史(NL2SQL/查询历史)为规范目标态,当前未上线,不在本版设计范围。",
+        "dds_arch": "ChatBI 采用轻量问答架构:看板上下文(模块编码/筛选)+ 问题 → 意图解析(指标词匹配)→ 指标聚合(KPI 日表)→ 答案组装(结论/证据/原因/下一步 + 指标卡 + 跳转动作)→ (可选)LLM 润色;全程不落库,服务不可用时回退本地模板。",
+        "terms": [("ChatBI 浮窗", "嵌于九宫格与模块看板的问答窗口"),
+                  ("结构化回答", "结论/证据/可能原因/下一步建议四段式回答,附相关指标卡"),
+                  ("本地模板回退", "智能服务不可用时由本地模板生成答案(isFallback)"),
+                  ("目标态", "规范所列 NL2SQL 报表、查询历史与语义模型配置,当前未上线")],
+        "modules_tbl": [("CBI-M01", "ChatBI 智能问答", "看板内自然语言问数、结构化回答与跳转联动", "九宫格/看板、指标层")],
+        "db_intro": "ChatBI 问答实时聚合指标层数据作答,不写业务表;ado_s9_chatbi_* 为规划期壳表,未接入运行链路。",
+        "db_tables": [("(读取)ado_smart_ops_kpi_dimension_value_day", "指标日结果", "问答聚合输入"),
+                      ("(壳表)ado_s9_chatbi_*", "ChatBI 规划壳表", "查询历史/语义配置目标态,未接入")],
+        "db_core": [],
+        "db_rel": "无独立表结构;读取侧关系见九宫格模块详细设计说明书。",
+        "if_list": [("POST", "api/AidopChatBI/ask", "自然语言问数(问题+模块上下文 → 结构化回答)")],
+        "if_detail": "ask 接口入参含 question 与当前模块/筛选上下文;返回结论、证据摘要、可能原因、下一步建议、相关指标卡与跳转动作(看板/诊断);source 标记 local/deepseek,isFallback 标记降级。",
+        "if_seq": "看板页打开浮窗 → 提交问题 → ask 聚合作答 → 展示结构化回答与指标卡 → 点击动作跳转看板/诊断。",
+    },
+}
+
+
+# ─────────────────────────────────────────────────────────────
+# ENRICH:功能级内容(UM 步骤/截图/注意/FAQ;BBP 情形/权限/接口/报表表;DDS 页面/处理)
+# key: (模块, REQ 编号)
+# ─────────────────────────────────────────────────────────────
+
+ENRICH = {
+    ("系统集成", "REQ-S9-001"): {
+        "module_code": "INT-M01",
+        "menu_path": "左侧菜单 → MDIOP → 数据中台管理 → 数据源管理;同步配置中心",
+        "overview": "第三方系统同步用于登记第三方系统(ERP/MES/WMS)接入并配置同步任务,支持数据库直连、HTTP API 拉取与第三方标准 API 推数入站(方式丙),是订单至出库数据链路的入口。",
+        "roles_short": "实施工程师、系统管理员",
+        "steps_txt": [
+            "步骤1:进入“数据源管理”页面,查看已登记数据源列表(名称、类型、连接状态),可按条件筛选。",
+            "步骤2:点击“新增”登记数据源:选择接入方式(数据库直连 / HTTP API),填写连接参数与凭据后保存。",
+            "步骤3:进入“同步配置中心”页面,查看同步任务列表(任务编码、名称、类型、调度、状态)。",
+            "步骤4:新增或编辑同步任务:选择数据源与实体映射,配置定时或实时同步策略后启用。",
+            "步骤5:首次启用后在“数据任务日志”核对执行结果;方式丙对接由实施开通 AccessKey 与对接编码后,第三方按标准 API 主动推送,无需页面配置。",
+        ],
+        "steps_tbl": [("1", "查询数据源", "数据源列表支持多条件筛选,含连接状态"),
+                      ("2", "新增数据源", "选择直连或 HTTP API,凭据加密保存、不明文回显"),
+                      ("3", "配置同步任务", "选择实体映射,设定定时或实时策略"),
+                      ("4", "启用并验证", "启用后首次执行结果见“数据任务日志”"),
+                      ("5", "方式丙对接", "实施开通授权后由第三方按标准 API 推数")],
+        "shots": [("shot_int_sources.png", "数据源管理页面"), ("shot_int_tasks.png", "同步配置中心页面")],
+        "notes": ["数据源凭据加密保存,页面不回显明文密钥。",
+                  "未开通的对接编码推数一律拒绝并记录日志。",
+                  "任务停用后调度不再触发,已排队批次不受影响。"],
+        "faq": [("同步任务没有按预期执行怎么办?", "先在“数据任务日志”查看失败原因,再核对数据源连通性与任务启用状态;方式丙推数失败请核对签名与对接编码授权。")],
+        "situations": [("新增第三方系统接入", "实施在数据源管理登记连接方式与凭据,完成连通性验证后交付配置"),
+                       ("定时/实时同步", "同步配置中心按策略调度执行,结果写数据任务日志"),
+                       ("方式丙推数入站", "第三方按标准 API 主动推送,签名鉴权、幂等去重、支持快照差集与日终对账")],
+        "perm_rows": [("实施工程师", "数据源与同步任务的新增、编辑、启用/停用"),
+                      ("系统管理员", "全部配置权限与入站授权管理"),
+                      ("业务用户", "只读消费同步结果,无配置权限")],
+        "if_rows": [("数据库直连同步", "定时/实时拉取第三方数据库表", "定时(可配)"),
+                    ("HTTP API 拉取", "调用第三方接口拉数", "定时/手动"),
+                    ("标准 API 推数入站", "api/mdp/inbound 方式丙推送", "第三方触发"),
+                    ("出站回写", "Outbox 队列推送第三方", "业务触发")],
+        "rpt_rows": [("同步结果监控", "任务执行成功/失败与耗时", "见“日志查询”功能")],
+        "dds_page": ["数据源管理页:筛选区(名称/类型/状态)+ 数据源列表(名称、类型、连接状态、更新时间)+ 新增/编辑弹窗(接入方式、连接参数、凭据)。路由 /aidop/data-platform/sources。",
+                     "同步配置中心页:任务列表(任务编码、名称、类型、调度、状态)+ 任务编辑(实体映射、步骤、调度策略、参数)。路由 /aidop/data-platform/sync-tasks。"],
+        "dds_handle": ("数据源连接参数/实体映射/调度策略", "连接测试→映射校验→任务装配(步骤/调度/参数)→启用触发", "可执行同步任务与首同步结果", "凭据加密;接入方式限直连/HTTP API/方式丙;未开通对接编码拒绝", "源不可达记失败日志并告警"),
+    },
+    ("系统集成", "REQ-S9-002"): {
+        "module_code": "INT-M02",
+        "menu_path": "左侧菜单 → MDIOP → 数据中台管理 → 数据任务日志;业务动作日志",
+        "overview": "日志查询是集成运行的监控与追溯入口:数据任务日志记录同步批次执行结果,业务动作日志记录中台业务动作的执行明细,支撑运维排障与验收举证。",
+        "roles_short": "运维、系统管理员",
+        "steps_txt": [
+            "步骤1:进入“数据任务日志”页面,按时间范围、任务、状态筛选同步执行记录。",
+            "步骤2:点击失败记录,查看错误信息与失败原因摘要。",
+            "步骤3:进入“业务动作日志”页面,按时间、动作类型、状态筛选动作级执行明细。",
+            "步骤4:按批次号/任务编码在两类日志间关联,定位异常环节后转同步配置中心处置。",
+        ],
+        "steps_tbl": [("1", "筛选任务日志", "按时间/任务/状态过滤同步批次"),
+                      ("2", "查看失败详情", "错误码与失败原因摘要可追溯"),
+                      ("3", "查动作日志", "业务动作级执行明细(含耗时与结果)"),
+                      ("4", "关联处置", "按批次号关联两类日志并转任务配置处理")],
+        "shots": [("shot_int_synclogs.png", "数据任务日志页面"), ("shot_int_actionlogs.png", "业务动作日志页面")],
+        "notes": ["日志按租户隔离,仅显示当前租户数据。",
+                  "失败日志包含错误码与原因摘要,处置后可重新触发任务。",
+                  "查询无结果显示“暂无数据”,不代表系统异常。"],
+        "faq": [("失败后如何重跑?", "在“同步配置中心”重新触发对应任务,或由运维按批次重跑;重跑结果会生成新的日志记录。")],
+        "situations": [("日常监控", "运维按日检查失败任务与动作日志,确认同步健康度"),
+                       ("异常排障", "按批次关联任务日志与动作日志,定位失败环节并处置"),
+                       ("验收举证", "导出或截图日志记录作为同步执行证据")],
+        "perm_rows": [("运维", "日志查询与失败处置"),
+                      ("系统管理员", "全部日志查询权限")],
+        "if_rows": [("任务日志查询 API", "同步批次执行记录查询", "页面查询"),
+                    ("动作日志查询 API", "业务动作执行明细查询", "页面查询")],
+        "rpt_rows": [("同步监控列表", "按时间/状态的任务执行统计视图", "页面查询,可扩展导出")],
+        "dds_page": ["数据任务日志页:筛选区(时间/任务/状态)+ 批次列表(任务、开始/结束、状态、耗时、错误摘要)。路由 /aidop/data-platform/sync-logs。",
+                     "业务动作日志页:筛选区(时间/动作/状态)+ 动作列表(动作类型、批次、状态、耗时、结果摘要)。路由 /aidop/data-platform/action-run-logs。"],
+        "dds_handle": ("筛选条件", "按条件查询执行日志→失败提取错误码与摘要→关联批次", "日志列表与失败详情", "租户隔离;敏感凭据不落日志明文", "无日志返回空态"),
+    },
+    ("系统集成", "REQ-S9-003"): {
+        "module_code": "INT-M03",
+        "menu_path": "左侧菜单 → MDIOP → 数据中台管理 → 出站回写队列",
+        "overview": "第三方系统事务以出站回写队列(Outbox)监控回写第三方系统的事务状态,覆盖待推、成功、失败(死信)全生命周期,支撑业务数据双向流转与传输容错。",
+        "roles_short": "运维处理失败;业务触发;管理员配置端点",
+        "steps_txt": [
+            "步骤1:进入“出站回写队列”页面,查看事务列表(目标源、动作、状态、重试次数、创建时间)。",
+            "步骤2:按状态(待推/成功/失败)、目标数据源或动作类型筛选。",
+            "步骤3:点击失败事务,查看错误码、错误信息与请求报文摘要。",
+            "步骤4:失败事务由系统按退避策略自动重推;长期失败进入死信的,核对目标系统状态后由人工处理。",
+        ],
+        "steps_tbl": [("1", "查看事务队列", "待推/成功/失败(死信)状态全览"),
+                      ("2", "筛选定位", "按状态/目标源/动作类型过滤"),
+                      ("3", "查看失败详情", "错误码、错误信息与报文摘要"),
+                      ("4", "容错处理", "自动退避重推;死信人工核对处理")],
+        "shots": [("shot_int_outbox.png", "出站回写队列页面")],
+        "notes": ["回写统一走 Outbox,按幂等键去重,禁止无日志直连外写。",
+                  "死信事务不会自动重推,须人工核对目标系统状态后处理。",
+                  "请勿直接修改队列数据表,处置应通过页面或运维工具进行。"],
+        "faq": [("待推事务一直不减少怎么办?", "检查目标数据源路由配置与推送作业运行状态;若目标系统不可达,事务会按退避策略延后重推。")],
+        "situations": [("业务触发回写", "业务操作完成后写入 Outbox,由推送作业投递第三方"),
+                       ("失败重试", "推送失败按退避策略自动重推并记录错误码"),
+                       ("死信处置", "超过重试上限转死信,人工核对后重发或标记处理")],
+        "perm_rows": [("运维", "队列查询与失败处置"),
+                      ("系统管理员", "端点配置与全部队列权限"),
+                      ("业务用户", "触发回写,无队列操作权限")],
+        "if_rows": [("出站推送 API", "Outbox 投递第三方系统", "业务触发+作业轮询"),
+                    ("回执登记", "第三方接收结果回写队列状态", "推送后同步")],
+        "rpt_rows": [("事务成功率统计", "成功/失败/死信数量与趋势", "队列页面统计视图")],
+        "dds_page": ["出站回写队列页:状态统计区(待推/成功/死信计数)+ 筛选区(状态/目标源/动作)+ 事务列表(目标源、动作、状态、重试次数、错误码、时间)+ 失败详情抽屉。路由 /aidop/data-platform/outbox。"],
+        "dds_handle": ("业务回写请求", "写 Outbox(幂等键)→作业轮询推送→回执更新状态→失败退避重推", "回写事务状态与回执", "幂等键去重;断点续传;死信人工介入", "目标不可达记错误码并延后重推"),
+    },
+    ("S9", "REQ-S9-005"): {
+        "module_code": "S9-M01",
+        "menu_path": "左侧菜单 → MDIOP → 智慧运营看板 → 九宫格(登录后首页默认展示)",
+        "overview": "九宫格是管理层一屏总览:S1~S9 九个模块格子卡片展示核心 KPI 当前值、目标、偏差与红黄绿状态,未达标格子醒目预警,支持全屏大屏模式与点击下钻。",
+        "roles_short": "管理层(只读)、运营专员(筛选下钻)",
+        "steps_txt": [
+            "步骤1:登录系统后首页即为九宫格(也可从菜单“智慧运营看板 → 九宫格”进入)。",
+            "步骤2:浏览 S1~S9 各模块格子指标卡:当前值、目标值、偏差与红黄绿状态一目了然。",
+            "步骤3:点击页面右上角“全屏”按钮进入大屏展示模式;点击“退出全屏”或按 ESC 返回。",
+            "步骤4:点击任一模块格子,进入对应模块看板查看明细指标。",
+            "步骤5:点击格子上的“智慧诊断”按钮,可对未达标指标进入诊断分析。",
+        ],
+        "steps_tbl": [("1", "打开九宫格", "登录后首页默认展示,菜单亦可进入"),
+                      ("2", "浏览指标卡", "当前/目标/偏差/红黄绿状态"),
+                      ("3", "切换全屏", "大屏展示模式,退出全屏按钮返回"),
+                      ("4", "格子下钻", "进入对应模块看板"),
+                      ("5", "联动诊断", "未达标指标进入智慧诊断")],
+        "shots": [("shot_s9_grid.png", "九宫格首页"), ("shot_s9_fullscreen.png", "九宫格全屏模式")],
+        "notes": ["指标口径以运营指标主数据为准,页面不单独定义计算公式。",
+                  "无数据的格子显示空态占位,不影响其他格子浏览。",
+                  "全屏模式适合车间/会议室大屏投放。"],
+        "faq": [("格子显示红色代表什么?", "表示该模块存在未达标 L1 指标,点击格子进入模块看板或点击“智慧诊断”查看明细与原因。")],
+        "situations": [("管理层早会巡览", "一屏查看全场核心指标与预警,定位异常模块"),
+                       ("异常下钻", "点击红色格子进入模块看板,必要时进入智慧诊断"),
+                       ("大屏投放", "全屏模式用于现场大屏,定时刷新")],
+        "perm_rows": [("管理层", "九宫格只读查看"),
+                      ("运营专员", "筛选、下钻与诊断联动"),
+                      ("指标配置(S0)", "指标与布局配置在运营建模侧维护")],
+        "if_rows": [("home-grid 接口", "九宫格各模块格子数据", "页面加载/刷新"),
+                    ("home-l1 接口", "首页 L1 指标总览", "页面加载")],
+        "rpt_rows": [("管理层大屏视图", "全场 KPI 即时总览", "九宫格页即时报表")],
+        "dds_page": ["九宫格首页:3×3 格子卡片(模块名、L1 指标、当前/目标/偏差、红黄绿状态)+ 全屏按钮 + 智慧诊断入口;空态占位。路由 /dashboard/home(菜单 /aidop/smart-ops/grid)。",
+                     "全屏模式:隐藏导航的大屏布局,含退出全屏按钮。"],
+        "dds_handle": ("筛选上下文", "按模块聚合 L1 指标与达标状态→渲染格子卡片", "九宫格总览与预警", "口径以 KPI Master 为准;租户隔离;无数据显示空态", "日批未产出时展示上期或空态"),
+    },
+    ("S9", "REQ-S9-004"): {
+        "module_code": "S9-M02",
+        "menu_path": "左侧菜单 → MDIOP → 智慧运营看板 → S9看板",
+        "overview": "S9 全场关键指标看板以动态看板呈现全场 L1/L2 指标卡与趋势图,支持按时间、组织等条件筛选,支持指标下钻与智慧诊断联动,是九宫格的全场关键指标页。",
+        "roles_short": "管理层、部门业务人员、运营专员",
+        "steps_txt": [
+            "步骤1:从菜单“智慧运营看板 → S9看板”进入(或从九宫格 S9 格子点击进入)。",
+            "步骤2:查看顶部 L1 指标卡区:当前值、目标值、达成状态(红黄绿)。",
+            "步骤3:查看趋势图区,观察指标近周期走势。",
+            "步骤4:调整时间、组织等筛选条件,指标卡与趋势图联动刷新。",
+            "步骤5:点击未达标指标卡查看下钻指标(L2/L3);点击“智慧诊断”按钮跳转诊断分析。",
+        ],
+        "steps_tbl": [("1", "打开 S9 看板", "菜单或九宫格 S9 格子进入"),
+                      ("2", "查看 L1 指标卡", "当前/目标/达成状态"),
+                      ("3", "查看趋势", "近周期走势对比"),
+                      ("4", "条件筛选", "时间/组织等条件联动刷新"),
+                      ("5", "下钻与诊断", "L2/L3 下钻;跳转智慧诊断")],
+        "shots": [("shot_s9_board.png", "S9 全场关键指标看板")],
+        "notes": ["看板数据来自指标层日批计算(T+1),当日展示截至昨日的结果。",
+                  "筛选条件变化时,指标卡、趋势图与下钻上下文保持一致。",
+                  "下钻受数据权限约束,无权限维度不展示明细。"],
+        "faq": [("为什么今天上午看不到最新数据?", "指标为每日批处理计算,上午展示的是截至昨日的日批结果;如需确认计算状态请联系运维查看指标计算运行日志。")],
+        "situations": [("指标达成跟踪", "按周期查看全场 L1 指标达成与趋势"),
+                       ("偏差分析", "点击未达标指标查看偏差并跳转诊断"),
+                       ("自助查询", "按时间/组织/产品筛选观察波动")],
+        "perm_rows": [("管理层", "看板只读"),
+                      ("部门业务人员", "本部门相关指标查看与下钻"),
+                      ("运营专员", "筛选、下钻与诊断联动")],
+        "if_rows": [("dashboard-page 接口", "看板页面配置与数据", "页面加载/筛选刷新"),
+                    ("module-detail 接口", "模块详情指标数据", "下钻触发"),
+                    ("smart-diagnosis 接口", "未达标指标诊断联动", "点击触发")],
+        "rpt_rows": [("全场指标视图", "L1/L2 指标与趋势", "看板页即时报表,可扩展导出")],
+        "dds_page": ["S9 看板页:筛选区(时间/组织等)+ L1 指标卡区(当前/目标/状态)+ 趋势图区 + 下钻卡片区(L2/L3)+ 全屏与智慧诊断按钮。路由 /aidop/smart-ops/s9(动态看板 DynamicModuleDashboard 渲染)。"],
+        "dds_handle": ("筛选条件/页面配置", "按页面配置装配部件→聚合指标日结果→渲染卡片与趋势", "全场指标看板视图", "展示口径不得与 KPI Master 冲突;下钻受数据权限约束", "无数据部件空态提示"),
+    },
+    ("运营诊断", "REQ-S9-006"): {
+        "module_code": "OD-M01",
+        "menu_path": "左侧菜单 → MDIOP → 智慧诊断(也可从九宫格/看板未达标指标点击进入)",
+        "overview": "智慧诊断对未达标指标开展环节级诊断:以订单为主线串联各业务节点,通过诊断闭环卡、目标&现状、主要问题与环节矩阵定位异常,支持按订单、物料、供应商、产线、仓库、时间段、人员七类维度下钻根因,并可一键转改善闭环。",
+        "roles_short": "运营专员执行诊断;管理层只读;责任部门配合举证",
+        "steps_txt": [
+            "步骤1:从九宫格/看板的未达标指标点击进入智慧诊断(或从菜单“智慧诊断”进入),系统带入指标与筛选上下文。",
+            "步骤2:查看诊断闭环卡与“目标&现状”区,确认指标目标值与当前实际值的差距。",
+            "步骤3:在“主要问题”区点击问题条目,下钻查看 L3/L4 证据明细(订单/物料/供应商等维度)。",
+            "步骤4:查看环节矩阵,定位断点、滞后、损耗等异常发生的业务环节。",
+            "步骤5:确认诊断结论后,点击“生成改善计划”将问题转入改善闭环(功能编号 FUNC-S9-006)。",
+        ],
+        "steps_tbl": [("1", "进入诊断", "看板未达标项带入上下文,菜单亦可直接进入"),
+                      ("2", "查看目标&现状", "目标值与实际值对比,确认差距"),
+                      ("3", "问题下钻", "按七类维度查看证据明细"),
+                      ("4", "环节矩阵", "定位异常业务环节"),
+                      ("5", "转改善", "生成改善计划进入闭环")],
+        "shots": [("shot_od_main.png", "智慧诊断主页(诊断闭环与目标&现状)"), ("shot_od_drill.png", "主要问题下钻与环节矩阵")],
+        "notes": ["诊断结论以对接数据就绪为前提;第三方数据延迟不计入本系统缺陷。",
+                  "下钻维度取决于主数据与明细接通程度,未接通维度不展示。",
+                  "无异常期间诊断页显示良好态或空问题列表,不报错。"],
+        "faq": [("诊断页没有数据怎么办?", "确认对应模块已有指标日批结果,且当前筛选期间存在未达标项;两者都满足仍无数据时请联系运维检查诊断作业。")],
+        "situations": [("看板下钻诊断", "未达标指标一键带入诊断,保留筛选上下文"),
+                       ("七维根因溯源", "按订单/物料/供应商/产线/仓库/时间段/人员下钻证据"),
+                       ("转改善闭环", "主要问题确认后生成改善计划,功能并入 FUNC-S9-006")],
+        "perm_rows": [("运营专员", "诊断执行、下钻与转改善"),
+                      ("管理层", "诊断结论只读"),
+                      ("责任部门", "证据配合查看")],
+        "if_rows": [("smart-diagnosis 接口", "诊断主页数据(环节矩阵/目标现状/主要问题)", "页面加载"),
+                    ("evidence 接口", "主要问题证据明细", "下钻触发"),
+                    ("createFromDiagnosis 接口", "生成改善计划", "点击触发")],
+        "rpt_rows": [("运营诊断报告摘要", "结论、根因与建议", "页面展示;正式报告导出为后续扩展")],
+        "dds_page": ["智慧诊断主页:诊断闭环卡(识别/下钻/结论/转改善四卡)+ 目标&现状区 + 主要问题列表 + 环节矩阵。路由 /aidop/smart-diagnosis。",
+                     "下钻区:主要问题 → L3/L4 证据明细(维度筛选);转改善入口。"],
+        "dds_handle": ("指标上下文/筛选条件", "环节规则识别→目标现状对比→主要问题装配→证据下钻", "诊断结论与问题清单", "结论可追溯订单主线或指标编码;支持七维下钻", "数据未就绪时良好态/空态提示"),
+    },
+    ("运营改善", "REQ-S9-007"): {
+        "module_code": "OI-M01",
+        "menu_path": "左侧菜单 → MDIOP → 智慧诊断(改善闭环区);台账查询:MDIOP → 智慧运营看板 → 改善计划台账",
+        "overview": "改善计划与效果验证承接诊断输出的问题建档,完成整改派单(平台审批流)、行动项过程跟踪与有效性验证(改善前后指标对比),并提供改善计划台账集中查询全部计划。",
+        "roles_short": "运营专员建档与复盘;责任人执行;审批人派单审批;管理层只读",
+        "steps_txt": [
+            "步骤1:在智慧诊断“主要问题”区点击“生成改善计划”,系统带入问题上下文完成建档。",
+            "步骤2:填写根因、行动项、责任人与计划完成日期,保存改善计划。",
+            "步骤3:点击“提交审批”,改善单进入审批中心待办,由审批人完成派单审批。",
+            "步骤4:审批通过后开始执行,责任人定期更新行动项状态,运营专员过程跟踪。",
+            "步骤5:到期打开“有效性验证”,对比基线值与当前 KPI,填写验证结论并提交,确认闭环或继续跟踪。",
+            "步骤6:进入“改善计划台账”页,按状态、责任人、模块等条件筛选,集中跟踪全部改善计划。",
+        ],
+        "steps_tbl": [("1", "问题建档", "由诊断主要问题生成改善计划"),
+                      ("2", "填写计划", "根因/行动项/责任人/完成日"),
+                      ("3", "提交审批", "审批中心待办,状态回写"),
+                      ("4", "执行跟踪", "行动项状态更新与日志"),
+                      ("5", "效果验证", "基线与当前 KPI 对比,提交结论"),
+                      ("6", "台账查询", "多条件筛选集中跟踪")],
+        "shots": [("shot_od_main.png", "智慧诊断改善闭环区"), ("shot_oi_plans.png", "改善计划台账页面")],
+        "notes": ["改善单必须关联诊断问题或指标,保证端到端追溯。",
+                  "责任人或计划完成日缺失时无法保存(必填校验)。",
+                  "验证结论保留基线值、目标值与验证值,提交后不可随意篡改。"],
+        "faq": [("改善计划台账在哪里?", "左侧菜单 → MDIOP → 智慧运营看板 → 改善计划台账,可按状态、责任人、模块等条件筛选查询。")],
+        "situations": [("诊断转改善", "主要问题一键建档,保留诊断上下文"),
+                       ("审批派单", "提交平台审批流,审批人待办处理"),
+                       ("效果复盘", "验证仪表对比改善前后指标,量化结论闭环")],
+        "perm_rows": [("运营专员", "建档、提交审批、验证与复盘"),
+                      ("责任人", "行动项执行与状态更新"),
+                      ("审批人", "派单审批"),
+                      ("管理层", "台账只读")],
+        "if_rows": [("改善计划 API", "建档/台账/详情/状态流转", "页面触发"),
+                    ("平台审批流", "派单审批待办", "提交触发"),
+                    ("KPI 对比查询", "验证仪表基线与当前值", "验证触发")],
+        "rpt_rows": [("改善任务清单", "全部计划与状态", "台账页查询,可扩展导出"),
+                     ("成效对比", "改善前后指标对比", "验证仪表视图")],
+        "dds_page": ["诊断闭环区:主要问题 → 生成改善计划表单(根因/行动项/责任人/完成日)→ 提交审批 → 有效性验证仪表(基线/当前对比)。",
+                     "改善计划台账页:筛选区(状态/责任人/模块/到期区间)+ 计划列表(计划单号、问题、责任人、状态、完成日、验证结论)。路由 /aidop/smart-ops/improvement-plans。"],
+        "dds_handle": ("诊断问题上下文", "建档→行动项装配→审批派单→执行跟踪→验证对比→闭环", "改善计划全生命周期状态", "必须关联诊断/指标;必填校验;验证证据保留", "无诊断上下文或必填缺失时拒绝保存"),
+    },
+    ("ChatBI", "REQ-S9-009"): {
+        "module_code": "CBI-M01",
+        "menu_path": "九宫格 / 模块看板页面右下角“MDIOP CHATBI”浮窗",
+        "overview": "ChatBI 智能问答嵌入九宫格与模块看板,用户以自然语言提问运营指标,系统返回结论、证据、可能原因与下一步建议,并展示相关指标卡,可直接跳转看板或智慧诊断。",
+        "roles_short": "管理层、运营专员",
+        "steps_txt": [
+            "步骤1:打开九宫格或任一模块看板页面。",
+            "步骤2:点击页面右下角“MDIOP CHATBI”浮窗,打开问答面板。",
+            "步骤3:在输入框输入自然语言问题(如“本周 OTD 怎么样”),或点选面板提供的建议问题。",
+            "步骤4:查看结构化回答:结论、证据、可能原因、下一步建议,以及相关指标卡。",
+            "步骤5:点击回答中的跳转按钮,进入对应看板或智慧诊断继续分析;也可继续追问。",
+        ],
+        "steps_tbl": [("1", "打开问答浮窗", "九宫格/看板右下角入口"),
+                      ("2", "提问", "自然语言输入或点选建议问题"),
+                      ("3", "查看回答", "结论/证据/原因/建议 + 指标卡"),
+                      ("4", "跳转联动", "一键进入看板或智慧诊断")],
+        "shots": [("shot_cb_widget.png", "ChatBI 问答浮窗"), ("shot_cb_answer.png", "ChatBI 结构化回答")],
+        "notes": ["问答只解释已发布运营指标,不改写业务单据。",
+                  "提问与结果受当前租户与数据权限约束。",
+                  "智能服务不可用时回退本地模板答案,回答中标注来源(local/deepseek)。"],
+        "faq": [("回答显示 local 来源是什么意思?", "表示智能服务(DeepSeek)不可用,系统回退本地模板生成答案;结论基于已发布指标计算,仍可参考。")],
+        "situations": [("看数问答", "针对当前看板模块提问指标达成与波动"),
+                       ("追问分析", "按建议问题连续追问,逐步深入"),
+                       ("跳转闭环", "从回答跳转看板核实或进入诊断分析")],
+        "perm_rows": [("管理层", "问答使用"),
+                      ("运营专员", "问答使用与跳转联动")],
+        "if_rows": [("ChatBI ask 接口", "自然语言问数聚合作答", "提问触发")],
+        "rpt_rows": [("问答结论与指标卡", "结构化回答内容", "浮窗即时展示")],
+        "dds_page": ["ChatBI 浮窗:问答面板(输入框 + 建议问题 + 回答区);回答区为四段式结构(结论/证据/原因/下一步)+ 指标卡 + 跳转按钮。嵌入九宫格与模块看板。"],
+        "dds_handle": ("问题文本+模块上下文", "意图解析→指标聚合→答案组装→(可选)LLM 润色", "结构化回答与指标卡", "仅解释已发布指标;租户与数据权限约束;不落库", "服务不可用回退本地模板(isFallback)"),
+    },
+}
+
+
+# 模块总体流程链(与 _gen_flow_diagrams.OVERALL 一致,用于 BBP 1.2 图后文字)
+OVERALL_FLOW = {
+    "系统集成": ["第三方系统(ERP/MES/WMS)", "数据源登记/标准API推数(方式丙)", "同步任务执行与清洗标准化", "贴源/标准/指标层入仓", "业务模块与看板消费", "出站回写第三方系统"],
+    "S9": ["运营指标主数据", "指标层日批计算", "九宫格总览(红黄绿预警)", "格子下钻模块看板", "联动智慧诊断"],
+    "运营诊断": ["看板未达标指标", "智慧诊断环节识别", "七维下钻根因溯源", "诊断结论与报告", "转改善闭环"],
+    "运营改善": ["诊断问题建档", "审批派单到责任人", "行动项执行跟踪", "有效性验证(前后对比)", "复盘闭环与经验固化"],
+    "ChatBI": ["看板/九宫格上下文", "自然语言提问", "意图解析与指标聚合", "结论与建议输出", "跳转看板或诊断"],
+}
+
+
+def live_features(mod):
+    return [f for f in mod["features"] if f.get("impl_status") != "未实现"]
+
+
+def flow_img(mod_key, feat=None):
+    prefix = FLOW_PREFIX[mod_key]
+    if feat is None:
+        return FLOWS / f"{prefix}_overall.png"
+    return FLOWS / f"{prefix}_{feat['func'].lower().replace('-', '_')}.png"
+
+
+def shot_img(name):
+    return SHOTS / name
+
+
+# ─────────────────────────────────────────────────────────────
+# BRD:业务需求描述(S1 风格)
+# ─────────────────────────────────────────────────────────────
+
+def write_brd(mod_key: str, mod: dict, out_path: Path):
+    doc = new_doc("brd")
+    meta = MODULE_META[mod_key]
+    ver = doc_version(mod_key, "brd")
+
+    # 封面(S1 BRD:28pt 模块名 / 22pt 文档类型 / 13pt 系统名 + 文档编号表)
+    cover_gap(doc, 3)
+    para(doc, mod["module_title"], size=28, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, "业务需求描述", size=22, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, SYSTEM_NAME, size=13, align=WD_ALIGN_PARAGRAPH.CENTER)
+    cover_gap(doc, 1)
+    kv_table(doc, [("文档编号", mod["doc_no_brd"]), ("版本", ver), ("密级", "内部"),
+                   ("编制单位", AUTHOR), ("编制日期", TODAY_ISO)])
+    front_matter(doc, version_rows=version_rows(mod_key, "brd"))
+
+    # 范围说明
+    h2(doc, "范围说明")
+    para(doc, f"本文件描述「{mod['module_title']}」业务需求,系统名称为 {SYSTEM_NAME}。")
+    para(doc, f"报价范围对齐:{mod['quote_scope']}。")
+    para(doc, "需求与功能要求以项目合同里的技术规范对应章节为准,并与报价单、三联对照表一致;不得偏离技术规范已列明的能力边界。")
+    para(doc, "需求编号格式 REQ-S9-nnn;与功能编号、测试编号通过三联对照表串联。")
+    if mod.get("intro"):
+        para(doc, mod["intro"])
+    if mod_key == "ChatBI":
+        para(doc, "说明:ChatBI 报表与历史(NL2SQL 报表、查询历史、语义模型配置)为技术规范 2.6.4 目标态能力,当前版本未上线,不纳入本期需求范围;上线后另行补充需求与验收。")
+
+    for i, feat in enumerate(live_features(mod), 1):
+        h2(doc, f"({CN_NUM[i]}){feat['name']}({feat['req']})")
+        h3(doc, "功能说明")
+        if feat.get("tech_clause"):
+            para(doc, f"本功能对应{feat['tech_clause']}。")
+        for t in feat["func_desc"]:
+            para(doc, t)
+        h3(doc, "业务描述")
+        for t in feat["biz_desc"]:
+            para(doc, t)
+        para(doc, f"对应功能编号:{feat['func']};系统路径:{feat['path']}。", bold=True)
+
+    out_path.parent.mkdir(parents=True, exist_ok=True)
+    doc.save(out_path)
+    print("BRD", out_path.name)
+
+
+# ─────────────────────────────────────────────────────────────
+# BBP:蓝图设计方案(S1 风格)
+# ─────────────────────────────────────────────────────────────
+
+def write_bbp(mod_key: str, mod: dict, out_path: Path):
+    doc = new_doc("bbp")
+    meta = MODULE_META[mod_key]
+    ver = doc_version(mod_key, "bbp")
+
+    # 封面(S1 BBP:26pt 模块名 / 26pt 文档类型 / 14pt 系统名 / 11pt 版本行)
+    cover_gap(doc, 3)
+    para(doc, mod["module_title"], size=26, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, "蓝图设计方案", size=26, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, SYSTEM_NAME, size=14, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, f"版本:{ver}    日期:{TODAY_CN}    作者:{AUTHOR}", size=11, align=WD_ALIGN_PARAGRAPH.CENTER)
+    front_matter(doc, version_rows=version_rows(mod_key, "bbp"), bbp_style=True)
+
+    # 1 总体业务方案
+    h1(doc, "1  总体业务方案")
+    h2(doc, "1.1  目标和宗旨")
+    para(doc, f"落实报价范围「{mod['quote_scope']}」,并将项目合同里的技术规范中对应功能要求转化为可配置、可验收的功能方案。")
+    if mod.get("intro"):
+        para(doc, mod["intro"])
+    for t in mod.get("tech_spec", [])[:4]:
+        if mod.get("intro") and t == mod["intro"]:
+            continue
+        para(doc, t)
+    h2(doc, "1.2  总体业务流程图")
+    para(doc, meta["bbp_overall_intro"])
+    img = flow_img(mod_key)
+    if img.exists():
+        picture(doc, img)
+    para(doc, "流程路径:" + " → ".join(OVERALL_FLOW[mod_key]) + "。")
+    h2(doc, "1.3  方案设计")
+    para(doc, meta["bbp_design"])
+
+    for idx, feat in enumerate(live_features(mod), 2):
+        enr = ENRICH[(mod_key, feat["req"])]
+        h1(doc, f"{idx}  {feat['name']}({feat['func']})")
+        h2(doc, f"{idx}.1  目标/宗旨")
+        para(doc, feat["goal"])
+        if feat.get("tech_clause"):
+            para(doc, f"规范追溯:{feat['tech_clause']}。", bold=True)
+        h2(doc, f"{idx}.2  业务流程图")
+        fimg = flow_img(mod_key, feat)
+        if fimg.exists():
+            picture(doc, fimg)
+        para(doc, "流程路径:" + " → ".join(s[1] for s in feat["flow_steps"]) + "。")
+        h2(doc, f"{idx}.3  业务流程说明")
+        for t in feat["biz_desc"]:
+            para(doc, t)
+        data_table(doc, ["编号", "活动名称", "执行角色", "活动描述", "输入", "输出"],
+                   [(s[0], s[1], s[2], s[3], s[4], s[5]) for s in feat["flow_steps"]], size=10)
+        para(doc, "")
+        data_table(doc, ["序列号", "业务情形", "描述/方案"],
+                   [(str(i + 1), a, b) for i, (a, b) in enumerate(enr["situations"])], size=10)
+        h2(doc, f"{idx}.4  业务流程规则")
+        for t in feat["rules"]:
+            para(doc, "• " + t)
+        h2(doc, f"{idx}.5  权限管理需求")
+        data_table(doc, ["序号", "岗位名称", "对应系统权限"],
+                   [(str(i + 1), a, b) for i, (a, b) in enumerate(enr["perm_rows"])], size=10)
+        para(doc, feat["roles"])
+        h2(doc, f"{idx}.6  系统接口集成")
+        data_table(doc, ["序号", "接口名称", "接口说明", "频次及触发方式"],
+                   [(str(i + 1), a, b, c) for i, (a, b, c) in enumerate(enr["if_rows"])], size=10)
+        para(doc, feat["interfaces"])
+        h2(doc, f"{idx}.7  报表需求")
+        data_table(doc, ["序号", "名称", "描述", "方案"],
+                   [(str(i + 1), a, b, c) for i, (a, b, c) in enumerate(enr["rpt_rows"])], size=10)
+        para(doc, feat["reports"])
+        para(doc, f"对应需求:{feat['req']};路由:{feat['route']}。", bold=True)
+
+    out_path.parent.mkdir(parents=True, exist_ok=True)
+    doc.save(out_path)
+    print("BBP", out_path.name)
+
+
+# ─────────────────────────────────────────────────────────────
+# DDS:详细设计说明书(S1 风格)
+# ─────────────────────────────────────────────────────────────
+
+TECH_STACK = [("前端", "Vue 3 + Vite + TypeScript + Element Plus", "3.x", "用户界面与交互"),
+              ("后端", ".NET 10 + Admin.NET (Furion + SqlSugar)", "10.0", "业务逻辑与 API 服务"),
+              ("数据存储", "MySQL", "8.0", "业务数据与中台数据"),
+              ("基础设施", "Docker + Nginx", "—", "容器化部署与反向代理")]
+
+# 核心表字段结构(DDS 4.3):表名 -> (中文名, [(字段, 类型, 说明)])
+CORE_TABLE_COLS = {
+    "mdp_sync_task": ("MDP 同步任务业务配置", [
+        ("id", "bigint", "主键"), ("tenant_id", "bigint", "租户"),
+        ("task_code", "varchar(100)", "任务编码"), ("task_name", "varchar(200)", "任务名称"),
+        ("task_type", "varchar(40)", "任务类型(默认 SERVICE_SYNC)"),
+        ("business_domain_code", "varchar(100)", "业务域编码"),
+        ("consumer_modules", "varchar(500)", "消费模块清单"),
+        ("source_system_code", "varchar(100)", "来源系统编码"),
+        ("service_key", "varchar(100)", "服务键"), ("job_code", "varchar(100)", "作业编码"),
+        ("schedule_job_id", "varchar(100)", "调度作业 Id"),
+        ("status", "int", "状态(1 启用)"), ("owner_role", "varchar(100)", "责任角色"),
+        ("config_version", "int", "配置版本"), ("description", "varchar(1000)", "描述"),
+        ("create_time", "datetime", "创建时间"), ("update_time", "datetime", "更新时间")]),
+    "mdp_inbound_request": ("方式丙入站请求台账", [
+        ("id", "bigint", "主键"), ("tenant_id", "bigint", "租户"),
+        ("access_key", "varchar(64)", "入站授权标识"),
+        ("entity_code", "varchar(100)", "对接实体编码"),
+        ("idempotency_key", "varchar(128)", "幂等键"),
+        ("request_hash", "varchar(64)", "请求报文哈希"),
+        ("sync_batch_id", "varchar(64)", "同步批次号"),
+        ("snapshot_id", "varchar(64)", "快照号(全量场景)"),
+        ("status", "varchar(16)", "状态(RECEIVED 等)"),
+        ("http_status", "int", "响应 HTTP 状态"), ("accepted", "int", "接收条数"),
+        ("rejected", "int", "拒绝条数"), ("receipt_json", "mediumtext", "回执报文"),
+        ("client_ip", "varchar(64)", "调用方 IP"), ("elapsed_ms", "int", "处理耗时(毫秒)"),
+        ("create_time", "datetime", "创建时间"), ("update_time", "datetime", "更新时间")]),
+    "mdp_outbox": ("MDP 出站回写 Outbox(幂等待推表)", [
+        ("id", "bigint", "主键"), ("tenant_id", "bigint", "租户"),
+        ("target_source_code", "varchar(100)", "目标数据源编码"),
+        ("action_code", "varchar(100)", "回写动作编码"),
+        ("idem_key", "varchar(200)", "幂等键"),
+        ("payload_json", "text", "回写报文"),
+        ("status", "int", "状态:0 待推 1 成功 2 失败"),
+        ("retry_count", "int", "已重试次数"),
+        ("next_retry_time", "datetime", "下次可推时间(退避策略)"),
+        ("last_error_code", "varchar(64)", "最近错误码"),
+        ("response_json", "text", "目标系统回执"), ("error_msg", "varchar(1000)", "错误信息"),
+        ("create_time", "datetime", "创建时间"), ("update_time", "datetime", "更新时间")]),
+    "ado_smart_ops_kpi_master": ("运营指标主数据(KPI Master)", [
+        ("id", "bigint", "主键"),
+        ("metric_code", "varchar(50)", "指标编码(S1_L1_001 等)"),
+        ("module_code", "varchar(20)", "所属模块 S1~S9"),
+        ("metric_level", "int", "层级 1=L1 … 4=L4"),
+        ("parent_id", "bigint", "父指标 Id(L1 为空)"),
+        ("metric_name", "varchar(200)", "指标名称"),
+        ("formula", "text", "计算公式"), ("formula_expr", "varchar(500)", "结构化表达式"),
+        ("data_source", "varchar(200)", "数据来源模块"),
+        ("direction", "varchar(20)", "优劣方向 higher/lower_is_better"),
+        ("yellow_threshold", "decimal", "黄色阈值"), ("red_threshold", "decimal", "红色阈值"),
+        ("is_home_page", "bool", "是否可上九宫格首页"),
+        ("is_enabled", "bool", "启用"), ("tenant_id", "bigint", "租户")]),
+    "ado_smart_ops_kpi_atomic_day": ("KPI 原子聚合层(日)", [
+        ("id", "bigint", "主键"), ("tenant_id", "bigint", "租户"),
+        ("factory_id", "bigint", "工厂"), ("domain_code", "varchar(50)", "业务对象域"),
+        ("metric_code", "varchar(50)", "指标编码"), ("metric_level", "int", "指标层级"),
+        ("stat_date", "date", "统计日期"),
+        ("customer_code/product_code/order_no 等", "varchar(100)", "客户/产品/订单/产线/供应商/物料/仓库/工单等维度键"),
+        ("sum_value", "decimal(18,6)", "可累加值"),
+        ("numerator_value", "decimal(18,6)", "比率分子"),
+        ("denominator_value", "decimal(18,6)", "比率分母"),
+        ("sample_count", "int", "样本数"),
+        ("batch_id", "varchar(100)", "MDP 批次"), ("calc_time", "datetime", "计算时间"),
+        ("grain", "varchar(20)", "统计粒度(day)")]),
+    "ado_smart_ops_improvement_plan": ("智慧诊断改善计划", [
+        ("id", "bigint", "主键"), ("tenant_id", "bigint", "租户"),
+        ("factory_id", "bigint", "工厂"),
+        ("plan_no", "varchar(64)", "计划单号"), ("module_code", "varchar(20)", "模块编码"),
+        ("metric_code", "varchar(64)", "诊断根指标编码"),
+        ("problem_level", "int", "问题层级"),
+        ("problem_name", "varchar(200)", "问题名称"),
+        ("problem_severity", "varchar(16)", "严重度 red/yellow"),
+        ("target_value", "varchar(64)", "目标值"), ("actual_value", "varchar(64)", "实际值"),
+        ("root_cause", "text", "根因分析"), ("action_items_json", "text", "行动项 JSON"),
+        ("owner_user_id", "bigint", "责任人"), ("due_date", "datetime", "计划完成日期"),
+        ("status", "varchar(32)", "状态(draft 等)"),
+        ("flow_instance_id", "bigint", "审批实例 Id"),
+        ("verify_result", "varchar(32)", "验证结论"), ("verify_value", "varchar(64)", "验证值"),
+        ("auto_verify_result", "varchar(32)", "自动有效性结论"),
+        ("auto_verify_time", "datetime", "自动评价时间")]),
+}
+
+
+def write_dds(mod_key: str, mod: dict, out_path: Path):
+    doc = new_doc("dds")
+    meta = MODULE_META[mod_key]
+    dl = DELIVER[mod_key]
+    ver = doc_version(mod_key, "dds")
+    feats = live_features(mod)
+
+    # 封面(S1 DDS:项目信息表 6 行)
+    cover_gap(doc, 2)
+    para(doc, mod["module_title"], size=26, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, "详细设计说明书", size=22, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, SYSTEM_NAME, size=14, align=WD_ALIGN_PARAGRAPH.CENTER)
+    cover_gap(doc, 1)
+    kv_table(doc, [("项目名称", SYSTEM_NAME), ("系统名称", dl["cover_short"]),
+                   ("文档版本", ver), ("文档状态", "发布"),
+                   ("编制单位", AUTHOR), ("编制日期", TODAY_ISO)])
+    front_matter(doc, version_rows=version_rows(mod_key, "dds"))
+
+    # 1. 文档概述
+    h1(doc, "1. 文档概述")
+    h2(doc, "1.1 编写目的")
+    para(doc, f"本说明书描述{SYSTEM_NAME}「{dl['cover_short']}」的详细设计,包括系统总体设计、功能模块详细设计、数据库设计、接口设计与安全多租户设计,作为开发实现、测试验证与验收的技术依据。")
+    h2(doc, "1.2 设计范围")
+    para(doc, meta["dds_scope"])
+    para(doc, f"报价范围对齐:{mod['quote_scope']}。")
+    h2(doc, "1.3 术语和缩略语")
+    data_table(doc, ["术语/缩写", "说明"], meta["terms"], center_cols=())
+
+    # 2. 系统总体设计
+    h1(doc, "2. 系统总体设计")
+    h2(doc, "2.1 系统目标和范围")
+    para(doc, f"落实报价范围「{mod['quote_scope']}」。")
+    for feat in feats:
+        para(doc, f"• {feat['name']}({feat['func']}):{feat['goal']}")
+    h2(doc, "2.2 总体架构")
+    para(doc, meta["dds_arch"])
+    h2(doc, "2.3 技术栈")
+    data_table(doc, ["层次", "技术/组件", "版本", "用途"], TECH_STACK, center_cols=(0, 2))
+    h2(doc, "2.4 模块划分")
+    data_table(doc, ["模块编号", "模块名称", "主要职责", "依赖模块"], meta["modules_tbl"], center_cols=(0,))
+
+    # 3. 功能模块详细设计
+    h1(doc, "3. 功能模块详细设计")
+    h2(doc, "3.1 功能清单")
+    data_table(doc, ["功能编号", "功能名称", "所属模块", "用户角色", "简要说明"],
+               [(f["func"], f["name"], ENRICH[(mod_key, f["req"])]["module_code"],
+                 ENRICH[(mod_key, f["req"])]["roles_short"], f["goal"]) for f in feats],
+               size=10, center_cols=(0, 2))
+    h2(doc, "3.2 模块详细设计")
+    for n, feat in enumerate(feats, 1):
+        enr = ENRICH[(mod_key, feat["req"])]
+        h3(doc, f"3.2.{n}  {feat['name']}({enr['module_code']})")
+        kv_table(doc, [("模块编号", enr["module_code"]), ("模块名称", feat["name"]),
+                       ("模块目标", feat["goal"]), ("对应需求", feat["req"]),
+                       ("功能编号", feat["func"]), ("系统路由", feat["route"])])
+        para(doc, "")
+        h3(doc, f"3.2.{n}.1  业务流程")
+        para(doc, "流程路径:" + " → ".join(s[1] for s in feat["flow_steps"]) + "。")
+        data_table(doc, ["编号", "活动名称", "执行角色", "活动描述", "输入", "输出"],
+                   [(s[0], s[1], s[2], s[3], s[4], s[5]) for s in feat["flow_steps"]], size=10)
+        para(doc, "")
+        h3(doc, f"3.2.{n}.2  功能处理")
+        hd = enr["dds_handle"]
+        data_table(doc, ["功能编号", "输入", "主要处理", "输出", "业务规则", "异常处理"],
+                   [(feat["func"], hd[0], hd[1], hd[2], hd[3], hd[4])], size=10, center_cols=(0,))
+        para(doc, "")
+        h3(doc, f"3.2.{n}.3  页面设计")
+        for t in enr["dds_page"]:
+            para(doc, t)
+        h3(doc, f"3.2.{n}.4  设计验证要点")
+        for tc in feat["tcs"]:
+            para(doc, f"• [{tc[1]}] {tc[3]}:{tc[5]}")
+
+    # 4. 数据库设计
+    h1(doc, "4. 数据库设计")
+    h2(doc, "4.1 数据库说明")
+    para(doc, meta["db_intro"])
+    h2(doc, "4.2 数据表清单")
+    data_table(doc, ["序号", "表名", "说明", "核心内容"],
+               [(str(i + 1), a, b, c) for i, (a, b, c) in enumerate(meta["db_tables"])],
+               size=10, center_cols=(0,))
+    h2(doc, "4.3 表结构设计")
+    if meta["db_core"]:
+        for tname in meta["db_core"]:
+            cn, cols = CORE_TABLE_COLS[tname]
+            para(doc, f"表 {tname}({cn})", bold=True)
+            data_table(doc, ["字段", "类型", "说明"], cols, size=10, center_cols=())
+            para(doc, "")
+    else:
+        para(doc, meta["db_rel"])
+    h2(doc, "4.4 表关系和索引")
+    para(doc, meta["db_rel"])
+
+    # 5. 接口设计
+    h1(doc, "5. 接口设计")
+    h2(doc, "5.1 接口清单")
+    data_table(doc, ["序号", "方式", "接口路径", "说明"],
+               [(str(i + 1), a, b, c) for i, (a, b, c) in enumerate(meta["if_list"])],
+               size=10, center_cols=(0, 1))
+    h2(doc, "5.2 接口详细设计")
+    para(doc, meta["if_detail"])
+    h2(doc, "5.3 接口时序")
+    para(doc, meta["if_seq"])
+
+    # 6. 安全与多租户设计
+    h1(doc, "6. 安全与多租户设计")
+    para(doc, "认证与鉴权:页面接口经平台 JWT 认证与菜单/按钮权限控制;方式丙入站接口采用 AccessKey + 签名头鉴权,不加裸授权与匿名放行。")
+    para(doc, "多租户:全部业务表携带 tenant_id 并启用租户过滤器,跨租户数据不可见;九宫格、诊断、改善与看板接口按当前租户聚合。")
+    para(doc, "数据安全:数据源凭据加密保存且不回显;敏感字段不落日志明文;出站回写统一经 Outbox 幂等键去重,防止重复外写。")
+
+    # 7. 附录及变更记录
+    h1(doc, "7. 附录及变更记录")
+    h2(doc, "7.1 附录清单")
+    para(doc, "• 《Ai-DOP第三方对接业务数据详表》:对接编码、数据包与字段映射详表。")
+    para(doc, f"• 《{dl['cover_short']}业务需求描述》《{dl['cover_short']}蓝图设计方案》《{dl['cover_short']}-用户操作手册》:配套交付文档。")
+    h2(doc, "7.2 变更记录")
+    para(doc, "变更记录见本说明书卷首“版本记录”表。")
+    h2(doc, "7.3 审批记录")
+    data_table(doc, ["角色", "姓名", "签字", "日期"],
+               [("编制", "", "", ""), ("审核", "", "", ""), ("批准", "", "", "")], center_cols=(0,))
+
+    out_path.parent.mkdir(parents=True, exist_ok=True)
+    doc.save(out_path)
+    print("DDS", out_path.name)
+
+
+# ─────────────────────────────────────────────────────────────
+# UM:用户操作手册(S1 风格)
+# ─────────────────────────────────────────────────────────────
+
+def um_label(doc, text):
+    """【功能概述】等粗体标签段。"""
+    return para(doc, text, bold=True)
+
+
+def um_note(doc, text):
+    return para(doc, text, size=10)
+
+
+def write_um(mod_key: str, mod: dict, out_path: Path):
+    doc = new_doc("um")
+    meta = MODULE_META[mod_key]
+    dl = DELIVER[mod_key]
+    ver = doc_version(mod_key, "um")
+    feats = live_features(mod)
+    vrows = version_rows(mod_key, "um")
+    create_date = vrows[0][0]
+
+    # 封面(S1 UM:18pt 系统名 / 24pt 模块短名 / 22pt 手册名 / 11pt 作者日期版本)
+    cover_gap(doc, 3)
+    para(doc, SYSTEM_NAME, size=18, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, dl["cover_short"], size=24, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, "用户操作手册", size=22, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    cover_gap(doc, 2)
+    para(doc, f"作    者:{AUTHOR}", size=11, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, f"创建日期:{create_date}", size=11, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, f"修订日期:{TODAY_ISO}", size=11, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    para(doc, f"当前版本:{ver}", size=11, bold=True, align=WD_ALIGN_PARAGRAPH.CENTER)
+    front_matter(doc, version_rows=vrows)
+
+    # 1. 系统登录与首页
+    h1(doc, "1. 系统登录与首页")
+    para(doc, "本章说明登录系统、首页布局、修改密码与退出系统的通用操作;进入本模块后的功能操作见第 2 章。")
+    h2(doc, "1.1 登录系统")
+    para(doc, "步骤1:打开浏览器,在地址栏输入系统URL。", bold=True)
+    para(doc, "步骤2:输入用户名和密码,点击“登录”按钮进入系统。", bold=True)
+    para(doc, "步骤3:如忘记密码,请联系系统管理员重置。", bold=True)
+    um_note(doc, "【说明】系统支持Chrome、Edge、Firefox等主流浏览器,推荐使用Chrome最新版本。")
+    img = shot_img("shot_login.png")
+    if img.exists():
+        picture(doc, img)
+    caption(doc, "【图1.1 系统登录页面】")
+    h2(doc, "1.2 系统首页")
+    para(doc, "登录成功后进入系统首页(默认为九宫格智慧运营看板),页面主要包含以下区域:")
+    para(doc, "  ● 顶部导航栏:显示系统LOGO、当前模块菜单、全屏切换等")
+    para(doc, "  ● 左侧菜单栏:按模块分组展示功能菜单(MDIOP 分组),点击展开/折叠")
+    para(doc, "  ● 右侧工作区:显示当前选中功能页面的内容")
+    para(doc, "  ● 右上角用户区:显示当前登录用户信息,下拉菜单含个人中心、修改密码、退出登录")
+    img = shot_img("shot_home.png")
+    if img.exists():
+        picture(doc, img)
+    caption(doc, "【图1.2 系统首页布局】")
+    h2(doc, "1.3 修改密码")
+    para(doc, "步骤1:点击页面右上角用户头像/用户名区域。", bold=True)
+    para(doc, "步骤2:在下拉菜单中选择“个人中心”。", bold=True)
+    para(doc, "步骤3:点击“修改密码”标签页。", bold=True)
+    para(doc, "步骤4:输入旧密码、新密码并确认,点击“保存”。", bold=True)
+    um_note(doc, "【注意】密码长度不少于6位,建议使用字母+数字+特殊字符组合。")
+    img = shot_img("shot_password.png")
+    if img.exists():
+        picture(doc, img)
+    caption(doc, "【图1.3 修改密码页面】")
+    h2(doc, "1.4 退出系统")
+    para(doc, "步骤1:点击右上角用户头像/用户名。", bold=True)
+    para(doc, "步骤2:在下拉菜单中选择“退出系统”。", bold=True)
+    um_note(doc, "【说明】为保障数据安全,长时间不操作系统将自动退出登录。")
+
+    # 2. 模块操作说明
+    h1(doc, "2. 模块操作说明")
+    para(doc, meta["um_intro"])
+    h2(doc, "2.1 通用操作说明")
+    para(doc, "录入窗口中红色星号为必填项,未填时保存会提示,不会生成不完整单据。")
+    para(doc, "列表底部显示总条数,可翻页或切换每页条数;操作列按行提供查看或编辑入口。")
+    para(doc, "在查询区填写条件后点查询筛选数据,点重置清空条件并回到默认结果。")
+
+    for n, feat in enumerate(feats, 2):
+        enr = ENRICH[(mod_key, feat["req"])]
+        h2(doc, f"2.{n} {feat['name']}")
+        um_label(doc, "【功能概述】")
+        para(doc, enr["overview"])
+        um_label(doc, "【适用角色】")
+        para(doc, enr["roles_short"])
+        um_label(doc, "【菜单路径】")
+        para(doc, enr["menu_path"])
+        um_label(doc, "【操作步骤】")
+        for s in enr["steps_txt"]:
+            para(doc, s, bold=True)
+        para(doc, "")
+        data_table(doc, ["步骤", "操作", "说明"], enr["steps_tbl"], size=10, center_cols=(0,))
+        para(doc, "")
+        for si, (shot, cap) in enumerate(enr["shots"], 1):
+            img = shot_img(shot)
+            if img.exists():
+                picture(doc, img)
+            caption(doc, f"【图2.{n}.{si} {cap}】")
+        um_label(doc, "【注意事项】")
+        for note in enr["notes"]:
+            um_note(doc, "【注意】" + note)
+        um_label(doc, "【常见问题】")
+        for q, a in enr["faq"]:
+            para(doc, "Q: " + q, size=10, bold=True)
+            para(doc, "A: " + a, size=10)
+
+    out_path.parent.mkdir(parents=True, exist_ok=True)
+    doc.save(out_path)
+    print("UM ", out_path.name)
+
+
+# ─────────────────────────────────────────────────────────────
+# 编排:生成 / 部署
+# ─────────────────────────────────────────────────────────────
+
+def generate_all(out_dir: Path):
+    out_dir.mkdir(parents=True, exist_ok=True)
+    for mod_key, mod in MODULES.items():
+        files = DELIVER[mod_key]["files"]
+        write_brd(mod_key, mod, out_dir / files["brd"])
+        write_bbp(mod_key, mod, out_dir / files["bbp"])
+        write_dds(mod_key, mod, out_dir / files["dds"])
+        write_um(mod_key, mod, out_dir / files["um"])
+
+
+def deploy():
+    BACKUP.mkdir(parents=True, exist_ok=True)
+    for mod_key, dl in DELIVER.items():
+        for old in dl["old"]:
+            src = PENDING / old
+            if src.exists():
+                dst = BACKUP / old
+                if dst.exists():
+                    dst.unlink()
+                shutil.move(str(src), str(dst))
+                print("BAK", old)
+    for mod_key, dl in DELIVER.items():
+        for kind, fname in dl["files"].items():
+            src = OUT / fname
+            shutil.copy2(src, PENDING / fname)
+            print("DEP", fname)
+
+
+def main():
+    do_deploy = len(sys.argv) > 1 and sys.argv[1] == "deploy"
+    generate_all(OUT)
+    if do_deploy:
+        deploy()
+    print("DONE", "deploy" if do_deploy else "gen")
+
+
+if __name__ == "__main__":
+    main()

+ 83 - 0
doc/_grant_uat_menus.py

@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+"""一次性:为 UAT 账号角色补授 数据对接服务+智慧诊断 菜单(sys_role_menu 插 10 条,可逆)。
+
+用法:
+  python _grant_uat_menus.py check   # 只读检查表结构与现状
+  python _grant_uat_menus.py grant   # 执行授权(幂等:已存在的跳过)
+  python _grant_uat_menus.py revoke  # 撤销本次授权
+"""
+from __future__ import annotations
+
+import sys
+
+import pymysql
+
+CONN = dict(host="123.60.180.165", port=3306, user="aidopremote", password="1234567890aiDOP#",
+            database="aidopdev", charset="utf8mb4", connect_timeout=15)
+
+ROLE_ID = 838258976469061  # UAT业务操作员(UATAdminA 挂载角色)
+MENU_IDS = [
+    1320990000400,  # 数据中台管理(数据对接服务分组)
+    1320990000401,  # 数据中台工作台
+    1320990000402,  # 数据地图
+    1320990000403,  # 数据源管理
+    1320990000404,  # 同步配置中心
+    1320990000405,  # 数据任务日志
+    1320990000406,  # MDP运行监控
+    1320990000407,  # 业务动作日志
+    1320990000408,  # 出站回写队列
+    1320990000201,  # 智慧诊断
+]
+# 本次插入的记录 Id 段(撤销时按此范围 + RoleId 精确删除)
+ID_BASE = 8382990000400
+
+
+def main():
+    mode = sys.argv[1] if len(sys.argv) > 1 else "check"
+    conn = pymysql.connect(**CONN)
+    try:
+        cur = conn.cursor()
+        cur.execute("SHOW COLUMNS FROM SysRoleMenu")
+        cols = [(r[0], r[1], r[2], r[4]) for r in cur.fetchall()]
+        print("COLUMNS", cols)
+        id_col, role_col, menu_col = cols[0][0], None, None
+        for name, *_ in cols:
+            low = name.lower()
+            if low == "roleid":
+                role_col = name
+            elif low == "menuid":
+                menu_col = name
+        print("USE COLS", id_col, role_col, menu_col)
+
+        marks = ",".join(str(m) for m in MENU_IDS)
+        cur.execute(
+            f"SELECT {menu_col} FROM SysRoleMenu WHERE {role_col}=%s AND {menu_col} IN ({marks})",
+            (ROLE_ID,),
+        )
+        existing = {r[0] for r in cur.fetchall()}
+        print("EXISTING", sorted(existing))
+
+        if mode == "grant":
+            todo = [m for m in MENU_IDS if m not in existing]
+            for i, mid in enumerate(todo):
+                cur.execute(
+                    f"INSERT INTO SysRoleMenu ({id_col}, {role_col}, {menu_col}) VALUES (%s, %s, %s)",
+                    (ID_BASE + i, ROLE_ID, mid),
+                )
+            conn.commit()
+            print("GRANTED", todo)
+        elif mode == "revoke":
+            cur.execute(
+                f"DELETE FROM SysRoleMenu WHERE {role_col}=%s AND {id_col} BETWEEN %s AND %s",
+                (ROLE_ID, ID_BASE, ID_BASE + 99),
+            )
+            conn.commit()
+            print("REVOKED rows:", cur.rowcount)
+        else:
+            print("CHECK ONLY")
+    finally:
+        conn.close()
+
+
+if __name__ == "__main__":
+    main()

+ 30 - 0
doc/_refresh_bbp_v05.py

@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+"""仅重新生成 系统集成/运营改善 两份 V0.5 蓝图(1.3 方案设计补充方式丙)并覆盖部署。"""
+from __future__ import annotations
+
+import shutil
+import sys
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+sys.path.insert(0, str(HERE))
+
+from docx import Document  # noqa: E402
+
+from _refresh_release_v05_docs import JOBS, TARGET, bump_version, generate  # noqa: E402
+
+
+def main():
+    for key, kind, staging_name, final_name, note in JOBS:
+        if kind != "bbp":
+            continue
+        src = generate(kind, key, staging_name)
+        doc = Document(str(src))
+        bump_version(doc, note)
+        doc.save(str(src))
+        shutil.copy2(str(src), str(TARGET / final_name))
+        print("OK", final_name, flush=True)
+
+
+if __name__ == "__main__":
+    main()

+ 159 - 0
doc/_refresh_release_v05_docs.py

@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+"""
+按 2026-09-14 最新代码核对结论,刷新「Release产互联/待确认」交付文档:
+1. 重新生成 系统集成、运营改善 两个模块的 需求/蓝图/详设/手册(内容修订,升 V0.5)。
+2. 新生成 九宫格智慧运营看板《详细设计说明书》《用户操作手册》(初版 V0.1,补齐四大文档)。
+3. 用仓库 9/14 版《Ai-DOP第三方对接业务数据详表-业务页.docx》覆盖待确认目录旧版。
+旧版文件移入 待确认/_backup_V0.4_20260904/ 备份。
+"""
+from __future__ import annotations
+
+import shutil
+import sys
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+sys.path.insert(0, str(HERE))
+
+from _gen_s9_diag_impr_int_delivery import write_brd, write_bbp, set_cell_text  # noqa: E402
+from _gen_delivery_sys_docs import write_module_dds, write_module_um  # noqa: E402
+from _gen_s9_modules_data import MODULES  # noqa: E402
+
+STAGING = HERE / "_tmp_docx_out" / "v05_release_candidate"
+TARGET = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联\待确认")
+BACKUP = TARGET / "_backup_V0.4_20260904"
+REPO_DETAIL_DOCX = HERE / "plan" / "系统集成" / "Ai-DOP第三方对接业务数据详表-业务页.docx"
+
+TODAY = "2026-09-14"
+
+# (生成键, 文档类别, 生成文件名, 交付文件名, 版本记录变更说明)
+JOBS = [
+    ("系统集成", "brd", "系统集成业务需求描述.docx", "系统集成业务需求描述-V0.5.docx",
+     "按最新代码核对:补充第三方标准 API 推数入站(方式丙);日志查询菜单名称对齐系统"),
+    ("系统集成", "bbp", "系统集成模块蓝图设计方案.docx", "系统集成模块蓝图设计方案-V0.5.docx",
+     "按最新代码核对:修正日志查询路由;补充方式丙推数入站接入方式"),
+    ("系统集成", "dds", "系统集成模块详细设计说明书.docx", "系统集成模块详细设计说明书-V0.5.docx",
+     "按最新代码核对:接口设计补充方式丙推数入站;模块检查逻辑同步"),
+    ("系统集成", "um", "系统集成-用户操作手册.docx", "系统集成-用户操作手册-V0.5.docx",
+     "按最新代码核对:补充方式丙推数入站运维提示"),
+    ("运营改善", "brd", "运营改善业务需求描述.docx", "运营改善业务需求描述-V0.5.docx",
+     "按最新代码核对:补充改善计划台账入口"),
+    ("运营改善", "bbp", "运营改善模块蓝图设计方案.docx", "运营改善模块蓝图设计方案-V0.5.docx",
+     "按最新代码核对:补充改善计划台账入口"),
+    ("运营改善", "dds", "运营改善模块详细设计说明书.docx", "运营改善模块详细设计说明书-V0.5.docx",
+     "按最新代码核对:补充改善计划台账入口"),
+    ("运营改善", "um", "运营改善-用户操作手册.docx", "运营改善-用户操作手册-V0.5.docx",
+     "按最新代码核对:补充改善计划台账入口"),
+]
+
+# 九宫格新文档(初版 V0.1)
+NEW_JOBS = [
+    ("S9", "dds", "九宫格智慧运营看板模块详细设计说明书.docx", "九宫格智慧运营看板模块详细设计说明书-V0.1.docx"),
+    ("S9", "um", "九宫格智慧运营看板-用户操作手册.docx", "九宫格智慧运营看板-用户操作手册-V0.1.docx"),
+]
+
+
+def find_cover_table(doc):
+    for t in doc.tables:
+        if t.rows and t.rows[0].cells[0].text.strip() == "文档编号":
+            return t
+    return None
+
+
+def find_version_table(doc):
+    for t in doc.tables:
+        hdr = [c.text.strip() for c in t.rows[0].cells]
+        if hdr[:4] == ["日期", "版本", "修订人", "变更说明"]:
+            return t
+    return None
+
+
+def set_cover(doc, version: str, date: str):
+    t = find_cover_table(doc)
+    assert t is not None, "未找到封面信息表"
+    for row in t.rows:
+        key = row.cells[0].text.strip()
+        if key == "版本":
+            set_cell_text(row.cells[1], version, center=True)
+        elif key == "编制日期":
+            set_cell_text(row.cells[1], date, center=True)
+
+
+def bump_version(doc, note: str):
+    set_cover(doc, "V0.5", TODAY)
+    t = find_version_table(doc)
+    assert t is not None, "未找到版本记录表"
+    row = t.add_row()
+    for c, val in enumerate((TODAY, "V0.5", "智造易项目组", note)):
+        set_cell_text(row.cells[c], val, center=True)
+
+
+def reset_version_new_doc(doc):
+    set_cover(doc, "V0.1", TODAY)
+    t = find_version_table(doc)
+    assert t is not None, "未找到版本记录表"
+    # 生成器写入的 V0.1~V0.4 历史行对本新文档不成立,整体替换为单一初版行
+    for row in list(t.rows)[1:]:
+        t._tbl.remove(row._tr)
+    row = t.add_row()
+    for c, val in enumerate((TODAY, "V0.1", "智造易项目组", "初版建立(按最新代码补齐九宫格模块四大文档)")):
+        set_cell_text(row.cells[c], val, center=True)
+
+
+def generate(kind: str, key: str, staging_name: str) -> Path:
+    mod = MODULES[key]
+    out = STAGING / staging_name
+    if kind == "brd":
+        write_brd(mod, out)
+    elif kind == "bbp":
+        write_bbp(mod, out)
+    elif kind == "dds":
+        write_module_dds(key, mod, dest=out)
+    elif kind == "um":
+        write_module_um(key, mod, dest=out)
+    else:
+        raise ValueError(kind)
+    return out
+
+
+def main():
+    from docx import Document
+
+    STAGING.mkdir(parents=True, exist_ok=True)
+    BACKUP.mkdir(parents=True, exist_ok=True)
+
+    installed = []
+    for key, kind, staging_name, final_name, note in JOBS:
+        src = generate(kind, key, staging_name)
+        doc = Document(str(src))
+        bump_version(doc, note)
+        doc.save(str(src))
+        old = TARGET / final_name.replace("-V0.5.docx", "-V0.4.docx")
+        if old.exists():
+            shutil.move(str(old), str(BACKUP / old.name))
+        shutil.copy2(str(src), str(TARGET / final_name))
+        installed.append(final_name)
+        print("V0.5", final_name)
+
+    for key, kind, staging_name, final_name in NEW_JOBS:
+        src = generate(kind, key, staging_name)
+        doc = Document(str(src))
+        reset_version_new_doc(doc)
+        doc.save(str(src))
+        shutil.copy2(str(src), str(TARGET / final_name))
+        installed.append(final_name)
+        print("V0.1", final_name)
+
+    # 第三方对接业务数据详表:用仓库 9/14 版覆盖(含方式丙 entityCode 勾稽)
+    detail_target = TARGET / REPO_DETAIL_DOCX.name
+    if detail_target.exists():
+        shutil.move(str(detail_target), str(BACKUP / detail_target.name))
+    shutil.copy2(str(REPO_DETAIL_DOCX), str(detail_target))
+    installed.append(REPO_DETAIL_DOCX.name + "(同步仓库 2026-09-14 版)")
+    print("SYNC", REPO_DETAIL_DOCX.name)
+
+    print("DONE", len(installed), "files")
+
+
+if __name__ == "__main__":
+    main()

+ 41 - 0
doc/_refresh_toc_s1style.py

@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+"""批量刷新 S1 风格 20 份交付文档的目录域(逐文件独立 Word 进程)。"""
+import subprocess
+import sys
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+sys.path.insert(0, str(HERE))
+
+from _gen_s1style_delivery import DELIVER, PENDING  # noqa: E402
+
+FILES = [fname for dl in DELIVER.values() for fname in dl["files"].values()]
+
+
+def main():
+    ok = 0
+    for f in FILES:
+        p = PENDING / f
+        if not p.exists():
+            print("MISS", f, flush=True)
+            continue
+        try:
+            r = subprocess.run(
+                [sys.executable, str(HERE / "_word_toc_one.py"), str(p)],
+                capture_output=True, text=True, timeout=300,
+            )
+            out = (r.stdout or "").strip().replace("\n", " ")
+            err = (r.stderr or "").strip().splitlines()
+            tag = "OK " if r.returncode == 0 else "ERR"
+            print(f"{tag} {f} {out}", flush=True)
+            if r.returncode != 0 and err:
+                print("    ", err[-1][:160], flush=True)
+            if r.returncode == 0:
+                ok += 1
+        except Exception as exc:
+            print(f"ERR {f} {exc}", flush=True)
+    print(f"DONE {ok}/{len(FILES)}", flush=True)
+
+
+if __name__ == "__main__":
+    main()

+ 49 - 0
doc/_refresh_toc_v05.py

@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+"""用 Word 刷新本次新/改的 10 份交付文档目录域(TOC 域缓存为空,需 Word 打开刷新)。"""
+from __future__ import annotations
+
+import subprocess
+import sys
+import time
+from pathlib import Path
+
+HERE = Path(__file__).resolve().parent
+WORKER = HERE / "_word_toc_one.py"
+TARGET = Path(r"C:\Users\skygu\OneDrive\Projects\AIDOP\项目\项目管理\产互联项目管理\交付文档\Release产互联\待确认")
+
+FILES = [
+    "系统集成业务需求描述-V0.5.docx",
+    "系统集成模块蓝图设计方案-V0.5.docx",
+    "系统集成模块详细设计说明书-V0.5.docx",
+    "系统集成-用户操作手册-V0.5.docx",
+    "运营改善业务需求描述-V0.5.docx",
+    "运营改善模块蓝图设计方案-V0.5.docx",
+    "运营改善模块详细设计说明书-V0.5.docx",
+    "运营改善-用户操作手册-V0.5.docx",
+    "九宫格智慧运营看板模块详细设计说明书-V0.1.docx",
+    "九宫格智慧运营看板-用户操作手册-V0.1.docx",
+]
+
+
+def main():
+    for name in FILES:
+        p = TARGET / name
+        if not p.exists():
+            print("MISS", name, flush=True)
+            continue
+        t0 = time.time()
+        proc = subprocess.run(
+            [sys.executable, str(WORKER), str(p)],
+            capture_output=True,
+            text=True,
+            timeout=300,
+            check=False,
+        )
+        out = (proc.stdout or "").strip()
+        err = (proc.stderr or "").strip()
+        status = "OK" if proc.returncode == 0 else "FAIL"
+        print(f"{status} {name} {out or err} {time.time()-t0:.0f}s", flush=True)
+
+
+if __name__ == "__main__":
+    main()

+ 810 - 0
doc/_tmp_blueprint_scan.txt

@@ -0,0 +1,810 @@
+
+==============================================================================
+### ChatBI\ChatBI智能报表模块蓝图设计方案.docx
+    段落 75 表格 4 图片 0 张(0 KB)
+    --- 标题 ---
+    [H1] 1 总体业务方案
+      [H2] 1.1 目标和宗旨
+      [H2] 1.2 总体业务流程图
+      [H2] 1.3 方案设计
+    [H1] 2 ChatBI智能问答(FUNC-S9-007)
+      [H2] 2.1 目标/宗旨
+      [H2] 2.2 业务流程图
+      [H2] 2.3 业务流程说明
+      [H2] 2.4 业务流程规则
+      [H2] 2.5 权限管理需求
+      [H2] 2.6 系统接口集成
+      [H2] 2.7 报表需求
+    [H1] 3 ChatBI报表与历史(目标态)(FUNC-S9-007)
+      [H2] 3.1 目标/宗旨
+      [H2] 3.2 业务流程图
+      [H2] 3.3 业务流程说明
+      [H2] 3.4 业务流程规则
+      [H2] 3.5 权限管理需求
+      [H2] 3.6 系统接口集成
+      [H2] 3.7 报表需求
+    --- 图片上下文 ---
+
+==============================================================================
+### S0\S0-基础主数据建模-业务蓝图设计方案-V0.2.docx
+    段落 524 表格 69 图片 57 张(13,917 KB)
+    --- 标题 ---
+      [H2] 版本记录
+    [H1] 目录
+    [H1] 1  总体说明
+      [H2] 1.1  目标/宗旨
+      [H2] 1.2  范围与子域
+      [H2] 1.3  通用业务规则
+      [H2] 1.4  业务流程图
+      [H2] 1.5  系统接口集成
+    [H1] 2  销售主数据
+      [H2] 2.1  目标/宗旨
+      [H2] 2.2  维护流程动线
+      [H2] 2.3  变化和改进点
+      [H2] 2.4  权限管理需求
+      [H2] 2.5  系统接口集成
+      [H2] 2.6  报表需求
+      [H2] 2.7  主数据列表
+        [H3] 2.7.1  客户信息维护(FUNC-S0-021)
+        [H3] 2.7.2  合同评审周期(FUNC-S0-025)
+        [H3] 2.7.3  物料替代(FUNC-S0-022)
+        [H3] 2.7.4  物料维护(FUNC-S0-020)
+        [H3] 2.7.5  订单优先级配置(FUNC-S0-026)
+        [H3] 2.7.6  订单评审周期(FUNC-S0-023)
+        [H3] 2.7.7  产品设计周期(FUNC-S0-024)
+        [H3] 2.7.8  选择替代方案(FUNC-S0-014)
+    [H1] 3  供应主数据
+      [H2] 3.1  目标/宗旨
+      [H2] 3.2  维护流程动线
+      [H2] 3.3  变化和改进点
+      [H2] 3.4  权限管理需求
+      [H2] 3.5  系统接口集成
+      [H2] 3.6  报表需求
+      [H2] 3.7  主数据列表
+        [H3] 3.7.1  供应商维护(FUNC-S0-027)
+        [H3] 3.7.2  货源清单(FUNC-S0-028)
+        [H3] 3.7.3  品类采购前置期(FUNC-S0-029)
+        [H3] 3.7.4  物料计划周期标准(FUNC-S0-030)
+    [H1] 4  制造主数据
+      [H2] 4.1  目标/宗旨
+      [H2] 4.2  维护流程动线
+      [H2] 4.3  变化和改进点
+      [H2] 4.4  权限管理需求
+      [H2] 4.5  系统接口集成
+      [H2] 4.6  报表需求
+      [H2] 4.7  主数据列表
+        [H3] 4.7.1  SOP 文档维护(FUNC-S0-017)
+        [H3] 4.7.2  标准工艺路线(FUNC-S0-002)
+        [H3] 4.7.3  物料替代(制造入口)(FUNC-S0-015)
+        [H3] 4.7.4  人员技能(FUNC-S0-008)
+        [H3] 4.7.5  工序流转卡(FUNC-S0-013)
+        [H3] 4.7.6  生产线(FUNC-S0-005)
+        [H3] 4.7.7  订单排程周期(FUNC-S0-019)
+        [H3] 4.7.8  标准工序(FUNC-S0-003)
+        [H3] 4.7.9  物料工序生产要素
+        [H3] 4.7.10  人员技能维护(FUNC-S0-009)
+        [H3] 4.7.11  选择替代方案(制造入口)(FUNC-S0-014)
+        [H3] 4.7.12  前处理要素参数(FUNC-S0-011)
+        [H3] 4.7.13  线边物料(FUNC-S0-006)
+        [H3] 4.7.14  生产要素参数(FUNC-S0-012)
+        [H3] 4.7.15  SOP 文件类型(FUNC-S0-016)
+        [H3] 4.7.16  工作中心(FUNC-S0-004)
+        [H3] 4.7.17  标准 BOM(FUNC-S0-001)
+        [H3] 4.7.18  工单控制参数(FUNC-S0-018)
+        [H3] 4.7.19  物料前处理要素(FUNC-S0-010)
+        [H3] 4.7.20  产线岗位维护(FUNC-S0-007)
+    [H1] 5  质量主数据
+      [H2] 5.1  目标/宗旨
+      [H2] 5.2  维护流程动线
+      [H2] 5.3  变化和改进点
+      [H2] 5.4  权限管理需求
+      [H2] 5.5  系统接口集成
+      [H2] 5.6  报表需求
+      [H2] 5.7  主数据列表
+        [H3] 5.7.1  检验仪器(FUNC-S0-044)
+        [H3] 5.7.2  检验方法(FUNC-S0-046)
+        [H3] 5.7.3  检验项目(FUNC-S0-045)
+        [H3] 5.7.4  检验频率(FUNC-S0-043)
+        [H3] 5.7.5  检验依据(FUNC-S0-042)
+        [H3] 5.7.6  检验标准(FUNC-S0-047)
+        [H3] 5.7.7  检验方案
+        [H3] 5.7.8  抽样方案(FUNC-S0-048)
+        [H3] 5.7.9  原材料白名单(FUNC-S0-053)
+        [H3] 5.7.10  质量基础字典(FUNC-S0-054)
+        [H3] 5.7.11  原材料检验规范
+        [H3] 5.7.12  过程检验规范
+        [H3] 5.7.13  FQC 检验规范(FUNC-S0-052)
+        [H3] 5.7.14  OQC 检验规范(FUNC-S0-052)
+    [H1] 6  仓储主数据
+      [H2] 6.1  目标/宗旨
+      [H2] 6.2  维护流程动线
+      [H2] 6.3  变化和改进点
+      [H2] 6.4  权限管理需求
+      [H2] 6.5  系统接口集成
+      [H2] 6.6  报表需求
+      [H2] 6.7  主数据列表
+        [H3] 6.7.1  库位维护(FUNC-S0-034)
+        [H3] 6.7.2  货架列表(FUNC-S0-035)
+        [H3] 6.7.3  部门维护(FUNC-S0-031)
+        [H3] 6.7.4  雇员列表(FUNC-S0-032)
+        [H3] 6.7.5  成本中心(FUNC-S0-040)
+        [H3] 6.7.6  零件包装规格(FUNC-S0-036)
+        [H3] 6.7.7  单号规则维护(FUNC-S0-037)
+        [H3] 6.7.8  单号类型(FUNC-S0-038)
+        [H3] 6.7.9  条码规则
+        [H3] 6.7.10  标签格式(FUNC-S0-039)
+        [H3] 6.7.11  物料职责维护(FUNC-S0-033)
+        [H3] 6.7.12  物料状态任务指派(FUNC-S0-041)
+    [H1] 蓝图确认
+    --- 图片上下文 ---
+      img 1  上文: 数据来源、S0 主数据与下游业务(S1–S9)之间的数据流关系如下图所示。
+            下文: 1.5  系统接口集成
+      img 2  上文: 主要规则:
+            下文: 图 2.7.1-1 客户信息维护——列表页
+      img 3  上文: 主要规则:
+            下文: 图 2.7.2-1 合同评审周期——列表页
+      img 4  上文: 主要规则:
+            下文: 图 2.7.3-1 物料替代——列表页
+      img 5  上文: 主要规则:
+            下文: 图 2.7.4-1 物料维护——列表页
+      img 6  上文: 主要规则:
+            下文: 图 2.7.5-1 订单优先级配置——列表页
+      img 7  上文: 主要规则:
+            下文: 图 2.7.6-1 订单评审周期——列表页
+      img 8  上文: 主要规则:
+            下文: 图 2.7.7-1 产品设计周期——列表页
+      img 9  上文: 主要规则:
+            下文: 图 2.7.8-1 选择替代方案——列表页
+      img10  上文: 主要规则:
+            下文: 图 3.7.1-1 供应商维护——列表页
+      img11  上文: 主要规则:
+            下文: 图 3.7.2-1 货源清单——列表页
+      img12  上文: 主要规则:
+            下文: 图 3.7.3-1 品类采购前置期——列表页
+      img13  上文: 主要规则:
+            下文: 图 3.7.4-1 物料计划周期标准——列表页
+      img14  上文: 主要规则:
+            下文: 图 4.7.1-1 SOP文档维护——列表页
+      img15  上文: 主要规则:
+            下文: 图 4.7.2-1 标准工艺路线——列表页
+      img16  上文: 主要规则:
+            下文: 图 4.7.3-1 物料替代(制造入口)——列表页
+      img17  上文: 主要规则:
+            下文: 图 4.7.4-1 人员技能——列表页
+      img18  上文: 主要规则:
+            下文: 图 4.7.5-1 工序流转卡——列表页
+      img19  上文: 主要规则:
+            下文: 图 4.7.6-1 生产线——列表页
+      img20  上文: 主要规则:
+            下文: 图 4.7.7-1 订单排程周期——列表页
+      img21  上文: 主要规则:
+            下文: 图 4.7.8-1 标准工序——列表页
+      img22  上文: 主要规则:
+            下文: 图 4.7.9-1 物料工序生产要素——列表页
+      img23  上文: 主要规则:
+            下文: 图 4.7.10-1 人员技能维护——列表页
+      img24  上文: 主要规则:
+            下文: 图 4.7.11-1 选择替代方案(制造入口)——列表页
+      img25  上文: 主要规则:
+            下文: 图 4.7.12-1 前处理要素参数——列表页
+      img26  上文: 主要规则:
+            下文: 图 4.7.13-1 线边物料——列表页
+      img27  上文: 主要规则:
+            下文: 图 4.7.14-1 生产要素参数——列表页
+      img28  上文: 主要规则:
+            下文: 图 4.7.15-1 SOP文件类型——列表页
+      img29  上文: 主要规则:
+            下文: 图 4.7.16-1 工作中心——列表页
+      img30  上文: 主要规则:
+            下文: 图 4.7.17-1 标准BOM——列表页
+      img31  上文: 主要规则:
+            下文: 图 4.7.18-1 工单控制参数——列表页
+      img32  上文: 主要规则:
+            下文: 图 4.7.19-1 物料前处理要素——列表页
+      img33  上文: 主要规则:
+            下文: 图 4.7.20-1 产线岗位维护——列表页
+      img34  上文: 主要规则:
+            下文: 图 5.7.1-1 检验仪器——列表页
+      img35  上文: 主要规则:
+            下文: 图 5.7.2-1 检验方法——列表页
+      img36  上文: 主要规则:
+            下文: 图 5.7.3-1 检验项目——列表页
+      img37  上文: 主要规则:
+            下文: 图 5.7.4-1 检验频率——列表页
+      img38  上文: 主要规则:
+            下文: 图 5.7.5-1 检验依据——列表页
+      img39  上文: 主要规则:
+            下文: 图 5.7.6-1 检验标准——列表页
+      img40  上文: 主要规则:
+            下文: 图 5.7.7-1 检验方案——列表页
+      img41  上文: 主要规则:
+            下文: 图 5.7.8-1 抽样方案——列表页
+      img42  上文: 主要规则:
+            下文: 图 5.7.9-1 原材料白名单——列表页
+      img43  上文: 主要规则:
+            下文: 图 5.7.10-1 质量基础字典——列表页
+      img44  上文: 主要规则:
+            下文: 图 5.7.11-1 原材料检验规范——列表页
+      img45  上文: 主要规则:
+            下文: 图 5.7.12-1 过程检验规范——列表页
+      img46  上文: 主要规则:
+            下文: 图 5.7.13-1 FQC检验规范——列表页
+      img47  上文: 主要规则:
+            下文: 图 5.7.14-1 OQC检验规范——列表页
+      img48  上文: 主要规则:
+            下文: 图 6.7.1-1 库位维护——列表页
+      img49  上文: 主要规则:
+            下文: 图 6.7.2-1 货架列表——列表页
+      img50  上文: 主要规则:
+            下文: 图 6.7.3-1 部门维护——列表页
+      img51  上文: 主要规则:
+            下文: 图 6.7.4-1 雇员列表——列表页
+      img52  上文: 主要规则:
+            下文: 图 6.7.5-1 成本中心——列表页
+      img53  上文: 主要规则:
+            下文: 图 6.7.6-1 零件包装规格——列表页
+      img54  上文: 主要规则:
+            下文: 图 6.7.7-1 单号规则维护——列表页
+      img55  上文: 主要规则:
+            下文: 图 6.7.8-1 单号类型——列表页
+      img56  上文: 主要规则:
+            下文: 图 6.7.9-1 条码规则——列表页
+      img57  上文: 主要规则:
+            下文: 图 6.7.10-1 标签格式——列表页
+      img58  上文: 主要规则:
+            下文: 图 6.7.11-1 物料职责维护——列表页
+      img59  上文: 主要规则:
+            下文: 图 6.7.12-1 物料状态任务指派——列表页
+
+==============================================================================
+### S1\S1产销协同模块蓝图设计方案.docx
+    段落 135 表格 36 图片 8 张(215 KB)
+    --- 标题 ---
+    [H1] 文档控制
+      [H2] 更改记录
+      [H2] 审核
+      [H2] 发布
+    [H1] 目录
+    [H1] 1  总体业务方案
+      [H2] 1.1  目标和宗旨
+      [H2] 1.2  总体业务流程图
+      [H2] 1.3  方案设计
+    [H1] 2  订单评审管理(FUNC-S1-003)
+      [H2] 2.1  目标/宗旨
+      [H2] 2.2  业务流程图
+      [H2] 2.3  业务流程说明
+      [H2] 2.4  业务流程规则
+      [H2] 2.5  权限管理需求
+      [H2] 2.6  系统接口集成
+      [H2] 2.7  报表需求
+    [H1] 3  订单交付管理(FUNC-S1-004)
+      [H2] 3.1  目标/宗旨
+      [H2] 3.2  业务流程图
+      [H2] 3.3  业务流程说明
+      [H2] 3.4  业务流程规则
+      [H2] 3.5  权限管理需求
+      [H2] 3.6  系统接口集成
+      [H2] 3.7  报表需求
+    [H1] 4  订单发货管理(FUNC-S1-005)
+      [H2] 4.1  目标/宗旨
+      [H2] 4.2  业务流程图
+      [H2] 4.3  业务流程说明
+      [H2] 4.4  业务流程规则
+      [H2] 4.5  权限管理需求
+      [H2] 4.6  系统接口集成
+      [H2] 4.7  报表需求
+    [H1] 5  工单下达(FUNC-S1-006)
+      [H2] 5.1  目标/宗旨
+      [H2] 5.2  业务流程图
+      [H2] 5.3  业务流程说明
+      [H2] 5.4  业务流程规则
+      [H2] 5.5  权限管理需求
+      [H2] 5.6  系统接口集成
+      [H2] 5.7  报表需求
+    [H1] 6  计划联动看板(FUNC-S1-007)
+      [H2] 6.1  目标/宗旨
+      [H2] 6.2  业务流程图
+      [H2] 6.3  业务流程说明
+      [H2] 6.4  业务流程规则
+      [H2] 6.5  权限管理需求
+      [H2] 6.6  系统接口集成
+      [H2] 6.7  报表需求
+    [H1] 7  需求明细核验(FUNC-S1-008)
+      [H2] 7.1  目标/宗旨
+      [H2] 7.2  业务流程图
+      [H2] 7.3  业务流程说明
+      [H2] 7.4  业务流程规则
+      [H2] 7.5  权限管理需求
+      [H2] 7.6  系统接口集成
+      [H2] 7.7  报表需求
+    [H1] 8  产销协同看板(FUNC-S1-009)
+      [H2] 8.1  目标/宗旨
+      [H2] 8.2  业务流程图
+      [H2] 8.3  业务流程说明
+      [H2] 8.4  业务流程规则
+      [H2] 8.5  权限管理需求
+      [H2] 8.6  系统接口集成
+      [H2] 8.7  报表需求
+    --- 图片上下文 ---
+      img 1  上文: 产销协同模块覆盖从"产品设计"到"成品发运"的订单履约全链路,下图展示了主线流程(订单履约链):
+            下文: 1.3  方案设计
+      img 2  上文: 2.2  业务流程图
+            下文: 流程路径:订单信息录入 → 订单评审(交期评估) → 交期确认 → 如需变更则发起变更审批流。
+      img 3  上文: 3.2  业务流程图
+            下文: 流程路径:订单交付列表 → 多条件筛选 → 点击订单行 → 8Tab全景追踪(订单信息→评审→排程→物料需求→采购→备料→生产→入库发运)。
+      img 4  上文: 4.2  业务流程图
+            下文: 流程路径:发货计划制定 → 发货单新建 → 选择销售单号 → 填写发货信息 → 保存发货单 → 数据进入MDP中台。
+      img 5  上文: 5.2  业务流程图
+            下文: 流程路径:工单列表 → 物料齐套检查→ 生成物料需求→ 点击单行[工单下达]按钮 → 下达信息确认 → 工单状态变更 → MES可见。
+      img 6  上文: 6.2  业务流程图
+            下文: 流程路径:计划联动列表 → 查看联动状态 → 点击刷新按钮 → 数据联动更新 → 返回最新联动结果和偏差预警状态。
+      img 7  上文: 7.2  业务流程图
+            下文: 流程路径:需求核验列表 → 多条件筛选 → 查看核验结果 → 核验结果同步展示。
+      img 8  上文: 8.2  业务流程图
+            下文: 流程路径:产销协同看板入口 → L1核心指标卡片 → 趋势图表 → 客户筛选 → 指标下钻 → L2/L3/L4分解指标。
+
+==============================================================================
+### S2\S2制造协同模块蓝图设计方案.docx
+    段落 112 表格 16 图片 4 张(126 KB)
+    --- 标题 ---
+      [H2] 版本记录
+    [H1] 目录
+    [H1] 1  总体业务方案
+      [H2] 1.1  目标和宗旨
+      [H2] 1.2  总体业务流程图
+      [H2] 1.3  方案设计
+    [H1] 2  生产排程(FUNC-S2-001)
+      [H2] 2.1  目标/宗旨
+      [H2] 2.2  业务流程图
+      [H2] 2.3  业务流程说明
+      [H2] 2.4  业务流程规则
+      [H2] 2.5  变化和改进点
+      [H2] 2.6  权限管理需求
+      [H2] 2.7  系统接口集成
+      [H2] 2.8  报表需求
+    [H1] 3  作业计划(FUNC-S2-003)
+      [H2] 3.1  目标/宗旨
+      [H2] 3.2  业务流程图
+      [H2] 3.3  业务流程说明
+      [H2] 3.4  业务流程规则
+      [H2] 3.5  变化和改进点
+      [H2] 3.6  权限管理需求
+      [H2] 3.7  系统接口集成
+      [H2] 3.8  报表需求
+    [H1] 4  制造协同看板(FUNC-S2-009)
+      [H2] 4.1  目标/宗旨
+      [H2] 4.2  业务流程图
+      [H2] 4.3  业务流程说明
+      [H2] 4.4  业务流程规则
+      [H2] 4.5  变化和改进点
+      [H2] 4.6  权限管理需求
+      [H2] 4.7  系统接口集成
+      [H2] 4.8  报表需求
+    --- 图片上下文 ---
+      img 1  上文: 制造协同模块承接S1产销协同下达的工单,完成生产排程,并将每日工作计划下达至MES执行层。下图展示了主线流程(排程到执行)、基础数据管理(支
+            下文: 1.3  方案设计
+      img 2  上文: 2.2  业务流程图
+            下文: 流程路径:工单工序排程列表 → 筛选查询工单 → 生产排程(工具栏按钮) → 同步物料需求 → 调整优先级 → 排产数据维护异常记录 → 工
+      img 3  上文: 3.2  业务流程图
+            下文: 流程路径:可执行日计划列表 → 筛选(计划日期≥今天默认) → 勾选多行 → 点击下达 → 日计划状态更新。同时维护:产线工作日历 → 休息
+      img 4  上文: 4.2  业务流程图
+            下文: 流程路径:工单执行进度看板 → 筛选查询 → 查看工单进度条和领料状态。
+
+==============================================================================
+### S3\S3供应协同模块蓝图设计方案.docx
+    段落 181 表格 52 图片 11 张(321 KB)
+    --- 标题 ---
+      [H2] 版本记录
+    [H1] 目录
+    [H1] 1  总体业务方案
+      [H2] 1.1  目标和宗旨
+      [H2] 1.2  总体业务流程图
+      [H2] 1.3  方案设计
+    [H1] 2  物料需求计划(FUNC-S3-001)
+      [H2] 2.1  目标/宗旨
+      [H2] 2.2  业务流程图
+      [H2] 2.3  业务流程说明
+      [H2] 2.4  业务流程规则
+      [H2] 2.5  变化和改进点
+      [H2] 2.6  权限管理需求
+      [H2] 2.7  系统接口集成
+      [H2] 2.8  报表需求
+    [H1] 3  物料交货计划(FUNC-S3-002)
+      [H2] 3.1  目标/宗旨
+      [H2] 3.2  业务流程图
+      [H2] 3.3  业务流程说明
+      [H2] 3.4  业务流程规则
+      [H2] 3.5  变化和改进点
+      [H2] 3.6  权限管理需求
+      [H2] 3.7  系统接口集成
+      [H2] 3.8  报表需求
+    [H1] 4  交货单异常记录(FUNC-S3-003)
+      [H2] 4.1  目标/宗旨
+      [H2] 4.2  业务流程图
+      [H2] 4.3  业务流程说明
+      [H2] 4.4  业务流程规则
+      [H2] 4.5  变化和改进点
+      [H2] 4.6  权限管理需求
+      [H2] 4.7  系统接口集成
+      [H2] 4.8  报表需求
+    [H1] 5  物料采购申请(FUNC-S3-004)
+      [H2] 5.1  目标/宗旨
+      [H2] 5.2  业务流程图
+      [H2] 5.3  业务流程说明
+      [H2] 5.4  业务流程规则
+      [H2] 5.5  变化和改进点
+      [H2] 5.6  权限管理需求
+      [H2] 5.7  系统接口集成
+      [H2] 5.8  报表需求
+    [H1] 6  要货令(FUNC-S3-005)
+      [H2] 6.1  目标/宗旨
+      [H2] 6.2  业务流程图
+      [H2] 6.3  业务流程说明
+      [H2] 6.4  业务流程规则
+      [H2] 6.5  变化和改进点
+      [H2] 6.6  权限管理需求
+      [H2] 6.7  系统接口集成
+      [H2] 6.8  报表需求
+    [H1] 7  物料采购订单(FUNC-S3-006)
+      [H2] 7.1  目标/宗旨
+      [H2] 7.2  业务流程图
+      [H2] 7.3  业务流程说明
+      [H2] 7.4  业务流程规则
+      [H2] 7.5  变化和改进点
+      [H2] 7.6  权限管理需求
+      [H2] 7.7  系统接口集成
+      [H2] 7.8  报表需求
+    [H1] 8  委外加工订单(FUNC-S3-007)
+      [H2] 8.1  目标/宗旨
+      [H2] 8.2  业务流程图
+      [H2] 8.3  业务流程说明
+      [H2] 8.4  业务流程规则
+      [H2] 8.5  变化和改进点
+      [H2] 8.6  权限管理需求
+      [H2] 8.7  系统接口集成
+      [H2] 8.8  报表需求
+    [H1] 9  工序外协订单(FUNC-S3-008)
+      [H2] 9.1  目标/宗旨
+      [H2] 9.2  业务流程图
+      [H2] 9.3  业务流程说明
+      [H2] 9.4  业务流程规则
+      [H2] 9.5  变化和改进点
+      [H2] 9.6  权限管理需求
+      [H2] 9.7  系统接口集成
+      [H2] 9.8  报表需求
+    [H1] 10  供应协同看板(FUNC-S3-009)
+      [H2] 10.1  目标/宗旨
+      [H2] 10.2  业务流程图
+      [H2] 10.3  业务流程说明
+      [H2] 10.4  业务流程规则
+      [H2] 10.5  变化和改进点
+      [H2] 10.6  权限管理需求
+      [H2] 10.7  系统接口集成
+      [H2] 10.8  报表需求
+    [H1] 11  工单物料齐套上线看板(FUNC-S3-010)
+      [H2] 11.1  目标/宗旨
+      [H2] 11.2  业务流程图
+      [H2] 11.3  业务流程说明
+      [H2] 11.4  业务流程规则
+      [H2] 11.5  变化和改进点
+      [H2] 11.6  权限管理需求
+      [H2] 11.7  系统接口集成
+      [H2] 11.8  报表需求
+    --- 图片上下文 ---
+      img 1  上文: S3供应协同模块覆盖从"物料需求计算"到"供应协同监控"的完整链路,下图展示了物料计划域、采购管理域和供应协同看板域三大功能域的整体关系:
+            下文: 1.3  方案设计
+      img 2  上文: 2.2  业务流程图
+            下文: 流程路径:MDP数据同步(工单/库存/在途) → MRP净需求计算 → 勾选发布/全部发布 → 手动调整 → 驱动采购申请/交货计划。
+      img 3  上文: 3.2  业务流程图
+            下文: 流程路径:已发布物料需求计划 → 交货计划生成 → 驱动供应商交货计划 → 交货状态同步。
+      img 4  上文: 4.2  业务流程图
+            下文: 流程路径:MDP同步交货数据 → 系统自动比对计划vs实际 → 差异超阈值自动标记异常 → 异常记录列表展示 → 多维筛选查询 → 明细查看
+      img 5  上文: 5.2  业务流程图
+            下文: 流程路径:物料交货计划/MRP检查 → 采购申请创建 → 审核/批准 → 驱动采购订单/要货令/委外加工订单生成。
+      img 6  上文: 6.2  业务流程图
+            下文: 流程路径:物料采购申请驱动 → 要货令创建 → 供应商选择 → 物料选择 → 订单保存。
+      img 7  上文: 7.2  业务流程图
+            下文: 流程路径:采购订单生成 → 供应商确认/交期回复 → 发货关联 → 订单状态跟踪 → 收货完成/订单关闭。
+      img 8  上文: 8.2  业务流程图
+            下文: 流程路径:委外加工订单创建 → 委外商选择 → 货源清单物料选择 → 明细行管理 → 订单保存。
+      img 9  上文: 9.2  业务流程图
+            下文: 流程路径:选择生产工单 → 选择外协工序 → 创建外协订单 → 供应商/数量校验 → 订单保存/工单工序关联状态。
+      img10  上文: 10.2  业务流程图
+            下文: 流程路径:MDP数据同步/运营指标建模 → 4维KPI卡片展示 → 趋势箭头分析 → 多维筛选联动 → 分支看板(需求计划/交货计划) → 
+      img11  上文: 11.2  业务流程图
+            下文: 流程路径:数据同步(工单/BOM/库存/在途) →齐套计算 → 30+字段齐套信息展示 → 缺料定位/供应商维度分析 → 缺料预警。
+
+==============================================================================
+### S4\S4采购执行模块蓝图设计方案.docx
+    段落 119 表格 32 图片 7 张(200 KB)
+    --- 标题 ---
+      [H2] 版本记录
+    [H1] 目录
+    [H1] 1  总体业务方案
+      [H2] 1.1  目标和宗旨
+      [H2] 1.2  总体业务流程图
+      [H2] 1.3  方案设计
+    [H1] 2  供应商交货管理(FUNC-S4-001)
+      [H2] 2.1  目标/宗旨
+      [H2] 2.2  业务流程图
+      [H2] 2.3  业务流程说明
+      [H2] 2.4  业务流程规则
+      [H2] 2.5  变化和改进点
+      [H2] 2.6  权限管理需求
+      [H2] 2.7  系统接口集成
+      [H2] 2.8  报表需求
+    [H1] 3  供应商发货单(FUNC-S4-002)
+      [H2] 3.1  目标/宗旨
+      [H2] 3.2  业务流程图
+      [H2] 3.3  业务流程说明
+      [H2] 3.4  业务流程规则
+      [H2] 3.5  变化和改进点
+      [H2] 3.6  权限管理需求
+      [H2] 3.7  系统接口集成
+      [H2] 3.8  报表需求
+    [H1] 4  采购退货单(FUNC-S4-003)
+      [H2] 4.1  目标/宗旨
+      [H2] 4.2  业务流程图
+      [H2] 4.3  业务流程说明
+      [H2] 4.4  业务流程规则
+      [H2] 4.5  变化和改进点
+      [H2] 4.6  权限管理需求
+      [H2] 4.7  系统接口集成
+      [H2] 4.8  报表需求
+    [H1] 5  IQC退货查询(FUNC-S4-004)
+      [H2] 5.1  目标/宗旨
+      [H2] 5.2  业务流程图
+      [H2] 5.3  业务流程说明
+      [H2] 5.4  业务流程规则
+      [H2] 5.5  变化和改进点
+      [H2] 5.6  权限管理需求
+      [H2] 5.7  系统接口集成
+      [H2] 5.8  报表需求
+    [H1] 6  采购执行看板主页(FUNC-S4-005)
+      [H2] 6.1  目标/宗旨
+      [H2] 6.2  业务流程图
+      [H2] 6.3  业务流程说明
+      [H2] 6.4  业务流程规则
+      [H2] 6.5  变化和改进点
+      [H2] 6.6  权限管理需求
+      [H2] 6.7  系统接口集成
+      [H2] 6.8  报表需求
+    [H1] 7  供应商欠料看板(FUNC-S4-006)
+      [H2] 7.1  目标/宗旨
+      [H2] 7.2  业务流程图
+      [H2] 7.3  业务流程说明
+      [H2] 7.4  业务流程规则
+      [H2] 7.5  变化和改进点
+      [H2] 7.6  权限管理需求
+      [H2] 7.7  系统接口集成
+      [H2] 7.8  报表需求
+    --- 图片上下文 ---
+      img 1  上文: S4采购执行模块覆盖从"供应商交货"到"采购执行监控"的完整链路,下图展示了交货执行域、退货闭环域和采购执行看板域三大功能域的整体关系:
+            下文: 1.3  方案设计
+      img 2  上文: 2.2  业务流程图
+            下文: 流程路径:供应商交货计划发布 → 供应商交期回复 → 生成发货单 → 在途/在检/入库跟踪。
+      img 3  上文: 3.2  业务流程图
+            下文: 流程路径:交货管理生成发货单 → 生成标签 → 上传附件 → 打印标签 → 供应商发货 → 打印发货单 → 入库关联。
+      img 4  上文: 4.2  业务流程图
+            下文: 流程路径:IQC检验不合格判定 → 退货单创建 → 退货出库 → 状态跟踪(新建→已出库→已完成)。
+      img 5  上文: 5.2  业务流程图
+            下文: 流程路径:IQC检验记录生成 → 不合格判定/退货关联 → 退货查询(检验单/物料/日期)。
+      img 6  上文: 6.2  业务流程图
+            下文: 流程路径:MDP数据同步 → KPI指标计算引擎 → 双面板看板展示 → 多维筛选 → 导出报告/运营指标建模。
+      img 7  上文: 7.2  业务流程图
+            下文: 流程路径:根据工单需求/BOM/库存/在途 → 15天滚动欠料计算 → 动态列展示 → 手动刷新。
+
+==============================================================================
+### S5\S5-物料仓储-业务蓝图设计方案.docx
+    段落 123 表格 5 图片 12 张(4,465 KB)
+    --- 标题 ---
+    [H1] 目录
+    [H1] 1 总体说明
+      [H2] 1.1 目标/宗旨
+      [H2] 1.2 范围与子域
+      [H2] 1.3 通用业务规则
+      [H2] 1.4 业务流程图
+      [H2] 1.5 系统接口集成
+      [H2] 1.6 权限管理需求
+    [H1] 2 来料检验
+      [H2] 2.1 来料检验申请列表
+    [H1] 3 仓储管理
+      [H2] 3.1 委外发料单
+      [H2] 3.2 采购收货单
+      [H2] 3.3 生产退料单
+      [H2] 3.4 生产入库单
+    [H1] 4 库存数据
+      [H2] 4.1 库存查询
+      [H2] 4.2 进出存查询
+      [H2] 4.3 暂收在检列表
+      [H2] 4.4 标签查询
+      [H2] 4.5 盘点结果查询
+      [H2] 4.6 盘点标签确认
+    --- 图片上下文 ---
+      img 1  上文: 目标(To-Be):统一以只读贴源接入 DOP 数据中台供只读查询。下图为贴源同步只读生命周期目标流程。
+            下文: 图 1-1 S5 物料仓储贴源同步只读生命周期
+      img 2  上文: ② 数据源为 QMS 来料检验申请表。
+            下文: 图 2.1-1  来料检验申请列表——列表页
+      img 3  上文: ② 数据源为委外发料类单据(源系统单据类型标识 CA)。
+            下文: 图 3.1-1  委外发料单——列表页
+      img 4  上文: ② 数据源为采购收货类单据,关联 SRM 采购申请补充请购与销售工单来源。
+            下文: 图 3.2-1  采购收货单——列表页
+      img 5  上文: ③ 状态按源码解码为中文。
+            下文: 图 3.3-1  生产退料单——列表页
+      img 6  上文: ② 数据源为生产入库类单据。
+            下文: 图 3.4-1  生产入库单——列表页
+      img 7  上文: ③ 货架、版本、供应商为标签数据富集,当前标签数据为空则为空。
+            下文: 图 4.1-1  库存查询——列表页
+      img 8  上文: ② 期初数取交易前结存;入库数=数量变动为正部分;出库数=数量变动为负部分的绝对值;期末数=期初数+数量变动。
+            下文: 图 4.2-1  进出存查询——列表页
+      img 9  上文: ③ 检验状态在挑选使用场景追加"-挑选使用"后缀。
+            下文: 图 4.3-1  暂收在检列表——列表页
+      img10  上文: ① 只读,支持按物料编码、批次号、库位、货架、送货单号、状态、条码筛选。
+            下文: 图 4.4-1  标签查询——列表页
+      img11  上文: ③ 冻结状态单独标注。
+            下文: 图 4.5-1  盘点结果查询——列表页
+      img12  上文: ③ 盘点结果口径同盘点结果查询。
+            下文: 图 4.6-1  盘点标签确认——列表页
+
+==============================================================================
+### S6\S6-生产执行-业务蓝图设计方案.docx
+    段落 66 表格 5 图片 4 张(1,398 KB)
+    --- 标题 ---
+    [H1] 目录
+    [H1] 1 总体说明
+      [H2] 1.1 目标/宗旨
+      [H2] 1.2 范围与子域
+      [H2] 1.3 通用业务规则
+      [H2] 1.4 业务流程图
+      [H2] 1.5 系统接口集成
+      [H2] 1.6 权限管理需求
+    [H1] 2 过程质量管理
+      [H2] 2.1 过程检验单列表与详情
+      [H2] 2.2 IPQC 检验流转(检验员提交 / 主管审核)
+    [H1] 3 设备工装管理
+      [H2] 3.1 生产设备台账
+      [H2] 3.2 模工具台账管理
+    --- 图片上下文 ---
+      img 1  上文: 目标(To-Be):统一以贴源接入 DOP 数据中台供只读查询,并在过程检验环节提供检验员录入—主管审核的受控流转。下图为生产执行贴源与检验
+            下文: 图 1-1 S6 生产执行贴源同步与 IPQC 检验流转目标流程
+      img 2  上文: ② 数据源为过程检验单。
+            下文: 图 2.1-1  过程检验单列表与详情——列表页
+      img 3  上文: ③ 按作用域过滤。
+            下文: 图 3.1-1  生产设备台账——列表页
+      img 4  上文: ④ 默认按 id 倒序。
+            下文: 图 3.2-1  模工具台账管理——列表页
+
+==============================================================================
+### S7\S7-成品仓储-业务蓝图设计方案.docx
+    段落 68 表格 5 图片 5 张(1,744 KB)
+    --- 标题 ---
+    [H1] 目录
+    [H1] 1 总体说明
+      [H2] 1.1 目标/宗旨
+      [H2] 1.2 范围与子域
+      [H2] 1.3 通用业务规则
+      [H2] 1.4 业务流程图
+      [H2] 1.5 系统接口集成
+      [H2] 1.6 权限管理需求
+    [H1] 2 生产入库管理
+      [H2] 2.1 生产入库单列表
+    [H1] 3 成品出库管理
+      [H2] 3.1 销售发货通知
+    [H1] 4 成品质量管理(FQC)
+      [H2] 4.1 FQC 检验任务列表
+      [H2] 4.2 FQC 检验结果列表与详情
+    --- 图片上下文 ---
+      img 1  上文: 目标(To-Be):统一以只读贴源接入 DOP 数据中台供只读查询。下图为成品仓储贴源同步只读生命周期目标流程。
+            下文: 图 1-1 S7 成品仓储贴源同步只读生命周期
+      img 2  上文: ④ 默认按入库单号倒序、项次正序。
+            下文: 图 2.1-1  生产入库单列表——列表页
+      img 3  上文: ④ 状态一期原样展示;默认按发货日期倒序。
+            下文: 图 3.1-1  销售发货通知——列表页
+      img 4  上文: ② 数据源为 FQC 检验任务。
+            下文: 图 4.1-1  FQC 检验任务列表——列表页
+      img 5  上文: ③ 明细样本值列 j1..j50 收敛为样品数组,末尾空值自动裁剪。
+            下文: 图 4.2-1  FQC 检验结果列表与详情——列表页
+
+==============================================================================
+### S9\S9运营指标与智慧看板模块蓝图设计方案.docx
+    段落 78 表格 4 图片 0 张(0 KB)
+    --- 标题 ---
+    [H1] 1 总体业务方案
+      [H2] 1.1 目标和宗旨
+      [H2] 1.2 总体业务流程图
+      [H2] 1.3 方案设计
+    [H1] 2 九宫格智慧运营看板(FUNC-S9-005)
+      [H2] 2.1 目标/宗旨
+      [H2] 2.2 业务流程图
+      [H2] 2.3 业务流程说明
+      [H2] 2.4 业务流程规则
+      [H2] 2.5 权限管理需求
+      [H2] 2.6 系统接口集成
+      [H2] 2.7 报表需求
+    [H1] 3 S9运营指标看板(FUNC-S9-004)
+      [H2] 3.1 目标/宗旨
+      [H2] 3.2 业务流程图
+      [H2] 3.3 业务流程说明
+      [H2] 3.4 业务流程规则
+      [H2] 3.5 权限管理需求
+      [H2] 3.6 系统接口集成
+      [H2] 3.7 报表需求
+    --- 图片上下文 ---
+
+==============================================================================
+### 系统集成\系统集成模块蓝图设计方案.docx
+    段落 123 表格 6 图片 0 张(0 KB)
+    --- 标题 ---
+    [H1] 1 总体业务方案
+      [H2] 1.1 目标和宗旨
+      [H2] 1.2 总体业务流程图
+      [H2] 1.3 方案设计
+    [H1] 2 ERP同步(FUNC-S9-001)
+      [H2] 2.1 目标/宗旨
+      [H2] 2.2 业务流程图
+      [H2] 2.3 业务流程说明
+      [H2] 2.4 业务流程规则
+      [H2] 2.5 权限管理需求
+      [H2] 2.6 系统接口集成
+      [H2] 2.7 报表需求
+    [H1] 3 日志查询(FUNC-S9-002)
+      [H2] 3.1 目标/宗旨
+      [H2] 3.2 业务流程图
+      [H2] 3.3 业务流程说明
+      [H2] 3.4 业务流程规则
+      [H2] 3.5 权限管理需求
+      [H2] 3.6 系统接口集成
+      [H2] 3.7 报表需求
+    [H1] 4 ERP事务(FUNC-S9-003)
+      [H2] 4.1 目标/宗旨
+      [H2] 4.2 业务流程图
+      [H2] 4.3 业务流程说明
+      [H2] 4.4 业务流程规则
+      [H2] 4.5 权限管理需求
+      [H2] 4.6 系统接口集成
+      [H2] 4.7 报表需求
+    [H1] 5 单点登录SSO(FUNC-S9-001)
+      [H2] 5.1 目标/宗旨
+      [H2] 5.2 业务流程图
+      [H2] 5.3 业务流程说明
+      [H2] 5.4 业务流程规则
+      [H2] 5.5 权限管理需求
+      [H2] 5.6 系统接口集成
+      [H2] 5.7 报表需求
+    --- 图片上下文 ---
+
+==============================================================================
+### 运营改善\运营改善模块蓝图设计方案.docx
+    段落 50 表格 3 图片 0 张(0 KB)
+    --- 标题 ---
+    [H1] 1 总体业务方案
+      [H2] 1.1 目标和宗旨
+      [H2] 1.2 总体业务流程图
+      [H2] 1.3 方案设计
+    [H1] 2 改善计划与效果验证(FUNC-S9-006)
+      [H2] 2.1 目标/宗旨
+      [H2] 2.2 业务流程图
+      [H2] 2.3 业务流程说明
+      [H2] 2.4 业务流程规则
+      [H2] 2.5 权限管理需求
+      [H2] 2.6 系统接口集成
+      [H2] 2.7 报表需求
+    --- 图片上下文 ---
+
+==============================================================================
+### 运营诊断\运营诊断模块蓝图设计方案.docx
+    段落 52 表格 3 图片 0 张(0 KB)
+    --- 标题 ---
+    [H1] 1 总体业务方案
+      [H2] 1.1 目标和宗旨
+      [H2] 1.2 总体业务流程图
+      [H2] 1.3 方案设计
+    [H1] 2 智慧诊断(FUNC-S9-006)
+      [H2] 2.1 目标/宗旨
+      [H2] 2.2 业务流程图
+      [H2] 2.3 业务流程说明
+      [H2] 2.4 业务流程规则
+      [H2] 2.5 权限管理需求
+      [H2] 2.6 系统接口集成
+      [H2] 2.7 报表需求
+    --- 图片上下文 ---

+ 467 - 0
doc/_tmp_bp_text.txt

@@ -0,0 +1,467 @@
+
+################################################################################
+### S9/S9运营指标与智慧看板模块蓝图设计方案.docx
+################################################################################
+S9 运营指标与智慧看板模块
+业务蓝图设计方案
+Ai-DOP智慧运营管理系统
+--- TABLE 5x2 ---
+   | 文档编号 | S9-BBP-001
+   | 版本 | V0.2
+   | 密级 | 内部
+   | 编制单位 | 智造易项目组
+   | 编制日期 | 2026-07-30
+版本记录
+--- TABLE 3x4 ---
+   | 日期 | 版本 | 修订人 | 变更说明
+   | 2026-07-30 | V0.1 | 智造易项目组 | 初版建立
+   | 2026-07-30 | V0.2 | 智造易项目组 | 对齐《技术规范书_20260728修订》需求与功能要求;统一 REQ/FUNC 编号与版式
+目录
+(请在 Word 中右键目录区域 → 更新域;下文按 Heading 生成目录条目)
+[Heading 1] 1 总体业务方案
+[Heading 2] 1.1 目标和宗旨
+落实报价范围「九宫格智慧运营看板及 S9 运营指标看板(报价:九宫格智慧运营看板)」,并将《技术规范书_20260728修订》中对应功能要求转化为可配置、可验收的功能方案。
+引用《技术规范书_20260728修订》第 2.6 节「运营绩效指标测量(S9)」、第 2.6.1 节「九宫格智慧运营看板(S9)」。
+核心目标(规范 2.6.1):建立全流程关键绩效指标(KPI)定义、数据测量、偏差分析及可视化,覆盖客户订单交付、订单协同、供应协同、采购、物料、生产、成品仓储等核心指标,支撑运营决策优化;通过 BI 工具实现全流程数据可视化,支持管理层决策和业务人员自助分析。
+KPI 示例口径(规范):产销协同—OTD 交付率=按时交付订单数/总订单数×100%;生产执行—OEE=可用率×表现率×质量率×100%;采购供应—供应商交付率;质量—成品合格率;库存周转—库存周转天数。
+[Heading 2] 1.2 总体业务流程图
+总体路径:系统集成采存治用 → KPI日批计算 → 九宫格/部门看板可视化 → 偏差分析与智慧诊断 → 改善建档派单跟踪与效果复盘闭环。
+[Heading 2] 1.3 方案设计
+前端:Vue3 + Element Plus;动态看板与智慧诊断闭环页。后端:Admin.NET + 数据中台分层(STG/STD/DWD/KPI)+ Outbox 出站;对接方式含数据库直连与 HTTP API。
+[Heading 1] 2 九宫格智慧运营看板(FUNC-S9-005)
+[Heading 2] 2.1 目标/宗旨
+落实规范 2.6.1:为管理层提供全流程 KPI 一屏总览与异常预警入口。
+规范追溯:技术规范 2.6.1「可视化看板设计—管理层大屏」及九宫格智慧运营看板总要求
+实现现状:部分完成(主体可用)
+• 已实现:九宫格首页、L1 KPI 卡片、红黄绿、基础筛选、点击进入模块详情看板(DynamicModuleDashboard)。
+• 证据:Web/src/views/dashboard/home.vue;GET /api/AidopKanban/home-grid/{moduleCode}。
+• 缺口:S8 顶栏报警/状态灯仍为演示硬编码;规范「部门看板」无独立主题页,下钻为模块看板而非生产/采购/质量部门专页。
+[Heading 2] 2.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 进入大屏 | 管理层 | 打开九宫格 | 权限/租户 | 九宫格页面
+   | 20 | 查看KPI | 管理层 | 浏览核心KPI与预警 | 日批KPI | 态势判断
+   | 30 | 筛选 | 运营专员 | 调整日期/组织 | 筛选条件 | 刷新卡片
+   | 40 | 下钻 | 运营专员 | 点击模块格子 | 模块路由 | 部门/详情看板或诊断
+[Heading 2] 2.3 业务流程说明
+管理层登录后进入九宫格首页,查看 OTD、质量合格率等核心 KPI 及异常预警摘要。
+按组织/日期筛选后,各模块 L1 指标同步刷新;未达标项以红/黄状态标识。
+需要深入分析时,点击对应模块格子进入部门看板或 S9/模块详情看板;对异常指标可进入运营诊断。
+无数据时显示空态,不阻断页面访问;外部数据未就绪时按条件验收。
+[Heading 2] 2.4 业务流程规则
+• KPI 口径以运营指标主数据及规范示例公式为准,页面不得硬编码冲突口径。
+• 日批 KPI 按规范在数据中台侧自动计算;看板只读展示。
+• 未达标须可进入偏差分析/诊断链路。
+• 租户与权限隔离;无权限模块不展示明细。
+[Heading 2] 2.5 权限管理需求
+管理层(大屏只读);运营专员(筛选下钻);指标配置在 S0 运营建模。
+[Heading 2] 2.6 系统接口集成
+读取 KPI 日结果与布局配置;不直接写外部系统。
+[Heading 2] 2.7 报表需求
+管理层大屏即时视图;可联动异常预警摘要。
+对应需求:REQ-S9-005;路由:/aidop/smart-ops/grid;/dashboard/home。
+[Heading 1] 3 S9运营指标看板(FUNC-S9-004)
+[Heading 2] 3.1 目标/宗旨
+落实规范 2.6.1:完成 KPI 测量展示、偏差分析、部门看板与自助下钻。
+规范追溯:技术规范 2.6.1「KPI计算与分析」「部门看板」「自助分析支持」
+实现现状:部分完成(主体可用)
+• 已实现:S9 动态看板、L1/L2(及更深)卡片级联、趋势图、时间/产品等筛选、偏差标签与诊断跳转。
+• 证据:Web/src/views/aidop/kanban/s9.vue → DynamicModuleDashboard;dashboard-page API。
+• 缺口:无独立「偏差分析」原因库模块;无规范所述生产/采购/质量「部门看板」独立视图(仅有指标部门字段)。
+[Heading 2] 3.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 打开看板 | 运营/部门人员 | 进入S9看板 | 权限 | 指标页
+   | 20 | 查看KPI | 运营人员 | 浏览L1/L2/趋势 | 日批KPI | 达标判断
+   | 30 | 偏差分析 | 运营人员 | 点击未达标指标 | 阈值/明细 | 原因线索或诊断
+   | 40 | 自助下钻 | 业务人员 | 按时间/产品筛选并下钻 | 筛选条件 | 明细数据
+[Heading 2] 3.3 业务流程说明
+运营或部门人员打开 S9 运营指标看板,查看 L1/L2 指标、趋势与达标状态。
+对未达标 KPI 查看偏差信息,必要时进入诊断分析原因。
+按时间、产品等条件筛选,观察质量波动或交付波动。
+从汇总指标下钻至工序/单据级明细,完成自助分析。
+生产/采购/质量相关主题区展示规范要求的部门关注指标。
+[Heading 2] 3.4 业务流程规则
+• 自动计算在中台日批完成;看板展示不得与主数据口径冲突。
+• 偏差分析须可追溯到指标编码与筛选上下文。
+• 下钻受数据权限约束;空结果须友好提示。
+[Heading 2] 3.5 权限管理需求
+管理层、部门业务人员、运营专员;配置类在运营指标建模。
+[Heading 2] 3.6 系统接口集成
+看板 API、下钻 API、诊断入口;KPI 来源 DWS/指标层。
+[Heading 2] 3.7 报表需求
+部门看板视图、趋势与下钻明细;可扩展导出。
+对应需求:REQ-S9-004;路由:/aidop/smart-ops/s9;/aidop/kanban/s9。
+
+################################################################################
+### 运营诊断/运营诊断模块蓝图设计方案.docx
+################################################################################
+运营诊断模块
+业务蓝图设计方案
+Ai-DOP智慧运营管理系统
+--- TABLE 5x2 ---
+   | 文档编号 | OD-BBP-001
+   | 版本 | V0.2
+   | 密级 | 内部
+   | 编制单位 | 智造易项目组
+   | 编制日期 | 2026-07-30
+版本记录
+--- TABLE 3x4 ---
+   | 日期 | 版本 | 修订人 | 变更说明
+   | 2026-07-30 | V0.1 | 智造易项目组 | 初版建立
+   | 2026-07-30 | V0.2 | 智造易项目组 | 对齐《技术规范书_20260728修订》需求与功能要求;统一 REQ/FUNC 编号与版式
+目录
+(请在 Word 中右键目录区域 → 更新域;下文按 Heading 生成目录条目)
+[Heading 1] 1 总体业务方案
+[Heading 2] 1.1 目标和宗旨
+落实报价范围「运营问题诊断(九宫格下钻、诊断报表)」,并将《技术规范书_20260728修订》中对应功能要求转化为可配置、可验收的功能方案。
+引用《技术规范书_20260728修订》第 2.6.2 节「运营问题诊断」。
+基于统一数据抽取能力,打通产销、运作、供应、采购执行、物料仓储内物流、生产执行、成品仓储外物流全环节数据,构建订单至成品出库端到端数据链路,开展智能化诊断。
+以销售订单为主线串联需求预测、采购计划、来料入库、车间生产、半成品流转、成品入库、发货配送等节点,自动识别断点、滞后、损耗、供需失衡、库存积压、交付延期、产能浪费、物流低效等异常。
+[Heading 2] 1.2 总体业务流程图
+总体路径:系统集成采存治用 → KPI日批计算 → 九宫格/部门看板可视化 → 偏差分析与智慧诊断 → 改善建档派单跟踪与效果复盘闭环。
+[Heading 2] 1.3 方案设计
+前端:Vue3 + Element Plus;动态看板与智慧诊断闭环页。后端:Admin.NET + 数据中台分层(STG/STD/DWD/KPI)+ Outbox 出站;对接方式含数据库直连与 HTTP API。
+[Heading 1] 2 智慧诊断(FUNC-S9-006)
+[Heading 2] 2.1 目标/宗旨
+落实规范 2.6.2:自动识别全链路运营异常并完成根因溯源与诊断报告输出。
+规范追溯:技术规范 2.6.2 全文
+实现现状:部分完成(主体可用)
+• 已实现:智慧诊断页、环节诊断矩阵、L3/L4 下钻、目标&现状/主要问题、转改善入口。
+• 证据:Web/src/views/aidop/diagnosis/index.vue;GET /api/AidopKanban/smart-diagnosis/{moduleCode}。
+• 缺口:正式「运营诊断报告」落库/导出实体与 API 未实现(页面结论≠规范报告产物);7 维溯源依赖主数据与明细接通程度,未全量保证。
+• 时效:实时≤3 分钟依赖源数据刷新,需条件验收。
+[Heading 2] 2.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 6x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 进入诊断 | 运营专员 | 从看板/菜单进入 | 指标上下文 | 诊断页
+   | 20 | 异常识别 | 系统/专员 | 浏览环节诊断结论 | 全链路数据 | 异常清单
+   | 30 | 根因下钻 | 运营专员 | 按7类维度下钻 | 明细证据 | 根因线索
+   | 40 | 输出报告 | 运营专员 | 确认诊断报告/主要问题 | 诊断结果 | 报告/建议
+   | 50 | 转改善 | 运营专员 | 生成改善任务入口 | 诊断结论 | 改善闭环
+[Heading 2] 2.3 业务流程说明
+运营人员从九宫格或指标看板进入智慧诊断,系统带入指标与筛选上下文。
+按业务环节查看诊断要点与红黄绿状态,识别交付延期、缺料、停滞等异常。
+点击下钻,按订单/物料/供应商/产线等维度查看证据明细。
+在目标&现状、主要问题区确认诊断结论,导出或查看诊断报告摘要。
+需要整改时转入改善计划(同一 FUNC-S9-006)。
+[Heading 2] 2.4 业务流程规则
+• 诊断须可追溯到订单主线或指标编码。
+• 至少支持规范所列 7 类根因维度中的已实现维度下钻(未接通数据源可条件验收)。
+• 实时/周期识别时效以对接数据就绪为前提;第三方延迟不计入本系统缺陷。
+• 改善任务生成并入 FUNC-S9-006,不另起功能号。
+[Heading 2] 2.5 权限管理需求
+运营专员执行诊断;管理层只读;责任部门配合举证。
+[Heading 2] 2.6 系统接口集成
+统一数据抽取/KPI/明细下钻 API;改善任务接口。
+[Heading 2] 2.7 报表需求
+运营诊断报告(结论、根因、建议摘要)。
+对应需求:REQ-S9-006;路由:/aidop/smart-diagnosis。
+
+################################################################################
+### 运营改善/运营改善模块蓝图设计方案.docx
+################################################################################
+运营改善模块
+业务蓝图设计方案
+Ai-DOP智慧运营管理系统
+--- TABLE 5x2 ---
+   | 文档编号 | OI-BBP-001
+   | 版本 | V0.2
+   | 密级 | 内部
+   | 编制单位 | 智造易项目组
+   | 编制日期 | 2026-07-30
+版本记录
+--- TABLE 3x4 ---
+   | 日期 | 版本 | 修订人 | 变更说明
+   | 2026-07-30 | V0.1 | 智造易项目组 | 初版建立
+   | 2026-07-30 | V0.2 | 智造易项目组 | 对齐《技术规范书_20260728修订》需求与功能要求;统一 REQ/FUNC 编号与版式
+目录
+(请在 Word 中右键目录区域 → 更新域;下文按 Heading 生成目录条目)
+[Heading 1] 1 总体业务方案
+[Heading 2] 1.1 目标和宗旨
+落实报价范围「运营问题改善闭环(改善建议、效果验证;FUNC 并入 S9-006)」,并将《技术规范书_20260728修订》中对应功能要求转化为可配置、可验收的功能方案。
+引用《技术规范书_20260728修订》第 2.6.3 节「运营问题改善闭环」。
+承接诊断输出的全流程运营异常,搭建问题建档、整改派单、过程跟踪、效果量化复盘、优化经验固化一体化闭环。
+生成改善任务并追踪闭环;自动对比改善前后各环节经营指标,评估优化成效,沉淀标准化管控规则。
+[Heading 2] 1.2 总体业务流程图
+总体路径:系统集成采存治用 → KPI日批计算 → 九宫格/部门看板可视化 → 偏差分析与智慧诊断 → 改善建档派单跟踪与效果复盘闭环。
+[Heading 2] 1.3 方案设计
+前端:Vue3 + Element Plus;动态看板与智慧诊断闭环页。后端:Admin.NET + 数据中台分层(STG/STD/DWD/KPI)+ Outbox 出站;对接方式含数据库直连与 HTTP API。
+[Heading 1] 2 改善计划与效果验证(FUNC-S9-006)
+[Heading 2] 2.1 目标/宗旨
+落实规范 2.6.3:诊断异常可派单、可跟踪、可量化复盘并闭环。
+规范追溯:技术规范 2.6.3 全文(衔接 2.6.2 改善任务)
+实现现状:部分完成(主体可用)
+• 已实现:由诊断生成改善计划、审批流提交、行动项状态更新、有效性验证仪表与提交验证。
+• 证据:AdoSmartOpsImprovementPlan API;SmartOpsImprovementBizHandler;诊断页闭环区。
+• 缺口:「派单」主要为状态流转,无独立工单/OA 派单通道;经验固化/标准规则沉淀能力较弱。
+[Heading 2] 2.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 问题建档 | 运营专员 | 由诊断生成改善计划 | 诊断结论 | 改善单
+   | 20 | 整改派单 | 运营专员/审批人 | 提交审批并指派责任人 | 计划表单 | 待办任务
+   | 30 | 过程跟踪 | 责任人 | 更新行动项状态 | 执行记录 | 进度可视
+   | 40 | 效果复盘 | 运营专员 | 对比改善前后指标并关闭 | 基线/当前KPI | 闭环结论
+[Heading 2] 2.3 业务流程说明
+运营人员在诊断确认问题后建立改善计划(问题建档)。
+指定责任人与行动项并提交,形成整改派单(审批中心待办)。
+责任人更新执行进度,运营人员过程跟踪。
+在有效性验证中对比基线与当前 KPI,量化复盘后闭环或继续改善。
+[Heading 2] 2.4 业务流程规则
+• 改善单必须关联诊断问题或指标,保证端到端追溯。
+• 派单复用平台审批流,不另建孤立任务系统。
+• 效果验证须保留基线值、目标值、验证结论。
+• FUNC 固定为 FUNC-S9-006。
+[Heading 2] 2.5 权限管理需求
+运营专员建档与复盘;责任人执行;审批人派单审批;管理层只读。
+[Heading 2] 2.6 系统接口集成
+改善计划 API、审批流、KPI 对比查询。
+[Heading 2] 2.7 报表需求
+改善任务清单、成效对比、闭环统计。
+对应需求:REQ-S9-007;路由:/aidop/smart-diagnosis(改善计划/有效性验证)。
+
+################################################################################
+### 系统集成/系统集成模块蓝图设计方案.docx
+################################################################################
+系统集成模块
+业务蓝图设计方案
+Ai-DOP智慧运营管理系统
+--- TABLE 5x2 ---
+   | 文档编号 | INT-BBP-001
+   | 版本 | V0.2
+   | 密级 | 内部
+   | 编制单位 | 智造易项目组
+   | 编制日期 | 2026-07-30
+版本记录
+--- TABLE 3x4 ---
+   | 日期 | 版本 | 修订人 | 变更说明
+   | 2026-07-30 | V0.1 | 智造易项目组 | 初版建立
+   | 2026-07-30 | V0.2 | 智造易项目组 | 对齐《技术规范书_20260728修订》需求与功能要求;统一 REQ/FUNC 编号与版式
+目录
+(请在 Word 中右键目录区域 → 更新域;下文按 Heading 生成目录条目)
+[Heading 1] 1 总体业务方案
+[Heading 2] 1.1 目标和宗旨
+落实报价范围「系统集成(架构适用、各模块集成、各接口集成)+ 规范 2.6 所述 SSO」,并将《技术规范书_20260728修订》中对应功能要求转化为可配置、可验收的功能方案。
+引用《技术规范书_20260728修订》第 2.7 节「系统集成模块」、2.7.1「对接适配指标」、2.7.2「数据传输性能指标」;并引用 2.6 中系统对接与 SSO(OAuth2.0)要求。
+支持 ERP、MES、CRM、WMS、SRM、TMS 等多类系统多模式对接采集,完成异构数据清洗与标准化融合,搭建订单至出库统一数据底座。
+具备集成通道可视化配置、数据同步监控、异常告警、传输安全管控;向上支撑诊断与分析模块。
+[Heading 2] 1.2 总体业务流程图
+总体路径:系统集成采存治用 → KPI日批计算 → 九宫格/部门看板可视化 → 偏差分析与智慧诊断 → 改善建档派单跟踪与效果复盘闭环。
+[Heading 2] 1.3 方案设计
+前端:Vue3 + Element Plus;动态看板与智慧诊断闭环页。后端:Admin.NET + 数据中台分层(STG/STD/DWD/KPI)+ Outbox 出站;对接方式含数据库直连与 HTTP API。
+[Heading 1] 2 ERP同步(FUNC-S9-001)
+[Heading 2] 2.1 目标/宗旨
+落实规范 2.7.1:提供可配置的多系统入站同步能力。
+规范追溯:技术规范 2.7 / 2.7.1(接入方式、定时/实时、可视化配置)
+实现现状:仅占位(未完成)
+• 菜单 /aidop/s9/001 指向规划占位页 AidopDemoShell(planning/index),非真实 ERP 同步业务页。
+• 真实入站同步/可视化配置在数据中台 FUNC-S9-010~013(另册),未挂接到本入口。
+• 结论:规范 2.7 能力部分存在于数据中台,本 FUNC 菜单级未完成。
+[Heading 2] 2.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 配置接入 | 实施工程师 | 登记源与映射 | 连接/API | 数据源就绪
+   | 20 | 配置同步 | 实施工程师 | 定时或实时任务 | 实体映射 | 任务启用
+   | 30 | 执行 | 系统/运维 | 拉取并清洗 | 源数据 | 标准层数据
+   | 40 | 消费 | 业务用户 | 业务与看板使用 | STD/DWD/KPI | 业务可见
+[Heading 2] 2.3 业务流程说明
+实施人员在同步入口或数据中台配置数据源与映射(直连或 API)。
+配置定时/实时任务并启用,执行首次同步验证。
+业务数据进入贴源/标准层后,业务页与看板可消费。
+无真实外部系统时,以契约/Mock 条件验收。
+[Heading 2] 2.4 业务流程规则
+• 接入方式限于规范所述直连与 HTTP API(及项目已实现的等价方式)。
+• 凭据安全管控,前端不明文展示密钥。
+• 清洗含字段标准化、空值过滤、异常标记、编码统一。
+• 外部系统不可用导致的延迟不计入本系统性能不达标。
+[Heading 2] 2.5 权限管理需求
+实施工程师、系统管理员;业务用户消费结果。
+[Heading 2] 2.6 系统接口集成
+MDP DB/API Pull 执行器;各模块源对象见双模式对接方案。
+[Heading 2] 2.7 报表需求
+同步结果见日志查询。
+对应需求:REQ-S9-001;路由:/aidop/s9/001。
+[Heading 1] 3 日志查询(FUNC-S9-002)
+[Heading 2] 3.1 目标/宗旨
+落实规范 2.7:集成运行可监控、异常可告警可追溯。
+规范追溯:技术规范 2.7「数据同步监控、异常告警」
+实现现状:仅占位(未完成)
+• /aidop/s9/002 为占位页;同步/动作日志真实页为数据中台 FUNC-S9-014/015。
+• 结论:集成监控能力分散在数据中台,本入口未完成。
+[Heading 2] 3.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 4x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 打开日志 | 运维 | 进入日志查询 | 权限 | 日志列表
+   | 20 | 筛选监控 | 运维 | 按时间/状态筛选 | 条件 | 过滤结果
+   | 30 | 异常处理 | 运维 | 查看失败并处置 | 错误详情 | 重试或转人工
+[Heading 2] 3.3 业务流程说明
+运维打开日志查询,按时间与状态筛选。
+查看失败记录的错误信息并处理。
+空结果提示暂无数据。
+[Heading 2] 3.4 业务流程规则
+• 租户隔离;敏感凭据不落前端明文。
+• 告警与失败日志须可关联到任务与批次。
+[Heading 2] 3.5 权限管理需求
+运维、系统管理员。
+[Heading 2] 3.6 系统接口集成
+同步日志、动作运行日志表/API。
+[Heading 2] 3.7 报表需求
+同步监控列表。
+对应需求:REQ-S9-002;路由:/aidop/s9/002。
+[Heading 1] 4 ERP事务(FUNC-S9-003)
+[Heading 2] 4.1 目标/宗旨
+落实规范 2.7.2:出站传输可控、可容错、状态可查。
+规范追溯:技术规范 2.7 / 2.7.2(双向流转、传输容错、实时/批量时延目标)
+实现现状:仅占位(未完成)
+• /aidop/s9/003 为占位页;Outbox/回写执行器在中台链路,本入口无事务列表业务页。
+• 结论:出站事务可视菜单未完成。
+[Heading 2] 4.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 业务触发 | 业务用户 | 完成需回写操作 | 业务单据 | Outbox
+   | 20 | 推送 | 系统 | API推送 | Outbox | 外部回执
+   | 30 | 监控 | 运维 | 查事务状态 | 事务列表 | 成功/失败
+   | 40 | 容错 | 运维 | 重试/续传 | 失败事务 | 状态更新
+[Heading 2] 4.3 业务流程说明
+业务操作触发回写后,运维在事务页核对待发送/成功/失败。
+对失败事务查看错误并按策略重试。
+无真实外部系统时以 Outbox+Mock 条件验收。
+[Heading 2] 4.4 业务流程规则
+• 回写统一走 Outbox,禁止无日志直连外写。
+• 断点续传/重试避免重复入库或丢失(入站侧同等要求)。
+• 第三方超时不计入本系统性能缺陷。
+[Heading 2] 4.5 权限管理需求
+运维处理失败;业务触发;管理员配置端点。
+[Heading 2] 4.6 系统接口集成
+mdp_outbox、API Push 执行器。
+[Heading 2] 4.7 报表需求
+事务成功率与失败清单。
+对应需求:REQ-S9-003;路由:/aidop/s9/003。
+[Heading 1] 5 单点登录SSO(FUNC-S9-001)
+[Heading 2] 5.1 目标/宗旨
+落实规范 SSO 要求,减少重复登录。
+规范追溯:技术规范 2.6「支持单点登录(SSO),OAuth2.0」
+实现现状:未实现
+• 企业工业互联网平台 OAuth2.0 SSO 未落地;现有仅为微信/Gitee 社交登录脚手架(ClientId 占位),登录页 SSO 入口未启用。
+• 验收 TV-INT-004 仍为条件/待验。
+[Heading 2] 5.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 4x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 平台登录 | 员工 | 登录工业互联网平台 | 账号 | 已认证会话
+   | 20 | 跳转DOP | 员工 | 打开Ai-DOP | OAuth请求 | 授权
+   | 30 | 建会话 | 系统 | 映射用户并建会话 | 令牌 | 进入系统
+[Heading 2] 5.3 业务流程说明
+用户从工业互联网平台入口进入 Ai-DOP。
+经 OAuth2.0 授权后免二次账号密码登录(或按平台约定静默登录)。
+权限按 Ai-DOP 租户角色生效。
+[Heading 2] 5.4 业务流程规则
+• 仅信任配置的身份源;令牌校验失败拒绝进入。
+• 用户须能映射到有效租户账号,否则提示开通。
+[Heading 2] 5.5 权限管理需求
+全体员工(已开通);管理员配置 OAuth 客户端。
+[Heading 2] 5.6 系统接口集成
+OAuth2.0 授权服务器;Ai-DOP 认证中间件。
+[Heading 2] 5.7 报表需求
+登录审计日志(平台安全要求)。
+对应需求:REQ-S9-008;路由:OAuth2.0 登录回调(平台级)。
+
+################################################################################
+### ChatBI/ChatBI智能报表模块蓝图设计方案.docx
+################################################################################
+ChatBI智能报表模块
+业务蓝图设计方案
+Ai-DOP智慧运营管理系统
+--- TABLE 5x2 ---
+   | 文档编号 | CBI-BBP-001
+   | 版本 | V0.2
+   | 密级 | 内部
+   | 编制单位 | 智造易项目组
+   | 编制日期 | 2026-07-30
+版本记录
+--- TABLE 3x4 ---
+   | 日期 | 版本 | 修订人 | 变更说明
+   | 2026-07-30 | V0.1 | 智造易项目组 | 初版建立
+   | 2026-07-30 | V0.2 | 智造易项目组 | 对齐《技术规范书_20260728修订》需求与功能要求;统一 REQ/FUNC 编号与版式
+目录
+(请在 Word 中右键目录区域 → 更新域;下文按 Heading 生成目录条目)
+[Heading 1] 1 总体业务方案
+[Heading 2] 1.1 目标和宗旨
+落实报价范围「ChatBI智能报表:自然语言模型配置、ChatBI报表呈现(报价);规范 2.6.4」,并将《技术规范书_20260728修订》中对应功能要求转化为可配置、可验收的功能方案。
+引用《技术规范书_20260728修订》第 2.6.4 节「ChatBI智能报表」。
+规范目标:以自然语言描述自动生成多维可视化报表;流程为:自然语言提问 → 理解意图 → 匹配业务规则 → 生成 SQL → 查询数据 → 生成解释 → 返回答案。
+报价要求:前端智能问答页/报表结果展示/查询历史;后端 NL 问数解析、语义匹配、权限、结果解释与追问、查询留痕。
+[Heading 2] 1.2 总体业务流程图
+总体路径:系统集成采存治用 → KPI日批计算 → 九宫格/部门看板可视化 → 偏差分析与智慧诊断 → 改善建档派单跟踪与效果复盘闭环。
+[Heading 2] 1.3 方案设计
+前端:Vue3 + Element Plus;动态看板与智慧诊断闭环页。后端:Admin.NET + 数据中台分层(STG/STD/DWD/KPI)+ Outbox 出站;对接方式含数据库直连与 HTTP API。
+[Heading 1] 2 ChatBI智能问答(FUNC-S9-007)
+[Heading 2] 2.1 目标/宗旨
+落实规范 2.6.4:以自然语言获取运营指标解释;MVP 先通问答,再演进 NL2SQL/报表。
+规范追溯:技术规范 2.6.4;报价 ChatBI智能报表
+实现现状:部分完成(MVP 可用)
+• 已实现:ChatBIFloat/Panel 浮窗问答;意图分类;读 KPI 日表聚合;确定性结论段落;DeepSeek 润色;建议问题;跳转看板/诊断。
+• 证据:Web/src/views/aidop/chatbi/*;Plugins/.../ChatBI/ChatBIController.cs。
+• 缺口(相对规范/报价):无 NL2SQL、无可视化报表自动生成、无持久查询历史、无语义/模型配置页、无独立菜单路由、Controller 当前 AllowAnonymous。
+• 验收建议:MVP 按「自然语言问 KPI + 解释」典型场景验收;NL2SQL/历史/配置列为后续或条件项并在三联表备注。
+[Heading 2] 2.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 打开ChatBI | 业务用户 | 点击浮窗 | 当前模块上下文 | 问答面板
+   | 20 | 提问 | 业务用户 | 输入问题或建议问法 | question/filters | 请求
+   | 30 | 解析作答 | 系统 | 意图+KPI聚合(+LLM润色) | KPI日表 | 答案/指标卡
+   | 40 | 联动 | 业务用户 | 跳转看板或诊断 | actions | 详情页
+[Heading 2] 2.3 业务流程说明
+用户在九宫格或模块看板打开 ChatBI 浮窗,输入自然语言问题或点选建议问题。
+系统返回结论、证据摘要、可能原因与下一步建议,并展示相关 KPI 卡。
+用户可按建议追问(当前会话内存),或跳转看板/诊断继续分析。
+目标态应支持查询历史回看与语义模型配置(尚未上线)。
+[Heading 2] 2.4 业务流程规则
+• MVP 不得伪称已执行 NL2SQL;界面保留 Demo/能力说明。
+• 目标态生成 SQL 须受权限与租户隔离约束。
+• AI 任务可异步;失败回退本地模板答案。
+[Heading 2] 2.5 权限管理需求
+管理层/运营专员提问;管理员配置模型(目标态)。
+[Heading 2] 2.6 系统接口集成
+POST /api/AidopChatBI/ask;DeepSeek HTTP;读 ado_s9_kpi_value_l*_day。
+[Heading 2] 2.7 报表需求
+目标态多维可视化报表;当前为文本+指标卡。
+对应需求:REQ-S9-009;路由:组件 ChatBIFloat;API POST /api/AidopChatBI/ask。
+[Heading 1] 3 ChatBI报表与历史(目标态)(FUNC-S9-007)
+[Heading 2] 3.1 目标/宗旨
+补齐规范 2.6.4 与报价中尚未落地的报表/历史/配置能力。
+规范追溯:技术规范 2.6.4「生成SQL→查询→可视化报表」;报价查询历史/模型配置
+实现现状:未实现
+• 无独立问答页、无查询历史 API/表接入、无 NL2SQL、无报表可视化生成、无语义模型配置 UI。
+• DDL 壳表 ado_s9_chatbi_* 未接入运行链路。
+• 本条用于规范/报价追溯,测试用例标为目标态,不作为当前已完成验收。
+[Heading 2] 3.2 业务流程图
+流程步骤见下表(文字流程图)。
+--- TABLE 5x6 ---
+   | 步骤 | 活动 | 角色 | 操作 | 输入 | 输出
+   | 10 | 配置 | 管理员 | 维护语义/模型 | 词典 | 可用配置
+   | 20 | 提问 | 用户 | 自然语言 | 问题 | SQL/查询
+   | 30 | 呈现 | 系统 | 可视化报表 | 结果集 | 图表
+   | 40 | 留痕 | 系统 | 写入查询历史 | 问答日志 | 可回看
+[Heading 2] 3.3 业务流程说明
+用户在独立页提问并生成图表报表。
+可回看历史提问与结果。
+管理员维护语义词典与模型参数。
+[Heading 2] 3.4 业务流程规则
+• 未实现前不得在验收中勾选为已完成。
+• 实现后须补 FUNC 菜单登记与权限。
+[Heading 2] 3.5 权限管理需求
+管理员配置;业务用户问数。
+[Heading 2] 3.6 系统接口集成
+规划 NL2SQL 引擎、历史表、报表组件。
+[Heading 2] 3.7 报表需求
+多维可视化报表。
+对应需求:REQ-S9-010;路由:未实现。

+ 380 - 0
doc/_tmp_ch5.txt

@@ -0,0 +1,380 @@
+第五章 采购需求
+[P360|Normal] 采购需求
+[P361|Heading 2] 项目概况
+[P362|Heading 3] 项目背景
+[P363|Normal] 近年来,国家高度重视制造业数字化转型,党的二十大报告明确提出“加快建设制造强国、质量强国、航天强国、交通强国、网络强国、数字中国”,将制造业数字化转型作为重要战略任务。河南省紧跟国家部署,先后出台《河南省制造业数字化转型实施方案(2023-2025年)》等政策文件,明确要求推动中小企业数字化转型,建立分级分类转型标准,支持培育适配中小企业需求的数字化解决方案和服务平台,鼓励企业“上云、用数、赋智”,实现生产运营全流程数字化升级。
+[P364|Normal] 河南省作为制造业大省,中小企业数量众多,涵盖装备制造、汽车零部件、电子信息、轻工纺织等多个离散制造领域。当前,多数中小企业面临数字化基础薄弱、转型资金有限、专业人才匮乏等问题,普遍存在“信息孤岛”现象,产销协同、供应链协同效率低下,难以满足日益严格的转型合规要求。
+[P365|Normal] 现有数字化解决方案要么针对性不强,无法适配中小企业灵活多样的业务需求;要么成本过高,超出中小企业承受能力。尤其是在二级转型场景中,缺乏能够覆盖离散制造全流程、实现多系统无缝对接的标准化产品,导致部分企业转型陷入“两难”境地。市场迫切需要一款低成本、高适配、可复制的数字化运营平台,助力中小企业快速完成数字化转型,提升市场竞争力。
+[P366|Heading 3] 建设目标
+[P367|Heading 4] 2.1 打造符合标准的数字化解决方案
+[P368|Normal] 对标中小企业数字化转型三级及以上标准,在二级场景基础上构建覆盖制造企业OTD(订单到交付)端到端全流程的数字化运营平台,形成标准化、可复制的产品包,满足河南省制造业企业数字化转型的合规性要求。
+[P369|Heading 4] 2.2 实现全流程数字化集成与协同
+[P370|Normal] 聚焦离散制造企业从订单接收至产品交付的全流程(S0~S9),实现业务流程建模标准化、产销/制造/供应协同、采购/生产/执行、质量管理等核心环节的数字化集成,解决企业“信息孤岛”问题,提升全流程业务协同效率。
+[P371|Heading 4] 2.3 构建数据驱动的管理体系
+[P372|Normal] 通过数据治理与数据中台建设,整合OTD全流程数据,结合KPI指标监控、异常管理及BI可视化工具,为企业提供实时运营洞察,支撑数据驱动的决策优化,同时为后续人工智能应用奠定数据基础。
+[P373|Heading 4] 2.4 形成差异化服务能力
+[P374|Normal] 基于系统集成能力及AI能力,快速响应企业定制化需求(如业务断点连接、已有系统对接),打造“标准化产品+定制化服务+AI智能赋能”的模式,强化作为河南省制造业数字化服务商的市场竞争力。
+[P375|Heading 4] 2.5 构建企业“体检”体系
+[P376|Normal] 通过企业数据采集与分析,生成运营情况分析报告,精准识别企业运营痛点、数字化水平及同行业竞争力,为企业转型决策提供依据。
+[P377|Heading 2] 项目需求
+[P378|Heading 3] 核心目标
+[P379|Normal] 建立适配企业业务流程规范和基础数据标准,为OTD全流程协同提供“数据基准”和“流程蓝图”,避免因数据不一致、流程不统一导致的业务断点。
+[P380|Normal] 构建从运营建模(S0)、产销协同平台(S1)、制造协同平台(S2)、供应协同平台(S3)、采购执行(S4)、物料仓储(S5)、生产执行(S6)、成品仓储(S7)、全流程异常监控(S8)到运营绩效指标测量(S9)全流程多维度企业运营管理平台。
+[P381|Heading 3] 详细实施内容
+[P382|Heading 4] 2.1 主数据标准化
+[P383|Heading 5] 2.1.1  运营建模(S0)
+[P384|Normal] 数据分类与规范
+[P385|Normal] 供应商/客户主数据:包含基本信息(名称、信用代码、地址)、联系人信息、资质信息、开票信息(开户银行、银行账号);
+[P386|Normal] 物料主数据:制定统一编码规则(如“物料类型+材质+规格+版本+日期”18位编码),明确物料属性;
+[P387|Normal] 工艺主数据:标准工序库(如机加工包含“车削-铣削-钻孔-抛光”4类基础工序)、工艺路线模板(按产品系列预设流程,支持个性化调整)。
+[P388|Normal] 数据导入与同步
+[P389|Normal] 初始导入:支持通过Excel模板批量导入(需提供标准化模板,含必填字段校验);
+[P390|Normal] 实时同步:与ERP系统建立接口,实现主数据“一处修改、全系统同步”(如ERP中物料规格变更后,DOP需及时响应并同步做出更新,更新延迟不超过5分钟)。
+[P391|Heading 4] 2.2 核心订单与流程标准化
+[P392|Normal] 核心订单标准化
+[P393|Normal] 销售订单:统一订单核心字段模板,涵盖订单编号、客户代码、产品型号规格、订货数量、交付日期等关键信息;明确订单变更各节点的权责主体与时效要求,确保订单信息准确传递,避免沟通偏差;
+[P394|Normal] 制造工单:建立与销售订单的关联机制;工单内容需完整包含生产执行要素,具体为批次号、工单号、物料号、工序排程计划、预计完工日期、制造工单优先级;
+[P395|Normal] 采购订单:基于制造工单的物料需求精准生成,实现采购需求与生产计划的无缝衔接;订单需明确供应商代码、物料型号规格、采购数量、交付日期等核心条款。
+[P396|Normal] 流程标准化
+[P397|Normal] 绘制OTD全流程蓝图:梳理从订单评审、计划排产、物料采购、生产制造、质量检验到成品交付的全流程节点;明确每个节点的输入信息、输出成果、责任部门 / 岗位、操作时效标准,形成可视化的价值流;
+[P398|Normal] 制定流程执行规范(SOP):针对各核心业务流程,编制详细、可落地的SOP文件,明确操作步骤、执行标准与管控要求,如采购收货流程需包含“供应商送货→IQC检验→合格入库/不合格退货”3个强制节点。
+[P399|Normal] 技术支持
+[P400|Normal] 主数据管理工具:需要对接数据中台进行数据清洗与同步;
+[P401|Normal] 接口开发工具:通过ERP开放接口平台实现与ERP、OA等系统的数据对接。
+[P402|Heading 4] 2.3 产销、制造与供应协同平台
+[P403|Normal] 通过“产销-制造-供应”三级协同,实现“客户订单→生产计划→物料供应”的精准匹配,减少订单交付延期、库存积压等问题。
+[P404|Heading 5] 2.3.1产销协同平台(S1)
+[P405|Normal] 核心功能
+[P406|Normal] 订单评审:根据客户要求、产能负荷、物料库存数据,自动评审订单交期;
+[P407|Normal] 订单交付:接受销售订单后,自动联动生产能力、物料供应、历史履约等信息生成交付承诺单,明确交付日期;交付进度流程通过评审、排产、齐套、采购、备料、生产到发运全流程跟踪查看,每个节点可设置时效要求,实时同步数据并自动更新节点进度,根据时效要求,自动触发预警机制(节点进度滞后10%、节点进度滞后30%或确认无法按时交付,自动启动交付变更流程,需要提交变更申请并经审批后,与客户协商新的交付日期,同步更新订单状态)。
+[P408|Normal] 订单发货:满足成品入库完成或交付日期到期等场景时,销售人员手工生成“销售发货通知单”,包含订单号、客户信息、成品型号 /数量、包装要求,对接ERP。
+[P409|Normal] 实施要点
+[P410|Normal] 与销售部门确认“订单优先级规则”(如老客户订单优先于新客户);
+[P411|Heading 5] 2.3.2制造协同平台(S2)
+[P412|Normal] 核心功能
+[P413|Normal] 主生产计划(MPS):对接ERP实现月/周分解销售订单,明确各车间生产任务(如“装配车间每周需完成500台产品A”);
+[P414|Normal] 产能平衡:对接MES实现监控设备负荷(如车床利用率≥90%时预警);
+[P415|Normal] 工单执行监控:对接MES实现跟踪工单进度(如“工单B已完成70%,预计提前1天完工”),延迟时自动推送预警至生产主管。
+[P416|Normal] 实施要点
+[P417|Normal] 对接MES实现导入设备产能数据(如每台机床的理论产能、实际效率);获取生产数据(如工序完工数量)。
+[P418|Heading 5] 2.3.3 供应协同平台(S3)
+[P419|Normal] 核心功能
+[P420|Normal] 物料需求计划(MRP):对接ERP实现根据生产计划自动计算物料净需求(如“生产100台产品A需500个零件B”),考虑现有库存和在途量;
+[P421|Normal] 实施要点
+[P422|Normal] 每月对供应商交付率进行排名(如Top3供应商给予优先订单)。
+[P423|Normal] 技术支持
+[P424|Normal] 计划排程工具:自有生产排程模块,对接ERP实现支持订单优先级和产能约束条件下的自动排产;
+[P425|Normal] 移动端应用:实现计划员、车间主任随时随地查看计划进度(如手机微信推送预警信息)。
+[P426|Heading 5] 2.3.4 采购执行(S4)
+[P427|Normal] 核心流程
+[P428|Normal] 采购计划发布:对接ERP实现通过供应商门户推送采购订单;
+[P429|Normal] 实施要点
+[P430|Normal] 建立供应商门户。
+[P431|Heading 4] 2.4 物料仓储、生产执行、成品仓储系统对接
+[P432|Normal] (1)核心目标
+[P433|Normal] 对接ERP实现仓储管理、生产执行、成品发货的系统及数据对接,确保OTD全流程“每一步可记录、每一件可追溯”。
+[P434|Normal] 被对接系统的核心功能
+[P435|Heading 5] 2.4.1 物料仓储(S5)
+[P436|Normal] 核心功能
+[P437|Normal] 来料检验(IQC):对接ERP实现获取检验结果。
+[P438|Normal] 库存操作:对接ERP实现支持查询盘点结果。
+[P439|Normal] 实施要点
+[P440|Normal] 质检要求规则:支持对接ERP实现导入质检检验规范。
+[P441|Heading 5] 2.4.2 生产执行(S6)
+[P442|Normal] 核心流程
+[P443|Normal] 过程检验:对接ERP实现查询生产指令单和检验结果;
+[P444|Normal] 工序汇报:对接ERP实现查询工序汇报(数量、工时、设备编号);
+[P445|Normal] 异常处理:对接ERP实现通过安灯系统(ANDON)填报故障,维修人员可以自主查看异常信息、支持系统推送(响应时间≤15分钟)。
+[P446|Normal] 实施要点
+[P447|Normal] 设备管理:对接ERP实现统计设备OEE;
+[P448|Heading 5] 2.4.3 成品仓储(S7)
+[P449|Normal] 核心功能
+[P450|Normal] 成品检验:对接ERP实现查询成品检验数据。
+[P451|Normal] 成品入库:对接ERP实现生产完工后,查询入库申请(关联生产工单、质检报告)关联成品检验;
+[P452|Normal] 销售出库:对接ERP实现查询销售出库单和发货数据;
+[P453|Normal] 售后追溯:对接ERP实现查询成品序列号(含生产批次、物料批次),可追溯至原材料批次号、生产操作工号、检验员。
+[P454|Normal] 实施要点
+[P455|Normal] 唯一标识:对接ERP实现成品包装查询唯一序列号标签(支持扫码查溯源信息);
+[P456|Heading 4] 2.5 全流程异常监控
+[P457|Normal] (1)核心目标
+[P458|Normal] 监控供应商交付延期、物料/工件质量不合格、操作人效不达标等全流程异常,实现异常事件的即时提报、响应与处理闭环。
+[P459|Normal] (2)详细实施内容
+[P460|Heading 5] 2.5.1 全流程异常监控(S8)
+[P461|Normal] 核心功能
+[P462|Normal] 异常类型与监控
+[P463|Normal] 供应商异常:交付延期、物料不合格(通过采购订单跟踪);
+[P464|Normal] 生产异常:生产产能;
+[P465|Normal] 质量异常:检验不合格;
+[P466|Normal] 异常处理流程
+[P467|Normal] 异常提报:系统自动触发或员工手动提报,明确异常类型、影响范围;
+[P468|Normal] 分级响应:按严重程度分级(一般/重要/紧急),紧急异常需1小时内响应;
+[P469|Normal] 处理闭环:责任人录入处理措施和结果
+[P470|Normal] AI智能体:引入AI智能体集群实现从数据输入到事件响应的全流程自动化闭环。实现7x24小时实时感知工厂状态,识别异常模式并生成预警,驱动责任人及时闭环处理。
+[P471|Heading 4] 2.6 运营绩效指标测量(S9)
+[P472|Normal] (1)核心目标
+[P473|Normal] 与二级包(数字化工厂)在生产计划、设备管理、质量管控等核心业务模块的接口打通,基于ERP系统开放的RESTAPI、WebService接口进行集成开发,确保兼容性与稳定性,支持业务数据双向流转,避免“信息孤岛”。
+[P474|Normal] (2)详细实施内容
+[P475|Normal] 打通孤岛快速连接
+[P476|Normal] 系统对接:实现本平台与ERP等主流应用平台的无缝集成,打通业务数据链路,避免重复录入,提升数据一致性与业务协同效率;
+[P477|Normal] 支持单点登录(SSO),针对工业互联网平台,员工一次登录即可访问AI-DOP(通过OAuth2.0协议)。
+[P478|Normal] 3.2.6数据治理与数据中台
+[P479|Normal] 核心目标
+[P480|Normal] 构建统一的数据中台,实现OTD全流程数据的“采、存、治、用”,为KPI分析、BI可视化、人工智能应用提供高质量数据支撑。
+[P481|Heading 5] 2.6.1 九宫格智慧运营看板(S9)
+[P482|Normal] (1)核心目标
+[P483|Normal] 建立全流程关键绩效指标(KPI)定义、数据测量、偏差分析及可视化,覆盖客户订单交付、订单协同、供应协同、采购、物料、生产、成品仓储等核心指标,支撑运营决策优化。
+[P484|Normal] 通过BI工具实现全流程数据的可视化展示,支持管理层决策和业务人员自助分析。
+[P485|Normal] 详细实施内容
+[P486|Normal] BI与数据可视化
+[TABLE487] rows=6 cols=3
+    | 模块 | KPI指标 | 计算方式
+    | 产销协同 | OTD交付率 | 按时交付订单数/总订单数×100%
+    | 生产执行 | 设备综合效率(OEE) | 可用率×表现率×质量率×100%
+    | 采购供应 | 供应商交付率 | 按时交付物料批数/总采购批数×100%
+    | 质量 | 成品合格率 | 合格成品数/总生产数×100%
+    | 库存周转 | 库存周转天数 | 库存数量/日均用量
+[P488|Normal] KPI计算与分析
+[P489|Normal] 自动计算:基于数据中台的DWS层数据,每日凌晨自动计算KPI值。
+[P490|Normal] 偏差分析:当KPI未达标时(如OTD交付率<95%),系统自动分析原因(如“物料短缺导致3个订单延期”)。
+[P491|Normal] 可视化看板设计
+[P492|Normal] 管理层大屏:展示核心KPI(OTD交付率、质量合格率)、异常预警(如“3个订单延期”);
+[P493|Normal] 部门看板:
+[P494|Normal] 生产部:工单进度、设备OEE、工序瓶颈分析;
+[P495|Normal] 采购部:供应商交付排行、物料齐套率、逾期订单;
+[P496|Normal] 质量部:各环节不合格率、成品和半成品不良率。
+[P497|Normal] 自助分析支持
+[P498|Normal] 供业务人员自主分析、支持按时间、按产品自主查询(“分析近xx个月某产品的质量波动原因”);
+[P499|Normal] 培训业务人员使用数据下钻功能(从“成品合格率”下钻至“某工序不合格明细”)。
+[P500|Heading 5] 2.6.2 运营问题诊断
+[P501|Normal] 本模块基于平台统一数据抽取能力,打通产销协同、运作协同、供应协同、采购执行、物料仓储内物流、生产执行、成品仓储外物流全环节异构系统数据,构建订单至成品出库端到端完整数据链路,面向制造企业全流程运营开展智能化诊断分析。
+[P502|Normal] 模块支持以销售订单为主线,串联需求预测、采购计划、来料入库、车间生产、半成品流转、成品入库、发货配送全业务节点,自动识别各环节断点、滞后、损耗、供需失衡、库存积压、交付延期、产能浪费、物流低效等各类运营异常问题;
+[P503|Normal] 依托多维度数据关联算法完成问题根因溯源,输出运营诊断报告,并针对每类运营痛点输出可落地的改善策略建议,并生成改善任务,追踪闭环。
+[P504|Normal] 支撑企业运营管理人员持续优化全链路协同运营水平,实现订单履约全流程风险前置管控与运营效能提升。
+[P505|Normal] 数据处理指标:异常识别时效:实时类数据问题(物料缺料、生产停滞、发货延迟)识别延迟≤3 分钟;周期类问题(库存积压、供需失衡、产能利用率分析)每日定时执行分析。根因分析维度:至少支持订单、物料、供应商、产线、仓库、时间段、人员 7 个维度下钻溯源。
+[P506|Heading 5] 2.6.3 运营问题改善闭环
+[P507|Normal] 承接运营问题诊断输出的全流程运营异常,搭建问题建档、整改派单、过程跟踪、效果量化复盘、优化经验固化一体化闭环流程;
+[P508|Normal] 生成改善任务,追踪闭环。支撑企业运营管理人员持续优化全链路协同运营水平,实现订单履约全流程风险前置管控与运营效能提升;
+[P509|Normal] 自动对比改善前后各环节经营指标,评估优化成效,沉淀标准化管控规则,实现运营问题持续治理与全链路协同能力迭代提升。
+[P510|Heading 5] 2.6.4 ChatBI智能报表
+[P511|Normal] BI引入ChatBI作为多维可扩展报表。可显著降低对用户的技术要求,让用户聚焦业务需求,最大化的利用AI的语义分析和数据处理能力,让用户实现基于自然语言描述自动化的生成所需的多维可视化报表。
+[P512|Normal] 基本处理流程:
+[P513|Normal] 用户用自然语言提问 → ChatBI理解意图 → 匹配业务规则 → 生成SQL → 查询数据 → 生成解释 → 返回答案
+[P514|Heading 4] 2.7 系统集成模块
+[P515|Normal] 支持 ERP、MES、CRM、WMS、SRM、TMS 等多类业务系统多模式对接采集,完成异构数据清洗、标准化融合,搭建订单至出库全链路统一数据底座;具备集成通道可视化配置、数据同步监控、异常告警、传输安全管控能力,向上支撑诊断、分析类模块调用全域数据,实现多系统数据互通与业务联动。
+[P516|Heading 5] 2.7.1 对接适配指标
+[P517|Normal] 接入方式:支持数据库直连、HTTP-API、WebService、FTP 文件、MQ 消息、物联网网关 6 种接入方式;
+[P518|Normal] 兼容版本:适配主流国产及市面通用 ERP、MES、WMS 等系统;支持定时同步和实时同步两种模式;
+[P519|Normal] 可扩展:可视化配置页面,新增一套第三方系统配置完成时间≤4 小时,不用编写大量代码。
+[P520|Heading 5] 2.7.2 数据传输性能指标
+[P521|Normal] 实时同步场景:业务数据变更后,推送至平台时延≤2-5 秒;
+[P522|Normal] 定时同步:夜间批量同步,1000 万条明细数据传输 + 清洗转换≤30 分钟;
+[P523|Normal] 传输容错:支持断点续传,网络中断恢复之后自动续传,不会重复入库或者丢失数据;
+[P524|Normal] 数据清洗:自动完成字段标准化、空值过滤、异常值标记、编码统一。
+[P525|Heading 4] 2.8 移动端应用
+[P526|Normal] (1)核心目标
+[P527|Normal] 通过手机应用形式让DOP平台核心功能“随时随地可用”,聚焦管理层快速决策,解决PC端操作不便、响应滞后的痛点,实现“移动办公+实时协同+快速响应”。
+[P528|Normal] (2)详细实施内容
+[P529|Heading 5] 2.8.1 生产执行
+[P530|Normal] 工单处理:通过移动端查询生产计划,查询物料齐套状态(同步S5数据),查询生产指令的投产和报工;
+[P531|Heading 5] 2.8.2 仓储物流
+[P532|Normal] 库存查询:实时查看原料、成品库存数量、库位信息,支持按物料编码、订单号检索。
+[P533|Heading 5] 2.8.3 质量管理
+[P534|Normal] 检验任务查询:来料检验报表、过程检验报表。
+[P535|Normal] 检验结果查询:成品检验报表。
+[P536|Heading 5] 2.8.4 协同决策
+[P537|Normal] 订单进度跟踪:销售专员查看订单评审、生产、发货全流程进度,接收交付预警提醒(如订单延期)。
+[P538|Normal] 供应商协同:采购专员接收供应商交期回复、发货通知,查看来料检验结果,对逾期信息有相关提醒。
+[P539|Normal] 决策看板:管理层查看核心KPI(OTD交付率、OEE、质量合格率)、异常统计(如月度设备故障Top3),支持数据下钻(如从“成品合格率”查看某批次不合格明细)。
+[P540|Heading 2] 技术总体要求
+[P541|Heading 3] 设计原则
+[P542|_Style 13] 数据互通性:建立统一的数据接口标准总线与API网关,实现异构系统的标准化对接。
+[P543|_Style 13] 高安全性:实施从数据、应用到网络的多层次安全防护体系。
+[P544|_Style 13] 高可靠性:关键设备与组件应采用高可用架构,确保系统7x24小时稳定运行。
+[P545|_Style 13] 灵活扩展性:支持功能模块与计算资源的平滑扩展,适应未来业务发展。
+[P546|_Style 13] 易运维性:提供可视化的运维管理工具,降低后期运维难度与成本。
+[P547|Heading 3] 性能要求
+[P548|Normal] (1)系统可用性与可靠性:全年可用性≥99%(核心业务模块可用性≥99%);计划内维护不计入不可用时间;重大故障力争48小时内恢复;
+[P549|Normal] (2)页面与操作响应:常规页面加载、普通查询及常规用户操作响应时间≤30秒;复杂查询、多表关联、大数据量列表、运营看板/多图联动等复杂操作响应时间≤60秒;超大数据量导出、全量重算、AI/ChatBI等按异步任务处理,不按页面秒级响应验收,任务状态可查询。
+[P550|Normal] (3)接口性能:常规业务接口平均响应时间≤30秒;复杂聚合接口平均响应时间≤60秒;接口调用成功率≥99%。上述指标不含客户端网络异常、用户主动取消,以及ERP/MES/OA等第三方系统超时或不可用导致的延迟。
+[P551|Normal] (4)并发与容量:在约定硬件与部署架构下,系统最大支持约1000人同时在线、约400人并发操作;具备横向扩展能力,扩容后容量按部署方案评估,不承诺无上限线性扩展。
+[P552|Normal] (5)数据同步与批处理:在对接系统正常前提下,主数据及业务单据状态同步目标延迟不超过5分钟,异常情况不超过15分钟;KPI等日批任务按日调度完成即可;数据质量准确率≥98%。
+[P553|Normal] (6)业务时效类指标:紧急异常响应、安灯推送等业务时效要求,按本规范书功能章节约定执行,不在性能章节另行加严。
+[P554|Normal] (7)指标适用前提:性能指标以合同/部署方案约定的硬件规格、网络条件及典型数据量为前提;低于约定规格时,指标可按比例放宽或另行评估。
+[P555|Heading 2] 项目实施与管理
+[P556|Heading 3] 项目团队
+[P557|_Style 13] 供应商需组建经验丰富的项目团队,至少包括:项目经理、技术架构师、开发工程师、实施测试工程师、运维工程师,并提供明确的职责分工。
+[P558|Heading 3] 交付物
+[P559|_Style 13] 供应商需交付完整的系统软件、源代码、技术文档(包括设计文档、API接口文档、测试报告、用户手册、运维手册等)。
+[P560|Heading 2] 验收标准
+[P561|_Style 13] 所有在「性能要求」中约定的指标,应在约定部署规格与典型业务场景下抽样验证通过。
+[P562|_Style 13] 验收以典型场景为主(如登录、列表查询、看板查询、主数据同步等),不要求全接口、全场景压测达标。
+[P563|_Style 13] ERP/MES/OA等外部系统延迟或不可用导致的超时,不计入本系统性能不达标。
+[P564|_Style 13] AI、自然语言分析、大规模历史重算等能力,按异步/离线任务能力验收。
+[P565|_Style 13] 验收环境硬件、数据量、并发模型应与合同或部署方案约定一致;低于约定规格时,指标按比例放宽或另行评估。
+[P566|Heading 3] 功能验收
+[P567|_Style 13] 所有在需求规格说明书中定义的功能点必须全部实现并通过测试。
+[P568|Heading 3] 性能验收
+[P569|_Style 13] 所有在「性能要求」中约定的指标,应在约定部署规格与典型业务场景下抽样验证通过。
+[P570|_Style 13] 验收以典型场景为主(如登录、列表查询、看板查询、主数据同步等),不要求全接口、全场景压测达标。
+[P571|_Style 13] ERP/MES/OA等外部系统延迟或不可用导致的超时,不计入本系统性能不达标。
+[P572|_Style 13] AI、自然语言分析、大规模历史重算等能力,按异步/离线任务能力验收。
+[P573|_Style 13] 验收环境硬件、数据量、并发模型应与合同或部署方案约定一致;低于约定规格时,指标按比例放宽或另行评估。
+[P574|Heading 3] 文档验收
+[P575|_Style 13] 交付的所有技术文档必须齐全、内容准确、格式规范。
+[P576|Heading 2] 培训与售后服务
+[P577|Heading 3] 培训要求
+[P578|_Style 13] 供应商需为不同角色(管理员、开发人员、运维人员、业务用户)提供分层、分系统的定制化培训,包括理论讲解与实操演练,并提供全套培训资料。
+[P579|Heading 3] 售后服务
+[P580|_Style 13] 服务等级协议(SLA):提供5x8小时技术支持,严重故障48小时内响应,72小时内恢复。
+[P581|_Style 13] 质保期:系统提供不低于1年的免费质保期。
+[P582|_Style 13] 服务内容:包括故障处理、系统巡检、版本升级、技术咨询等
+[P583|Normal] 第六章  响应文件格式
+[P584|Body Text] 项目
+[P585|Normal] 响应文件
+[P586|Normal] 项目编号:
+[P587|Normal] 供应商:                       (盖公章)
+[P588|Normal] 法定代表人或其授权代表:	    (签字或盖章)
+[P589|Normal] 日  期:   年    月   日
+[P590|Normal] 目    录
+[P591|Normal] 响应函及响应函附录
+[P592|Normal] 法定代表人身份证明书
+[P593|Normal] 法定代表人授权委托书
+[P594|Normal] 资格审查资料
+[P595|Normal] 商务响应文件
+[P596|Normal] 技术响应文件
+[P597|Normal] 其他
+[P598|Normal] 一、响应函及响应函附录
+[P599|Normal] (一)响应函
+[P600|Normal] 致:(采购单位名称)
+[P601|Normal] 1、根据已收到的项目编号为  (项目编号) 的 (项目名称)的采购文件,遵守相关法律和有关文件的规定,我方承诺接受采购文件及澄清修改部分(如有)的全部条款(包括响应文件递交截止时间、资格条件、评审成交标准以及采购需求等其他所有条款)且无任何异议,我公司愿以人民币:大写:         (¥小写:    元)的报价(含税)参加该项目的询比,并按上述文件中的条款承包该项目。
+[P602|Normal] 2、我公司完全响应采购文件中提出的所有实质性要求。
+[P603|Normal] 3、我公司同意在采购文件规定的投标期限内,本响应文件始终对我公司具有约束力,且随时可以按此文件成交。
+[P604|Normal] 4、一旦我公司成交,我公司保证在成交后的规定期限内签订项目服务合同,服务期为:           。
+[P605|Normal] 5、我们承诺最低报价是成交的重要选择,但不是唯一选择。
+[P606|Normal] 6、除非与贵方另外达成协议并生效,贵方的成交通知书、本响应文件将与双方签订的合同具有同等的约束力。
+[P607|Normal] 供应商:                              (盖章)
+[P608|Normal] 法定代表人或其委托代理人:          (签字或盖章)
+[P609|Normal] 日  期:     年    月     日
+[P610|Body Text] (二)响应函附录
+[TABLE611] rows=12 cols=2
+    | 项目名称 | 
+    | 项目编号 | 
+    | 供应商名称 | 
+    | 响应总报价 / (人民币)含税 | 大写:           ;  / 小写:¥        元
+    | 服务内容 | 
+    | 服务期限 | 
+    | 质保期 | 
+    | 质量要求 | 
+    | 服务地点 | 
+    | 响应有效期 | 自响应文件递交截止之日起60日历天。
+    | 权利义务 | 我司承诺响应询比文件第四章“合同条款及格式”的相关规定。 / 注:如优于可列行增加相关条款。
+    | 备注 | 
+[P612|Normal] 供应商:                              (盖章)
+[P613|Normal] 法定代表人或其委托代理人:          (签字或盖章)
+[P614|Normal] 日  期:     年    月     日
+[P615|Normal] 二、法定代表人身份证明书
+[P616|Normal] 单位名称:
+[P617|Normal] 单位性质:
+[P618|Normal] 地      址:
+[P619|Normal] 成立时间:     年    月    日
+[P620|Normal] 经营期限:
+[P621|Normal] 姓    名:         性别:        年龄:       职务:
+[P622|Normal] 系     (供应商名称)          的法定代表人。
+[P623|Normal] 特此证明。
+[P624|Normal] 供应商:                              (盖章)
+[P625|Normal] 法定代表人:                   (签字或盖章)
+[P626|Normal] 日  期:     年    月     日
+[P627|Normal] 附:法定代表人身份证复印件,加盖单位公章。
+[P628|Normal] 三、法定代表人授权委托书
+[P629|Normal] 本人(姓名)系(供应商名称)的法定代表人,现授权委托(姓名)为我单位  (供应商名称)代理人,以本单位名义参加(采购单位名称)的    (项目名称)   的投标活动。代理人在开标、评标、合同谈判过程中所签署的一切文件和处理与之有关的一切事务,其法律后果由我方承担。
+[P630|Normal] 代理人无转委托权,特此证明。
+[P631|Normal] 供  应  商:                (盖单位章)
+[P632|Normal] 法定代表人:                 (签字或盖章)
+[P633|Normal] 法定代表人身份证号码:
+[P634|Normal] 委托代理人:
+[P635|Normal] 委托代理人身份证号码:
+[P636|Normal] 年     月     日
+[P637|Normal] 附:委托代理人身份证复印件,加盖单位公章
+[P638|Normal] 资格审查资料:
+[P639|Normal] (一)供应商基本情况表
+[TABLE640] rows=12 cols=5
+    | 投标人名称 |  |  |  | 
+    | 注册地址 |  |  | 成立时间 | 
+    | 法定代表人 | 姓名 |  | 电话 | 
+    | 项目负责人 | 姓名 |  | 电话 | 
+    | 注册资金 |  |  |  | 
+    | 纳税识别号 |  |  |  | 
+    | 基本户开户行 |  |  |  | 
+    | 基本户开户行账号 |  |  |  | 
+    | 企业办公 / 场所面积 |  |  |  | 
+    | 经营范围 |  |  |  | 
+    | 员工总人数(  人) | 员工总人数(  人) | 员工总人数(  人) | 员工总人数(  人) | 员工总人数(  人)
+    | 备注 |  |  |  | 
+[P641|Normal] (二)供应商资格声明函
+[P642|Normal] 致:                (采购人名称)
+[P643|Normal] 本公司愿意参加询比,提供采购内容中规定的内容,并声明提交的下列文件是准确的和真实的。
+[P644|Normal] 1.供应商基本情况
+[P645|Normal] 2.资格证明资料
+[P646|Normal] 我方在此声明,我方具备并满足:
+[P647|Normal] (1)具有独立承担民事责任的能力;
+[P648|Normal] (2)具有良好的商业信誉和健全的财务会计制度;
+[P649|Normal] (3)具有履行合同所必需的设备和专业技术能力;
+[P650|Normal] (4)有依法缴纳税收和社会保障资金的良好记录;
+[P651|Normal] (5)参加本次政府采购活动前三年内,在经营活动中没有重大违法记录。
+[P652|Normal] 3.遵守《中华人民共和国民法典》等国家有关法律、法规、规章,严格履行法定职责,近3年内没有违法、违规执业记录及行业处罚情况;
+[P653|Normal] 4.拥有与服务需求相匹配的相关服务经验;
+[P654|Normal] 5.我方不存在供应商负责人为同一人或者存在控股、管理关系的不同单位,参加同一项目询比采购,未向河南产业互联网联合发展有限公司及控股子公司提供过与本次法律顾问服务存在利益冲突的其他法律服务(如对立方代理等);
+[P655|Normal] 6.我方非联合体参与本项目。
+[P656|Normal] 供应商:                              (盖章)
+[P657|Normal] 法定代表人或其委托代理人:          (签字或盖章)
+[P658|Normal] 日  期:     年    月     日
+[P659|Normal] (1)供应商为具有独立承担民事责任能力的法人或其他组织,须出具合法有效的企业法人营业执照、或事业单位法人证书、或登记证、或组织机构代码证等相关证明,提供相关证明的扫描件/复印件;
+[P660|Normal] (2)供应商须能够提供增值税专用发票(提供承诺书);
+[P661|Normal] (3)供应商须提供2023年1月1日以来签订的软件开发项目案例1个,金额不低于20万元,提供合同(或框架协议)关键页扫描件/复印件,包括但不限于合同(或框架协议)首页、服务内容页、金额页、签字盖章页等,业绩金额以合同(框架协议业绩金额以2023年1月1日之后订单)对应的结算发票金额为准,提供发票扫描件及发票在网上税务系统(https://inv-veri.chinatax.gov.cn/)查询截图,证明材料须清晰完整;
+[P662|Normal] (4)本项目不允许联合体应答,中选后不得转包;(提供承诺书)
+[P663|Normal] (5)对在“国家企业信用信息公示系统”中被列入“经营异常名录”、“严重违法失信名单”的供应商,对在“信用中国”网站(www.creditchina.gov.cn)中被列入“失信被执行人”、“重大税收违法失信主体”、“政府采购严重违法失信行为记录名单”的供应商,拒绝其参与本项目应答活动;
+[P664|Normal] (6)供应商不得存在下列情形之一:(提供承诺书)
+[P665|Normal] 1.供应商被责令停业或破产状态的;
+[P666|Normal] 2.供应商被暂停或取消投标资格的;
+[P667|Normal] 3.供应商财产被接管、查封、扣押或冻结的;
+[P668|Normal] 4.供应商近三年(2023年1月1日至本项目评审之日),在河南产互联组织的采购活动中,被认定存在串标、围标、骗标等行为的。
+[P669|Normal] 五、商务响应文件
+[P670|Normal] 5.1企业业绩(一个业绩一张表,供应商自行添加):
+[TABLE671] rows=6 cols=2
+    | 项目名称 | 
+    | 项目地址 | 
+    | 项目金额 | 
+    | 委托人名称 | 
+    | 合同签订日期 | 
+    | 备注 | 
+[P672|Normal] 注:后附相关证明资料。
+[P673|Normal] 供应商名称(盖章):
+[P674|Normal] 法定代表人或其授权代表(签字或盖章):
+[P675|Normal] 日期:       年       月       日
+[P676|Normal] 5.2采购活动廉洁承诺书
+[P677|Normal] 采购活动廉洁承诺书
+[P678|Body Text 21] (供应商适用)
+[P679|Body Text 21] (采购单位)   :
+[P680|Body Text 21] 为营造公开、公平、公正、诚实守信的采购环境,树立诚信守法的供应商形象,本人代表本单位在参与贵方               项目采购活动中,作出以下承诺:
+[P681|Body Text 21] 一、本单位严格按照招标采购等各项法律法规、规章制度及操作规程和办事程序参目与采购活动,自觉遵守采购单位有关廉政建设要求,主动接受相关部门的监督。
+[P682|Body Text 21] 二、对所提交的单位基本信息、资格、业绩、基财务状况、信誉等所有资料,均合法、真实、准确、有效,无任何伪造、修改、虚假成份,并对所提供资料的真实性负责。
+[P683|Body Text 21] 三、自我约束、自我管理,守合同、重信用,不参与围标串标、弄虚作假、骗取中标、干扰评标、违约毁约等行为,自觉维护采购单位采购良好秩序。
+[P684|Body Text 21] 四、不以任何方式向采购单位采购人员或者评审委员会成员赠送礼品、礼金及有价证券;不宴请或邀请采购单位的任何人参加高档娱乐消费、旅游等活动;不以任何形式报销采购单位的任何人以及亲友的各种票据及费用;不进行可能影响采购公平、公任正的任何活动。
+[P685|Body Text 21] 五、一旦发现采购单位相关人员在采购过程中有索要财物等不廉洁行为,坚决予以抵制,并及时向采购单位纪检监察管理部门举报。
+[P686|Body Text 21] 六、我方自愿将本承诺书作为采购投标文件的附件,具有同等的法律效力。
+[P687|Body Text 21] 七、本单位将严格遵守以上承诺,如发生违法违规或不良行为,自愿接受河南文旅投资集团相关部门给予的处理,列入集团系统采购“黑名单”,并依法承担责任。
+[P688|Body Text 21] 八、本人作为  (单位)  法定代表人(授权代理人),已认真阅读了上述承诺,并向本单位员工作了宣传教育。
+[P689|Body Text 21] 法定代表人或授权代理人签字或盖章:
+[P690|Body Text 21] 承诺单位(签章):
+[P691|Body Text 21] 年  月  日
+[P692|Normal] 六、技术响应文件
+[P693|Normal] 请对“第四章合同条款及格式”内容按下述格式进行汇总应答,评审委员会将对存在答复“不满足”的投标人做废标处理。
+[P694|Normal] (一)合同条款及格式的汇总应答
+[P695|Normal] 1、若对“第四章合同条款及格式”内容全部满足,请在下方应答“全部满足”。
+[P696|Normal] 对第四章合同条款及格式应答:
+[P697|Normal] 2、若投标人对“第四章合同条款及格式”要求存在偏离,请在下表详细列明,若无偏离,下表无需填写。
+[TABLE698] rows=3 cols=4
+    | 序号 | 合同条款及格式条目号第  条第  款 | 合同条款描述 | 偏离内容
+    |  |  |  | 
+    |  |  |  | 
+[P699|Normal] 请对“

BIN
doc/_tmp_docx_out/_debug_404_evidence.png


BIN
doc/_tmp_docx_out/_debug_layout.png


BIN
doc/_tmp_docx_out/_debug_layout2.png


BIN
doc/_tmp_docx_out/_debug_sysmenu.png


BIN
doc/_tmp_docx_out/flows/cb_func_s9_007.png


BIN
doc/_tmp_docx_out/flows/cb_overall.png


BIN
doc/_tmp_docx_out/flows/int_func_s9_001.png


BIN
doc/_tmp_docx_out/flows/int_func_s9_002.png


BIN
doc/_tmp_docx_out/flows/int_func_s9_003.png


برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است