Files
AIclinicalresearch/docs/03-业务模块/PKB-个人知识库/01-需求分析/AI 临床医生与医院知识库 - MVP 阶段产品需求文档 (PRD) V5.0.md
HaHafeng 66255368b7 feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1):
- Database: Add user_modules table for fine-grained module permissions
- Database: Add 4 user permissions (view/create/edit/delete) to role_permissions
- Backend: UserService (780 lines) - CRUD with tenant isolation
- Backend: UserController + UserRoutes (648 lines) - 13 API endpoints
- Backend: Batch import users from Excel
- Frontend: UserListPage (412 lines) - list/filter/search/pagination
- Frontend: UserFormPage (341 lines) - create/edit with module config
- Frontend: UserDetailPage (393 lines) - details/tenant/module management
- Frontend: 3 modal components (592 lines) - import/assign/configure
- API: GET/POST/PUT/DELETE /api/admin/users/* endpoints

Architecture Upgrade - Module Permission System:
- Backend: Add getUserModules() method in auth.service
- Backend: Login API returns modules array in user object
- Frontend: AuthContext adds hasModule() method
- Frontend: Navigation filters modules based on user.modules
- Frontend: RouteGuard checks requiredModule instead of requiredVersion
- Frontend: Remove deprecated version-based permission system
- UX: Only show accessible modules in navigation (clean UI)
- UX: Smart redirect after login (avoid 403 for regular users)

Fixes:
- Fix UTF-8 encoding corruption in ~100 docs files
- Fix pageSize type conversion in userService (String to Number)
- Fix authUser undefined error in TopNavigation
- Fix login redirect logic with role-based access check
- Update Git commit guidelines v1.2 with UTF-8 safety rules

Database Changes:
- CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled)
- ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code)
- INSERT 4 permissions + role assignments
- UPDATE PUBLIC tenant with 8 module subscriptions

Technical:
- Backend: 5 new files (~2400 lines)
- Frontend: 10 new files (~2500 lines)
- Docs: 1 development record + 2 status updates + 1 guideline update
- Total: ~4900 lines of code

Status: User management 100% complete, module permission system operational
2026-01-16 13:42:10 +08:00

164 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# **AI 临床医生与医院知识库 \- MVP 阶段产品需求文档 (PRD) V5.0**
|
| 版本号 | 日期 | 修改人 | 修改内容 |
| V4.0 | 2024-06-XX | Product Lead | 降维策略 MVP |
| V5.0 | 2024-06-XX | Product Lead | 完整落地版:基于“全量阅读”策略,补全 UI/UX 规范与详细功能定义 |
## **1\. 核心战略与范围 (Strategy & Scope)**
### **1.1 核心价值主张**
放弃传统的“切片式 RAG”利用 DeepSeek-V3 / Qwen-Max 的长窗口能力,通过 **Document-Level RAG (文档级阅读)** 技术,为医生提供**逻辑完整、引用精准**的知识库问答体验。
### **1.2 MVP 阶段边界 (Scope Freeze)**
* **适用终端:** Web 端 (PC/Mac 浏览器),兼容 iPad。
* **支持格式:** PDF, Word (.docx), PPT (.pptx)。
* **硬性限制:** 单库文件数 ≤ 30 个;单文件大小 ≤ 20MB。
* **核心场景:** 循证检索 (指南)、深度研读 (文献)、用药助手 (药品)、考典刷题 (考试)。
## **2\. 功能模块详情 (Detailed Requirements)**
### **2.1 模块一:仪表盘 (Dashboard)**
**用户故事:** 作为医生,我希望一眼看到我有多少个知识库,并能快速创建一个新的专科知识库。
#### **2.1.1 页面布局与 UI 规范**
* **布局结构:**
* **顶部:** 全局导航栏 (Logo \+$$智能统计$$$$智能清洗$$$$\*\*AI 知识库\*\*$$$$AI 问答$$
\+ 头像)。
* **主体:** "1+3" 卡片阵列布局 (Grid System)。
* **卡片设计:**
* **Slot 1 (新建入口):**
* **样式:** 浅蓝色渐变背景 (bg-blue-50),深蓝色虚线边框。
* **内容:** 大号 "+" 图标,文案 "创建知识库",下方并列展示 5 个场景图标 (指南/文献/病例/药品/考试) 以提示能力。
* **Slot 2-N (现有知识库):**
* **样式:** 白色卡片,微阴影 (shadow-sm \-\> hover shadow-md)。
* **内容:** 图标(左上) \+ 标题(加粗) \+ 类型标签(胶囊样式) \+ "进入工作台"按钮(底部通栏)。
#### **2.1.2 交互流程:创建知识库**
* **触发:** 点击“创建知识库”卡片 \-\> 弹出模态框 (Modal)。
* **Step 1: 类型选择 (Type Selection)**
* **UI:** 5 个大卡片网格。
* **选项:**
1. **循证检索 (指南):** 图标 BookOpen (Blue)。文案:"查诊疗标准、用药剂量"。
2. **深度研读 (文献):** 图标 Microscope (Purple)。文案:"文献综述、横向对比"。
3. **临床决策 (病例):** 图标 Stethoscope (Green)。文案:"疑难病例参考"。
4. **用药助手 (药品):** 图标 Pill (Rose)。文案:"查配伍禁忌"。
5. **考典刷题 (考试):** 图标 GraduationCap (Orange)。文案:"主治/副高备考"。
* **Step 2: 基础信息 & 角色注入**
* **字段:** 知识库名称 (必填)、所属科室 (下拉选:心内/呼吸/消化...)。
* **逻辑:** 选中“心内科”后,后端自动在 System Prompt 中注入 *"你是一名心内科专家..."*
* **Step 3: 文件上传 (Upload)**
* **UI:** 大面积拖拽上传区 (Dropzone)。
* **逻辑:**
* 前端校验大小 (\>20MB 飘红报错)。
* 前端校验数量 (\>30 个 飘红报错)。
* 上传成功后显示列表,状态流转:上传中... \-\> 就绪。
### **2.2 模块二:沉浸式工作台 (Workspace)**
**用户故事:** 作为医生,我希望在一个无干扰的环境中与我的资料对话,并能随时核对原文。
#### **2.2.1 全局框架 (Immersive Layout)**
* **顶部导航 (Header):**
* **样式:** 深色背景 (bg-slate-900),高度 56px。
* **左侧:** \< 返回 (白色文字按钮,点击返回 Dashboard)。
* **中间:** 知识库名称 \+ 图标。
* **右侧:** 简单的设置齿轮。
* **模式切换 (Tabs):**
* 位于 Header 下方,白色背景,高度 48px。
* **Tab A:** \[💬 智能问答\] (默认选中,底部蓝条)。
* **Tab B:** \[📂 知识资产\] (显示文件计数 Badge)。
#### **2.2.2 视图 A智能问答 (Smart Chat)**
* **布局:**
* **默认:** 单栏宽屏聊天窗口 (最大宽度 900px居中)。
* **扩展:** 当点击引用或手动展开时,右侧滑出 PDF 阅读器 (占比 45%),聊天窗自动收缩至左侧。
* **对话交互 (Chat Interaction):**
* **输入框:** 底部固定。支持 Shift+Enter 换行。
* **AI 回答:** 流式输出 (Typewriter Effect)。
* **引用标注:** 必须以 \[文档名\] 或 \[1\] 形式高亮显示,颜色为品牌蓝。
* **后端策略路由 (核心逻辑):**
* **场景一 (小库直读):** 知识库总 Token \< 32k。
* *UI:* 顶部 Toast 提示 "已加载全量上下文AI 具备全知视角"。
* **场景二 (大库路由):** 知识库总 Token \> 32k。
* *UI:* 用户提问后,输入框上方出现微型 Loading 状态 —— "正在分析摘要..." \-\> "已定位至《2024指南》等 3 篇文档" \-\> 开始回答。
#### **2.2.3 视图 B知识资产 (Assets Management)**
* **UI 形式:** 全屏数据表格 (Table)。
* **列定义:**
1. **文件名:** 图标 (PDF/Word) \+ 名称。
2. **AI 摘要:** 展示 2-3 行核心摘要文本 (由 DeepSeek 生成),支持 hover 查看全部。
3. **状态:** 准备中 (灰色) / 就绪 (绿色) / 失败 (红色)。
4. **操作:** 预览、删除。
* **筛选器:** 右上角“筛选”按钮,点击弹出下拉面板 (按时间/状态/类型)。
## **3\. 详细 UI/UX 设计规范 (Design Specs)**
为确保还原度,请 UI 设计师和前端开发遵循以下规范:
### **3.1 色彩体系 (Color Palette)**
使用 Tailwind CSS 默认色板:
* **主色 (Primary):** Blue-600 (\#2563EB) \- 用于按钮、链接、高亮。
* **场景色 (Category Colors):**
* 指南: Blue-500
* 文献: Purple-600
* 病例: Emerald-600
* 药品: Rose-600
* 考试: Orange-500
* **中性色:** Slate-50 (背景), Slate-900 (Header), Slate-500 (次要文字)。
### **3.2 图标系统 (Iconography)**
* **风格:** 线性图标 (Stroke 2px)。
* **技术:** 使用 **Inline SVG** (参考 TDD V3.0 的 Icons 常量),严禁引入外部 Icon Font。
### **3.3 字体与排版**
* **字体:** 系统默认无衬线字体 (Inter, Roboto, PingFang SC)。
* **字号:**
* H1 (页面标题): 20px Bold
* H2 (模块标题): 16px Bold
* Body (正文): 14px Regular (行高 1.6)
* Caption (说明): 12px Text-Slate-400
## **4\. 异常流程与边界处理 (Exception Handling)**
### **4.1 上传失败**
* **场景:** 用户上传了加密 PDF 或损坏文件。
* **后端:** 解析器捕获异常,返回 status: FAILEDerror\_msg: "File encrypted"。
* **前端:** 资产列表中该行变红,显示“解析失败:文件已加密”,并提供“删除”按钮。
### **4.2 AI 回答超时/失败**
* **场景:** DeepSeek API 响应超时 (\>60s)。
* **UI:**
* 消息气泡显示红色感叹号。
* 提示文案: "AI 思考超时,请尝试精简问题或重试。"
* 提供$$重试$$
按钮。
### **4.3 引用源定位失败**
* **场景:** 用户点击 \[1\],但该文件已被删除。
* **UI:** 弹出 Toast 提示 "源文件已被删除,无法查看原文"。
## **5\. 验收测试标准 (QA Acceptance)**
| ID | 测试点 | 预期结果 | 优先级 |
| TC01 | 格式兼容性 | 上传 .pdf, .docx, .pptx 文件,均能在资产列表显示“就绪”,且能被检索到。 | P0 |
| TC02 | 边界限制 | 尝试上传第 31 个文件,前端应阻止上传并弹窗提示限制。 | P0 |
| TC03 | 引用跳转 | 提问后,点击回答中的 \[文档名\],右侧面板应滑出并正确加载该文档。 | P0 |
| TC04 | Word表格解析 | 上传包含表格的 Word 指南询问表格内数据AI 应能准确回答数值。 | P1 |
| TC05 | 路由逻辑 | 在 \>32k Token 的库中提问,观察 Network 请求,应看到系统先请求了摘要接口,再请求了全文接口。 | P1 |