Pengxy 6 小時之前
父節點
當前提交
3214725f50

+ 10 - 1
doc/README.md

@@ -57,7 +57,10 @@
 | [plan/系统集成/Ai-DOP第三方系统集成指南.md](./plan/系统集成/Ai-DOP第三方系统集成指南.md) | 给第三方系统看的对接指南:入站对象、DB 同步与 API 约定、回写与联调验收 |
 | [plan/系统集成/Ai-DOP第三方对接业务数据详表-业务页.md](./plan/系统集成/Ai-DOP第三方对接业务数据详表-业务页.md) | 对接详表(业务):九宫格/详情看板/诊断/ChatBI 需要哪些业务数据,不含库表名 |
 | [plan/系统集成/Ai-DOP第三方对接业务数据详表-技术页.md](./plan/系统集成/Ai-DOP第三方对接业务数据详表-技术页.md) | 对接详表(技术):源字段落到中台哪张表、哪个栏位 |
-| [plan/Ai-DOP本体驱动智能体建设方案.md](./plan/Ai-DOP本体驱动智能体建设方案.md) | **智能体建设方案(待评审)**:以「本体驱动数据治理」四要素(实体/属性/关联/动作)为语义中枢,在现有 ChatBI/S9 诊断改善/数据中台/审批流之上增量建设四类智能体(数据感知/关系推理/风险预警/执行调度),含本体四表 DDL、四规则巡检引擎、工具注册闸门、P0~P4 分阶段计划与治理红线 |
+| [plan/Ai-DOP本体驱动智能体建设方案.docx](./plan/Ai-DOP本体驱动智能体建设方案.docx) | **智能体建设方案(评审稿 Word,V1.7)**:第一章含 Palantir Foundry Ontology 本体背景、DOP 背景与四层架构(S0~S9 十大模块功能定位与技术亮点、S8/S9 核心能力)与四大建设目标(L0~L4 五级自动化等级统一口径:L2 为主、L3 白名单例外);含 S1~S9 九大模块级智能体画像(S4~S7 已按代码资产补写详细需求)与「画像—现有代码承载」对应表、需求覆盖矩阵 A(S1~S9 × 四类能力主/辅/—、业务 Owner/审批角色、责任边界三硬规则与跨域衔接实例)、6.3 需求就绪度判定(六维判定 + 矩阵 B,判定经主库代码三层取证修订:仅 S2 验收评测与 S7 KPI 为缺失,其余六维均部分以上)与 C0~C13 一页需求卡模板(含三个易错点、证据规范,S4 采购执行 AGT-S4-001 完整卡见配套文档);本体四表设计含属性口径/状态字典与自动化等级/幂等键/回滚方式字段;5.2 归因分析附节点—箭头链路图(症状定位→根因证据→处置建议);零旁路增量建设四类职能智能体 × 九模块智能体矩阵;P0~P4 分阶段计划(P0 含矩阵起步值基线校准,P4 含业务域补齐顺序)与治理红线;5.5 齐套四量问答试点,5.6~5.9 四个场景示例(生成脚本 `_gen_agent_plan_docx.py`) |
+| [plan/AI-DOP_S1-S9智能体需求覆盖矩阵与需求卡模板_v0.1.docx](./plan/AI-DOP_S1-S9智能体需求覆盖矩阵与需求卡模板_v0.1.docx) | **智能体方案配套文档(评审稿 v0.1)**:S1–S9 需求覆盖矩阵 A/B、L0~L4 自动化等级口径、责任边界三硬规则、C0~C13 一页需求卡模板与 S4 采购执行智能体完整需求卡示例(AGT-S4-001),作为《Ai-DOP 本体驱动智能体建设方案》第三章与 6.3 节的补充,是各域需求卡的填写标准与开发排期输入 |
+| [plan/Ai-DOP智能体建设任务计划.docx](./plan/Ai-DOP智能体建设任务计划.docx) | **智能体建设任务计划(V1.0)**:基于《Ai-DOP 本体驱动智能体建设方案》(7)(1) 的落地执行分解——阶段里程碑总表(P0~P4 共约 11 周 + 持续扩展)、按阶段 WBS 任务清单(T0.1~T4.3 共 24 项任务,含工作内容/交付物/前置依赖/工期/角色/验收口径)、九域需求卡补齐任务(对照 6.3 首要补齐项)、里程碑 M0~M4 与甘特时间线、关键路径与并行依赖、需求卡三硬闸门与证据规范、代码评审红线、风险任务化应对与跟踪汇报机制(生成脚本 `_gen_agent_task_plan_docx.py`) |
+| [plan/Ai-DOP本体驱动智能体建设方案_理解与解读.docx](./plan/Ai-DOP本体驱动智能体建设方案_理解与解读.docx) | **方案理解与解读(V1.0)**:对 (7)(1) 方案文档的阅后理解——一句话理解与三层定位(战略/方案/任务)、四核心主张、十章逻辑主线表、关键概念地图(本体四要素/四类职能智能体/L0~L4/证据链/工具闸门/改善闭环,含与代码的对应)、核心设计逐点解读(零旁路增量选型、登记制本体、「四大目标—三大能力」对应、5.5~5.9 场景数据来源表)、就绪度与分阶段计划理解(瓶颈在规格文档不在代码)、总体评价四亮点与评审前四项注意点(长期记忆载体、S2/S7 缺失、术语表 S0~S10 笔误)(生成脚本 `_gen_agent_plan_reading_docx.py`) |
 | [Windows后端WinSW守护重启方案.md](./Windows后端WinSW守护重启方案.md) | Windows 服务器上使用 WinSW 守护后端服务、自动重启与日志落盘 |
 | [plan/S1/S1-订单管理-审批流程实施方案.md](./plan/S1/S1-订单管理-审批流程实施方案.md) | S1 订单审批实施方案 |
 | [plan/S1-S3业务逻辑测试与数据准备方案.md](./plan/S1-S3业务逻辑测试与数据准备方案.md) | S1-S3 完整业务逻辑测试 case 与测试数据准备方案 |
@@ -97,6 +100,7 @@
 | [plan/S2排程算法正确性修复执行任务书.md](./plan/S2排程算法正确性修复执行任务书.md) | **可派发任务书**:上一任务书 A–F 落地(server `1.0.322`)后,真产能排期已生效并经公式复算验证(ZJ01 日产能 `⌈(10.5×60−80)/60×0.39⌉`=4 件/天 → 965 件占 242 个工作日 → 后一张工单顺延至 2027-07-13)。据此审出 **8 处算法缺陷**:产能按日扣减却只写一行致占用无法回放(冻结期保护失效)、单工单重排与自身抢产能、工序先后用开工首日而非完工日、冻结工序不推进游标、366 天视界静默截断、产线无日历静默、超交期无信号、日产能向上取整偏乐观。给出 H1–H6 六阶段细则(含产能占用表 `aidop_s2_line_capacity_occupy` 完整 DDL、冻结占用结转、验收 SQL)与「迁移脚本必须 LF 行尾」的启动阻断实证 |
 | [plan/S2日计划回写165一致性修复执行任务书.md](./plan/S2日计划回写165一致性修复执行任务书.md) | **可派发任务书**:上一任务书 H1–H6 落地后真人验收派生。排程算法本身无误,**漏在「作废旧计划」的回写段**——165 残留本库已作废的 `IsActive=1` 旧行,且后续重排永远修不回来(本库生效 41 行 vs 165 生效 44 行,僵尸行与 outbox 死信一一对应)。含三层取证:`S2_PSD_UPSERT` 101 条全成功而 `S2_PSD_DEACTIVATE` 失败 5 条(故漏的只是「作废」不是「写入」)、错误文案 `未配置 API` 与当前 `TryResolve` 路由代码相互矛盾(该源 `source_type=DB`,全仓仅一处调用 `PushAsync`,当前代码产生不出该文案)、失败行字段处于任何单一写入方都写不出的「不可能状态」(指向 `TryEnqueueOrRefreshAsync` 与 `MarkAsync` 并发整列覆盖;一旦落成 `status=2` 而 dispatcher 只扫 `status=0`,换了计划日即换 `idem_key`,死信永无人认领)。给出 I1–I5 五阶段(I1 只读取证优先、`MarkAsync` 乐观锁、按工单与 165 对账兜底补发、对账指标进 `detail_json` 并前端告警、存量清理)、V1–V7 验收与 A1–A6 可复制 SQL、改前基线快照、回滚表、「已核实事实速查表」;`mdp_outbox` 为 S1/领料/WMS 公用,含跨模块回归要求 |
 | [plan/S2优先级调整误写交期与计划作废修复执行任务书.md](./plan/S2优先级调整误写交期与计划作废修复执行任务书.md) | **可派发任务书**:P-028 §6.5 真人验收派生的两个 P0。① 「工单优先级调整」弹窗把只读的「订单日期」当交期提交,后端解析成 `DueDate` 落库 → **打开弹窗按一次保存就把交期无声改成订单日期**,并连带触发单工单重排与 `crm_seorderentry` 同步(实证:交期 2026-09-05 → 2026-08-10);② 纯改优先级走「只作废不重排」分支,本库置 `IsActive=0` 并向 165 入队作废,两库同时失去日计划、MES 当天取不到计划,恢复须全量重排(实证:生效行 3 → 0,全租户 41 → 38)。给出 A1/B1 方案取舍(预览补返 `DueDate` + 弹窗字段归位;纯改优先级改为不作废不重排、以 `pendingReorder` warning 提示)、J1–J4 改动清单(**不改** `DeactivateExistingScheduleAsync` 本体,无 DDL)、V1–V6 验收与 A1–A5 可复制 SQL、存量污染排查口径(`DueDate=OrdDate` + 日志 `detail_json.before.DueDate` 可还原)、「先恢复数据再改代码」的顺序约束 |
+| [plan/Ai-DOP生产排程方案-对照优化.md](./plan/Ai-DOP生产排程方案-对照优化.md) | 对照 Asprova APS 排程方法论(KnowHow 001/002/004/012/015/019/020 等)与 DEMOMySql `ProductionScheduleAppService.cs`(瓶颈推断/设备数/换型插队/报工折算/自动下达),输出 AIDOP 排程增量优化 4.1–4.8(换型代价最小插队、准备时间实记录抵扣、报工折算剩余量、工序重叠时间、节假日日历、班制加班、模具维修约束、自动下达与 KPI 闭环),列出 DEMO 6 项确定性缺陷(B1–B6)与 7 项工程性问题(E1–E7)作为负面清单,并做反向影响推演与 P0–P3 优先级。纯文档方案,待评审。
 | [plan/旧系统MongoDB替代-待办清单.md](./plan/旧系统MongoDB替代-待办清单.md) | Mongo 替代专题待办明细(**T-MONGO**;入口见项目待办清单) |
 | [plan/动态运营详情看板与指标改善闭环方案.md](./plan/动态运营详情看板与指标改善闭环方案.md) | 动态运营详情看板、智慧诊断与改善闭环总体方案 |
 | [plan/ChatBI改善方案.md](./plan/ChatBI改善方案.md) | **ChatBI(FUNC-S9-007)改善方案**:与看板/智慧诊断/改善计划分工、操作指引(`how_to`)、硬边界、P0–P2 分期与验收口径(2026-09-04) |
@@ -113,6 +117,7 @@
 | [plan/UAT多租户数据方案/README.md](./plan/UAT多租户数据方案/README.md) | **2026-08-11 分析原稿**(已由上方现行入口接续):当时含 C 套;三套盘库、D1–D13、P0 阻断。勿在此目录继续追加执行内容 |
 | [plan/UAT多租户数据方案/逐表清单.md](./plan/UAT多租户数据方案/逐表清单.md) | 2026-08-11 三套逐表原稿(含 C 套对照) |
 | [db/mdp/README.md](./db/mdp/README.md) | S4/S8 相关 mdp、dwd 等建表脚本说明与执行顺序 |
+| [db/Ai-DOP智能体本体登记表结构设计.xlsx](./db/Ai-DOP智能体本体登记表结构设计.xlsx) | **智能体方案配套表结构 Excel**:《Ai-DOP 本体驱动智能体建设方案》第三章 4 张新建配置表(实体/关联/动作链/工具注册)的字段明细、公共审计字段与建议索引;含「试点种子数据」Sheet(5.5 节工单物料齐套四量问答用例的实体/关联/工具种子与落地三条件)与「场景示例库」Sheet(5.6~5.9 四场景清单、6 个新增工具注册种子、8 个实体/关联登记种子)(生成脚本 `db/gen_agent_tables_excel.py`) |
 | [指标模型动态配置方案.md](./指标模型动态配置方案.md) | 指标模型动态配置总体方案 |
 | [meeting/20260408/vue-tsc-既存类型错误说明.md](./meeting/20260408/vue-tsc-既存类型错误说明.md) | 前端类型问题说明 |
 | [feishu/MCP集成说明.md](./feishu/MCP集成说明.md) | 飞书云盘/在线文档 MCP 配置,供 Cursor Agent 读写飞书文档 |
@@ -126,6 +131,10 @@
 
 ## 变更记录
 
+- **2026-10-23**:新增 [plan/Ai-DOP生产排程方案-对照优化.md](./plan/Ai-DOP生产排程方案-对照优化.md):对照 Asprova APS 排程方法论(「了解 Asprova」KnowHow 系列 001/002/004/012/015/019/020)与 DEMOMySql `ProductionScheduleAppService.cs`(DoProductSchedule/LineSchedule 瓶颈推断与设备数公式/换型插队/报工折算/自动下达)三层取证 AIDOP 排程现状,输出 4.1–4.8 八项增量优化建议与反向影响推演,列出 DEMO 6 项确定性缺陷与 7 项工程性问题作为实现负面清单,优化建议与现有 S2 执行任务书(正确性重构/算法正确性修复)衔接不重复。纯文档方案,待评审。
+- **2026-10-23**:新增 [plan/Ai-DOP补货计划方案.md](./plan/Ai-DOP补货计划方案.md):提炼 Asprova APS 培训手册(基础篇/APS 篇)与行业解决方案(3/6)中的「自动补充生产」补货逻辑,形成适合 AIDOP 的补货计划方案(库存 MIN/目标库存 MIN/安全库存三层水位 + 批量参数 + 期间收集 + 需求优先级四级模型 + 补货预测表,推式 MRP 与拉式补货双引擎单出口复用 srm_pr_main/ic_demandschedule)。纯文档方案,待评审。
+- **2026-10-23**:新增 [plan/Ai-DOP补货计划方案-对照优化.md](./plan/Ai-DOP补货计划方案-对照优化.md):对照 DEMOMySql `ReplenishmentAppService.cs`(SaveAnnualProductionOutline/CalcROP)解剖其正态分布 ROP 模型(SS=Φ⁻¹(服务水平)×σ、EOP、周转率上限、FMR/ABC 分类、回退链、滚动库存),输出 AIDOP 方案增量优化(动态 ROP 公式、σ 口径修正、ABC×FMR 服务水平闭环、月度滚动库存)并列出 DEMO 8 项确定性 bug 作为实现负面清单。纯文档方案,待评审。
+- **2026-10-23**:新增 [plan/Ai-DOP补货计划方案-优化整合版.md](./plan/Ai-DOP补货计划方案-优化整合版.md):将对照优化建议逐条并入原方案的终态整合版(参数表一次性纳入 rop_mode/service_level/history_months/stock_turnover/target_mode 等列、动态 ROP 公式与补货量 max(EOP, ROP−库存) 修正、ABC×FMR 服务水平闭环、月度滚动库存与实绩回写、多级回退链),可直接作为实施基线阅读。纯文档方案,待评审。
 - **2026-09-28**:新增 [plan/系统部署/](./plan/系统部署/README.md) 目录,含《Ai-DOP 系统初始化配置指南》与新租户初始化脚本 `init_new_tenant.py`;同日新增 [plan/推送凭据与租户基线修复执行任务书.md](./plan/推送凭据与租户基线修复执行任务书.md),记录编写指南期间取证发现的两个缺陷。
 - **2026-09-25**:新增 [plan/165-aidopdev连接耗尽根治执行任务书.md](./plan/165-aidopdev连接耗尽根治执行任务书.md),供其他模型按包 A–G 执行 1040 根治。同日修订:更正根因权重(多实例为次要因素,定时全量设计量级才是主因);包 B 扩写为执行机注册/人工指派/领取过滤;新增包 G 超管跨租户 ETL 管理。
 - **2026-09-06**:重写 [plan/第三方标准API推数入站方案.md](./plan/第三方标准API推数入站方案.md) 为五层终态(否定只贴源/另案回灌);UAT-INT-004 待确认立项。

+ 1027 - 0
doc/_gen_agent_plan_docx.py

@@ -0,0 +1,1027 @@
+"""生成《Ai-DOP 本体驱动智能体建设方案》Word 文档(评审稿)。
+
+参考图片理念(本体驱动数据治理:实体/属性/关联/动作四要素)与 Ai-DOP 现有代码资产,
+阐述在现有代码基础上以「零旁路增量」方式加入智能体,实现自动预警、自动分析、自动优化。
+"""
+
+from __future__ import annotations
+
+import os
+
+from docx import Document
+from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
+from docx.oxml.ns import qn
+from docx.shared import Cm, Pt
+
+BASE = os.path.dirname(os.path.abspath(__file__))
+OUT = os.path.join(BASE, "plan", "Ai-DOP本体驱动智能体建设方案.docx")
+
+doc = Document()
+sec = doc.sections[0]
+sec.page_width = Cm(21.0)
+sec.page_height = Cm(29.7)
+sec.top_margin = Cm(2.54)
+sec.bottom_margin = Cm(2.54)
+sec.left_margin = Cm(2.8)
+sec.right_margin = Cm(2.8)
+
+
+def set_run_font(run, name_cn="宋体", name_en="Times New Roman", size=12, bold=False, color=None):
+    run.font.name = name_en
+    run._element.rPr.rFonts.set(qn("w:eastAsia"), name_cn)
+    run.font.size = Pt(size)
+    run.bold = bold
+    if color is not None:
+        run.font.color.rgb = color
+
+
+def style_normal():
+    style = doc.styles["Normal"]
+    style.font.name = "Times New Roman"
+    style.font.size = Pt(12)
+    style._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")
+    pf = style.paragraph_format
+    pf.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE
+    pf.space_after = Pt(6)
+
+
+def add_title(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(12)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 18, True)
+
+
+def add_subtitle(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(12)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 14, True)
+
+
+def add_meta(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(4)
+    run = p.add_run(text)
+    set_run_font(run, "宋体", "Times New Roman", 10.5)
+
+
+def add_h1(text: str):
+    p = doc.add_paragraph()
+    p.paragraph_format.space_before = Pt(14)
+    p.paragraph_format.space_after = Pt(8)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 14, True)
+
+
+def add_h2(text: str):
+    p = doc.add_paragraph()
+    p.paragraph_format.space_before = Pt(10)
+    p.paragraph_format.space_after = Pt(6)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 12, True)
+
+
+def add_body(text: str, indent=True):
+    p = doc.add_paragraph()
+    p.paragraph_format.first_line_indent = Pt(24) if indent else Pt(0)
+    p.paragraph_format.space_after = Pt(6)
+    run = p.add_run(text)
+    set_run_font(run, "宋体", "Times New Roman", 12)
+
+
+def add_bullet(text: str, ordered=False, index=None):
+    p = doc.add_paragraph()
+    p.paragraph_format.left_indent = Cm(0.74)
+    p.paragraph_format.first_line_indent = Pt(0)
+    p.paragraph_format.space_after = Pt(3)
+    prefix = f"{index}." if ordered else "•"
+    run = p.add_run(f"{prefix} {text}")
+    set_run_font(run, "宋体", "Times New Roman", 12)
+
+
+def add_table(headers, rows, col_widths=None):
+    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
+    table.style = "Table Grid"
+    table.autofit = True
+
+    for i, h in enumerate(headers):
+        cell = table.rows[0].cells[i]
+        cell.text = ""
+        p = cell.paragraphs[0]
+        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+        run = p.add_run(h)
+        set_run_font(run, "宋体", "Times New Roman", 10.5, True)
+        tc = cell._tc
+        tcPr = tc.get_or_add_tcPr()
+        shd = tcPr.makeelement(qn("w:shd"), {
+            qn("w:val"): "clear",
+            qn("w:color"): "auto",
+            qn("w:fill"): "D9E2F3",
+        })
+        tcPr.append(shd)
+
+    for r_idx, row in enumerate(rows):
+        for c_idx, val in enumerate(row):
+            cell = table.rows[r_idx + 1].cells[c_idx]
+            cell.text = ""
+            p = cell.paragraphs[0]
+            run = p.add_run(str(val))
+            set_run_font(run, "宋体", "Times New Roman", 10.5)
+
+    if col_widths:
+        for row in table.rows:
+            for i, w in enumerate(col_widths):
+                row.cells[i].width = Cm(w)
+
+    doc.add_paragraph()
+
+
+def draw_attribution_graph(out_png: str):
+    """绘制归因分析链路示意(欠料预警场景),以节点+箭头网络形式呈现,辅助归因反馈表达。"""
+    import matplotlib
+    matplotlib.use("Agg")
+    import matplotlib.pyplot as plt
+    from matplotlib.patches import FancyArrowPatch, FancyBboxPatch
+
+    plt.rcParams["font.sans-serif"] = ["Microsoft YaHei"]
+    plt.rcParams["axes.unicode_minus"] = False
+
+    fig, ax = plt.subplots(figsize=(13.6, 5.6), dpi=160)
+    ax.set_xlim(0, 13.6)
+    ax.set_ylim(0, 5.6)
+    ax.axis("off")
+
+    def node(x, y, w, h, title, sub, fc, ec, tfs=11.5):
+        ax.add_patch(
+            FancyBboxPatch(
+                (x - w / 2, y - h / 2), w, h,
+                boxstyle="round,pad=0.02,rounding_size=0.16",
+                linewidth=1.6, edgecolor=ec, facecolor=fc, zorder=2,
+            )
+        )
+        ax.text(x, y + h * 0.14, title, ha="center", va="center",
+                fontsize=tfs, fontweight="bold", color="#1a1a1a", zorder=3)
+        if sub:
+            ax.text(x, y - h * 0.24, sub, ha="center", va="center",
+                    fontsize=8.5, color="#333333", zorder=3)
+
+    def arrow(x1, y1, x2, y2, label=None, lc="#8a8a8a", ls="-", lw=1.5, rad=0.0, label_dy=0.3):
+        ax.add_patch(
+            FancyArrowPatch(
+                (x1, y1), (x2, y2), arrowstyle="-|>", mutation_scale=15,
+                color=lc, linewidth=lw, linestyle=ls, zorder=4,
+                connectionstyle=f"arc3,rad={rad}",
+            )
+        )
+        if label:
+            ax.text((x1 + x2) / 2, (y1 + y2) / 2 + label_dy, label, ha="center",
+                    va="bottom", fontsize=8.5, color=lc if lc != "#8a8a8a" else "#555555")
+
+    # 上行:实体关联链
+    node(1.65, 4.0, 2.55, 1.1, "ORDER 订单", "crm_seorderentry", "#E8F0FE", "#4472C4")
+    node(4.55, 4.0, 2.55, 1.1, "WORK_ORDER 工单", "WorkOrdMaster", "#E8F0FE", "#4472C4")
+    node(7.45, 4.0, 2.55, 1.1, "MATERIAL 物料", "ic_itemmaster", "#E8F0FE", "#4472C4")
+    node(10.35, 4.0, 2.55, 1.1, "SUPPLIER 供应商", "srm_supplier", "#E8F0FE", "#4472C4")
+    arrow(2.925, 4.0, 3.275, 4.0, "按 order_no 关联", label_dy=0.72)
+    arrow(5.825, 4.0, 6.175, 4.0, "按 material_code 关联", label_dy=0.72)
+    arrow(8.725, 4.0, 9.075, 4.0, "按 supplier_code 关联", label_dy=0.72)
+
+    # 下行:症状—根因—处置
+    node(2.4, 1.7, 4.0, 1.6, "预警事实(时效性规则命中)", "欠料看板 48h 未更新\n证据:SupplierShortageKanban 记录 xxx", "#FFF4E0", "#ED7D31")
+    node(6.9, 1.7, 4.2, 1.6, "根因:MRP_JOB 任务失败", "采购申请生成任务最近一次运行失败\n证据:aidop_action_run_log.record_id=xxx", "#FBE4E4", "#C00000")
+    node(11.0, 1.7, 3.2, 1.6, "处置:重跑 MRP 建议", "TOOL_RERUN_MRP\nL2 审批后执行", "#E2F0D9", "#548235")
+
+    # 症状→物料(虚线),物料→根因(虚线),根因→处置(实线)
+    arrow(3.4, 2.5, 6.7, 3.45, "症状定位", lc="#ED7D31", ls=(0, (4, 3)), label_dy=0.15)
+    arrow(7.45, 3.45, 6.0, 2.5, "沿动作链定位根因", lc="#C00000", ls=(0, (4, 3)), label_dy=0.15)
+    arrow(9.0, 1.7, 9.4, 1.7, "生成建议", lc="#548235", label_dy=-0.55)
+
+    # 图例
+    legend = [
+        ("#E8F0FE", "#4472C4", "实体节点(沿关联链)"),
+        ("#FFF4E0", "#ED7D31", "预警事实(附触发规则)"),
+        ("#FBE4E4", "#C00000", "根因(附证据位置)"),
+        ("#E2F0D9", "#548235", "处置动作(L2 审批)"),
+    ]
+    for i, (fc, ec, txt) in enumerate(legend):
+        ly = 5.15 - i * 0.72
+        ax.add_patch(FancyBboxPatch((0.55, ly - 0.16), 0.5, 0.32,
+                                    boxstyle="round,pad=0.01,rounding_size=0.05",
+                                    linewidth=1.2, edgecolor=ec, facecolor=fc))
+        ax.text(1.2, ly, txt, ha="left", va="center", fontsize=8.5, color="#333333")
+
+    fig.savefig(out_png, bbox_inches="tight", facecolor="white")
+    plt.close(fig)
+
+
+style_normal()
+
+add_title("Ai-DOP 本体驱动智能体建设方案")
+add_subtitle("——在现有代码基础上实现自动预警、自动分析、自动优化")
+add_meta("文档版本:V1.7(评审稿)  编制日期:2026 年 10 月")
+add_meta("适用范围:Ai-DOP 主库(server/Plugins/Admin.NET.Plugin.AiDOP 与 Web 前端)")
+
+# ============ 一、背景与目标 ============
+add_h1("一、背景与目标")
+
+add_h2("1.1 本体背景:Palantir Ontology 数字孪生语义层")
+add_body(
+    "「本体驱动数据治理」理念源自 Palantir Foundry 平台的 Ontology(本体):它是平台的数字孪生与统一语义层,"
+    "把集成进 Foundry 的数字资产(数据集、虚拟表、模型)映射为对象、属性、链接,并叠加操作与函数,"
+    "构成可支撑各类业务场景的语义+动能模型;核心理念是「把你的业务变成代码」(Your Business as Code),"
+    "在数据、分析和运营系统之间建立实时连接。"
+)
+add_body(
+    "传统数据平台围绕「表—行—列」组织数据,Ontology 围绕真实世界的对象组织数据:"
+    "对象类型定义组织中的一个实体或事件(如物料、订单、供应商、设备),对象是它的单个实例,"
+    "对象集是多个对象的动态集合。两者的类比关系如下:"
+)
+add_table(
+    ["数据集", "Ontology"],
+    [
+        ["数据集 Dataset", "对象类型 Object Type"],
+        ["行 Row", "对象 Object"],
+        ["列 Column", "属性 Property"],
+        ["字段值 Field", "属性值 Property Value"],
+        ["表间关联 Join", "链接类型 Link Type"],
+    ],
+    col_widths=[7.75, 7.75],
+)
+add_body(
+    "Ontology 的本质是用「对象—属性—链接—操作—函数」把企业的数据、模型和流程统一成"
+    "可导航、可运营、可治理的数字孪生层,让业务用户、分析人员和 AI Agent 在同一套业务语言上工作。"
+    "本方案以 4 张配置表承载这一语义层:对象类型→实体登记、属性→现有业务表字段、链接→关联登记、"
+    "操作与函数→动作链登记与工具注册表(见第三章)。"
+)
+
+add_h2("1.2 DOP 背景与架构")
+add_body(
+    "数字化运营平台(Digital Operation Platform,简称 DOP)是一款深度融合 AI 算法、智能制造技术与集成供应链管理的企业级数字化解决方案,"
+    "通过四层架构设计与 S0~S9 十大核心功能模块,实现从订单评审、计划排程、物料供应、生产执行到仓储物流的订单交付全流程数字化运营管理,"
+    "帮助企业构建敏捷、透明、智能的数字化运营体系,提升供应链效率、降低运营成本,并支持数据驱动的持续改善决策。"
+    "DOP 通常与企业的 ERP 系统或视具体情况与其他 MES、WMS 系统配合使用,需要 ERP、MES、WMS 等各类系统数据接口。"
+)
+add_body("四层架构与各模块功能定位、技术亮点如下:")
+add_table(
+    ["层", "模块", "功能定位", "技术亮点"],
+    [
+        ["第一层\n业务流程与基础数据建模与标准化", "S0 建模与标准化", "数据建模与流程建模,打造数字孪生工厂", "为订单交付计划协同和执行层提供基础数据与业务流程"],
+        ["第二层\n订单交付计划协同和执行", "S1 产销协同", "基于 AI 需求预测模型,动态匹配市场需求与生产计划,优化订单评审和资源分配", "集成多源数据(历史销售、市场趋势、客户反馈),机器学习算法生成滚动式产销计划,支持供需动态平衡"],
+        ["", "S2 制造协同", "打通跨部门、跨工厂的制造资源调度,支持多产品、多工序柔性排产与生产任务分解", "根据订单优先级,结合数字孪生技术模拟产线负荷,智能算法优化设备利用率与 OEE"],
+        ["", "S3 供应协同", "协同供应商与物流网络,确保原材料准时交付与库存动态平衡", "供应商数据透明化,AI 驱动安全库存预警与补货策略优化"],
+        ["", "S4 采购执行", "自动化采购订单和交货计划生成、审批与跟踪,支持集中采购与分散采购混合模式", "供应商在线交期答复与发货单、二维码标签创建,自动物料批次号管理与追溯"],
+        ["", "S5 物料仓储与内物流", "管理原材料入库、存储与出库,支持远程调度与智能货架管理", "物联网(IoT)实时监控库存状态,二维码技术实现物料全生命周期追溯"],
+        ["", "S6 生产执行", "监控生产现场作业效率,采集生产报工数据并监控工艺质量", "工业 AI 视觉检测缺陷,边缘计算实现实时工艺参数调优"],
+        ["", "S7 成品仓储与外物流", "自动化成品分拣、包装与发货,支持多渠道订单合并与智能路径规划", "AGV 与无人仓协同,AI 算法优化拣货路线与装载率"],
+        ["第三层\n订单异常监控", "S8 异常监控", "实时感知订单交付协同和执行层各环节异常,快速响应并启动纠偏机制,保障流程连续性", "规则巡检引擎(时效性、一致性、完整性、阈值)与 AI 模型(时序分析、聚类)识别设备故障、交期延误、库存积压等风险"],
+        ["第四层\n运营绩效管理", "S9 绩效管理", "基于全流程数据挖掘,量化运营绩效差距,自主生成改善方案,驱动持续优化", "关联分析与决策树定位 KPI 未达标深层原因,强化学习模拟策略效果并推荐改进路径"],
+    ],
+    col_widths=[2.9, 2.1, 5.1, 5.3],
+)
+add_body(
+    "S8 异常监控核心能力四段:数据感知(规则巡检引擎与 AI 模型识别风险)、归因分析(知识图谱与因果推理定位异常源头,如供应商延迟、工艺偏差)、"
+    "智能决策(自动触发应急预案,如切换备用供应商、动态调整排产)、自主执行(在得到用户授权的前提下自动执行所需的业务流程)。"
+)
+add_body(
+    "S9 绩效管理核心能力四项:KPI 动态看板(可视化呈现 OTD、库存周转率、产能利用率等核心指标)、根因诊断(定位 KPI 未达标的深层原因,如采购周期过长、设备 OEE 偏低)、"
+    "自主优化(通过强化学习模拟不同策略效果,推荐最优改进路径,如调整安全库存阈值、优化排产逻辑)、闭环反馈(将改善措施自动同步至执行层,形成「分析—决策—执行」闭环)。"
+)
+add_body(
+    "本方案正是在 DOP 既有四层架构与 S0~S9 模块之上,以本体(Ontology)语义层为底座,"
+    "把 S8/S9 已探索的数据感知、归因分析、智能决策、自主执行等能力系统化、可配置化,"
+    "并扩展为覆盖 S1~S9 全模块的智能体建设路径(详见 1.5、1.6 节)。"
+)
+
+add_h2("1.3 理念参照:本体驱动数据治理")
+add_body(
+    "本方案参照「本体驱动数据治理」理念设计:以本体模型为统一语义中枢,"
+    "把分散在 ERP、MES、WMS 等异构系统中的数据转换为业务语义状态,"
+    "使上层应用具备可核对、可预警、可追溯的能力。本体模型由四要素构成:"
+)
+add_table(
+    ["本体四要素", "含义", "示例"],
+    [
+        ["实体 Entity", "业务世界中的对象", "订单、工单、物料、供应商、设备、批次"],
+        ["属性 Attribute", "对象的状态与特征", "工单状态、交期、成本、良品率、库存量"],
+        ["关联 Relation", "对象之间的关系", "订单→工单→工序;供应商→物料→工厂"],
+        ["动作 Action", "业务过程中发生的行为", "下单、排产、领料、发货、质检、审批"],
+    ],
+    col_widths=[3, 5, 7.5],
+)
+add_body(
+    "在「业务语义模型—数据映射与治理—业务实时数据」三层架构中,"
+    "语义模型层定义统一语言、统一对象、统一关系、统一事件与可执行规则,"
+    "数据映射层对接异构系统并负责口径统一与血缘追溯,"
+    "底层面向业务对象提供实时数据。智能体(Agent)正是运行在这一语义底座之上:"
+    "依据规则监测异常实现自动预警,沿关联与动作链推理实现自动分析,"
+    "在约束下生成改进建议实现自动优化。"
+)
+
+add_h2("1.4 现状盘点:Ai-DOP 已有资产")
+add_body("经对现有代码取证,Ai-DOP 已具备支撑智能体建设的基础资产:")
+add_table(
+    ["现有资产", "代码落点", "对智能体的复用价值"],
+    [
+        ["LLM 客户端", "ChatBI/DeepSeekChatClient.cs", "已接入 DeepSeek 纯 JSON 补全接口,可直接供 Planner 调用"],
+        ["ChatBI 智能问答", "ChatBI/ChatBIService.cs 及前端 aidop/chatbi", "自然语言问数入口,可增强为带证据链回答"],
+        ["业务动作日志", "aidop_action_run_log 表 + AidopActionRunLogWriter", "记录订单评审、排程、下达、采购闭环等动作,可作为动作链事实来源"],
+        ["周期巡检 Job(22 个)", "Job/ 目录(S8WatchSchedulerJob、S8TimeoutAutoEscalationJob、MdpOutboxDeadLetterAlertJob 等)", "现成挂接范式:新增巡检 Job 即可接入调度"],
+        ["S9 智慧诊断闭环", "SmartOps/ 目录(SmartDiagnosisEvidenceRegistry、SmartOpsImprovementActionService、SmartOpsImprovementApproverGuard、SmartOpsImprovementEffectiveness)", "诊断证据→改善行动→审批人守卫→有效性验证完整闭环,可直接复用"],
+        ["S8 异常协同", "ado_s8_exception 及 S8 审批流", "异常登记、分级、升级与处置通道"],
+        ["审批流", "IFlowBizHandler 业务回调", "所有落库动作的必经关口,智能体写操作经此人工确认"],
+        ["租户隔离", "AidopTenantScope.ResolveOrThrow", "智能体所有读写强制注入 tenant_id"],
+        ["数据中台", "mdp_stg/mdp_std/dwd 四库链路", "统一口径的业务数据,作为本体属性与关联的事实来源"],
+    ],
+    col_widths=[3.2, 5.6, 6.7],
+)
+
+add_h2("1.5 建设目标")
+add_body(
+    "参照 Ontology 本体论分两步推进:先把 S0 建设为 DOP 的数字孪生与统一语义层"
+    "(对象—属性—链接—操作—函数统一登记,让业务用户、分析人员与 AI Agent 在同一套业务语言上工作),"
+    "再把 S1~S9 建设为能够进行「感知—归因—决策—执行」的模块级智能体。"
+    "在现有代码基础上以增量方式建设智能体能力,实现四大业务目标:"
+)
+for i, t in enumerate(
+    [
+        "数据感知:基于四规则巡检引擎(时效性、一致性、完整性、阈值)与 AI 模型(时序分析、聚类)周期扫描业务数据,识别设备故障、交期延误、库存积压等风险,异常即触发分级预警,推送至 S8 异常协同与责任人。",
+        "归因分析:基于本体四要素登记与动作链,由 LLM 编排 Planner 沿实体—关联—动作链定位根因(如供应商延迟、工艺偏差),输出必须附带证据(表名、字段、记录号),无证据不下结论。",
+        "智能决策:分析结论转化为改善建议与应急预案(如切换备用供应商、动态调整排产),经审批流人工确认后落库执行,执行结果经有效性验证回写规则库,形成闭环持续改进。",
+        "自主执行:在得到用户授权(审批通过)的前提下,由执行调度智能体自动获取所需的业务数据并执行已批准的业务流程(默认 L2,白名单动作可升 L3,见下),与治理红线「审批流不可绕过」保持一致。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+add_body(
+    "四大目标与三大能力一一对应:数据感知→自动预警,归因分析→自动分析,智能决策+自主执行→自动优化。"
+)
+add_body(
+    "最终实现「可核对」(所有结论均有证据可查)、「可预警」(异常提前暴露)、「可追溯」(任意结论可反查至原始数据)。"
+)
+add_body(
+    "「自主执行」与治理红线「所有落库必须审批」以 L0~L4 五级自动化等级统一口径:"
+    "本方案默认 L2(起草并提交审批,通过后调用既有服务落库);"
+    "L3(预设额度/白名单内自动执行、事后审计与抽检)仅限高频、低风险、可逆动作(如催交通知)白名单例外;"
+    "L4 全自动闭环本期不开放,需至少一个季度 L3 运行数据后评审。"
+)
+add_table(
+    ["等级", "名称", "智能体权限", "适用判断"],
+    [
+        ["L0", "只读问答", "只查询、只解释,不产生任何写操作", "数据敏感或结论影响面大的场景"],
+        ["L1", "建议", "输出建议与草案,人执行", "规则尚不稳定、需积累样本"],
+        ["L2", "审批后执行", "起草并提交审批,通过后调用既有服务落库", "本方案默认等级"],
+        ["L3", "授权范围自动执行", "在预设额度/白名单内自动执行,事后审计与抽检", "高频、低风险、可逆(如催交通知)"],
+        ["L4", "全自动闭环", "无人工介入,自动感知—决策—执行—验证", "本期不开放,需至少一个季度 L3 运行数据后评审"],
+    ],
+    col_widths=[1.2, 3, 6.2, 5.1],
+)
+
+add_h2("1.6 模块级智能体画像:S1~S9 智能体与具体需求")
+add_body(
+    "在四类职能智能体(数据感知/关系推理/风险预警/执行调度,见第四章)之上,"
+    "按业务模块规划九个模块级智能体,各自承担「感知—归因—决策—执行」闭环:"
+)
+add_table(
+    ["模块", "智能体", "职责要点"],
+    [
+        ["S1 产销协同", "S1 产销协同智能体", "需求分层预测(日常/旺季大促/新老品替换/退市期),输出风险提示与应对建议"],
+        ["S2 制造协同", "S2 制造协同智能体", "汇聚 BOM/工艺/产能/报工/质量数据,动态优化生产排程"],
+        ["S3 供应协同", "S3 供应协同智能体", "齐套分析与替代料策略、供应商履约监控、自动选供建议"],
+        ["S4 采购执行", "S4 采购执行智能体", "PO 自动起草与审批、交期答复跟踪与逾期催交、供应商履约复盘与配额调整建议"],
+        ["S5 物料仓储", "S5 物料仓储智能体", "IQC 收货与库存对账、盘点差异处置、批次库位追溯、安全库存与补货建议"],
+        ["S6 生产执行", "S6 生产执行智能体", "报工实绩与 MES 同步监控、工序检验判定、产能偏差归因与建议出勤人数"],
+        ["S7 成品仓储", "S7 成品仓储智能体", "FQC 检验放行监控、成品入库与发货跟踪、签收 POD 与退货闭环"],
+        ["S8 异常管理", "S8 异常管理智能体", "订单全流程节点「体征」监控,异常分层解释与调整方案"],
+        ["S9 绩效管理", "S9 绩效管理智能体", "运营绩效全景监控与绩效改善方案建议"],
+    ],
+    col_widths=[2.6, 4.2, 8.7],
+)
+add_body("重点模块智能体的具体需求:")
+add_body(
+    "S1 产销协同智能体:汇聚历史销量、产品属性、销售政策等内因与天气、促销、社媒舆情、宏观趋势等外因,"
+    "采用时间序列与因果因子模型并融合 LLM 建议,为日常、旺季与大促、新老品替换和退市期提供分层预测,"
+    "同步输出风险提示与应对建议;并从组织、产品、时间三个维度拆解需求预测与库存计划,"
+    "将安全库存、正态分布、泊松分布与服务水准方法与实时可视化监控结合,滚动调整补货策略,"
+    "避免「一刀切」模式下的高库存或断供风险。"
+)
+add_body(
+    "S2 制造协同智能体:汇聚 BOM、产品制造工艺、设备产能以及生产报工、生产质量实时数据,"
+    "采用机器学习与遗传算法模型并融合 LLM 建议,动态优化生产排程,同步输出风险提示与应对建议。"
+)
+add_body(
+    "S3 供应协同智能体:一方面自动识别 BOM 等基础数据异常,进行物料齐套分析与替代料策略优化,确保产线不断料;"
+    "另一方面通过供应商配额与物料交付履约监控,实时跟踪供货比例、交期与 IQC 品质表现,异常自动预警并给出调整建议;"
+    "将供方库、历史物料匹配供应商数据整合分析,自动推荐货源清单候选供应商,并可根据人工匹配数据进行规则学习、"
+    "自动更新匹配规则;配合 S4 采购执行智能体实现 PO 下达、送货通知、回货检讨等自动化衔接。"
+)
+add_body(
+    "S8 异常管理智能体:对订单从下达到发运的每个关键节点建立「体征」,当物料齐套、生产产能、生产质量、"
+    "仓储物流任一环节出现异常时,先给出「发生了什么—为什么—将会怎样—应该怎么做」的分层解释,"
+    "再自动生成调整方案(计划重排、替换物料、调整配额、加急发运),并通过与第三方系统的联动,"
+    "把建议转化为可执行指令,使订单交付全过程可视与管控。"
+)
+add_body(
+    "S9 绩效管理智能体:持续计算并监控企业运营绩效波动,结合订单交付周期、生产效率、质量、异常事件构建绩效全景,"
+    "输出绩效改善方案建议,帮助企业更早完成预案部署。"
+)
+add_body(
+    "S4 采购执行智能体:基于采购申请与配额、框架价规则自动起草 PO 并进入审批流,跟踪供应商交期答复,"
+    "对逾期未答复按 T-3 规则自动催交;按供应商聚合交期、品质与配额达成表现生成履约复盘,"
+    "输出配额调整建议(经审批后更新货源);跟踪 IQC 退货与采购退回闭环。"
+)
+add_body(
+    "S5 物料仓储智能体:监控 IQC 收货过账与上架执行,日终对账识别库存差异并输出差异处置建议;"
+    "按批次与库位追溯物料全生命周期;结合历史消耗与提前期给出安全库存、再订货点与补货建议(详见 5.9);"
+    "监控领料拣配执行与欠料看板数据新鲜度。"
+)
+add_body(
+    "S6 生产执行智能体:监控报工实绩与 MES 数据同步,按工序检验规则判定质量异常;"
+    "对比理论产能与实际产能定位瓶颈(设备/换型/人员/来料),输出稼动率提升建议与建议出勤人数(详见 5.7);"
+    "监测工装模具、设备台账与工艺参数健康状态。"
+)
+add_body(
+    "S7 成品仓储智能体:监控 FQC 检验与放行进度,跟踪成品入库、发货单执行与承运履约;"
+    "跟踪签收 POD 回传与退货处理闭环;异常体征上报 S8 统一分级处置。"
+)
+add_body("九个智能体画像与现有代码资产的对应关系(代码层取证,均为复用对象):")
+add_table(
+    ["智能体", "现有代码承载(Admin.NET.Plugin.AiDOP)"],
+    [
+        ["S1 产销协同", "Order/ 24 个服务(SeOrderService、OrderDeliveryService、OrderResourceCheckService、ContractReviewService、CapacityDateCalculator、MaterialRequirementCalculator、LinkagePlanService);Job:S1MdpSyncTransformJob;KPI:S1KpiDailySnapshotStore"],
+        ["S2 制造协同", "Manufacturing/ 18 个服务(ProductionScheduleGenerationService、WorkOrderSchedulingService、ExecutableDailyPlanService、ScheduleExceptionService、ProductionSchedulingActionService);Job:S2AutoScheduleJob"],
+        ["S3 供应协同", "Supply/ 22 个服务(DeliveryScheduleService、DemandScheduleService、PurchaseRequestService、NumberRuleService、OutsourceOrderService、ProcurementPipelineService);Job:S3MdpSyncTransformJob、S3PoCompletionMdpSyncJob"],
+        ["S4 采购执行", "ProcurementExecution/(PurchaseOrderService、PurchaseOrderTransferService、PurchaseRequestMergeService、PurchaseRequestFromShortageService、SupplierDeliveryManagementService、SupplierShortageKanbanService、IqcReturnQueryService)与 MaterialShortageBizHandler;Job:S4MdpSyncTransformJob"],
+        ["S5 物料仓储", "MaterialWarehouse/ 40+ 服务(InventoryPosting 收货/库存/编号/幂等、IQC 检验、盘点、MissedPrint 漏打);Job:S5InventoryDailyRecon/Inbound/Reconcile/MdpRefreshJob;领料:WorkOrder/PickBillCreator"],
+        ["S6 生产执行", "Service/S6/ 24 个服务(IpqcInspectionService、S6ProductionInstructionService、S6ProcessInspectionService/Judge/SpecResolver、ReportWorkMdpSyncService、ToolingLedgerService、MoldToolReferenceChecker)"],
+        ["S7 成品仓储外物流", "Service/S7/ 13 个服务(FqcApplyService、FqcInspectionService、FqcSpecRuleService、FqcSpecMaterialMapService、ProductionInboundService、SalesDeliveryNoticeService、FqcInspBillFlowBizHandler)"],
+        ["S8 异常管理", "Service/S8/ 50 个服务(S8WatchSchedulerService、S8DecisionService、S8Notification* 通知层、S8RoleResolver、ExceptionClosure/EscalationBizHandler、Rules 规则引擎);Job:S8WatchScheduler/TimeoutAutoEscalation/ActiveFlowStuckScanJob"],
+        ["S9 绩效管理", "SmartOps/ 39 个服务(KpiTarget* 组件、KpiCalcDispatcher、KpiResultStatusResolver、SmartDiagnosisEvidence*、SmartOpsImprovementActionService/ApproverGuard/Effectiveness);Job:SmartOpsImprovementActionReminder/KpiAtomicWarmup/KpiMdpBootstrapJob"],
+    ],
+    col_widths=[2.6, 12.9],
+)
+add_body(
+    "九个业务域与四类职能能力的覆盖关系(需求覆盖矩阵 A)如下:横向四类能力是平台层,纵向九个业务域是场景层;"
+    "「主」=该域是此能力的主要产生方与消费方,须自建规则与首批工具并承担验收责任;"
+    "「辅」=只登记所需对象与接口、不重复建规则;「—」=本期不涉及、在需求卡 C2 明确写出「不包含」。"
+    "S3 为全链路最完整的域,作为能力基线;S6 问数为「—」——车间异常以推送为主,对话问数统一走 S8 入口。"
+    "对象数、规则数、工具数均为建议起步值,须在 P0 按代码基线与业务基线校准。"
+)
+add_table(
+    ["业务域", "感知", "推理", "预警", "调度", "问数", "首批对象类型", "规则/工具", "业务 Owner", "审批角色"],
+    [
+        ["S1 产销协同", "主", "辅", "辅", "主", "主", "客户订单、SKU、预测版本、库存计划、产能单元", "6–8 / 4–6", "销售运营+计划部", "计划经理;销售总监(大单/促销)"],
+        ["S2 制造协同", "主", "主", "辅", "主", "辅", "工单、工序、工作中心、产线、模具、班次、日历、技能矩阵", "8–10 / 5–7", "制造部+计划部", "生产经理;计划经理"],
+        ["S3 供应协同", "主", "主", "主", "主", "主", "物料、供应商、货源、配额、PO、交货计划、替代料、IQC", "8–10 / 4–6", "采购部+物控", "采购经理;质量经理(替代料)"],
+        ["S4 采购执行", "主", "辅", "主", "主", "辅", "请购、PO、PO 行、交期答复、ASN、收货、框架价", "6–8 / 6–8", "采购部", "采购经理/总监/分管副总(金额分级)"],
+        ["S5 物料仓储", "主", "辅", "主", "辅", "主", "库存、库位、批次、容器、出入库单、盘点、呆滞", "7–9 / 4–5", "仓储+物控", "仓储经理"],
+        ["S6 生产执行", "主", "主", "主", "辅", "—", "工单工序任务、报工、检验、不良、设备、停机、工艺参数", "8–10 / 4–6", "车间+质量", "车间主任;质量经理(工艺参数)"],
+        ["S7 成品仓储外物流", "主", "辅", "主", "主", "—", "成品库存、发货单、装箱、承运商、路线、签收、退货", "6–8 / 4–6", "物流部", "物流经理"],
+        ["S8 异常管理", "辅", "主", "主", "主", "辅", "异常事件、体征、处置单、升级记录、责任矩阵", "分类字典+分级矩阵 / 3–4", "运营管理部", "值班经理;责任部门负责人"],
+        ["S9 绩效管理", "主", "主", "辅", "辅", "主", "KPI 定义、指标值、绩效树、改善行动、收益核算", "5–7 / 3–4", "运营+财务", "运营总监;财务(收益口径)"],
+    ],
+    col_widths=[1.7, 0.8, 0.8, 0.8, 0.8, 0.8, 3.6, 2.2, 1.7, 2.2],
+)
+add_body(
+    "责任边界三条硬规则:R1 域内建模——对象类型、属性口径、域内规则由业务域 Owner 负责登记与版本化,平台层不替业务定义口径;"
+    "R2 跨域只读——跨域分析只读对方已登记对象,不直接读对方业务表,保证证据链可追溯、口径统一;"
+    "R3 写动作归域——任何写动作由拥有该业务服务的域执行,智能体只起草,避免越权与重复建设。"
+)
+add_body(
+    "跨域衔接实例(S4 采购执行需求卡约定):① 与 S3——齐套与缺料结论直接作为催交(R06)输入,禁止两域各算一套欠料;"
+    "② 与 S8——只上报体征(逾期、未答复、价格偏离),分级、升级与处置由 S8 统一;"
+    "③ 与 S9——只接受白名单参数回写(如安全提前期),价格与配额不得由 S9 自动修改。"
+)
+
+# ============ 二、总体思路 ============
+add_h1("二、总体思路:零旁路增量")
+
+add_h2("2.1 建设原则")
+add_body(
+    "智能体建设遵循「零旁路增量」原则:智能体只做感知、推理与建议,业务操作一律复用现有服务。具体原则:"
+)
+for i, t in enumerate(
+    [
+        "不引入 OWL/RDF 本体推理机,不在 Java/Spring 侧另建本体服务;本体四要素由 4 张自建配置表承载,全部带 tenant_id。",
+        "四类智能体(数据感知、关系推理、风险预警、执行调度)实现为插件 Job 目录下的独立巡检 Job 与一个 LLM 编排 Planner,复用现有调度、认证、租户隔离与审批流。",
+        "写类动作一律经现有审批流(IFlowBizHandler)人工确认后落库,智能体只「起草」与「建议」。",
+        "缺省关闭态即保持原有行为:未登记工具不可调用,未启用规则不巡检,可评审、可回退。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+
+add_h2("2.2 本体理念与 Ai-DOP 落地形态映射")
+add_table(
+    ["本体理念", "Ai-DOP 落地形态"],
+    [
+        ["本体模型(实体/属性/关联/动作)", "4 张配置表:实体登记表、关联登记表、动作链登记表、工具注册表"],
+        ["数据映射与治理(口径统一、血缘追溯)", "数据中台 mdp/dwd 链路 + 实体/关联登记约束"],
+        ["基于语义的业务实时数据", "现有业务表 + 巡检 Job 周期性扫描"],
+        ["企业智能问数(可回答性含证据)", "ChatBI 增强:答案附带证据链"],
+        ["AI 辅助本体构建(业务描述→初始构建→迭代优化)", "LLM 抽取半自动生成登记表草稿,人工确认后生效"],
+        ["智能求解器(SOP/MPS/APS 输入→六大能力输出)", "优化建议经审批流执行,落入排产、采购、交货等现有业务服务"],
+    ],
+    col_widths=[8, 7.5],
+)
+
+add_h2("2.3 治理红线(不可逾越)")
+for i, t in enumerate(
+    [
+        "租户隔离:所有读写强制注入 tenant_id 上下文;任何绕过租户字段的查询或写入均被禁止。",
+        "审批流:智能体仅可「起草」或「建议」,所有落库操作必须经由现有审批流人工确认,不可绕过。",
+        "指标口径:智能体引用的指标定义、计算逻辑与数据源,必须严格对齐已注册的蓝图文档与操作手册,不可自行推断或幻觉。",
+        "工具注册闸门:所有可被智能体调用的 API 或服务,必须完成显式注册并附带业务语义描述,未注册工具不可调用。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+
+# ============ 三、本体语义底座 ============
+add_h1("三、本体语义底座:四要素落表设计")
+add_body(
+    "本体四要素以 4 张自建配置表承载,均含 tenant_id,与现有业务库同库部署,"
+    "由前端提供登记维护页面。初始缺省关闭,不改变任何现有业务行为。"
+)
+add_table(
+    ["表名", "承载要素", "关键字段(要点)", "作用"],
+    [
+        ["aidop_agent_entity", "实体登记", "entity_code、entity_name、source_table、key_field、status_dict、attr_spec_json、enabled", "登记业务对象与数据落点,供巡检与推理定位事实来源;状态字典与属性口径(单位/时间语义/口径版本)一并登记"],
+        ["aidop_agent_relation", "关联登记", "from_entity、to_entity、relation_type、join_condition、enabled", "登记实体间关系(如 工单→工序 按工单号关联),推理沿此链路展开"],
+        ["aidop_agent_action_chain", "动作链登记", "chain_code、trigger_entity、action_type、handler_service、approval_required、automation_level、idem_key、rollback_desc", "登记可执行动作(如 重跑 MRP、作废日计划)与自动化等级/幂等键/回滚方式,执行调度智能体据此起草建议"],
+        ["aidop_agent_tool_registry", "工具注册表", "tool_code、tool_name、semantic_desc、invoke_target、tenant_id", "工具注册闸门:仅注册工具可被 Planner 调用,附业务语义描述"],
+    ],
+    col_widths=[3.6, 2.2, 5.4, 4.3],
+)
+add_body(
+    "四表与本体理念中「本体模型」四分支一一对应:实体表对应 Entity,"
+    "属性由实体表关联的现有业务表字段天然承载(不重复建模),属性口径元数据(单位、时间语义、口径版本)与状态字典由实体表 status_dict、attr_spec_json 字段登记,"
+    "关联表对应 Relation,"
+    "动作链表与工具注册表对应 Action(操作与函数:写类操作落动作链,只读函数落工具注册表,不另建函数登记表)。"
+    "规则与约束(数据质量规则)落在巡检引擎的规则配置中,暂以代码/JSON 配置承载,"
+    "P1 实施规则配置页时再评估独立规则配置表设计,见第五章。"
+)
+
+# ============ 四、四类智能体设计 ============
+add_h1("四、四类智能体设计")
+add_table(
+    ["智能体", "职责", "触发方式", "输出落点", "复用现有资产"],
+    [
+        ["数据感知智能体", "扫描数据新鲜度、一致性、完整性,产出异常事实", "周期巡检 Job(错峰调度)", "异常事实写入动作日志与预警候选队列", "22 个 Job 挂接范式、aidop_action_run_log"],
+        ["关系推理智能体", "沿实体—关联—动作链定位根因,产出证据链", "预警事实产生后 / ChatBI 提问时", "根因候选 + 证据(表名/字段/记录号)", "SmartDiagnosisEvidenceRegistry 范式"],
+        ["风险预警智能体", "四规则巡检引擎判定异常,分级预警(轻微/一般/严重)", "周期巡检 Job", "S8 异常协同登记 + 消息通知责任人", "ado_s8_exception、S8 审批流"],
+        ["执行调度智能体", "将分析结论起草为改善建议,经审批后执行并验证", "预警/分析结论产生后", "改善行动 + 有效性验证回写", "SmartOpsImprovementActionService、ImprovementApproverGuard、ImprovementEffectiveness"],
+    ],
+    col_widths=[2.8, 4.6, 2.6, 3.2, 2.3],
+)
+add_body(
+    "四类职能智能体分工对齐本体理念中「诊断(故障/交付)→ 行业知识沉淀 → 智能问数」三栏逻辑:"
+    "感知与预警对应异常发现,关系推理对应本体因果链路诊断,执行调度对应推荐措施落地。"
+    "LLM 编排 Planner 作为统一调度中枢,按「感知→推理→预警→调度」串接四类智能体。"
+)
+add_body(
+    "四类职能智能体与 1.6 节九个模块级智能体构成「横向能力 × 纵向场景」矩阵:"
+    "每个模块级智能体由四类职能能力组合实现(如 S3 供应协同智能体 = 数据感知的履约巡检 + 关系推理的交期偏差归因 + "
+    "风险预警的分级提醒 + 执行调度的选供建议),四类职能智能体提供可复用的原子能力,"
+    "模块级智能体负责业务场景的闭环编排;5.5~5.9 场景示例即模块级智能体的首批落地。"
+)
+
+# ============ 五、三大能力落地路径 ============
+add_h1("五、自动预警、自动分析、自动优化落地路径")
+
+add_h2("5.1 自动预警:四规则巡检引擎")
+add_body("预警能力以规则巡检引擎实现,四类规则按租户、按对象配置,缺省关闭:")
+add_table(
+    ["规则类型", "监测内容", "示例"],
+    [
+        ["时效性规则", "关键数据的新鲜度", "欠料看板数据超 48 小时未更新则预警"],
+        ["一致性规则", "跨模块数据口径一致", "交货计划数量与采购订单数量不一致则预警"],
+        ["完整性规则", "关键链路数据完备", "齐套检查结果缺失工单行则预警"],
+        ["阈值规则", "业务指标越界", "排产异常数、审批超时数超阈值则预警"],
+    ],
+    col_widths=[3, 6.5, 6],
+)
+add_body(
+    "巡检以新增 Job 方式挂入现有调度(与 S8WatchSchedulerJob 同范式),"
+    "扫描结果与登记表比对,命中规则即产生预警候选,经分级后写入 S8 异常协同并通知责任人。"
+    "预警结论必须携带触发规则与异常事实位置,保证「可核对、可追溯」。"
+)
+
+add_h2("5.2 自动分析:LLM 编排 Planner 与证据链")
+add_body("分析能力由 Planner 编排完成,流程为:")
+for i, t in enumerate(
+    [
+        "输入:预警事实(含实体、属性值、异常记录号)+ 实体/关联/动作链登记 + 相关业务数据片段。",
+        "推理:沿关联链定位候选根因(如 工单延迟 → 车间生产阶段资源冲突 → 运输环节卡点)。",
+        "校验:每个候选根因必须落到具体证据(表名、字段、记录号),证据不足的候选予以剔除。",
+        "输出:根因报告(结论 + 证据链 + 置信度),供人工确认或供 ChatBI 带证据回答。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+add_body(
+    "Planner 调用现有 DeepSeekChatClient(纯 JSON 补全)完成语义整理与候选排序,"
+    "但推理骨架由登记表与证据校验代码决定,LLM 不产生无证据结论,从机制上抑制幻觉。"
+)
+
+# 归因分析链路图(节点+箭头网络形式,辅助归因反馈表达)
+IMG_ATTR = os.path.join(BASE, "plan", "_img", "attribution_chain.png")
+os.makedirs(os.path.dirname(IMG_ATTR), exist_ok=True)
+draw_attribution_graph(IMG_ATTR)
+p_img = doc.add_paragraph()
+p_img.alignment = WD_ALIGN_PARAGRAPH.CENTER
+p_img.add_run().add_picture(IMG_ATTR, width=Cm(14.5))
+p_cap = doc.add_paragraph()
+p_cap.alignment = WD_ALIGN_PARAGRAPH.CENTER
+run_cap = p_cap.add_run(
+    "图 5.2 归因分析链路示意(欠料预警场景):症状先定位到物料节点,再沿动作链锁定失败任务为根因,处置建议经 L2 审批执行;"
+    "每个节点与箭头均标注关联依据或证据位置"
+)
+set_run_font(run_cap, "宋体", "Times New Roman", 10.5)
+
+add_h2("5.3 自动优化:建议—审批—执行—验证闭环")
+add_body("优化能力复用 S9 已验证的闭环范式,形成完整回路:")
+for i, t in enumerate(
+    [
+        "建议生成:执行调度智能体依据分析结论与工具注册表,起草改善建议(如 重跑 MRP 任务、调整排产优先级、补充采购申请)。",
+        "人工审批:建议进入现有审批流(IFlowBizHandler),审批人守卫校验(ImprovementApproverGuard 范式),未审批不落库。",
+        "执行:审批通过后调用现有业务服务执行(复用排程、采购、交货等既有服务,不另起炉灶)。",
+        "验证:执行结果经有效性验证(ImprovementEffectiveness 范式),验证通过回写规则库与登记表,形成持续进化。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+
+add_h2("5.4 端到端示例:缺料预警—根因分析—优化执行")
+add_body("以供应商欠料场景为例,展示三大能力联动:")
+for i, t in enumerate(
+    [
+        "自动预警:数据感知智能体巡检发现欠料看板数据 48 小时未更新(时效性规则命中),风险预警智能体登记 S8 异常并通知供应链责任人。",
+        "自动分析:关系推理智能体沿「供应商→物料→工单」关联链与 MRP 任务动作链定位根因——MRP 采购申请生成任务最近一次运行失败(附任务运行日志记录号)。",
+        "自动优化:执行调度智能体起草「重跑 MRP 采购申请生成」建议,经审批通过后执行;执行后感知智能体复检库存数据已恢复,有效性验证通过,闭环结束。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+add_body("该示例全程不新建业务逻辑,预警、分析、执行均复用现有 Job、业务服务与审批流。")
+
+add_h2("5.5 试点用例:工单物料齐套四量智能问答")
+add_body(
+    "作为 P2 首批试点,选取业务高频场景:业务人员手动执行工单物料资源检查(齐套检查)后,"
+    "对某工单、某物料的欠料详情发问——「工单 XXX 的物料 A 欠多少?在库、在检、在途、占用各多少?欠料原因是什么?」"
+    "智能体按工单号与物料号分析,返回四类数量与欠料原因。"
+)
+add_body("该场景所需数据在现有代码中均已存在:")
+add_table(
+    ["数据项", "现有代码来源"],
+    [
+        ["在库", "WorkOrdTemp.locStock(来自 165 InvMaster 经数据中台 DOPDEMORQ_SQLSERVER 拉入 _tmp_inv_master)"],
+        ["在检", "WorkOrdTemp.zjsl(PurOrdDetail + MissedPrint + qms_qcp_inspecapplyn 质检申请)"],
+        ["在途", "WorkOrdTemp.ztsl(PurOrdDetail 发货量 − 收货量)"],
+        ["齐套/承诺", "WorkOrdTemp.jqsl / hfjq / PurOrdQty"],
+        ["欠料数量", "dwd_requirement_examine_detail(need_count / use_qty / lack_qty 中台权威列)"],
+        ["占用", "ic_item_stockoccupy / srm_po_occupy(须由聚合工具单独取数,两表列名不同:orderentry_id / entry_id)"],
+    ],
+    col_widths=[3.2, 12.3],
+)
+add_body("问答执行流程(全链路只读,不涉及动作链登记):")
+for i, t in enumerate(
+    [
+        "实体识别:从问句抽取工单号与物料号,命中实体登记表(WORK_ORDER / MATERIAL)。",
+        "链路定位:沿关联登记表四条链路(工单→物料需求、物料→在检、物料→在途、物料→占用)确定取数路径;在库为物料属性,取中台 InvMaster。",
+        "工具取数:调用工具注册表中「齐套四量查询」工具,由后端聚合服务返回四量与欠料。",
+        "证据回答:按「在库 X、在检 Y、在途 Z、占用 W,欠料 Q,原因……」格式回答,附证据表名与记录号。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+add_body("落地三条件(均在现有代码基础上实现):")
+for i, t in enumerate(
+    [
+        "注册聚合查询工具:四量分属齐套宽表、165 库存、采购、质检、占用表,须由后端服务先聚合再注册为工具,LLM 不直连数据库。",
+        "占用单独取数:宽表不单独成列(已参与齐套扣减),聚合服务须单独汇总 ic_item_stockoccupy / srm_po_occupy。",
+        "欠料口径对齐:欠料数量直接引用 lack_qty 权威列,智能体不得自行用「需求−四量」重算。",
+    ],
+    1,
+):
+    add_bullet(t, ordered=True, index=i)
+add_body(
+    "该用例全部基于现有代码资产:齐套检查(WorkOrderMaterialReadinessService)、欠料宽表(WorkOrdDetailTotalKB)、"
+    "供应商欠料看板(SupplierShortageKanbanService)与 ChatBI 链路,不新建业务逻辑,仅新增登记种子与一个只读聚合查询工具。"
+)
+
+add_h2("5.6 场景示例:S1 客户交期提前的影响分析与建议")
+add_body(
+    "业务人员将某订单交期提前后,智能体自动沿关联链分析影响面并输出建议——"
+    "交期提前 N 天:受影响工单 X 张(其中 Y 张当前产能不满足新交期,需重排);"
+    "物料 A/B 需求提前、缺料风险升高;采购单 PO-C 需催交;发货计划 SH-D 建议改期。"
+)
+add_table(
+    ["数据项", "现有代码来源"],
+    [
+        ["新交期推演", "crm_seorderentry.sys_capacity_date(动态产能推演:真实产线产能 + 工作日历 + 后处理提前期)"],
+        ["工单同步", "WorkOrdMaster(交期确认后工单同步,交期变化触发资源重检)"],
+        ["计划重排", "三级计划重排 /api/Order/seorder/{id}/refresh-plan"],
+        ["物料与采购", "ic_demandschedule、srm_pr_main、srm_po_main、交货计划 DueDate"],
+    ],
+    col_widths=[3.2, 12.3],
+)
+add_body(
+    "执行路径:感知(交期变更事件)→ 关系推理(沿 订单→工单→物料需求→采购→交货→发货 关联链逐节点计算影响)"
+    "→ 输出建议(重排/催交/改期清单,写类建议经审批流执行)。需登记实体 ORDER 与关联 ORDER-WO,工具 TOOL_DUE_DATE_IMPACT。"
+)
+
+add_h2("5.7 场景示例:S2 理论产能与实际产能分析与建议人数")
+add_body(
+    "智能体定期对比理论产能与实际产能,自动输出改进建议;并根据当天生产内容自动输出建议人数,"
+    "例如「今日计划工序量 X,建议出勤 Y 人(分两班)」,支撑排产与人员调度。"
+)
+add_table(
+    ["数据项", "现有代码来源"],
+    [
+        ["理论产能", "ProdLineDetail.Rate(产线标准速率)+ 产线日历/工作日历"],
+        ["实际产能", "可执行日计划完工实绩(ExecutableDailyPlanService + MES 实绩回读)"],
+        ["效率指标", "OEE KPI(时间稼动率 × 性能稼动率 × 良品率,S6 已注册)"],
+        ["人员技能", "S0 产线技能主数据(AdoS0LineSkillMasterQueryDto)"],
+    ],
+    col_widths=[3.2, 12.3],
+)
+add_body(
+    "执行路径:感知(产能偏差巡检:理论−实际超阈值)→ 分析(偏差归因:设备/换型/人员/来料)→ 建议:"
+    "输出瓶颈工序清单与稼动率提升建议;建议人数 = Σ(当日计划工序量 × 标准工时) ÷ 人均有效工时,按班次拆分。"
+    "需登记实体 PROD_LINE、LINE_SKILL,工具 TOOL_CAPACITY_GAP、TOOL_HEADCOUNT_SUGGEST。"
+)
+
+add_h2("5.8 场景示例:S3 物料交期分析与自动选供")
+add_body(
+    "智能体按物料对比理论交期与实际交期,分析供应商履约表现并输出改进建议;"
+    "新需求产生时按「交期匹配度 + 历史履约率 + 配额」排序推荐供应商,经审批后更新货源。"
+)
+add_table(
+    ["数据项", "现有代码来源"],
+    [
+        ["理论交期", "采购订单 / 交货计划 DueDate(DeliveryScheduleService)"],
+        ["实际交期", "收货实绩(ReceiptQty / RctQty + 实际到货时间)"],
+        ["供应商档案", "货源表 quota_rate(配额)、lead_time(提前期)、quota_priority"],
+        ["配额分配", "DeliveryScheduleService 按 quota_rate 拆分需求并校验配额之和"],
+    ],
+    col_widths=[3.2, 12.3],
+)
+add_body(
+    "执行路径:感知(履约偏差巡检:实际交期 − 理论交期)→ 分析(按供应商/物料聚合履约率与延期原因)→ 建议:"
+    "供应商改进建议(如「V1 近 30 天平均延期 X 天,主要因 A 物料,建议配额下调」);"
+    "自动选供建议(「物料 M 新需求按交期匹配度 + 履约率 + 配额排序,推荐 V2,经审批后更新货源」)。"
+    "需登记实体 SUPPLIER、关联 MAT-SUPPLIER,工具 TOOL_SUPPLIER_PERF、TOOL_SUPPLIER_SELECT。"
+)
+
+add_h2("5.9 场景示例:库存变动与安全库存/补货建议(库存优化模型)")
+add_body(
+    "库存变动(对账差异或持续消耗)触发智能体按历史消耗拟合库存优化模型,"
+    "自动输出安全库存与补货建议:更新 SafetyStk、给出再订货点与建议补货量(在手 + 在途扣减后)。"
+)
+add_table(
+    ["数据项", "现有代码来源"],
+    [
+        ["安全库存字段", "AdoS0ItemMaster.SafetyStk(decimal(18,5))已存在,库存类型字典含「安全库存」"],
+        ["库存变动", "S5InventoryDailyReconJob / S5InventoryReconcileJob 对账结果"],
+        ["消耗历史", "发料记录(领料单),用于分布参数估计"],
+        ["提前期", "供应商 lead_time(货源表)"],
+    ],
+    col_widths=[3.2, 12.3],
+)
+add_body(
+    "模型选择:需求连续波动取正向分布(正态分布),安全库存 SS = z × σd × √L(σd 需求标准差、L 提前期、z 服务水平系数);"
+    "离散小批量需求取泊松分布,按目标服务水平查泊松分位数定再订货点 ROP。"
+    "执行路径:感知(库存对账变动 / 连续消耗触发)→ 分析(近 N 期消耗拟合分布参数)→ 建议(安全库存 / 再订货点 / 补货量),"
+    "写类建议(更新 SafetyStk)经审批流执行。需登记实体 INVENTORY,工具 TOOL_SAFETY_STOCK。"
+)
+
+# ============ 六、与现有代码的对接点 ============
+add_h1("六、与现有代码的对接点")
+
+add_h2("6.1 新增内容清单")
+add_table(
+    ["类别", "新增内容", "落点说明"],
+    [
+        ["配置表", "4 张本体登记表(含 DDL 与种子数据)", "现有业务库,SqlSugar CodeFirst 挂入插件 Entity"],
+        ["巡检 Job", "数据感知 Job、四规则巡检 Job(预警 Job)", "Job/ 目录,与现有 22 个 Job 同范式注册调度"],
+        ["Planner 服务", "LLM 编排 Planner + 证据校验服务", "新增 Planner/ 目录,复用 DeepSeekChatClient"],
+        ["智能体服务", "工具注册闸门服务、建议起草服务", "复用 AidopActionRunLogWriter、S9 改善闭环组件"],
+        ["前端页面", "本体登记维护页 + 智能体运行看板", "复用现有管理端框架,登记 FUNC 功能码后注入菜单"],
+        ["配置开关", "租户级启用开关与规则配置", "缺省关闭,逐租户灰度开启;规则暂以代码/JSON 承载,不建独立规则表"],
+    ],
+    col_widths=[2.6, 6.2, 6.7],
+)
+
+add_h2("6.2 复用与不改动边界")
+add_body("以下现有资产直接复用、不重构:")
+for t in [
+    "DeepSeekChatClient 及 ChatBI 现有链路;",
+    "aidop_action_run_log 动作日志表与写入器;",
+    "S9 诊断证据、改善行动、审批人守卫、有效性验证四个组件;",
+    "S8 异常协同登记与审批流;",
+    "数据中台 mdp/dwd 链路与租户隔离解析(AidopTenantScope)。",
+]:
+    add_bullet(t)
+add_body(
+    "智能体不直连第三方系统,不绕过审批流,不改动现有业务服务的内部逻辑;"
+    "所有新增能力缺省关闭,未启用租户的行为与当前版本完全一致。"
+)
+
+add_h2("6.3 需求就绪度判定与需求卡标准")
+add_body(
+    "对照 1.6 节与第五章按「可开发、可验收」标准对 S1~S9 九个域逐维判定(下表为当前状态,非目标状态),"
+    "判定依据为对 Ai-DOP 主库代码的三层取证(详见下表后取证说明):"
+    "8 个域六维「部分」以上,仅 S2 验收评测与 S7 KPI 为「缺失」——「缺失」指需求卡文档未写或评测资产空缺,不代表代码能力不存在。"
+    "按「缺 C1/C5/C11 即不可开发」标准,各域须按一页需求卡补齐文档与评测后方可进入开发排期。"
+)
+add_table(
+    ["业务域", "业务目标/KPI", "对象与本体", "触发与事件", "规则与算法", "动作与权限", "验收与评测"],
+    [
+        ["S1 产销协同", "部分", "部分", "部分", "部分", "部分", "部分"],
+        ["S2 制造协同", "部分", "部分", "部分", "部分", "部分", "缺失"],
+        ["S3 供应协同", "部分", "部分", "部分", "部分", "部分", "部分"],
+        ["S4 采购执行", "部分", "部分", "部分", "部分", "部分", "部分"],
+        ["S5 物料仓储", "部分", "部分", "部分", "部分", "部分", "部分"],
+        ["S6 生产执行", "部分", "部分", "部分", "部分", "部分", "部分"],
+        ["S7 成品仓储外物流", "缺失", "部分", "部分", "部分", "部分", "部分"],
+        ["S8 异常管理", "部分", "部分", "部分", "部分", "部分", "部分"],
+        ["S9 绩效管理", "部分", "部分", "部分", "部分", "部分", "部分"],
+    ],
+    col_widths=[2.2, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1],
+)
+add_body("判定取证方式(代码层/配置层/数据层三层取证,禁止以文档转述代替代码证据):")
+add_body(
+    "「对象与本体、动作与权限」取证于插件各域服务与审批流 BizHandler:S1 Order/ 24 个服务、S2 Manufacturing/ 18、S3 Supply/ 22、"
+    "S4 ProcurementExecution/ 与 Supply 采购服务、S5 MaterialWarehouse/ 40+、S6 Service/S6/ 24、S7 Service/S7/ 13、S8 Service/S8/ 50、S9 SmartOps/ 39 个文件;"
+    "审批流落点:OrderReview/ContractReview/OrderChangeReviewBizHandler(S1)、MaterialShortageBizHandler(S4)、"
+    "IpqcInspectionFlow/S6ProcessInspectionFlowBizHandler(S6)、FqcInspBillFlowBizHandler(S7)、ExceptionClosure/EscalationBizHandler(S8)。"
+)
+add_body(
+    "「触发与事件」取证于 Job/ 目录 22 个定时任务:S1MdpSyncTransformJob、S2AutoScheduleJob、S3MdpSyncTransformJob/S3PoCompletionMdpSyncJob、"
+    "S4MdpSyncTransformJob、S5InventoryDailyRecon/Inbound/Reconcile/MdpRefresh、S8WatchScheduler/TimeoutAutoEscalation/ActiveFlowStuckScanJob、"
+    "SmartOpsImprovementActionReminder/KpiAtomicWarmupJob 等(S6/S7 为 MDP 同步服务式触发)。"
+)
+add_body(
+    "「规则与算法」取证于 S8 Rules 规则引擎(6 类规则定义 + DataAccess/Health/Providers 分层,S8DecisionService 决策)、"
+    "S6ProcessInspectionJudge/S6ProcessSpecResolver、FqcSpecRuleService、CapacityDateCalculator 与 MaterialRequirementCalculator(S1)、"
+    "排程与产能约束算法(S2)、MRP 采购申请生成规则(S4)、IQC 过账幂等(S5)、SmartOpsKpiAggregateRuleRegistry/KpiTargetRules(S9)。"
+)
+add_body(
+    "「业务目标/KPI」取证于 SmartOps KpiTarget* 组件(KpiTargetService/Resolver/Rules、S1KpiDailySnapshotStore、KpiResultStatusResolver)与 S8KpiSnapshotService/S8KpiTargetConfigService;"
+    "S7 尚无成品物流 KPI 注册证据,判缺失。"
+)
+add_body(
+    "「验收与评测」取证于 Admin.NET.Plugin.AiDOP.Tests 与 Admin.NET.Test(S3 2 个、S4 供应商安全 2 个、S5 40+、S6 12、S7 2、S8 50+、SmartOps 18 个测试文件)"
+    "及 Web tests/e2e(s0/s8 场景);S2 排程域无测试资产,判缺失。"
+)
+add_body("各域现状判定与首要补齐项:")
+add_table(
+    ["业务域", "现状判定", "首要补齐项"],
+    [
+        ["S1 产销协同", "代码资产齐全,规格文档不足", "预测粒度与准确率目标、库存计划对象、给 S2 的输入契约与冻结期"],
+        ["S2 制造协同", "代码资产齐全,约束文档缺失", "约束清单(设备/模具/技能/换型)、冻结期、求解时限与结果可解释"],
+        ["S3 供应协同", "相对最完整", "替代料规则、与 S4 的 PO/ASN 边界、IQC 口径"],
+        ["S4 采购执行", "代码资产齐全,需求卡未写", "按 AGT-S4-001 补写全量需求卡(对象/规则/动作均已取证,补目标与评测文档化)"],
+        ["S5 物料仓储", "代码资产齐全(IQC/入库/对账),需求卡未写", "作业对象(收货/上架/拣料/盘点)、批次与库位、盘点差异处理需求卡化"],
+        ["S6 生产执行", "代码资产齐全(工序检验/报工),需求卡未写", "报工与质量对象、停机原因树、工艺参数可调边界需求卡化"],
+        ["S7 成品仓储外物流", "代码资产齐全(FQC/入库/发运),需求卡未写", "发运对象、承运与路线、签收 POD、退货需求卡化;KPI 缺失待补"],
+        ["S8 异常管理", "规则引擎与测试已就绪,字典与基线待定", "体征字典与阈值基线、分级标准、S1~S7 责任人矩阵"],
+        ["S9 绩效管理", "KPI 平台与闭环已就绪,KPI 字典基线待定", "KPI 字典(公式/口径/数据源)、绩效树、回写白名单"],
+    ],
+    col_widths=[2.8, 3.6, 9.1],
+)
+add_body(
+    "每个域智能体按「一页需求卡」C0~C13 十四项标准写清,最多 3 页:"
+    "C1(业务目标与 KPI)、C5(规则与算法)、C11(验收与评测)任一缺失,评审直接判定「不具备开发条件」。"
+)
+add_table(
+    ["编号", "字段", "必须写清的内容"],
+    [
+        ["C0", "元信息", "需求编号、版本、业务域 Owner、关联域、试点范围、代码基线、自动化等级"],
+        ["C1", "业务目标与 KPI", "3~6 个 KPI:定义与公式、数据源、当前基线、目标值、责任人(无基线值的 KPI 不得进入验收)"],
+        ["C2", "范围与对象", "包含/不包含;对象类型清单(编码、唯一键、关键属性、状态机);关键口径定义"],
+        ["C3", "触发方式", "事件、定时、对话三类;事件名、时点、输入、期望响应(事件可订阅、可幂等去重)"],
+        ["C4", "输入数据与口径", "数据项、来源表/服务、派生口径、新鲜度、缺失处理、权限范围"],
+        ["C5", "规则与算法", "规则编号、判定逻辑、阈值参数、命中动作、证据位置;LLM 能做/不能做什么(LLM 不参与最终数值决策)"],
+        ["C6", "输出物", "输出清单、载体、必含内容、证据要求(结论 100% 附证据位置)"],
+        ["C7", "动作与自动化等级", "动作编号、L0~L4 等级、前置条件、审批、幂等键、回滚方式"],
+        ["C8", "人工介入与审批", "审批矩阵(金额/风险分级)、强制人工项、驳回原因回写(审批人落到岗位)"],
+        ["C9", "异常与降级", "LLM 不可用、数据缺失、重复触发、规则冲突、越权访问的兜底与用户可见状态"],
+        ["C10", "时效与 SLA", "端到端时效、批量上限、巡检窗口、对话首响(全部为数字并写明错峰约束)"],
+        ["C11", "验收与评测", "功能用例数、专家标注样例、质量指标与阈值、回归要求"],
+        ["C12", "上下游接口", "与 S3/S5/S6/S7/S8/S9 及外部系统的方向、内容、契约"],
+        ["C13", "本体登记清单", "对象、属性映射、链接、事件、动作、函数、工具、状态机、证据规范(可直接落四张登记表)"],
+    ],
+    col_widths=[1.5, 3, 11],
+)
+add_body(
+    "写需求卡时的三个易错点:"
+)
+add_table(
+    ["易错点", "错误写法", "正确写法"],
+    [
+        ["把方案话术当需求", "「采用机器学习与遗传算法动态优化排程」", "「以最小化换型次数为第一目标、交期满足为硬约束,求解上限 90 秒,输出前 3 个方案及目标值分解」"],
+        ["只写正向路径", "「自动生成 PO 并跟踪」", "「无货源/无价格/超配额/供应商冻结四类分支各自挂起并转什么任务」"],
+        ["验收写形容词", "「预警及时、结论可核对」", "「逾期预警提前≥3 天覆盖≥80%;证据完整率 100%;误报率≤10%(100 条标注样本)」"],
+    ],
+    col_widths=[3, 5.9, 6.6],
+)
+add_body(
+    "需求卡须同步维护「证据规范」:每条结论 = 对象编码 + 记录号 + 字段 + 值 + 快照时间 + 口径版本,"
+    "缺快照时间或口径版本的证据在跨日复核时视为无效。"
+    "S4 采购执行智能体需求卡(AGT-S4-001)为完整参照示例:首批三个场景(PR 转 PO 自动起草含配额与框架价校验、"
+    "交期答复与 T-3 逾期催交、供应商履约复盘与配额调整建议),首批规则 6 条、动作 6 个(全部 L2,催交通知可升 L3),"
+    "试点范围 1 工厂 × 1 品类 × 30 家供应商运行一个完整采购月;验收底线为草稿字段准确率 ≥98%、规则命中准确率 ≥90%、"
+    "误报率 ≤10%、逾期预警提前 ≥3 天覆盖 ≥80%、证据完整率 100%。"
+    "登记口径:动作(有副作用)、函数(确定性无副作用,如未交量/配额校验/交期匹配)、工具三者分开登记、编码不混用,"
+    "未注册工具一律不可调用。完整需求卡见配套文档《AI-DOP_S1-S9智能体需求覆盖矩阵与需求卡模板》。"
+)
+
+# ============ 七、分阶段实施计划 ============
+add_h1("七、分阶段实施计划")
+add_table(
+    ["阶段", "建设内容", "交付物", "验收口径"],
+    [
+        ["P0 底座(约 2 周)", "4 张本体登记表 + 工具注册闸门 + 前端登记页", "表 DDL、登记维护页面", "登记、启停、租户隔离生效;未启用租户行为不变;矩阵 A 对象/规则/工具起步值完成代码与业务基线校准"],
+        ["P1 自动预警(约 3 周)", "四规则巡检引擎 + 数据感知/风险预警 Job + S8 对接", "巡检 Job、规则配置页、预警通知", "规则命中即登记 S8 异常并通知;预警结论可核对"],
+        ["P2 自动分析(约 3 周)", "关系推理智能体 + Planner + 证据链 + ChatBI 增强 + 齐套四量问答试点", "Planner 服务、证据链报告、ChatBI 带证据回答、试点用例", "根因候选均带证据;无证据不下结论;试点问答返回四量与欠料并附证据"],
+        ["P3 自动优化(约 3 周)", "执行调度智能体 + 建议审批 + 有效性验证闭环", "建议起草服务、闭环流程", "建议经审批方可执行;验证结果回写规则库"],
+        ["P4 扩展(持续)", "更多业务场景规则沉淀、登记表扩展", "场景规则包、登记数据", "每场景均有可复盘证据与收益统计"],
+    ],
+    col_widths=[2.8, 5, 3, 4.7],
+)
+add_body("P0~P3 合计约 11 周;各阶段均可独立交付与回退,不阻塞现有业务发版。")
+add_body(
+    "P4 业务域补齐顺序按「数据就绪度 × 规则确定性」排序(与模块重要性无关):"
+    "S4 采购执行 → S5 物料仓储 → S3 完善 → S7 成品仓储外物流 → S6 生产执行 → S1/S2 完善 → S8/S9 字典与 KPI 基线;"
+    "S6 依赖车间实时数据,宜在 S4/S5 跑通 L2 闭环后再启动。"
+    "各域以「一页需求卡」C0~C13 达标为排期输入,6.3 节矩阵 B 的「缺失/部分」逐项销项。"
+)
+
+# ============ 八、风险与应对 ============
+add_h1("八、风险与应对")
+add_table(
+    ["风险", "应对措施"],
+    [
+        ["LLM 幻觉导致错误结论", "推理骨架由登记表与证据校验代码决定;结论必须带证据;关键建议必经人工审批"],
+        ["误报导致预警疲劳", "规则阈值可配置、预警分级、置信度过滤;错峰巡检控制频率"],
+        ["越权访问或跨租户泄漏", "所有读写强制 tenant_id;工具注册闸门限定可调用面;复用 ResolveOrThrow 解析"],
+        ["巡检影响在线业务", "巡检只读扫描、错峰调度、限流;重活复用现有调度能力"],
+        ["登记表滞后于业务变化", "LLM 半自动抽取生成登记草稿(AI 辅助本体构建),人工确认生效;版本化留痕"],
+    ],
+    col_widths=[5, 10.5],
+)
+
+# ============ 九、预期效果 ============
+add_h1("九、预期效果与价值量化")
+add_body(
+    "智能体能力建设的价值量化目标如下(目标值为示例,P0 阶段以一个月历史数据锁定基线后方可校准):"
+)
+add_table(
+    ["维度", "改善前(现状)", "目标值"],
+    [
+        ["预警时效", "人工巡检,小时级发现", "规则巡检分钟级发现,关键风险提前 72 小时暴露"],
+        ["分析时效", "专家手工排查,天级定位", "证据链推理,小时级输出根因报告"],
+        ["人工干预率", "依赖人工巡查与判断", "常规异常自动闭环,人工干预率下降 40%"],
+        ["问题响应时间", "以小时计", "缩短 60% 以上"],
+        ["可核对可追溯", "结论依赖经验", "100% 结论附带证据链,可反查至原始数据"],
+        ["交付准时率", "现有水平", "提升 15%(经排产/采购类优化建议闭环)"],
+    ],
+    col_widths=[3.4, 5.6, 6.5],
+)
+add_body(
+    "表中数值为目标示例,P0 阶段以一个月历史数据锁定基线后方可进入验收,无基线的 KPI 不写入验收表。"
+)
+
+# ============ 十、附录 ============
+add_h1("十、附录:术语对照表")
+add_table(
+    ["术语", "释义", "在本方案中的角色"],
+    [
+        ["OTD", "Order-To-Delivery,订单交付端到端全流程", "智能体运行的业务主线,覆盖 S0~S10 模块"],
+        ["ANDON / SIM", "安灯与即时管理,标杆企业异常监控数字化工具", "S8 异常协同的成熟实践,自动预警的落地载体"],
+        ["本体(Ontology)", "业务世界的统一语义模型", "智能体运行的语义底座,以 4 张配置表承载"],
+        ["实体/属性/关联/动作", "本体四要素", "分别对应实体登记表、业务表字段、关联登记表、动作链表与工具注册表"],
+        ["巡检 Job", "周期性执行的后台任务", "数据感知与风险预警智能体的运行形态"],
+        ["Planner", "LLM 编排中枢", "串接四类智能体,负责候选根因排序与报告生成"],
+        ["工具注册闸门", "可调用 API 的显式注册机制", "未注册工具不可被智能体调用,防止越权"],
+        ["证据链", "结论所依赖的表名、字段、记录号", "「可核对、可追溯」的强制载体"],
+        ["改善闭环", "建议—审批—执行—验证回路", "自动优化的落地通道,复用 S9 范式"],
+    ],
+    col_widths=[3.2, 5.4, 6.9],
+)
+
+add_body(
+    "本方案以「零旁路增量」为总纲:本体作为统一语义底座沉淀于登记表,"
+    "智能体作为巡检 Job 与 Planner 挂入现有调度与审批体系,"
+    "自动预警、自动分析、自动优化三项能力逐级叠加、缺省关闭、可评审、可回退,"
+    "在现有代码基础上把 Ai-DOP 从「看数据、用数据」推向「自动感知、自动推理、自动闭环」。"
+)
+
+os.makedirs(os.path.dirname(OUT), exist_ok=True)
+doc.save(OUT)
+print(OUT)

+ 301 - 0
doc/_gen_agent_plan_reading_docx.py

@@ -0,0 +1,301 @@
+"""生成《Ai-DOP 本体驱动智能体建设方案:理解与解读》Word 文档(V1.0)。
+
+基于用户提供的《Ai-DOP 本体驱动智能体建设方案》(7)(1) 撰写:逐章解读方案逻辑主线、
+关键概念地图、核心设计逐点分析、就绪度判定与分阶段计划的理解、总体评价与注意点,
+供评审团队快速建立对方案的一致认知。
+"""
+
+from __future__ import annotations
+
+import os
+
+from docx import Document
+from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
+from docx.oxml.ns import qn
+from docx.shared import Cm, Pt
+
+BASE = os.path.dirname(os.path.abspath(__file__))
+OUT = os.path.join(BASE, "plan", "Ai-DOP本体驱动智能体建设方案_理解与解读.docx")
+
+doc = Document()
+sec = doc.sections[0]
+sec.page_width = Cm(21.0)
+sec.page_height = Cm(29.7)
+sec.top_margin = Cm(2.54)
+sec.bottom_margin = Cm(2.54)
+sec.left_margin = Cm(2.4)
+sec.right_margin = Cm(2.4)
+
+
+def set_run_font(run, name_cn="宋体", name_en="Times New Roman", size=12, bold=False, color=None):
+    run.font.name = name_en
+    run._element.rPr.rFonts.set(qn("w:eastAsia"), name_cn)
+    run.font.size = Pt(size)
+    run.bold = bold
+    if color is not None:
+        run.font.color.rgb = color
+
+
+def style_normal():
+    style = doc.styles["Normal"]
+    style.font.name = "Times New Roman"
+    style.font.size = Pt(12)
+    style._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")
+    pf = style.paragraph_format
+    pf.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE
+    pf.space_after = Pt(6)
+
+
+def add_title(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(12)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 18, True)
+
+
+def add_subtitle(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(12)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 14, True)
+
+
+def add_meta(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(4)
+    run = p.add_run(text)
+    set_run_font(run, "宋体", "Times New Roman", 10.5)
+
+
+def add_h1(text: str):
+    p = doc.add_paragraph()
+    p.paragraph_format.space_before = Pt(14)
+    p.paragraph_format.space_after = Pt(8)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 14, True)
+
+
+def add_h2(text: str):
+    p = doc.add_paragraph()
+    p.paragraph_format.space_before = Pt(10)
+    p.paragraph_format.space_after = Pt(6)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 12, True)
+
+
+def add_body(text: str, indent=True):
+    p = doc.add_paragraph()
+    p.paragraph_format.first_line_indent = Pt(24) if indent else Pt(0)
+    p.paragraph_format.space_after = Pt(6)
+    run = p.add_run(text)
+    set_run_font(run, "宋体", "Times New Roman", 12)
+
+
+def add_bullet(text: str, ordered=False, index=None):
+    p = doc.add_paragraph()
+    p.paragraph_format.left_indent = Cm(0.74)
+    p.paragraph_format.first_line_indent = Pt(0)
+    p.paragraph_format.space_after = Pt(3)
+    prefix = f"{index}." if ordered else "•"
+    run = p.add_run(f"{prefix} {text}")
+    set_run_font(run, "宋体", "Times New Roman", 12)
+
+
+def add_table(headers, rows, col_widths=None):
+    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
+    table.style = "Table Grid"
+    table.autofit = True
+
+    for i, h in enumerate(headers):
+        cell = table.rows[0].cells[i]
+        cell.text = ""
+        p = cell.paragraphs[0]
+        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+        run = p.add_run(h)
+        set_run_font(run, "宋体", "Times New Roman", 10.5, True)
+        tc = cell._tc
+        tcPr = tc.get_or_add_tcPr()
+        shd = tcPr.makeelement(qn("w:shd"), {qn("w:val"): "clear", qn("w:fill"): "D9E2F3"})
+        tcPr.append(shd)
+
+    for ri, row in enumerate(rows):
+        for ci, val in enumerate(row):
+            cell = table.rows[ri + 1].cells[ci]
+            cell.text = ""
+            p = cell.paragraphs[0]
+            run = p.add_run(str(val))
+            set_run_font(run, "宋体", "Times New Roman", 10.5)
+
+    if col_widths is not None:
+        table.autofit = False
+        for ci, w in enumerate(col_widths):
+            for row in table.rows:
+                row.cells[ci].width = Cm(w)
+    return table
+
+
+style_normal()
+
+# ============ 封面信息 ============
+add_title("《Ai-DOP 本体驱动智能体建设方案》理解与解读")
+add_subtitle("——对方案 (7)(1) 版文档的阅后理解、逻辑主线与注意点")
+add_meta("文档版本:V1.0  编制日期:2026 年 10 月")
+add_meta("解读对象:《Ai-DOP 本体驱动智能体建设方案》(7)(1)(十章,26 表 2 图)")
+add_meta("配套文档:《Ai-DOP 智能体建设任务计划》V1.0(本方案第七章的执行分解)")
+
+# ============ 一、文档定位 ============
+add_h1("一、文档定位与核心主张")
+add_h2("1.1 一句话理解")
+add_body(
+    "这份方案回答一个问题:如何在不新建旁路系统、不重构现有业务的前提下,让 Ai-DOP 从「人看数据、人做判断」"
+    "进化到「系统自动感知、自动推理、自动给出可执行建议」——做法是给现有系统补一层「本体语义底座」(四张配置表),"
+    "再在其上挂四类职能智能体(巡检 Job + LLM 编排 Planner),一切写操作仍走现有审批流。"
+)
+add_h2("1.2 三层定位")
+add_table(
+    ["层次", "文档/载体", "内容", "我的理解"],
+    [
+        ["战略层", "《Ai-DOP 应用智能体方案》(md)", "三阶段演进路径(任务级→流程级→企业级)", "愿景与方向,不指导实现"],
+        ["方案层", "《Ai-DOP 本体驱动智能体建设方案》(7)(1)", "本体底座设计、四类+九域智能体、三大能力路径、P0~P4 计划", "本文档解读对象;可开发、可验收的落地方案"],
+        ["任务层", "《Ai-DOP 智能体建设任务计划》V1.0", "24 项 WBS 任务、里程碑、依赖、质量闸门", "方案第七章的执行分解,逐项可跟踪"],
+    ],
+    col_widths=[1.8, 4.6, 4.6, 5.2],
+)
+add_h2("1.3 核心主张(我的概括)")
+add_bullet("本体是「语义胶水」,不是新系统:四张登记表把分散在 S0~S9 的业务对象、关联、动作、工具统一登记,让智能体在同一套业务语言上工作;", ordered=True, index=1)
+add_bullet("智能体是「巡检 + 推理 + 起草」,不是执行者:只做感知、分析与建议,落库一律经审批流人工确认(L2 默认,L3 白名单,L4 不开放);", ordered=True, index=2)
+add_bullet("证据链是「可信底线」:任何结论必须附表名、字段、记录号,无证据不下结论,从机制上抑制 LLM 幻觉;", ordered=True, index=3)
+add_bullet("缺省关闭是「安全阀」:所有新能力初始关闭、逐租户灰度、可回退,未启用租户行为与现状完全一致。", ordered=True, index=4)
+
+# ============ 二、章节结构与逻辑主线 ============
+add_h1("二、章节结构与逻辑主线")
+add_table(
+    ["章节", "内容", "在逻辑主线中的位置"],
+    [
+        ["一、背景与目标", "Palantir Ontology 理念 → DOP 四层架构与 S0~S9 定位 → 现状盘点 → 四大建设目标 → 九域智能体画像", "「为什么做、做成什么样」"],
+        ["二、总体思路", "零旁路增量四原则 + 本体理念落地形态映射 + 治理红线", "「按什么规矩做」"],
+        ["三、本体语义底座", "四要素落 4 张配置表(实体/关联/动作链/工具注册)", "「语义层怎么建」"],
+        ["四、四类智能体设计", "数据感知/关系推理/风险预警/执行调度 × 九域矩阵", "「智能体怎么搭」"],
+        ["五、三大能力落地路径", "自动预警(四规则巡检)→ 自动分析(Planner+证据链)→ 自动优化(建议-审批-执行-验证闭环)+ 5.5~5.9 试点场景", "「能力怎么一步步长出来」"],
+        ["六、与现有代码的对接点", "新增内容清单、复用与不改动边界、6.3 就绪度判定与需求卡标准", "「落在代码的哪里、还缺什么」"],
+        ["七、分阶段实施计划", "P0 底座 → P1 预警 → P2 分析 → P3 优化 → P4 扩展,P0~P3 约 11 周", "「分几步走」"],
+        ["八~十", "风险与应对 / 预期效果与价值量化 / 术语对照", "「风险、收益与口径」"],
+    ],
+    col_widths=[2.6, 7.0, 6.0],
+)
+add_body(
+    "主线读法:前三章回答「是什么」(理念→原则→底座),第四、五章回答「怎么做」(智能体→能力路径),"
+    "第六、七章回答「落哪、何时」(代码对接→计划),第八至十章回答「风险与收益」。"
+    "第一章新增的「Order To Delivery 端到端订单执行周期动态价值流图(VSM)」是全文业务主线的可视化总纲:"
+    "以订单从下达到签收的端到端周期为轴,标注各环节的体征点与九域智能体的监控位置。"
+)
+
+# ============ 三、关键概念地图 ============
+add_h1("三、关键概念地图")
+add_table(
+    ["概念", "方案定义", "我的理解(与代码的对应)"],
+    [
+        ["本体四要素", "实体/属性/关联/动作", "实体=业务对象(订单、工单、物料…);属性由现有业务表字段承载,不重复建模;关联=对象间关系(订单→工单→工序);动作=业务行为(下单、排产、发货)"],
+        ["四类职能智能体", "数据感知/关系推理/风险预警/执行调度", "横向能力层:感知=巡检扫描事实,推理=沿登记链路找根因,预警=分级登记 S8,调度=起草建议;复用 22 个 Job、SmartDiagnosisEvidenceRegistry、ado_s8_exception、SmartOpsImprovement* 等现有资产"],
+        ["九域模块智能体", "S1~S9 各一个", "纵向场景层 = 四类职能能力在每域的实例化;1.6 节「画像—现有代码承载」表已逐域列出复用服务与 Job"],
+        ["L0~L4 自动化等级", "L2 默认、L3 白名单、L4 不开放", "平衡「自主执行」目标与「审批不可绕过」红线:L2=起草+审批后执行;L3=预设额度/白名单内自动执行+事后审计;L4 需一季度 L3 数据后评审"],
+        ["证据链", "结论附表名/字段/记录号 + 快照时间 + 口径版本", "抑制 LLM 幻觉的机制性设计:LLM 只做语义整理与候选排序,推理骨架由登记表与证据校验代码决定"],
+        ["工具注册闸门", "tool_code 显式注册 + 语义描述", "防越权:未注册 API 不可被智能体调用;动作/函数/工具分开登记、编码不混用"],
+        ["改善闭环", "建议—审批—执行—验证回写", "复用 S9 已验证范式:IFlowBizHandler 审批 + ImprovementApproverGuard 守卫 + ImprovementEffectiveness 验证"],
+    ],
+    col_widths=[2.6, 4.6, 8.4],
+)
+
+# ============ 四、核心设计逐点解读 ============
+add_h1("四、核心设计逐点解读")
+add_h2("4.1 为什么是「零旁路增量」而不是另建智能体平台")
+add_body(
+    "方案的选型逻辑是:Ai-DOP 已具备巡检 Job、审批流、租户隔离、S9 诊断闭环、LLM 客户端等全部「零件」,"
+    "另建平台意味着重复建设调度、认证、审批与数据通道,还会产生双份口径与越权风险。零旁路增量把智能体能力"
+    "作为现有系统的「新零件」挂入:本体四要素用 4 张自建配置表承载(不引入 OWL/RDF 推理机、不在 Java/Spring 侧"
+    "另建本体服务,适配本项目 .NET + Vue + MySQL 技术栈),智能体实现为插件 Job 目录下的独立巡检 Job 与一个 "
+    "Planner。我的判断:这是与代码资产匹配度最高的选型,也是评审风险最低的路径。"
+)
+add_h2("4.2 本体四表是「登记制」而非「重新建模」")
+add_body(
+    "实体表(aidop_agent_entity)登记对象与数据落点、状态字典与属性口径;关联表(aidop_agent_relation)登记"
+    "对象间 JOIN 条件;动作链表(aidop_agent_action_chain)登记可执行动作与自动化等级/幂等键/回滚方式;"
+    "工具注册表(aidop_agent_tool_registry)是调用闸门。关键点:属性不重复建模,直接指向现有业务表字段——"
+    "这避免了「双份模型漂移」,也让证据链天然可追溯到真实数据。"
+)
+add_h2("4.3 三大能力与四大目标、四类智能体的对应")
+add_table(
+    ["四大建设目标(1.5)", "三大能力(第五章)", "落地载体"],
+    [
+        ["数据感知和任务理解", "自动预警", "四规则巡检引擎 + 数据感知/风险预警 Job + S8 对接"],
+        ["归因分析和任务规划", "自动分析", "关系推理智能体 + Planner + 证据校验 + ChatBI 增强"],
+        ["长期记忆和智能决策", "自动优化", "建议-审批-执行-验证闭环 + 规则库回写(记忆沉淀)"],
+        ["多智能体协同和自主执行", "自动优化(L2/L3)", "执行调度智能体 + 审批流 + 白名单 L3"],
+    ],
+    col_widths=[4.0, 3.2, 8.4],
+)
+add_body(
+    "注意:四大目标中「长期记忆」的实现方式方案没有单独立表,而是通过「执行结果经有效性验证回写规则库与登记表」"
+    "沉淀为持续进化的规则资产——这与「不另建系统」的总纲一致,但评审时应确认记忆的检索与冲突处理规则是否需要在"
+    "需求卡 C5/C9 中补充明确。"
+)
+add_h2("4.4 5.5~5.9 试点与场景:全部站在现有代码肩膀上")
+add_table(
+    ["场景", "核心动作", "数据来源(方案已给出现有代码落点)"],
+    [
+        ["5.5 齐套四量问答(P2 试点)", "注册聚合工具 + 证据回答", "WorkOrdTemp 四量列、165 InvMaster、ic_item_stockoccupy / srm_po_occupy、dwd_requirement_examine_detail.lack_qty"],
+        ["5.6 S1 交期提前影响分析", "沿订单→工单→物料→采购→交货→发货链路推演", "crm_seorderentry.sys_capacity_date、WorkOrdMaster、三级计划重排接口、srm_pr_main/srm_po_main"],
+        ["5.7 S2 理论/实际产能与建议人数", "产能偏差归因 + 出勤人数建议", "ProdLineDetail.Rate、ExecutableDailyPlanService 实绩、OEE KPI、AdoS0LineSkillMaster"],
+        ["5.8 S3 物料交期与自动选供", "履约偏差分析 + 供应商推荐", "DeliveryScheduleService DueDate、收货实绩、货源表 quota_rate/lead_time"],
+        ["5.9 库存与安全库存建议", "安全库存/再订货点/补货量计算", "AdoS0ItemMaster.SafetyStk、S5 对账 Job 结果、发料记录、供应商 lead_time"],
+    ],
+    col_widths=[3.4, 4.4, 7.8],
+)
+
+# ============ 五、就绪度与计划的理解 ============
+add_h1("五、就绪度判定与分阶段计划的理解")
+add_h2("5.1 6.3 就绪度判定的实质:瓶颈在规格文档,不在代码")
+add_body(
+    "6.3 节对 S1~S9 九域做六维判定(业务目标/KPI、对象与本体、触发与事件、规则与算法、动作与权限、验收与评测),"
+    "结论是:9 个域六维全部「部分」以上,仅 S2 验收评测、S7 KPI 为「缺失」——且方案明确「缺失」指需求卡文档未写或"
+    "评测资产空缺,不代表代码能力不存在。我的理解:判定结果说明开发瓶颈不在代码(各域服务、Job、规则引擎、测试"
+    "资产均已齐备),而在「规格的可开发化」——把业务期望写成 C0~C13 一页需求卡(尤其 C1 目标 KPI、C5 规则、"
+    "C11 验收三硬项)。这也解释了为什么任务计划把「九域需求卡补齐」列为与 P0~P2 并行的独立任务线:需求卡不达标,"
+    "任何域都不能进入开发排期。"
+)
+add_h2("5.2 分阶段计划的设计意图")
+add_body(
+    "P0(底座)→ P1(预警)→ P2(分析)→ P3(优化)是「能力逐级叠加」:每一阶段都建立在前一阶段的可核对结论之上"
+    "(预警事实 → 根因证据 → 改善建议),且每阶段独立交付、可回退。P4 扩展按「数据就绪度 × 规则确定性」排序而非"
+    "模块重要性:S4 采购执行先行(已有 AGT-S4-001 完整参照卡),S6 生产执行殿后(依赖车间实时数据,须 S4/S5 先"
+    "跑通 L2 闭环)。P0~P3 合计约 11 周,P4 首个里程碑(S4 域 L2 全闭环)预计在第 15~16 周。"
+)
+
+# ============ 六、总体评价与注意点 ============
+add_h1("六、我的总体评价与注意点")
+add_h2("6.1 我认为方案的四个亮点")
+add_bullet("务实:全程「复用现有代码」思维,每个能力点都标注了现有服务/表/Job 落点,可执行性高;", ordered=True, index=1)
+add_bullet("可信:证据链 + 工具闸门 + 审批流三重约束,把 LLM 的角色限定在「语义整理与候选排序」,机制上抑制幻觉;", ordered=True, index=2)
+add_bullet("可回退:缺省关闭、逐租户灰度、阶段独立交付,风险可控,不阻塞现有发版;", ordered=True, index=3)
+add_bullet("可验收:需求卡 C0~C13 + 三硬闸门 + 数字型验收口径(准确率 ≥98%/≥90%、误报 ≤10%、证据完整率 100%),把「做没做好」变成可判定问题。", ordered=True, index=4)
+add_h2("6.2 评审前建议确认的四个注意点")
+add_table(
+    ["注意点", "位置", "说明与建议"],
+    [
+        ["「长期记忆」的实现载体", "1.5 目标 3 / 第五章", "方案以规则库与登记表回写承载记忆,未单独立表;建议在需求卡 C5/C9 中明确记忆检索范围与冲突处理,避免跨域口径漂移"],
+        ["S2 验收评测缺失", "6.3 矩阵 B", "排程域无测试资产;P4 排期前须补齐评测样例(专家标注 + 质量指标),任务计划已列为 S2 需求卡评审闸门"],
+        ["S7 KPI 缺失", "6.3 矩阵 B", "成品物流 KPI 无注册证据;须先定义并注册(公式/口径/数据源)再开发"],
+        ["术语表「S0~S10」表述", "第十章 OTD 词条", "全文模块编号为 S0~S9,该处「S10」疑为笔误,建议统一为 S0~S9"],
+    ],
+    col_widths=[3.4, 2.8, 9.4],
+)
+add_body(
+    "总体结论:方案完整、自洽、可落地,与任务计划构成「方案—执行」两层闭环。建议按任务计划 1.3 节三项硬闸门"
+    "推进:需求卡达标(C1/C5/C11)→ 6.3 销项 → P0 基线锁定,即可启动开发。"
+)
+
+doc.save(OUT)
+print(OUT)

+ 371 - 0
doc/_gen_agent_task_plan_docx.py

@@ -0,0 +1,371 @@
+"""生成《Ai-DOP 智能体建设任务计划》Word 文档(V1.0)。
+
+基于《Ai-DOP 本体驱动智能体建设方案》(7)(1) 的第七章分阶段实施计划(P0~P4)、
+6.3 节各域现状判定与首要补齐项、5.5~5.9 试点与场景示例,
+输出可执行的任务分解(WBS)、里程碑时间线、依赖关系与质量控制闸门。
+"""
+
+from __future__ import annotations
+
+import os
+
+from docx import Document
+from docx.enum.text import WD_ALIGN_PARAGRAPH, WD_LINE_SPACING
+from docx.oxml.ns import qn
+from docx.shared import Cm, Pt
+
+BASE = os.path.dirname(os.path.abspath(__file__))
+OUT = os.path.join(BASE, "plan", "Ai-DOP智能体建设任务计划.docx")
+
+doc = Document()
+sec = doc.sections[0]
+sec.page_width = Cm(21.0)
+sec.page_height = Cm(29.7)
+sec.top_margin = Cm(2.54)
+sec.bottom_margin = Cm(2.54)
+sec.left_margin = Cm(2.4)
+sec.right_margin = Cm(2.4)
+
+
+def set_run_font(run, name_cn="宋体", name_en="Times New Roman", size=12, bold=False, color=None):
+    run.font.name = name_en
+    run._element.rPr.rFonts.set(qn("w:eastAsia"), name_cn)
+    run.font.size = Pt(size)
+    run.bold = bold
+    if color is not None:
+        run.font.color.rgb = color
+
+
+def style_normal():
+    style = doc.styles["Normal"]
+    style.font.name = "Times New Roman"
+    style.font.size = Pt(12)
+    style._element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")
+    pf = style.paragraph_format
+    pf.line_spacing_rule = WD_LINE_SPACING.ONE_POINT_FIVE
+    pf.space_after = Pt(6)
+
+
+def add_title(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(12)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 18, True)
+
+
+def add_subtitle(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(12)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 14, True)
+
+
+def add_meta(text: str):
+    p = doc.add_paragraph()
+    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+    p.paragraph_format.space_after = Pt(4)
+    run = p.add_run(text)
+    set_run_font(run, "宋体", "Times New Roman", 10.5)
+
+
+def add_h1(text: str):
+    p = doc.add_paragraph()
+    p.paragraph_format.space_before = Pt(14)
+    p.paragraph_format.space_after = Pt(8)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 14, True)
+
+
+def add_h2(text: str):
+    p = doc.add_paragraph()
+    p.paragraph_format.space_before = Pt(10)
+    p.paragraph_format.space_after = Pt(6)
+    run = p.add_run(text)
+    set_run_font(run, "黑体", "SimHei", 12, True)
+
+
+def add_body(text: str, indent=True):
+    p = doc.add_paragraph()
+    p.paragraph_format.first_line_indent = Pt(24) if indent else Pt(0)
+    p.paragraph_format.space_after = Pt(6)
+    run = p.add_run(text)
+    set_run_font(run, "宋体", "Times New Roman", 12)
+
+
+def add_bullet(text: str, ordered=False, index=None):
+    p = doc.add_paragraph()
+    p.paragraph_format.left_indent = Cm(0.74)
+    p.paragraph_format.first_line_indent = Pt(0)
+    p.paragraph_format.space_after = Pt(3)
+    prefix = f"{index}." if ordered else "•"
+    run = p.add_run(f"{prefix} {text}")
+    set_run_font(run, "宋体", "Times New Roman", 12)
+
+
+def add_table(headers, rows, col_widths=None):
+    table = doc.add_table(rows=1 + len(rows), cols=len(headers))
+    table.style = "Table Grid"
+    table.autofit = True
+
+    for i, h in enumerate(headers):
+        cell = table.rows[0].cells[i]
+        cell.text = ""
+        p = cell.paragraphs[0]
+        p.alignment = WD_ALIGN_PARAGRAPH.CENTER
+        run = p.add_run(h)
+        set_run_font(run, "宋体", "Times New Roman", 10.5, True)
+        tc = cell._tc
+        tcPr = tc.get_or_add_tcPr()
+        shd = tcPr.makeelement(qn("w:shd"), {qn("w:val"): "clear", qn("w:fill"): "D9E2F3"})
+        tcPr.append(shd)
+
+    for ri, row in enumerate(rows):
+        for ci, val in enumerate(row):
+            cell = table.rows[ri + 1].cells[ci]
+            cell.text = ""
+            p = cell.paragraphs[0]
+            run = p.add_run(str(val))
+            set_run_font(run, "宋体", "Times New Roman", 10.5)
+
+    if col_widths is not None:
+        table.autofit = False
+        for ci, w in enumerate(col_widths):
+            for row in table.rows:
+                row.cells[ci].width = Cm(w)
+    return table
+
+
+style_normal()
+
+# ============ 封面信息 ============
+add_title("Ai-DOP 智能体建设任务计划")
+add_subtitle("——基于《Ai-DOP 本体驱动智能体建设方案》的落地执行分解")
+add_meta("文档版本:V1.0  编制日期:2026 年 10 月")
+add_meta("依据方案:《Ai-DOP 本体驱动智能体建设方案》(7)(1)(第七章分阶段实施计划、6.3 节需求就绪度判定、5.5~5.9 试点与场景示例)")
+
+# ============ 一、任务计划总览 ============
+add_h1("一、任务计划总览")
+add_h2("1.1 建设总纲")
+add_body(
+    "本任务计划以方案「零旁路增量」为总纲:本体四要素以 4 张配置表承载,四类职能智能体(数据感知、关系推理、"
+    "风险预警、执行调度)实现为插件 Job 目录下的独立巡检 Job 与一个 LLM 编排 Planner,写类动作一律经现有审批流"
+    "(IFlowBizHandler)人工确认后落库;全部新能力缺省关闭、可评审、可回退,不阻塞现有业务发版。"
+)
+add_body(
+    "按方案第七章,建设分 P0~P4 五阶段:P0~P3 合计约 11 周,P4 为持续扩展期;各阶段均可独立交付与回退。"
+    "P4 业务域补齐顺序按「数据就绪度 × 规则确定性」排序(与模块重要性无关):S4 采购执行 → S5 物料仓储 → "
+    "S3 完善 → S7 成品仓储外物流 → S6 生产执行 → S1/S2 完善 → S8/S9 字典与 KPI 基线。"
+)
+add_h2("1.2 阶段里程碑总表")
+add_table(
+    ["阶段", "建设内容", "工期", "交付物", "验收闸门(通过后方可进入下一阶段)"],
+    [
+        ["P0 底座", "4 张本体登记表 + 工具注册闸门 + 前端登记页 + 价值基线锁定", "约 2 周",
+         "① DDL 与实体 ② 登记维护页面 ③ 工具注册闸门服务 ④ 基线校准报告",
+         "登记、启停、租户隔离生效;未启用租户行为不变;矩阵 A 对象/规则/工具起步值完成代码与业务基线校准;价值 KPI 以一个月历史数据锁定基线"],
+        ["P1 自动预警", "四规则巡检引擎 + 数据感知/风险预警 Job + S8 对接", "约 3 周",
+         "① 巡检 Job ② 规则配置页 ③ 预警通知链路",
+         "规则命中即登记 S8 异常并通知责任人;预警结论可核对(附触发数据位置)"],
+        ["P2 自动分析", "关系推理智能体 + Planner + 证据链 + ChatBI 增强 + 齐套四量问答试点", "约 3 周",
+         "① Planner 服务 ② 证据链报告 ③ ChatBI 带证据回答 ④ 试点用例",
+         "根因候选均带证据(表名/字段/记录号);无证据不下结论;试点问答返回四量与欠料并附证据"],
+        ["P3 自动优化", "执行调度智能体 + 建议审批 + 有效性验证闭环", "约 3 周",
+         "① 建议起草服务 ② 闭环流程 ③ 场景示例落地",
+         "建议经审批方可执行;执行结果经有效性验证回写规则库"],
+        ["P4 扩展", "业务域补齐 + 更多场景规则沉淀 + 登记表扩展", "持续",
+         "① 各域需求卡 ② 场景规则包 ③ 登记数据",
+         "每场景均有可复盘证据与收益统计"],
+    ],
+    col_widths=[1.7, 5.0, 1.4, 3.4, 4.7],
+)
+add_h2("1.3 排期前置条件(三项硬闸门)")
+add_bullet("需求卡闸门:各业务域按「一页需求卡」C0~C13 十四项标准写清(最多 3 页);C1(业务目标与 KPI)、C5(规则与算法)、C11(验收与评测)任一缺失,评审直接判定「不具备开发条件」,不进入开发排期。", ordered=True, index=1)
+add_bullet("就绪度销项:对照方案 6.3 节矩阵 B,9 个域六维中「缺失/部分」项逐项销项——当前仅 S2 验收评测、S7 KPI 为「缺失」,其余六维均「部分」以上;各域按 6.3 节「首要补齐项」补文档与评测后方可排期。", ordered=True, index=2)
+add_bullet("基线闸门:价值量化目标(方案第九章)为示例值,P0 阶段以一个月历史数据锁定基线后方可进入验收;无基线的 KPI 不写入验收表。", ordered=True, index=3)
+
+# ============ 二、任务分解 ============
+add_h1("二、任务分解(WBS)")
+add_body(
+    "以下按阶段列出全部任务。角色缩写:域Owner=各业务域负责人(登记口径、验收责任);后端=平台研发后端;"
+    "前端=平台研发前端;测试=质量与评测;数据=数据中台与 KPI 口径。任务编号规则:T{阶段序号}.{任务序号}。"
+)
+add_h2("2.1 P0 底座(约 2 周)")
+add_table(
+    ["编号", "任务", "工作内容", "交付物", "前置依赖", "工期", "角色", "验收口径"],
+    [
+        ["T0.1", "四张本体登记表落地", "aidop_agent_entity/relation/action_chain/tool_registry 四表 DDL 与实体,含 tenant_id、status_dict、attr_spec_json、自动化等级/幂等键/回滚方式字段,SqlSugar CodeFirst 挂入插件 Entity", "DDL + 实体 + 种子数据", "—", "4 天", "后端", "四表可在现有业务库创建;全部带 tenant_id;初始缺省关闭"],
+        ["T0.2", "前端登记维护页", "实体/关联/动作链/工具四类登记页(增改查、启停、版本化),登记 FUNC 功能码后注入菜单(侧栏短标方案)", "登记维护页面", "T0.1", "4 天", "前端", "四类对象可登记、启停;菜单可访问;按租户隔离"],
+        ["T0.3", "工具注册闸门服务", "工具显式注册(tool_code/语义描述/调用目标),Planner 调用前强制校验;未注册工具一律不可调用", "闸门服务 + 单元测试", "T0.1", "3 天", "后端", "未注册工具调用被拦截;注册表附业务语义描述"],
+        ["T0.4", "租户级启用开关", "租户级灰度开关与规则启用配置(缺省关闭,逐租户开启)", "开关配置能力", "T0.1", "2 天", "后端", "未启用租户行为与当前版本完全一致"],
+        ["T0.5", "矩阵 A 起步值基线校准", "按代码基线(各域服务/Job/规则)与业务基线校准矩阵 A 的对象/规则/工具起步值", "基线校准报告", "—", "3 天", "后端+域Owner", "9 个域起步值均经代码证据与业务确认"],
+        ["T0.6", "价值 KPI 基线锁定", "以一个月历史数据锁定预警时效、分析时效、人工干预率、响应时间、交付准时率等基线", "KPI 基线表", "—", "与 P0 并行", "数据", "每个验收 KPI 均有基线值;无基线 KPI 不写入验收"],
+    ],
+    col_widths=[1.1, 2.3, 4.6, 2.1, 1.3, 1.2, 1.4, 2.4],
+)
+add_h2("2.2 P1 自动预警(约 3 周)")
+add_table(
+    ["编号", "任务", "工作内容", "交付物", "前置依赖", "工期", "角色", "验收口径"],
+    [
+        ["T1.1", "四规则巡检引擎", "时效性/一致性/完整性/阈值四类规则引擎,按租户、按对象配置,缺省关闭;规则暂以代码/JSON 承载", "巡检引擎 + 单元测试", "T0.3", "6 天", "后端", "四类规则均可配置、可启停;命中即产出预警候选"],
+        ["T1.2", "数据感知 Job", "周期扫描数据新鲜度/一致性/完整性,产出异常事实写入动作日志与预警候选队列;错峰调度", "巡检 Job(挂 Job/ 目录)", "T1.1", "4 天", "后端", "与现有 22 个 Job 同范式挂入调度;错峰执行不影响在线业务"],
+        ["T1.3", "风险预警 Job + S8 对接", "预警分级(轻微/一般/严重)后登记 ado_s8_exception 并通知责任人;预警结论附触发数据位置", "预警链路", "T1.1", "5 天", "后端", "规则命中即登记 S8 异常并通知;结论可核对、可追溯"],
+        ["T1.4", "规则配置页", "四类规则的租户级配置界面(对象、阈值、启停、巡检窗口)", "配置页", "T1.1", "4 天", "前端", "配置即时生效;阈值可调"],
+        ["T1.5", "预警分级字典与阈值基线", "确定轻微/一般/严重分级标准与各域阈值基线、责任人映射", "分级字典 + 基线配置", "—", "与 T1.1 并行", "域Owner+数据", "分级标准经业务确认;责任人可寻址"],
+    ],
+    col_widths=[1.1, 2.3, 4.6, 2.1, 1.3, 1.2, 1.4, 2.4],
+)
+add_h2("2.3 P2 自动分析(约 3 周)")
+add_table(
+    ["编号", "任务", "工作内容", "交付物", "前置依赖", "工期", "角色", "验收口径"],
+    [
+        ["T2.1", "关系推理智能体", "沿实体—关联—动作链定位候选根因(如工单延迟→车间资源冲突→运输卡点)", "推理服务 + 单元测试", "T0.1", "5 天", "后端", "推理路径沿登记链路展开;候选根因可枚举"],
+        ["T2.2", "LLM 编排 Planner", "复用 DeepSeekChatClient(纯 JSON 补全)做语义整理与候选排序;推理骨架由登记表与证据校验代码决定", "Planner 服务", "T2.1", "6 天", "后端", "LLM 不产生无证据结论;输出结构化根因报告(结论+证据链+置信度)"],
+        ["T2.3", "证据校验服务", "每个候选根因必须落到具体证据(表名、字段、记录号);证据不足的候选剔除", "证据校验服务", "T2.1", "4 天", "后端", "无证据候选 100% 剔除;证据可反查"],
+        ["T2.4", "ChatBI 增强", "问数答案附带证据链,可回答性校验", "ChatBI 带证据回答", "T2.2", "4 天", "后端+前端", "答案附证据位置;证据不足时明示"],
+        ["T2.5", "齐套四量问答试点", "注册「齐套四量查询」聚合工具(LLM 不直连数据库);占用单独取数 ic_item_stockoccupy/srm_po_occupy;欠料口径直接引用 lack_qty 权威列", "试点用例 + 评测报告", "T2.2", "5 天", "后端+测试", "问答返回在库/在检/在途/占用四量与欠料,附证据表名与记录号(方案 5.5)"],
+    ],
+    col_widths=[1.1, 2.3, 4.6, 2.1, 1.3, 1.2, 1.4, 2.4],
+)
+add_h2("2.4 P3 自动优化(约 3 周)")
+add_table(
+    ["编号", "任务", "工作内容", "交付物", "前置依赖", "工期", "角色", "验收口径"],
+    [
+        ["T3.1", "执行调度智能体", "依据分析结论与工具注册表起草改善建议(重跑 MRP、调整排产优先级、补充采购申请等)", "建议起草服务", "T2.2", "5 天", "后端", "建议含动作、目标对象与预期效果;只起草不落库"],
+        ["T3.2", "建议审批对接", "建议进入现有审批流(IFlowBizHandler),审批人守卫校验(ImprovementApproverGuard 范式);未审批不落库", "审批流对接", "T3.1", "5 天", "后端", "未经审批的建议无法执行;审批人解析复用现有守卫"],
+        ["T3.3", "有效性验证回写", "执行结果经有效性验证(ImprovementEffectiveness 范式),验证通过回写规则库与登记表", "闭环验证服务", "T3.2", "4 天", "后端", "验证结果可复盘;通过后规则库生效"],
+        ["T3.4", "场景示例落地(按序)", "依次落地方案 5.6 交期提前影响分析、5.7 理论/实际产能与建议人数、5.8 物料交期与自动选供、5.9 安全库存/补货建议", "4 个场景用例", "T3.2", "8 天(与 T3.3 并行)", "后端+域Owner", "每场景数据来源均对齐现有代码(见方案 5.6~5.9 数据表)"],
+    ],
+    col_widths=[1.1, 2.3, 4.6, 2.1, 1.3, 1.2, 1.4, 2.4],
+)
+add_h2("2.5 P4 扩展(持续)")
+add_table(
+    ["编号", "任务", "工作内容", "交付物", "前置依赖", "工期", "角色", "验收口径"],
+    [
+        ["T4.1", "业务域按序补齐", "按 S4→S5→S3→S7→S6→S1/S2→S8/S9 顺序补齐各域智能体;S6 依赖车间实时数据,宜在 S4/S5 跑通 L2 闭环后启动", "各域智能体能力", "该域需求卡评审通过", "每域约 3~4 周", "后端+域Owner", "该域需求卡 C0~C13 全项验收达标"],
+        ["T4.2", "需求卡编写—评审循环", "每域「一页需求卡」编写→评审→开发→验收闭环;6.3 节矩阵 B 的「缺失/部分」逐项销项", "各域需求卡 + 评审记录", "—", "持续", "域Owner", "C1/C5/C11 全部达标;销项清单更新"],
+        ["T4.3", "场景规则沉淀与登记表扩展", "新场景规则包沉淀;LLM 半自动抽取生成登记草稿,人工确认后生效并版本化留痕", "规则包 + 登记数据", "T4.1", "持续", "后端+域Owner", "每场景均有可复盘证据与收益统计"],
+    ],
+    col_widths=[1.1, 2.3, 4.6, 2.1, 1.3, 1.2, 1.4, 2.4],
+)
+
+# ============ 三、业务域需求卡补齐任务 ============
+add_h1("三、各业务域需求卡补齐任务(排期输入)")
+add_body(
+    "以下任务与 P0~P2 并行推进,是 P4 各域开发排期的输入;依据方案 6.3 节「各域现状判定与首要补齐项」。"
+    "S4 采购执行智能体需求卡(AGT-S4-001)为完整参照示例,其余各域按同一标准编写。"
+)
+add_table(
+    ["业务域", "首要补齐内容(依据方案 6.3)", "责任人(域Owner)", "输出", "评审闸门"],
+    [
+        ["S1 产销协同", "预测粒度与准确率目标、库存计划对象、给 S2 的输入契约与冻结期", "销售运营+计划部", "S1 需求卡 v1.0", "C1/C5/C11 达标"],
+        ["S2 制造协同", "约束清单(设备/模具/技能/换型)、冻结期、求解时限与结果可解释;验收评测资产空缺需补", "制造部+计划部", "S2 需求卡 v1.0", "C1/C5/C11 达标 + 测试资产"],
+        ["S3 供应协同", "替代料规则、与 S4 的 PR/PO/ASN 边界、IQC 口径", "采购部+物控", "S3 需求卡 v1.0", "C1/C5/C11 达标"],
+        ["S4 采购执行", "按 AGT-S4-001 补写全量需求卡(规则/动作均已取证,补目标与评测文档化)", "采购部", "S4 需求卡定稿", "参照示例卡验收底线"],
+        ["S5 物料仓储", "作业对象(收货/上架/拣料/盘点)、批次与库位、盘点差异处理需求卡化", "仓储+物控", "S5 需求卡 v1.0", "C1/C5/C11 达标"],
+        ["S6 生产执行", "报工与质量对象、停机原因树、工艺参数可调边界需求卡化", "车间+质量", "S6 需求卡 v1.0", "C1/C5/C11 达标"],
+        ["S7 成品仓储外物流", "发运对象、承运与路线、签收 POD、退货需求卡化;KPI 缺失待补", "物流部", "S7 需求卡 v1.0 + KPI 注册", "C1/C5/C11 达标 + KPI 证据"],
+        ["S8 异常管理", "体征字典与阈值基线、分级标准、S1~S7 责任人矩阵", "运营管理部", "S8 字典与基线配置", "分级标准经业务确认"],
+        ["S9 绩效管理", "KPI 字典(公式/口径/数据源)、绩效树、回写白名单", "运营+财务", "S9 KPI 字典 v1.0", "口径经数据层取证确认"],
+    ],
+    col_widths=[1.7, 5.6, 2.1, 2.6, 3.2],
+)
+
+# ============ 四、里程碑与时间线 ============
+add_h1("四、里程碑与时间线")
+add_h2("4.1 关键里程碑")
+add_table(
+    ["里程碑", "时点", "内容", "通过标准"],
+    [
+        ["M0 底座验收", "P0 末(第 2 周末)", "四表 + 登记页 + 工具闸门 + 基线锁定", "P0 验收口径全项通过"],
+        ["M1 预警试点验收", "P1 末(第 5 周末)", "四规则巡检 + S8 对接上线,选 1 域灰度", "规则命中即登记 S8 并通知"],
+        ["M2 分析试点验收", "P2 末(第 8 周末)", "齐套四量问答试点验收", "试点问答返回四量与欠料并附证据"],
+        ["M3 优化闭环验收", "P3 末(第 11 周末)", "建议—审批—执行—验证闭环 + 4 场景落地", "建议经审批方可执行;验证回写规则库"],
+        ["M4 首个域全闭环", "P4 内(约第 15~16 周)", "S4 采购执行域 L2 全闭环首个案例", "AGT-S4-001 验收底线全项达标"],
+    ],
+    col_widths=[2.8, 2.6, 5.4, 4.4],
+)
+add_h2("4.2 阶段时间线(甘特)")
+add_table(
+    ["阶段", "W1", "W2", "W3", "W4", "W5", "W6", "W7", "W8", "W9", "W10", "W11", "W12+"],
+    [
+        ["P0 底座", "▓", "▓", "", "", "", "", "", "", "", "", "", ""],
+        ["P1 自动预警", "", "", "▓", "▓", "▓", "", "", "", "", "", "", ""],
+        ["P2 自动分析", "", "", "", "", "", "▓", "▓", "▓", "", "", "", ""],
+        ["P3 自动优化", "", "", "", "", "", "", "", "", "▓", "▓", "▓", ""],
+        ["P4 扩展(S4→S5→S3→S7→S6→S1/S2→S8/S9)", "", "", "", "", "", "", "", "", "", "", "", "▓"],
+        ["需求卡补齐(并行)", "▓", "▓", "▓", "▓", "▓", "▓", "▓", "▓", "▓", "▓", "▓", "▓"],
+    ],
+    col_widths=[4.4, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.9],
+)
+add_body(
+    "说明:P0~P3 合计约 11 周;各阶段末设评审会(闸门评审),通过后进入下一阶段;未通过按「独立回退」原则"
+    "回退该阶段改动,不阻塞现有业务发版。"
+)
+
+# ============ 五、任务依赖与关键路径 ============
+add_h1("五、任务依赖与关键路径")
+add_h2("5.1 关键路径")
+add_body(
+    "T0.1(四表落地)→ T0.3(工具闸门)→ T1.1(巡检引擎)→ T1.3(S8 对接)→ T2.1(关系推理)→ "
+    "T2.2(Planner)→ T3.1(执行调度)→ T3.2(建议审批)→ T3.4(场景落地)→ T4.1(S4 域补齐)。"
+    "关键路径合计约 9 周 + S4 域补齐 3~4 周;关键路径上任何任务延期将直接推迟 M1~M4 里程碑。"
+)
+add_h2("5.2 并行任务与依赖要点")
+add_bullet("T0.2(前端登记页)与 T0.1 并行,前端可先按表结构契约联调;", ordered=True, index=1)
+add_bullet("T0.5/T0.6(基线校准与 KPI 锁定)与 P1 并行,由域Owner 与数据团队承担;", ordered=True, index=2)
+add_bullet("第三部分九域需求卡补齐与 P0~P2 并行,域Owner 承担,不占用平台研发关键路径;", ordered=True, index=3)
+add_bullet("T1.5(分级字典)与 T1.1 并行;T3.3(有效性验证)与 T3.4(场景落地)并行;", ordered=True, index=4)
+add_bullet("P4 各域之间按「数据就绪度 × 规则确定性」串行推进;S6 依赖车间实时数据,须在 S4/S5 跑通 L2 闭环后启动;", ordered=True, index=5)
+add_bullet("T2.5(齐套四量试点)依赖后端聚合工具先注册(LLM 不直连数据库),占用数据须单独汇总 ic_item_stockoccupy / srm_po_occupy 两表(列名不同:orderentry_id 与对应明细行 ID)。", ordered=True, index=6)
+
+# ============ 六、质量控制与评审闸门 ============
+add_h1("六、质量控制与评审闸门")
+add_h2("6.1 需求卡评审三硬闸门")
+add_body(
+    "每域需求卡按 C0~C13 十四项标准写清:C1(业务目标与 KPI)、C5(规则与算法)、C11(验收与评测)任一缺失,"
+    "评审直接判定「不具备开发条件」。写卡三个易错点:① 把方案话术当需求——须写成可判定规则(如「以最小化换型"
+    "次数为第一目标、交期满足为硬约束,求解上限 90 秒,输出前 3 个方案及目标值分解」);② 只写正向路径——"
+    "异常分支(无货源/无价格/超配额/供应商冻结)须各自挂起并转什么任务;③ 验收写形容词——须写数字(如"
+    "「逾期预警提前 ≥2 天覆盖 ≥80%;证据完整率 100%;误报率 ≤10%(100 条标注样本)」)。"
+)
+add_h2("6.2 证据规范")
+add_body(
+    "每条结论 = 对象编码 + 记录号 + 字段 + 值 + 快照时间 + 口径版本;缺快照时间或口径版本的证据在跨日复核时"
+    "视为无效。S4 采购执行智能体需求卡(AGT-S4-001)为完整参照示例:首批三个场景(PR 转 PO 自动起草含配额与"
+    "框架价校验、交期答复与 T-3 逾期催交、供应商履约复盘与配额调整建议),首批规则 6 条、动作 6 个(全部 L2,"
+    "催交通知可升 L3),试点范围 1 工厂 × 1 品类 × 30 家供应商运行一个完整采购月;验收底线为草稿字段准确率 "
+    "≥98%、规则命中准确率 ≥90%、误报率 ≤10%、逾期预警提前 ≥2 天覆盖 ≥80%、证据完整率 100%。"
+)
+add_h2("6.3 代码评审红线(每任务合入前必查)")
+add_bullet("租户隔离:所有读写强制注入 tenant_id 上下文,任何绕过租户字段的查询或写入均被禁止;", ordered=True, index=1)
+add_bullet("审批流:智能体仅可「起草」或「建议」,所有落库操作必须经由现有审批流人工确认,不可绕过;", ordered=True, index=2)
+add_bullet("工具注册闸门:所有可被智能体调用的 API 或服务必须显式注册并附带业务语义描述,未注册工具不可调用;", ordered=True, index=3)
+add_bullet("缺省关闭:未启用租户的行为与当前版本完全一致,可评审、可回退;", ordered=True, index=4)
+add_bullet("指标口径:智能体引用的指标定义、计算逻辑与数据源必须严格对齐已注册的蓝图文档与操作手册,不可自行推断。", ordered=True, index=5)
+
+# ============ 七、风险任务化应对 ============
+add_h1("七、风险任务化应对")
+add_table(
+    ["风险(方案第八章)", "对应任务", "应对措施"],
+    [
+        ["LLM 幻觉导致错误结论", "T2.2/T2.3", "推理骨架由登记表与证据校验代码决定;结论必须带证据;关键建议必经人工审批"],
+        ["误报导致预警疲劳", "T1.1/T1.5", "规则阈值可配置、预警分级、置信度过滤;错峰巡检控制频率"],
+        ["越权访问或跨租户泄漏", "T0.1/T0.3", "所有读写强制 tenant_id;工具注册闸门限定可调用面;复用 ResolveOrThrow 解析"],
+        ["巡检影响在线业务", "T1.2", "巡检只读扫描、错峰调度、限流;重活复用现有调度能力"],
+        ["登记表滞后于业务变化", "T4.3", "LLM 半自动抽取生成登记草稿(AI 辅助本体构建),人工确认生效;版本化留痕"],
+    ],
+    col_widths=[3.6, 2.2, 9.4],
+)
+
+# ============ 八、跟踪与汇报机制 ============
+add_h1("八、跟踪与汇报机制")
+add_bullet("周报:每周五输出任务周报(进展、风险、下周计划),按 WBS 任务编号逐条更新状态(未开始/进行中/阻塞/完成);", ordered=True, index=1)
+add_bullet("阶段评审会:每阶段末召开闸门评审会(域Owner、后端、前端、测试参加),对照验收口径逐项确认;未通过项进入整改清单,整改完成后复审;", ordered=True, index=2)
+add_bullet("需求卡评审会:第三部分九域需求卡按完成情况滚动评审,C1/C5/C11 三硬闸门一票否决;", ordered=True, index=3)
+add_bullet("任务完成标准:交付物 + 验收口径双达标方视为完成;代码合入前须通过 6.3 节代码评审红线;", ordered=True, index=4)
+add_bullet("回退机制:每阶段独立交付与回退;回退不阻塞现有业务发版,回退内容记录于周报。", ordered=True, index=5)
+
+doc.save(OUT)
+print(OUT)

二進制
doc/db/Ai-DOP智能体本体登记表结构设计.xlsx


+ 531 - 0
doc/db/gen_agent_tables_excel.py

@@ -0,0 +1,531 @@
+#!/usr/bin/env python3
+"""生成《Ai-DOP 智能体本体登记表结构设计》Excel。
+
+对应文档《Ai-DOP 本体驱动智能体建设方案》第三章「本体语义底座:四要素落表设计」,
+将 4 张新建配置表的字段设计展开为 Excel 明细,供评审与 DDL 编写使用。
+"""
+
+from openpyxl import Workbook
+from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
+from pathlib import Path
+
+BASE = Path(__file__).resolve().parent
+OUT = BASE / "Ai-DOP智能体本体登记表结构设计.xlsx"
+
+HEADER_FILL = PatternFill("solid", fgColor="4472C4")
+HEADER_FONT = Font(name="微软雅黑", bold=True, color="FFFFFF", size=10)
+BODY_FONT = Font(name="微软雅黑", size=9)
+TITLE_FILL = PatternFill("solid", fgColor="D9E2F3")
+TITLE_FONT = Font(name="微软雅黑", bold=True, size=11)
+SUB_FONT = Font(name="微软雅黑", size=9, color="404040")
+NOTE_FILL = PatternFill("solid", fgColor="F2F2F2")
+THIN_BORDER = Border(
+    left=Side(style="thin"), right=Side(style="thin"),
+    top=Side(style="thin"), bottom=Side(style="thin"),
+)
+WRAP = Alignment(wrap_text=True, vertical="center")
+CENTER = Alignment(horizontal="center", vertical="center", wrap_text=True)
+
+# 明细表公共列:序号 字段名 数据类型 主键 非空 默认值 字段说明 示例值
+DETAIL_HEADERS = ["序号", "字段名", "数据类型", "主键", "非空", "默认值", "字段说明", "示例值"]
+DETAIL_WIDTHS = [6, 22, 14, 7, 7, 12, 52, 26]
+
+# 公共审计字段(4 张表一致)
+AUDIT_FIELDS = [
+    ("CreateTime", "datetime", "是", "", "创建时间", ""),
+    ("UpdateTime", "datetime", "否", "", "更新时间", ""),
+    ("CreateUserId", "bigint", "是", "", "创建人", ""),
+    ("UpdateUserId", "bigint", "否", "", "更新人", ""),
+    ("IsDelete", "tinyint", "是", "0", "逻辑删除:0 未删,1 已删", "0"),
+]
+
+# 4 张表的字段设计(不含公共审计字段)
+TABLES = [
+    {
+        "sheet": "aidop_agent_entity",
+        "name": "aidop_agent_entity",
+        "cn": "智能体实体登记表",
+        "element": "本体要素:实体 Entity",
+        "desc": "登记业务对象(实体)与数据落点,供巡检与推理定位事实来源;属性由实体关联的现有业务表字段天然承载,不重复建模。",
+        "fields": [
+            ("Id", "bigint", "是", "", "主键(雪花ID)", ""),
+            ("TenantId", "bigint", "是", "", "租户ID(强制注入,跨租户隔离红线)", "10001"),
+            ("EntityCode", "varchar(64)", "是", "", "实体编码(租户内唯一)", "WORK_ORDER"),
+            ("EntityName", "varchar(128)", "是", "", "实体名称", "工单"),
+            ("EntityDesc", "varchar(512)", "否", "", "实体业务描述", "车间生产执行工单"),
+            ("SourceTable", "varchar(128)", "是", "", "数据落点表名", "ado_s2_work_order"),
+            ("KeyField", "varchar(64)", "是", "", "主键字段名", "Id"),
+            ("DisplayField", "varchar(64)", "否", "", "名称展示字段", "WorkOrdNo"),
+            ("StatusField", "varchar(64)", "否", "", "状态字段(供状态类巡检规则读取)", "State"),
+            ("StatusDict", "varchar(512)", "否", "", "状态字典与流转规则(如 草稿→已审批→关闭;父对象状态由行状态聚合,聚合规则在此写明)", "草稿→待审批→已下达→关闭"),
+            ("AttrSpecJson", "text", "否", "", "属性口径元数据 JSON(字段单位、时间语义、口径版本,缺一不可)", "[{\"field\":\"Qty\",\"unit\":\"件\",\"timeSem\":\"实时快照\",\"version\":\"v1\"}]"),
+            ("Enabled", "tinyint", "是", "1", "是否启用:1 启用,0 停用(缺省关闭态)", "1"),
+        ],
+        "indexes": [
+            "唯一索引 uk_entity(TenantId, EntityCode)",
+            "普通索引 idx_source(SourceTable) —— 供巡检按数据落点反查实体",
+        ],
+    },
+    {
+        "sheet": "aidop_agent_relation",
+        "name": "aidop_agent_relation",
+        "cn": "智能体关联登记表",
+        "element": "本体要素:关联 Relation",
+        "desc": "登记实体之间的关系(如 工单→工序 按工单号关联),关系推理智能体沿此链路定位根因。",
+        "fields": [
+            ("Id", "bigint", "是", "", "主键(雪花ID)", ""),
+            ("TenantId", "bigint", "是", "", "租户ID(强制注入)", "10001"),
+            ("RelationCode", "varchar(64)", "是", "", "关联编码(租户内唯一)", "WORK_ORDER-OPERATION"),
+            ("RelationName", "varchar(128)", "是", "", "关联名称", "工单-工序"),
+            ("FromEntity", "varchar(64)", "是", "", "源实体编码(引用实体登记表 EntityCode)", "WORK_ORDER"),
+            ("ToEntity", "varchar(64)", "是", "", "目标实体编码(引用实体登记表 EntityCode)", "OPERATION"),
+            ("RelationType", "varchar(32)", "是", "", "关联类型:1:1 / 1:N / N:M", "1:N"),
+            ("FromField", "varchar(64)", "是", "", "源实体关联字段", "Id"),
+            ("ToField", "varchar(64)", "是", "", "目标实体关联字段", "WorkOrdId"),
+            ("JoinCondition", "varchar(512)", "否", "", "附加关联条件(登记展示用,不直接执行)", "AND IsDelete=0"),
+            ("RelationDesc", "varchar(512)", "否", "", "关联业务语义描述(供 LLM 理解)", "工单包含多道工序"),
+            ("Enabled", "tinyint", "是", "1", "是否启用:1 启用,0 停用", "1"),
+        ],
+        "indexes": [
+            "唯一索引 uk_relation(TenantId, RelationCode)",
+            "普通索引 idx_from_to(FromEntity, ToEntity) —— 供推理链路遍历",
+        ],
+    },
+    {
+        "sheet": "aidop_agent_action_chain",
+        "name": "aidop_agent_action_chain",
+        "cn": "智能体动作链登记表",
+        "element": "本体要素:动作 Action",
+        "desc": "登记可执行动作(如 重跑 MRP、作废日计划)与触发条件,执行调度智能体据此起草改善建议。",
+        "fields": [
+            ("Id", "bigint", "是", "", "主键(雪花ID)", ""),
+            ("TenantId", "bigint", "是", "", "租户ID(强制注入)", "10001"),
+            ("ChainCode", "varchar(64)", "是", "", "动作链编码(租户内唯一)", "RERUN_MRP_PURCHASE"),
+            ("ChainName", "varchar(128)", "是", "", "动作链名称", "重跑MRP采购申请生成"),
+            ("TriggerEntity", "varchar(64)", "是", "", "触发实体编码(动作作用对象)", "MATERIAL"),
+            ("TriggerEvent", "varchar(64)", "是", "", "触发事件类型(与预警规则输出对齐)", "SHORTAGE_STALE"),
+            ("ActionType", "varchar(32)", "是", "", "动作类型:RERUN / ADJUST / CREATE / NOTIFY", "RERUN"),
+            ("HandlerTool", "varchar(64)", "是", "", "执行工具编码(引用工具注册表 ToolCode)", "TOOL_RERUN_MRP"),
+            ("ApprovalRequired", "tinyint", "是", "1", "是否需要审批:1 是,0 否(写类动作默认 1)", "1"),
+            ("ApprovalFlowType", "varchar(64)", "否", "", "审批流类型(需审批时指定,如 S8_EXCEPTION_HANDLE)", "S8_EXCEPTION_HANDLE"),
+            ("AutomationLevel", "varchar(8)", "是", "L2", "自动化等级:L0/L1/L2/L3/L4(默认 L2;L3 仅限白名单高频低风险可逆动作,事后审计与抽检;L4 本期不开放)", "L2"),
+            ("IdemKey", "varchar(128)", "是", "", "幂等键模板(如 po_no+版本、po_line+批次;重复事件只记录不重复执行)", "po_no+版本"),
+            ("RollbackDesc", "varchar(256)", "否", "", "回滚方式(如 删除草稿、未答复前撤回、恢复原计划版本、生成反向变更、不可回滚留痕)", "删除草稿"),
+            ("SuggestTemplate", "varchar(1024)", "否", "", "建议文案模板(占位符如 {hours})", "欠料数据已停滞{hours}小时,建议重跑MRP采购申请生成"),
+            ("Enabled", "tinyint", "是", "1", "是否启用:1 启用,0 停用", "1"),
+        ],
+        "indexes": [
+            "唯一索引 uk_chain(TenantId, ChainCode)",
+            "普通索引 idx_trigger(TriggerEntity, TriggerEvent) —— 供预警结果匹配动作链",
+        ],
+    },
+    {
+        "sheet": "aidop_agent_tool_registry",
+        "name": "aidop_agent_tool_registry",
+        "cn": "智能体工具注册表",
+        "element": "本体要素:动作 Action(工具注册闸门)",
+        "desc": "工具注册闸门:仅注册工具可被 Planner 调用,须附业务语义描述;未注册工具不可调用。",
+        "fields": [
+            ("Id", "bigint", "是", "", "主键(雪花ID)", ""),
+            ("TenantId", "bigint", "是", "", "租户ID(强制注入)", "10001"),
+            ("ToolCode", "varchar(64)", "是", "", "工具编码(租户内唯一)", "TOOL_RERUN_MRP"),
+            ("ToolName", "varchar(128)", "是", "", "工具名称", "重跑MRP采购申请生成任务"),
+            ("ToolType", "varchar(32)", "是", "", "工具类型:SERVICE / JOB / SQL / API", "SERVICE"),
+            ("InvokeTarget", "varchar(256)", "是", "", "调用目标(服务/方法/端点,由闸门层路由)", "MaterialRequirementGenerationService.Generate"),
+            ("SemanticDesc", "varchar(512)", "是", "", "业务语义描述(供 LLM 理解,必填)", "按租户重跑MRP物料需求计算,生成采购申请"),
+            ("ParamSchema", "text", "否", "", "入参 JSON Schema(可选,用于参数校验)", "{\"tenantId\":\"long\"}"),
+            ("RiskLevel", "varchar(16)", "是", "MEDIUM", "风险等级:LOW / MEDIUM / HIGH(HIGH 强制审批)", "MEDIUM"),
+            ("ApprovalRequired", "tinyint", "是", "1", "是否强制审批:1 是,0 否", "1"),
+            ("Enabled", "tinyint", "是", "1", "是否启用:1 启用,0 停用", "1"),
+        ],
+        "indexes": [
+            "唯一索引 uk_tool(TenantId, ToolCode)",
+            "普通索引 idx_type(ToolType) —— 供闸门按类型路由",
+        ],
+    },
+]
+
+wb = Workbook()
+
+# ---------- Sheet 0:表总览 ----------
+ws = wb.active
+ws.title = "表总览"
+ws.sheet_view.showGridLines = False
+ws.merge_cells("A1:F1")
+c = ws["A1"]
+c.value = "Ai-DOP 智能体本体登记表结构设计(总览)"
+c.fill = TITLE_FILL
+c.font = TITLE_FONT
+c.alignment = CENTER
+ws.merge_cells("A2:F2")
+c = ws["A2"]
+c.value = "对应文档《Ai-DOP 本体驱动智能体建设方案》第三章;4 张表均含 TenantId 强制租户隔离,SqlSugar CodeFirst 挂入插件 Entity,缺省关闭不改变现有业务行为"
+c.font = SUB_FONT
+c.alignment = WRAP
+ws.row_dimensions[2].height = 34
+
+overview_headers = ["表名", "中文名", "承载本体要素", "用途", "租户隔离", "逻辑删除"]
+overview_rows = [
+    ["aidop_agent_entity", "智能体实体登记表", "实体 Entity", "登记业务对象与数据落点,巡检与推理的事实来源", "TenantId 强制注入", "IsDelete"],
+    ["aidop_agent_relation", "智能体关联登记表", "关联 Relation", "登记实体关系,根因推理沿此链路展开", "TenantId 强制注入", "IsDelete"],
+    ["aidop_agent_action_chain", "智能体动作链登记表", "动作 Action", "登记可执行动作与触发条件,优化建议据此起草", "TenantId 强制注入", "IsDelete"],
+    ["aidop_agent_tool_registry", "智能体工具注册表", "动作 Action(闸门)", "工具注册闸门,未注册工具不可被调用", "TenantId 强制注入", "IsDelete"],
+]
+ws.append([])
+ws.append(overview_headers)
+for r in overview_rows:
+    ws.append(r)
+
+widths = [30, 22, 18, 52, 18, 10]
+for i, w in enumerate(widths, 1):
+    ws.column_dimensions[ws.cell(row=4, column=i).column_letter].width = w
+for row in ws.iter_rows(min_row=4, max_row=4 + len(overview_rows), max_col=len(overview_headers)):
+    for cell in row:
+        cell.border = THIN_BORDER
+        cell.font = HEADER_FONT if cell.row == 4 else BODY_FONT
+        cell.alignment = CENTER if cell.row == 4 else WRAP
+        if cell.row == 4:
+            cell.fill = HEADER_FILL
+ws.row_dimensions[1].height = 24
+
+# ---------- 明细 Sheet ----------
+for tb in TABLES:
+    ws = wb.create_sheet(tb["sheet"])
+    ws.sheet_view.showGridLines = False
+    ncols = len(DETAIL_HEADERS)
+    last_col = ws.cell(row=1, column=ncols).column_letter
+
+    # 标题行
+    ws.merge_cells(f"A1:{last_col}1")
+    c = ws["A1"]
+    c.value = f"{tb['name']}({tb['cn']})"
+    c.fill = TITLE_FILL
+    c.font = TITLE_FONT
+    c.alignment = CENTER
+    ws.row_dimensions[1].height = 24
+
+    # 副标题行
+    ws.merge_cells(f"A2:{last_col}2")
+    c = ws["A2"]
+    c.value = f"{tb['element']} | {tb['desc']}"
+    c.font = SUB_FONT
+    c.alignment = WRAP
+    ws.row_dimensions[2].height = 30
+
+    # 表头
+    for i, h in enumerate(DETAIL_HEADERS, 1):
+        cell = ws.cell(row=3, column=i, value=h)
+        cell.fill = HEADER_FILL
+        cell.font = HEADER_FONT
+        cell.alignment = CENTER
+        cell.border = THIN_BORDER
+
+    # 数据行
+    row_idx = 4
+    seq = 0
+    for name, dtype, req, default, comment, sample in tb["fields"]:
+        seq += 1
+        vals = [seq, name, dtype, "是" if name == "Id" else "否", req, default or "", comment, sample]
+        for i, v in enumerate(vals, 1):
+            cell = ws.cell(row=row_idx, column=i, value=v)
+            cell.font = BODY_FONT
+            cell.alignment = CENTER if i in (1, 3, 4, 5, 6) else WRAP
+            cell.border = THIN_BORDER
+        row_idx += 1
+    for name, dtype, req, default, comment, sample in AUDIT_FIELDS:
+        seq += 1
+        vals = [seq, name, dtype, "否", req, default or "", comment, sample]
+        for i, v in enumerate(vals, 1):
+            cell = ws.cell(row=row_idx, column=i, value=v)
+            cell.font = BODY_FONT
+            cell.alignment = CENTER if i in (1, 3, 4, 5, 6) else WRAP
+            cell.border = THIN_BORDER
+        row_idx += 1
+
+    # 索引建议
+    ws.merge_cells(start_row=row_idx, start_column=1, end_row=row_idx, end_column=ncols)
+    cell = ws.cell(row=row_idx, column=1, value="建议索引:" + ";".join(tb["indexes"]))
+    cell.fill = NOTE_FILL
+    cell.font = BODY_FONT
+    cell.alignment = WRAP
+    for i in range(1, ncols + 1):
+        ws.cell(row=row_idx, column=i).border = THIN_BORDER
+        ws.cell(row=row_idx, column=i).fill = NOTE_FILL
+    ws.row_dimensions[row_idx].height = 26
+
+    for i, w in enumerate(DETAIL_WIDTHS, 1):
+        ws.column_dimensions[ws.cell(row=3, column=i).column_letter].width = w
+
+# ---------- Sheet:试点种子数据(P2 齐套四量问答) ----------
+ws = wb.create_sheet("试点种子数据")
+ws.sheet_view.showGridLines = False
+ncols = 8
+last_col = ws.cell(row=1, column=ncols).column_letter
+
+ws.merge_cells(f"A1:{last_col}1")
+c = ws["A1"]
+c.value = "P2 试点用例种子登记:工单物料齐套四量智能问答"
+c.fill = TITLE_FILL
+c.font = TITLE_FONT
+c.alignment = CENTER
+ws.row_dimensions[1].height = 24
+ws.merge_cells(f"A2:{last_col}2")
+c = ws["A2"]
+c.value = (
+    "对应文档《Ai-DOP 本体驱动智能体建设方案》5.5 节。业务人员齐套检查后发问「工单 XXX 的物料 A 欠多少?在库/在检/在途/占用各多少?原因?」,"
+    "智能体按本 Sheet 种子登记定位链路并调用只读聚合工具回答。落地时按此预置(全链路只读,不涉及动作链登记)。"
+)
+c.font = SUB_FONT
+c.alignment = WRAP
+ws.row_dimensions[2].height = 40
+
+def seed_block(start_row, title, headers, rows, widths):
+    ws.merge_cells(start_row=start_row, start_column=1, end_row=start_row, end_column=len(headers))
+    cell = ws.cell(row=start_row, column=1, value=title)
+    cell.fill = NOTE_FILL
+    cell.font = Font(name="微软雅黑", bold=True, size=10)
+    cell.alignment = Alignment(horizontal="left", vertical="center")
+    ws.row_dimensions[start_row].height = 22
+    hr = start_row + 1
+    for i, h in enumerate(headers, 1):
+        cell = ws.cell(row=hr, column=i, value=h)
+        cell.fill = HEADER_FILL
+        cell.font = HEADER_FONT
+        cell.alignment = CENTER
+        cell.border = THIN_BORDER
+    r = hr + 1
+    for row in rows:
+        for i, v in enumerate(row, 1):
+            cell = ws.cell(row=r, column=i, value=v)
+            cell.font = BODY_FONT
+            cell.alignment = WRAP
+            cell.border = THIN_BORDER
+        r += 1
+    for i, w in enumerate(widths, 1):
+        ws.column_dimensions[ws.cell(row=hr, column=i).column_letter].width = w
+    return r + 1
+
+# 实体登记种子
+r = seed_block(
+    4,
+    "① 实体登记种子(aidop_agent_entity)",
+    ["EntityCode", "EntityName", "SourceTable", "KeyField", "DisplayField", "StatusField", "备注"],
+    [
+        ["WORK_ORDER", "工单", "mes_morder", "Id", "morder_no", "MaterialSituation", "齐套状态字段"],
+        ["MATERIAL", "物料", "ItemMaster(在库量经中台 InvMaster)", "Id", "ItemNum", "", "在库 locStock 为物料属性,不单设实体"],
+        ["PUR_ORDER", "采购订单", "PurOrdDetail", "Id", "ItemNum", "", "在途量 = 发货量 − 收货量"],
+        ["QC_APPLY", "质检申请", "qms_qcp_inspecapplyn", "Id", "FBILLNO", "", "在检量来源"],
+        ["STOCK_OCCUPY", "物料占用", "ic_item_stockoccupy / srm_po_occupy", "Id", "item_num", "", "明细行 ID 列名不同:orderentry_id / entry_id"],
+    ],
+    [14, 12, 26, 10, 12, 14, 34],
+)
+
+# 关联登记种子
+r = seed_block(
+    r,
+    "② 关联登记种子(aidop_agent_relation)",
+    ["RelationCode", "RelationName", "FromEntity", "ToEntity", "RelationType", "FromField", "ToField", "备注"],
+    [
+        ["WO-MAT-DEMAND", "工单-物料需求", "WORK_ORDER", "MATERIAL", "N:M", "morder_no", "ItemNum", "经 dwd_requirement_examine_detail(need_count / use_qty / lack_qty 权威列)"],
+        ["MAT-PUR-INTRA", "物料-采购在途", "MATERIAL", "PUR_ORDER", "1:N", "ItemNum", "ItemNum", "在途量取 PurOrdDetail(发货 − 收货)"],
+        ["MAT-QC-CHECK", "物料-在检", "MATERIAL", "QC_APPLY", "1:N", "ItemNum", "FBILLNO", "在检量取 qms_qcp_inspecapplyn"],
+        ["MAT-OCCUPY", "物料-占用", "MATERIAL", "STOCK_OCCUPY", "1:N", "ItemNum", "item_num", "占用须单独汇总,宽表不单独成列"],
+    ],
+    [18, 14, 12, 12, 10, 12, 12, 40],
+)
+
+# 工具注册种子
+r = seed_block(
+    r,
+    "③ 工具注册种子(aidop_agent_tool_registry)",
+    ["ToolCode", "ToolName", "ToolType", "InvokeTarget", "SemanticDesc", "RiskLevel", "ApprovalRequired", "备注"],
+    [
+        [
+            "TOOL_KITTING_FOUR_QUANTITY",
+            "工单物料齐套四量查询",
+            "SERVICE",
+            "KittingFourQuantityQueryService.Query(workOrd, itemNum)",
+            "按工单号与物料号返回在库/在检/在途/占用四量与欠料数量(lack_qty 权威列),只读",
+            "LOW",
+            "0",
+            "须先由后端聚合(齐套宽表 + 165 库存 + 采购 + 质检 + 占用表),LLM 不直连数据库",
+        ],
+    ],
+    [24, 18, 10, 34, 40, 10, 12, 38],
+)
+
+# 执行流程与落地条件
+ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=8)
+cell = ws.cell(row=r, column=1, value="④ 问答执行流程:实体识别(工单号/物料号)→ 关联链路定位 → 工具取数 → 证据回答(附表名与记录号)")
+cell.fill = NOTE_FILL
+cell.font = Font(name="微软雅黑", bold=True, size=10)
+cell.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True)
+ws.row_dimensions[r].height = 22
+r += 1
+for t in [
+    "落地条件 1:注册聚合查询工具(见③),后端服务聚合四量,LLM 不直连数据库。",
+    "落地条件 2:占用单独取数,聚合服务汇总 ic_item_stockoccupy / srm_po_occupy。",
+    "落地条件 3:欠料口径对齐,直接引用 lack_qty 权威列,智能体不得用「需求−四量」自行重算。",
+]:
+    ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=8)
+    cell = ws.cell(row=r, column=1, value="· " + t)
+    cell.font = BODY_FONT
+    cell.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True)
+    r += 1
+
+# ---------- Sheet:场景示例库(5.6~5.9) ----------
+ws = wb.create_sheet("场景示例库")
+ws.sheet_view.showGridLines = False
+ncols = 8
+last_col = ws.cell(row=1, column=ncols).column_letter
+
+ws.merge_cells(f"A1:{last_col}1")
+c = ws["A1"]
+c.value = "场景示例库(对应方案 5.6~5.9 节)"
+c.fill = TITLE_FILL
+c.font = TITLE_FONT
+c.alignment = CENTER
+ws.row_dimensions[1].height = 24
+ws.merge_cells(f"A2:{last_col}2")
+c = ws["A2"]
+c.value = (
+    "四个业务场景的智能体落地示例:S1 交期提前影响分析、S2 产能偏差与建议人数、S3 交期分析与自动选供、库存安全库存/补货建议。"
+    "每场景列明触发事件、分析链路、输出建议与需登记工具;下方给出工具与实体/关联种子登记示例。"
+)
+c.font = SUB_FONT
+c.alignment = WRAP
+ws.row_dimensions[2].height = 36
+
+# 场景表
+title_row = 4
+ws.merge_cells(start_row=title_row, start_column=1, end_row=title_row, end_column=ncols)
+cell = ws.cell(row=title_row, column=1, value="① 场景清单")
+cell.fill = NOTE_FILL
+cell.font = Font(name="微软雅黑", bold=True, size=10)
+ws.row_dimensions[title_row].height = 22
+
+sc_headers = ["编号", "模块", "场景名称", "触发事件", "分析链路(实体-关联)", "输出建议示例", "需登记工具"]
+sc_rows = [
+    [
+        "5.6", "S1 产销协同", "客户交期提前影响分析",
+        "订单交期提前(confirm-delivery / sys_capacity_date 变更)",
+        "ORDER→WORK_ORDER→MATERIAL→PUR_ORDER→交货计划→发货",
+        "受影响工单 X 张(Y 张需重排);物料 A/B 缺料风险升高;PO-C 需催交;SH-D 建议改期",
+        "TOOL_DUE_DATE_IMPACT",
+    ],
+    [
+        "5.7", "S2 制造协同", "理论/实际产能分析与建议人数",
+        "产能偏差巡检(理论−实际超阈值);日计划生成",
+        "PROD_LINE→WORK_ORDER(计划工序量)→LINE_SKILL(标准工时/技能)",
+        "瓶颈工序清单与稼动率提升建议;建议人数 = Σ(工序量×标准工时)÷人均有效工时,分班输出",
+        "TOOL_CAPACITY_GAP、TOOL_HEADCOUNT_SUGGEST",
+    ],
+    [
+        "5.8", "S3 供应协同", "物料交期分析与自动选供",
+        "履约偏差巡检(实际交期−理论交期);新采购需求产生",
+        "MATERIAL→SUPPLIER(quota_rate / lead_time)→PUR_ORDER(DueDate vs 收货实绩)",
+        "供应商改进建议(配额下调等);自动选供:交期匹配度+履约率+配额排序推荐,审批后更新货源",
+        "TOOL_SUPPLIER_PERF、TOOL_SUPPLIER_SELECT",
+    ],
+    [
+        "5.9", "库存管理", "安全库存与补货建议(库存优化模型)",
+        "库存对账变动 / 持续消耗触发",
+        "INVENTORY→MATERIAL(SafetyStk / 消耗历史)→SUPPLIER(lead_time)",
+        "正向分布:SS = z×σd×√L;泊松分布:按服务水平查分位数定 ROP;输出补货量(在手+在途扣减)",
+        "TOOL_SAFETY_STOCK",
+    ],
+]
+hr = title_row + 1
+for i, h in enumerate(sc_headers, 1):
+    cell = ws.cell(row=hr, column=i, value=h)
+    cell.fill = HEADER_FILL
+    cell.font = HEADER_FONT
+    cell.alignment = CENTER
+    cell.border = THIN_BORDER
+r = hr + 1
+for row in sc_rows:
+    for i, v in enumerate(row, 1):
+        cell = ws.cell(row=r, column=i, value=v)
+        cell.font = BODY_FONT
+        cell.alignment = WRAP
+        cell.border = THIN_BORDER
+    ws.row_dimensions[r].height = 40
+    r += 1
+sc_widths = [8, 12, 20, 26, 30, 40, 24]
+for i, w in enumerate(sc_widths, 1):
+    ws.column_dimensions[ws.cell(row=hr, column=i).column_letter].width = w
+r += 1
+
+# 工具种子表
+ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=ncols)
+cell = ws.cell(row=r, column=1, value="② 新增工具注册种子(aidop_agent_tool_registry)")
+cell.fill = NOTE_FILL
+cell.font = Font(name="微软雅黑", bold=True, size=10)
+ws.row_dimensions[r].height = 22
+r += 1
+tool_headers = ["ToolCode", "ToolName", "ToolType", "InvokeTarget", "SemanticDesc", "RiskLevel", "ApprovalRequired", "备注"]
+tool_rows = [
+    ["TOOL_DUE_DATE_IMPACT", "S1 交期提前影响分析", "SERVICE", "DueDateImpactAnalysisService.Analyze(orderId, newDueDate)", "沿订单→工单→物料→采购→交货→发货链计算交期变更影响,输出受影响清单与建议", "MEDIUM", "0", "只读分析"],
+    ["TOOL_CAPACITY_GAP", "S2 产能偏差分析", "SERVICE", "CapacityGapAnalysisService.Analyze(line, dateRange)", "对比理论产能(ProdLineDetail.Rate×日历)与实际完工实绩,输出瓶颈与改进建议", "LOW", "0", "只读分析"],
+    ["TOOL_HEADCOUNT_SUGGEST", "S2 建议人数计算", "SERVICE", "HeadcountSuggestService.Suggest(planDate)", "按当日计划工序量×标准工时÷人均有效工时,输出分班建议人数", "LOW", "0", "只读分析"],
+    ["TOOL_SUPPLIER_PERF", "S3 供应商履约分析", "SERVICE", "SupplierPerfAnalysisService.Analyze(itemNum, dateRange)", "按物料对比理论交期与实际交期,输出供应商履约率与改进建议", "LOW", "0", "只读分析"],
+    ["TOOL_SUPPLIER_SELECT", "S3 自动选供建议", "SERVICE", "SupplierSelectService.Suggest(demand)", "按交期匹配度+历史履约率+配额排序推荐供应商,输出建议(更新货源须审批)", "MEDIUM", "1", "写类须审批"],
+    ["TOOL_SAFETY_STOCK", "安全库存/补货建议", "SERVICE", "SafetyStockService.Suggest(itemNum)", "按消耗历史拟合正态/泊松分布,计算安全库存与再订货点(更新 SafetyStk 须审批)", "MEDIUM", "1", "写类须审批"],
+]
+for i, h in enumerate(tool_headers, 1):
+    cell = ws.cell(row=r, column=i, value=h)
+    cell.fill = HEADER_FILL
+    cell.font = HEADER_FONT
+    cell.alignment = CENTER
+    cell.border = THIN_BORDER
+r += 1
+for row in tool_rows:
+    for i, v in enumerate(row, 1):
+        cell = ws.cell(row=r, column=i, value=v)
+        cell.font = BODY_FONT
+        cell.alignment = WRAP
+        cell.border = THIN_BORDER
+    r += 1
+tool_widths = [24, 18, 10, 36, 44, 10, 12, 12]
+for i, w in enumerate(tool_widths, 1):
+    ws.column_dimensions[ws.cell(row=r - len(tool_rows), column=i).column_letter].width = w
+r += 1
+
+# 实体/关联种子表
+ws.merge_cells(start_row=r, start_column=1, end_row=r, end_column=ncols)
+cell = ws.cell(row=r, column=1, value="③ 新增实体/关联登记种子(aidop_agent_entity / aidop_agent_relation)")
+cell.fill = NOTE_FILL
+cell.font = Font(name="微软雅黑", bold=True, size=10)
+ws.row_dimensions[r].height = 22
+r += 1
+seed_headers = ["登记表", "编码", "名称", "关键字段/关系", "备注"]
+seed_rows = [
+    ["实体", "ORDER", "销售订单", "crm_seorder / crm_seorderentry", "交期字段 sys_capacity_date"],
+    ["实体", "SUPPLIER", "供应商", "货源表(quota_rate / lead_time / quota_priority)", "履约与选供依据"],
+    ["实体", "PROD_LINE", "产线", "ProdLineDetail.Rate(标准速率)", "理论产能依据"],
+    ["实体", "LINE_SKILL", "产线技能", "S0 产线技能主数据", "建议人数计算依据"],
+    ["实体", "INVENTORY", "库存", "S5 库存表 / SafetyStk", "安全库存字段已在 AdoS0ItemMaster"],
+    ["关联", "ORDER-WO", "订单-工单", "ORDER→WORK_ORDER(BusinessID=crm_seorderentry.Id)", "交期影响链起点"],
+    ["关联", "MAT-SUPPLIER", "物料-供应商货源", "MATERIAL→SUPPLIER(ItemNum 匹配,含配额/提前期)", "自动选供依据"],
+    ["关联", "PROD_LINE-WO", "产线-工单排程", "PROD_LINE→WORK_ORDER(工序计划)", "产能偏差归因"],
+]
+for i, h in enumerate(seed_headers, 1):
+    cell = ws.cell(row=r, column=i, value=h)
+    cell.fill = HEADER_FILL
+    cell.font = HEADER_FONT
+    cell.alignment = CENTER
+    cell.border = THIN_BORDER
+r += 1
+for row in seed_rows:
+    for i, v in enumerate(row, 1):
+        cell = ws.cell(row=r, column=i, value=v)
+        cell.font = BODY_FONT
+        cell.alignment = WRAP
+        cell.border = THIN_BORDER
+    r += 1
+seed_widths = [10, 16, 16, 46, 28]
+for i, w in enumerate(seed_widths, 1):
+    ws.column_dimensions[ws.cell(row=r - len(seed_rows), column=i).column_letter].width = w
+
+wb.save(OUT)
+print(OUT)

二進制
doc/plan/Ai-DOP智能体建设任务计划.docx


二進制
doc/plan/Ai-DOP本体驱动智能体建设方案.docx


二進制
doc/plan/Ai-DOP本体驱动智能体建设方案_理解与解读.docx


二進制
doc/plan/_img/attribution_chain.png