Files
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

19 KiB
Raw Permalink Blame History

ASL 模块开发里程碑

文档版本: V3.0
创建日期: 2025-11-16
维护者: AI智能文献开发团队
最后更新: 2025-11-16
重要基于真实架构Frontend-v2 + Backend增量演进


📋 文档概述

本文档定义 ASLAI智能文献模块的完整开发里程碑采用 MVP → V1.0 → V2.0 三阶段渐进式演进策略。

架构前提:

  • Frontend-v2 全新架构(顶部导航 + 模块注册)- Week 2 Day 6-7 已完成
  • Backend 增量演进架构legacy/ + common/ + modules/- Week 2 Day 8-9 已完成
  • 数据库 10个Schema隔离 - Week 1 已完成
  • 🚧 ASL 模块占位就绪,等待 Week 3 开发

🏗️ 当前架构基础(已完成)

Frontend-v2 真实架构

frontend-v2/src/
├── framework/                      # ✅ 已实现Week 2 Day 6-7
│   ├── layout/
│   │   ├── MainLayout.tsx          # ✅ 主布局(顶部导航)
│   │   └── TopNavigation.tsx       # ✅ 顶部导航栏6个模块
│   ├── modules/
│   │   ├── moduleRegistry.ts       # ✅ 模块注册中心
│   │   ├── ErrorBoundary.tsx       # ✅ 错误边界
│   │   └── types.ts                # ✅ 模块类型定义
│   ├── router/
│   │   └── RouteGuard.tsx          # ✅ 路由守卫
│   └── permission/
│       ├── PermissionContext.tsx   # ✅ 权限控制
│       └── usePermission.ts        # ✅ 权限Hook
│
└── modules/                        # 📦 业务模块
    ├── asl/                        # 🚧 ASL模块占位Week 3开发
    │   └── index.tsx               # ✅ 占位页面
    ├── aia/                        # ✅ AI问答占位
    ├── pkb/                        # ✅ 知识库(占位)
    ├── dc/                         # ✅ 数据清洗(占位)
    ├── ssa/                        # ✅ 统计分析(占位)
    └── st/                         # ✅ 统计工具(占位)

Backend 真实架构

backend/src/
├── legacy/                         # ✅ 现有业务Week 2 Day 8-9完成迁移
│   ├── routes/                     # 7个路由文件
│   │   ├── projects.ts             # AIA: 项目路由
│   │   ├── agents.ts               # AIA: 智能体路由
│   │   ├── conversations.ts        # AIA: 对话路由
│   │   ├── chatRoutes.ts           # AIA: 通用对话
│   │   ├── knowledgeBases.ts       # PKB: 知识库路由
│   │   ├── batchRoutes.ts          # PKB: 批处理路由
│   │   └── reviewRoutes.ts         # RVW: 稿件审查路由
│   ├── controllers/                # 控制器
│   └── services/                   # 服务
│
├── common/                         # ✅ 通用能力层(已实现)
│   ├── llm/adapters/               # LLM适配器
│   │   ├── DeepSeekAdapter.ts      # ✅ DeepSeek-V3
│   │   ├── QwenAdapter.ts          # ✅ Qwen3-72B
│   │   └── LLMFactory.ts           # ✅ 工厂类
│   ├── rag/
│   │   └── DifyClient.ts           # ✅ RAG客户端
│   ├── document/
│   │   └── ExtractionClient.ts     # ✅ 文档提取客户端
│   ├── middleware/
│   │   └── validateProject.ts      # ✅ 验证中间件
│   └── utils/
│       └── jsonParser.ts           # ✅ JSON解析工具
│
└── modules/                        # 🌟 新模块开发区
    └── asl/                        # 🚧 ASL模块空目录Week 3开发
        └── (待创建)

Database Schema已隔离

PostgreSQL 15 + Prisma 6.17.0

✅ platform_schema  - 用户表users
✅ aia_schema       - AI问答projects, conversations, messages等
✅ pkb_schema       - 知识库knowledge_bases, documents, batch_tasks等
🚧 asl_schema       - AI智能文献Week 3 定义表结构)
📋 common_schema    - 通用能力层(预留)
📋 dc_schema        - 数据清洗(预留)
📋 rvw_schema       - 稿件审查(预留)
📋 admin_schema     - 运营管理(预留)
📋 ssa_schema       - 统计分析(预留)
📋 st_schema        - 统计工具(预留)

🎯 总体战略

┌──────────────────────────────────────────────────────────────┐
│                    ASL 三阶段演进路线图                         │
├──────────────────────────────────────────────────────────────┤
│  MVP (4周)            V1.0 (6周)            V2.0 (8周)         │
│  ├─ 基础可用          ├─ 高质量             ├─ 医学级          │
│  ├─ 快速验证          ├─ 智能优化           ├─ 自动审计         │
│  ├─ 成本优先          ├─ 质量提升           ├─ 完整追溯         │
│  └─ 人工复核          └─ 规则验证           └─ HITL智能分流     │
└──────────────────────────────────────────────────────────────┘

核心设计原则:
  1. 架构先行:在已完成的 Frontend-v2 和 Backend 架构基础上开发
  2. 分步实施:每阶段交付可用功能
  3. 质量可控准确率从85% → 90% → 95%
  4. 成本可控优先使用DeepSeek+Qwen3可切换高端模型

📊 三阶段里程碑对比

维度 MVP (4周) V1.0 (6周) V2.0 (8周)
交付范围 标题摘要初筛 + 全文复筛 + PDF提取 + 数据提取 + 质量审计
准确率目标 ≥ 85% ≥ 90% ≥ 95%
模型组合 DeepSeek + Qwen3 成本优化策略 三模型仲裁
质量控制 双模型验证 + JSON Schema + Few-shot + 规则引擎 + HITL + 自动审计
可追溯性 基本日志 完整证据链 审计级记录
前端 基础工作台Frontend-v2 优化交互 完整UI
后端 modules/asl/核心功能 + PDF服务集成 + 高级质量保障
成本/1000篇 ¥5 ¥21 ¥24 + 仲裁

🚀 MVP 阶段(第 1-4 周)

阶段目标

交付标准

  • 标题摘要初筛功能完整可用
  • Excel 导入、AI 双模型筛选、人工复核
  • 准确率 ≥ 85%
  • 成本控制:≤ ¥50/1000 篇
  • 前端集成到 Frontend-v2 顶部导航
  • 后端 API 注册到 /api/v1/asl/*

里程碑划分

M1.1 - 数据库Schema设计Week 1, Day 1

任务

  • 设计 asl_schema 表结构4张核心表
    • asl_screening_projects(筛选项目表)
    • asl_literatures(文献条目表)
    • asl_screening_results(筛选结果表)
    • asl_screening_tasks(筛选任务表)
  • backend/prisma/schema.prisma 中添加模型定义
    • 使用 @@schema("asl_schema") 指定Schema
    • 定义外键关系(引用 platform_schema.users
    • 添加 OSS 相关字段(支持云原生部署):
      • pdfUrl - PDF访问URL
      • pdfOssKey - OSS存储Key
      • pdfFileSize - 文件大小
  • 运行 Prisma 迁移
    cd backend
    npx prisma migrate dev --name add_asl_tables
    npx prisma generate
    

交付物

  • asl_schema 表创建完成
  • Prisma Client 生成成功
  • 数据库迁移成功
  • OSS 字段预留完成

M1.2 - 后端API搭建Week 1, Day 2-3

前置条件2025-11-17 更新):平台基础设施已完成实施
完成状态8个核心模块100%测试通过
完成报告平台基础设施实施完成报告
使用指南backend/src/common/README.md

平台已提供的8个核心模块无需ASL模块实现

# 模块 路径 使用方式 说明
1 存储服务 common/storage/ import { storage } from '@/common/storage' 文件上传下载(本地/OSS切换
2 日志系统 common/logging/ import { logger } from '@/common/logging' 结构化JSON日志
3 缓存服务 common/cache/ import { cache } from '@/common/cache' 内存/Redis缓存
4 异步任务 common/jobs/ import { jobQueue } from '@/common/jobs' 长时间任务处理
5 健康检查 common/health/ import { registerHealthRoutes } from '@/common/health' SAE健康检查
6 监控指标 common/monitoring/ import { Metrics } from '@/common/monitoring' 性能监控和告警
7 数据库连接池 config/database.ts import { prisma } from '@/config/database' 全局Prisma实例
8 环境配置 config/env.ts import { env } from '@/config/env' 统一配置管理

任务

  • 创建 backend/src/modules/asl/ 目录结构
    modules/asl/
    ├── routes/
    │   └── index.ts                # 路由注册
    ├── controllers/
    │   ├── projectController.ts    # 项目控制器
    │   ├── literatureController.ts # 文献控制器
    │   └── screeningController.ts  # 筛选控制器
    ├── services/
    │   ├── projectService.ts       # 项目业务逻辑
    │   ├── literatureService.ts    # 文献业务逻辑
    │   └── llmScreeningService.ts  # LLM筛选服务
    ├── schemas/
    │   └── screening.schema.ts     # JSON Schema定义
    └── types/
        └── screening.types.ts      # TypeScript类型
    
  • backend/src/index.ts 中注册ASL路由
    import { aslRoutes } from './modules/asl/routes/index.js'
    await app.register(aslRoutes, { prefix: '/api/v1/asl' })
    
  • 实现核心API参考 API设计规范文档
    • POST /api/v1/asl/projects - 创建项目
    • POST /api/v1/asl/projects/:id/literatures/import - 导入文献
    • POST /api/v1/asl/projects/:id/screening/start - 启动筛选
    • GET /api/v1/asl/projects/:id/screening/results - 获取结果
  • 配置环境变量
    # .env.development本地开发
    STORAGE_TYPE=local
    
    # .env.production生产环境SAE配置
    STORAGE_TYPE=oss
    OSS_REGION=oss-cn-hangzhou
    OSS_BUCKET=aiclinical-prod
    

交付物

  • ASL后端目录结构完整
  • API路由注册成功
  • 核心API可调用Postman测试通过
  • 正常使用平台服务storage/logger/cache/jobQueue/prisma等8个模块

M1.3 - LLM筛选核心Week 2, Day 1-2

任务

  • 实现双模型并行调用逻辑
    • 复用 common/llm/adapters/LLMFactory.ts
    • 调用 DeepSeek-V3 + Qwen3-72B
  • 定义JSON SchemaPICO判断结构
  • 设计提示词模板v1.0.0
    • 存放在 backend/prompts/asl/screening/v1.0.0-basic.txt
  • 实现冲突检测算法
  • 实现自动分流规则(置信度 < 0.7 → 人工复核)

交付物

  • 双模型可成功调用
  • JSON Schema验证通过率 > 95%
  • 冲突检测准确

M1.4 - 前端模块开发Week 2-3

任务

  • 更新 frontend-v2/src/modules/asl/index.tsx
    // 移除占位标记,实现真实模块
    const ASLModule: ModuleDefinition = {
      id: 'literature-platform',
      name: 'AI智能文献',
      path: '/literature',
      icon: FileSearchOutlined,
      component: lazy(() => import('./routes')),
      placeholder: false, // ← 改为 false
      requiredVersion: 'advanced',
    }
    
  • 创建 frontend-v2/src/modules/asl/ 子目录
    asl/
    ├── index.tsx                   # 模块定义
    ├── routes.tsx                  # 路由配置
    ├── pages/
    │   ├── ProjectList.tsx         # 项目列表
    │   ├── ScreeningSettings.tsx   # 设置与启动
    │   ├── ScreeningWorkbench.tsx  # 审核工作台
    │   └── ScreeningResults.tsx    # 初筛结果
    ├── components/
    │   ├── ExcelUploader.tsx       # Excel上传
    │   ├── ScreeningTable.tsx      # 筛选表格
    │   ├── DualModelModal.tsx      # 双视图模态框
    │   └── ResultsExport.tsx       # 结果导出
    ├── api/
    │   ├── projectApi.ts           # 项目API
    │   ├── screeningApi.ts         # 筛选API
    │   └── index.ts
    ├── hooks/
    │   ├── useScreening.ts         # 筛选Hook
    │   └── useLiterature.ts        # 文献Hook
    └── types/
        └── screening.ts            # 类型定义
    
  • 实现Excel上传功能使用 xlsx 库)
  • 实现审核工作台(表格化布局,参考原型图)
  • 实现双视图原文审查模态框
  • 实现结果展示和导出

交付物

  • ASL模块在顶部导航显示并可点击
  • 前端3个主要页面完整
  • 前后端联调成功

M1.5 - 集成测试与验收Week 4

任务

  • 端到端完整流程测试
    • 上传 199篇文献 Excel → 筛选 → 复核 → 导出
  • 准确率测试(使用金标准数据集)
    • 目标:≥ 85%
  • 性能测试
    • 100篇文献筛选 ≤ 10分钟
  • 修复Bug和优化

交付物

  • 准确率 ≥ 85%
  • 双模型一致率 ≥ 80%
  • JSON Schema验证通过率 ≥ 95%
  • 人工复核队列 ≤ 20%

📈 V1.0 阶段(第 5-10 周)

阶段目标

交付标准

  • 新增全文复筛功能
  • PDF 提取集成Nougat + PyMuPDF
  • Unpaywall API 集成(自动下载全文)
  • Few-shot 示例库
  • 规则引擎验证
  • 准确率 ≥ 90%

里程碑划分

M2.1 - PDF 提取服务集成Week 5

任务

  • 封装 ExtractionClient(已有 common/document/ExtractionClient.ts,需优化)
  • 实现自动语言检测和策略选择
  • Python 微服务优化(extraction_service/
    • 优化 Nougat 调用性能
    • 添加超时和错误处理
  • 实现 PDF 质量评估逻辑

交付物

  • 可成功提取英文医学PDF10-30页
  • 提取准确率 > 90%

M2.2 - Unpaywall API 集成Week 5

任务

  • 创建 backend/src/common/literature/UnpaywallClient.ts
  • 实现批量查询 DOI 可下载性
  • 实现 PDF 下载功能
  • 文件存储管理

交付物

  • 用户可一键检查 100 篇文献的可下载性
  • 可自动下载 OA 全文

M2.3 - 全文复筛功能Week 6-7

任务

  • 扩展数据库表(asl_full_text_screening_results
  • 后端全文复筛API
  • 前端全文审核工作台(复用组件 + PDF查看器

交付物

  • 用户可对初筛纳入文献进行全文复筛
  • 支持 PDF 在线查看和标注

M2.4 - 质量增强功能Week 8-10

任务

  • 人工标注 20-30 个 Few-shot 示例
  • 定义验证规则样本量、P值、必填字段
  • 实现成本优化策略(快速初筛 + 高价值复核)
  • 完善证据链记录

交付物

  • Few-shot 示例库 ≥ 20 个
  • 规则引擎覆盖率 ≥ 80%
  • 证据链完整性 100%
  • 准确率 ≥ 90%

🏆 V2.0 阶段(第 11-18 周)

阶段目标

交付标准

  • 新增全文数据提取功能
  • 三模型共识仲裁
  • HITL 智能分流
  • 提示词版本管理
  • 自动质量审计
  • 准确率 ≥ 95%(医学级)

里程碑划分

M3.1 - 全文数据提取模块Week 11-13

任务

  • 扩展数据库表(asl_extraction_results, asl_extraction_revisions
  • 后端分段提取逻辑
  • 前端表格化数据审查台(文献×变量矩阵)

交付物

  • 用户可配置提取变量清单
  • 批量提取 50 篇文献的结构化数据
  • 提取准确率 ≥ 92%

M3.2 - 医学级质量保障Week 14-16

任务

  • 三模型仲裁(冲突 → 启用 Claude-4.5
  • HITL 智能分流(优先级评分)
  • 提示词版本管理Git + 语义化版本)
  • 自动质量审计系统

交付物

  • 三模型仲裁成功率 > 95%
  • HITL 分流准确率 > 85%
  • 提示词版本管理系统上线
  • 自动质量审计每周运行

M3.3 - 高级功能与优化Week 17-18

任务

  • Chain of Thought (CoT) 推理
  • 动态示例选择(语义相似度)
  • 批处理性能优化Bull + Redis
  • 用户体验优化实时进度、PDF标注、快捷键

交付物

  • 系统稳定性测试通过
  • 性能测试1000 篇文献 < 30 分钟
  • 用户验收测试通过
  • 准确率 ≥ 95%

📋 交付物检查清单

MVP 阶段

  • 数据库

    • asl_schema 4张表创建
    • Prisma 迁移成功
  • 后端

    • modules/asl/ 目录结构完整
    • API 路由注册到 /api/v1/asl/*
    • LLM筛选服务可用
  • 前端

    • ASL模块注册到 moduleRegistry.ts
    • 顶部导航显示"AI智能文献"
    • 3个主页面完整
  • 测试

    • 准确率测试 ≥ 85%
    • 端到端测试通过

V1.0 阶段

  • 新增功能

    • PDF 提取服务
    • Unpaywall API 集成
    • 全文复筛
    • Few-shot 示例库
  • 测试

    • 准确率 ≥ 90%

V2.0 阶段

  • 新增功能

    • 全文数据提取
    • 三模型仲裁
    • HITL 智能分流
    • 自动质量审计
  • 测试

    • 准确率 ≥ 95%
    • 医学专家验证

📊 关键指标跟踪

质量指标

指标 MVP 目标 V1.0 目标 V2.0 目标
提取准确率 ≥ 85% ≥ 90% ≥ 95%
双模型一致率 ≥ 80% ≥ 85% ≥ 90%
JSON Schema 验证通过率 ≥ 95% ≥ 98% ≥ 99%
人工复核队列占比 ≤ 20% ≤ 15% ≤ 10%

成本指标

场景 MVP V1.0 V2.0
标题摘要筛选1000篇 ¥5 ¥21 ¥24
全文复筛200篇 - ¥30 ¥35
数据提取50篇 - ¥60 ¥80

📚 相关文档


更新日志

  • 2025-11-18: V3.1 更新补充平台基础设施完成状态8个核心模块
  • 2025-11-16: V3.0 重写基于真实架构Frontend-v2 + Backend增量演进 + 10个Schema
  • 2025-11-16: V2.0 重写,基于三阶段路线图详细规划里程碑
  • 2025-10-29: V1.0 创建,初始版本