## User flow end-to-end (góc nhìn người dùng)

### Vai trò tham gia
- **Admin**: tạo Campaign, gán người dùng vào Campaign, tạo Exam, mapping Exam vào Campaign.
- **Vận hành / CSKH**: theo dõi danh sách học sinh làm bài, gán giáo viên chấm cho bài thi.
- **Học sinh**: truy cập URL làm bài và làm bài trên hệ thống thi.
- **Giáo viên**: vào “Bài thi cần chấm của tôi”, chấm/điều chỉnh điểm.

---

### Luồng tổng quan (1 sơ đồ)

```mermaid
flowchart TD
    A[Admin: Quản lý Campaign] --> A1[Tạo Campaign]
    A1 --> A2[Gán người dùng vào Campaign]

    B[Admin/Vận hành: Quản lý Exam] --> B1[Tạo Exam CMS]
    B1 --> B2[Gắn mã đề EMS cho Exam]

    C[Admin/Vận hành: Mapping Exam] --> C1[Chọn Campaign]
    C1 --> C2[Chọn Exam]
    C2 --> C3[Hệ thống sinh URL làm bài]

    D[Học sinh] --> D1[Truy cập URL làm bài]
    D1 --> D2[Làm bài và nộp bài]
    D2 --> E[Hệ thống ghi nhận kết quả]

    F[Vận hành: Danh sách học sinh làm bài] --> F1[Xem danh sách và lọc]
    F1 --> F2[Gán giáo viên chấm]

    G[Giáo viên: Bài thi cần chấm của tôi] --> G1[Xem danh sách bài được giao]
    G1 --> G2[Mở chi tiết bài]
    G2 --> G3[Chấm điểm hoặc điều chỉnh điểm]
    G3 --> H[Hoàn tất chấm và cập nhật kết quả]
```

---

### Luồng chi tiết theo từng bước

#### Bước 1 — Admin tạo Campaign và gán người dùng
- **Màn hình**: `Quản lý Campaign`
- **Kết quả**:
  - Có Campaign mới (tên, mã, thời gian nếu có)
  - Người dùng được gán vào Campaign để làm việc theo Campaign đó

#### Bước 2 — User tạo Exam
- **Màn hình**: `Quản lý Exam`
- **Mục tiêu**: tạo “Exam nội bộ” dùng trong vận hành
- **Thông tin tối thiểu**:
  - Tên exam
  - Mã đề trên hệ thống thi (EMS) để liên kết đề thi gốc

#### Bước 3 — Admin mapping Exam vào Campaign để sinh URL làm bài
- **Màn hình**: `Mapping Exam`
- **Thao tác**:
  - Chọn Campaign
  - Chọn Exam
  - Lưu mapping
- **Kết quả**: hệ thống tạo **URL làm bài** cho Campaign + Exam

#### Bước 4 — Học sinh truy cập URL và làm bài
- **Người dùng**: Học sinh
- **Thao tác**:
  - Mở URL làm bài
  - Làm bài, lưu bài, nộp bài
- **Kết quả**: hệ thống ghi nhận lịch sử làm bài và điểm (nếu có chấm tự động)

#### Bước 5 — Vận hành xem danh sách học sinh làm bài và gán giáo viên chấm
- **Màn hình**: `Danh sách học sinh làm bài`
- **Thao tác**:
  - Lọc theo Exam, Campaign, thời gian, trạng thái hoàn thành
  - Chọn bài thi cần chấm
  - Gán giáo viên chấm cho bài thi
- **Kết quả**: bài thi được chuyển vào danh sách “cần chấm” của giáo viên

#### Bước 6 — Giáo viên vào “Bài thi cần chấm của tôi” và chấm điểm
- **Màn hình**: `Bài thi cần chấm của tôi`
- **Thao tác**:
  - Xem danh sách bài được giao
  - Mở chi tiết bài
  - Chấm điểm hoặc điều chỉnh điểm
  - Lưu kết quả
- **Kết quả**: cập nhật điểm cuối cùng và trạng thái chấm

---

### Luồng tương tác (Sequence)

```mermaid
sequenceDiagram
    participant Admin as Admin
    participant Ops as Van hanh
    participant Teacher as Giao vien
    participant Student as Hoc sinh
    participant Sys as He thong

    Admin->>Sys: Tao Campaign
    Admin->>Sys: Gan user vao Campaign
    Admin->>Sys: Tao Exam noi bo va gan ma de EMS
    Admin->>Sys: Mapping Exam vao Campaign
    Sys-->>Admin: Tra ve URL lam bai

    Student->>Sys: Truy cap URL lam bai
    Student->>Sys: Lam bai va nop bai
    Sys-->>Sys: Ghi nhan ket qua va lich su lam bai

    Ops->>Sys: Mo Danh sach hoc sinh lam bai
    Ops->>Sys: Loc va gan giao vien cham
    Sys-->>Teacher: Bai thi xuat hien trong danh sach can cham

    Teacher->>Sys: Mo Bai thi can cham cua toi
    Teacher->>Sys: Cham diem va luu
    Sys-->>Ops: Ket qua cap nhat trong danh sach
```

