Chấm lại bài nộp luyện tập và cuộc thi

Khi đáp án hoặc bộ chấm bị sai, giảng viên sửa bộ chấm rồi chấm lại các bài nộp đã có. Không cần học viên nộp lại, thời gian nộp giữ nguyên, bảng xếp hạng tự đúng lại.

SP-793 · 5 Oct 2026

Status as of 5 Oct 2026

Stage
Open PR. Chưa merge, chưa có trên beta, chưa có trong production tag.
PR
#536 backend (endpoint, migration thêm cột rejudged_at), giao diện trang Bài nộp, và hai bản sửa sau review: chấm lại cả bài bị kẹt, và ô chọn tự động làm mới không còn bị cắt chữ.
Ticket
SP-793
Screenshots
All screenshots and the video come from a local stack with mock data. The names and numbers are not real. Chưa có ai kiểm tra trên beta.

Vì sao cần tính năng này

Trước đây, điểm của một bài nộp được chấm một lần rồi giữ nguyên. Nếu giảng viên tải lên file đáp án sai, hoặc máy chấm gặp sự cố, thì điểm sai nằm lại trên bảng xếp hạng. Cách duy nhất là nhờ học viên nộp lại, hoặc sửa tay trong database. Với cuộc thi, bảng xếp hạng đã chốt cũng không tự tính lại. Tính năng này cho giảng viên chấm lại bằng bộ chấm hiện tại, ngay trên trang Bài nộp.

Thay đổi trong một hình

Bước 1

Phát hiện điểm sai

Bảng xếp hạng lạ, hoặc có bài báo lỗi bộ chấm.

Bước 2

Sửa bộ chấm

Tải lên file đáp án đúng hoặc sửa cấu hình chấm.

Bước 3

Chấm lại

Một dòng, các dòng đã chọn, hoặc tất cả.

Bước 4

Điểm và hạng đúng lại

Bảng xếp hạng luyện tập và cuộc thi tự cập nhật.

Video demo

Gần 3 phút, có giọng đọc tiếng Anh và phụ đề tiếng Việt. Chấm tròn xanh là con trỏ chuột.

Trong video

  1. Trước khi sửa: trang Bài nộp có 13 bài, một bài báo "Lỗi bộ chấm". Bảng xếp hạng để Bao đứng đầu, Minh đứng cuối. Bảng xếp hạng cuộc thi để Lan đứng đầu với 100 điểm.
  2. Giảng viên tải lên file đáp án đúng. Điểm cũ chưa đổi.
  3. Chấm lại một dòng (Minh): hộp thoại, thông báo "Đã đưa 1 ..., bỏ qua 0", dòng chuyển sang chờ chấm, rồi có điểm 1.000000 và dòng "Chấm lại lúc ...".
  4. Chọn 3 dòng và bấm "Chấm lại bài đã chọn": 3 bài vào hàng chờ.
  5. "Chấm lại tất cả": bật thử ô "Chỉ bài nộp bị lỗi", rồi tắt và chấm lại tất cả. Thông báo "Đã đưa 10 ..., bỏ qua 3": 3 bài vừa chọn vẫn đang chờ nên bị bỏ qua.
  6. Bảng xếp hạng cuộc thi hiện "Kết quả đang được tính", rồi chốt lại: Khanh 100, Mai 85, Nam 65, Lan 20.
  7. Bảng xếp hạng luyện tập đúng lại: Minh đứng đầu, Bao đứng cuối. Thời gian nộp không đổi.
  8. Sau hai lần chấm lại nhiều dòng, hộp thoại còn mở vài giây sau thông báo. Đây là lỗi chỉ xảy ra ở môi trường local (xem phần Giới hạn đã biết).

Cách dùng

  1. Xem trang Bài nộp và Bảng xếp hạng

    Mở bài tập, tab Bài nộp. Chọn "Tất cả bài nộp" để thấy cả bài nộp trong cuộc thi. Bài có chữ đỏ "Lỗi bộ chấm" là bài máy chấm không chấm được.

    Trang Bài nộp trước khi sửa: 13 bài, điểm thấp, Dung Vu báo Lỗi bộ chấm
    Trước khi sửa. Điểm của bài làm tốt rất thấp (Minh 0.200000), Bao 1.000000, Dung Vu báo Lỗi bộ chấm. Click to open full size.
    Bảng xếp hạng trước khi sửa: Bao Pham đứng đầu với 1.000000, Minh Nguyen cuối với 0.200000
    Bảng xếp hạng trước khi sửa: Bao 1.000000 đứng đầu, Minh 0.200000 đứng cuối. File đáp án bị lệch một dòng, bài của Bao cũng lệch đúng một dòng nên được điểm tối đa.
  2. Sửa nguyên nhân trước

    Tab Chi tiết, phần "Tệp đầu vào & đáp án": bấm Thay thế tệp ở dòng Tệp đáp án, hoặc sửa cách chấm. Chấm lại chỉ có ích khi bộ chấm đã đúng. Tải đáp án mới không tự đổi điểm cũ.

    Phần Tệp đầu vào và đáp án, Tệp đáp án đã tải lên, cùng phần Chấm điểm tự động
    Đã tải lên file đáp án đúng. Cách chấm: So sánh CSV cơ bản.
  3. Chấm lại một dòng

    Trong cột Hành động, bấm biểu tượng mũi tên vòng của dòng đó, rồi bấm Chấm lại. Dòng chuyển sang "Đang chờ chấm", điểm cũ bị xóa. Khi chấm xong, dòng có điểm mới và ghi "Chấm lại lúc ...".

    Hộp thoại Chấm lại bài nộp? cho 1 bài nộp
    Hộp thoại giải thích: điểm cũ bị xóa đến khi có kết quả mới.
    Thông báo Đã đưa 1 bài nộp vào hàng chờ chấm lại, bỏ qua 0
    Thông báo cho biết số bài vào hàng chờ và số bài bị bỏ qua.
    Dòng Minh Nguyen sau khi chấm lại: 1.000000 và dòng Chấm lại lúc
    Minh sau khi chấm lại: 1.000000. Thời gian nộp giữ nguyên, bên dưới có thêm “Chấm lại lúc ...”.
  4. Chấm lại nhiều dòng

    Tích chọn các dòng, rồi bấm Chấm lại bài đã chọn trên thanh thao tác.

    Thông báo Đã đưa 3 bài nộp vào hàng chờ chấm lại, bỏ qua 0
    3 dòng đã chọn vào hàng chờ.
  5. Chấm lại tất cả

    Bấm Chấm lại tất cả. Thao tác này gồm cả bài nộp trong cuộc thi và sandbox. Tích Chỉ bài nộp bị lỗi nếu chỉ muốn chấm lại các bài báo lỗi bộ chấm, ví dụ sau khi máy chấm bị sập.

    Hộp thoại Chấm lại tất cả bài nộp? với ô Chỉ bài nộp bị lỗi đã tích
    Hộp thoại Chấm lại tất cả, ô “Chỉ bài nộp bị lỗi” đang tích.
    Thông báo Đã đưa 10 bài nộp vào hàng chờ chấm lại, bỏ qua 3
    Chấm lại tất cả (không tích ô lỗi): 10 bài vào hàng chờ, 3 bài bỏ qua vì vừa được chọn chấm lại và còn đang chờ.
  6. Đợi chấm xong và kiểm tra

    Trang Bài nộp tự làm mới mỗi 30 giây sau khi chấm lại. Khi mọi dòng đã có điểm, mở tab Bảng xếp hạng.

    Trang Bài nộp sau khi chấm lại: mọi dòng có điểm và dòng Chấm lại lúc, Dung Vu 0.700000
    Sau khi chấm lại: mọi dòng có điểm mới, Dung Vu có 0.700000 thay vì lỗi. Click to open full size.

Trước và sau

Bảng xếp hạng luyện tập

Bảng xếp hạng trước: Bao đầu, Minh cuối
Trước: Bao 1.000000, Giang 0.350000, ... Minh 0.200000. 7 người được xếp hạng, Dung vắng vì lỗi bộ chấm.
Bảng xếp hạng sau: Minh 1.0 đầu, Bao 0.2 cuối
Sau: Minh 1.000000, Linh 0.950000, An 0.900000, Chi 0.800000, Dung 0.700000, Giang 0.600000, Hanh 0.500000, Bao 0.200000. 8 người. Thời gian nộp như cũ.

Bảng xếp hạng cuộc thi

Bảng xếp hạng cuộc thi trước: Lan 100.00 đứng đầu
Trước: Lan 100.00, Mai 30.00, Khanh 20.00, Nam 20.00.
Bảng xếp hạng cuộc thi sau: Khanh 100.00 đứng đầu
Sau: Khanh 100.00, Mai 85.00, Nam 65.00, Lan 20.00.
Bảng xếp hạng cuộc thi khi đang chấm: Kết quả đang được tính, chưa có kết quả
Trong lúc chấm: “Kết quả đang được tính”. Bài đang chờ không được tính, nên lúc này bảng trống.

Quy tắc khi chấm lại

Quy tắcÝ nghĩa
Dùng bộ chấm hiện tạiMỗi bài chấm lại lấy file đáp án, cách chấm và giới hạn thời gian hiện tại của bài tập, không dùng cấu hình lúc học viên nộp.
Giữ thời gian nộpThời gian nộp không đổi. Khi bằng điểm, bài nộp sớm hơn vẫn xếp trên. Dòng "Chấm lại lúc" ghi lần chấm lại gần nhất.
Không đụng giới hạn nộp bàiChấm lại không tạo bài nộp mới, nên không tính vào giới hạn 30 giây giữa hai lần nộp của học viên.
Xóa điểm cũ khi đang chờBài đang chờ có điểm public 0 và không có điểm private, nên không xếp hạng bằng điểm cũ.
Bài bị kẹt được chấm lạiBài "Đang chờ chấm" hoặc "Đang chấm" quá 15 phút không có động tĩnh (máy chấm chết giữa chừng, tác vụ trong hàng đợi bị mất) được đưa lại vào hàng chờ.
Bài đang chấm thật thì bỏ quaBài đang được máy chấm giữ, hoặc vừa vào hàng chờ trong 15 phút, bị bỏ qua và được đếm trong số "bỏ qua".
Bài không còn fileBài không còn file nộp bị bỏ qua.
Tối đa 500 bài mỗi lầnMỗi lần bấm chấm lại tối đa 500 bài. Nếu còn, thông báo ghi số bài còn lại; bấm "Chấm lại tất cả" lần nữa để chấm tiếp. Bài chưa từng chấm lại được ưu tiên.
QuyềnChủ bài tập hoặc tenant admin. Chỉ trong tenant hiện tại.

Bảng xếp hạng cuộc thi

Vì sao tin được

Kiểm tra bằng tay. File đáp án sai lệch một dòng. Bài của Minh đúng cả 20 dòng so với đáp án đúng, nhưng chỉ 4 dòng trùng với file lệch, nên trước khi sửa Minh có 4/20 = 0.20. Sau khi chấm lại Minh có 20/20 = 1.00. Bài của Bao lệch đúng một dòng như file sai, nên ngược lại: 1.00 trước, 0.20 sau.

Giới hạn đã biết

Rollout checklist

  1. Review và merge PR #536.
  2. Migration thêm cột rejudged_at (cho phép rỗng) vào bảng bài nộp. Tương thích ngược với bản app trước.
  3. Không có cấu hình hay tác vụ định kỳ mới. Chấm lại dùng hàng đợi Cloud Tasks hiện có của máy chấm.
  4. Trên beta: mở một bài tập có bài nộp, đổi file đáp án, chấm lại một dòng, chấm lại tất cả, xem bảng xếp hạng và một cuộc thi dùng bài đó.
  5. Move SP-793 to Testing after beta, and to Done once it is in a production tag.