diff --git a/docs/architecture/详细设计/新用户注册模块.md b/docs/architecture/详细设计/新用户注册模块.md index 1421ba1..792bc7b 100644 --- a/docs/architecture/详细设计/新用户注册模块.md +++ b/docs/architecture/详细设计/新用户注册模块.md @@ -1,483 +1,3 @@ # 新用户注册模块 -新用户注册包含了[[供应商注册模块]]和[[外部专家注册模块]] 。 - -### 供应商注册页面要素: -- 企业全称 -- 统一社会信用代码 -- 注册资本(万元) -- 法定代表人 -- 行业 -- 地址 -- 经营范围 -- 主要产品 -- 联系人姓名 -- 联系电话(手机号) -- 电子邮箱 -- 营业执照 - -## 供应商注册模块 - - -## 外部专家注册模块 - -## 1. 模块概述 - -### 1.1 建设目标 -建立面向**社会外部评标专家**的在线注册、准入审核与档案管理体系,实现专家信息的结构化采集、AI辅助资质核验、回避关系预审,并与后续的**专家抽取、智能匹配、在线评标、劳务报酬结算**全流程贯通。 - -### 1.2 设计原则 -| 原则 | 说明 | -| :------- | :-------------------------------------- | -| **信息完备** | 采集字段覆盖专业能力、执业资格、回避关系、收款账户等全维度。 | -| **隐私保护** | 身份证号、手机号、银行账户等敏感信息采用**字段级加密**存储(内存级密钥)。 | -| **统一身份** | 注册完成后自动生成STP平台账号,支持手机号/邮箱登录,无需二次注册。 | - -### 1.3 适用角色与场景 -| 角色 | 场景 | -| :-------------- | :----------------------------- | -| **外部专家申请人** | 通过招标门户“专家注册”入口提交申请,查询审核进度。 | -| **专家管理员(招标专员)** | 在后台审核专家资料、处理回避申报、激活/驳回/冻结专家账户。 | -| **合规审计人员** | 查阅专家注册审计轨迹、关联关系图谱。 | -| **AI 审核服务** | 自动执行OCR识别、证件验真。 | - ---- - -## 2. 页面布局与 UI 设计 - -### 2.1 整体注册流程步骤条 - -```svg - - - - - - - - - 1 - 基本信息 - - - - - - - 2 - 专业资质 - - - - - - - 5 - 提交审核 - - - * 带红色星号均为必填项 - -``` - -### 2.2 注册主表单页面 - -```svg - - - - - - - - - - - - - - - - - - - 外部专家注册 - 请完整填写以下信息,所有数据将受到严格加密保护 - - - - 真实姓名 * - - 请输入中文姓名 - - 性别 * - - 请选择 - - - - 身份证号码 * - - 请输入18位身份证号 - 🔒 将使用AES-256加密存储 - - - 出生日期 - - 由身份证自动识别 - 年龄 - - 自动计算 - - - 手机号码 * - - 请输入手机号 - - 电子邮箱 * - - 请输入常用邮箱 - - - 工作单位 - - 请输入单位全称 - - 现从事专业 * - - 如:化工工艺、设备管理 - - - 技术职称 * - - 高级/副高级/中级/初级 - - 职称专业(如:化工工程) - - - 职称/资质证书扫描件 * - - 📄 点击上传或拖拽文件(支持 PDF/JPG/PNG,≤20MB) - 已上传:职称证.pdf (2.3MB) ✅ 识别完成 - - - - - - 上一步 - - - 下一步 → - - - - 📌 注册须知 - 1. 所有信息须与身份证及职称证书一致 - 2. 集团公司将对信息进行真实性核验 - 3. 入库专家须遵守《评委管理规定》 - 4. 个人信息变更需及时在线更新 - 5. 评审回避要求详见本章程4.7条 - -``` - - - ---- - -## 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. 数据模型设计 - -### 5.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 | | 人工审核备注 | -| `declaration_signed` | BOOLEAN | DEFAULT 0 | 是否签署回避声明 | -| `created_at` | DATETIME | | 注册时间 | -| `updated_at` | DATETIME | | 更新时间 | -| `activated_at` | DATETIME | | 首次激活时间 | - -### 5.2 回避声明表 `t_expert_declaration` - -| 字段名 | 类型 | 约束 | 说明 | -| :--- | :--- | :--- | :--- | -| `declaration_id` | VARCHAR(32) | PK | 声明编号 | -| `expert_id` | VARCHAR(32) | FK | 专家ID | -| `declaration_type` | VARCHAR(32) | | 定期声明/项目专项声明 | -| `content` | JSON | | 逐项勾选记录 | -| `signed_at` | DATETIME | | 签署时间 | -| `ip_address` | VARCHAR(64) | | 签署IP | -| `valid_until` | DATETIME | | 有效期(通常1年) | - -### 5.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 | | | - ---- - -## 6. 接口详细定义 - -### 6.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" } - } - ], - "declarations": { - "noAffiliation": true, - "noInvestment": true, - "noConsulting": true, - "acceptDiscipline": true - }, - "captchaToken": "a1b2c3d4" -} -``` - -**成功响应(异步)** -```json -{ - "code": "0", - "data": { - "applicationId": "EXP_20260628_001", - "status": "PENDING_AI", - "estimatedTime": "预计24小时内完成初审" - } -} -``` - -### 6.2 查询审核进度 -| 项目 | 内容 | -| :--- | :--- | -| **路径** | `/api/v1/expert/application/status` | -| **方法** | `GET` | -| **参数** | `applicationId` / `idCardNo`(二选一) | - -### 6.3 专家激活(首次设置密码) -| 项目 | 内容 | -| :--- | :--- | -| **路径** | `/api/v1/expert/activate` | -| **方法** | `POST` | - -**请求体** -```json -{ - "applicationId": "EXP_20260628_001", - "password": "Abcd@2026#", - "confirmPassword": "Abcd@2026#" -} -``` - -### 6.4 后台专家审核(管理员) -| 项目 | 内容 | -| :--- | :--- | -| **路径** | `/api/v1/admin/expert/audit` | -| **方法** | `POST` | -| **认证** | 需 ADMIN/EXPERT_MANAGER 角色 | - -**请求体** -```json -{ - "applicationId": "EXP_20260628_001", - "action": "APPROVE", // APPROVE / REJECT / REQUEST_INFO - "reason": "职称证书已验证,资质符合要求", - "notifyExpert": true -} -``` - ---- - -## 7. AI 赋能详细设计 - -| AI 能力 | 实现方式 | 输出 | 优先级 | -| :--- | :--- | :--- | :--- | -| **身份证 OCR 解析** | 调用OCR服务(如百度/阿里)提取姓名、号码、有效期,自动回填表单。 | 结构化字段 | P0 | -| **实名认证** | 对接公安部CTID接口核验身份证号与姓名一致性。 | 通过/不通过 | P0 | -| **职称证书验真** | 对接人社部/学信网接口(或基于图像防伪特征识别)验证证书真伪。 | 可信度评分 | P1 | -| **利益冲突图谱** | 利用知识图谱匹配专家任职企业是否与集团供应商库/黑名单关联,输出风险等级(绿/黄/红)。 | 风险报告 | P0 | -| **专业标签智能推荐** | 根据专家填写的从事专业与历史项目品类,自动匹配并推荐擅长的采购品类标签。 | 标签列表 | P1 | -| **AI初审报告生成** | 汇总各项检查结果,生成带评分(0-100)的建议结论(自动通过/人工复核/拒绝)。 | 审核报告 | P0 | - ---- - -## 8. 业务规则与异常处理 - -| 场景 | 规则/处理方式 | -| :--- | :--- | -| **身份证号唯一性** | 系统全局唯一,已注册或审核中的身份证不得重复提交。 | -| **手机号/邮箱唯一性** | 同一手机号或邮箱仅能注册一次(支持找回账号)。 | -| **职称等级门槛** | 至少具备**中级及以上**职称方可入库(《评委管理规定》4.2.1)。 | -| **AI自动通过阈值** | AI评分 ≥ 90 分且无高风险项 → 自动通过;60~89分 → 人工复核;<60分 → 自动驳回。 | -| **驳回后重提** | 允许在 30 天内修改后重新提交,保留历史审核记录供查。 | -| **虚假信息处理** | 一经发现虚假注册,永久拉入黑名单,并通报集团内各单位。 | -| **回避声明有效期** | 每年需重新签署一次,到期前30天系统自动催办。 | -| **敏感信息脱敏展示** | 后台管理中,身份证号显示为 `110101********4477`,银行账号显示为 `******0000`。 | -| **数据导出** | 支持按专家状态、专业分类、注册时间段导出加密Excel(需二次审批)。 | - ---- - -## 9. 安全与合规设计 - -| 安全维度 | 落地措施 | -| :--- | :--- | -| **传输安全** | 全链路 HTTPS + TLS 1.3,文件上传使用预签名URL直传OSS。 | -| **敏感字段加密** | 身份证、手机号、银行账号使用 **AES-256-GCM** 应用层字段级加密,DEK内存漂移(见《需求说明书》4.2)。 | -| **防机器人** | 注册提交需通过图形验证码 + 滑动验证(极验/人机识别)。 | -| **密码策略** | 首次激活强制设置密码(长度≥8,含大写、小写、数字、特殊字符)。 | -| **审计日志** | 记录每次提交、审核、激活操作的IP、设备指纹、操作人,写入哈希链防篡改(见《需求说明书》4.8.1)。 | -| **个人信息保护** | 遵循《个人信息保护法》,注册前弹出《隐私政策》与《用户协议》,须勾选同意。 | - ---- - -## 10. 通知策略矩阵 - -| 触发事件 | 通知方式 | 通知对象 | 文案要点 | -| :--- | :--- | :--- | :--- | -| 提交注册成功 | 站内信 | 申请人 | 已收到申请,预计24小时反馈 | -| AI 审核不通过 | 邮件+短信 | 申请人 | 详细说明不通过原因及修改指引 | -| 转入人工审核 | 站内信+邮件 | 专家管理员 | 新专家待审核,附AI报告摘要 | -| 人工审核通过 | 邮件+短信 | 申请人 | 恭喜通过审核,请点击链接激活账号 | -| 账号激活成功 | 站内信 | 申请人 | 欢迎成为STP评标专家,可开始接受评标任务 | -| 回避声明临期 | 邮件 | 专家 | 请及时重新签署回避声明,否则无法参与评标 | -| 补充材料通知 | 邮件+短信 | 申请人 | 请于X月X日前补充如下材料... | - ---- - -## 11. 与整体架构的集成衔接 - -```mermaid -graph LR - subgraph 专家生命周期 - A[注册申请] --> B[AI/人工审核] - B --> C[生成账号] - C --> D[激活登录] - D --> E[专家抽取匹配] - E --> F[在线评标] - F --> G[劳务报酬结算] - end - - subgraph 外围系统 - H[(专家库)] - I[IAM/认证中心] - J[支付系统] - K[电子档案] - end - - C --> I - G --> J - B --> K - E --> H - F --> H - - style A fill:#fce4ec,stroke:#c2185b - style D fill:#e8f5e9,stroke:#388e3c -``` - ---- - -本详细设计已完整覆盖外部专家从注册入口、信息填报、AI+人工双轨审核、账号激活到后续业务衔接的全链路,严格遵循《评委管理规定》的准入标准,并深度集成平台现有安全体系与AI能力。如需调整字段或审核流层级,可进一步展开讨论。 - +新用户注册包含了[[供应商注册模块]]和[[外部专家注册模块]] ,详情见具体文件。