Compare commits

..

10 Commits

Author SHA1 Message Date
weiwen_ye 637105cf64 docs: 重构供应商招标报名模块详细设计文档
主要变更:
- 新增报名全流程 Mermaid 流程图,覆盖供应商端、STP平台内部及外部系统交互
- 重构页面流转图,简化登录验证流程,突出报名信息确认核心环节
- 重新设计报名信息确认页 SVG 原型,字段改为从 SRM 自动读取(只读),
  增加投标标段多选、业绩证明材料管理(上传/档案复用)功能
- 新增提交成功反馈页面 SVG 原型
- 新增业绩证明材料管理规则(首次上传归入档案、后续自动调出、去重等)
- 简化状态机,新增 BID_PLAN_PASSED 状态,明确招标方案评审通过后才触发缴费
- 补充报名审核通过通知模板
- 删除报名表单字段定义附录(字段已在页面元素定义表中体现)
- 移除冗余性能要求描述,精简安全要求
- 文件变更:+319 行,-122 行
2026-07-01 12:19:11 +08:00
weiwen_ye faeb980630 docs: 明确投标文件加密方案,确定采用系统统一加密方式 2026-07-01 10:51:00 +08:00
weiwen_ye 5750f3aa7c docs: 删除需求分析说明书中残留的英文版本问题占位符 2026-07-01 10:39:09 +08:00
weiwen_ye e834187099 docs: 精简新用户注册模块文档,移除详细设计冗余内容,保留概要引用 2026-07-01 10:36:33 +08:00
weiwen_ye 7477566b9d docs: 新增详细设计文档(供应商报名/注册/外部专家/新用户/登录),更新需求分析说明书 2026-06-30 18:47:03 +08:00
weiwen_ye 01528c9434 docs: 新增供应商无感登陆需求章节,调整附录结构
- 新增第五章“供应商无感登陆需求”,涵盖需求背景、核心场景(SRM↔STP双平台互通)及详细安全要求(令牌策略、跳转票据、传输加密、MFA、审计日志等)
- 删除原附录1“流程节点与AI能力映射表”(该内容已在第四章各节点描述中体现,避免重复)
- 将原附录2“待确定事项汇总”调整为第六章,并修正章节编号
2026-06-26 18:44:12 +08:00
weiwen_ye 521f745d1d add SRM 与 STP 数据交换接口方案说明书 2026-06-26 18:31:42 +08:00
weiwen_ye 65c5a75f34 Merge branch 'main' of http://develop.befar.com:3000/VAME/STP 2026-06-25 13:36:32 +08:00
weiwen_ye cc2a4cd975 docs: 更新需求分析说明书至V1.4
- 明确采购计划数据来源:从SRM API读取,不直接从SAP读取
- AI智慧寻源范围扩展:增加SRM库和本平台供应商池作为数据源
- 新增库外供应商入库流程:审核通过后自动推送信息至SRM
- 细化标书费收取流程:在招标方案中确定是否收取及金额,缴费后解锁查看权限
- 优化保证金缴纳流程描述
- 移除OA审批专项说明附录,整合待确定事项
- 新增AI智慧寻源子流程示意图
2026-06-25 13:34:24 +08:00
vame 7b785d63ec docs: 更新滨化集团智慧招标平台用户需求分析说明书
主要变更:
1. 更新文档标题,明确为用户需求分析说明书。
2. 增加版本信息及编制依据,确保文档的时效性与合规性。
3. 详细描述项目建设目标与业务范围,明确适用对象及采购类型。
4. 重构用户角色与职责矩阵,清晰列出各角色的主要职责与关键操作。
5. 引入详细业务流程,优化需求与委托阶段的流程图与关键表单说明。

此更新旨在提升文档的结构性与可读性,确保用户需求的清晰传达。
2026-06-24 16:32:07 +08:00
9 changed files with 3674 additions and 138 deletions
@@ -0,0 +1,413 @@
# SRM 与 STP 数据交换接口方案说明书
| 文档名称 | SRM 与 STP 数据交换接口方案说明书 |
| :--- | :-------------------- |
| 文档版本 | V1.0 |
| 编制日期 | 2026-06-26 |
| 编制人 | 叶伟文 |
## 1. 项目背景与目标
### 1.1 背景
当前,供应商关系管理系统与智慧招标平台各自独立运行,存在数据孤岛。供应商需在两套系统中分别维护信息、管理账号,在跨平台操作时需重复登录,严重影响用户体验与业务协同效率。
### 1.2 目标
* **数据互通**:实现供应商主数据、采购计划、中标资料在两个系统间的实时或准实时同步。
* **业务协同**:打通从供应商准入、招标到合同签订的全流程,实现业务流程无缝衔接。
* **体验优化**:构建统一登录认证体系,实现"一次登录,两平台通行"的无感跳转体验。
## 2. 总体架构设计
### 2.1 系统交互架构图
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 450" font-family="Microsoft YaHei, sans-serif">
<defs>
<marker id="arrowPink" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
<path d="M0,0 L0,6 L9,3 z" fill="#c2185b"/>
</marker>
<marker id="arrowBlue" markerWidth="10" markerHeight="10" refX="9" refY="3" orient="auto">
<path d="M0,0 L0,6 L9,3 z" fill="#1565c0"/>
</marker>
<linearGradient id="gradSrm" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#1565c0"/>
<stop offset="100%" stop-color="#1e88e5"/>
</linearGradient>
<linearGradient id="gradStp" x1="0" y1="0" x2="1" y2="1">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
<filter id="shadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="2" dy="3" stdDeviation="3" flood-opacity="0.15"/>
</filter>
</defs>
<!-- 标题 -->
<text x="400" y="35" text-anchor="middle" font-size="22" font-weight="bold" fill="#333">SRM 与 STP 系统交互架构</text>
<!-- SRM 系统框 -->
<rect x="60" y="70" width="280" height="320" rx="12" fill="url(#gradSrm)" filter="url(#shadow)"/>
<text x="200" y="105" text-anchor="middle" font-size="20" font-weight="bold" fill="#fff">供应商管理系统</text>
<rect x="80" y="125" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="200" y="151" text-anchor="middle" font-size="14" fill="#fff">供应商库管理</text>
<rect x="80" y="175" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="200" y="201" text-anchor="middle" font-size="14" fill="#fff">采购计划管理</text>
<rect x="80" y="225" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="200" y="251" text-anchor="middle" font-size="14" fill="#fff">合同管理</text>
<rect x="80" y="275" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="200" y="301" text-anchor="middle" font-size="14" fill="#fff">中标资料归档</text>
<rect x="80" y="325" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="200" y="351" text-anchor="middle" font-size="14" fill="#fff">认证与鉴权中心</text>
<!-- STP 系统框 -->
<rect x="460" y="70" width="280" height="320" rx="12" fill="url(#gradStp)" filter="url(#shadow)"/>
<text x="600" y="105" text-anchor="middle" font-size="20" font-weight="bold" fill="#fff">智慧招标平台</text>
<rect x="480" y="125" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="600" y="151" text-anchor="middle" font-size="14" fill="#fff">供应商准入审核</text>
<rect x="480" y="175" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="600" y="201" text-anchor="middle" font-size="14" fill="#fff">招标项目管理</text>
<rect x="480" y="225" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="600" y="251" text-anchor="middle" font-size="14" fill="#fff">AI采购委托书</text>
<rect x="480" y="275" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="600" y="301" text-anchor="middle" font-size="14" fill="#fff">定标与资料转交</text>
<rect x="480" y="325" width="240" height="40" rx="6" fill="rgba(255,255,255,0.2)"/>
<text x="600" y="351" text-anchor="middle" font-size="14" fill="#fff">认证与鉴权中心</text>
<!-- 中间接口通道 -->
<rect x="370" y="195" width="60" height="60" rx="30" fill="#fff" stroke="#666" stroke-width="1.5" filter="url(#shadow)"/>
<text x="400" y="222" text-anchor="middle" font-size="11" font-weight="bold" fill="#333">API</text>
<text x="400" y="240" text-anchor="middle" font-size="11" fill="#666">网关</text>
<!-- 接口连线:SRM -> STP -->
<line x1="340" y1="145" x2="460" y2="145" stroke="#c2185b" stroke-width="2" marker-end="url(#arrowPink)"/>
<text x="400" y="138" text-anchor="middle" font-size="10" fill="#c2185b">供应商库查询</text>
<line x2="340" y2="290" x1="460" y1="290" stroke="#c2185b" stroke-width="2" marker-end="url(#arrowPink)"/>
<text x="400" y="283" text-anchor="middle" font-size="10" fill="#c2185b">中标资料接收</text>
<line x1="340" y1="340" x2="460" y2="340" stroke="#c2185b" stroke-width="2" marker-end="url(#arrowPink)"/>
<line x1="460" y1="340" x2="340" y2="340" stroke="#1565c0" stroke-width="2" marker-end="url(#arrowBlue)"/>
<text x="400" y="333" text-anchor="middle" font-size="10" fill="#333">登录/票据验证</text>
<!-- 接口连线:STP -> SRM -->
<line x1="460" y1="175" x2="340" y2="175" stroke="#1565c0" stroke-width="2" marker-end="url(#arrowBlue)"/>
<text x="400" y="168" text-anchor="middle" font-size="10" fill="#1565c0">供应商自动注册</text>
<line x1="460" y1="240" x2="340" y2="240" stroke="#1565c0" stroke-width="2" marker-end="url(#arrowBlue)"/>
<text x="400" y="233" text-anchor="middle" font-size="10" fill="#1565c0">采购计划查询</text>
<!-- 技术栈标注 -->
<rect x="250" y="420" width="300" height="24" rx="12" fill="#f5f5f5"/>
<text x="400" y="437" text-anchor="middle" font-size="11" fill="#555">协议:HTTPS | 格式:JSON | 认证:私钥签名 + Token</text>
</svg>
```
## 3. 接口详细设计
### 3.1 供应商库信息查询接口
**提供方:** SRM
**消费方:** STP
**接口清单**
| 序号 | 接口名称 | 请求方式 | 接口路径(暂拟) | 说明 |
| :-- | :------ | :---- | :--------------------------------- | :------------------------------- |
| 1 | 供应商名称查询 | `GET` | `/api/v1/supplier/query/by-name` | 根据供应商名称返回匹配到的供应商对象列表,没有则返回空列表。 |
| 2 | 供应商税号查询 | `GET` | `/api/v1/supplier/query/by-tax-id` | 根据供应商税号返回匹配到的供应商对象,没有则返回空对象。 |
| 3 | 供应商ID查询 | `GET` | `/api/v1/supplier/query/by-id` | 根据SRM系统内部ID返回对应的供应商对象,没有则返回空对象。 |
| 4 | 供应商标签查询 | `GET` | `/api/v1/supplier/query/by-tags` | 根据给定的标签集合返回匹配到的供应商对象列表,没有则返回空列表。 |
| 5 | 全量供应商同步 | `GET` | `/api/v1/supplier/sync/full` | 返回所有供应商对象,用于全量数据同步。 |
| 6 | 增量供应商同步 | `GET` | `/api/v1/supplier/sync/delta` | 返回从指定时间至今发生变更的供应商对象,用于增量同步。 |
**通用请求头**
| 参数名 | 类型 | 必填 | 说明 |
| :--- | :--- | :--- | :--- |
| `Authorization` | `String` | 是 | 认证令牌,格式为 `Bearer <token>` |
| `Content-Type` | `String` | 是 | `application/json` |
**供应商对象结构(举例)**
| 字段名 | 类型 | 说明 |
| :------------- | :-------------- | :---------------------- |
| `supplierId` | `String` | 系统内ID |
| `supplierName` | `String` | 供应商名称 |
| `taxId` | `String` | 税号 |
| `score` | `Integer` | 综合评分 |
| `tags` | `Array[String]` | 标签列表 |
| `status` | `String` | 状态,如"ACTIVE","INACTIVE" |
| `contactInfo` | `Object` | 联系方式 |
| `createTime` | `String` | 创建时间 |
| `updateTime` | `String` | 更新时间 |
---
### 3.2 供应商自动注册接口
**提供方:** SRM
**消费方:** STP
```mermaid
sequenceDiagram
participant STP as STP
participant SRM as SRM
STP->>SRM: POST /api/v1/supplier/register (供应商注册信息)
SRM-->>SRM: 校验数据完整性与合规性
alt 注册成功
SRM-->>SRM: 生成系统内ID
SRM-->>STP: 200 OK { "code":"0", "supplierId":"SRM_2024001" }
else 注册失败
SRM-->>STP: 400 Bad Request { "code":"ERR_001", "message":"税号已存在" }
end
```
**请求参数(暂定)**
| 参数名 | 类型 | 必填 | 说明 |
| :--------------- | :------- | :-- | :----- |
| `supplierName` | `String` | 是 | 供应商名称 |
| `taxId` | `String` | 是 | 税号 |
| `contactInfo` | `Object` | 是 | 联系方式 |
| `qualifications` | `Array` | 否 | 资质文件列表 |
**返回参数(成功)**
| 参数名 | 类型 | 说明 |
| :--- | :--- | :--- |
| `code` | `String` | 业务状态码,成功为"0" |
| `supplierId` | `String` | SRM系统内ID |
---
### 3.3 采购计划查询接口
**提供方:** SRM
**消费方:** STP
```mermaid
sequenceDiagram
participant STP as STP (AI模块)
participant SRM as SRM
STP->>SRM: GET /api/v1/purchase-plan/query?account=xxx
SRM-->>SRM: 查询该采购员关联的采购计划
alt 存在计划
SRM-->>STP: 200 OK { "code":"0", "data":[计划对象列表] }
else 不存在计划
SRM-->>STP: 200 OK { "code":"0", "data":[] }
end
```
**请求参数**
| 参数名 | 类型 | 必填 | 位置 | 说明 |
| :--- | :--- | :--- | :--- | :--- |
| `account` | `String` | 是 | `Query` | 采购人员账号 |
**返回数据对象**
| 字段名 | 类型 | 说明 |
| :------------- | :------- | :----- |
| `planId` | `String` | 计划ID |
| `planName` | `String` | 计划名称 |
| `budget` | `Float` | 预算金额 |
| `requiredDate` | `String` | 需求日期 |
| `items` | `Array` | 采购物料明细 |
---
### 3.4 统一登录与无感跳转接口
本节详细描述如何通过**统一登录**和**无感跳转**实现“一次登录,两平台通行”。
#### 3.4.1 统一登录
统一登录解决供应商在两个平台拥有独立账号、需重复输入密码的问题。任一平台均可作为登录入口,调用对方提供的登录验证接口,验证通过后建立本地会话。
**场景1:供应商在SRM端输入STP的账号密码登录**
```mermaid
sequenceDiagram
participant User as 供应商
participant SRM
participant STP
User->>SRM: 输入STP用户名/密码,点击登录
SRM->>STP: POST /api/v1/auth/login/for-srm { username, password, returnUrl }
STP-->>STP: 校验用户合法性
alt 校验成功
STP-->>SRM: 200 { code:0, userInfo:{ stpId, srmId, name, taxId, ... } }
SRM-->>SRM: 建立本地会话,关联SRM ID
SRM-->>User: 登录成功,返回SRM首页
else 校验失败
STP-->>SRM: 401 { code:ERR_AUTH_001, message:"用户名或密码错误" }
SRM-->>User: 提示错误
end
```
**场景2:供应商在STP端输入SRM的账号密码登录(流程对称)**
```mermaid
sequenceDiagram
participant User as 供应商
participant STP
participant SRM
User->>STP: 输入SRM用户名/密码,点击登录
STP->>SRM: POST /api/v1/auth/login/for-stp { username, password, returnUrl }
SRM-->>SRM: 校验用户合法性
alt 校验成功
SRM-->>STP: 200 { code:0, userInfo:{ srmId, name, taxId, ... } }
STP-->>STP: 建立本地会话
STP-->>User: 登录成功,返回STP首页
else 校验失败
SRM-->>STP: 401 错误
STP-->>User: 提示错误
end
```
**接口定义:STP登录验证接口(供SRM调用)**
| 项目 | 内容 |
| :--- | :--- |
| **提供方** | STP |
| **路径** | `/api/v1/auth/login/for-srm` |
| **方法** | `POST` |
| **请求体** | `{ "username":"供应商STP账号", "password":"密码" }` |
| **成功响应** | `{ "code":"0", "userInfo":{ "stpId":"STP内部ID", "srmId":"关联的SRM ID", "name":"公司名", "taxId":"税号" } }` |
| **失败响应** | `{ "code":"ERR_AUTH_001", "message":"用户名或密码错误" }` |
**接口定义:SRM登录验证接口(供STP调用)**
| 项目 | 内容 |
| :--- | :--- |
| **提供方** | SRM |
| **路径** | `/api/v1/auth/login/for-stp` |
| **方法** | `POST` |
| **请求体** | `{ "username":"供应商SRM账号", "password":"密码" }` |
| **成功响应** | `{ "code":"0", "userInfo":{ "srmId":"SRM内部ID", "name":"公司名", "taxId":"税号" } }` |
| **失败响应** | `{ "code":"ERR_AUTH_001", "message":"用户名或密码错误" }` |
> **说明:** `returnUrl`参数可选,用于指定验证成功后跳转的目标页面。两个系统在验证通过后,返回的用户信息中必须包含 `srmId`,以便对方建立本地会话并关联供应商身份。
#### 3.4.2 无感跳转(已登录状态下的跨系统切换)
当供应商已在任一方登录,点击指向另一方系统的链接时,通过临时跳转票据实现免密登录。
**STP → SRM 无感跳转流程:**
```mermaid
sequenceDiagram
participant User as 供应商
participant STP
participant SRM
Note over User,SRM: 前提:供应商已登录STP
User->>STP: 点击“查看SRM合同”链接
STP->>STP: 生成Ticket (srmId, stpSessionId, timestamp)
STP->>STP: 使用STP私钥签名
STP->>User: 302重定向到SRMURL中携带Ticket
User->>SRM: 访问SRM,携带Ticket
SRM->>SRM: 使用STP公钥验签
SRM->>STP: POST /api/v1/auth/session/validate { stpSessionId, srmId }
STP-->>SRM: 200 OK { valid: true }
SRM-->>SRM: 根据srmId建立本地会话
SRM-->>User: 登录成功,展示SRM页面
```
**SRM → STP 无感跳转流程(对称,略)**
**跳转票据(Ticket)结构**
| 字段 | 类型 | 说明 |
| :--- | :--- | :--- |
| `srmId` | `String` | 供应商在SRM中的ID(必填) |
| `sessionId` | `String` | 来源系统当前登录会话ID |
| `timestamp` | `Long` | 生成时间戳,有效期建议5分钟 |
| `nonce` | `String` | 随机数,防重放 |
| `signature` | `String` | 对上述字段的签名(来源系统私钥) |
**会话有效性验证接口**
| 项目 | STP会话验证(供SRM调用) | SRM会话验证(供STP调用) |
| :--- | :--- | :--- |
| **提供方** | STP | SRM |
| **路径** | `/api/v1/auth/session/validate` | `/api/v1/auth/session/validate` |
| **方法** | `POST` | `POST` |
| **请求体** | `{ "sessionId":"STP会话ID", "srmId":"SRM ID" }` | `{ "sessionId":"SRM会话ID" }` |
| **成功响应** | `{ "code":"0", "valid": true }` | `{ "code":"0", "valid": true }` |
| **失败响应** | `{ "code":"0", "valid": false }` | `{ "code":"0", "valid": false }` |
---
### 3.5 中标资料转交接口
**提供方:** SRM
**消费方:** STP
```mermaid
sequenceDiagram
participant STP
participant SRM
Note over STP: 定标完成,整理资料
STP->>SRM: POST /api/v1/bid-result/transfer (中标资料包)
SRM-->>SRM: 校验数据完整性
SRM-->>SRM: 归档中标资料、投标过程数据等
alt 成功
SRM-->>STP: 200 OK { "code":"0", "recordId":"ARCH_2024001" }
else 失败
SRM-->>STP: 500 / 400 { "code":"ERR_002", "message":"资料不完整" }
end
```
**请求体结构**
| 参数名 | 类型 | 必填 | 说明 |
| :--- | :--- | :--- | :--- |
| `projectId` | `String` | 是 | 招标项目ID |
| `bidResult` | `Object` | 是 | 定标结果 |
| `bidProcessData` | `Object` | 是 | 投标过程数据 |
| `supplierBidFiles` | `Array` | 是 | 供应商投标文件URL列表 |
---
## 4. 接口清单总表
| 模块 | 接口名称 | 请求方 | 提供方 | 协议 |
| :--- | :--- | :--- | :--- | :--- |
| **供应商信息** | 供应商名称查询 | STP | SRM | REST |
| | 供应商税号查询 | STP | SRM | REST |
| | 供应商ID查询 | STP | SRM | REST |
| | 供应商标签查询 | STP | SRM | REST |
| | 全量供应商同步 | STP | SRM | REST |
| | 增量供应商同步 | STP | SRM | REST |
| **供应商注册** | 供应商自动注册 | STP | SRM | REST |
| **采购计划** | 采购计划查询 | STP | SRM | REST |
| **登录认证** | SRM登录验证 | SRM | STP | REST |
| | STP登录验证 | STP | SRM | REST |
| | STP会话有效性验证 | SRM | STP | REST |
| | SRM会话有效性验证 | STP | SRM | REST |
| | STP→SRM无感跳转 | SRM | STP | REST+签名 |
| | SRM→STP无感跳转 | STP | SRM | REST+签名 |
| **中标转交** | 中标资料接收 | STP | SRM | REST |
## 5. 安全设计
| 维度 | 策略 | 说明 |
| :--- | :--- | :--- |
| **传输安全** | HTTPS/TLS 1.2+ | 所有接口通信必须使用HTTPS加密传输。 |
| **身份认证** | Token / 证书 | 系统间API调用采用Token认证;无感跳转采用RSA私钥签名验证。 |
| **防重放** | 时间戳 + 随机数 | 跳转票据和关键请求携带时间戳和随机数,有效期建议5分钟。 |
| **数据脱敏** | 日志脱敏 | 税号、联系方式等敏感信息在日志中必须脱敏处理。 |
| **访问控制** | 最小权限原则 | 接口调用方仅能访问其业务所必需的数据。 |
## 6. 错误码规范
| 错误码 | 说明 | 示例 |
| :--- | :--- | :--- |
| `0` | 成功 | — |
| `ERR_AUTH_001` | 认证失败 | Token无效或已过期 |
| `ERR_AUTH_002` | 签名验证失败 | 跳转票据签名不匹配 |
| `ERR_PARAM_001` | 参数缺失/格式错误 | 必填字段为空 |
| `ERR_BIZ_001` | 供应商已存在 | 注册时税号重复 |
| `ERR_BIZ_002` | 供应商不存在 | ID查询无结果 |
| `ERR_SYS_001` | 系统内部错误 | 数据库连接超时 |
@@ -37,16 +37,14 @@
### 1. 必接核心接口清单 ### 1. 必接核心接口清单
| 序号 | 第三方系统 | 接口方向 | 协议/认证方式 | 核心用途 | 备注 | | 序号 | 第三方系统 | 接口方向 | 协议/认证方式 | 核心用途 | 备注 |
| :-- | :-------------------- | :-------- | :---------------- | :---------------------------- | ------------------------------ | | :-- | :-------------------- | :-------- | :---------------- | :---------------------------- | ---------------------------------------------------------------------------------- |
| 1 | **OA审批系统** | 双向(推送+回调) | HTTPS + mTLS双向认证 | 推送委托/立项/定标审批单,接收审批结果回调【附录2】 | | | 1 | **OA审批系统** | 双向(推送+回调) | HTTPS + mTLS双向认证 | 推送委托/立项/定标审批单,接收审批结果回调【附录2】 | |
| 2 | **IAM身份认证** | 双向 | SAML 2.0 / OIDC | 单点登录(SSO),自动同步组织架构 | | | 2 | **IAM身份认证** | 双向 | SAML 2.0 / OIDC | 单点登录(SSO),自动同步组织架构 | |
| 3 | **SRM供应商平台** | 双向 | HTTPS + API Token | 同步供应商入库信息、推送中标结果、移交合同资料 | 待确认 | | 3 | **SRM供应商平台** | 双向 | HTTPS + API Token | 同步供应商入库信息、推送中标结果、移交合同资料 | 1、信息同步(R)<br>2、已完成认证的供应商自动推送进SRM(C)<br>3、单点登录(SRM + STP<br>4、采购计划(R<br>5、中标资料(C |
| 4 | **SAP/财务系统** | 单向(读取 | HTTPS + OAuth2 | 拉取采购计划、预算信息、费用来源 | 待确认 | | 4 | **紫光电子档案系统** | 单向(推送 | HTTPS + IP白名单 | 合同签订后自动推送全流程归档文件包【3.9】 | 待确认 |
| 8 | **支付网关** | 双向 | HTTPS + 签名验证 | 接收供应商保证金支付回调,自动更新缴费状态 | 待确认,<br>==需财务同事对接== |
| 7 | **紫光电子档案系统** | 单向(推送) | HTTPS + IP白名单 | 合同签订后自动推送全流程归档文件包【3.9】 | 待确认 |
| 5 | **天眼查/企查查**==(次数收费)== | 单向(查询) | HTTPS + API Key | 供应商注册时自动核验工商信息、经营异常、关联风险【3.2】 | ==直接链接== | | 5 | **天眼查/企查查**==(次数收费)== | 单向(查询) | HTTPS + API Key | 供应商注册时自动核验工商信息、经营异常、关联风险【3.2】 | ==直接链接== |
| 6 | **税务发票验真** | 单向(查询) | HTTPS + 数字证书 | 验证投标方提供的业绩发票真伪【3.6】 | 待确认<br>==(只能查询最近5年,是否符合业务需求)== | | 6 | **税务发票验真** | 单向(查询) | HTTPS + 数字证书 | 验证投标方提供的业绩发票真伪【3.6】 | |
| 9 | **短信/邮件服务** | 单向(发送) | HTTPS + API Key | 发送开标提醒、中标通知、系统催办等 | 邮箱需新开招标专用账号 | | 7 | **短信/邮件服务** | 单向(发送) | HTTPS + API Key | 发送开标提醒、中标通知、系统催办等 | 邮箱需新开招标专用账号 |
## 四、其他 ## 四、其他
+61 -91
View File
@@ -1,122 +1,92 @@
# 滨化集团智慧招标平台(STP)用户需求确认书 # 滨化集团智慧招标平台(STP)用户需求确认书
**文件编号** BH-STP-REQ-2026-001 **版本** V1.0
**版本号** V1.0 **确认日期** 2026年____月____日
**编制日期** 2026年5月29日 **项目名称** 滨化集团智慧招标平台建设项目
--- ---
## 第一部分:确认声明 ## 一、确认依据
| 项目 | 内容 | 本确认书基于以下文件及制度编制:
- 《招标管理制度》(2026年4月版)
- 《招标评委管理规定》(2026年4月版)
- 流程文件:
`8.4.4.1` 招标供应商长短名单管理流程
`8.4.4.2` 招标委托流程
`8.4.4.3` 招标立项流程
`8.4.4.4` 开标及评标流程
`8.4.4.5` 定标流程
`8.4.4.6` 投标保证金管理流程
- 《滨化集团智慧招标平台(STP)用户需求分析说明书》V1.2(2026年6月5日编制)
---
## 二、用户需求确认结论
经项目相关方共同审阅,确认《滨化集团智慧招标平台(STP)用户需求分析说明书》V1.2 所描述的内容:
| 确认项 | 结论 |
| :--- | :--- | | :--- | :--- |
| **项目名称** | 滨化集团智慧招标平台(STP | | 建设目标与业务范围 | □ 明确 / □ 需修改 |
| **需求版本** | V3.0(基于流程文件修订版,2026年5月28日) | | 用户角色与职责矩阵 | □ 明确 / □ 需修改 |
| **编制依据** | 《招标管理制度》(2026年4月版)、《招标评委管理规定》(2026年4月版)及各配套流程文件(8.4.4.1-8.4.4.6 | | 全流程业务阶段(委托→归档) | □ 明确 / □ 需修改 |
| **确认人/部门** | 见本确认书第五部分签字栏 | | 关键表单与业务规则 | □ 明确 / □ 需修改 |
| AI赋能点及优先级 | □ 明确 / □ 需修改 |
| 异常处理与关键控制点 | □ 明确 / □ 需修改 |
| 数据安全机制(加密、密钥管理、审计等) | □ 明确 / □ 需修改 |
| 附录(OA审批、AI能力映射等) | □ 明确 / □ 需修改 |
本人/本部门已仔细阅读并理解本确认书所附的《滨化集团智慧招标平台(STP)用户需求分析说明书 V1.0》全文,对其中的业务范围、功能需求、流程设计、角色职责、业务规则及非功能性需求进行审核,现确认如下: **总体确认意见:**
□ 需求完整、清晰,可作为后续设计、开发、测试及验收依据。
☑ 需求内容**完整、准确、清晰**,能够反映实际业务需要 □ 存在以下异议或补充需求(请附页说明):
☑ 业务流程**符合**公司现行制度及流程文件规定
☑ 关键业务规则**无歧义**,具备可落地性
☑ AI赋能点设计**合理**,人工与自动化的职责边界清晰
☑ 同意以此作为系统设计、开发、测试及验收的**唯一基线文档**
--- ---
## 第二部分:需求范围确认 ## 三、确认范围说明
### 2.1 业务范围确认 本确认书覆盖以下业务范围:
| 确认项 | 内容 | 确认状态 | - **适用对象**:集团公司及下属全资/控股子公司
| :----- | :------------------------ | :--: | - **采购类型**:工程、货物、服务
| 适用对象 | 集团公司及下属全资子公司和控股公司 | ☐ 同意 | - **招标门槛**:工程/货物≥50万元;服务≥30万元
| 适用采购类型 | 工程、货物、服务 | ☐ 同意 | - **采购方式**:公开招标、邀请招标、竞争性谈判、单一来源
| 招标门槛 | 工程/货物类 ≥50万元;服务类 ≥30万元 | ☐ 同意 |
| 谈判管理范围 | 30万元及以上服务类采购(独家/单一/竞争性谈判) | ☐ 同意 |
| 覆盖采购方式 | 公开招标、邀请招标、竞争性谈判、单一来源 | ☐ 同意 |
### 2.2 业务阶段确认
| 序号 | 业务阶段 | 对应需求章节 | 确认状态 |
| :-- | :--------- | :----- | :--: |
| 1 | 需求与委托 | 3.1 | ☐ 同意 |
| 2 | 立项 | 3.2 | ☐ 同意 |
| 3 | 供应商长短名单管理 | 3.2A | ☐ 同意 |
| 4 | 招标文件编制与发布 | 3.3 | ☐ 同意 |
| 5 | 供应商报名与资质审核 | 3.4 | ☐ 同意 |
| 6 | 专家抽取与评标准备 | 3.5 | ☐ 同意 |
| 7 | 开标与评标 | 3.6 | ☐ 同意 |
| 8 | 定标与审批 | 3.7 | ☐ 同意 |
| 9 | 合同生成与供应商入库 | 3.8 | ☐ 同意 |
| 10 | 资料归档与全程监督 | 3.9 | ☐ 同意 |
### 2.3 关键业务规则确认
| 序号 | 规则名称 | 规则内容 | 确认状态 |
| :--- | :--- | :--- | :---: |
| 1 | 招标门槛 | 工程/货物≥50万;服务≥30万 | ☐ 同意 |
| 2 | 评委人数 | 最低价法≥3人单数;综合评估法≥5人单数 | ☐ 同意 |
| 3 | 评委抽取时间 | 开标前24小时内 | ☐ 同意 |
| 4 | 保证金上限 | 不超过预算2%,最高80万元 | ☐ 同意 |
| 5 | 公告至投标截止 | 不少于7天 | ☐ 同意 |
| 6 | 邀请招标供应商数 | ≥3家;框架类≥拟中标数2倍 | ☐ 同意 |
| 7 | 废标条件 | 有效投标人<3且无竞争性;所有投标不符合要求 | ☐ 同意 |
| 8 | 审批权限分界 | 50万/500万为分界,对应一级部门/分管领导/总裁 | ☐ 同意 |
| 9 | 内部专家奖励 | 最低价法500元/人;综合评估法10000元/人 | ☐ 同意(待确认金额) |
| 10 | 外部专家报酬 | 3小时内500元,超时每小时+100元,日上限1500元 | ☐ 同意 |
--- ---
## 第三部分:待确认事项清单 ## 四、已知约束与依赖
以下事项需在签字确认前明确,或作为后续变更管理的依据: 1. **审批集成**:平台审批流程通过OA系统完成,平台与OA需完成API对接。
2. **外部数据依赖**:工商/税务验真、可信时间戳等依赖第三方服务。
| 序号 | 待确认事项 | 问题描述 | 建议方案 | 确认结果 | 3. **密钥管理**:所有加密密钥仅在内存中生成与漂移,永不落盘。
| :-- | :----------- | :------------------- | :---------------------- | :-------- | 4. **存证要求**:关键节点数据需独立存证(哈希链+数字签名),满足15年保存要求。
| 1 | 内部专家奖励金额 | 制度原文为“10000元/人”,金额较高 | 请业务方核实是否为笔误,若无误则保留 | ☐ 同意(核实后) |
| 2 | 3.4与3.2A内容重叠 | 两个章节均描述供应商报名审核流程 | 建议删除3.4中的评审环节,仅保留投标文件上传 | ☐ 同意 |
| 3 | OA审批集成方式 | 审批流由OA还是平台承载 | 建议OA承载审批,平台通过API推送单据 | ☐ 同意 |
| 4 | 资料保存期限 | 归档资料保存年限未明确 | 依法必招项目保存≥15年 | ☐ 同意 |
--- ---
## 第四部分:需求变更管理约定 ## 五、签字确认
1. **基线锁定**:本确认书签署后,所附《需求分析说明书 V3.0》即成为系统建设的基线文档。 | 角色 | 姓名 | 部门 | 签字 | 日期 |
2. **变更流程**:任何需求变更需提交《需求变更申请单》,经需求方、开发方、项目管理委员会三方评审通过后方可实施。 | :--- | :--- | :--- | :--- | :--- |
3. **变更影响**:需求变更可能导致工期、成本、资源调整,需在变更单中明确影响范围及应对措施。 | 需求部门代表 | | | | |
4. **版本控制**:所有需求文档及变更记录应纳入配置管理,确保可追溯。 | 招标管理部代表 | | | | |
| 采购执行部门代表 | | | | |
| 合规/审计代表 | | | | |
| IT/系统管理员代表 | | | | |
| 项目负责人 | | | | |
--- ---
## 第五部分:签字确认 ## 六、附件
| 角色 | 部门 | 姓名 | 签字 | 日期 |
| :-------- | :----- | :-- | :-- | :-- |
| **需求提出方** | 招标管理部 | | | |
| **审批确认** | 分管公司领导 | | | |
- [ ] 《滨化集团智慧招标平台(STP)用户需求分析说明书》V1.1
- [ ] 反馈意见汇总表(如有)
--- ---
## 第六部分:附件清单 **确认书编制单位:** ____________
**确认日期:** 2026年____月____日
| 序号 | 附件名称 | 版本 | 页数 |
| :--- | :--- | :--- | :--- |
| 1 | 《滨化集团智慧招标平台(STP)用户需求分析说明书》 | V3.0 | 详见正文 |
| 2 | 《招标管理制度》(2026年4月版) | 2026年版 | 详见制度文件 |
| 3 | 《招标评委管理规定》(2026年4月版) | 2026年版 | 详见制度文件 |
| 4 | 各配套流程文件(8.4.4.1-8.4.4.6 | 1.1-1.2 | 详见流程文件 |
--- ---
**以下无正文** 如果需要,我可以帮您将此确认书转为可填写的 Word 或 PDF 风格版本,或补充反馈意见附页模板。
---
**填写说明:**
1. 请各确认人逐项勾选确认状态,如有异议请在“待确认事项清单”中记录
2. 签字栏需手写签名,并填写日期
3. 本确认书一式三份,招标管理部、信息化部、项目管理办公室各执一份
@@ -0,0 +1,429 @@
# 供应商招标报名模块
## 总体流程概述
供应商从获知招标公告到完成报名并获取投标资格,涉及**公告浏览 → 身份认证 → 报名申请 → 资质审核 → 费用缴纳 → 文件获取 → 投标文件上传**七大环节。本设计覆盖全流程的**页面交互**、**系统跳转**与**内部处理逻辑**,并充分复用现有 SRM 供应商库与统一认证体系。
```mermaid
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#e91e63','lineColor':'#555','secondaryColor':'#f3f4f6'}}}%%
flowchart TD
subgraph 供应商端
A[浏览招标公告] --> B{是否已登录?}
B -- 是 --> D[点击“报名”]
B -- 否 --> C[登录/注册]
C --> D
D --> E[系统自动读取<br>联系人/手机号/营业执照]
E --> F[供应商确认信息并提交]
F --> G[报名提交成功<br>等待审核通知]
G --> H[收到审核结果通知]
H -- 通过 --> I[收到缴费通知<br>(招标方案评审通过后)]
H -- 不通过 --> J[查看拒绝原因]
J --> K{是否可重新提交?}
K -- 是 --> D
K -- 否 --> L[报名流程终止]
I --> M[进入缴费与投标环节<br>(后续流程)]
end
subgraph STP平台内部
STP1[接收报名请求] --> STP2[AI辅助资质审核<br>(核验已存证资质文件)]
STP2 --> STP3{是否需要人工评审?}
STP3 -- 是 --> STP4[推送人工评审任务]
STP3 -- 否 --> STP5[自动通过]
STP4 --> STP6[人工评审]
STP6 --> STP7[反馈结果]
STP5 --> STP8[更新报名状态]
STP7 --> STP8
STP8 --> STP9[形成报名通过单位名单]
STP9 --> STP10[发送审核结果通知]
STP10 --> STP11[等待招标方案评审通过]
STP11 -- 招标方案通过 --> STP12[发送缴费通知<br>解锁标书查看权限]
STP12 --> STP13[后续投标流程]
end
subgraph 外部系统
SRM[(SRM供应商库)]
OA[(OA审批系统)]
end
供应商端 -.-> STP平台内部
STP平台内部 -.-> SRM
STP平台内部 -.-> OA
SRM -- 供应商信息读取 --> STP2
OA -- 招标方案评审结果回调 --> STP11
```
## 页面流转与跳转设计
```mermaid
graph TD
A[招标公告详情页] -->|点击“立即报名”| B{登录检查}
B -->|未登录| C[登录/注册选择页]
C -->|选择登录方式| D[验证通过]
C -->|新用户注册| E[注册并同步至SRM]
E --> D
D --> F[报名信息确认页]
F -->|系统自动回填| G[联系人/手机号/营业执照<br>(只读展示,不可编辑)]
F -->|供应商可选择| H[投标标段(多选)]
F -->|供应商可填写| I[业绩简述/备注(可选)]
G --> J[确认信息并提交]
H --> J
I --> J
J --> K[报名提交成功页]
K --> L[等待审核通知(邮件/站内信)]
L --> M[审核通过/不通过通知]
M -->|不通过| N[查看原因,按需重新提交]
M -->|通过| O[报名通过名单公布<br>等待招标方案评审]
O --> P[招标方案通过→收到缴费通知]
P --> Q[进入后续缴费与投标环节]
style A fill:#fce4ec,stroke:#c2185b
style F fill:#e3f2fd,stroke:#1565c0
style K fill:#e8f5e9,stroke:#388e3c
style O fill:#fff3e0,stroke:#ff9800
```
## 系统交互时序图
```mermaid
sequenceDiagram
participant U as 供应商浏览器
participant STP as STP平台
participant SRM as SRM系统
participant OA as OA审批
participant Pay as 支付网关
participant AI as AI审核服务
U->>STP: 访问招标公告页面
STP-->>U: 展示公告内容
U->>STP: 点击“报名”
STP-->>U: 检测未登录,跳转登录页
U->>STP: 选择“使用SRM账号登录”
STP->>SRM: POST /api/v1/auth/login/for-stp {username, password}
SRM-->>SRM: 验证账号密码
SRM-->>STP: 200 { srmId, name, taxId, ... }
STP-->>STP: 建立本地会话,关联SRM ID
STP-->>U: 自动跳转至报名页
U->>STP: 填写报名表单 + 上传资质文件
STP->>AI: 启动AI初审(资质/风险/关联)
AI-->>STP: 初审意见(通过/警告/不通过)
alt 需要人工评审
STP->>STP: 生成待办任务
STP-->>U: 进入人工评审阶段
STP->>OA: 通知评审人员(站内/邮件)
OA-->>STP: 评审完成回调
else AI直接通过
STP-->>STP: 报名状态更新为“审核通过”
end
STP-->>U: 发送审核结果通知(邮件+站内信)
U->>STP: 查看缴费通知
STP-->>U: 展示缴费金额及支付方式
U->>Pay: 在线支付 / 上传银行凭证
Pay-->>STP: 异步通知支付结果(或凭证待确认)
STP->>OA: 发起财务确认审批(含凭证)
OA-->>STP: 审批通过(确认到账)
STP-->>U: 解锁招标文件下载权限
U->>STP: 下载招标文件
STP-->>U: 返回文件(加水印/加密)
U->>STP: 加密上传投标文件
STP->>STP: 文件哈希存证(区块链/哈希链)
STP->>SRM: 记录供应商投标状态(可选)
STP->>Archive: 归档报名材料
STP-->>U: 投标成功
```
## 招标报名页面:
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 820" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
<defs>
<filter id="shadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="4" stdDeviation="6" flood-opacity="0.06"/>
</filter>
<filter id="hoverShadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="2" stdDeviation="4" flood-opacity="0.12"/>
</filter>
<linearGradient id="headerGrad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
<linearGradient id="btnGrad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
</defs>
<!-- 背景 -->
<rect width="1024" height="820" fill="#f5f7fa"/>
<!-- 顶部导航栏 -->
<rect width="1024" height="64" fill="#ffffff" stroke="#e8e8e8" stroke-width="1"/>
<circle cx="40" cy="32" r="16" fill="url(#headerGrad)"/>
<text x="64" y="38" font-size="20" font-weight="bold" fill="#c2185b">智慧招标平台</text>
<text x="760" y="38" font-size="14" fill="#666">欢迎,XX科技有限公司</text>
<rect x="880" y="18" width="36" height="36" rx="50%" fill="#f5f5f5"/>
<circle cx="898" cy="36" r="14" fill="#ccc"/>
<text x="898" y="40" font-size="12" fill="#666" text-anchor="middle"></text>
<!-- 面包屑 -->
<text x="120" y="100" font-size="13" fill="#999">首页</text>
<text x="155" y="100" font-size="13" fill="#999"></text>
<text x="175" y="100" font-size="13" fill="#999">招标公告</text>
<text x="255" y="100" font-size="13" fill="#999"></text>
<text x="275" y="100" font-size="13" fill="#c2185b" font-weight="bold">报名确认</text>
<!-- 步骤条 -->
<rect x="120" y="120" width="784" height="40" rx="8" fill="#ffffff" stroke="#e8e8e8"/>
<circle cx="170" cy="140" r="14" fill="#c2185b"/>
<text x="170" y="145" font-size="12" fill="#fff" text-anchor="middle" font-weight="bold">1</text>
<text x="192" y="145" font-size="14" fill="#c2185b" font-weight="bold">阅读公告</text>
<line x1="280" y1="140" x2="360" y2="140" stroke="#c2185b" stroke-width="2"/>
<circle cx="330" cy="140" r="14" fill="#c2185b"/>
<text x="330" y="145" font-size="12" fill="#fff" text-anchor="middle" font-weight="bold">2</text>
<text x="352" y="145" font-size="14" fill="#c2185b" font-weight="bold">确认报名</text>
<line x1="440" y1="140" x2="520" y2="140" stroke="#ddd" stroke-width="2"/>
<circle cx="490" cy="140" r="14" fill="#ddd"/>
<text x="490" y="145" font-size="12" fill="#999" text-anchor="middle">3</text>
<text x="512" y="145" font-size="14" fill="#999">审核</text>
<line x1="600" y1="140" x2="680" y2="140" stroke="#ddd" stroke-width="2"/>
<circle cx="650" cy="140" r="14" fill="#ddd"/>
<text x="650" y="145" font-size="12" fill="#999" text-anchor="middle">4</text>
<text x="672" y="145" font-size="14" fill="#999">后续环节</text>
<!-- 主卡片 -->
<rect x="120" y="180" width="784" height="590" rx="10" fill="#ffffff" filter="url(#shadow)"/>
<!-- 项目信息头部 -->
<rect x="120" y="180" width="784" height="56" rx="10" fill="url(#headerGrad)"/>
<rect x="120" y="220" width="784" height="16" fill="url(#headerGrad)"/>
<text x="150" y="216" font-size="18" font-weight="bold" fill="#fff">报名信息确认</text>
<!-- 项目信息条 -->
<rect x="150" y="250" width="724" height="44" rx="6" fill="#fce4ec"/>
<text x="170" y="278" font-size="14" fill="#c2185b" font-weight="bold">项目名称:</text>
<text x="270" y="278" font-size="14" fill="#333">2026年生产用原材料框架协议采购</text>
<text x="620" y="278" font-size="13" fill="#999">项目编号:BH-PROC-2026-0018</text>
<!-- 信息提示 -->
<rect x="150" y="308" width="724" height="30" rx="4" fill="#e3f2fd"/>
<text x="170" y="329" font-size="13" fill="#1565c0">📋 以下信息已从您的注册资料中自动读取,请核对</text>
<!-- 表单区域 -->
<!-- 公司名称 -->
<text x="150" y="368" font-size="14" fill="#555">公司名称</text>
<rect x="150" y="378" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="165" y="402" font-size="14" fill="#333">XX科技有限公司</text>
<!-- 联系人 -->
<text x="530" y="368" font-size="14" fill="#555">联系人</text>
<rect x="530" y="378" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="545" y="402" font-size="14" fill="#333">张三</text>
<!-- 联系电话 -->
<text x="150" y="438" font-size="14" fill="#555">联系电话</text>
<rect x="150" y="448" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="165" y="472" font-size="14" fill="#333">138-0000-8888</text>
<!-- 电子邮件 -->
<text x="530" y="438" font-size="14" fill="#555">电子邮件</text>
<rect x="530" y="448" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="545" y="472" font-size="14" fill="#333">zhangsan@xx-tech.com</text>
<!-- 投标标段 -->
<text x="150" y="518" font-size="14" fill="#555">投标标段 <tspan fill="#e53935">*</tspan></text>
<rect x="150" y="528" width="340" height="36" rx="4" fill="#fafafa" stroke="#d0d0d0"/>
<text x="170" y="552" font-size="14" fill="#333">☑ 标段A(原材料)</text>
<text x="330" y="552" font-size="14" fill="#333">☐ 标段B(辅料)</text>
<text x="490" y="552" font-size="14" fill="#333">☐ 标段C(包装)</text>
<!-- 业绩证明材料 -->
<text x="150" y="598" font-size="14" fill="#555">业绩证明材料</text>
<text x="290" y="598" font-size="12" fill="#999">(首次上传将自动归入用户档案,下次可复用)</text>
<!-- 上传区域 -->
<rect x="150" y="608" width="724" height="80" rx="6" stroke-dasharray="6,6" fill="#fafafa" stroke="#ccc"/>
<text x="512" y="640" font-size="14" fill="#999" text-anchor="middle">📤 点击或拖拽上传业绩证明材料</text>
<text x="512" y="665" font-size="12" fill="#bbb" text-anchor="middle">支持 PDF、DOC、JPG 格式,单个文件不超过 20MB</text>
<!-- 已有档案材料(复用) -->
<rect x="150" y="700" width="724" height="1" fill="#eee"/>
<text x="150" y="722" font-size="13" fill="#888">📂 从用户档案中选用已有材料:</text>
<rect x="150" y="732" width="200" height="28" rx="4" fill="#e8f5e9" stroke="#a5d6a7"/>
<text x="165" y="752" font-size="13" fill="#2e7d32">✅ 2025年业绩报告.pdf</text>
<rect x="362" y="732" width="28" height="28" rx="50%" fill="#ef5350"/>
<text x="376" y="752" font-size="14" fill="#fff" text-anchor="middle">×</text>
<rect x="400" y="732" width="180" height="28" rx="4" fill="#e8f5e9" stroke="#a5d6a7"/>
<text x="415" y="752" font-size="13" fill="#2e7d32">✅ 2024年合同.pdf</text>
<rect x="592" y="732" width="28" height="28" rx="50%" fill="#ef5350"/>
<text x="606" y="752" font-size="14" fill="#fff" text-anchor="middle">×</text>
<!-- 按钮 -->
<rect x="150" y="780" width="100" height="38" rx="6" fill="#e8e8e8"/>
<text x="200" y="805" font-size="14" fill="#666" text-anchor="middle">返回</text>
<rect x="650" y="780" width="160" height="38" rx="6" fill="url(#btnGrad)" filter="url(#hoverShadow)"/>
<text x="730" y="805" font-size="14" fill="#fff" text-anchor="middle" font-weight="bold">确认提交报名</text>
<text x="650" y="818" font-size="11" fill="#999">提交后不可修改</text>
</svg>
```
## 页面元素定义表
| 序号 | 字段名称 | 数据来源 | 可编辑性 | 说明 |
| --- | ---------- | --------- | ---- | ---------------------------- |
| 1 | **项目名称** | 系统自动带入 | 只读 | 显示拟报名的投标项目名称 |
| 2 | **项目编号** | 系统自动带入 | 隐藏字段 | 内部项目编号,用于后台关联,页面不展示 |
| 3 | **公司名称** | SRM注册信息 | 只读 | 统一社会信用代码对应的企业全称 |
| 4 | **联系人** | SRM注册信息 | 只读 | 供应商主联系人姓名 |
| 5 | **联系电话** | SRM注册信息 | 只读 | 供应商注册手机号 |
| 6 | **电子邮件** | SRM注册信息 | 只读 | 供应商注册邮箱 |
| 7 | **投标标段** | 系统配置 | 可多选 | 仅当项目分标段时显示;可多选或全选 |
| 8 | **业绩证明材料** | 上传 / 用户档案 | 可编辑 | 首次上传自动归入用户档案,下次自动调出;用户可删除或新增 |
## 提交成功反馈页面
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 600" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
<defs>
<filter id="shadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-opacity="0.08"/>
</filter>
<linearGradient id="successGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#e8f5e9"/>
<stop offset="100%" stop-color="#f1f8e9"/>
</linearGradient>
</defs>
<rect width="1024" height="600" fill="#f5f7fa"/>
<!-- 顶部导航 -->
<rect width="1024" height="56" fill="#ffffff" stroke="#e8e8e8" stroke-width="1"/>
<text x="40" y="38" font-size="20" font-weight="bold" fill="#c2185b">智慧招标平台</text>
<!-- 成功卡片 -->
<rect x="262" y="80" width="500" height="420" rx="12" fill="#ffffff" filter="url(#shadow)"/>
<!-- 成功图标 -->
<circle cx="512" cy="170" r="50" fill="#4caf50"/>
<path d="M485 170 L505 190 L545 150" stroke="#fff" stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
<text x="512" y="260" font-size="24" font-weight="bold" fill="#333" text-anchor="middle">报名提交成功!</text>
<text x="512" y="300" font-size="15" fill="#666" text-anchor="middle">您的报名申请已提交,请耐心等待审核。</text>
<rect x="330" y="320" width="364" height="36" rx="6" fill="#fff8e1"/>
<text x="512" y="344" font-size="13" fill="#f57c00" text-anchor="middle">📌 审核结果将通过站内信、邮件、短信通知,请注意查收</text>
<!-- 分隔线 -->
<line x1="330" y1="370" x2="694" y2="370" stroke="#eee" stroke-width="1"/>
<!-- 快捷操作 -->
<text x="512" y="400" font-size="14" fill="#888" text-anchor="middle">您还可以:</text>
<rect x="330" y="415" width="160" height="36" rx="6" fill="#f5f5f5" stroke="#ddd"/>
<text x="410" y="439" font-size="14" fill="#555" text-anchor="middle">📋 查看我的报名</text>
<rect x="510" y="415" width="160" height="36" rx="6" fill="#f5f5f5" stroke="#ddd"/>
<text x="590" y="439" font-size="14" fill="#555" text-anchor="middle">📄 返回招标公告</text>
<rect x="362" y="468" width="300" height="36" rx="6" fill="#c2185b"/>
<text x="512" y="492" font-size="14" fill="#fff" text-anchor="middle" font-weight="bold">进入个人中心查看报名状态</text>
</svg>
```
## 业绩证明材料管理规则
```mermaid
flowchart LR
subgraph 首次报名
A[上传业绩材料] --> B[提交报名]
B --> C[系统自动归入<br>用户档案]
end
subgraph 后续报名
D[进入报名页] --> E[系统自动调出<br>用户档案材料]
E --> F{用户操作}
F -->|选用已有| G[直接使用]
F -->|删除| H[从本次报名移除<br>(档案中保留)]
F -->|新增| I[上传新材料]
I --> J[归入档案]
G --> K[提交报名]
H --> K
J --> K
end
```
|规则|说明|
|---|---|
|**首次上传**|用户上传的业绩材料在报名提交后,系统自动复制一份归入用户档案(用户档案表),标记来源为“报名上传”|
|**后续复用**|用户进入报名页时,系统从用户档案中读取历史业绩材料,以列表形式展示,用户可直接选用|
|**删除**|用户在本次报名中删除某材料,仅从本次报名清单移除,用户档案中仍保留,不影响后续使用|
|**新增**|用户上传新材料,归入档案的同时也纳入本次报名,后续报名可继续复用|
|**去重**|系统按文件名+哈希值去重,同一文件不重复存储|
### 提交成功(邮件/站内信)
|项目|内容|
|---|---|
|**标题**|【STP平台】报名提交成功通知|
|**正文**|尊敬的 XX科技有限公司: <br> <br>您对【2026年生产用原材料框架协议采购(标段A)】的报名已成功提交。 <br> <br>我们将对您的报名资格进行审核,审核结果将通过邮件和站内信通知您,请耐心等待。 <br> <br>如需查看报名状态,请登录STP平台“我的报名”页面。 <br> <br>🔗 [https://stp.bhtz.com/my-registrations](https://stp.bhtz.com/my-registrations)|
## 状态机与内部处理逻辑
| 状态码 | 状态名称 | 描述 | 触发动作 |
| ----------------- | ------ | --------------- | ----------------------- |
| `DRAFT` | 草稿 | 供应商正在查看报名页,尚未提交 | 保存草稿 |
| `SUBMITTED` | 已提交 | 确认提交报名,等待审核 | 触发AI初审,生成审核任务 |
| `AI_PASS` | AI自动通过 | 资质审核通过 | 进入“报名通过名单”候选池 |
| `MANUAL_REVIEW` | 人工评审中 | 需采购/供应商管理专员确认 | 推送待办,超时催办 |
| `REJECTED` | 审核不通过 | 资质不符/存在风险 | 发送拒绝原因,允许在截止前重新提交 |
| `APPROVED` | 报名通过 | 审核通过,已纳入报名通过名单 | **等待招标方案评审通过**(此处为关键状态) |
| `BID_PLAN_PASSED` | 招标方案通过 | 招标方案已过审 | **发送缴费通知**,进入后续流程 |
| `CANCELLED` | 已取消 | 供应商主动取消 | 归档取消记录 |
## 关键业务规则与异常处理
| 场景 | 处理方式 |
| ------------------------ | --------------------------------------- |
| **同一供应商重复报名** | 系统检测到同一税号或统一信用代码的供应商已报名,提示“已报名,不能重复提交”。 |
| **资质文件大小/格式不符** | 前端限制 + 后端二次校验,不符合时返回明确错误提示。 |
| **报名截止时间已过** | 按钮置灰,提示“报名已截止”,不允许新提交。 |
| **==联合体投标(待确定,留扩展接口)==** | 允许在报名时添加联合体成员(需分别提供资质),系统自动校验成员关联关系。 |
| **无感登录票据过期** | 跳转时若票据超时,提示“登录状态已过期,请重新登录”,跳转至登录页。 |
| | |
## 通知与提醒策略
| 触发事件 | 通知方式 | 接收方 |
| --------------- | ----------------- | ----- |
| 审核通过/不通过 | 站内信 + 邮件 | 供应商 |
| 缴费提醒(含截止时间) | 站内信 + 邮件 + 短信(可选) | 供应商 |
| 财务确认到账 | 站内信 | 供应商 |
| 招标文件可下载 | 站内信 + 邮件 | 供应商 |
| 投标截止前24h/1h | 站内信 + 邮件 | 供应商 |
| 人工评审任务待办 | 站内信 + 邮件 | 评审人员 |
| 财务审批待办 | 站内信 + 邮件 | 财务人员 |
| 系统异常告警(支付回调失败等) | 飞书/短信 | 系统管理员 |
### 报名审核通过 → 缴费通知
| 项目 | 内容 |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| **标题** | 【STP平台】报名审核通过通知 |
| **正文** | 尊敬的 XX科技有限公司: <br>您对【2026年生产用原材料框架协议采购(标段A)】的报名已通过审核,已纳入本项目报名通过名单。 请及时登录STP平台查看和下载招标文件。<br> <br>如有疑问,请联系招标专员:王工 010-8888xxxx<br> |
## 性能与安全要求
- **并发报名**:支持单项目100+供应商同时报名,响应时间≤3秒。
- **文件上传**:支持断点续传,单个文件≤500MB,总大小≤2GB。
- **数据加密**:报名表单中的联系人手机号、身份证号采用字段级加密存储
- **日志审计**:所有报名操作(登录、提交、审核、缴费)均记录审计日志,保留≥7年。
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,527 @@
# 外部专家注册模块
| 文档名称 | 智慧招标平台(STP)外部专家注册模块详细设计 |
| :--- | :--- |
| **文档版本** | V1.1 |
| **编制日期** | 2026-06-29 |
| **关联文档** | 《需求分析说明书 V1.4》《评委管理规定》《SRM 与 STP 数据交换接口方案说明书》 |
---
## 1. 模块概述
### 1.1 建设目标
建立面向**社会外部评标专家**的在线注册、准入审核与档案管理体系,实现专家信息的结构化采集、AI辅助资质核验,并与后续的**专家抽取、智能匹配、在线评标、劳务报酬结算**全流程贯通。
### 1.2 设计原则
| 原则 | 说明 |
| :------- | :--------------------------------------- |
| **准入严控** | 严格遵循《评委管理规定》4.1/4.2要求,设置多级审核(AI初筛+人工复核)。 |
| **信息完备** | 采集字段覆盖专业能力、执业资格、收款账户等全维度。 |
| **隐私保护** | 身份证号、手机号、银行账户等敏感信息采用**字段级加密**存储(内存级密钥)。 |
| **智能提效** | AI自动识别证件、校验真伪、关联风险图谱,大幅降低人工审核成本。 |
| **统一身份** | 注册完成后自动生成STP平台账号,支持手机号/邮箱登录,无需二次注册。 |
### 1.3 适用角色与场景
| 角色 | 场景 |
| :--- | :--- |
| **外部专家申请人** | 通过招标门户“专家注册”入口提交申请,查询审核进度。 |
| **专家管理员(招标专员)** | 在后台审核专家资料、激活/驳回/冻结专家账户。 |
| **合规审计人员** | 查阅专家注册审计轨迹、关联关系图谱。 |
| **AI 审核服务** | 自动执行OCR识别、证件验真、利益冲突初筛(仅作后台参考,不要求专家主动声明)。 |
---
## 2. 页面布局与 UI 设计
### 2.1 整体注册流程步骤条(SVG 线框图 - 顶部引导)
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1000 120" font-family="'Microsoft YaHei', sans-serif">
<rect width="1000" height="120" fill="#f8f9fc" rx="8"/>
<!-- 步骤条背景 -->
<rect x="50" y="40" width="900" height="40" rx="20" fill="#fff" stroke="#e0e4ec"/>
<!-- 步骤1:已激活 -->
<circle cx="200" cy="60" r="18" fill="#c2185b"/>
<text x="200" y="66" text-anchor="middle" font-size="14" fill="#fff" font-weight="bold">1</text>
<text x="200" y="100" text-anchor="middle" font-size="13" fill="#c2185b" font-weight="bold">基本信息</text>
<!-- 连接线1 -->
<line x1="218" y1="60" x2="292" y2="60" stroke="#c2185b" stroke-width="3"/>
<!-- 步骤2:进行中 -->
<circle cx="310" cy="60" r="18" fill="#c2185b"/>
<text x="310" y="66" text-anchor="middle" font-size="14" fill="#fff" font-weight="bold">2</text>
<text x="310" y="100" text-anchor="middle" font-size="13" fill="#c2185b" font-weight="bold">专业资质</text>
<!-- 连接线2 -->
<line x1="328" y1="60" x2="402" y2="60" stroke="#e0e4ec" stroke-width="3"/>
<!-- 步骤3:未开始 -->
<circle cx="420" cy="60" r="18" fill="#e0e4ec"/>
<text x="420" y="66" text-anchor="middle" font-size="14" fill="#8895aa">3</text>
<text x="420" y="100" text-anchor="middle" font-size="13" fill="#8895aa">收款账户</text>
<!-- 连接线3 -->
<line x1="438" y1="60" x2="512" y2="60" stroke="#e0e4ec" stroke-width="3"/>
<!-- 步骤4 -->
<circle cx="530" cy="60" r="18" fill="#e0e4ec"/>
<text x="530" y="66" text-anchor="middle" font-size="14" fill="#8895aa">4</text>
<text x="530" y="100" text-anchor="middle" font-size="13" fill="#8895aa">提交审核</text>
<!-- 提示文字 -->
<text x="900" y="35" text-anchor="end" font-size="12" fill="#8895aa">* 带红色星号均为必填项</text>
</svg>
```
### 2.2 注册主表单页面(SVG 线框图 - 以“基本信息”页为例)
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1100 900" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
<defs>
<filter id="shadowLight" x="-2%" y="-2%" width="104%" height="104%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-color="#000" flood-opacity="0.04"/>
</filter>
<linearGradient id="brandGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
</defs>
<!-- 背景 -->
<rect width="1100" height="900" fill="#f5f7fa"/>
<!-- 主卡片 -->
<rect x="80" y="30" width="940" height="840" rx="16" fill="#fff" filter="url(#shadowLight)"/>
<!-- 标题区 -->
<text x="120" y="80" font-size="22" font-weight="bold" fill="#1a2332">外部专家注册</text>
<text x="120" y="108" font-size="14" fill="#8895aa">请完整填写以下信息,所有数据将受到严格加密保护</text>
<line x1="120" y1="125" x2="980" y2="125" stroke="#f0f2f7" stroke-width="2"/>
<!-- ===== 第一行:姓名 + 性别 ===== -->
<text x="120" y="170" font-size="14" fill="#4a5568">真实姓名 <tspan fill="#e91e63">*</tspan></text>
<rect x="120" y="180" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="135" y="206" font-size="14" fill="#b0bbcc">请输入中文姓名</text>
<text x="430" y="170" font-size="14" fill="#4a5568">性别 <tspan fill="#e91e63">*</tspan></text>
<rect x="430" y="180" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="445" y="206" font-size="14" fill="#b0bbcc">请选择</text>
<path d="M 670 200 L 678 208 L 686 200" stroke="#b0bbcc" stroke-width="2" fill="none"/>
<!-- ===== 第二行:身份证号(脱敏提示) ===== -->
<text x="120" y="250" font-size="14" fill="#4a5568">身份证号码 <tspan fill="#e91e63">*</tspan></text>
<rect x="120" y="260" width="420" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="135" y="286" font-size="14" fill="#b0bbcc">请输入18位身份证号</text>
<text x="560" y="286" font-size="12" fill="#8895aa">🔒 将使用AES-256加密存储</text>
<!-- ===== 第三行:出生日期(自动计算) ===== -->
<text x="120" y="330" font-size="14" fill="#4a5568">出生日期</text>
<rect x="120" y="340" width="260" height="40" rx="6" fill="#f5f6fa" stroke="#e0e4ec"/>
<text x="135" y="366" font-size="14" fill="#b0bbcc">由身份证自动识别</text>
<text x="430" y="330" font-size="14" fill="#4a5568">年龄</text>
<rect x="430" y="340" width="260" height="40" rx="6" fill="#f5f6fa" stroke="#e0e4ec"/>
<text x="445" y="366" font-size="14" fill="#b0bbcc">自动计算</text>
<!-- ===== 第四行:手机号 + 邮箱 ===== -->
<text x="120" y="410" font-size="14" fill="#4a5568">手机号码 <tspan fill="#e91e63">*</tspan></text>
<rect x="120" y="420" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="135" y="446" font-size="14" fill="#b0bbcc">请输入手机号</text>
<text x="430" y="410" font-size="14" fill="#4a5568">电子邮箱 <tspan fill="#e91e63">*</tspan></text>
<rect x="430" y="420" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="445" y="446" font-size="14" fill="#b0bbcc">请输入常用邮箱</text>
<!-- ===== 第五行:工作单位 + 职务 ===== -->
<text x="120" y="490" font-size="14" fill="#4a5568">工作单位</text>
<rect x="120" y="500" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="135" y="526" font-size="14" fill="#b0bbcc">请输入单位全称</text>
<text x="430" y="490" font-size="14" fill="#4a5568">现从事专业 <tspan fill="#e91e63">*</tspan></text>
<rect x="430" y="500" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="445" y="526" font-size="14" fill="#b0bbcc">如:化工工艺、设备管理</text>
<!-- ===== 第六行:职称 ===== -->
<text x="120" y="570" font-size="14" fill="#4a5568">技术职称 <tspan fill="#e91e63">*</tspan></text>
<rect x="120" y="580" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="135" y="606" font-size="14" fill="#b0bbcc">高级/副高级/中级/初级</text>
<rect x="440" y="580" width="260" height="40" rx="6" fill="#fafbfc" stroke="#e0e4ec"/>
<text x="455" y="606" font-size="14" fill="#b0bbcc">职称专业(如:化工工程)</text>
<!-- ===== 第七行:文件上传(资质证书) ===== -->
<text x="120" y="660" font-size="14" fill="#4a5568">职称/资质证书扫描件 <tspan fill="#e91e63">*</tspan></text>
<rect x="120" y="670" width="560" height="70" rx="6" stroke-dasharray="6,4" fill="#fafbfc" stroke="#c2185b"/>
<text x="400" y="700" text-anchor="middle" font-size="14" fill="#c2185b">📄 点击上传或拖拽文件(支持 PDF/JPG/PNG,≤20MB</text>
<text x="400" y="725" text-anchor="middle" font-size="12" fill="#8895aa">已上传:职称证.pdf (2.3MB) <tspan fill="#4caf50">✅ 识别完成</tspan></text>
<!-- ===== 底部按钮 ===== -->
<line x1="120" y1="770" x2="980" y2="770" stroke="#f0f2f7" stroke-width="2"/>
<rect x="740" y="790" width="120" height="40" rx="6" fill="#e0e4ec"/>
<text x="800" y="816" text-anchor="middle" font-size="14" fill="#8895aa">上一步</text>
<rect x="880" y="790" width="140" height="40" rx="6" fill="url(#brandGrad)"/>
<text x="950" y="816" text-anchor="middle" font-size="14" font-weight="bold" fill="#fff">下一步 →</text>
<!-- 右侧信息浮窗 -->
<rect x="720" y="140" width="260" height="180" rx="8" fill="#fff3e0" stroke="#ffcc80"/>
<text x="740" y="168" font-size="14" font-weight="bold" fill="#e65100">📌 注册须知</text>
<text x="740" y="195" font-size="12" fill="#bf360c">1. 所有信息须与身份证及职称证书一致</text>
<text x="740" y="218" font-size="12" fill="#bf360c">2. 集团公司将对信息进行真实性核验</text>
<text x="740" y="241" font-size="12" fill="#bf360c">3. 入库专家须遵守《评委管理规定》</text>
<text x="740" y="264" font-size="12" fill="#bf360c">4. 个人信息变更需及时在线更新</text>
</svg>
```
---
## 3. 详细业务流程
```mermaid
%%{init: {'theme':'base', 'themeVariables': { 'primaryColor':'#c2185b','primaryTextColor':'#fff','primaryBorderColor':'#880e4f','lineColor':'#555','secondaryColor':'#fce4ec'}}}%%
flowchart TD
subgraph 专家申请人端
A[访问招标门户] --> B[点击“专家注册”]
B --> C[填写基本信息<br>(姓名/身份证/手机/邮箱等)]
C --> D[填写专业资质<br>(职称/执业资格/工作经历)]
D --> E[签署评标纪律承诺书]
E --> F[填写收款账户信息]
F --> G[提交注册申请]
G --> H[查看审核状态]
H -- 驳回 --> I[根据驳回原因修改信息]
I --> G
H -- 通过 --> J[收到激活通知邮件/短信]
J --> K[首次登录设置密码]
K --> L[进入专家工作台]
end
subgraph STP平台后端
STP1[接收注册申请] --> STP2[触发AI初审]
STP2 --> STP3{AI检查项}
STP3 -->|OCR识别证件| STP4[提取姓名/身份证号/有效期]
STP3 -->|真伪核验| STP5[对接公安部/学信网/天眼查]
STP3 -->|利益冲突图谱(参考)| STP6[扫描与黑名单/关联企业关系]
STP4 --> STP7[生成AI审核报告]
STP5 --> STP7
STP6 --> STP7
STP7 --> STP8{AI评估结果}
STP8 -->|高风险/不通过| STP9[自动驳回 + 发送原因]
STP8 -->|中风险/待人工| STP10[推送至专家管理员待办]
STP8 -->|低风险/通过| STP11[自动进入人工抽检池]
STP10 --> STP12[人工复核资料]
STP11 --> STP12
STP12 --> STP13{复核决定}
STP13 -->|驳回| STP14[记录驳回原因 + 通知专家]
STP13 -->|需补充材料| STP15[发起补充通知]
STP13 -->|通过| STP16[生成专家档案编号]
STP16 --> STP17[写入专家库主数据]
STP17 --> STP18[自动创建STP登录账号]
STP18 --> STP19[发送激活通知]
STP19 --> STP20[记录全流程审计日志]
end
subgraph 外部系统
EXT1[公安身份认证库]
EXT2[学信网/职称系统]
EXT3[天眼查/企查查]
EXT4[邮件短信网关]
end
STP5 -.-> EXT1
STP5 -.-> EXT2
STP6 -.-> EXT3
STP19 -.-> EXT4
H -- 补充材料 --> STP15
STP14 --> H
```
---
## 4. 核心流程时序图
```mermaid
sequenceDiagram
participant U as 专家申请人
participant FE as STP前端
participant GW as API网关
participant RegSvc as 注册服务
participant AISvc as AI审核服务
participant IDSvc as 身份认证服务(外部)
participant DB as 专家库数据库
participant Admin as 专家管理员
participant Notify as 通知服务
U->>FE: 填写注册表单 + 上传证件
FE->>FE: 前端校验(非空/手机格式/身份证校验位)
FE->>GW: POST /api/v1/expert/register
GW->>RegSvc: 转发请求
RegSvc->>DB: 校验身份证号是否已注册(防重)
alt 已存在
DB-->>RegSvc: 记录已存在
RegSvc-->>FE: 409 Conflict { message: "该身份证已注册" }
else 未注册
RegSvc->>AISvc: 异步启动AI审核任务(OCR+验真+图谱)
RegSvc-->>FE: 202 Accepted { applicationId: "EXP_2024001" }
FE-->>U: 显示“提交成功,审核中...”
AISvc->>IDSvc: 调用公安接口校验身份证号与姓名
IDSvc-->>AISvc: 实名验证通过/失败
AISvc->>AISvc: OCR识别职称证书关键字段
AISvc->>AISvc: 扫描企业关联图谱(作为利益冲突参考,不要求专家声明)
AISvc-->>RegSvc: 返回AI审核结论(Pass/Review/Reject
alt AI高风险或敏感
RegSvc->>DB: 状态更新为 PENDING_MANUAL
RegSvc->>Admin: 推送待办任务(站内+邮件)
Admin->>RegSvc: POST /api/v1/expert/audit { action: approve/reject }
else AI低风险
RegSvc->>DB: 状态更新为 APPROVED(自动)
end
RegSvc->>DB: 生成专家档案(EXP_XXXXX
RegSvc->>RegSvc: 创建STP登录账号(默认手机号+随机密码)
RegSvc->>Notify: 发送激活通知(含账号及首次登录链接)
Notify-->>U: 短信+邮件
U->>FE: 点击激活链接
FE->>RegSvc: POST /api/v1/expert/activate { password }
RegSvc->>DB: 更新密码哈希(Argon2id
RegSvc-->>FE: 激活成功,跳转至专家工作台
end
```
---
## 5. 专家激活流程
以下是专家激活设置密码的详细流程图,清晰展示了从审核通过到账号激活的全过程:
```mermaid
flowchart TD
A[人工/AI审核通过] --> B[系统自动创建STP账号]
B --> C[生成随机临时密码(仅系统内部占位)]
C --> D[发送激活通知邮件/短信<br>(内含激活链接,不含密码)]
D --> E[专家收到通知,点击激活链接]
E --> F[跳转至激活页面]
F --> G[专家填写新密码及确认密码]
G --> H{前端校验}
H -->|格式不符| I[提示密码不满足安全策略<br>(长度≥8,含大小写、数字、特殊字符)]
I --> G
H -->|通过| J[提交激活请求<br>POST /api/v1/expert/activate]
J --> K[后端校验链接有效性及过期时间]
K -->|无效/过期| L[提示链接失效,重新发送]
L --> E
K -->|有效| M[对密码进行Argon2id哈希加密]
M --> N[更新数据库:<br>密码哈希 + 状态ACTIVATED + 激活时间]
N --> O[记录审计日志]
O --> P[返回激活成功]
P --> Q[专家跳转至专家工作台]
Q --> R[流程结束]
style A fill:#e8f5e9,stroke:#388e3c
style R fill:#e0e0e0,stroke:#616161
style C fill:#fff3e0,stroke:#ff9800
style M fill:#fce4ec,stroke:#c2185b
```
**流程要点说明:**
- **随机密码未告知专家**:系统生成后仅用于初始化账户,专家通过激活链接自行设置密码,全程无需接触该临时密码。
- **密码安全策略**:前端校验密码复杂度(长度、字符类型),后端再次校验并哈希存储(Argon2id)。
- **链接安全性**:激活链接包含唯一token,后端校验其有效性与过期时间(通常24小时内有效),防止重放攻击。
- **审计追踪**:所有操作(创建账号、发送通知、激活成功)均有日志记录。
## 6. 数据模型设计
### 6.1 外部专家主表 `t_expert_profile`
| 字段名 | 类型 | 约束 | 说明 |
| :--------------------- | :----------- | :--------------- | :----------------------------------------------------------------- |
| `expert_id` | VARCHAR(32) | PK | 专家档案编号(EXP_YYYYMMDD_XXX |
| `user_id` | VARCHAR(32) | FK | 关联STP用户账号表(登录凭证) |
| `real_name` | VARCHAR(64) | NOT NULL | 真实姓名 |
| `id_card_no` | VARCHAR(256) | NOT NULL, UNIQUE | 身份证号(**字段级加密存储**) |
| `gender` | TINYINT | | 1-男,2-女 |
| `birth_date` | DATE | | 出生日期(由身份证提取) |
| `phone` | VARCHAR(256) | NOT NULL | 手机号(字段级加密) |
| `email` | VARCHAR(128) | NOT NULL | 电子邮箱 |
| `company` | VARCHAR(128) | | 工作单位 |
| `profession` | VARCHAR(64) | NOT NULL | 从事专业 |
| `title` | VARCHAR(32) | NOT NULL | 职称等级(高级/副高/中级) |
| `title_major` | VARCHAR(64) | | 职称专业 |
| `qualification_files` | JSON | | 资质证书文件URL列表(含OCR元数据) |
| `bank_name` | VARCHAR(64) | | 开户银行 |
| `bank_account` | VARCHAR(256) | | 银行账号(字段级加密) |
| `expertise_tags` | JSON | | 擅长领域标签(用于智能匹配) |
| `status` | VARCHAR(20) | NOT NULL | DRAFT/PENDING_AI/PENDING_MANUAL/REJECTED/APPROVED/ACTIVATED/LOCKED |
| `ai_audit_report` | JSON | | AI审核报告(含评分、风险点) |
| `manual_audit_comment` | TEXT | | 人工审核备注 |
| `discipline_signed` | BOOLEAN | DEFAULT 0 | 是否签署评标纪律承诺书 |
| `created_at` | DATETIME | | 注册时间 |
| `updated_at` | DATETIME | | 更新时间 |
| `activated_at` | DATETIME | | 首次激活时间 |
### 6.3 审核记录表 `t_expert_audit_log`
| 字段名 | 类型 | 约束 | 说明 |
| :------------ | :---------- | :-- | :-------------------------- |
| `audit_id` | VARCHAR(32) | PK | |
| `expert_id` | VARCHAR(32) | FK | |
| `auditor` | VARCHAR(64) | | 审核人(AI/人工) |
| `action` | VARCHAR(20) | | APPROVE/REJECT/REQUEST_INFO |
| `reason` | TEXT | | 原因 |
| `attachments` | JSON | | 附件URL |
| `created_at` | DATETIME | | |
---
## 7. 接口详细定义
### 7.1 提交注册申请
| 项目 | 内容 |
| :--- | :--- |
| **路径** | `/api/v1/expert/register` |
| **方法** | `POST` |
| **认证** | 否(公开接口,需图形验证码) |
**请求体(部分字段)**
```json
{
"realName": "王建国",
"idCardNo": "110101199003074477",
"gender": 1,
"phone": "13800138000",
"email": "wangjianguo@example.com",
"company": "清华大学化工系",
"profession": "化学工程",
"title": "SENIOR", // SENIOR/VICE_SENIOR/MIDDLE/JUNIOR
"titleMajor": "化学工程",
"expertiseTags": ["石油化工", "反应工程", "分离技术"],
"bankName": "中国银行北京分行",
"bankAccount": "6217850000000000",
"qualificationFiles": [
{
"fileName": "professor_cert.pdf",
"fileUrl": "https://oss.stp.com/...",
"ocrResult": { "title": "教授", "issueDate": "2018-06" }
}
],
"disciplineAccepted": true, // 是否同意评标纪律
"captchaToken": "a1b2c3d4"
}
```
**成功响应(异步)**
```json
{
"code": "0",
"data": {
"applicationId": "EXP_20260628_001",
"status": "PENDING_AI",
"estimatedTime": "预计24小时内完成初审"
}
}
```
### 7.2 查询审核进度
| 项目 | 内容 |
| :----- | :---------------------------------- |
| **路径** | `/api/v1/expert/application/status` |
| **方法** | `GET` |
| **参数** | `applicationId` |
### 7.3 专家激活
| 项目 | 内容 |
| :----- | :------------------------ |
| **路径** | `/api/v1/expert/activate` |
| **方法** | `POST` |
**请求体**
```json
{
"applicationId": "EXP_20260628_001",
"password": "Abcd@2026#",
"confirmPassword": "Abcd@2026#"
}
```
### 7.4 后台专家审核(管理员)
| 项目 | 内容 |
| :--- | :--- |
| **路径** | `/api/v1/admin/expert/audit` |
| **方法** | `POST` |
| **认证** | 需 ADMIN/EXPERT_MANAGER 角色 |
**请求体**
```json
{
"applicationId": "EXP_20260628_001",
"action": "APPROVE", // APPROVE / REJECT / REQUEST_INFO
"reason": "职称证书已验证,资质符合要求",
"notifyExpert": true
}
```
---
## 8. AI 赋能详细设计
| AI 能力 | 实现方式 | 输出 | 优先级 |
| :------------- | :---------------------------------------- | :----- | :-- |
| **身份证 OCR 解析** | 调用OCR服务(如百度/阿里)提取姓名、号码、有效期,自动回填表单。 | 结构化字段 | P0 |
| **实名认证** | ==对接公安部CTID接口核验身份证号与姓名一致性。== | 通过/不通过 | P0 |
| **职称证书验真** | ==对接人社部/学信网接口(或基于图像防伪特征识别)验证证书真伪。== | 可信度评分 | P1 |
| **专业标签智能推荐** | 根据专家填写的从事专业与历史项目品类,自动匹配并推荐擅长的采购品类标签。 | 标签列表 | P1 |
| **AI初审报告生成** | 汇总各项检查结果,生成带评分(0-100)的建议结论(自动通过/人工复核/拒绝)。 | 审核报告 | P0 |
---
## 9. 业务规则与异常处理
| 场景 | 规则/处理方式 |
| :------------ | :------------------------------------------------------- |
| **身份证号唯一性** | 系统全局唯一,已注册或审核中的身份证不得重复提交。 |
| **手机号/邮箱唯一性** | 同一手机号或邮箱仅能注册一次(支持找回账号)。 |
| **职称等级门槛** | 至少具备**中级及以上**职称方可入库(《评委管理规定》4.2.1)。 |
| **驳回后重提** | 允许在 30 天内修改后重新提交,保留历史审核记录供查。 |
| **虚假信息处理** | 一经发现虚假注册,永久拉入黑名单,并通报集团内各单位。 |
| **评标纪律签署** | 注册时须同意《评标纪律承诺书》,否则无法提交。 |
| **敏感信息脱敏展示** | 后台管理中,身份证号显示为 `110101********4477`,银行账号显示为 `******0000`。 |
| **数据导出** | 支持按专家状态、专业分类、注册时间段导出加密Excel(需二次审批)。 |
---
## 10. 安全与合规设计
| 安全维度 | 落地措施 |
| :--------- | :------------------------------------------------------------ |
| **传输安全** | 全链路 HTTPS + TLS 1.3,文件上传使用预签名URL直传OSS。 |
| **敏感字段加密** | 身份证、手机号、银行账号使用 **AES-256-GCM** 应用层字段级加密,DEK内存漂移(见《需求说明书》4.2)。 |
| **防机器人** | 注册提交需通过图形验证码 + 滑动验证(极验/人机识别)。 |
| **密码策略** | 首次激活强制设置密码(长度≥8,含大写、小写、数字、特殊字符)。 |
| **审计日志** | 记录每次提交、审核、激活操作的IP、设备指纹、操作人,写入哈希链防篡改(见《需求说明书》4.8.1)。 |
| **个人信息保护** | 遵循《个人信息保护法》,注册前弹出《隐私政策》与《用户协议》,须勾选同意。 |
---
## 11. 通知策略矩阵
| 触发事件 | 通知方式 | 通知对象 | 文案要点 |
| :--- | :--- | :--- | :--- |
| 提交注册成功 | 站内信 | 申请人 | 已收到申请,预计24小时反馈 |
| AI 审核不通过 | 邮件+短信 | 申请人 | 详细说明不通过原因及修改指引 |
| 转入人工审核 | 站内信+邮件 | 专家管理员 | 新专家待审核,附AI报告摘要 |
| 人工审核通过 | 邮件+短信 | 申请人 | 恭喜通过审核,请点击链接激活账号 |
| 账号激活成功 | 站内信 | 申请人 | 欢迎成为STP评标专家,可开始接受评标任务 |
| 补充材料通知 | 邮件+短信 | 申请人 | 请于X月X日前补充如下材料... |
@@ -0,0 +1,3 @@
# 新用户注册模块
新用户注册包含了[[供应商注册模块]]和[[外部专家注册模块]] ,详情见具体文件。
@@ -0,0 +1,411 @@
# 登录模块
## 1. 模块概述
### 1.1 设计原则
| 原则 | 说明 |
| -------- | ----------------------------- |
| **安全优先** | 传输全程加密,防暴力破解。 |
| **角色分流** | 通过“内部员工登录”开关明确区分认证路由,杜绝权限越界。 |
| **存量兼容** | 无缝兼容 SRM 存量供应商账号,降低用户迁移成本。 |
| **体验极简** | 支持账号/手机双因子登录,并提供“记住我”与智能异常提示。 |
### 1.2 角色与认证路由映射
| 用户类型 | 开关状态 | 认证目标 | 说明 |
| ---------- | --------- | -------------------- | ------------------------------------------------- |
| **集团内部员工** | 开启(员工模式) | IAM(集团统一身份认证) | 跳转至 IAM 登录页或调用 OAuth2/OIDC 接口,不校验平台本地密码。 |
| **外部供应商** | 关闭(供应商模式) | STP 本地用户表 / SRM 回退认证 | 优先校验 STP 本地账号;若不存在,自动路由至 SRM 验证(满足 SRM 存量用户无感登录)。 |
## 2. 页面布局与 UI 设计
### 2.1 整体布局
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
<defs>
<linearGradient id="bgGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#f8f9fc"/>
<stop offset="100%" stop-color="#e9ecef"/>
</linearGradient>
<linearGradient id="brandGrad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
<filter id="cardShadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="10" stdDeviation="20" flood-color="#000" flood-opacity="0.08"/>
</filter>
<filter id="inputShadow" x="-2%" y="-2%" width="104%" height="104%">
<feDropShadow dx="0" dy="2" stdDeviation="4" flood-color="#c2185b" flood-opacity="0.1"/>
</filter>
</defs>
<!-- 背景 -->
<rect width="1200" height="800" fill="url(#bgGrad)"/>
<!-- 左侧品牌区域 -->
<rect x="0" y="0" width="600" height="800" fill="url(#brandGrad)"/>
<circle cx="300" cy="350" r="160" fill="rgba(255,255,255,0.08)"/>
<circle cx="300" cy="350" r="100" fill="rgba(255,255,255,0.12)"/>
<text x="300" y="240" text-anchor="middle" font-size="48" font-weight="bold" fill="#fff" letter-spacing="4">智慧招标平台</text>
<text x="300" y="290" text-anchor="middle" font-size="16" fill="rgba(255,255,255,0.8)" letter-spacing="2">Smart Tendering Platform</text>
<!-- 左侧装饰性图标(简化招投标场景) -->
<g transform="translate(300, 420)" stroke="rgba(255,255,255,0.3)" stroke-width="2" fill="none">
<rect x="-80" y="-60" width="160" height="120" rx="8"/>
<line x1="-40" y1="-30" x2="40" y2="-30"/>
<line x1="-40" y1="-10" x2="30" y2="-10"/>
<line x1="-40" y1="10" x2="20" y2="10"/>
<rect x="-30" y="30" width="60" height="20" rx="3" fill="rgba(255,255,255,0.2)"/>
</g>
<text x="300" y="540" text-anchor="middle" font-size="14" fill="rgba(255,255,255,0.7)">AI 原生 · 全流程线上闭环 · 主动式智能</text>
<text x="300" y="570" text-anchor="middle" font-size="12" fill="rgba(255,255,255,0.5)">覆盖公开招标 · 邀请招标 · 竞争性谈判 · 单一来源</text>
<!-- 右侧登录卡片 -->
<rect x="660" y="120" width="440" height="560" rx="16" fill="#ffffff" filter="url(#cardShadow)"/>
<!-- 卡片顶部:欢迎语 -->
<text x="880" y="180" text-anchor="middle" font-size="24" font-weight="bold" fill="#1a2332">欢迎登录</text>
<text x="880" y="210" text-anchor="middle" font-size="14" fill="#8895aa">登录您的账户,开始智能招采之旅</text>
<!-- 角色切换开关 -->
<rect x="700" y="235" width="360" height="40" rx="20" fill="#f0f2f7" stroke="#e0e4ec"/>
<rect x="702" y="237" width="176" height="36" rx="18" fill="#c2185b" id="toggleSlider"/>
<text x="790" y="261" text-anchor="middle" font-size="14" font-weight="bold" fill="#fff">👤 内部员工</text>
<text x="970" y="261" text-anchor="middle" font-size="14" fill="#8895aa">🏢 外部账号</text>
<text x="880" y="290" text-anchor="middle" font-size="12" fill="#c2185b">当前:内部员工模式(走 IAM 认证)</text>
<!-- Tab 切换:账号登录 / 手机登录 -->
<rect x="700" y="315" width="360" height="2" fill="#e0e4ec"/>
<rect x="700" y="315" width="100" height="2" fill="#c2185b"/>
<text x="730" y="340" font-size="16" font-weight="bold" fill="#1a2332">账号登录</text>
<text x="880" y="340" font-size="16" fill="#8895aa" text-anchor="middle">手机验证码</text>
<!-- 账号输入 -->
<text x="700" y="385" font-size="14" fill="#4a5568">账号 / 手机号</text>
<rect x="700" y="395" width="360" height="44" rx="8" fill="#f7f8fc" stroke="#e0e4ec"/>
<text x="715" y="423" font-size="14" fill="#b0bbcc">请输入您的账号</text>
<circle cx="1020" cy="417" r="8" fill="#c2185b" opacity="0.6"/>
<text x="1025" y="422" font-size="12" fill="#fff">!</text>
<!-- 密码输入 -->
<text x="700" y="465" font-size="14" fill="#4a5568">密码</text>
<rect x="700" y="475" width="360" height="44" rx="8" fill="#f7f8fc" stroke="#e0e4ec"/>
<text x="715" y="503" font-size="14" fill="#b0bbcc">请输入您的密码</text>
<text x="1015" y="503" font-size="14" fill="#8895aa">👁️</text>
<!-- 额外选项:记住我 + 忘记密码 -->
<rect x="700" y="535" width="16" height="16" rx="3" fill="#c2185b"/>
<path d="M704 543 L708 547 L716 537" stroke="#fff" stroke-width="2" fill="none"/>
<text x="724" y="549" font-size="14" fill="#4a5568">记住我</text>
<text x="950" y="549" font-size="14" fill="#c2185b" text-anchor="end" text-decoration="underline">忘记密码?</text>
<!-- 登录按钮 -->
<rect x="700" y="570" width="360" height="48" rx="10" fill="url(#brandGrad)" filter="url(#inputShadow)"/>
<text x="880" y="600" text-anchor="middle" font-size="18" font-weight="bold" fill="#fff">登 录</text>
<!-- 立即注册 & SRM 提示 -->
<text x="700" y="645" font-size="14" fill="#4a5568">还没有账号?</text>
<text x="820" y="645" font-size="14" font-weight="bold" fill="#c2185b" text-decoration="underline">立即注册</text>
<rect x="700" y="660" width="360" height="2" stroke-dasharray="4,4" stroke="#e0e4ec"/>
<rect x="700" y="660" width="100" height="2" fill="#e0e4ec"/>
<text x="880" y="672" text-anchor="middle" font-size="12" fill="#8895aa">温馨提示</text>
<rect x="700" y="685" width="360" height="36" rx="6" fill="#fff3e0" stroke="#ffcc80"/>
<text x="880" y="709" text-anchor="middle" font-size="12" fill="#e65100">💡 原 SRM 注册用户,可直接使用 SRM 账号密码登录,无需重复注册。</text>
<!-- 底部版权 -->
<text x="880" y="780" text-anchor="middle" font-size="11" fill="#c0c8d8">© 2026 滨化集团 | 智慧招标平台 V1.0</text>
</svg>
```
### 2.2 账号登录页面
关键元素:
* 账号输入框
* 密码输入框
* `记住我`选择框。
* `忘记密码`链接
* `登录`按钮
* `内部员工登录`选择框,选择后将走集团 IAM 路由进行身份认证,否则走平台账号路由进行身认证。
* `立即注册`链接
* 登录说明:原 SRM 注册用户,可直接使用 SRM账号密码登录,无需重复注册。
### 2.3 手机验证码登录页面
关键元素:
* 手机号输出框
* 验证码输出框
* 发送验证码按钮
* 登录按钮
### 2.4 页面状态与元素交互说明
| UI 元素 | 交互行为 | 状态变化 |
| ------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------ |
| **内部员工 / 供应商 切换滑块** | 点击滑块或文字,滑块滑动至对应位置,下方提示文字切换,表单保持不变,但认证逻辑改变。 | 员工模式:下方显示`当前:内部员工模式(IAM 认证)`,且“忘记密码”链接跳转至 IAM 密码找回页;“立即注册”置灰或隐藏(员工由 HR 系统同步)。供应商模式:恢复常规提示。 |
| **账号登录 / 手机登录 Tab** | 点击切换 Tab,下方表单内容切换。 | 账号登录:显示账号+密码框。手机登录:显示手机号+验证码框+发送验证码按钮。 |
| **记住我** | 勾选后,登录成功时将 `refresh_token` 存入浏览器本地(Secure Storage),有效期为 7 天。 | 复选框状态持久化(基于本地 Cookie 记忆偏好)。 |
| **忘记密码** | 供应商模式:跳转至“重置密码”页(需短信/邮箱验证)。员工模式:跳转至 IAM 统一认证的密码重置页面。 | 页面跳转。 |
| **立即注册** | 供应商模式:跳转至供应商注册页(含 SRM 存量账号绑定引导)。员工模式:不可用(灰色)。 | 页面跳转 / 按钮置灰。 |
## .详细交互流程
### 3.1 登录主流程
```mermaid
graph TD
A[供应商访问STP门户] --> B{检测登录态?}
B -->|有有效Token| C[无感跳转至工作台]
B -->|无Token| D[展示登录页面]
D --> E[输入账号/密码]
E --> F{账号来源检测}
F -->|STP本地账号| G[STP身份认证]
F -->|SRM存量账号| H[调用Vendor SSO鉴权]
G --> I{认证成功?}
H --> I
I -->|失败| J[显示错误信息<br>记录失败日志]
J --> K{失败次数≥5?}
K -->|是| L[锁定账号30分钟<br>触发安全告警]
K -->|否| E
I -->|成功| M{是否MFA启用?}
M -->|是| N[发送短信验证码]
N --> O[验证码校验]
O -->|失败| N
O -->|成功| P[生成JWT令牌]
M -->|否| P
P --> Q[更新最后登录信息]
Q --> R[记录审计日志]
R --> S[跳转至供应商工作台]
```
### 3.2 时序图:多认证源详细交互
```mermaid
sequenceDiagram
participant U as 用户/浏览器
participant FE as STP 前端
participant GW as API 网关
participant Auth as 认证服务
participant IAM as 集团 IAM
participant LocalDB as STP 用户库
participant SRM as SRM 系统
U->>FE: 输入账号/密码,点击登录
FE->>FE: 前端基础校验(非空/格式)
FE->>GW: POST /api/v1/auth/login { loginType, account, password, mode }
alt 员工模式 (mode=employee)
GW->>Auth: 转发至 IAM 认证处理器
Auth->>IAM: OAuth2/OIDC 密码模式 / LDAP 验证
IAM-->>Auth: 返回用户信息 (employeeId, dept, roles)
Auth-->>Auth: 若成功,生成 STP 内部 Session
Auth-->>FE: 200 OK { token, redirectUrl }
else 供应商模式 (mode=vendor)
GW->>Auth: 转发至本地认证处理器
Auth->>LocalDB: 查询 account
alt 本地用户存在
LocalDB-->>Auth: 返回用户实体(含 salt, hash
Auth->>Auth: 校验密码(BCrypt/Argon2
else 本地用户不存在
Auth->>SRM: 调用 /api/v1/auth/login/for-stp { username, password }
SRM-->>Auth: 200 { srmId, name, taxId, ... }
Auth->>LocalDB: 创建影子用户(绑定 srmId)
LocalDB-->>Auth: 返回新用户实体
end
Auth-->>FE: 200 OK { token, vendorId, srmId, redirectUrl }
end
FE->>FE: 存储 Token 至 LocalStorage/Session
FE-->>U: 302 重定向至工作台
```
### 3.3 手机验证码登录详细流程
```mermaid
sequenceDiagram
participant U as 用户
participant FE as 前端
participant Auth as 认证服务
participant SMS as 短信网关
participant Cache as Redis 缓存
U->>FE: 输入手机号,点击“发送验证码”
FE->>FE: 校验手机号格式(11位/国际格式)
FE->>Auth: POST /api/v1/auth/sms/send { phone, captchaToken }
Auth->>Auth: 校验图形验证码(防机器人)
Auth->>Cache: 查询该手机号发送频率(60s内是否已发)
alt 频率过高
Cache-->>Auth: 已发送,拒绝
Auth-->>FE: 429 Too Many Requests { remainSeconds: 45 }
else 频率正常
Auth->>Auth: 生成6位随机验证码(如 882345)
Auth->>Cache: 存储验证码至 RedisKey: sms:login:{phone}, TTL: 5min
Auth->>SMS: 调用短信发送接口
SMS-->>Auth: 发送成功
Auth-->>FE: 200 OK { expireSeconds: 300 }
FE-->>U: 开始倒计时(60s
end
U->>FE: 输入验证码,点击“登录”
FE->>Auth: POST /api/v1/auth/login/mobile { phone, code }
Auth->>Cache: 读取验证码并比对
alt 验证码匹配
Cache-->>Auth: 匹配成功
Auth->>Auth: 查询或创建用户(若不存在则自动注册/绑定SRM)
Auth-->>FE: 200 { token, isNewUser }
else 验证码错误或过期
Auth-->>FE: 401 { code: "ERR_SMS_001", message: "验证码错误或已过期" }
end
```
## 4. 接口详细定义
### 4.1 账号密码登录接口
|项目|内容|
|---|---|
|**路径**|`/api/v1/auth/login`|
|**方法**|`POST`|
|**是否认证**|否(公开接口)|
**请求体**
```json
{
"account": "zhangli@binhai.com", // 账号/邮箱/手机号
"password": "abcsdfg",
"mode": "vendor", // "employee" 或 "vendor"
"back_url":"/index" //返回的链接,可省略
"rememberMe": true // 是否记住我
}
```
**成功响应(200**
```json
{
"code": "0",
"data": {
"accessToken": "eyJhbGciOiJSUzI1NiIs...",
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
"expiresIn": 1800,
"userInfo": {
"userId": "U_20240001",
"userType": "VENDOR", // EMPLOYEE / VENDOR
"name": "张立",
"srmId": "SRM_12345", // 若存在关联
"roles": ["SUPPLIER"],
"redirectUrl": "/dashboard/vendor"
}
}
}
```
**失败响应(401**
```json
{
"code": "ERR_AUTH_001",
"message": "账号或密码错误",
"remainingAttempts": 4
}
```
### 4.2 手机验证码发送接口
|项目|内容|
|---|---|
|**路径**|`/api/v1/auth/sms/send`|
|**方法**|`POST`|
**请求体**
```json
{
"phone": "13800138000",
"captchaToken": "a1b2c3d4" // 图形验证码 token
"mode": "vendor", // "employee" 或 "vendor"
"back_url":"/index" //返回的链接,可省略
"rememberMe": true // 是否记住我
}
```
**成功响应**
```json
{
"code": "0",
"data": {
"expireSeconds": 300,
"resendAfterSeconds": 60
}
}
```
## 5. 安全设计细项
| 维度 | 具体策略 |
| -------------- | ----------------------------------------------------------------------------------------------------- |
| **传输加密** | 强制 HTTPS/TLS 1.3,禁用弱加密套件。 |
| **密码存储** | 使用 **Argon2id** 或 **BCryptcost≥10** 加盐哈希存储。 |
| **防暴力破解** | 单账号 5 次失败后锁定 30 分钟(IP 维度 20 次失败后全局验证码强制)。 |
| **JWT 安全** | 算法使用 RS256(私钥签名,公钥验签);Access Token 有效期 30 分钟;Refresh Token 有效期 7 天,存储于 HTTPOnly Secure Cookie(防 XSS)。 |
| **验证码安全** | 手机验证码 6 位数字,有效期 5 分钟;发送间隔限制 60 秒;单日单号码上限 10 条。 |
| **登录审计** | 记录:用户 ID、登录时间、IP、User-Agent、设备指纹(Canvas Fingerprint)、认证源(IAM/Local/SRM)。审计日志写入哈希链(见《需求说明书》4.8.1)。 |
| **多因素认证(MFA** | 预留扩展接口。敏感操作(修改密码、更换手机)强制二次验证。 |
| **会话并发** | 默认允许同一账号多设备登录,==但可在管理后台启用“单点登录互踢”策略(保留配置项)==。 |
## 6. 异常场景与错误码矩阵
| 异常场景 | 错误码 | HTTP 状态码 | 用户提示 | 后端处理 |
| --------------- | --------------- | -------- | ----------------- | ---------- |
| 账号为空 | `ERR_PARAM_001` | 400 | 请输入账号 | 无 |
| 密码为空 | `ERR_PARAM_002` | 400 | 请输入密码 | 无 |
| 账号/密码不匹配(本地) | `ERR_AUTH_001` | 401 | 账号或密码错误 | 失败计数 + 1 |
| 账号不存在且 SRM 验证失败 | `ERR_AUTH_002` | 401 | 账号不存在,请检查或注册 | 记录未注册尝试 |
| 账号已锁定 | `ERR_AUTH_003` | 403 | 账号已被锁定,请 30 分钟后重试 | 告警(若为频繁攻击) |
| 手机号格式错误 | `ERR_PARAM_003` | 400 | 请输入正确的手机号 | 无 |
| 验证码发送频率过高 | `ERR_SMS_001` | 429 | 发送过于频繁,请 60 秒后重试 | 返回剩余秒数 |
| 验证码错误/过期 | `ERR_SMS_002` | 401 | 验证码错误或已过期 | 清除已用验证码 |
| IAM 认证超时 | `ERR_IAM_001` | 504 | 集团认证服务繁忙,请稍后重试 | 熔断降级,记录日志 |
## 7. 登录成功后的路由与权限门控
登录成功后,前端根据 `userType` 和 `roles` 决定跳转目标,同时后端在后续请求中通过 **JWT** 持续校验权限。
| 用户类型 | 默认跳转页面 | 可访问范围 |
| ------------------ | --------------------- | ------------------------------------- |
| **供应商(VENDOR** | `/portal/dashboard` | 招标公告列表、报名管理、我的投标、中标通知、保证金管理。 |
| **评审专家(EXPERT** | `/expert/dashboard` | 评标任务列表、回避申报、承诺书签署、历史评审记录。 |
| **内部员工(EMPLOYEE** | `/employee/dashboard` | 根据子角色(需求人员/招标专员/审批人/管理员)展示对应工作台。 |
| **系统管理员(ADMIN** | `/admin/console` | 用户管理、流程配置、审计日志、系统监控。<br>(管理员不在普通页面登录) |
```mermaid
graph LR
A[登录成功] --> B{UserType}
B -->|VENDOR| C[供应商工作台]
B -->|EXPERT| D[专家工作台]
B -->|EMPLOYEE| E{子角色}
E -->|需求人员| F[需求工作台]
E -->|招标专员| G[招标管理工作台]
E -->|审批人| H[审批待办中心]
E -->|管理员| I[系统管理后台]
style A fill:#e8f5e9,stroke:#388e3c
style C fill:#e3f2fd,stroke:#1565c0
style D fill:#fff3e0,stroke:#e65100
style I fill:#fce4ec,stroke:#c2185b
```
## 8. 与 SRM 无感登录的集成衔接
登录页下方的 **“原 SRM 注册用户,可直接使用 SRM账号密码登录”** 提示对应后端自动回退逻辑(详见 3.2 时序图)。此外,登录成功后,前端页面内嵌的指向 SRM 的所有链接,将自动携带 **跳转票据(Ticket** 实现无感跳转(技术方案详见《SRM 与 STP 数据交换接口方案说明书》3.4.2 节)。
+747 -36
View File
@@ -1,52 +1,763 @@
# 滨化集团STP平台技术方案 # 滨化集团智慧招标平台(STP)用户需求分析说明书
## 一、服务器配置方案 **版本:** V1.4
**编制日期:** 2026年6月25日
**编制依据:**
- 《招标管理制度》(2026年4月版)
- 《招标评委管理规定》(2026年4月版)
- 《8.4.4.1 招标供应商长短名单管理流程》
- 《8.4.4.2 招标委托流程》
- 《8.4.4.3 招标立项流程》
- 《8.4.4.4 开标及评标流程》
- 《8.4.4.5 定标流程》
- 《8.4.4.6 投标保证金管理流程》
采用**本地化物理机 + 容器化部署**,兼顾性能与数据安全。以下为建议配置: ---
### ==**生产环境**==
| 整合后服务器角色 | 数量 | CPU | 内存 | 存储 | 整合说明 | 操作系统 | ## 第一章 项目概述
| ----------- | --- | --- | ----- | -------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------- |
| **高性能计算节点** | 2台 | 32核 | 256GB | 系统盘1TB SSD + 数据盘4TB NVMe | **整合了原“AI算力节点”与“数据库服务器”** 。通过容器化技术,在同一台物理机上运行AI推理、图数据库(Neo4j)及关系型数据库(PostgreSQL)主节点,需要做好资源隔离与配额管理。 | CentOS 10 |
| **通用计算节点** | 2台 | 32核 | 128GB | 系统盘1TB SSD + 数据盘2TB NVMe | **整合了原“应用微服务集群”、“缓存与消息中间件”** 。通过Kubernetes统一调度,运行所有业务微服务、Redis、Kafka/RabbitMQ。更高的单机配置能承载更多容器。 | CentOS 10 |
| **存储与存证节点** | 1台 | 16核 | 64GB | 系统盘1TB SSD + 数据盘**32TB** (RAID6) | **整合了原“文件与对象存储”、“区块链存证节点”及“运维管理”** 。在一台高存储服务器上,通过虚拟化或容器化分别运行MinIO对象存储服务、区块链存证节点以及Prometheus/Grafana/ELK等运维监控工具。 | CentOS 10 |
| 合计 | 5台 | | | | | |
### ==**测试环境**== ### 1.1 建设目标
建设一个**AI原生、全流程线上闭环、主动式智能**的招标平台,覆盖公开招标、邀请招标、竞争性谈判、单一来源等采购方式,实现从需求提报到合同归档的全生命周期数字化、智能化管理,显著提升效率、降低风险、优化供应链生态。
**数量:1台** ### 1.2 业务范围
- **适用对象**:集团公司及下属全资子公司和控股公司
- **适用采购类型**:工程、货物、服务
- **招标门槛**:工程/货物类单项/框架年度估算 ≥50万元;服务类 ≥30万元
- **谈判管理**:30万元及以上服务类采购(独家/单一/竞争性谈判)
| 配置项 | 推荐规格 | 备注 | ### 1.3 核心业务变革点
| ---------- | ------------- | --------------------------------------- |
| **CPU** | **16核** | 编译代码和运行容器池需要多核 |
| **内存** | **64GB** | 跑PostgreSQL+Neo4j+Redis+微服务集群约占用30-40GB |
| **系统/数据盘** | **2TB SSD** | 无需单独分系统盘,全盘搞定 |
| **操作系统** | **CentOS 10** | 兼容性好 |
> **存储预估**:按年均500个项目、每项目约10GB附件计算,年新增约5TB,建议**起步配置30TB可用容量**,支持在线扩容。(标书等相关资料要保存15年,以备检查) | 旧流程痛点 | 新流程解决方案 |
| :----------------- | :------------------------------ |
| 公开招标线下报名、邮件投标,数据割裂 | **招标门户+在线加密投标**,全流程线上闭环 |
| 供应商与专家库封闭,资源难以沉淀 | **AI 自主寻源+AI资格审核**,自动入库形成潜在资源池 |
| 资质审核、雷同检测、价格分析全靠人工 | **AI自动完成**,人类转为复核与决策 |
| 系统间割裂,需手动对账、补录 | 与**OA/财务/SAP/档案**等系统深度集成,数据自动流转 |
| 传统菜单式界面,学习成本高 | **角色化智能工作台+智能助手“小滨”**,事找人 |
---
## 第二章 用户角色与职责矩阵
| 角色 | 主要职责 | 关键操作 | 关联制度/流程 |
| :--------------- | :------------ | :-------------------------- | :------------------- |
| **需求部门人员** | 发起采购需求,提供技术规格 | 自然语言描述需求、确认委托单、参与技术标评审 | 《招标管理制度》5.3 |
| **招标专员** | 策划与执行招标全流程 | 确认AI寻源、编辑招标文件、组织评审、发起审批 | 《招标管理制度》4.1;各流程文件 |
| **采购执行部门(采购专员)** | 整合计划、签订合同 | 提报委托、确认中标结果、执行合同、收取履约/质量保证金 | 《招标管理制度》4.2;《定标流程》 |
| **评标专家(内/外)** | 独立、公正评审 | 在线盲评、打分、签署《评标纪律承诺书》、回避申报 | 《评委管理规定》4.6/4.7/4.8 |
| **评标委员会工作领导小组** | 重大事项决策 | 审批废标、处理异常、审批特殊评标情况 | 《评委管理规定》4.1.2 |
| **审批人(各级领导)** | 线上审批关键节点 | 审批委托/立项/公告/定标等 | 《招标管理制度》5.5/5.8/5.11 |
| **供应商** | 参与投标 | 注册、报名、缴费、加密投标、接收结果 | 《招标管理制度》5.9/5.10 |
| **系统管理员** | 平台运维、权限配置 | 用户管理、流程配置、接口监控 | - |
| **合规/审计** | 监督、审计 | 查看审计轨迹、围串标报告 | 《招标管理制度》5.17 |
---
## 第三章 详细业务流程
本章按招标全生命周期分解为6个主阶段。全景流程图如下:
```mermaid
graph TD
Start((开始))-->A[[8.4.4.2招标委托流程]]
subgraph H [寻源与立项]
B[[8.4.4.1供应商寻源流程]] -.-> C[[8.4.4.3招标立项流程]]
end
A-->H
H-->D[[8.4.4.4开标及评标流程]]
D-->E[[8.4.4.5定标流程]]
E-->|资料转交|G[[SRM平台]]
E-->F[[8.4.4.6投标保证金管理流程]]
F-->End([结束])
```
*说明:供应商寻源流程与招标立项流程可能并行展开,招标立项是关键流程,立项后方能进入开标与评标流程。*
### 3.1 阶段一:需求与委托
- **对应流程文件**`8.4.4.2 招标委托流程`
#### 流程图
```mermaid
graph TD
A([采购人员登录]) --> B1[选择采购计划<br>(从SRM读取,可跳过)]
B1 --> C[向“小滨”描述需求] --> E[AI解析并预填委托单]
B1 -->|手动| D[进入委托表单]
E --> F[需求人员确认/修改]
D --> F
F --> H[推送OA审批]
H --> I{审批结果}
I -->|通过| J([委托流程通过])
I -->|驳回| F
Sendback[下级流程退回]-.->F
subgraph SA[备注]
Remark["当招标委托为邀请招标时,采购人员须从供应商库中选择供应商名单(AI辅助)"]
end
```
#### 关键表单
- **《招标委托表》**(分货物类 BH-SCM-JL-008、工程类 BH-SCM-JL-009、服务类 BH-SCM-JL-010
- **核心元素**:项目名称、标的数量、预算/估算金额(含税)、费用来源(大修/技改/项目/其他)、招标方式(公开/邀请)、付款方式、交货期/工期、立项审批情况、技术要求、技术评标办法、投标单位资格要求、合同模板、**邀请招标推荐单位(不少于3家)**。
#### 详细说明
| 项目 | 内容 |
| :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **触发条件** | 采购计划已下达,或紧急需求获口头批准。 |
| **登录** | 本系统登录与 IAM 对接,实现单点登录。 |
| **输入** | 自然语言描述 / 历史同类项目 / 立项文件。 |
| **输出** | 结构化《招标委托表》。 |
| **角色操作** | - **需求部门**:提出采购计划。<br>- **采购人员**:审核及补充委托资料。<br>- **需求人员**:确认AI预填单。<br>- **需求部门负责人**:组织内部评审(此为非OA的必要评审,确定技术参数和预算)。<br>- **OA审批人**:二级部门负责人(采购部/相关部长)审核。<br>- **AI“小滨”**:提取关键信息、预填表单。 |
| **业务规则** | - 委托单核心元素必须完整(制度5.3.2)。 |
| **采购计划** | ==不直接从 SAP 读取,通过 SRM API 读取。== |
| **异常处理** | - 驳回:记录原因,退回修改。<br>- 超时未批:系统自动催办(24h/48h)。<br>- 撤回:需求人员因其它原因撤回委托(已通过审批并进入下一流程的无法退回)。 |
| **AI介入** | - 自然语言解析并智能预填委托单。<br>- 自动判断是否需招标(对照5.1.3门槛)。<br>- 推荐预算参考与历史中标价。 |
---
### 3.2 阶段二:供应商寻源
- **对应流程文件**`8.4.4.1 招标供应商长短名单管理流程`(版本1.1
#### 流程图
```mermaid
graph TD
Start([招标委托流程通过]) --> Branch{招标方式}
Branch -->|邀请招标| Invite[邀请招标分支]
Branch -->|公开招标| Public[公开招标分支]
subgraph Invite [直接读取采购员提供的供应商名单]
end
subgraph Public [公开招标分支]
B0[AI生成寻源公告] --> B1[修改确认寻源公告]
B1 --> B2{组织评审寻源公告}
B2 -->|未通过|B1
B2 -->|通过|B3{审批}
B3 -->|驳回|B1
B3 -->|通过|B4[发布寻源公告]
B4-->C1[[AI智慧寻源]]
C1-->B5["供应商报名<br>(平台注册/提交资质材料)"]
B5 --> E1["供应商自动入库<br>(本地供应商池)"]
E1 --> B6[[AI辅助供应商审核筛选<br>(资质/风险/关联关系)]]
B6 --> B7[组织评审]
B7 --> B8[形成报名通过单位名单]
B8 --> B9[接收短名单<br>(即报名通过名单)]
B8 -.->|并行| B10[[库外供应商SRM入库]]
end
Invite --> End([输出短名单,进入后续招标环节])
B9 --> End
```
#### 关键表单
| 表单名称 | 产生环节 | 核心元素 | 备注 |
| :----------- | :------------ | :--------------------------- | :----- |
| **供应商长名单** | 活动030 | 供应商名称、联系人、推荐部门、初步评审意见、资质概况 | 邀请招标专用 |
| **供应商短名单** | 活动050 / 活动120 | 最终入围供应商名单、评审结论、是否在库内 | |
| **寻源报名公告** | 活动060 | 项目概述、报名资格要求、技术要求、报名资料清单、截止时间 | 公开招标专用 |
| **报名通过单位名单** | 活动110 | 通过审核的供应商名称、审核意见、风险等级 | 公开招标专用 |
#### 流程活动详细说明
| 活动名称 | 活动描述 | 角色 | 输入 | 输出 |
| :--------------- | :----------------------------------------------------------------------------------------------------------------------------- | :----- | :------------------ | :------------- |
| **形成短名单** | 对评审通过的供应商推荐为本次招标拟邀请单位,形成最终短名单。若供应商不在合格供方库内,则触发供应商注册/认证流程。 | 相关部门人员 | 评审结论 | **《供应商短名单》** |
| **编制寻源报名公告** | 招标管理部根据招标委托编制公开寻源报名公告,明确报名资格、技术要求等。 | 招标人员 | 招标委托 | 《寻源报名公告》草案 |
| **组织评审寻源公告** | 组织需求、采购等部门对报名公告进行评审。 | 相关部门人员 | 《寻源报名公告》草案 | 评审意见 |
| **审批** | 对寻源公告进行审批。 | 审批人 | 评审后的公告 | 审批通过的公告 |
| **发布寻源公告** | 在招标门户、行业平台等渠道发布公告。 | 招标人员 | 审批通过的公告 | 已发布公告 |
| **AI 智慧寻源** | ==AI 通过SRM库、本平台供应商池、互联网平台(须维护信任平台列表)查找相关的信息,找到优质供应商,并主动向其发送邀请报名的信息(电子邮件等),同时会将寻源结果**向招标专员、供应商管理专员**反馈。(反馈之后经供应商管理专员确认,必须加回执)== | AI | 采购需求、审批通过的公告 | 主动发邀请邮件,AI寻源结果 |
| **接收供应商报名资料** | 接收供应商在线提交的报名资料(资质、业绩等)。 | 招标人员 | 供应商报名信息 | 报名单位清单 |
| **AI 辅助供应商管理审核** | 对报名单位的资质、风险、关联关系进行审核。 | AI | 报名资料 | 审核意见、筛选结果 |
| **组织评审** | 对报名单位的业绩、纪委审核情况进行综合评审。 | 相关部门人员 | 报名资料+审核意见 | 评审意见 |
| **形成报名通过单位名单** | 根据评审结果确定通过报名的单位名单。 | 相关部门人员 | 评审意见 | **《报名通过单位名单》** |
| **接收短名单** | 接收经评审通过的供应商短名单(邀请招标)或报名通过单位名单(公开招标),作为后续招标文件发放的依据。 | 招标人员 | 《供应商短名单》或《报名通过单位名单》 | 已接收的短名单 |
| **库外供应商入库** | ==通过审核的合格供应商,若在库外,则将信息推送到 SRM 中。== | 系统 | 供应商名单 | 供应商在SRM中的ID |
#### 业务规则汇总
| 规则名称 | 规则内容 | 来源 |
| :------------ | :-------------------------------- | :---------- |
| **邀请招标供应商数量** | 短名单中供应商数量应≥3家; | 制度5.9.1.b |
| **公开招标二次寻源** | 设置接口允许二次寻源 | 制度5.9.1.a |
| **供应商库内优先** | - | 流程活动050 |
| **竞争性要求** | 短名单中的供应商应规模、实力相当,地域不宜过度集中,避免串标风险。 | 流程文件关键控制点 |
| **回避原则** | 评审人员与投标单位有利害关系的应回避。 | 《评委管理规定》4.7 |
| **公告发布渠道** | 寻源公告应在招标门户发布,同步至行业平台。 | 制度5.9.1.a |
#### 异常处理
| 异常场景 | 处理方式 |
| :---------------- | :------------------------------------------- |
| **邀请招标推荐供应商数量不足** | AI自动从合格供方库中补充匹配度高的供应商;若仍不足,系统提示转为公开招标或竞争性谈判。 |
| **公开招标报名数量不足** | 留二次报名接口。 |
| **供应商资质审核不通过** | 系统自动通知供应商并说明原因,允许在报名截止前修改重新提交。 |
| **供应商不在库内** | 自动发起供应商注册/认证流程,认证完成前可先参与投标(需在定标前完成入库)。 |
| **短名单竞争性不足** | AI预警并建议扩大寻源范围或调整名单,专员确认后可强制提交但需备注理由。 |
#### AI赋能点
| 活动/节点 | AI能力 | 功能描述 | 优先级 |
| :------- | :------ | :-------------------------------------------------------- | :-- |
| 汇总供应商 | 推荐引擎 | 根据采购品类、预算、地域,从合格供方库和外部企业库自动推荐潜在供应商,附推荐理由(历史合作、资质等级、关联风险)。 | P0 |
| 形成长/短名单 | 知识图谱 | 自动分析供应商之间的关联关系(投资、任职、共同投标历史),预警可能存在的围串标风险。 | P0 |
| 长名单评审 | 竞争性分析 | 分析长名单中供应商的地域分布、规模层次,输出竞争性评分,提示“地域过于集中”或“实力差距过大”。 | P1 |
| 供应商管理审核 | OCR+API | 自动识别营业执照、资质证书关键字段,对接工商/天眼查API验证真伪和经营状态。 | P0 |
| 形成报名通过名单 | 自动汇总 | 根据评审规则自动汇总通过名单,生成《报名通过单位名单》初稿。 | P0 |
#### ==AI 智慧寻源子流程==
```mermaid
graph TD
A[启动AI自动供应商寻源]
A --> C[SRM库内供应商]
A --> D[本平台供应商池]
A --> E[互联网平台]
C --> F[AI智能匹配筛选供应商]
D --> F
E --> F
F --> G[AI主动发送邀请报名信息<br>(短信、电子邮件等)]
G --> H[AI将寻源结果反馈]
H --> K[供应商管理专员结果确认]
K --> M([流程结束])
```
---
### 3.3 阶段三:招标立项流程
- **对应流程文件**`8.4.4.3 招标立项流程``8.4.4.1 招标供应商长短名单管理流程`
#### 流程图
```mermaid
graph TD
A([委托生效]) --> B[招标专员指定/系统分配]
B --> C1{AI检测是否存在<br>同类型未完成立项的需求}
C1 -->|存在| C2[推送合并招标建议<br>至招标专员]
C1 -->|不存在| E[[8.4.4.1 供应商寻源流程]]
C2 --> C3{招标专员确认<br>是否合并招标?}
C3 -->|是| C4[将当前委托合并至<br>已有招标立项]
C4 --> C5[AI自动修改/更新<br>原招标方案]
C5 --> D[招标专员复核<br>修改后的招标方案]
C3 -->|否| E
E --> C[AI 生成招标方案]
B -->|并行| C
C --> D
D --> N{招标方案评审}
N -->|驳回| D
N -->|通过| O{立项审批}
O -->|通过| P[一键向过审供应商<br>定向发送招标文件]
O -->|驳回| D
P --> End([结束])
C5 -.->|合并后跳过独立立项| O
```
## 二、算力配置方案 **==流程合并待确认==**
#### 关键表单
- **《供应商长名单》、《供应商短名单》、《报名通过单位名单》**(来自8.4.4.1流程)
- **《评标委员会》**BH-SCM-JL-011):在立项阶段初步确定工作领导小组。
| 配置 | 适用场景 | | #### 详细说明
| :----------------------------------------------- | :------------------------------- | ------------ |
| 4张 **NVIDIA RTX 4090 24GB****RTX A6000 48GB** | 通过模型量化(INT8)部署,满足50-100人并发,响应<5秒 | ==测试环境配套搭建== |
## 三、第三方平台API接口方案 | 项目 | 内容 |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **触发条件** | 招标委托审批通过。 |
| **输入** | 生效的《招标委托表》、供应商池数据、系统中未完成立项的同类型委托。 |
| **输出** | 审批通过的《招标方案》、寻源公告、供应商短名单/报名通过名单;或合并后的原立项更新。 |
| **角色操作** | - **招标专员**:接收合并建议并决策,编制/复核招标方案(含标段划分、评标办法)、组织评审、提交审批。 <br>- **AI**:检测同类型需求、生成合并建议、修改招标方案。 <br>- **审批人**:对所提报招标方案进行审批。路径:二级部门负责人 → 一级部门负责人 → (50万以上)分管公司领导 → (500万以上)总裁。**审批人有招标专员选择,系统仅作推荐和提醒**。 <br>- **相关部门**:评审报名单位业绩。 |
| **评分方法编辑** | 通过模板选择后进行修改,系统提供维护模板库功能。 |
| **业务规则** | - 合并招标的判断标准:采购品类相同或高度相似、技术要求可兼容、供货/服务周期重叠、预算来源可合并或独立核算。 <br>- 招标方案评审需包括:技术文件、拟邀请单位、评标办法等。 <br>- 合并后的招标方案仍需经过评审和审批流程。 |
| **异常处理** | - 合并建议被拒绝:进入正常寻源与招标方案生成流程。 <br>- 合并后原方案修改不通过:退回专员重新复核。 <br>- 合并建议被拒绝后,后面仍能执行合并(只要双方立项流程未结束)<br>- 委托合并之后,后面仍可以重新拆分(只要双方立项流程未结束)<br><br>- 审批驳回:专员修改后重新提交。 <br>- 其它原因退回:因其它原因无法立项可将资料退回到委托方。 |
| **AI赋能** | - **同类型需求检测**:基于NLP语义分析和采购品类编码,自动检索系统中“委托生效但未完成立项”的同类型需求。 <br>- **合并建议生成**:输出《合并招标建议书》,包含可合并项目列表、预算汇总、时间冲突分析、预期效益估算。 <br>- **招标方案自动修改**:合并后自动调整原方案的标段划分、采购数量、预算总额、供应商名单、时间安排等。 <br>- **主动寻源**:基于采购品类,从潜在供应商池推荐新供应商。 <br>- 自动校验推荐供应商与黑名单、利益冲突。 |
### 1. 必接核心接口清单 ---
| 序号 | 第三方系统 | 接口方向 | 协议/认证方式 | 核心用途 | 备注 | ### 3.4 阶段四:供应商投标
| :-- | :-------------------- | :-------- | :---------------- | :---------------------------- | ---------------------------------------------------------------------------------- |
| 1 | **OA审批系统** | 双向(推送+回调) | HTTPS + mTLS双向认证 | 推送委托/立项/定标审批单,接收审批结果回调【附录2】 | | - **对应流程文件**`8.4.4.4开标及评标流程`(活动010-030
| 2 | **IAM身份认证** | 双向 | SAML 2.0 / OIDC | 单点登录(SSO),自动同步组织架构 | |
| 3 | **SRM供应商平台** | 双向 | HTTPS + API Token | 同步供应商入库信息、推送中标结果、移交合同资料 | 1、信息同步(R)<br>2、已完成认证的供应商自动推送进SRM(C)<br>3、单点登录(SRM + STP<br>4、采购计划(R<br>5、中标资料(C | #### 流程图
| 4 | **紫光电子档案系统** | 单向(推送) | HTTPS + IP白名单 | 合同签订后自动推送全流程归档文件包【3.9】 | 待确认 | ```mermaid
| 5 | **天眼查/企查查**==(次数收费)== | 单向(查询) | HTTPS + API Key | 供应商注册时自动核验工商信息、经营异常、关联风险【3.2】 | ==直接链接== | graph TD
| 6 | **税务发票验真** | 单向(查询) | HTTPS + 数字证书 | 验证投标方提供的业绩发票真伪【3.6】 | | A([公告发布]) --> B[供应商登录]
| 7 | **短信/邮件服务** | 单向(发送) | HTTPS + API Key | 发送开标提醒、中标通知、系统催办等 | 邮箱需新开招标专用账号 | B --> C{是否收取标书费}
C -->|是| D[供应商缴纳标书费]
C -->|否| E[供应商查看招标文件]
D -->E
E --> H[供应商缴纳保证金<br>参考8.4.4.6保证金流程]
H --> K[供应商上传投标文件]
K --> M{是否符合开标条件}
M -->|是|N[[专家抽取与评标准备]]
M -->|否|P{废标审批}
P -->|驳回|N
P -->|通过|Q([废标])
```
#### 关键表单
- 无新增表单,主要产生《报名通过单位名单》。
#### 详细说明
| 项目 | 内容 |
| :-------- | :------------------------------------------------------------------------------------------------------ |
| **触发条件** | 招标文件发送。 |
| **输入** | 供应商注册信息、资质文件、缴费凭证。 |
| **输出** | 审核通过的供应商名单、投标文件存证。 |
| **角色操作** | - **供应商**:注册、报名、缴费、上传标书。<br>- **AI**:自动审核资质、验真、对账。<br>- **相关部门人员**:对报名单位业绩等进行评审。 |
| **标书费收取** | ==是否收取标书费以及标书费的金额在招标方案制定确定。<br>供应商缴纳标书费后向平台提交转账凭证,平台发起审批向财务确认,确认后才能查看招标文件内容。== |
| **缴纳保证金** | ==供应商缴纳保证金后,向平台提交保证金转账证据,平台发起审批向财务确认,确认后自动转为保证金缴纳状态。== |
| **业务规则** | - 投标保证金≤预算2%,最高80万元(仅提醒)(制度5.9.3.1)。<br>- 投标文件必须加密(**==系统加密/个人加密,待确认==**),开标前不可解密。 |
| **异常处理** | - 缴费未到账:系统轮询支付网关 |
| **AI赋能** | - **OCR识别**:提取资质证书关键字段。<br>- **真伪核验**:对接工商/税务API验真。<br>- **自动对账**:支付回调后更新缴费状态。<br>- **区块链存证**:存证投标文件哈希。 |
---
### 3.5 阶段五:专家抽取与评标准备
- **对应流程文件**`8.4.4.4 开标及评标流程`(活动050
#### 流程图
```mermaid
graph TD
A([符合开标条件]) --> B[AI根据专业匹配专家库]
B --> C[招标专员设置抽取规则<br>可灵活设置规则]
C --> D[系统随机抽取]
D --> H[确定专家名单]
H --> I["发送邀请"]
I --> J{专家确认?}
J -->|确认| K[签署《评标纪律承诺书》]
J -->|拒绝| H
K --> L[评标小组组建完成]
L --> M["截标(手动)"]
M-->End([结束])
```
#### 关键表单
- **《评标纪律承诺书》**BH-SCM-JL-014
- **《招标评委签到表》**BH-SCM-JL-013
#### 详细说明
| 项目 | 内容 |
| :------- | :----------------------------------------------------------------------------------------------------------------------------- |
| **触发条件** | 招标专员判断符合开标条件。 |
| **输入** | 项目信息、专家库数据。 |
| **输出** | 专家名单、承诺书签署记录。 |
| **角色操作** | - **招标专员**:确认抽取规则。<br>- **AI**:匹配、抽取、校验回避。<br>- **专家**:确认参与、签署承诺书。 |
| **业务规则** | - 评委人数:最低价法≥3人单数;综合评估法≥5人单数(评委管理规定4.1.3)。<br>- 抽取时间:开标前24小时内(评委管理规定4.5.1)。<br>- 回避原则:投标人近亲属、项目主管部门人员、有经济利益关系者(仅提醒)(评委管理规定4.7)。 |
| **异常处理** | - 专家人数不足:从外部专家库补充或放宽专业范围。<br>- 专家临时缺席:从备选库重抽。 |
| **AI赋能** | - **智能匹配**:根据品类和技术复杂度推荐匹配专家。<br>- **知识图谱反欺诈**:自动挖掘专家与供应商的隐性关联,预警利益冲突。 |
---
### 3.6 阶段六:开标与评标
- **对应流程文件**`8.4.4.4 开标及评标流程`(活动060-120
#### 流程图
```mermaid
graph TD
A([到达开标时间]) --> B[一键开标/解密/脱敏]
B --> C{评标方法判断}
C -->|综合评估法| D1[评委在线盲评打分]
D1 --> D2[AI分析偏离度并提醒复核]
D2 --> D3[系统汇总得分<br>+AI价格分析/雷同检测]
D3 --> D4[生成评标汇总表<br>按综合得分排序]
C -->|最低价法| E1[检查实质性响应]
E1 --> E2[有效投标人≥3家?]
E2 -->|否| E3[转入不足三家处理流程<br>招标制度5.11.3]
E2 -->|是| E4[按报价从低到高排序]
E4 --> E5[AI检测异常低价并提请复核]
E5 --> E6[生成评标汇总表<br>按报价排序推荐中标]
D4 --> F[价格谈判和修改]
E6 --> F
E3 --> F
F-->G[重新生成评标汇总表并排序]
G-->End([进入定标阶段])
```
## 四、其他
### 1. 域名以及SSL,需后续沟通 定标之前留修改价格接口,修改后再重新排序。
#### 关键表单
- **《投标企业签到表》**(现场/电子邮件/SRM开标)(BH-SCM-JL-012
#### 详细说明
| 项目 | 内容 |
| :------- | :------------------------------------------------------------------------------------------------------------------------ |
| **触发条件** | 到达招标文件规定的开标时间。(手动确认) |
| **输入** | 所有加密投标文件、评标办法。 |
| **输出** | 评委打分表、雷同检测报告、价格分析报告、得分汇总表。 |
| **角色操作** | - **系统**:自动开标、解密、脱敏、分发、汇总。<br>- **评委**:在线打分、填写评审意见。<br>- **AI**:偏离度分析、价格分析、雷同检测。<br>- **招标人员**:判断是否符合招标条件。 |
| **业务规则** | - 有效投标人低于3家,若评委认定仍有竞争性,经评标委员会工作领导小组批准后可继续评标(制度5.11.3)。<br>- 技术标与商务标分开评审。 |
| **异常处理** | - 不符合招标条件(投标人不足):经审批后废标。 |
| **AI赋能** | - **自动脱敏**:NLP识别并隐藏供应商身份信息。<br>- **雷同检测**:文本相似度计算,高亮显示高相似段落。<br>- **价格分析**:基于历史数据标注异常低价/高价。<br>- **业绩发票验真**OCR+税务局API验真。 |
---
### 3.7 阶段七:定标与审批
- **对应流程文件**`8.4.4.5 定标流程`
#### 流程图
```mermaid
graph TD
A[评标结束] --> B0[AI 生成评标报告]
B0-->B[招标专员修改确认评标报告<br>活动010]
B --> C[AI给出中标建议]
C --> D[招标专员审核修改]
D -->F[发起定标审批<br>活动020]
F --> H{执行定标审批<br>活动030}
H -->|通过| I[定标生效]
H -->|驳回| J[退回复议]
J --> K[评标小组重评]
K --> B
I --> L["发布中标结果(AI)<br>活动040"]
L --> M["发送通知给所有投标方<br>(AI生成草稿,经招标管理部总经理电子签名后自动发送)"]
subgraph SRM[SRM平台]
N[招标资料转交至委托部门]
N --> N2[[合同生成]]
end
M -->|转交|SRM
N2 --> P["退还投标保证金<br>(一键向财务发起审批)"]
P --> Q[审核]
Q --> R[[招标资料归档]]
R-->End([结束])
```
#### 关键表单
- **《评标报告》**
- **《中标后资料交接单》**BH-SCM-JL-020
#### 详细说明
| 项目 | 内容 |
| :-------- | :----------------------------------------------------------------------------------------------------------------------------------------------- |
| **触发条件** | 评标汇总完成。 |
| **输入** | 评标汇总表、AI分析报告。 |
| **输出** | 评标报告、中标公示、中标通知书。 |
| **角色操作** | - **招标专员(活动010,020**:编制报告、发起审批。<br>- **审批人(活动030**:执行定标审批,路径见审批矩阵。<br>- **系统(活动040-060**:发布结果、转交资料、归档。 |
| **保证金退还** | 支持按招标项目、招标专员分类批量勾选供应商合并退费。向 OA 发送退费审批。 |
| **业务规则** | - 原则上按综合排名第一推荐中标(制度5.11.4)。<br>- 定标审批权限(流程文件审批矩阵):50万元以下二级部门负责人→一级部门负责人;500万元以下→分管公司领导;以上→总裁。**审批人由招标专员选择,系统仅作推荐和提醒。**<br>- 中标资料须转交委托部门(制度5.12)。 |
| **异常处理** | - 审批驳回:退回评标小组复议。<br>- 中标供应商放弃:按排名顺延,重新报批。 |
| **AI赋能** | - **AIGC评标报告**:自动生成结构化报告。<br>- **中标建议可解释性**:提供各方案优劣势对比。 |
---
### 3.9 阶段九:资料归档与全程监督
#### 流程图
```mermaid
graph TD
A[合同签订完成] --> B[系统自动收集全流程资料]
B --> C[按制度5.16清单整理]
C --> D[生成电子归档文件包]
D --> E[推送至电子档案系统]
E --> F[归档完成]
F --> G[审计人员随时查阅]
G --> H[BI看板实时展示]
```
#### 关键表单
- 归档清单见制度5.16,包括:《招标委托资料》、《招标文件》、《投标单位签到表》、《评委签到表》、《评标纪律承诺书》、《投标文件》、《评标报告》、《中标通知书》等。
#### 详细说明
| 项目 | 内容 |
| :------- | :------------------------------------------------------------------------------------------------ |
| **触发条件** | 合同签订完成。 |
| **输入** | 全流程文档。 |
| **输出** | 归档文件包、审计日志。 |
| **角色操作** | - **系统**:自动收集、整理、推送。<br>- **审计/合规**:查询、导出。 |
| **业务规则** | - 归档资料必须包括制度5.16列明的所有文件。 |
| **归档系统** | 紫光档案管理系统 |
| **异常处理** | - 资料缺失:系统提示缺失项,要求补传。 |
| **AI赋能** | - **智能分类**:自动分类并按规范命名。<br>- **缺失检测**:对比归档清单,自动识别缺失文件。<br>- **审计辅助**:支持自然语言查询(如“查询2025年所有围标疑似项目”)。 |
---
### 3.10 关键业务规则汇总
| 规则名称 | 具体内容 | 来源 |
| :----------- | :----------------------------------------------------------------- | :-------------------- |
| **招标门槛** | 工程/货物≥50万;服务≥30万 | 《招标管理制度》5.1 |
| **评委人数** | 最低价法≥3人单数;综合评估法≥5人单数 | 《评委管理规定》4.1.3 |
| **评委抽取时间** | 开标前24小时内 | 《评委管理规定》4.5.1 |
| **回避情形** | 投标人近亲属、项目主管部门、经济利益关系 (仅作提醒) | 《评委管理规定》4.7 |
| **保证金上限** | 不超过预算2%,最高80万元(仅作提醒) | 《招标管理制度》5.9.3.1 |
| **邀请招标供应商数** | ≥3家 | 《招标管理制度》5.9.1 |
| **废标条件** | 有效投标人<3且无竞争性;所有投标不符合要求 | 《招标管理制度》5.11.2/5.11.3 |
| **审批权限** | 50万/500万为分界,对应二级部门负责人/一级部门负责人/分管领导/总裁。(**最终审批人由招标专员选择,系统仅作推荐和提醒**) | 各流程文件审批矩阵 |
| **内部专家奖励** | 最低价法50元/人;综合评估法100元/人 | 《评委管理规定》4.9 |
| **外部专家报酬** | 3小时内500元,超时每增1小时+100元,日上限1500元 | 附录B |
---
## 第四章 数据安全机制
### 1. 总体安全策略与目标
为确保招标全流程数据的机密性、完整性和可用性,针对内外部威胁(包括具备服务器操作权限的开发人员、DBA、运维人员),建立 **“数据全程加密、密钥动态漂移、权限最小化、AI按需脱敏”** 的纵深防御体系。所有加密与密钥管理均在应用层和内存中实现。
**核心目标**
- **防窥探**:即使攻击者获得服务器操作权限,也无法直接读取数据库中的招标敏感数据(如投标报价、专家打分、关联关系图谱)。
- **防泄露**:静态文件加密存储,传输全程加密,密钥在内存中动态漂移,杜绝落盘。
- **防越权**:前后端双重权限校验,AI Agent仅能通过流程状态门控获取被授权数据,禁止通过对话方式旁路获取受限信息。
- **可审计**:所有数据访问、密钥迁移、AI调用行为均记录不可篡改日志(使用哈希链+数字签名代替区块链)。
### 2. 密钥管理机制:内存动态漂移 + 应用层分割
#### 2.1 设计原则
- **密钥永不落盘**:加密密钥仅在服务器内存中生成和存储,禁止写入任何持久化存储(磁盘、SSD、数据库)。
- **动态漂移**:密钥的存储内存地址每隔若干小时随机迁移,同时变更密钥本身(旧密文使用旧密钥解密后使用新密钥重加密),降低内存被暴力扫描窃取的风险。
- **密钥分割**:单条数据密钥被分割为2~3个分片,保存在不同进程/容器的内存区域,使用时分片聚合,用完即时销毁。
### 3. 静态数据加密
#### 3.1 数据库加密
| 加密粒度 | 实施方案 |
| :--- | :--- |
| **透明加密** | 使用磁盘加密作为基础防护,防止物理磁盘被盗。但透明加密不防止 DBA 直接读取数据库文件,因此仍需字段级加密。 |
| **字段级加密** | 对极端敏感字段采用应用层字段加密:每个字段使用独立 DEK,DEK 密文存储在同一行的单独列中。 |
| **索引混淆** | 加密字段不能直接用于条件查询,采用确定性加密生成可搜索的盲索引,盐值也存在于内存中,定期轮换并重建索引。 |
#### 3.2 静态文件加密
所有上传文件(投标书PDF、资质扫描件、专家承诺书、音视频记录)采用信封加密:
1. 每个文件随机生成文件密钥,内存中保存。
2. 使用 FEK 对文件进行加密,分块上传(每块 4MB),每块独立加密。
3. FEK 使用主密钥加密后,作为文件元数据的一部分存储于对象存储的字段或单独数据库表。
4. 文件在对象存储中始终处于密文状态,即使直接拷贝也无法读取。
#### 3.3 备份与快照加密
- 数据库备份、对象存储快照必须使用独立的备份密码。
- 备份密钥由双人控制(分段存储于两个保险柜),恢复时需要两人输入各自的密码段。
### 4. 传输加密与 API 安全
#### 4.1 全链路加密
- 所有对外服务(前端、API、Webhook)强制启用加密算法,禁用弱密码套件。
- 使用内部 CA 签发服务端证书,客户端验证服务端证书指纹。
- 服务间调用(微服务、AI Agent)采用双向认证。
### 5. 前后端权限隔离与角色端口设计
#### 5.1 角色与端口映射
平台为不同角色分配独立的访问端口(或子域名),并在网关层绑定最小权限策略。
#### 5.2 前后端双重权限校验
- **前端**:登录后获取 JWT,JWT 中仅包含角色和用户 ID,不包含任何权限矩阵。前端根据角色代码展示不同菜单,但关键按钮(如“查看报价”)仍需要后端二次确认。
- **后端**:每个 API 调用都会执行 **Policy Enforcement Point (PEP)**,根据用户 ID + 资源 ID 查询:
- 用户是否属于该项目的相关角色(如:该专家是否被分配到该项目评委组)
- 当前流程状态是否允许访问该资源(例如:开标前任何人不能查看报价文件)
### 6. AI Agent 安全隔离与按需数据访问
#### 6.1 基于角色 AI Agent 架构
每个角色(供应商、专家、招标专员、审批人、管理员)分别部署一个独立的 AI Agent 容器,使用不同的 API Key 和身份凭证。Agent 之间的内存和密钥完全隔离。
```mermaid
graph TB
subgraph 用户层
U1[供应商]
U2[评标专家]
U3[招标专员]
U4[审批领导]
U5[管理员]
U6[其他角色 ...]
end
subgraph AI助手层
A1[供应商助手]
A2[专家助手]
A3[招标助手]
A4[审批助手]
A5[管理助手]
A6[其他助手 ...]
end
subgraph 安全管控层
CHECK[对话安全守卫]
GATE[数据访问门禁]
end
subgraph 数据与知识层
KB[公开知识库<br>操作手册/流程教学]
BIZ[业务数据<br>报价/评分/投标文件]
end
subgraph 输出层
OUT[安全答复]
end
U1 --> A1
U2 --> A2
U3 --> A3
U4 --> A4
U5 --> A5
U6 --> A6
A1 --> CHECK
A2 --> CHECK
A3 --> CHECK
A4 --> CHECK
A5 --> CHECK
A6 --> CHECK
CHECK -->|安全且需数据| GATE
CHECK -->|教学或越权| KB
GATE -->|权限+流程通过| BIZ
BIZ --> OUT
KB --> OUT
```
#### 6.2 流程驱动的数据门控
Agent 在调用任何业务数据前,必须通过统一数据网关验证请求合法性。网关检查:
1. **角色匹配**:Agent 的 JWT 中角色声明是否与目标数据要求一致。
2. **流程状态**:查询招标项目的工作流引擎当前状态,根据前述“状态门控”决定是否放行。
3. **数据脱敏**:即使允许访问,返回的数据也会根据角色自动脱敏。
#### 6.3 AI 对话隔离:防止越狱查询
当流程状态为“数据不可见”时,AI Agent 进入教学/流程提醒模式:
- Agent 的上下文强制注入:`当前阶段禁止透露任何项目数据,包括报价、投标人名称、评分。若用户询问数据,统一回答:“暂未到查看时间,请等待系统通知。如需帮助,请描述您的问题(如:如何上传文件?)”。`
- 后端增加对话内容审计:每次用户询问,AI Agent 先将问题发送至越狱检测服务(基于语义相似度和正则),命中敏感词(“报价”、“分数”、“谁中标了”)且当前流程禁止时,直接拦截并记录异常日志。
- 对于普通操作教学(“如何修改密码”),使用独立的“小滨-助手”知识库(不含任何项目数据),不涉及数据查询。
#### 6.4 Agent 调用审计
- 记录每个 Agent 发起的每一次数据请求(包括时间、项目ID、请求参数、返回数据指纹)。
- 审计日志写入哈希链日志表,防止管理员篡改。
### 7. 无死角防窥探
即使开发人员、拥有服务器 root 权限或数据库管理员权限,也无法直接读取到明文敏感数据,真正做到无死角防窥探。
#### 7.1 开发与调试环境
- **脱敏数据镜像**:开发测试环境使用完全脱敏的伪造数据(通过数据脱敏工具生成),不包含真实供应商、报价。
- **密钥沙盒**:开发环境使用独立的种子口令,无法接触生产密钥。
- **CI/CD 隔离**:构建流水线中使用的变量(如数据库密码)来自 Vault 动态 secret,构建完成后立即失效。
### 8. 审计与监控
#### 8.1 审计日志保护(哈希链 + 数字签名)
采用 **哈希链 + 数字签名** 保证日志不可篡改:
- 每条审计日志记录包含:`id``时间``操作者``操作内容``数据指纹`
- 每条日志的哈希字段指向前一条日志的哈希。
- 每小时,系统对当前哈希链的最新哈希值,使用审计专用私钥进行签名,并将签名值保存到外部(如另一个数据库表或文件)。
- 验证时,重新计算哈希链,比对签名。
#### 8.2 审计内容范围
| 审计对象 | 采集内容 | 保留期限 | 存储方式 |
| :--- | :--- | :--- | :--- |
| 用户访问日志 | 谁、何时、从哪个 IP、访问了哪个 API、返回了哪类数据(脱敏后指纹) | 7 年 | 哈希链日志表 + 离线归档 |
| 密钥操作日志 | 密钥生成时间、漂移时间、销毁时间、涉及的内存地址范围(经过哈希) | 3 年 | 加密存储,仅合规人员可读 |
| AI Agent 调用日志 | Agent 角色、请求参数、是否被拦截、越狱检测结果 | 3 年 | 同上 |
| 数据库 DDL/DML | 所有 `INSERT/UPDATE/SELECT` 敏感表记录 | 永久 | 同步至独立 SIEM |
| 异常告警 | 单用户异常访问、密钥漂移失败次数 | 实时推送 | 飞书/短信通知安全运维 |
| 过程文件 | 存放于服务器,数据库中记录URL | 15 年 | 加密 |
### 9. 存证功能
#### 9.1 存证目标与原则
- **独立存证表**:存证记录独立于业务数据库,使用哈希链防止篡改。
- **可信时间戳**:对关键存证事件,调用第三方可信时间戳服务赋予法律效力。
- **与加密机制协同**:存证哈希基于解密后的明文(但只传哈希,不传明文)。
#### 9.2 存证范围与触发事件
| 阶段 | 存证事件 | 存证内容(哈希对象) | 触发时机 |
| :--- | :--- | :--- | :--- |
| **委托** | 招标委托单提交审批 | 委托单全文 | 用户点击“发起审批” |
| | 委托审批通过 | 审批记录+签字意见 | OA回调“审批完成” |
| **立项** | 招标方案确认 | 招标方案PDF | 立项审批通过 |
| | 供应商短名单确认 | 短名单(供应商ID+推荐理由) | 短名单审批完成 |
| **文件编制** | 招标文件定稿 | 招标文件PDF | 文件加密发布前 |
| | 澄清/修改公告 | 澄清文件PDF | 发布前 |
| **投标** | 投标文件上传完成 | 投标文件哈希+上传时间戳 | 供应商上传加密文件成功后 |
| | 保证金缴纳凭证 | 银行回单PDF | 支付网关回调成功 |
| **开标** | 开标记录 | 开标现场音视频文件哈希+关键截屏 | 开标结束时 |
| **评标** | 评委打分 | 每个评委的评分表(含打分项) | 评委提交评分 |
| | 偏离度复核记录 | AI提醒+评委确认意见 | 评委复核确认 |
| **定标** | 评标报告 | 评标报告PDF | 报告定稿 |
| | 中标结果审批 | 定标审批单+领导签字 | 定标审批通过 |
| **合同** | 合同签订 | 电子合同PDF | 双方电子签章完成 |
| **归档** | 全项目归档包 | 所有存证哈希组成的Merkle树根 | 归档完成时 |
#### 9.3 验证与司法出证
- **内部验证**:在平台“存证验证”页面输入项目号,系统重新计算当前数据哈希,与存证哈希比对,显示“通过”或“篡改”。
- **司法出证**:管理员导出指定项目的完整存证包(含所有事件的哈希链、签名、时间戳证书),提交法院。法院可通过第三方时间戳官网核验。
### 10. 应急响应与备份
#### 10.1 数据备份
- 全量备份(加密)每天一次,保留30天。
- 增量备份每6小时一次。
#### 10.2 入侵响应
检测到内存扫描、暴力破解、异常数据导出行为 → 自动触发 **应急模式**
- 冻结当前所有用户会话
- 强制销毁所有内存中的 DEK(触发全部数据锁定)
- 通知安全团队介入
### 11. 合规性说明
以上设计满足以下法规与标准:
- **《网络安全法》**:数据加密、日志留存6个月以上。
- **《个人信息保护法》**:供应商联系人手机号、身份证等敏感个人信息采用字段级加密,展示时脱敏。
- **等保2.0三级**:符合数据完整性、保密性、备份恢复、安全审计要求(等保不强制要求HSM,只要密钥管理得当即可)。
- **ISO 27001**:密钥管理、访问控制、事件响应覆盖。
- **《招标投标法实施条例》(国务院令第613号)**(第五十六条:“招标人或者其委托的招标代理机构应当妥善保管招标过程中的文件资料,存档备查,并至少保存十五年。”)15年 + 诉讼时效。
---
# 第五章 供应商无感登陆需求
## 5.1 需求背景
滨化集团已建有 **SRM 供应商关系管理平台**,用于供应商注册、认证、合同执行、绩效评估等业务。新建的 **STP 智慧招标平台** 负责招标全流程管理,两个平台面向共同的供应商群体,存在大量业务交叉与流转(如寻源阶段从 SRM 读取供应商库、定标后资料转交 SRM 生成合同)。
目前供应商在两个平台拥有独立的账号体系,需分别注册、记忆不同的用户名/密码,在跨平台操作时需重复登录,严重影响用户体验与业务效率。为实现 **“一次登录,两平台通行”** 的无缝体验,特提出供应商无感登陆需求。
## 5.2 核心场景
| 场景编号 | 场景描述 | 触发条件 | 期望行为 |
| :----- | :---------------- | :---------------------------------------------- | :------------------------------------------------------------------ |
| **S1** | SRM 存量供应商首次访问 STP | 供应商已在 SRM 注册并激活账号,点击 STP 招标公告链接或直接访问 STP 门户 | 使用 SRM 用户名/密码即可登录 STP,无需额外注册;STP 自动同步其 SRM 基础信息(企业名称、统一社会信用代码、联系人等) |
| **S2** | STP 注册供应商首次访问 SRM | 供应商已在 STP 注册并参与投标,因业务需要进入 SRM 查看合同或执行订单 | 使用 STP 用户名/密码即可登录 SRM,无需重复注册;SRM 自动创建或关联其供应商档案 |
| **S3** | 已在任一平台登录,跳转至另一平台 | 供应商当前在 STP 处理投标事务,点击页面内嵌的 SRM 链接(如“查看合同模板”);或反之 | 无需重新输入凭证,直接无感跳转至目标平台,保持登录态 |
## 5.3 安全要求
无感登陆必须在保证便捷性的同时,满足集团数据安全政策及以下额外要求:
| 安全项 | 要求 |
| :------------- | :---------------------------------------------------------------------------------------------------------------------- |
| **令牌安全** | JWTID Token)有效期 **≤ 30 分钟**Refresh Token 有效期 **≤ 7 天**,且 Refresh Token 仅存储在 Vendor SSO 服务端,不暴露给前端。 |
| **跨平台跳转票据安全** | 跳转票据(ticket)使用 **RS256** 非对称签名(STP 私钥签名,SRM 公钥验证;反之亦然),票据有效期 ≤ 5 分钟,防止重放攻击。 |
| **传输加密** | 所有 交互必须使用 **HTTPS + TLS 1.3**,禁用弱加密套件。 |
| **最小权限原则** | 供应商在 STP 仅能访问与其投标项目相关的数据;在 SRM 仅能访问与其合同/订单相关的数据。Vendor SSO 签发的 ID Token 中仅包含用户标识和基础声明,具体业务权限由各平台依据本地业务规则二次校验(见第四章 5.2)。 |
| **多因素认证(MFA** | 涉及修改密码、更换手机号、绑定新邮箱等敏感操作时,强制短信验证码二次认证。登录时可配置是否启用 MFA(初期暂不强制)。 |
| **异常监控与锁定** | 记录所有登录尝试(IP、设备指纹、时间),异常行为(短时间内多地登录、频繁失败)触发告警并临时锁定账号(锁定 30 分钟)。 |
| **审计日志** | 所有认证请求、令牌发放、跳转票据生成与验证、用户信息同步等操作均记录审计日志,保留期限 ≥ 3 年。 |
---
## 第六章 待确定事项汇总
* **委托自动合并功能**(同类型多立项合并)暂缓落地,根据业务使用频次确定是否开发。
* **投标文件加密方案**
两种方案待定:
①供应商自主设密钥,开标现场输密码解密(弊端:联系人失联无法开标);
②系统统一加密、平台自动解密(弊端供应商不信任数据安全)。
经商定,以方案②,系统统一加密的方式进行。
* **标书费配置**
1. 收费节点定于标书发放前,付费后解锁招标文件查看权限;
2. 招标方案制定时可选择是否收取标书费;