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
This commit is contained in:
@@ -1,18 +1,19 @@
|
||||
# AI智能文献模块 - API设计规范
|
||||
|
||||
> **<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗?* v3.0
|
||||
> **<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗?* 2025-10-29
|
||||
> **蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** AI<41>箄<EFBFBD><E7AE84><EFBFBD>讃撘<E8AE83><E69298>穃𣪧<E7A983>?
|
||||
> **文档版本:** v3.0
|
||||
> **创建日期:** 2025-10-29
|
||||
> **维护者:** AI智能文献开发团队
|
||||
> **最后更新:** 2025-11-23
|
||||
> **<EFBFBD>湔鰵霂湔<EFBFBD>嚗?* <20>啣<EFBFBD><E595A3>冽<EFBFBD>憭滨<E686AD>API嚗?銝芣瓲敹<E793B2>𦻖<EFBFBD><F0A6BB96><EFBFBD>
|
||||
> **更新说明:** 新增全文复筛API(5个核心接口)
|
||||
|
||||
---
|
||||
|
||||
## 📋 文档说明
|
||||
|
||||
<EFBFBD>祆<EFBFBD>獢<EFBFBD><EFBFBD>餈蚊I<EFBFBD>箄<EFBFBD><EFBFBD><EFBFBD>讃璅∪<EFBFBD><EFBFBD><EFBFBD>PI霈曇恣閫<EFBFBD><EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>祆𦻖<EFBFBD><EFBFBD><EFBFBD>銋剹<EFBFBD><EFBFBD>窈瘙<EFBFBD><EFBFBD>摨娍聢撘譌<EFBFBD><EFBFBD><EFBFBD>霂臬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
本文档描述AI智能文献模块的API设计规范,包括接口定义、请求响应格式、错误处理等。
|
||||
|
||||
**API基础信息**:
|
||||
- **Base URL**: `http://localhost:3001` (撘<EFBFBD><EFBFBD>𤑳㴓憓?
|
||||
- **Base URL**: `http://localhost:3001` (开发环境)
|
||||
- **API前缀**: `/api/v1/asl`
|
||||
- **协议**: HTTP/HTTPS
|
||||
- **数据格式**: JSON
|
||||
@@ -25,8 +26,9 @@
|
||||
1. **RESTful设计**: 遵循RESTful API设计规范
|
||||
2. **统一响应格式**: `{ success: boolean, data?: any, error?: string }`
|
||||
3. **分页支持**: 列表接口支持分页参数
|
||||
4. **<EFBFBD><EFBFBD>𧋦<EFBFBD>批<EFBFBD>**: API<EFBFBD><EFBFBD>𧋦<EFBFBD>𣇉恣<EFBFBD>?(`/api/v1/...`)
|
||||
5. **<EFBFBD>躰秤憭<EFBFBD><EFBFBD>**: 蝏煺<EFBFBD><EFBFBD><EFBFBD>TTP<EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>屸<EFBFBD>霂舀<EFBFBD><EFBFBD>?6. **璅∪<E79285><E288AA>𤥁楝<F0A4A581>?*: `/api/v1/asl/...` <20>祉<EFBFBD>頝舐眏蝛粹𡢿
|
||||
4. **版本控制**: API版本化管理 (`/api/v1/...`)
|
||||
5. **错误处理**: 统一的HTTP状态码和错误消息
|
||||
6. **模块化路由**: `/api/v1/asl/...` 独立路由空间
|
||||
|
||||
---
|
||||
|
||||
@@ -34,22 +36,24 @@
|
||||
|
||||
### 1. 项目管理 (Projects)
|
||||
|
||||
#### 1.1 <EFBFBD>𥕦遣蝑偦<EFBFBD>厰★<EFBFBD>?
|
||||
#### 1.1 创建筛选项目
|
||||
|
||||
**接口**: `POST /api/v1/asl/projects`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?(瘚贝<E7989A><E8B49D>嗆挾暺䁅恕<E48185>冽<EFBFBD>ID)
|
||||
**霂湔<EFBFBD>**: <EFBFBD>𥕦遣銝<EFBFBD>銝芣鰵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>桃<EFBFBD><EFBFBD>厰★<EFBFBD>?
|
||||
**霂瑟<E99C82>雿?*:
|
||||
**认证**: 需要 (测试阶段默认用户ID)
|
||||
**说明**: 创建一个新的文献筛选项目
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"projectName": "SGLT2<EFBFBD>穃<EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
|
||||
"projectName": "SGLT2抑制剂系统综述",
|
||||
"picoCriteria": {
|
||||
"P": "2<EFBFBD>讠<EFBFBD>撠輻<EFBFBD><EFBFBD>𣂷犖<EFBFBD><EFBFBD><EFBFBD>?,
|
||||
"P": "2型糖尿病成人患者",
|
||||
"I": "SGLT2抑制剂(empagliflozin、dapagliflozin等)",
|
||||
"C": "安慰剂或常规降糖疗法",
|
||||
"O": "心血管结局(MACE、心衰住院、心血管死亡)",
|
||||
"S": "随机对照试验 (RCT)"
|
||||
},
|
||||
"inclusionCriteria": "<EFBFBD>望<EFBFBD><EFBFBD><EFBFBD>讃嚗朙CT<EFBFBD>𠉛弦嚗?010撟游<E6929F><E6B8B8>𤏸”",
|
||||
"inclusionCriteria": "英文文献,RCT研究,2010年后发表",
|
||||
"exclusionCriteria": "病例报告,综述,动物实验",
|
||||
"screeningConfig": {
|
||||
"models": ["deepseek-chat", "qwen-max"],
|
||||
@@ -65,15 +69,15 @@
|
||||
"data": {
|
||||
"id": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
|
||||
"userId": "asl-test-user-001",
|
||||
"projectName": "SGLT2<EFBFBD>穃<EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
|
||||
"projectName": "SGLT2抑制剂系统综述",
|
||||
"picoCriteria": {
|
||||
"population": "2<EFBFBD>讠<EFBFBD>撠輻<EFBFBD><EFBFBD>𣂷犖<EFBFBD><EFBFBD><EFBFBD>?,
|
||||
"intervention": "SGLT2<EFBFBD>穃<EFBFBD><EFBFBD>?,
|
||||
"population": "2型糖尿病成人患者",
|
||||
"intervention": "SGLT2抑制剂",
|
||||
"comparison": "安慰剂或常规降糖疗法",
|
||||
"outcome": "心血管结局",
|
||||
"studyDesign": "随机对照试验 (RCT)"
|
||||
},
|
||||
"inclusionCriteria": "<EFBFBD>望<EFBFBD><EFBFBD><EFBFBD>讃嚗朙CT<EFBFBD>𠉛弦嚗?010撟游<EFBFBD><EFBFBD>𤏸”",
|
||||
"inclusionCriteria": "英文文献,RCT研究,2010年后发表",
|
||||
"exclusionCriteria": "病例报告,综述,动物实验",
|
||||
"status": "draft",
|
||||
"screeningConfig": {
|
||||
@@ -93,9 +97,9 @@ curl -X POST http://localhost:3001/api/v1/asl/projects \
|
||||
-d '{
|
||||
"projectName": "测试项目",
|
||||
"picoCriteria": {
|
||||
"population": "<EFBFBD>𣂷犖<EFBFBD><EFBFBD><EFBFBD>?,
|
||||
"population": "成人患者",
|
||||
"intervention": "药物A",
|
||||
"comparison": "摰㗇<EFBFBD><EFBFBD>?,
|
||||
"comparison": "安慰剂",
|
||||
"outcome": "主要结局",
|
||||
"studyDesign": "RCT"
|
||||
},
|
||||
@@ -109,9 +113,11 @@ curl -X POST http://localhost:3001/api/v1/asl/projects \
|
||||
#### 1.2 获取项目列表
|
||||
|
||||
**接口**: `GET /api/v1/asl/projects`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD>敶枏<EFBFBD><EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>厩<EFBFBD><EFBFBD>厰★<EFBFBD>?
|
||||
**<EFBFBD>亥砭<EFBFBD><EFBFBD>㺭**: <20>?
|
||||
**认证**: 需要
|
||||
**说明**: 获取当前用户的所有筛选项目
|
||||
|
||||
**查询参数**: 无
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
@@ -120,7 +126,7 @@ curl -X POST http://localhost:3001/api/v1/asl/projects \
|
||||
{
|
||||
"id": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
|
||||
"userId": "asl-test-user-001",
|
||||
"projectName": "SGLT2<EFBFBD>穃<EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
|
||||
"projectName": "SGLT2抑制剂系统综述",
|
||||
"picoCriteria": {...},
|
||||
"status": "screening",
|
||||
"createdAt": "2025-11-18T07:30:00.000Z",
|
||||
@@ -144,8 +150,9 @@ curl http://localhost:3001/api/v1/asl/projects
|
||||
#### 1.3 获取项目详情
|
||||
|
||||
**接口**: `GET /api/v1/asl/projects/:projectId`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>憿寧𤌍<EFBFBD><EFBFBD>祕蝏<EFBFBD>縑<EFBFBD>?
|
||||
**认证**: 需要
|
||||
**说明**: 获取指定项目的详细信息
|
||||
|
||||
**路径参数**:
|
||||
- `projectId`: 项目ID (UUID)
|
||||
|
||||
@@ -156,15 +163,15 @@ curl http://localhost:3001/api/v1/asl/projects
|
||||
"data": {
|
||||
"id": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
|
||||
"userId": "asl-test-user-001",
|
||||
"projectName": "SGLT2<EFBFBD>穃<EFBFBD><EFBFBD><EFBFBD>頂蝏毺遞餈?,
|
||||
"projectName": "SGLT2抑制剂系统综述",
|
||||
"picoCriteria": {
|
||||
"population": "2<EFBFBD>讠<EFBFBD>撠輻<EFBFBD><EFBFBD>𣂷犖<EFBFBD><EFBFBD><EFBFBD>?,
|
||||
"intervention": "SGLT2<EFBFBD>穃<EFBFBD><EFBFBD>?,
|
||||
"population": "2型糖尿病成人患者",
|
||||
"intervention": "SGLT2抑制剂",
|
||||
"comparison": "安慰剂或常规降糖疗法",
|
||||
"outcome": "心血管结局",
|
||||
"studyDesign": "随机对照试验 (RCT)"
|
||||
},
|
||||
"inclusionCriteria": "<EFBFBD>望<EFBFBD><EFBFBD><EFBFBD>讃嚗朙CT<EFBFBD>𠉛弦嚗?010撟游<EFBFBD><EFBFBD>𤏸”",
|
||||
"inclusionCriteria": "英文文献,RCT研究,2010年后发表",
|
||||
"exclusionCriteria": "病例报告,综述,动物实验",
|
||||
"status": "screening",
|
||||
"screeningConfig": {
|
||||
@@ -192,13 +199,13 @@ curl http://localhost:3001/api/v1/asl/projects/{projectId}
|
||||
#### 1.4 更新项目
|
||||
|
||||
**接口**: `PUT /api/v1/asl/projects/:projectId`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**认证**: 需要
|
||||
**说明**: 更新项目信息
|
||||
|
||||
**路径参数**:
|
||||
- `projectId`: 项目ID (UUID)
|
||||
|
||||
**霂瑟<EFBFBD>雿?*嚗<>𣈲<EFBFBD><F0A388B2><EFBFBD><EFBFBD><EFBFBD>凒<EFBFBD>堆<EFBFBD>:
|
||||
**请求体**(支持部分更新):
|
||||
```json
|
||||
{
|
||||
"projectName": "更新后的项目名称",
|
||||
@@ -232,8 +239,9 @@ curl -X PUT http://localhost:3001/api/v1/asl/projects/{projectId} \
|
||||
#### 1.5 删除项目
|
||||
|
||||
**接口**: `DELETE /api/v1/asl/projects/:projectId`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>𣳇膄憿寧𤌍<EFBFBD>𦠜<EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD>娍㺭<EFBFBD>殷<EFBFBD>蝥扯<EFBFBD><EFBFBD>𣳇膄嚗?
|
||||
**认证**: 需要
|
||||
**说明**: 删除项目及所有关联数据(级联删除)
|
||||
|
||||
**路径参数**:
|
||||
- `projectId`: 项目ID (UUID)
|
||||
|
||||
@@ -254,11 +262,13 @@ curl -X DELETE http://localhost:3001/api/v1/asl/projects/{projectId}
|
||||
|
||||
### 2. 文献管理 (Literatures)
|
||||
|
||||
#### 2.1 撖澆<EFBFBD><EFBFBD><EFBFBD>讃嚗㇇SON<EFBFBD>澆<EFBFBD>嚗?
|
||||
#### 2.1 导入文献(JSON格式)
|
||||
|
||||
**接口**: `POST /api/v1/asl/literatures/import`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>寥<EFBFBD>撖澆<EFBFBD><EFBFBD><EFBFBD>讃嚗㇇SON<EFBFBD>澆<EFBFBD>嚗?
|
||||
**霂瑟<E99C82>雿?*:
|
||||
**认证**: 需要
|
||||
**说明**: 批量导入文献(JSON格式)
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"projectId": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
|
||||
@@ -294,13 +304,13 @@ curl -X DELETE http://localhost:3001/api/v1/asl/projects/{projectId}
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
- `pmid`: PubMed ID (<EFBFBD>舫<EFBFBD>?
|
||||
- `pmid`: PubMed ID (可选)
|
||||
- `title`: 文献标题 (必填)
|
||||
- `abstract`: 摘要 (必填)
|
||||
- `authors`: 雿𡏭<EFBFBD>?(<28>舫<EFBFBD>?
|
||||
- `journal`: <EFBFBD>笔<EFBFBD> (<28>舫<EFBFBD>?
|
||||
- `publicationYear`: <EFBFBD>𤏸”撟港遢 (<28>舫<EFBFBD>?
|
||||
- `doi`: DOI (<EFBFBD>舫<EFBFBD>?
|
||||
- `authors`: 作者 (可选)
|
||||
- `journal`: 期刊 (可选)
|
||||
- `publicationYear`: 发表年份 (可选)
|
||||
- `doi`: DOI (可选)
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
@@ -319,9 +329,10 @@ curl -X POST http://localhost:3001/api/v1/asl/literatures/import \
|
||||
|
||||
---
|
||||
|
||||
#### 2.2 撖澆<EFBFBD><EFBFBD><EFBFBD>讃嚗𠄌xcel<EFBFBD><EFBFBD>辣嚗?
|
||||
#### 2.2 导入文献(Excel文件)
|
||||
|
||||
**接口**: `POST /api/v1/asl/literatures/import-excel`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**认证**: 需要
|
||||
**说明**: 从Excel文件批量导入文献
|
||||
|
||||
**请求类型**: `multipart/form-data`
|
||||
@@ -331,15 +342,15 @@ curl -X POST http://localhost:3001/api/v1/asl/literatures/import \
|
||||
- `projectId`: 项目ID
|
||||
|
||||
**Excel格式要求**:
|
||||
| <EFBFBD>堒<EFBFBD>嚗<EFBFBD>葉<EFBFBD>望<EFBFBD><EFBFBD><EFBFBD>虾嚗?| 敹<>‵ | 霂湔<E99C82> |
|
||||
| 列名(中英文均可) | 必填 | 说明 |
|
||||
|------------------|------|------|
|
||||
| PMID / pmid / PMID蝻硋噡 | <EFBFBD>?| PubMed ID |
|
||||
| Title / title / <EFBFBD><EFBFBD><EFBFBD> | <20>?| <20><>讃<EFBFBD><E8AE83><EFBFBD> |
|
||||
| Abstract / abstract / <EFBFBD>䁅<EFBFBD> | <20>?| <20>䁅<EFBFBD> |
|
||||
| Authors / authors / 雿𡏭<EFBFBD>?| <20>?| 雿𡏭<E99BBF>?|
|
||||
| Journal / journal / <EFBFBD>笔<EFBFBD> | <20>?| <20>笔<EFBFBD><E7AC94>滨妍 |
|
||||
| Year / year / 撟港遢 | <20>?| <20>𤏸”撟港遢 |
|
||||
| DOI / doi | <EFBFBD>?| DOI |
|
||||
| PMID / pmid / PMID编号 | 否 | PubMed ID |
|
||||
| Title / title / 标题 | 是 | 文献标题 |
|
||||
| Abstract / abstract / 摘要 | 是 | 摘要 |
|
||||
| Authors / authors / 作者 | 否 | 作者 |
|
||||
| Journal / journal / 期刊 | 否 | 期刊名称 |
|
||||
| Year / year / 年份 | 否 | 发表年份 |
|
||||
| DOI / doi | 否 | DOI |
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
@@ -364,13 +375,16 @@ curl -X POST http://localhost:3001/api/v1/asl/literatures/import-excel \
|
||||
#### 2.3 获取文献列表
|
||||
|
||||
**接口**: `GET /api/v1/asl/projects/:projectId/literatures`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD>憿寧𤌍<EFBFBD><EFBFBD><EFBFBD><EFBFBD>桀<EFBFBD>銵剁<EFBFBD><EFBFBD>舀<EFBFBD><EFBFBD><EFBFBD>△嚗?
|
||||
**认证**: 需要
|
||||
**说明**: 获取项目的文献列表(支持分页)
|
||||
|
||||
**路径参数**:
|
||||
- `projectId`: 项目ID (UUID)
|
||||
|
||||
**查询参数**:
|
||||
- `page`: 憿萇<EFBFBD>嚗<EFBFBD><EFBFBD>霈? 1嚗?- `limit`: 瘥誯△<E8AAAF>圈<EFBFBD>嚗<EFBFBD><E59A97>霈? 50嚗峕<E59A97>憭? 100嚗?
|
||||
- `page`: 页码(默认: 1)
|
||||
- `limit`: 每页数量(默认: 50,最大: 100)
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
@@ -416,7 +430,7 @@ curl "http://localhost:3001/api/v1/asl/projects/{projectId}/literatures?page=1&l
|
||||
#### 2.4 删除文献
|
||||
|
||||
**接口**: `DELETE /api/v1/asl/literatures/:literatureId`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**认证**: 需要
|
||||
**说明**: 删除指定文献(级联删除筛选结果)
|
||||
|
||||
**路径参数**:
|
||||
@@ -437,14 +451,17 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
|
||||
---
|
||||
|
||||
### 3. 蝑偦<EFBFBD>劐遙<EFBFBD>∠恣<EFBFBD>?(Screening Tasks)
|
||||
### 3. 筛选任务管理 (Screening Tasks)
|
||||
|
||||
> **注意**: 以下接口为待实现功能(Week 2计划)
|
||||
|
||||
#### 3.1 启动筛选任务
|
||||
|
||||
> **瘜冽<E7989C>**: 隞乩<E99A9E><E4B9A9>亙藁銝箏<E98A9D>摰䂿緵<E482BF>蠘<EFBFBD>嚗Áeek 2霈∪<E99C88>嚗?
|
||||
#### 3.1 <20>臬𢆡蝑偦<E89D91>劐遙<E58A90>?
|
||||
**接口**: `POST /api/v1/asl/projects/:projectId/screening/start`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>臬𢆡AI蝑偦<EFBFBD>劐遙<EFBFBD>∴<EFBFBD>撘<EFBFBD>郊<EFBFBD>扯<EFBFBD>嚗?
|
||||
**霂瑟<E99C82>雿?*:
|
||||
**认证**: 需要
|
||||
**说明**: 启动AI筛选任务(异步执行)
|
||||
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"taskType": "title_abstract",
|
||||
@@ -468,10 +485,12 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
|
||||
---
|
||||
|
||||
#### 3.2 <EFBFBD>瑕<EFBFBD>蝑偦<EFBFBD>㕑<EFBFBD>摨?
|
||||
#### 3.2 获取筛选进度
|
||||
|
||||
**接口**: `GET /api/v1/asl/tasks/:taskId/progress`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD>蝑偦<EFBFBD>劐遙<EFBFBD>∟<EFBFBD>摨?
|
||||
**认证**: 需要
|
||||
**说明**: 获取筛选任务进度
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
@@ -492,13 +511,18 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
|
||||
---
|
||||
|
||||
#### 3.3 <EFBFBD>瑕<EFBFBD>蝑偦<EFBFBD>厩<EFBFBD><EFBFBD>?
|
||||
#### 3.3 获取筛选结果
|
||||
|
||||
**接口**: `GET /api/v1/asl/projects/:projectId/results`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD>蝑偦<EFBFBD>厩<EFBFBD><EFBFBD>𨅯<EFBFBD>銵?
|
||||
**认证**: 需要
|
||||
**说明**: 获取筛选结果列表
|
||||
|
||||
**查询参数**:
|
||||
- `page`: 憿萇<EFBFBD>嚗<EFBFBD><EFBFBD>霈? 1嚗?- `limit`: 瘥誯△<E8AAAF>圈<EFBFBD>嚗<EFBFBD><E59A97>霈? 50嚗?- `conflictOnly`: <20>芣遬蝷箏<E89DB7>蝒<EFBFBD>★嚗<E29885><E59A97>撠𥪜<E692A0>潘<EFBFBD>
|
||||
- `finalDecision`: 蝑偦<E89D91>匧<EFBFBD>蝑吔<E89D91>include / exclude / pending嚗?
|
||||
- `page`: 页码(默认: 1)
|
||||
- `limit`: 每页数量(默认: 50)
|
||||
- `conflictOnly`: 只显示冲突项(布尔值)
|
||||
- `finalDecision`: 筛选决策(include / exclude / pending)
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
@@ -534,10 +558,10 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
#### 3.4 审核冲突文献
|
||||
|
||||
**接口**: `POST /api/v1/asl/results/review`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**认证**: 需要
|
||||
**说明**: 批量审核冲突文献
|
||||
|
||||
**霂瑟<EFBFBD>雿?*:
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"projectId": "d67f0b9a-b035-4804-aca1-0bd672c27d81",
|
||||
@@ -569,14 +593,15 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
|
||||
### 4. 全文复筛管理 (Fulltext Screening)
|
||||
|
||||
> **<EFBFBD>嗆<EFBFBD>?*: <EFBFBD>?Day 5摰䂿緵銝哨<EFBFBD>2025-11-23嚗?
|
||||
> **状态**: ✅ Day 5实现中(2025-11-23)
|
||||
|
||||
#### 4.1 创建全文复筛任务
|
||||
|
||||
**接口**: `POST /api/v1/asl/fulltext-screening/tasks`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>𥕦遣<EFBFBD>冽<EFBFBD>憭滨<EFBFBD>隞餃𦛚嚗<EFBFBD>笆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>萘<EFBFBD><EFBFBD>朞<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>株<EFBFBD>銵?2摮埈挾霂<E68CBE>摯
|
||||
**认证**: 需要
|
||||
**说明**: 创建全文复筛任务,对标题初筛通过的文献进行12字段评估
|
||||
|
||||
**霂瑟<EFBFBD>雿?*:
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"projectId": "proj-123",
|
||||
@@ -590,7 +615,10 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
**字段说明**:
|
||||
- `projectId`: 项目ID(必填)
|
||||
- `literatureIds`: 待筛选文献ID列表(必填,需要是标题初筛通过的文献)
|
||||
- `modelA`: 璅∪<EFBFBD>A<EFBFBD>滨妍嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>暺䁅恕: deepseek-v3嚗?- `modelB`: 璅∪<E79285>B<EFBFBD>滨妍嚗<E5A68D>虾<EFBFBD>㚁<EFBFBD>暺䁅恕: qwen-max嚗?- `promptVersion`: Prompt<70><74>𧋦嚗<F0A78BA6>虾<EFBFBD>㚁<EFBFBD>暺䁅恕: v1.0.0嚗?
|
||||
- `modelA`: 模型A名称(可选,默认: deepseek-v3)
|
||||
- `modelB`: 模型B名称(可选,默认: qwen-max)
|
||||
- `promptVersion`: Prompt版本(可选,默认: v1.0.0)
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
@@ -603,20 +631,22 @@ curl -X DELETE http://localhost:3001/api/v1/asl/literatures/{literatureId}
|
||||
"modelA": "deepseek-v3",
|
||||
"modelB": "qwen-max",
|
||||
"createdAt": "2025-11-23T10:00:00.000Z",
|
||||
"message": "隞餃𦛚<EFBFBD>𥕦遣<EFBFBD>𣂼<EFBFBD>嚗峕迤<EFBFBD>典<EFBFBD><EFBFBD>啣<EFBFBD><EFBFBD>?
|
||||
"message": "任务创建成功,正在后台处理"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**业务规则**:
|
||||
1. 验证所有文献是否属于该项目
|
||||
2. 璉<EFBFBD><EFBFBD>交<EFBFBD><EFBFBD>格糓<EFBFBD>行<EFBFBD><EFBFBD>舐鍂<EFBFBD><EFBFBD>DF嚗ǑpdfStatus === 'ready'`嚗?3. 隞餃𦛚<E9A483>𥕦遣<F0A595A6>𡒊<EFBFBD><F0A1928A>唾<EFBFBD><E594BE>痹<EFBFBD><E797B9>𤾸蝱撘<E89DB1>郊憭<E9838A><E686AD>
|
||||
4. 憒<EFBFBD><EFBFBD><EFBFBD>典<EFBFBD><EFBFBD><EFBFBD>讃PDF<EFBFBD>芸停蝏迎<EFBFBD>隞<EFBFBD><EFBFBD><EFBFBD><EFBFBD>DF撠梁貌<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
2. 检查文献是否有可用的PDF(`pdfStatus === 'ready'`)
|
||||
3. 任务创建后立即返回,后台异步处理
|
||||
4. 如果部分文献PDF未就绪,仅处理PDF就绪的文献
|
||||
|
||||
**错误响应**:
|
||||
```json
|
||||
{
|
||||
"success": false,
|
||||
"error": "<EFBFBD>典<EFBFBD><EFBFBD><EFBFBD>讃PDF<EFBFBD>芸停蝏迎<EFBFBD><EFBFBD>䭾<EFBFBD>撘<EFBFBD>憪见<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑?
|
||||
"error": "部分文献PDF未就绪,无法开始全文复筛"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -637,8 +667,9 @@ curl -X POST http://localhost:3001/api/v1/asl/fulltext-screening/tasks \
|
||||
#### 4.2 获取任务进度
|
||||
|
||||
**接口**: `GET /api/v1/asl/fulltext-screening/tasks/:taskId`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD><EFBFBD>冽<EFBFBD>憭滨<EFBFBD>隞餃𦛚<EFBFBD><EFBFBD>祕蝏<EFBFBD><EFBFBD>摨虫縑<EFBFBD>?
|
||||
**认证**: 需要
|
||||
**说明**: 获取全文复筛任务的详细进度信息
|
||||
|
||||
**路径参数**:
|
||||
- `taskId`: 任务ID
|
||||
|
||||
@@ -684,9 +715,15 @@ curl -X POST http://localhost:3001/api/v1/asl/fulltext-screening/tasks \
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
- `status`: 隞餃𦛚<EFBFBD>嗆<EFBFBD>? - `pending`: 敺<><E695BA><EFBFBD>? - `processing`: 憭<><E686AD>銝? - `completed`: 撌脣<E6928C><E884A3>? - `failed`: 憭梯揖
|
||||
- `cancelled`: 撌脣<E6928C>瘨?- `successCount`: <20>峕芋<E5B395>钅<EFBFBD><E99285>𣂼<EFBFBD><F0A382BC><EFBFBD><EFBFBD><EFBFBD>格㺭
|
||||
- `degradedCount`: 隞<><E99A9E>銝芣芋<E88AA3>𧢲<EFBFBD><F0A7A2B2>毺<EFBFBD><E6AFBA><EFBFBD>讃<EFBFBD>堆<EFBFBD><E5A086>滨漣璅∪<E79285>嚗?- `failedCount`: <20>峕芋<E5B395>钅<EFBFBD>憭梯揖<E6A2AF><E68F96><EFBFBD><EFBFBD>格㺭
|
||||
- `status`: 任务状态
|
||||
- `pending`: 待处理
|
||||
- `processing`: 处理中
|
||||
- `completed`: 已完成
|
||||
- `failed`: 失败
|
||||
- `cancelled`: 已取消
|
||||
- `successCount`: 双模型都成功的文献数
|
||||
- `degradedCount`: 仅一个模型成功的文献数(降级模式)
|
||||
- `failedCount`: 双模型都失败的文献数
|
||||
- `totalCost`: 累计成本(单位:元)
|
||||
|
||||
**测试命令**:
|
||||
@@ -699,7 +736,7 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
#### 4.3 获取任务结果
|
||||
|
||||
**接口**: `GET /api/v1/asl/fulltext-screening/tasks/:taskId/results`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**认证**: 需要
|
||||
**说明**: 获取全文复筛任务的详细结果,支持筛选和分页
|
||||
|
||||
**路径参数**:
|
||||
@@ -709,7 +746,13 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
- `filter`: 结果筛选(可选)
|
||||
- `all`: 全部(默认)
|
||||
- `conflict`: 仅冲突项
|
||||
- `pending`: 敺<EFBFBD>恣<EFBFBD>? - `reviewed`: 撌脣恣<E884A3>?- `page`: 憿萇<E686BF>嚗<EFBFBD><E59A97>霈? 1嚗?- `pageSize`: 瘥誯△<E8AAAF>圈<EFBFBD>嚗<EFBFBD><E59A97>霈? 20嚗峕<E59A97>憭? 100嚗?- `sortBy`: <20>鍦<EFBFBD>摮埈挾嚗<E68CBE>虾<EFBFBD>? `priority`, `createdAt`嚗?- `sortOrder`: <20>鍦<EFBFBD><E98DA6>孵<EFBFBD>嚗Ǒasc` | `desc`嚗屸<E59A97>霈? `desc`嚗?
|
||||
- `pending`: 待审核
|
||||
- `reviewed`: 已审核
|
||||
- `page`: 页码(默认: 1)
|
||||
- `pageSize`: 每页数量(默认: 20,最大: 100)
|
||||
- `sortBy`: 排序字段(可选: `priority`, `createdAt`)
|
||||
- `sortOrder`: 排序方向(`asc` | `desc`,默认: `desc`)
|
||||
|
||||
**响应示例**:
|
||||
```json
|
||||
{
|
||||
@@ -739,25 +782,25 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
"field1_source": {
|
||||
"assessment": "完整",
|
||||
"evidence": "第一作者Smith JA, Lancet 2023",
|
||||
"location": "蝚?憿?,
|
||||
"location": "第1页",
|
||||
"confidence": 0.98
|
||||
},
|
||||
"field2_studyType": {
|
||||
"assessment": "完整",
|
||||
"evidence": "憭帋葉敹<EFBFBD><EFBFBD><EFBFBD>箏笆<EFBFBD>扯<EFBFBD>撉?,
|
||||
"location": "Methods蝚?憿?,
|
||||
"evidence": "多中心随机对照试验",
|
||||
"location": "Methods第2页",
|
||||
"confidence": 0.95
|
||||
},
|
||||
"field5_population": {
|
||||
"assessment": "完整",
|
||||
"evidence": "蝥喳<EFBFBD>500靘?<EFBFBD>讠<EFBFBD>撠輻<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>撟湧<EFBFBD>58簣12撗?,
|
||||
"location": "Methods蝚?憿?,
|
||||
"evidence": "纳入500例2型糖尿病患者,年龄58±12岁",
|
||||
"location": "Methods第3页",
|
||||
"confidence": 0.92
|
||||
},
|
||||
"field9_outcomes": {
|
||||
"assessment": "完整",
|
||||
"evidence": "銝餉<EFBFBD>蝏枏<EFBFBD>eGFR<EFBFBD>睃<EFBFBD>嚗?15.2簣3.5 ml/min vs -8.1簣2.9 ml/min",
|
||||
"location": "Results蝚?憿菔”2",
|
||||
"evidence": "主要结局eGFR变化:-15.2±3.5 ml/min vs -8.1±2.9 ml/min",
|
||||
"location": "Results第5页表2",
|
||||
"confidence": 0.96
|
||||
}
|
||||
},
|
||||
@@ -821,8 +864,8 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
"fields": {
|
||||
"field9_outcomes": {
|
||||
"assessment": "缺失",
|
||||
"evidence": "<EFBFBD>芣𥁒<EFBFBD>𠰴<EFBFBD>雿𤘪㺭<EFBFBD>潘<EFBFBD>隞<EFBFBD><EFBFBD>P<EFBFBD>?,
|
||||
"location": "Results蝚?憿?,
|
||||
"evidence": "未报告具体数值,仅有P值",
|
||||
"location": "Results第4页",
|
||||
"confidence": 0.88
|
||||
}
|
||||
},
|
||||
@@ -879,17 +922,23 @@ curl http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
```
|
||||
|
||||
**12字段说明**:
|
||||
- `field1_source`: <EFBFBD><EFBFBD>讃<EFBFBD>交<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>𨳍<EFBFBD><EFBFBD>僑隞賜<EFBFBD>嚗?- `field2_studyType`: <20>𠉛弦蝐餃<E89D90>嚗㇌CT<43><54><EFBFBD><EFBFBD>㛖<EFBFBD>蝛嗥<E89D9B>嚗?- `field3_studyDesign`: <20>𠉛弦霈曇恣蝏<E681A3><E89D8F>
|
||||
- `field1_source`: 文献来源(作者、期刊、年份等)
|
||||
- `field2_studyType`: 研究类型(RCT、队列研究等)
|
||||
- `field3_studyDesign`: 研究设计细节
|
||||
- `field4_diagnosis`: 疾病诊断标准
|
||||
- `field5_population`: 人群特征(样本量、基线等)⭐
|
||||
- `field6_baseline`: <EFBFBD>箇瑪<EFBFBD>唳旿潃?- `field7_intervention`: 撟脤<E6929F><E884A4>芣鴌潃?- `field8_control`: 撖寧<E69296><E5AFA7>芣鴌
|
||||
- `field9_outcomes`: 蝏枏<E89D8F><E69E8F><EFBFBD><EFBFBD>潃鐥<E6BD83>潃?<3F><><EFBFBD>喲睸
|
||||
- `field6_baseline`: 基线数据⭐
|
||||
- `field7_intervention`: 干预措施⭐
|
||||
- `field8_control`: 对照措施
|
||||
- `field9_outcomes`: 结局指标⭐⭐⭐ 最关键
|
||||
- `field10_statistics`: 统计方法
|
||||
- `field11_quality`: 韐券<EFBFBD>霂<EFBFBD>遠嚗<EFBFBD><EFBFBD><EFBFBD>箏<EFBFBD><EFBFBD><EFBFBD>𤩅瘜閧<EFBFBD>嚗争<EFBFBD>潃?- `field12_other`: <20>嗡<EFBFBD>靽⊥<E99DBD>
|
||||
- `field11_quality`: 质量评价(随机化、盲法等)⭐⭐
|
||||
- `field12_other`: 其他信息
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
# <EFBFBD>瑕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>厩<EFBFBD><EFBFBD>?curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001/results"
|
||||
# 获取所有结果
|
||||
curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001/results"
|
||||
|
||||
# 仅获取冲突项
|
||||
curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001/results?filter=conflict"
|
||||
@@ -903,12 +952,13 @@ curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
#### 4.4 人工审核决策
|
||||
|
||||
**接口**: `PUT /api/v1/asl/fulltext-screening/results/:resultId/decision`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: 撖孵<EFBFBD>銝芸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝑𤤿<EFBFBD><EFBFBD>𡏭<EFBFBD>銵䔶犖撌亙恣<EFBFBD>詨<EFBFBD>蝑?
|
||||
**认证**: 需要
|
||||
**说明**: 对单个全文复筛结果进行人工审核决策
|
||||
|
||||
**路径参数**:
|
||||
- `resultId`: 结果ID
|
||||
|
||||
**霂瑟<EFBFBD>雿?*:
|
||||
**请求体**:
|
||||
```json
|
||||
{
|
||||
"finalDecision": "exclude",
|
||||
@@ -918,7 +968,8 @@ curl "http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-20251123-001
|
||||
```
|
||||
|
||||
**字段说明**:
|
||||
- `finalDecision`: <EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD>蝑吔<EFBFBD>敹<EFBFBD>‵嚗? - `include`: 蝥喳<E89DA5>
|
||||
- `finalDecision`: 最终决策(必填)
|
||||
- `include`: 纳入
|
||||
- `exclude`: 排除
|
||||
- `exclusionReason`: 排除原因(`finalDecision === 'exclude'` 时必填)
|
||||
- `reviewNotes`: 审核备注(可选)
|
||||
@@ -943,8 +994,8 @@ curl -X PUT http://localhost:3001/api/v1/asl/fulltext-screening/results/fsr-002/
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"finalDecision": "exclude",
|
||||
"exclusionReason": "蝏枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>唳旿銝滚<EFBFBD><EFBFBD>?,
|
||||
"reviewNotes": "蝻箏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>澆<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌?
|
||||
"exclusionReason": "结局指标数据不完整",
|
||||
"reviewNotes": "缺少均值和标准差"
|
||||
}'
|
||||
```
|
||||
|
||||
@@ -953,8 +1004,9 @@ curl -X PUT http://localhost:3001/api/v1/asl/fulltext-screening/results/fsr-002/
|
||||
#### 4.5 导出Excel
|
||||
|
||||
**接口**: `GET /api/v1/asl/fulltext-screening/tasks/:taskId/export`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: 撖澆枂<EFBFBD>冽<EFBFBD>憭滨<EFBFBD>蝏𤘪<EFBFBD>銝慟xcel<EFBFBD><EFBFBD>辣嚗?銝杵heet嚗?
|
||||
**认证**: 需要
|
||||
**说明**: 导出全文复筛结果为Excel文件(3个Sheet)
|
||||
|
||||
**路径参数**:
|
||||
- `taskId`: 任务ID
|
||||
|
||||
@@ -969,52 +1021,52 @@ curl -X PUT http://localhost:3001/api/v1/asl/fulltext-screening/results/fsr-002/
|
||||
|------|------|
|
||||
| 序号 | 1, 2, 3... |
|
||||
| PMID | PubMed ID |
|
||||
| <EFBFBD><EFBFBD>讃<EFBFBD>交<EFBFBD> | 蝚砌<E89D9A>雿𡏭<E99BBF>?撟港遢 |
|
||||
| 文献来源 | 第一作者+年份 |
|
||||
| 标题 | 文献标题 |
|
||||
| 期刊 | 期刊名称 |
|
||||
| 年份 | 发表年份 |
|
||||
| DOI | DOI编号 |
|
||||
| <EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD>蝑?| 蝥喳<E89DA5> |
|
||||
| <EFBFBD>唳旿韐券<EFBFBD> | 擃?銝?雿?|
|
||||
| <EFBFBD>舀<EFBFBD><EFBFBD>𡝗<EFBFBD>?| <20>舀<EFBFBD><E88880>?<3F>典<EFBFBD><E585B8>舀<EFBFBD><E88880>?銝滚虾<E6BB9A>𣂼<EFBFBD> |
|
||||
| 璅∪<EFBFBD>銝<EFBFBD><EFBFBD>湔<EFBFBD>?| 銝<><E98A9D>?銝滢<E98A9D><E6BBA2>?|
|
||||
| <EFBFBD>臬炏鈭箏極摰⊥瓲 | <20>?<3F>?|
|
||||
| 最终决策 | 纳入 |
|
||||
| 数据质量 | 高/中/低 |
|
||||
| 可提取性 | 可提取/部分可提取/不可提取 |
|
||||
| 模型一致性 | 一致/不一致 |
|
||||
| 是否人工审核 | 是/否 |
|
||||
|
||||
**Sheet 2: 排除文献列表**
|
||||
| 列名 | 说明 |
|
||||
|------|------|
|
||||
| 序号 | 1, 2, 3... |
|
||||
| PMID | PubMed ID |
|
||||
| <EFBFBD><EFBFBD>讃<EFBFBD>交<EFBFBD> | 蝚砌<E89D9A>雿𡏭<E99BBF>?撟港遢 |
|
||||
| 文献来源 | 第一作者+年份 |
|
||||
| 标题 | 文献标题 |
|
||||
| 排除原因 | 详细排除原因 |
|
||||
| <EFBFBD>㘾膄摮埈挾 | field5, field9蝑?|
|
||||
| <EFBFBD>臬炏<EFBFBD>脩<EFBFBD> | <20>?<3F>?|
|
||||
| 摰⊥瓲鈭?| <20>冽<EFBFBD>ID |
|
||||
| 排除字段 | field5, field9等 |
|
||||
| 是否冲突 | 是/否 |
|
||||
| 审核人 | 用户ID |
|
||||
| 审核时间 | 2025-11-23 10:30 |
|
||||
|
||||
**Sheet 3: PRISMA统计**
|
||||
| 蝏蠘恣憿?| <20>圈<EFBFBD> | <20>曉<EFBFBD>瘥?|
|
||||
| 统计项 | 数量 | 百分比 |
|
||||
|--------|------|--------|
|
||||
| 全文复筛总数 | 30 | 100% |
|
||||
| <EFBFBD><EFBFBD>蝏<EFBFBD>熙<EFBFBD>?| 18 | 60% |
|
||||
| <EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD><EFBFBD>?| 12 | 40% |
|
||||
| - 蝏枏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝻箏仃/銝滚<E98A9D><E6BB9A>?| 5 | 16.7% |
|
||||
| 最终纳入 | 18 | 60% |
|
||||
| 最终排除 | 12 | 40% |
|
||||
| - 结局指标缺失/不完整 | 5 | 16.7% |
|
||||
| - 人群特征不符 | 3 | 10% |
|
||||
| - 撟脤<EFBFBD><EFBFBD>芣鴌銝齿<EFBFBD>蝖?| 2 | 6.7% |
|
||||
| - 干预措施不明确 | 2 | 6.7% |
|
||||
| - 研究质量问题 | 1 | 3.3% |
|
||||
| - 其他原因 | 1 | 3.3% |
|
||||
| 璅∪<EFBFBD><EFBFBD>脩<EFBFBD><EFBFBD>?| 3 | 10% |
|
||||
| 鈭箏極摰⊥瓲<EFBFBD>?| 3 | 10% |
|
||||
| 模型冲突数 | 3 | 10% |
|
||||
| 人工审核数 | 3 | 10% |
|
||||
|
||||
**<EFBFBD>鞉𧋦蝏蠘恣嚗<EFBFBD><EFBFBD>憭𠼦heet嚗?*:
|
||||
| 憿寧𤌍 | <EFBFBD>?|
|
||||
**成本统计(额外Sheet)**:
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| <EFBFBD>蓉oken<EFBFBD>?| 450,000 |
|
||||
| 总Token数 | 450,000 |
|
||||
| 总成本(元) | ¥2.25 |
|
||||
| 撟喳<EFBFBD><EFBFBD>鞉𧋦/蝭?| 瞼0.075 |
|
||||
| 平均成本/篇 | ¥0.075 |
|
||||
| 模型组合 | DeepSeek-V3 + Qwen-Max |
|
||||
| 憭<EFBFBD><EFBFBD><EFBFBD>園𡢿 | 8<>?0蝘?|
|
||||
| 处理时间 | 8分30秒 |
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
@@ -1038,7 +1090,9 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
```
|
||||
|
||||
**HTTP状态码**:
|
||||
- `200` - <EFBFBD>𣂼<EFBFBD>嚗𠃑ET<EFBFBD><EFBFBD>UT嚗?- `201` - <20>𥕦遣<F0A595A6>𣂼<EFBFBD>嚗㇊OST嚗?
|
||||
- `200` - 成功(GET、PUT)
|
||||
- `201` - 创建成功(POST)
|
||||
|
||||
---
|
||||
|
||||
### 2. 错误响应
|
||||
@@ -1051,7 +1105,7 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
}
|
||||
```
|
||||
|
||||
<EFBFBD>吔<EFBFBD>霂衣<EFBFBD><EFBFBD>躰秤嚗?
|
||||
或(详细错误):
|
||||
```json
|
||||
{
|
||||
"error": "Missing required fields"
|
||||
@@ -1060,7 +1114,11 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
|
||||
**常见HTTP状态码**:
|
||||
- `400` - 请求参数错误
|
||||
- `401` - <EFBFBD>芣<EFBFBD><EFBFBD>?- `403` - <20>䭾<EFBFBD><E4ADBE>?- `404` - 韏<><E99F8F>銝滚<E98A9D><E6BB9A>?- `500` - <20>滚𦛚<E6BB9A>典<EFBFBD><E585B8>券<EFBFBD>霂?
|
||||
- `401` - 未授权
|
||||
- `403` - 无权限
|
||||
- `404` - 资源不存在
|
||||
- `500` - 服务器内部错误
|
||||
|
||||
**错误示例**:
|
||||
```json
|
||||
// 400 - 参数错误
|
||||
@@ -1068,11 +1126,13 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
"error": "Missing required fields"
|
||||
}
|
||||
|
||||
// 404 - 韏<EFBFBD><EFBFBD>銝滚<EFBFBD><EFBFBD>?{
|
||||
// 404 - 资源不存在
|
||||
{
|
||||
"error": "Project not found"
|
||||
}
|
||||
|
||||
// 500 - <EFBFBD>滚𦛚<EFBFBD>券<EFBFBD>霂?{
|
||||
// 500 - 服务器错误
|
||||
{
|
||||
"error": "Failed to create project"
|
||||
}
|
||||
```
|
||||
@@ -1086,7 +1146,8 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
{
|
||||
"success": true,
|
||||
"data": {
|
||||
"items": [...], // <EFBFBD>?literatures<EFBFBD><EFBFBD>esults 蝑? "pagination": {
|
||||
"items": [...], // 或 literatures、results 等
|
||||
"pagination": {
|
||||
"page": 1,
|
||||
"limit": 50,
|
||||
"total": 150,
|
||||
@@ -1100,12 +1161,14 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
- `page`: 当前页码(从1开始)
|
||||
- `limit`: 每页数量
|
||||
- `total`: 总记录数
|
||||
- `totalPages`: <EFBFBD>駁△<EFBFBD>?
|
||||
- `totalPages`: 总页数
|
||||
|
||||
---
|
||||
|
||||
## 🔐 认证授权
|
||||
|
||||
### 敶枏<EFBFBD><EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>瘚贝<EFBFBD>璅∪<EFBFBD>嚗?
|
||||
### 当前状态(测试模式)
|
||||
|
||||
**测试用户**:
|
||||
- **用户ID**: `asl-test-user-001`
|
||||
- **邮箱**: `asl-test@example.com`
|
||||
@@ -1115,16 +1178,18 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
- 优先从JWT中获取`userId`
|
||||
- JWT不存在时使用默认测试用户ID
|
||||
|
||||
### <EFBFBD>煺漣<EFBFBD>臬<EFBFBD>嚗<EFBFBD><EFBFBD>摰䂿緵嚗?
|
||||
### 生产环境(待实现)
|
||||
|
||||
**认证流程**:
|
||||
1. 用户登录获取JWT Token
|
||||
2. 请求头携带Token: `Authorization: Bearer {token}`
|
||||
3. 中间件验证Token并提取`userId`
|
||||
4. 控制器使用`userId`查询用户数据
|
||||
|
||||
**銝剝𡢿隞嗥內靘?*:
|
||||
**中间件示例**:
|
||||
```typescript
|
||||
// 敺<EFBFBD><EFBFBD><EFBFBD>?fastify.addHook('preHandler', async (request, reply) => {
|
||||
// 待实现
|
||||
fastify.addHook('preHandler', async (request, reply) => {
|
||||
const token = request.headers.authorization?.replace('Bearer ', '');
|
||||
if (!token) {
|
||||
return reply.status(401).send({ error: 'Unauthorized' });
|
||||
@@ -1138,7 +1203,8 @@ curl -O -J http://localhost:3001/api/v1/asl/fulltext-screening/tasks/fst-2025112
|
||||
|
||||
## 🧪 API测试
|
||||
|
||||
### 敹恍<EFBFBD><EFBFBD><EFBFBD>霂閗<EFBFBD><EFBFBD>?
|
||||
### 快速测试脚本
|
||||
|
||||
**测试所有API**:
|
||||
```bash
|
||||
cd AIclinicalresearch/backend
|
||||
@@ -1147,9 +1213,18 @@ npx tsx scripts/test-asl-api.ts
|
||||
|
||||
**测试结果**:
|
||||
```
|
||||
<EFBFBD><EFBFBD> 撘<>憪𧢲<E686AA>霂?ASL 璅∪<EFBFBD> API...
|
||||
<EFBFBD><EFBFBD> 瘚贝<E7989A> 1/7: <20>亙熒璉<E78692><E79289>? <20>?<3F><> 瘚贝<E7989A> 2/7: <20>𥕦遣蝑偦<E89D91>厰★<E58EB0>? <20>?<3F><> 瘚贝<E7989A> 3/7: <20>瑕<EFBFBD>憿寧𤌍<E5AFA7>𡑒” <20>?<3F><> 瘚贝<E7989A> 4/7: <20>瑕<EFBFBD>憿寧𤌍霂行<E99C82> <20>?<3F><> 瘚贝<E7989A> 5/7: 撖澆<E69296><E6BE86><EFBFBD>讃 <20>?<3F><> 瘚贝<E7989A> 6/7: <20>瑕<EFBFBD><E79195><EFBFBD>讃<EFBFBD>𡑒” <20>?<3F><> 瘚贝<E7989A> 7/7: <20>湔鰵憿寧𤌍 <20>?<3F>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>鐥<EFBFBD><E990A5>?<3F><> <20><><EFBFBD>㗇<EFBFBD>霂閖<E99C82>朞<EFBFBD>嚗?7/7 - 100%)
|
||||
<EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>鐥<EFBFBD><EFBFBD>?```
|
||||
🚀 开始测试 ASL 模块 API...
|
||||
📍 测试 1/7: 健康检查 ✅
|
||||
📍 测试 2/7: 创建筛选项目 ✅
|
||||
📍 测试 3/7: 获取项目列表 ✅
|
||||
📍 测试 4/7: 获取项目详情 ✅
|
||||
📍 测试 5/7: 导入文献 ✅
|
||||
📍 测试 6/7: 获取文献列表 ✅
|
||||
📍 测试 7/7: 更新项目 ✅
|
||||
═══════════════════════════════════
|
||||
🎉 所有测试通过!(7/7 - 100%)
|
||||
═══════════════════════════════════
|
||||
```
|
||||
|
||||
### Postman集合
|
||||
|
||||
@@ -1182,35 +1257,41 @@ Body (raw JSON):
|
||||
|
||||
| 接口类型 | 目标响应时间 | 说明 |
|
||||
|---------|-------------|------|
|
||||
| <EFBFBD>蓥葵<EFBFBD>亥砭 | < 100ms | 憿寧𤌍霂行<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>株祕<EFBFBD>?|
|
||||
| <EFBFBD>𡑒”<EFBFBD>亥砭 | < 200ms | 憿寧𤌍<EFBFBD>𡑒”<EFBFBD><EFBFBD><EFBFBD><EFBFBD>桀<EFBFBD>銵?|
|
||||
| <EFBFBD>𥕦遣/<2F>湔鰵 | < 300ms | <EFBFBD>𥕦遣憿寧𤌍<EFBFBD><EFBFBD>凒<EFBFBD>圈★<EFBFBD>?|
|
||||
| <EFBFBD>寥<EFBFBD>撖澆<EFBFBD> | < 2s | 撖澆<EFBFBD>100蝭<EFBFBD><EFBFBD><EFBFBD>?|
|
||||
| LLM蝑偦<EFBFBD>?| 4-6s/蝭?| <20>峕芋<E5B395>见僎銵𣬚<E98AB5><F0A3AC9A>?|
|
||||
| 单个查询 | < 100ms | 项目详情、文献详情 |
|
||||
| 列表查询 | < 200ms | 项目列表、文献列表 |
|
||||
| 创建/更新 | < 300ms | 创建项目、更新项目 |
|
||||
| 批量导入 | < 2s | 导入100篇文献 |
|
||||
| LLM筛选 | 4-6s/篇 | 双模型并行筛选 |
|
||||
|
||||
### 并发能力
|
||||
|
||||
- **API<EFBFBD>滚𦛚<EFBFBD>?*: <20>舀<EFBFBD>100+撟嗅<E6929F>霂瑟<E99C82>
|
||||
- **LLM蝑偦<EFBFBD>?*: 撟嗅<E6929F><E59785>唬蛹3嚗<33>虾<EFBFBD>滨蔭嚗?- **<2A>唳旿摨栞<E691A8><E6A09E>交<EFBFBD>**: 17銝芾<E98A9D><E88ABE>?
|
||||
- **API服务器**: 支持100+并发请求
|
||||
- **LLM筛选**: 并发数为3(可配置)
|
||||
- **数据库连接池**: 17个连接
|
||||
|
||||
---
|
||||
|
||||
## 🔄 版本历史
|
||||
|
||||
### v3.0 (2025-11-23)
|
||||
- <20>?<3F>啣<EFBFBD><E595A3>冽<EFBFBD>憭滨<E686AD>蝞∠<E89D9E>API嚗?銝芣𦻖<E88AA3><F0A6BB96><EFBFBD>
|
||||
- ✅ 新增全文复筛管理API(5个接口)
|
||||
- 创建任务、获取进度、获取结果、人工审核、导出Excel
|
||||
- <20>?<3F>舀<EFBFBD>12摮埈挾霂衣<E99C82>霂<EFBFBD>摯
|
||||
- <20>?<3F>舀<EFBFBD><E88880>峕芋<E5B395>见笆瘥𥪜<E798A5><F0A5AA9C>脩<EFBFBD>璉<EFBFBD>瘚?- <20>?摰峕㟲<E5B395><E39FB2>xcel撖澆枂<E6BE86>蠘<EFBFBD>嚗? Sheets嚗?- <20>?靚<>㟲<EFBFBD><E39FB2>﹝蝏𤘪<E89D8F>嚗?憭扳芋<E689B3>梹<EFBFBD>
|
||||
- ✅ 支持12字段详细评估
|
||||
- ✅ 支持双模型对比和冲突检测
|
||||
- ✅ 完整的Excel导出功能(3 Sheets)
|
||||
- ✅ 调整文档结构(5大模块)
|
||||
|
||||
### v2.1 (2025-11-21)
|
||||
- <20>?<3F>啣<EFBFBD>蝏蠘恣API<50>亙藁
|
||||
- <20>?<3F>湔鰵PICOS<4F>澆<EFBFBD>霂湔<E99C82>
|
||||
- <20>?瘛餃<E7989B>鈭穃<E988AD><E7A983><EFBFBD>沲<EFBFBD><E6B2B2><EFBFBD>瘜?
|
||||
- ✅ 新增统计API接口
|
||||
- ✅ 更新PICOS格式说明
|
||||
- ✅ 添加云原生架构标注
|
||||
|
||||
### v2.0 (2025-11-18)
|
||||
- <20>?摰䂿緵10銝芣瓲敹<E793B2>PI蝡舐<E89DA1>
|
||||
- <20>?摰峕<E691B0>憿寧𤌍蝞∠<E89D9E><E288A0>蠘<EFBFBD>
|
||||
- <20>?摰峕<E691B0><E5B395><EFBFBD>讃蝞∠<E89D9E><E288A0>蠘<EFBFBD>
|
||||
- <20>?瘛餃<E7989B>瘚贝<E7989A><E8B49D>𡁏𧋦<F0A1818F>峕<EFBFBD>獢?- <20>?<3F><><EFBFBD>㗇𦻖<E39787><F0A6BB96><EFBFBD>霂閖<E99C82>朞<EFBFBD>
|
||||
- ✅ 实现10个核心API端点
|
||||
- ✅ 完成项目管理功能
|
||||
- ✅ 完成文献管理功能
|
||||
- ✅ 添加测试脚本和文档
|
||||
- ✅ 所有接口测试通过
|
||||
|
||||
### v1.0 (2025-10-29)
|
||||
- 初始API设计规范
|
||||
@@ -1218,15 +1299,17 @@ Body (raw JSON):
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>?<3F>𡒊賒閫<E8B392><E996AB>
|
||||
## ⏳ 后续规划
|
||||
|
||||
### Week 2
|
||||
- [ ] 摰䂿緵蝑偦<E89D91>劐遙<E58A90>,PI (3銝芣𦻖<E88AA3>?
|
||||
- [ ] 摰䂿緵<E482BF>脩<EFBFBD>摰⊥瓲API (2銝芣𦻖<EFBFBD>?
|
||||
- [ ] 瘛餃<E7989B>SSE餈𥕦漲<F0A595A6>券<EFBFBD>?- [ ] <20><><EFBFBD>撘<EFBFBD>郊隞餃𦛚<E9A483>笔<EFBFBD>
|
||||
- [ ] 实现筛选任务API (3个接口)
|
||||
- [ ] 实现冲突审核API (2个接口)
|
||||
- [ ] 添加SSE进度推送
|
||||
- [ ] 集成异步任务队列
|
||||
|
||||
### Week 3-4
|
||||
- [ ] 瘛餃<E7989B>JWT霈方<E99C88>銝剝𡢿隞?- [ ] 摰䂿緵<E482BF><E7B7B5><EFBFBD><EFBFBD>批<EFBFBD>
|
||||
- [ ] 添加JWT认证中间件
|
||||
- [ ] 实现权限控制
|
||||
- [ ] 添加API限流
|
||||
- [ ] 完善错误处理
|
||||
|
||||
@@ -1239,8 +1322,9 @@ Body (raw JSON):
|
||||
#### 5.1 获取项目统计数据(云原生:后端聚合)
|
||||
|
||||
**接口**: `GET /api/v1/asl/projects/:projectId/statistics`
|
||||
**霈方<EFBFBD>**: <EFBFBD><EFBFBD>閬?
|
||||
**霂湔<EFBFBD>**: <EFBFBD>瑕<EFBFBD>憿寧𤌍<EFBFBD><EFBFBD><EFBFBD><EFBFBD>厩<EFBFBD>霈⊥㺭<EFBFBD>殷<EFBFBD><EFBFBD>餅㺭<EFBFBD><EFBFBD>熙<EFBFBD>亦<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>斤<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>文<EFBFBD><EFBFBD>惩<EFBFBD><EFBFBD>鞟<EFBFBD>嚗?
|
||||
**认证**: 需要
|
||||
**说明**: 获取项目的筛选统计数据(总数、纳入率、排除率、排除原因分析等)
|
||||
|
||||
**路径参数**:
|
||||
- `projectId`: 项目ID
|
||||
|
||||
@@ -1256,9 +1340,9 @@ Body (raw JSON):
|
||||
"conflict": 24,
|
||||
"reviewed": 175,
|
||||
"exclusionReasons": {
|
||||
"P銝滚龪<EFBFBD>㵪<EFBFBD>鈭箇黎嚗?: 40,
|
||||
"I銝滚龪<EFBFBD>㵪<EFBFBD>撟脤<EFBFBD>嚗?: 25,
|
||||
"S銝滚龪<EFBFBD>㵪<EFBFBD><EFBFBD>𠉛弦霈曇恣嚗?: 15,
|
||||
"P不匹配(人群)": 40,
|
||||
"I不匹配(干预)": 25,
|
||||
"S不匹配(研究设计)": 15,
|
||||
"其他原因": 10
|
||||
},
|
||||
"includedRate": "42.7",
|
||||
@@ -1268,9 +1352,11 @@ Body (raw JSON):
|
||||
}
|
||||
```
|
||||
|
||||
**<EFBFBD>寧<EFBFBD>**嚗?- <20>?鈭穃<E988AD><E7A983><EFBFBD><EFBFBD><EFBFBD>𡒊垢Prisma<6D>𡁜<EFBFBD><F0A1819C>亥砭嚗?銝芸僎銵峕䰻霂g<E99C82>
|
||||
- <EFBFBD>?<3F>扯<EFBFBD>嚗?500ms嚗?99蝭<39><E89DAD><EFBFBD>殷<EFBFBD>
|
||||
- <EFBFBD>?<3F>誩<EFBFBD>蝵𤑳<E89DB5>隡㰘<E99AA1>嚗帋<E59A97>MB蝥折<E89DA5><E68A98>袁B蝥?
|
||||
**特点**:
|
||||
- ✅ 云原生:后端Prisma聚合查询(6个并行查询)
|
||||
- ✅ 性能:<500ms(199篇文献)
|
||||
- ✅ 减少网络传输:从MB级降到KB级
|
||||
|
||||
**测试命令**:
|
||||
```bash
|
||||
curl http://localhost:3001/api/v1/asl/projects/55941145-bba0-4b15-bda4-f0a398d78208/statistics
|
||||
@@ -1278,18 +1364,21 @@ curl http://localhost:3001/api/v1/asl/projects/55941145-bba0-4b15-bda4-f0a398d78
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗?* v3.0
|
||||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>堆<EFBFBD>** 2025-11-23嚗㇄ay 5: <EFBFBD>冽<EFBFBD>憭滨<EFBFBD>API嚗?
|
||||
**蝏湔擪<EFBFBD><EFBFBD><EFBFBD>** AI<EFBFBD>箄<EFBFBD><EFBFBD><EFBFBD>讃撘<EFBFBD><EFBFBD>穃𣪧<EFBFBD>?
|
||||
**<EFBFBD>祆活<EFBFBD>湔鰵**嚗?- <20>?<3F>啣<EFBFBD><E595A3>冽<EFBFBD>憭滨<E686AD>蝞∠<E89D9E>API嚗?銝芣瓲敹<E793B2>𦻖<EFBFBD><F0A6BB96><EFBFBD>
|
||||
- <20>?霂衣<E99C82><E8A1A3>?2摮埈挾霂<E68CBE>摯<EFBFBD><E691AF>﹝
|
||||
- <EFBFBD>?<3F>峕芋<E5B395>见笆瘥𥪜<E798A5><F0A5AA9C>脩<EFBFBD>璉<EFBFBD>瘚贝秩<E8B49D>?- <20>?Excel撖澆枂<E6BE86>澆<EFBFBD>閫<EFBFBD><E996AB>
|
||||
- <EFBFBD>?摰峕㟲<E5B395><E39FB2>窈瘙?<3F>滚<EFBFBD>蝷箔<E89DB7>
|
||||
**文档版本:** v3.0
|
||||
**最后更新:** 2025-11-23(Day 5: 全文复筛API)
|
||||
**维护者:** AI智能文献开发团队
|
||||
|
||||
**本次更新**:
|
||||
- ✅ 新增全文复筛管理API(5个核心接口)
|
||||
- ✅ 详细的12字段评估文档
|
||||
- ✅ 双模型对比和冲突检测说明
|
||||
- ✅ Excel导出格式规范
|
||||
- ✅ 完整的请求/响应示例
|
||||
|
||||
---
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
- [<EFBFBD>唳旿摨栞挽霈⊥<EFBFBD>獢β(./01-<2D>唳旿摨栞挽霈?md)
|
||||
- [数据库设计文档](./01-数据库设计.md)
|
||||
- [API测试报告](../../../backend/ASL-API-测试报告.md)
|
||||
- [Week 1摰峕<EFBFBD><EFBFBD>亙<EFBFBD>](../05-撘<EFBFBD><EFBFBD>𤏸扇敶?2025-11-18-Week1摰峕<EFBFBD><EFBFBD>亙<EFBFBD>.md)
|
||||
- [Week 1完成报告](../05-开发记录/2025-11-18-Week1完成报告.md)
|
||||
|
||||
Reference in New Issue
Block a user