## Sơ đồ theo từng tính năng (góc nhìn người dùng)

### 1. Quản lý Campaigns thi (Campaigns)

```mermaid
sequenceDiagram
    participant QTV as Admin
    participant Trang as Màn hình quản lý Campaigns
    participant HeThong as Hệ thống lưu trữ dữ liệu Campaigns

    QTV->>Trang: Mở danh sách Campaigns
    Trang->>HeThong: Lấy danh sách Campaigns hiện có
    HeThong-->>Trang: Trả về danh sách (tên, mã, thời gian, trạng thái)
    Trang-->>QTV: Hiển thị bảng Campaigns

    QTV->>Trang: Bấm "Tạo Campaigns mới"
    Trang-->>QTV: Hiển thị form nhập thông tin (tên, thời gian, mô tả...)
    QTV->>Trang: Nhập thông tin và lưu
    Trang->>HeThong: Gửi thông tin Campaigns mới
    HeThong-->>Trang: Xác nhận tạo thành công
    Trang-->>QTV: Thông báo thành công, quay lại danh sách
```

---

### 2. Quản lý đề thi (Exams)

```mermaid
sequenceDiagram
    participant QTV as Admin
    participant Trang as Màn hình quản lý Exam
    participant HeThong as Hệ thống quản lý (CMS)
    participant ThiOnline as Hệ thống thi trực tuyến (EMS)

    QTV->>Trang: Mở màn hình quản lý Exam
    Trang->>HeThong: Lấy danh sách Exam (CMS)
    HeThong-->>Trang: Trả về danh sách Exam (tên, mã đề EMS, trạng thái)
    Trang-->>QTV: Hiển thị bảng Exam

    alt Tạo Exam (CMS)
        QTV->>Trang: Bấm "Tạo Exam mới"
        Trang-->>QTV: Hiển thị form (tên đề, mã đề trên hệ thống thi EMS, cấu hình cơ bản)
        QTV->>Trang: Nhập thông tin và lưu
        Trang->>HeThong: Lưu Exam (CMS) và gắn mã đề EMS
        HeThong-->>Trang: Xác nhận lưu thành công
        Trang-->>QTV: Thông báo thành công, quay lại danh sách
    else Chọn đề từ hệ thống thi (EMS)
        QTV->>Trang: Bấm "Chọn EMS Exam"
        Trang->>ThiOnline: Lấy danh sách Exam EMS (có tìm kiếm / phân trang)
        ThiOnline-->>Trang: Trả về danh sách Exam EMS
        Trang-->>QTV: Hiển thị danh sách EMS để chọn
        QTV->>Trang: Chọn 1 Exam EMS
        Trang-->>QTV: Tự điền mã đề EMS vào form Exam
        QTV->>Trang: Bấm lưu
        Trang->>HeThong: Lưu Exam (CMS) với mã đề EMS đã chọn
        HeThong-->>Trang: Xác nhận lưu thành công
        Trang-->>QTV: Thông báo thành công
    end

    QTV->>Trang: Sửa thông tin Exam (nếu cần)
    Trang->>HeThong: Cập nhật Exam (CMS)
    HeThong-->>Trang: Xác nhận cập nhật thành công
    Trang-->>QTV: Hiển thị thông tin mới
```

---

### 3. Ghép Exam vào Campaigns (Exam Mapping)

```mermaid
sequenceDiagram
    participant QTV as Admin/Vận hành
    participant Trang as Màn hình Mapping Exam
    participant HeThong as Hệ thống quản lý Campaigns & Exam

    QTV->>Trang: Mở màn hình Mapping Exam
    Trang->>HeThong: Lấy danh sách Campaigns, Exam, Domain
    HeThong-->>Trang: Trả về dữ liệu
    Trang-->>QTV: Hiển thị dạng bảng: mỗi dòng là 1 Campaigns / Domain, cột là Exam

    QTV->>Trang: Chọn Exam cho một Campaigns
    Trang->>HeThong: Gửi yêu cầu ghép (Campaigns, Exam, Domain)
    HeThong-->>Trang: Lưu thông tin Mapping Exam (bao gồm cách hiển thị kết quả, kiểu chấm điểm)
    Trang-->>QTV: Cập nhật lại bảng Mapping Exam

    QTV->>Trang: Điều chỉnh "hiển thị kết quả" hoặc "kiểu chấm điểm"
    Trang->>HeThong: Cập nhật cấu hình cho dòng đó
    HeThong-->>Trang: Xác nhận thành công
    Trang-->>QTV: Hiển thị trạng thái mới
```

---

### 4. Quản lý danh sách làm bài của Học viên

```mermaid
sequenceDiagram
    participant NguoiXem as Admin/Vận Hành/Giáo viên
    participant Trang as Màn hình "Danh sách học sinh làm bài"
    participant HeThong as Hệ thống lưu lịch sử (StudentScore + lịch sử thi)

    NguoiXem->>Trang: Mở màn hình danh sách học sinh làm bài
    Trang->>HeThong: Kiểm tra quyền và Campaigns hiện tại
    alt Người xem là Admin
        HeThong-->>Trang: Cho phép xem tất cả Campaigns, hiển thị bộ lọc đầy đủ
    else Người xem không phải Admin
        HeThong-->>Trang: Giới hạn dữ liệu theo Campaign đang chọn trên header<br/>(ẩn/select Campaign trong bộ lọc)
    end

    Trang-->>NguoiXem: Hiển thị bộ lọc (đề thi, Campaign, trạng thái hoàn thành, loại chấm điểm, thời gian...)

    NguoiXem->>Trang: Chọn điều kiện lọc và bấm "Lọc"
    Trang->>HeThong: Gửi điều kiện lọc (kèm Campaign đã được giới hạn nếu không phải Admin)
    HeThong-->>Trang: Trả về danh sách bản ghi (học viên, đề thi, Campaign, URL kết quả, trạng thái, người chấm...)
    Trang-->>NguoiXem: Hiển thị bảng danh sách làm bài (có phân trang)

    NguoiXem->>Trang: Bấm "Xuất Excel"
    Trang->>HeThong: Yêu cầu xuất báo cáo theo cùng điều kiện lọc hiện tại
    HeThong-->>NguoiXem: Trả về file Excel danh sách học sinh làm bài
```

---

### 5. Giáo viên chấm lại / điều chỉnh điểm (Assessment & Rescore)

```mermaid
sequenceDiagram
    participant GV as Giáo viên
    participant DanhSach as Màn hình "Bài cần chấm"
    participant ChiTiet as Màn hình chi tiết bài thi
    participant HeThong as Hệ thống lưu kết quả

    GV->>DanhSach: Mở danh sách bài cần chấm
    DanhSach->>HeThong: Lấy danh sách bài thi được giao cho giáo viên
    HeThong-->>DanhSach: Trả về danh sách (học viên, kỳ thi, trạng thái)
    DanhSach-->>GV: Hiển thị bảng bài cần chấm

    GV->>ChiTiet: Chọn một bài để xem chi tiết
    ChiTiet->>HeThong: Lấy dữ liệu từng phần thi (nghe, nói, đọc, viết...)
    HeThong-->>ChiTiet: Trả về nội dung và điểm hiện tại
    ChiTiet-->>GV: Hiển thị đáp án, ghi chú, điểm

    GV->>ChiTiet: Sửa điểm / thêm nhận xét
    ChiTiet->>HeThong: Gửi điểm mới và nhận xét
    HeThong-->>ChiTiet: Cập nhật tổng điểm cho bài thi
    ChiTiet-->>GV: Thông báo lưu thành công, hiển thị điểm sau khi điều chỉnh
```

---

### 6. Theo dõi nguồn khách và Campaigns marketing (Tracking)

```mermaid
sequenceDiagram
    participant CSKH as Admin/Vận hành
    participant Trang as Màn hình tracking
    participant HeThong as Hệ thống lưu thông tin UTM

    CSKH->>Trang: Mở màn hình tracking
    Trang->>CSKH: Hiển thị bộ lọc (thời gian, Campaigns, Term, Source, Medium, số điện thoại...)
    CSKH->>Trang: Chọn điều kiện lọc
    Trang->>HeThong: Lấy danh sách khách theo điều kiện
    HeThong-->>Trang: Trả về danh sách (tên, số điện thoại, Campaigns, Campaigns, Term, Source, Medium)
    Trang-->>CSKH: Hiển thị bảng dữ liệu

    CSKH->>Trang: Bấm "Xuất báo cáo"
    Trang->>HeThong: Yêu cầu tạo file
    HeThong-->>Trang: Trả về file báo cáo
    Trang-->>CSKH: Tải file về máy
```

---

### 7. Chọn / đổi Campaigns làm việc (Campaign Switcher & Gán Campaign)

```mermaid
sequenceDiagram
    participant Admin as Admin
    participant NV as Người dùng thường (NV)
    participant Header as Thanh header (chọn Campaigns)
    participant HeThong as Hệ thống LMS
    participant ChoCho as Màn hình chờ gán Campaigns

    Admin->>HeThong: Gán người dùng vào 1 hoặc nhiều Campaigns
    HeThong-->>Admin: Lưu danh sách campaign được gán cho từng người

    NV->>HeThong: Đăng nhập
    HeThong->>HeThong: Kiểm tra campaign đã gán cho NV
    alt Có ít nhất 1 campaign
        HeThong-->>Header: Tự chọn Campaigns đầu tiên làm Campaigns hiện tại
        Header-->>NV: Hiển thị tên Campaigns đang chọn trên header
    else Không có campaign nào
        HeThong-->>ChoCho: Điều hướng tới màn hình “Tài khoản đang chờ gán Campaigns”
        ChoCho-->>NV: Hiển thị hướng dẫn liên hệ admin
    end

    NV->>Header: Mở danh sách Campaigns trên header
    alt NV là Admin
        Header->>HeThong: Yêu cầu danh sách tất cả Campaigns
        HeThong-->>Header: Trả về toàn bộ campaign
    else NV không phải Admin
        Header->>HeThong: Yêu cầu danh sách Campaigns được gán cho NV
        HeThong-->>Header: Trả về đúng các campaign đã được gán
    end
    Header-->>NV: Hiển thị danh sách campaign để chọn

    NV->>Header: Chọn 1 campaign khác
    Header->>HeThong: Gửi yêu cầu đổi Campaigns hiện tại
    HeThong-->>Header: Lưu vào phiên làm việc (session) Campaigns mới
    Header-->>NV: Cập nhật lại tên Campaigns trên header và tải lại trang với dữ liệu theo campaign mới
```

