后端接口设计文档-0211会议版.md 36 KB

灵越智报 2.0 后端接口设计文档

基于 2026-02-11 会议讨论设计(全新版本)

使用模型: Claude Opus 4.5

最后更新: 2026-02-11

负责人: 何文松(后端接口+Mock数据)、陈鑫(前端)、吕强(DSL/规则引擎)


目录

  1. 设计概述
  2. 核心概念
  3. 要素系统
  4. 接口规范
  5. 报告管理接口
  6. 模板管理接口
  7. 静态要素接口
  8. 动态要素接口(数据规则)
  9. 附件管理接口
  10. DSL 规则引擎接口
  11. Mock 数据说明

1. 设计概述

1.1 会议核心决策

设计要点 说明
静态要素 模板中固定的文本,不需要计算
动态要素 模板中需要通过规则计算填充的内容,用占位符 {{}} 标识
占位符 动态要素在模板中的标识符,格式为 {{namespace.field}}{{+tableName}}
数据规则 为动态要素配置的工作流,定义如何计算/提取要素的值
DSL 语言 自定义领域建模语言,用于描述规则逻辑,由 Python 服务处理
工作流编辑 固定三块结构:数据输入 → Action → 执行结果,不需要拖拽
规则复用 标准产品手动选择数据源;定制项目自动精准提取

1.2 模板与原文的关系

┌─────────────────────────────────────────────────────────────┐
│                         模板                                │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 项目编号:{{basicInfo.projectCode}}                    │  │  ← 动态要素(文本型)
│  │ 评审对象:{{project.reviewObject}}                     │  │  ← 动态要素(文本型)
│  │ 评审得分:{{project.resultScore}}                      │  │
│  │ ...                                                   │  │
│  │ {{project.reviewObjectDescription}}                   │  │  ← 动态要素(段落型)
│  │ ...                                                   │  │
│  │ {{+review_status}}                                    │  │  ← 动态要素(表格型)
│  └───────────────────────────────────────────────────────┘  │
│                                                             │
│  静态要素:模板中固定不变的文本(如"电力安全生产标准化")      │
└─────────────────────────────────────────────────────────────┘
                            ↓ 渲染(填充动态要素)
┌─────────────────────────────────────────────────────────────┐
│                         原文                                │
│  ┌───────────────────────────────────────────────────────┐  │
│  │ 项目编号:BZ-0092-2024                                 │  │
│  │ 评审对象:中国电建集团成都勘测设计研究院有限公司          │  │
│  │ 评审得分:93.33                                        │  │
│  │ ...                                                   │  │
│  │ 中国电建集团成都勘测设计研究院有限公司(简称:成都院)... │  │
│  │ ...                                                   │  │
│  │ ┌────────┬────────┬────────┐                         │  │
│  │ │ 序号   │ 项目   │ 问题   │                         │  │
│  │ ├────────┼────────┼────────┤                         │  │
│  │ │ 1      │ ...    │ ...    │                         │  │
│  │ └────────┴────────┴────────┘                         │  │
│  └───────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘

1.3 年前交付目标(2月14日)

  • 前端:界面定型、工作流编辑页面可演示(逻辑通,数据可以是假的)
  • 后端:接口定义完成、Mock 数据准备好(两个报告场景)
  • DSL:语法设计、Python 转换接口(吕强负责)

1.4 系统调用关系

前端 (Vue3)
    ↓ HTTP
Java 后端 (document-service)
    ↓ HTTP(规则相关)
Python DSL 服务 (dsl-service)
    ↓
执行结果返回

2. 核心概念

2.1 术语定义

术语 说明 示例
模板 包含静态要素和动态要素占位符的报告模板 电力安全生产标准化复审报告模板
原文 用户上传的实际报告(渲染后的结果) 成都院复审报告.docx
静态要素 模板中固定不变的文本 "电力安全生产标准化"、"复 审 报 告"
动态要素 需要通过规则计算填充的内容 项目编号、评审对象、评审得分、现场复审情况表
占位符 动态要素在模板中的标识符,用 {{}} 包裹 {{basicInfo.projectCode}}{{+review_status}}
数据规则 为动态要素配置的工作流,定义如何获取要素值 从附件提取委托单位 → 填充到"评审对象"要素
附件 报告中的材料文件 复审通知.docx、评审报告.pdf
实体 附件中识别出的命名实体 华东电力设计院(ORG)、张经理(PERSON)

2.2 静态要素 vs 动态要素

对比项 静态要素 动态要素
定义 模板中固定不变的文本 需要通过规则计算填充的内容
在模板中 直接显示文本 用占位符 {{}} 标识
来源 模板本身 规则计算结果
编辑方式 直接修改模板 配置数据规则
存储内容 文本值 要素定义 + 规则配置 + 计算结果
示例 "电力安全生产标准化" 项目编号(占位符:{{basicInfo.projectCode}}

3. 要素系统

3.1 动态要素与占位符

动态要素是需要通过规则计算填充的内容,占位符是动态要素在模板中的标识符。

动态要素:项目编号
    ↓ 在模板中用占位符标识
占位符:{{basicInfo.projectCode}}
    ↓ 通过数据规则计算
要素值:BZ-0092-2024

3.2 占位符格式

占位符使用双花括号包裹,格式为:{{namespace.fieldName}}

{{basicInfo.projectCode}}      → 动态要素"项目编号"
{{project.reviewObject}}       → 动态要素"评审对象"
{{project.resultScore}}        → 动态要素"评审得分"

3.3 动态要素类型

要素类型 占位符格式 说明 示例
文本型 {{namespace.field}} 短文本,通常是单行 项目编号 {{basicInfo.projectCode}}
段落型 {{namespace.field}} 长文本,可能是多段落 企业简介 {{project.reviewObjectDescription}}
表格型 {{+tableName}} 表格数据,以 + 前缀标识 现场复审情况表 {{+review_status}}
图片型 {{@imageName}} 图片,以 @ 前缀标识(预留) 组织机构图 {{@org_chart}}

3.4 命名空间

命名空间 说明 包含的动态要素
basicInfo 基础信息 项目编号、申请级别、申请日期
project 项目信息 评审对象、评审对象简称、评审得分、评审级别
company 公司信息 公司名称、公司地址、法人代表
review 评审信息 评审开始日期、评审结束日期、评审期

3.5 动态要素示例(来自真实模板)

文本型动态要素

项目编号:{{basicInfo.projectCode}}          ← 动态要素"项目编号"
评审对象:{{project.reviewObject}}           ← 动态要素"评审对象"
申请类别:电力勘测设计企业   级别:{{basicInfo.requestLevel}}
评审得分:{{project.resultScore}}   级别:{{project.resultLevel}}
评审日期:{{project.workStartAt}}至{{project.workEndAt}}

段落型动态要素

前  言
{{project.reviewObjectSummary}}              ← 动态要素"评审对象概述"

1.1  企业简介
{{project.reviewObjectDescription}}。        ← 动态要素"企业简介"

表格型动态要素

4  现场复审情况
{{+review_status}}                           ← 动态要素"现场复审情况表"

4.1  核心要求复审情况
4.1.1  目标职责
{{+target_responsibility}}                   ← 动态要素"目标职责评审表"

3.6 工作流编辑界面结构

┌─────────────────────────────────────────────────────────────┐
│                      数据规则编辑                            │
│              动态要素: 评审对象                              │
│              占位符: {{project.reviewObject}}                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────┐                                        │
│  │   数据输入       │  ← 下拉选择:附件 → 实体/要素          │
│  │                 │                                        │
│  │  输入1: [下拉▼]  │  选择:复审通知 → 委托单位(ORG)        │
│  │  输入2: [下拉▼]  │  选择:其他动态要素                    │
│  │  Prompt: [文本]  │  固定文本:"请帮我总结..."            │
│  └────────┬────────┘                                        │
│           │                                                 │
│           ▼                                                 │
│  ┌─────────────────┐                                        │
│  │    Action       │  ← 选择动作类型                        │
│  │                 │                                        │
│  │  类型: [下拉▼]   │  LLM生成 / 实体提取 / 计算 / ...      │
│  │  配置: [...]     │  模型选择、参数配置等                  │
│  └────────┬────────┘                                        │
│           │                                                 │
│           ▼                                                 │
│  ┌─────────────────┐                                        │
│  │   执行结果       │                                        │
│  │                 │                                        │
│  │  要素类型: 文本   │                                       │
│  │  当前值: 中国电建集团成都勘测设计研究院有限公司           │
│  │  [Run] 按钮      │  点击运行查看结果                      │
│  └─────────────────┘                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

4. 接口规范

4.1 基础规范

  • Base URL: /api/v1
  • 认证方式: Bearer Token (JWT)
  • 内容类型: application/json

4.2 通用响应格式

{
  "code": 200,
  "message": "success",
  "data": { ... },
  "timestamp": 1707638400000
}

4.3 分页参数

参数 类型 说明
page int 页码,从 1 开始
size int 每页数量,默认 20

5. 报告管理接口

5.1 获取报告列表(我的文档)

GET /api/v1/reports

请求参数

参数 类型 必填 说明
status string draft/archived/published
keyword string 标题搜索
page int 页码
size int 每页数量

响应示例

{
  "code": 200,
  "data": {
    "total": 2,
    "list": [
      {
        "id": "rpt-001",
        "title": "成都院复审报告",
        "templateId": "tpl-001",
        "templateName": "电力安全生产标准化复审报告",
        "status": "draft",
        "sourceReportId": null,
        "createTime": "2026-02-10T10:30:00"
      },
      {
        "id": "rpt-002",
        "title": "华东院复审报告",
        "templateId": "tpl-001",
        "templateName": "电力安全生产标准化复审报告",
        "status": "draft",
        "sourceReportId": "rpt-001",
        "createTime": "2026-02-11T14:00:00"
      }
    ]
  }
}

5.2 获取报告详情

GET /api/v1/reports/{reportId}

响应示例

{
  "code": 200,
  "data": {
    "id": "rpt-001",
    "title": "成都院复审报告",
    "templateId": "tpl-001",
    "templateName": "电力安全生产标准化复审报告",
    "status": "draft",
    "contentHtml": "<div>项目编号:<span data-element='basicInfo.projectCode'>BZ-0092-2024</span>...</div>",
    "sourceReportId": null,
    "createTime": "2026-02-10T10:30:00",
    "dynamicElementCount": 45,
    "filledCount": 38
  }
}

5.3 创建报告(基于模板)

POST /api/v1/reports

请求体

{
  "title": "新报告",
  "templateId": "tpl-001"
}

5.4 基于已有报告创建(复制)

会议要点:从成都院复制到华东院,复制规则,不复制数据

POST /api/v1/reports/{reportId}/copy

请求体

{
  "title": "华东院复审报告"
}

响应说明

  • 复制所有数据规则的配置(DSL 结构)
  • 复制动态要素定义
  • 不复制附件(需要重新上传)
  • 不复制规则中的数据源引用(需要重新选择)
  • 不复制动态要素的值(需要重新计算)

5.5 删除报告

DELETE /api/v1/reports/{reportId}

5.6 渲染报告(填充动态要素)

POST /api/v1/reports/{reportId}/render

说明:执行所有数据规则,将结果填充到动态要素中

响应示例

{
  "code": 200,
  "data": {
    "reportId": "rpt-001",
    "status": "success",
    "renderedHtml": "<div>项目编号:BZ-0092-2024...</div>",
    "elementsFilled": 38,
    "elementsFailed": 7,
    "failedElements": [
      { "elementKey": "project.target", "elementName": "目标", "error": "数据源未配置" }
    ]
  }
}

6. 模板管理接口

6.1 获取模板列表

GET /api/v1/templates

响应示例

{
  "code": 200,
  "data": [
    {
      "id": "tpl-001",
      "name": "电力安全生产标准化复审报告",
      "category": "安全评审",
      "dynamicElementCount": 45,
      "tableElementCount": 3,
      "createTime": "2026-01-15T10:00:00"
    }
  ]
}

6.2 获取模板详情

GET /api/v1/templates/{templateId}

响应示例

{
  "code": 200,
  "data": {
    "id": "tpl-001",
    "name": "电力安全生产标准化复审报告",
    "category": "安全评审",
    "contentHtml": "<div>项目编号:{{basicInfo.projectCode}}...</div>",
    "dynamicElements": [
      {
        "elementKey": "basicInfo.projectCode",
        "elementName": "项目编号",
        "elementType": "text",
        "namespace": "basicInfo",
        "field": "projectCode",
        "required": true
      },
      {
        "elementKey": "project.reviewObject",
        "elementName": "评审对象",
        "elementType": "text",
        "namespace": "project",
        "field": "reviewObject",
        "required": true
      },
      {
        "elementKey": "project.reviewObjectDescription",
        "elementName": "企业简介",
        "elementType": "paragraph",
        "namespace": "project",
        "field": "reviewObjectDescription",
        "required": true
      },
      {
        "elementKey": "+review_status",
        "elementName": "现场复审情况表",
        "elementType": "table",
        "namespace": null,
        "field": "review_status",
        "required": true,
        "tableColumns": ["序号", "项目", "存在的问题", "扣分标准"]
      }
    ]
  }
}

6.3 获取模板的动态要素列表

GET /api/v1/templates/{templateId}/dynamic-elements

响应示例

{
  "code": 200,
  "data": {
    "textElements": [
      { "elementKey": "basicInfo.projectCode", "elementName": "项目编号", "namespace": "basicInfo" },
      { "elementKey": "project.reviewObject", "elementName": "评审对象", "namespace": "project" },
      { "elementKey": "project.resultScore", "elementName": "评审得分", "namespace": "project" },
      { "elementKey": "project.resultLevel", "elementName": "评审级别", "namespace": "project" },
      { "elementKey": "basicInfo.requestLevel", "elementName": "申请级别", "namespace": "basicInfo" }
    ],
    "paragraphElements": [
      { "elementKey": "project.reviewObjectSummary", "elementName": "评审对象概述", "namespace": "project" },
      { "elementKey": "project.reviewObjectDescription", "elementName": "企业简介", "namespace": "project" },
      { "elementKey": "project.target", "elementName": "目标", "namespace": "project" },
      { "elementKey": "project.duty", "elementName": "组织机构和职责", "namespace": "project" }
    ],
    "tableElements": [
      { "elementKey": "+review_status", "elementName": "现场复审情况表", "columns": ["序号", "项目", "存在的问题", "扣分标准"] },
      { "elementKey": "+target_responsibility", "elementName": "目标职责评审表", "columns": ["序号", "项目", "存在的问题", "扣分标准"] },
      { "elementKey": "+institutionalized_management", "elementName": "制度化管理评审表", "columns": ["序号", "项目", "存在的问题", "扣分标准"] }
    ]
  }
}

7. 静态要素接口

说明:静态要素是模板中的固定文本,通常不需要修改

7.1 获取报告的静态要素列表

GET /api/v1/reports/{reportId}/static-elements

响应示例

{
  "code": 200,
  "data": [
    {
      "id": "elem-001",
      "elementKey": "title_main",
      "elementName": "主标题",
      "elementValue": "电力安全生产标准化",
      "elementType": "text",
      "editable": false
    },
    {
      "id": "elem-002",
      "elementKey": "承诺书_固定文本",
      "elementName": "承诺书内容",
      "elementValue": "湖北安源安全环保科技有限公司是经中国电力建设企业协会批准的...",
      "elementType": "paragraph",
      "editable": false
    }
  ]
}

8. 动态要素接口(数据规则)

核心接口:对应前端工作流编辑页面,用于配置动态要素的数据规则

8.1 获取报告的动态要素列表(含规则状态)

GET /api/v1/reports/{reportId}/dynamic-elements

响应示例

{
  "code": 200,
  "data": {
    "total": 45,
    "configured": 38,
    "unconfigured": 7,
    "list": [
      {
        "elementKey": "basicInfo.projectCode",
        "elementName": "项目编号",
        "elementType": "text",
        "hasRule": true,
        "ruleId": "rule-001",
        "currentValue": "BZ-0092-2024",
        "lastRunStatus": "success"
      },
      {
        "elementKey": "project.reviewObject",
        "elementName": "评审对象",
        "elementType": "text",
        "hasRule": true,
        "ruleId": "rule-002",
        "currentValue": "中国电建集团成都勘测设计研究院有限公司",
        "lastRunStatus": "success"
      },
      {
        "elementKey": "project.target",
        "elementName": "目标",
        "elementType": "paragraph",
        "hasRule": false,
        "ruleId": null,
        "currentValue": null,
        "lastRunStatus": null
      },
      {
        "elementKey": "+review_status",
        "elementName": "现场复审情况表",
        "elementType": "table",
        "hasRule": true,
        "ruleId": "rule-010",
        "currentValue": "[{\"序号\":1,\"项目\":\"5.1.1.1\\n目标制定\",...}]",
        "lastRunStatus": "success"
      }
    ]
  }
}

8.2 获取动态要素的数据规则详情(工作流配置)

GET /api/v1/reports/{reportId}/dynamic-elements/{elementKey}/rule

响应示例

{
  "code": 200,
  "data": {
    "id": "rule-001",
    "elementKey": "basicInfo.projectCode",
    "elementName": "项目编号",
    "elementType": "text",
    "description": "从复审通知中提取项目编号",
    "ruleType": "extraction",
    "status": "active",
    
    "inputs": [
      {
        "inputKey": "input1",
        "inputName": "复审通知",
        "inputType": "attachment_ref",
        "refAttachmentId": 1,
        "refAttachmentName": "01-复审通知"
      }
    ],
    
    "action": {
      "actionType": "extract_pattern",
      "config": {
        "pattern": "项目编号[::](\\S+)",
        "group": 1
      }
    },
    
    "output": {
      "currentValue": "BZ-0092-2024",
      "lastRunTime": "2026-02-11T14:00:00"
    },
    
    "dslContent": "RULE extract_project_code INPUT input1 REF_ATTACHMENT 1 ACTION extract_pattern PATTERN '项目编号[::](\\S+)'"
  }
}

8.3 创建/更新动态要素的数据规则

PUT /api/v1/reports/{reportId}/dynamic-elements/{elementKey}/rule

请求体

{
  "description": "从复审通知中提取评审对象",
  "ruleType": "extraction",
  "inputs": [
    {
      "inputKey": "input1",
      "inputName": "复审通知",
      "inputType": "attachment_ref",
      "refAttachmentId": 1
    }
  ],
  "action": {
    "actionType": "extract_entity",
    "config": {
      "entityType": "ORG",
      "businessLabel": "评审对象",
      "selectStrategy": "first"
    }
  }
}

8.4 删除动态要素的数据规则

DELETE /api/v1/reports/{reportId}/dynamic-elements/{elementKey}/rule

8.5 运行动态要素的数据规则

会议要点:工作流编辑页面的"Run"按钮

POST /api/v1/reports/{reportId}/dynamic-elements/{elementKey}/run

响应示例

{
  "code": 200,
  "data": {
    "elementKey": "project.reviewObject",
    "elementName": "评审对象",
    "status": "success",
    "outputValue": "中国电建集团成都勘测设计研究院有限公司",
    "executionTime": 1500
  }
}

8.6 批量运行所有数据规则

POST /api/v1/reports/{reportId}/dynamic-elements/run-all

响应示例

{
  "code": 200,
  "data": {
    "total": 45,
    "success": 38,
    "failed": 7,
    "results": [
      { "elementKey": "basicInfo.projectCode", "elementName": "项目编号", "status": "success", "value": "BZ-0092-2024" },
      { "elementKey": "project.target", "elementName": "目标", "status": "failed", "error": "数据源未配置" }
    ]
  }
}

8.7 获取可选的数据输入源

会议要点:工作流编辑时,数据输入下拉列表的选项

GET /api/v1/reports/{reportId}/rule-input-sources

响应示例

{
  "code": 200,
  "data": {
    "attachments": [
      {
        "id": 1,
        "displayName": "01-复审通知",
        "fileName": "复审通知.docx",
        "entities": [
          { "id": 1, "entityType": "ORG", "entityText": "中国电建集团成都勘测设计研究院有限公司", "businessLabel": "评审对象" },
          { "id": 2, "entityType": "ORG", "entityText": "湖北安源安全环保科技有限公司", "businessLabel": "评审单位" },
          { "id": 3, "entityType": "DATE", "entityText": "2024年7月13日", "businessLabel": "评审开始日期" }
        ]
      },
      {
        "id": 2,
        "displayName": "02-评审报告",
        "fileName": "评审报告.pdf",
        "entities": [
          { "id": 4, "entityType": "NUMBER", "entityText": "93.33", "businessLabel": "评审得分" }
        ]
      }
    ],
    "otherElements": [
      { "elementKey": "basicInfo.projectCode", "elementName": "项目编号", "hasValue": true },
      { "elementKey": "project.reviewObject", "elementName": "评审对象", "hasValue": true }
    ]
  }
}

8.8 输入类型枚举

说明 使用场景
attachment_ref 引用附件 选择附件作为输入
entity_ref 引用附件中的实体 选择附件中的某个实体
element_ref 引用其他动态要素 要素串联
text 固定文本 Prompt、固定参数
number 固定数值 数值参数

8.9 动作类型枚举

说明 适用要素类型
extract_entity 提取实体 文本型
extract_pattern 正则提取 文本型
llm_generate LLM 生成 文本型、段落型
llm_summarize LLM 摘要 段落型
extract_table 提取表格 表格型
llm_generate_table LLM 生成表格 表格型
calculate 数值计算 文本型(数值)
condition 条件判断 文本型

9. 附件管理接口

9.1 获取报告附件列表

GET /api/v1/reports/{reportId}/attachments

响应示例

{
  "code": 200,
  "data": [
    {
      "id": 1,
      "displayName": "01-复审通知",
      "fileName": "复审通知.docx",
      "fileType": "docx",
      "fileSize": 102400,
      "sortOrder": 1,
      "parseStatus": "completed",
      "entityCount": 15,
      "createTime": "2026-02-10T10:30:00"
    },
    {
      "id": 2,
      "displayName": "02-评审报告",
      "fileName": "评审报告.pdf",
      "fileType": "pdf",
      "fileSize": 512000,
      "sortOrder": 2,
      "parseStatus": "completed",
      "entityCount": 25,
      "createTime": "2026-02-10T10:35:00"
    }
  ]
}

9.2 上传附件

POST /api/v1/reports/{reportId}/attachments
Content-Type: multipart/form-data

请求参数

参数 类型 必填 说明
file file 文件
displayName string 显示名称

9.3 删除附件

DELETE /api/v1/reports/{reportId}/attachments/{attachmentId}

9.4 获取附件中的实体列表

GET /api/v1/reports/{reportId}/attachments/{attachmentId}/entities

响应示例

{
  "code": 200,
  "data": [
    {
      "id": 1,
      "entityType": "ORG",
      "entityText": "中国电建集团成都勘测设计研究院有限公司",
      "businessLabel": "评审对象",
      "confidence": 0.95,
      "occurrenceCount": 15
    },
    {
      "id": 2,
      "entityType": "ORG",
      "entityText": "湖北安源安全环保科技有限公司",
      "businessLabel": "评审单位",
      "confidence": 0.92,
      "occurrenceCount": 8
    },
    {
      "id": 3,
      "entityType": "PERSON",
      "entityText": "何彦锋",
      "businessLabel": "董事长",
      "confidence": 0.88,
      "occurrenceCount": 3
    },
    {
      "id": 4,
      "entityType": "DATE",
      "entityText": "2024年7月13日",
      "businessLabel": "评审开始日期",
      "confidence": 0.99,
      "occurrenceCount": 2
    },
    {
      "id": 5,
      "entityType": "NUMBER",
      "entityText": "93.33",
      "businessLabel": "评审得分",
      "confidence": 0.99,
      "occurrenceCount": 1
    }
  ]
}

9.5 更新实体的业务标签

PUT /api/v1/reports/{reportId}/attachments/{attachmentId}/entities/{entityId}

请求体

{
  "businessLabel": "委托单位"
}

10. DSL 规则引擎接口

说明:这些接口由 Java 后端调用 Python DSL 服务,前端不直接调用

10.1 转换规则配置为 DSL

POST /internal/dsl/convert

10.2 执行 DSL 规则

POST /internal/dsl/execute

10.3 验证 DSL 语法

POST /internal/dsl/validate

11. Mock 数据说明

11.1 Mock 数据场景

根据会议要求,需要准备两个场景:

场景 说明
场景1:成都院报告 原始报告,有完整的附件、动态要素规则配置
场景2:华东院报告 从成都院复制,规则结构相同但数据源为空

11.2 Mock 模板数据

{
  "templates": [
    {
      "id": "tpl-001",
      "name": "电力安全生产标准化复审报告",
      "category": "安全评审",
      "dynamicElements": [
        { "elementKey": "basicInfo.projectCode", "elementName": "项目编号", "elementType": "text" },
        { "elementKey": "project.reviewObject", "elementName": "评审对象", "elementType": "text" },
        { "elementKey": "project.reviewObjectAlias", "elementName": "评审对象简称", "elementType": "text" },
        { "elementKey": "basicInfo.requestLevel", "elementName": "申请级别", "elementType": "text" },
        { "elementKey": "project.resultScore", "elementName": "评审得分", "elementType": "text" },
        { "elementKey": "project.resultLevel", "elementName": "评审级别", "elementType": "text" },
        { "elementKey": "project.workStartAt", "elementName": "评审开始日期", "elementType": "text" },
        { "elementKey": "project.workEndAt", "elementName": "评审结束日期", "elementType": "text" },
        { "elementKey": "project.createdAt", "elementName": "报告日期", "elementType": "text" },
        { "elementKey": "project.reviewObjectSummary", "elementName": "评审对象概述", "elementType": "paragraph" },
        { "elementKey": "project.reviewObjectDescription", "elementName": "企业简介", "elementType": "paragraph" },
        { "elementKey": "project.target", "elementName": "目标", "elementType": "paragraph" },
        { "elementKey": "project.duty", "elementName": "组织机构和职责", "elementType": "paragraph" },
        { "elementKey": "+review_status", "elementName": "现场复审情况表", "elementType": "table" },
        { "elementKey": "+target_responsibility", "elementName": "目标职责评审表", "elementType": "table" },
        { "elementKey": "+institutionalized_management", "elementName": "制度化管理评审表", "elementType": "table" }
      ]
    }
  ]
}

11.3 Mock 报告数据

{
  "reports": [
    {
      "id": 1001,
      "title": "成都院复审报告",
      "templateId": "tpl-001",
      "status": "draft",
      "sourceReportId": null
    },
    {
      "id": 1002,
      "title": "华东院复审报告",
      "templateId": "tpl-001",
      "status": "draft",
      "sourceReportId": 1001
    }
  ]
}

11.4 Mock 动态要素值数据(成都院)

{
  "elementValues": [
    { "elementKey": "basicInfo.projectCode", "value": "BZ-0092-2024" },
    { "elementKey": "project.reviewObject", "value": "中国电建集团成都勘测设计研究院有限公司" },
    { "elementKey": "project.reviewObjectAlias", "value": "成都院" },
    { "elementKey": "basicInfo.requestLevel", "value": "一级" },
    { "elementKey": "project.resultScore", "value": "93.33" },
    { "elementKey": "project.resultLevel", "value": "一级" },
    { "elementKey": "project.workStartAt", "value": "2024年7月13日" },
    { "elementKey": "project.workEndAt", "value": "2024年10月17日" },
    { "elementKey": "project.createdAt", "value": "2026年02月" },
    { "elementKey": "project.reviewObjectSummary", "value": "中国电建集团成都勘测设计研究院有限公司(简称:成都院)成立于2005年,是世界500强企业中国电力建设集团的核心成员企业..." },
    { "elementKey": "project.reviewObjectDescription", "value": "中国电建集团成都勘测设计研究院有限公司(简称:成都院)是中国电力建设集团核心成员企业,作为国内领先的清洁能源工程服务商..." },
    { "elementKey": "project.target", "value": "成都院制定并发布《QHSE"十四五"规划》(安质〔2023〕1号),明确了总体安全生产目标..." }
  ]
}

11.5 Mock 表格型动态要素数据(成都院)

{
  "tableElements": [
    {
      "elementKey": "+target_responsibility",
      "columns": ["序号", "项目", "存在的问题", "扣分标准"],
      "rows": [
        {
          "序号": 1,
          "项目": "5.1.1.1\n目标制定",
          "存在的问题": "大邑地勘项目部制定的2024年度安全生产目标,缺少设备设施方面的事故控制目标。",
          "扣分标准": "依据评估标准②:目标内容有缺失,扣1分/项,共扣1分。"
        },
        {
          "序号": 2,
          "项目": "5.1.1.2\n目标落实",
          "存在的问题": "双江口设计项目部项目经理与各专业部门负责人签订的《2024年度安全责任书》中,目标分解分解不明确,不满足要求。",
          "扣分标准": "依据评估标准②:签订责任书、目标分解不满足要求,扣1分/单位,共扣1分。"
        },
        {
          "序号": 3,
          "项目": "5.1.1.3\n目标考核",
          "存在的问题": "云阳监理项目未对二季度安全生产目标及工作计划完成情况进行考核、监督检查。",
          "扣分标准": "依据评估标准①:未对目标的完成情况进行评估和考核,扣2分/次,共扣2分。"
        }
      ]
    }
  ]
}

11.6 Mock 附件实体数据

{
  "attachmentEntities": [
    {
      "attachmentId": 1,
      "entities": [
        { "id": 1, "entityType": "ORG", "entityText": "中国电建集团成都勘测设计研究院有限公司", "businessLabel": "评审对象" },
        { "id": 2, "entityType": "ORG", "entityText": "湖北安源安全环保科技有限公司", "businessLabel": "评审单位" },
        { "id": 3, "entityType": "PERSON", "entityText": "何彦锋", "businessLabel": "董事长" },
        { "id": 4, "entityType": "PERSON", "entityText": "张世殊", "businessLabel": "总经理" },
        { "id": 5, "entityType": "DATE", "entityText": "2024年7月13日", "businessLabel": "评审开始日期" },
        { "id": 6, "entityType": "DATE", "entityText": "2024年10月17日", "businessLabel": "评审结束日期" },
        { "id": 7, "entityType": "NUMBER", "entityText": "93.33", "businessLabel": "评审得分" },
        { "id": 8, "entityType": "LOCATION", "entityText": "成都市温江区政和街8号", "businessLabel": "公司地址" }
      ]
    }
  ]
}

附录

A. 前后端对接检查清单

  • 报告列表接口
  • 报告详情接口
  • 报告复制接口
  • 报告渲染接口
  • 模板列表接口
  • 模板动态要素列表接口
  • 动态要素列表接口(含规则状态)
  • 动态要素规则 CRUD 接口
  • 动态要素规则运行接口
  • 数据输入源列表接口
  • 附件上传/列表接口
  • 附件实体列表接口

B. 变更记录

日期 版本 变更内容 作者
2026-02-11 1.0 初始版本,基于会议讨论全新设计 Claude Opus 4.5
2026-02-11 1.1 增加占位符系统、模板管理、真实数据示例 Claude Opus 4.5