# Phân Hệ Quản Lý Phúc Khảo (Web Exam Regrading)
## 05. Kịch Bản Kiểm Thử & Ma Trận Nghiệm Thu (Test Cases & QA Acceptance)

> **Mục tiêu**: Cung cấp tài liệu kiểm thử chi tiết chức năng giao diện người dùng (UI/UX) và luồng nghiệp vụ thẩm định, chấm phúc khảo lần 2 (`assign_type = 2`) dành cho Đội ngũ QA/QC Tester, Cán bộ Kiểm định chất lượng và Quản lý Vận hành.

---

## 📋 1. Ma Trận Bao Phủ Kiểm Thử (Test Coverage Matrix)

| Nhóm Chức Năng | Số Lượng Test Cases | Mức Độ Ưu Tiên | Phạm Vi Kiểm Thử Giao Diện |
| :--- | :---: | :---: | :--- |
| **1. Tra cứu & Bộ lọc đơn phúc khảo** | 4 | P0, P1 | Lọc trạng thái (Chờ thẩm định, Đang chấm PK, Đã hoàn tất), Khóa học, Học viên |
| **2. Cơ chế chấm độc lập Unbiased (Điểm Raw)** | 4 | P0 | Ẩn điểm & nhận xét của GV1 trên modal của QA, Reset form về thang điểm gốc |
| **3. Bảng đối soát Trước PK vs Sau PK** | 4 | P0, P1 | Hiển thị điểm `scoreBeforePk` vs `scoreAfterPk`, Tính toán chênh lệch (+ / - band) |
| **4. Thẩm định vi phạm & Cheating Reports** | 3 | P1, P2 | Modal xem bằng chứng gian lận, Lịch sử chuyển tab, Ảnh chụp vi phạm |
| **5. Phê duyệt & Chốt điểm chính thức** | 4 | P0, P1 | Nút Duyệt kết quả phúc khảo, Ghi nhận lý do hội đồng, Đẩy điểm sang hệ thống ICL |
| **6. Kịch bản Ranh giới & Ngoại lệ** | 5 | P0, P1 | Chênh lệch điểm quá lớn (>1.5 band), Phúc khảo lần 2 cho bài đã chốt, Đồng bộ lỗi |

---

## 🧪 2. Chi Tiết Kịch Bản Kiểm Thử (Test Cases Specification)

### 2.1. Tra Cứu & Bộ Lọc Đơn Phúc Khảo (Search & Filter)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_ER_001** | Tìm kiếm đơn phúc khảo theo Tên hoặc Mã học viên | Đang ở trang Quản lý phúc khảo | 1. Nhập Mã học viên vào ô tìm kiếm.<br>2. Nhấn nút Tìm kiếm. | Bảng lọc chính xác các bài thi có yêu cầu phúc khảo của đúng học viên đó. | **P0** |
| **TC_ER_002** | Lọc danh sách theo Trạng thái phúc khảo | Có đơn ở nhiều trạng thái | 1. Chọn dropdown **Trạng thái** = `Chờ phúc khảo`.<br>2. Nhấn Lọc.<br>3. Chuyển sang `Đã duyệt phúc khảo`. | Hiển thị đúng danh sách theo từng trạng thái. Badge màu sắc phân biệt rõ ràng: Vàng (`Chờ chấm`), Xanh lá (`Đã duyệt`). | **P0** |
| **TC_ER_003** | Lọc theo Kỹ năng phúc khảo (Writing / Speaking) | Có cả đơn phúc khảo Viết và Nói | 1. Chọn bộ lọc Kỹ năng = `Speaking`.<br>2. Nhấn Lọc. | Danh sách chỉ hiển thị các đơn yêu cầu chấm lại kỹ năng Speaking. | **P1** |
| **TC_ER_004** | Lọc đơn phúc khảo theo Khoảng thời gian nộp đơn | Có dữ liệu phúc khảo | 1. Chọn Ngày bắt đầu và Ngày kết thúc đợt phúc khảo.<br>2. Nhấn Lọc. | Danh sách hiển thị chính xác các đơn được tiếp nhận trong khung thời gian đã chọn. | **P1** |

---

### 2.2. Cơ Chế Chấm Độc Lập Khách Quan (Unbiased Grading Check)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_ER_005** | Ẩn điểm số và nhận xét của Giáo viên lần 1 khi QA chấm | Bài thi có `assign_type = 2` | 1. Cán bộ QA nhấp nút **Chấm phúc khảo**.<br>2. Quan sát giao diện chấm Rubric mở ra. | Các ô điểm tiêu chí và ô nhận xét hoàn toàn trống (Reset về Raw). QA **KHÔNG** nhìn thấy điểm số và feedback của GV1 để tránh định kiến tâm lý. | **P0** |
| **TC_ER_006** | Hiển thị nguyên vẹn bài làm gốc của thí sinh | Đang trong Modal chấm phúc khảo | 1. Kiểm tra nội dung bài viết Task 1, Task 2 hoặc audio Speaking. | Toàn bộ bài làm nguyên bản của học viên được hiển thị đầy đủ, không bị thiếu sót nội dung so với lần thi gốc. | **P0** |
| **TC_ER_007** | Nhập điểm và nhận xét của lượt phúc khảo | Đang trong Modal chấm | 1. Chọn điểm cho 4 tiêu chí theo nhận định độc lập của QA.<br>2. Nhập nhận xét chuyên môn.<br>3. Nhấn **Lưu kết quả phúc khảo**. | Hệ thống ghi nhận điểm của QA độc lập, không ghi đè trực tiếp lên lịch sử chấm của GV1 mà lưu vào bản ghi phúc khảo riêng biệt. | **P0** |

---

### 2.3. Bảng Đối Soát Điểm Trước Phúc Khảo vs Sau Phúc Khảo

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_ER_008** | Hiển thị song song Điểm Trước PK (`scoreBeforePk`) và Điểm Sau PK (`scoreAfterPk`) | QA đã chấm xong bài phúc khảo | 1. Quan sát dòng bài thi trên bảng danh sách Quản lý phúc khảo. | Cột **Điểm Trước PK** hiển thị điểm GV1 (ví dụ: `5.5`). Cột **Điểm Sau PK** hiển thị điểm QA vừa chấm (ví dụ: `6.5`). | **P0** |
| **TC_ER_009** | Tính toán tự động mức độ chênh lệch điểm (Delta Score) | Điểm cũ 6.0, Điểm mới 6.5 | 1. Quan sát cột **Chênh lệch**. | Hiển thị badge màu xanh lá: `+0.5` band. Nếu điểm giảm hiển thị màu đỏ: `-0.5` band. Nếu điểm giữ nguyên hiển thị `0.0`. | **P0** |
| **TC_ER_010** | Cảnh báo khi chênh lệch điểm vượt ngưỡng quy định (>= 1.0 band) | Điểm cũ 5.0, Điểm mới 6.5 (chênh 1.5 band) | 1. Quan sát dòng có độ lệch >= 1.0 band. | Cột Chênh lệch hiển thị viền đỏ nhấp nháy hoặc icon Cảnh báo: *"Độ lệch lớn, yêu cầu họp Hội đồng phúc khảo thẩm định"*. | **P1** |

---

### 2.4. Báo Cáo Vi Phạm & Gian Lận (Cheating Reports)

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_ER_011** | Mở bảng đối soát vi phạm gian lận trong phiên phúc khảo | Bài thi có ghi nhận nhật ký gian lận | 1. Nhấp vào nút **Báo cáo vi phạm** (icon Khiên bảo mật).<br>2. Xem danh sách chi tiết các sự kiện. | Modal hiển thị danh sách các lần học viên thoát màn hình, dán văn bản kèm mốc thời gian chính xác từng giây. | **P1** |
| **TC_ER_012** | Xem ảnh chụp webcam giám sát (nếu có) | Hệ thống có chụp ảnh định kỳ | 1. Nhấp Tab **Ảnh giám sát** trong modal vi phạm. | Hiển thị lưới hình ảnh chụp khuôn mặt thí sinh trong lúc thi để kiểm tra người thi hộ. | **P2** |

---

### 2.5. Phê Duyệt & Chốt Điểm Phúc Khảo Chính Thức

| Mã TC | Tên Kịch Bản | Tiền Điều Kiện | Các Bước Thực Hiện Trên UI | Kết Quả Mong Đợi | Mức Độ |
| :--- | :--- | :--- | :--- | :--- | :---: |
| **TC_ER_013** | Phê duyệt chốt điểm phúc khảo thành công | Bài thi đã có đủ điểm Trước PK và Sau PK | 1. Nhấp nút **Duyệt điểm phúc khảo**.<br>2. Nhập kết luận của Hội đồng: *"Đồng ý nâng điểm từ 6.0 lên 6.5 theo kết quả của QA"*. Nhấn Xác nhận. | 1. Toast thông báo: *"Duyệt kết quả phúc khảo thành công!"*.<br>2. Trạng thái chuyển thành `Đã chốt điểm`.<br>3. Điểm số chính thức của học viên trên sổ điểm được cập nhật sang điểm mới. | **P0** |
| **TC_ER_014** | Giữ nguyên điểm cũ (Bác bỏ yêu cầu nâng điểm) | QA chấm điểm bằng hoặc thấp hơn điểm cũ | 1. Nhấp nút **Duyệt kết luận**.<br>2. Chọn quyết định: *"Giữ nguyên điểm số ban đầu"*. Nhập lý do và bấm Xác nhận. | Hệ thống bảo lưu điểm cũ của học viên, ghi nhận trạng thái: `Phúc khảo: Giữ nguyên kết quả`. | **P1** |
| **TC_ER_015** | Kiểm tra quyền phê duyệt (Chỉ Admin/Trưởng hội đồng) | Tài khoản Giáo viên thông thường | 1. Thử truy cập nút Phê duyệt điểm phúc khảo. | Nút Phê duyệt bị ẩn hoặc disabled, chỉ tài khoản có quyền Quản lý phúc khảo mới thực hiện được. | **P0** |

---

## 🛑 3. Kịch Bản Kiểm Thử Ranh Giới & Ngoại Lệ (Edge Cases)

```mermaid
graph TD
    Case1["Học viên xin phúc khảo cả 2 kỹ năng Writing & Speaking"]
    Case2["Điểm sau phúc khảo bị giảm so với điểm ban đầu"]
    Case3["Mất kết nối mạng lúc bấm 'Duyệt chốt điểm'"]

    Case1 --> Res1["Hệ thống tạo 2 bản ghi độc lập, QA chấm từng kỹ năng riêng biệt"]
    Case2 --> Res2["Theo quy chế đào tạo: Điểm chốt lấy theo kết luận của Hội đồng"]
    Case3 --> Res3["Giao diện hiển thị trạng thái đang thử lại, không tạo bản ghi duplicate"]
```

1. **Học viên khiếu nại lần 2 sau khi đã có kết quả phúc khảo**:
   - Hệ thống chặn tự động tạo lượt phúc khảo lần 3 (`assign_type = 3`) trừ khi có phê duyệt đặc biệt của Ban Giám đốc Đào tạo.
2. **Hội đồng phúc khảo quyết định hủy bài do phát hiện bằng chứng gian lận không thể chối cãi**:
   - Khi chọn thao tác "Hủy kết quả do gian lận", hệ thống tự động reset điểm về 0, chuyển trạng thái bài thi thành `Bị hủy do gian lận` và gửi thông báo cảnh cáo đến học viên.
