Trường Số PRD/13 Điểm thi
Trường Số · Yêu cầu sản phẩm · 09/2026

PRD 13 · Điểm thi và kết quả học tập

Kỳ đánh giá ở cấp trung tâm cho từng lớp hoặc từng trình độ, cấu trúc điểm theo kỹ năng với trọng số và thang điểm, nhập điểm theo lưới cả lớp hoặc từng học viên kèm nhận xét và tệp đính kèm, quy trình nháp rồi duyệt rồi công bố, thông báo phụ huynh qua Sổ liên lạc, lịch sử sửa điểm, xếp loại, bảng điểm và chứng nhận. Bài kiểm tra trực tuyến của FLYER đã có sẵn và được gắn vào kỳ đánh giá như một nguồn điểm.

Xuất xứ / Prompt / Giới hạn
Trạng thái
Dự thảo v1
Mô-đun phụ trách
Đào tạo
Backend
EXISTING FLYER exams, score-report, placement tests, parent report · EXTEND message templates, school-config · NEW assessment, assessment_score, assessment_comment, report_card, certificate
Giai đoạn
P1 (nhập điểm, thông báo) / P2 (xếp loại, chứng nhận)
Phụ thuộc vào
02 Học viên, 03 Lớp học, 07 Liên lạc với phụ huynh, 09 Báo cáo

Tài liệu do trợ lý AI soạn trong một phiên làm việc ngày 16/09/2026, mở rộng bộ PRD theo yêu cầu gốc được trích nguyên văn ở trang mục lục. Đây là bản đề xuất để đội thảo luận, chưa phải quyết định của đội sản phẩm.

Nguồn

  • Nghiên cứu công khai về đối thủ cạnh tranh (PSE ONE, pse4.one), mã nguồn center-crm-frontend và đặc tả OpenAPI /v3 trên staging (182 endpoint), tính đến ngày 10/09/2026.
  • Nhãn existing / extend / new trong trang được xác định bằng cách đối chiếu với đặc tả /v3 trên staging tại thời điểm trên.
  • Đợt quét thứ hai các nguồn công khai của PSE ONE ngày 16/09/2026 (trang tính năng, bảng phí dịch vụ, mục hướng dẫn sử dụng).
  • Tham chiếu đối thủ cạnh tranh: PSE ONE (pse4.one, khảo sát công khai ngày 16/09/2026) có mô-đun "Quản lý điểm thi" với hai chế độ nhập, cả lớp và từng học viên, đính kèm video, hình ảnh, tài liệu, thông báo phụ huynh qua ứng dụng di động và email; chứng chỉ chỉ được nhắc trong tài liệu tiếp thị. Đặc tả dưới đây là thiết kế riêng của Trường Số, bổ sung bước duyệt, lịch sử điểm và nguồn điểm FLYER.

Giới hạn

  • Cần xác minh khi khảo sát trực tiếp trong ứng dụng, vì đăng nhập tự động vào sản phẩm tham chiếu chưa được cấp phép trong phiên soạn:
    • Cấu trúc điểm của đối thủ: một cột duy nhất hay nhiều cột theo kỹ năng, có trọng số hay không.
    • Có bước duyệt của giáo vụ trước khi điểm đến phụ huynh hay giáo viên gửi trực tiếp; sửa điểm sau khi gửi có ghi lịch sử không.
    • Ứng dụng phụ huynh hiển thị gì trong "kết quả học tập": điểm, nhận xét, xếp loại, thứ hạng.
    • Giới hạn tệp đính kèm; có nhập từ Excel hay phím tắt trên lưới không.
    • "Chứng chỉ" có thật trong sản phẩm hay chỉ là nội dung tiếp thị; nếu có, có mẫu, số hiệu và xác thực không.

Thiết kế đề xuất

Danh sách kỳ đánh giá theo trạng thái, lưới nhập điểm cả lớp làm màn hình trung tâm, ngăn chi tiết học viên và modal duyệt phủ lên lưới, tab Kết quả trên hồ sơ học viên và hai màn hình di động cho phụ huynh và giáo viên. Điều quan trọng nhất: điểm đi qua ba trạng thái nháp, chờ duyệt, đã công bố trước khi đến phụ huynh, và mọi ô lấy từ FLYER được đánh dấu rõ.

1 · Danh sách kỳ đánh giá

/assessments · desktop

Danh sách kỳ đánh giá
Tab Nháp · Chờ duyệt · Đã công bố · Tất cả kèm bộ đếm; bộ lọc chi nhánh, lớp, trình độ, loại, giáo viên và khoảng ngày thi. Mỗi dòng hiển thị tiến độ nhập (11/12), nguồn điểm (Nhập tay · FLYER · Xếp lớp), trạng thái bốn mức kể cả Trả lại, và số thông báo đã gửi trên tổng kèm ghi chú "chưa có kênh" cho phụ huynh không có kênh liên lạc (mục 10). Menu ⋯ mở Mở · Nhân bản · Xuất Excel · Lưu trữ.

2 · Biểu mẫu kỳ đánh giá (drawer)

/assessments/new · desktop

Biểu mẫu tạo kỳ đánh giá
Drawer bên phải giữ danh sách phía sau. Các trường theo SCR-01: tên, loại, phạm vi một lớp hoặc một trình độ, ngày thi, mẫu cấu trúc điểm điền sẵn bảng cấu phần (tên, thang, điểm tối đa, trọng số), tổng trọng số 100 % được xác nhận "Hợp lệ" (quy tắc 2), thang điểm tổng, công tắc Nhận xét bắt buộc và người duyệt tuỳ chọn (quy tắc 4).

3 · Lưới điểm cả lớp

/assessments/:id · desktop

Lưới điểm cả lớp
Một dòng mỗi học viên, một cột mỗi cấu phần với trọng số ở tiêu đề, cột Tổng, Xếp loại (P2) và NX; hàng chân trang ghi đã nhập 11/12, trung bình, cao nhất, thấp nhất. Các trạng thái đang hiển thị: ô đang nhập (Viết của Hoàng Nam Phong), ô sai thang viền đỏ kèm thông báo (Nói 11 của Phạm Khánh Ngọc, SCR-02), ô nguồn FLYER mang dấu F, một dòng Vắng thi và một ô Miễn (quy tắc 2), dòng chưa có nhận xét hiện "Thêm NX".

4 · Ngăn chi tiết học viên

/assessments/:id/students/:studentId · desktop

Ngăn chi tiết học viên
Mở từ cột NX: điểm tổng và xếp loại tính lại ngay, công tắc Dự thi / Vắng thi / Miễn, một ô mỗi cấu phần với ô FLYER ghi rõ nguồn, nhận xét tối đa 1.000 ký tự có nút Gợi ý theo mức điểm, tối đa 5 tệp đính kèm với xem trước và phát video, lịch sử điểm (SCR-03, quy tắc 10). Nút Trước · Sau đi lần lượt qua danh sách lớp.

5 · Modal duyệt và công bố

/assessments/:id/review · desktop

Modal duyệt và công bố
Lưới phía sau ở trạng thái Chờ duyệt: chỉ đọc, ô bất thường tô vàng. Modal tóm tắt số học viên, đã có điểm, vắng thi, miễn, thiếu nhận xét và bốn giá trị bất thường liên kết đến ô (điểm tối đa, chênh lệch trên 3 điểm, vắng thi toàn bộ); xem trước tin phụ huynh theo mẫu assessment_published, số liên hệ theo kênh và một phụ huynh chưa có kênh; công tắc Gửi thông báo ngay; nút Công bố, Trả lại kèm ghi chú, Huỷ (SCR-05, quy tắc 6).

6 · Tab Kết quả trên hồ sơ học viên

/students/:id#results · desktop

Tab Kết quả trên hồ sơ học viên
Bảng các kỳ với từng cấu phần, tổng, xếp loại, nhận xét và tệp; kỳ nháp hiển thị kèm cờ cho nhân sự, kỳ được sửa sau công bố mang nhãn "Đã điều chỉnh" (SCR-06). Biểu đồ đường theo cấu phần qua các kỳ, khối Điểm đầu vào từ kiểm tra xếp lớp, chứng nhận (P2) còn trống và nút Xuất bảng điểm PDF (SCR-07).

7 · Cổng phụ huynh · Kết quả

/parent/results · mobile

8 · Giáo viên nhập điểm trên điện thoại

/assessments/:id/students/:studentId · mobile

Cổng phụ huynh, trang Kết quả
Giáo viên nhập điểm từng học viên trên điện thoại
Bên trái: mỗi kỳ đã công bố là một thẻ với điểm tổng, xếp loại, điểm từng kỹ năng, nhận xét của giáo viên và số tệp; kỳ được sửa sau công bố mang nhãn "Đã điều chỉnh ngày 08/07"; không có thứ hạng (ngoài phạm vi). Bên phải: giáo viên đi lần lượt từng học viên (5/12), chọn Dự thi / Vắng thi / Miễn, nhập từng cấu phần với ô FLYER đánh dấu F, điểm tổng chỉ tính khi đủ cấu phần, nhận xét bắt buộc và tệp đính kèm, rồi Lưu và sang học viên tiếp (SCR-03).

1Mục đích

Bằng chứng tiến bộ mà phụ huynh tin tưởng nhất là điểm của một bài kiểm tra do trung tâm tổ chức, kèm nhận xét của giáo viên đứng lớp. Hiện nay, phần lớn trung tâm giữ điểm trong bảng tính của từng giáo viên và gửi ảnh chụp bảng điểm vào nhóm Zalo; giáo vụ không kiểm tra được trước khi điểm đến tay phụ huynh. Mô-đun này đưa kỳ đánh giá thành một bản ghi vận hành: cấu trúc điểm định nghĩa trước, lưới nhập điểm cả lớp, bước duyệt, thông báo tự động và lịch sử sửa điểm. Kết quả bài kiểm tra trực tuyến trên FLYER được gắn vào kỳ đánh giá như một nguồn điểm thay vì nhập lại.

Trong phạm vi

Ngoài phạm vi

2Hiện trạng

Nền tảng FLYER đã có toàn bộ vòng đời của một bài kiểm tra trực tuyến: tạo kỳ thi, ca thi, thí sinh, báo cáo điểm theo bốn kỹ năng, thông báo. Kết quả kiểm tra xếp lớp đã có từ PRD 01. Điều còn thiếu là bản ghi kỳ đánh giá ở cấp trung tâm, nơi điểm bài thi giấy, bài nói trực tiếp và bài thi FLYER được đặt cạnh nhau, được duyệt và công bố cho phụ huynh.

Năng lực hiện cóEndpointGiữ lại?
Kỳ thi FLYER, ca thi, danh sách thí sinhGET/POST /v3/teacher/exams; GET/PUT/DELETE .../{id}; POST .../{exam_id}/sessions; GET .../studentsexisting nguồn để chọn khi gắn vào kỳ đánh giá; đối chiếu với danh sách lớp
Báo cáo điểm theo kỹ năng (overall, bốn kỹ năng, khiên, CEFR, band)GET /v3/teacher/exams/{exam_id}/score-report; .../analytics/summaryexisting đọc khi lấy điểm từ FLYER
Thông báo kỳ thi; kỳ thi phía người họcPOST .../exams/{exam_id}/notify; GET /v3/learner/examsexisting giữ cho lịch thi; thông báo kết quả đi qua PRD 07
Kiểm tra xếp lớp kèm điểm bốn kỹ năngGET/POST /v3/crm/placement-tests; POST .../{id}/submit-resultexisting làm điểm đầu vào
Báo cáo người học cho phụ huynhGET /v3/parent/learner/{id}/reportexisting cổng phụ huynh thêm mục kết quả kỳ đánh giá
Điểm FLYER trên hồ sơ học viên (StudentScoreEntry)tab Học tập, PRD 02extend thêm tab Kết quả
Kỳ đánh giá, cấu trúc điểm, lưới nhập, duyệt, công bố, lịch sử, xếp loại, bảng điểm, chứng nhậnkhông cónew

3User story và tiêu chí chấp nhận

SCR-01Tạo kỳ đánh giá
Giáo vụ hoặc giáo viên tạo một kỳ đánh giá với cấu trúc điểm.
  • Given Có quyền assessments.create và một lớp đang hoạt động
  • When Nhập tên, loại, ngày thi, chọn mẫu cấu trúc điểm hoặc tự định nghĩa cấu phần với trọng số và thang điểm
  • Then Kỳ ở trạng thái draft; danh sách học viên chụp từ lớp tại ngày thi; lưới trống mở ngay; tổng trọng số khác 100 bị chặn; với phạm vi trình độ, một kỳ cha có một lưới con cho mỗi lớp, duyệt và công bố riêng.
SCR-02Nhập điểm cả lớp theo lưới
Giáo viên nhập điểm cho toàn bộ lớp trong một màn hình.
  • Given Kỳ ở trạng thái draft hoặc returned và giáo viên được phân công lớp
  • When Nhập số vào từng ô, dùng Enter xuống dòng, Tab sang cột, phím mũi tên di chuyển, hoặc dán một vùng ô từ Excel
  • Then Mỗi ô được kiểm tra ngay theo thang của cấu phần (0–10 một chữ số thập phân, 0–100 số nguyên, khiên 0–5, band 0–9 bước 0,5); ô sai có viền đỏ; điểm tổng tính lại ngay; bản nháp tự lưu 10 giây sau lần gõ cuối; dữ liệu dán khớp theo thứ tự dòng hoặc theo cột Mã học viên, kèm hộp thoại cho biết số ô sẽ ghi đè.
SCR-03Nhập điểm và nhận xét từng học viên
Giáo viên hoàn thiện hồ sơ điểm của một học viên.
  • Given Lưới điểm của kỳ đánh giá
  • When Chọn tên học viên để mở ngăn chi tiết, nhập từng cấu phần, đánh dấu Vắng thi hoặc Miễn nếu cần, viết nhận xét (tối đa 1.000 ký tự, có gợi ý mẫu câu theo mức điểm) và đính kèm tối đa 5 tệp
  • Then Dữ liệu lưu vào cùng bản ghi điểm; tệp đi qua dịch vụ upload hiện có; dòng trên lưới hiển thị biểu tượng nhận xét và số tệp; nút Trước và Sau đi lần lượt qua các học viên.
SCR-04Lấy điểm từ bài kiểm tra FLYER
Giáo viên đưa điểm bài thi trực tuyến vào kỳ đánh giá thay vì nhập lại.
  • Given Kỳ có cấu phần theo kỹ năng và trường có một kỳ thi FLYER đã hoàn thành
  • When Chọn "Lấy điểm từ FLYER", chọn kỳ thi từ GET /v3/teacher/exams, xác nhận ánh xạ kỹ năng sang cấu phần và thang quy đổi
  • Then Hệ thống đọc score-report, khớp thí sinh với học viên qua tài khoản FLYER, điền các ô với nguồn flyer_exam; học viên không có bài thi và thí sinh ngoài lớp được liệt kê; ô đã nhập tay chỉ bị ghi đè khi chọn rõ "Ghi đè".
SCR-05Gửi duyệt, công bố và thông báo phụ huynh
Giáo viên gửi duyệt; giáo vụ công bố; phụ huynh nhận kết quả.
  • Given Mọi học viên đã có điểm hoặc được đánh dấu Vắng thi hoặc Miễn, nhận xét đủ theo cấu hình
  • When Giáo viên chọn "Gửi duyệt"; giáo vụ xem lưới với giá trị bất thường được tô sáng (điểm 0, điểm tối đa, chênh lệch trên 3 điểm giữa các cấu phần, nhận xét trống) rồi chọn "Công bố" hoặc "Trả lại" kèm ghi chú
  • Then Gửi duyệt chuyển sang pending_review, khoá lưới với giáo viên và thông báo người có quyền assessments.publish. Công bố chuyển sang published, khoá điểm, phát sự kiện assessment.published; PRD 07 gửi một tin cho liên hệ chính của mỗi học viên có điểm (ứng dụng phụ huynh, Zalo OA, email; mẫu ZNS assessment_published) gồm tên học viên, tên kỳ, điểm tổng và liên kết đến trang kết quả với điểm từng cấu phần, nhận xét, tệp và xếp loại, không có thứ hạng; trạng thái gửi hiển thị trên kỳ. Trả lại chuyển sang returned, giáo viên nhận ghi chú và lưới mở lại.
SCR-06Sửa điểm sau công bố
Giáo vụ sửa một điểm sai đã công bố, có lý do và nhật ký.
  • Given Kỳ ở trạng thái published và người dùng có quyền assessments.regrade
  • When Sửa một ô điểm hoặc nhận xét, nhập lý do (bắt buộc, 10–300 ký tự) và chọn có gửi thông báo điều chỉnh hay không
  • Then Một dòng lịch sử lưu giá trị trước, sau, người sửa, thời điểm, lý do; điểm tổng và xếp loại tính lại; cổng phụ huynh hiển thị nhãn "Đã điều chỉnh ngày dd/MM"; tin điều chỉnh chỉ gửi đến phụ huynh bị ảnh hưởng; giáo viên không có quyền này thấy nút "Đề nghị sửa điểm" tạo một công việc cho giáo vụ.
SCR-07Kết quả trên hồ sơ học viên và xuất bảng điểm
Giáo vụ theo dõi tiến bộ của một học viên qua các kỳ.
  • Given Học viên có ít nhất một kỳ đã công bố
  • When Mở tab Kết quả trên hồ sơ học viên
  • Then Thấy bảng các kỳ (ngày, lớp, loại, từng cấu phần, tổng, xếp loại), biểu đồ đường theo cấu phần, điểm đầu vào từ kiểm tra xếp lớp, và nút "Xuất bảng điểm" tạo PDF một trang với logo trung tâm, bảng điểm và nhận xét; ở màn hình kỳ đánh giá, "Xuất Excel" tạo xlsx cả lớp với sheet điểm và sheet nhận xét.
SCR-08Xếp loại và chứng nhận (P2)
Chủ trung tâm định nghĩa xếp loại; giáo vụ cấp chứng nhận sau kỳ cuối khoá.
  • Given Có quyền assessments.settings và một kỳ cuối khoá đã công bố
  • When Định nghĩa các mức xếp loại cho từng thang (ví dụ thang 10: Xuất sắc từ 9,0; Giỏi từ 8,0; Khá từ 6,5; Trung bình từ 5,0; Cần cố gắng dưới 5,0), rồi chọn "Cấp chứng nhận", chọn mẫu và xác nhận danh sách học viên đạt điều kiện (xếp loại và chuyên cần tối thiểu)
  • Then Kỳ công bố sau khi lưu quy tắc hiển thị nhãn xếp loại, kỳ trước đó giữ nhãn cũ trừ khi chọn "Áp dụng lại"; các mức phải phủ kín thang và không chồng lấn. Mỗi chứng nhận nhận số hiệu duy nhất (ví dụ CN-2026-000123), một PDF dựng từ mẫu kèm mã QR dẫn đến trang xác thực công khai, được gửi đến phụ huynh qua PRD 07; thu hồi cần lý do và trang xác thực hiển thị "Đã thu hồi".

4Màn hình

Danh sách kỳ đánh giá /assessments

Tab: Nháp (N) · Chờ duyệt (N) · Đã công bố · Tất cả. Bộ lọc: chi nhánh, lớp, trình độ, loại, giáo viên, khoảng ngày thi. Cột: tên kỳ, lớp hoặc trình độ, ngày thi, giáo viên, tiến độ nhập (11/12), nguồn (Nhập tay · FLYER · Xếp lớp), trạng thái (Nháp · Chờ duyệt · Đã công bố · Trả lại), thông báo đã gửi / tổng, kebab Mở · Nhân bản · Lưu trữ. Trạng thái rỗng: "Chưa có kỳ đánh giá. Tạo kỳ đánh giá đầu tiên từ một lớp đang học hoặc lấy điểm từ bài kiểm tra FLYER." Giáo viên chỉ thấy lớp được phân công.

Biểu mẫu kỳ đánh giá (drawer) /assessments/new · /assessments/:id/edit

Trường: Tên (bắt buộc, 3–120 ký tự); Loại (midterm / final / regular / mock_cambridge / mock_ielts); Phạm vi (một lớp / một trình độ kèm chọn lớp); Ngày thi (bắt buộc); Mẫu cấu trúc điểm (điền sẵn bảng cấu phần); bảng Cấu phần (tên, thang, điểm tối đa, trọng số %; 1–10 dòng, tổng = 100); Thang điểm tổng (ten / hundred / shields / band); công tắc Nhận xét bắt buộc; Người duyệt (tuỳ chọn).

Lưới điểm cả lớp /assessments/:id

Phần đầu: tên kỳ, ngày thi, trạng thái, thời điểm tự lưu; các nút Lấy điểm từ FLYER · Dán từ Excel · Xuất Excel · Gửi duyệt. Bảng: một dòng cho mỗi học viên, một cột cho mỗi cấu phần (tiêu đề ghi trọng số), cột Tổng, cột Xếp loại (P2), cột NX; hàng chân trang: đã nhập / tổng, trung bình, cao nhất, thấp nhất. Cột Học viên cố định khi cuộn ngang. Enter xuống dòng, Tab sang phải, phím mũi tên di chuyển, Escape huỷ sửa ô, Ctrl+Z hoàn tác. Ô nguồn FLYER mang dấu F. Gõ "v" đánh dấu Vắng thi, "m" đánh dấu Miễn. Cột NX mở ngăn chi tiết học viên. Trạng thái: khung chờ tải; danh sách rỗng "Lớp chưa có học viên tại ngày thi"; xung đột "Lưới đã được [tên] cập nhật lúc HH:mm" kèm nút tải lại; banner "Chờ duyệt: chỉ đọc" hoặc "Đã công bố: sửa điểm cần lý do".

Ngăn chi tiết học viên và modal duyệt /assessments/:id/students/:studentId · /assessments/:id/review

Ngăn chi tiết: họ tên, mã học viên, điểm tổng và xếp loại; một ô cho mỗi cấu phần; công tắc Vắng thi / Miễn; nhận xét (1.000 ký tự, nút "Gợi ý" chèn mẫu câu theo mức điểm); tệp đính kèm (kéo thả, xem trước, phát video); lịch sử điểm; nút Trước · Sau · Lưu. Modal duyệt: số học viên, đã có điểm, vắng thi, miễn, thiếu nhận xét, giá trị bất thường liên kết đến ô; xem trước tin nhắn phụ huynh với một học viên mẫu, số phụ huynh có thể liên hệ và số không có kênh; công tắc "Gửi thông báo ngay" và "Hiển thị xếp loại" (P2); nút Công bố · Trả lại kèm ghi chú · Huỷ.

Tab Kết quả, cổng phụ huynh và cài đặt /students/:id#results · /parent/results · /settings/assessments

Hồ sơ học viên: bảng kỳ đã công bố (ngày, lớp, loại, từng cấu phần, tổng, xếp loại, nhận xét, tệp), biểu đồ đường theo cấu phần qua tối đa 12 kỳ, khối "Điểm đầu vào" từ kiểm tra xếp lớp, chứng nhận (P2), nút Xuất bảng điểm PDF. Cổng phụ huynh: mục "Kết quả kỳ đánh giá" trong trang Kết quả của PRD 07, mỗi kỳ là một thẻ mở trang chi tiết; không có thứ hạng. Cài đặt: mẫu cấu trúc điểm (mẫu hệ thống: Bốn kỹ năng thang 10, Cambridge YLE theo khiên, IELTS theo band, Kiểm tra thường xuyên một cột), mẫu câu nhận xét, quy tắc xếp loại (P2), mẫu chứng nhận và định dạng số hiệu (P2).

5Quy tắc nghiệp vụ

  1. Một kỳ đánh giá thuộc một chi nhánh và một lớp (hoặc một trình độ với các lưới con theo lớp); danh sách học viên chụp từ các lượt ghi danh đang hoạt động tại ngày thi; giáo vụ có thể bổ sung thủ công trước khi công bố, có ghi nhật ký.
  2. Trọng số cộng lại bằng 100. Điểm tổng = tổng (điểm cấu phần quy đổi về thang tổng × trọng số) / 100; làm tròn một chữ số thập phân với thang 10, số nguyên với thang 100, bước 0,5 với band. Cấu phần Vắng thi tính 0; cấu phần Miễn loại khỏi mẫu số; vắng thi toàn bộ không có điểm tổng và xếp loại.
  3. Trạng thái: draft → pending_review → published; pending_review → returned → pending_review; published → archived. Chuyển khác trả về INVALID_TRANSITION.
  4. Điều kiện gửi duyệt: mọi học viên có đủ điểm hoặc được đánh dấu Vắng thi hoặc Miễn; nhận xét đủ khi kỳ bật "Nhận xét bắt buộc". Người duyệt phải khác người gửi duyệt khi trung tâm bật "Tách vai trò duyệt" (mặc định bật với chi nhánh có từ 2 nhân sự có quyền publish).
  5. Sau công bố, điểm và nhận xét chỉ được sửa bởi người có quyền assessments.regrade kèm lý do; mọi thay đổi ghi vào lịch sử, không ghi đè giá trị cũ; kỳ đã công bố không được xoá, chỉ lưu trữ.
  6. Thông báo công bố gửi một tin cho liên hệ chính của mỗi học viên có điểm qua PRD 07 với loại assessment_published; tuân theo giờ im lặng 21:30–07:00; học viên trưởng thành có vai trò cổng phụ huynh cho chính học viên đó nhận tin trực tiếp.
  7. Giá trị lấy từ FLYER giữ tham chiếu exam_id và thời điểm đọc; làm mới chỉ ở trạng thái nháp và trả lại; ô đã sửa tay mang cờ manual_override và không bị làm mới ghi đè trừ khi chọn rõ.
  8. Quy đổi thang cố định: thang 100 sang thang 10 chia 10; khiên Cambridge sang thang 10 nhân 2; band IELTS giữ nguyên giá trị kèm ghi chú "quy đổi tham khảo"; không quy đổi ngược từ thang 10 sang band.
  9. Xếp loại (P2) tính tại thời điểm công bố và lưu kèm phiên bản quy tắc. Chứng nhận (P2) chỉ cấp từ kỳ cuối khoá đã công bố; số hiệu duy nhất trong tenant, không tái sử dụng sau thu hồi; trang xác thực công khai chỉ hiển thị tên học viên, khoá học, ngày cấp, chi nhánh và trạng thái.
  10. Tệp đính kèm tối đa 5 mỗi học viên mỗi kỳ; hình ảnh, PDF, DOCX tối đa 10 MB; video tối đa 100 MB hoặc liên kết; lưu 24 tháng sau công bố.
  11. Kỳ đánh giá là dữ liệu cấp chi nhánh (school_id); mẫu cấu trúc điểm, quy tắc xếp loại, mẫu chứng nhận và mẫu câu nhận xét là dữ liệu cấp trung tâm (center_id).

6Mô hình dữ liệu

Thực thểTrườngGhi chú
assessment_templateid; center_id; name; components jsonb [{key, name, scale, max, weight}]; total_scale enum(ten, hundred, shields, band); comment_required; is_systemcấp trung tâm; mới
assessmentid uuid; center_id; school_id; class_id null; level_id null; parent_assessment_id null; name; type enum(midterm, final, regular, mock_cambridge, mock_ielts); exam_date; components jsonb (bản chụp từ mẫu); total_scale; comment_required; source enum(manual, flyer_exam, placement_test, mixed); flyer_exam_id null; flyer_synced_at; status enum(draft, pending_review, returned, published, archived); reviewer_staff_id null; published_by; published_at; return_note; show_grade; grading_rule_version; version int; created_by; updated_atcấp chi nhánh; mới; kỳ theo trình độ là bản ghi cha với bản ghi con theo lớp
assessment_scoreid uuid; assessment_id; student_id; enrollment_id null; roster_type enum(enrolled, added); component_scores jsonb {key: {value, source, manual_override}}; total null; grade_label null; attendance_status enum(taken, absent, exempt); exempt_components[]; flyer_learner_id null; updated_by; updated_at; version intunique (assessment_id, student_id); mới
assessment_commentid; assessment_score_id (unique); body text (≤ 1.000 ký tự); template_phrase_id null; author_staff_id; updated_atmới; tách bảng cho tìm kiếm toàn văn
assessment_attachmentid; assessment_score_id; kind enum(image, document, video, video_link); file_id null; url null; name; size_bytes; uploaded_by; created_atmới; tối đa 5 mỗi score
assessment_score_historyid; assessment_score_id; field (component key | total | comment | attendance_status); from_value; to_value; reason; notify_sent; actor_id; created_atchi tiết nhật ký; mới
grading_rule (P2), comment_phrasegrading_rule: id; center_id; scale; version; bands jsonb [{label, min, max}]; min_component null; effective_from. comment_phrase: id; center_id; min_total; max_total; text; langcấp trung tâm; mỗi lần sửa quy tắc tạo phiên bản mới
report_cardid; school_id; student_id; scope enum(assessment, course, period); assessment_id null; period_from; period_to; file_id; generated_by; generated_at; sent_atmới; PDF đã dựng, bất biến
certificate_template, certificate (P2)template: id; center_id; name; background_file_id; fields jsonb (vị trí tên, khoá học, ngày, số hiệu, QR); serial_format (CN-{yyyy}-{seq:6}); signer_name; signature_file_id; seal_file_id. certificate: id; center_id; school_id; student_id; assessment_id; template_id; serial (unique trong center); course_name; grade_label; issued_by; issued_at; file_id; qr_token (unique); status enum(active, revoked); revoked_reasonmẫu cấp trung tâm; chứng nhận cấp chi nhánh, số hiệu cấp trung tâm; mới
message_template (PRD 07)type bổ sung assessment_published, assessment_adjusted, certificate_issuedextend

7Hợp đồng API

MethodPathMục đích / request / responseTrạng thái
GET/POST/v3/teacher/exams; GET/PUT/DELETE /v3/teacher/exams/{id}; GET .../{exam_id}/students, /score-report, /analytics/summarykỳ thi FLYER, thí sinh và điểm theo kỹ năng; backend đọc khi gắn nguồn FLYERexisting
POST / GET/v3/teacher/exams/{exam_id}/sessions, /notify; /v3/learner/exams; /v3/parent/learner/{id}/report; /v3/crm/placement-tests, /{id}/submit-resultkhông đổiexisting
GET/POST/v3/crm/assessmentslọc school_id, status, class_id, level_id, type, teacher_id, from, to → ListResponse; POST {school_id, name, type, exam_date, class_id | level_id + class_ids[], template_id | components[], total_scale, comment_required, reviewer_staff_id?} → assessment (children[] khi theo trình độ)new
GET/PUT/DELETE/v3/crm/assessments/{id}chi tiết kèm counts; PUT chỉ ở draft/returned; DELETE chỉ ở draft; 409 STALE_VERSIONnew
GET / PUT/v3/crm/assessments/{id}/grid; PUT /{id}/scoresgrid → {assessment, components, rows: [{student, roster_type, score, comment_present, attachment_count, flags}], stats}; scores {rows: [{student_id, component_scores?, attendance_status?, exempt_components?}], mode: grid|paste, overwrite, version}; kiểm tra toàn bộ trước khi ghi; 422 kèm danh sách ô lỗi; Idempotency-Keynew
GET/PUT/v3/crm/assessments/{id}/students/{student_id}; POST/DELETE .../attachments[/{attachment_id}]; GET .../historyđiểm, nhận xét, tệp của một học viên; PUT {component_scores, attendance_status, comment, reason? (bắt buộc khi published), notify_adjustment?}; lịch sử điểmnew
POST/v3/crm/assessments/{id}/roster; /link-flyer-exam; /submit; /return; /publish; /archiveroster {add[], remove[], reason} chỉ trước công bố; link-flyer-exam {exam_id, mapping, overwrite} → {filled, unmatched_students[]}; /return {note}; /publish {notify, show_grade} phát sự kiện assessment.published; INVALID_TRANSITION, VALIDATION_INCOMPLETEnew
GET / POST/v3/crm/assessments/{id}/export?format=xlsx; POST /{id}/report-cardsxlsx cả lớp; report-cards {student_ids[] | all} → {job_id}new
GET/v3/crm/students/{id}/resultscác kỳ đã công bố (nhân sự thấy cả nháp với cờ), điểm đầu vào, chứng nhận, chuỗi điểm theo cấu phầnnew
GET/POST/PUT/DELETE/v3/crm/assessment-templates[/{id}]; /v3/crm/comment-phrases[/{id}]; GET/POST /v3/crm/grading-rules; /v3/crm/certificate-templatesdanh mục cấp trung tâm; xoá mẫu bị chặn khi đang dùng; quy tắc xếp loại theo phiên bản (P2)new
GET/POST/v3/crm/certificates; POST /{id}/revoke; GET /{id}/file; GET /v3/crm/certificates/verify/{qr_token}{assessment_id, template_id, student_ids[]} → chứng nhận kèm số hiệu; thu hồi {reason}; verify công khai không cần đăng nhập (P2)new
GET/v3/parent/learner/{id}/results; /results/{assessment_id}kết quả đã công bố cho cổng phụ huynh; không có dữ liệu của học viên khácnew
GET/PUT/v3/teacher/school-configkhối assessment_policy: comment_required_default, separate_reviewer, notify_absent, show_grade_default, attachment_limitsextend

8Phân quyền

Mã quyềnownerbranch_manageradmissionsacademic_adminaccountantteacherparent
assessments.viewtất cảchi nhánhkhôngchi nhánhkhônglớp được phân côngcon được liên kết (chỉ đã công bố)
assessments.create, .enter_scores, .submit, .link_flyer, .exportcóchi nhánhkhôngchi nhánhkhônglớp được phân côngchỉ xuất bảng điểm của con
assessments.publish, assessments.roster_editcóchi nhánhkhôngchi nhánhkhôngkhôngkhông
assessments.regradecóchi nhánhkhôngchi nhánhkhôngchỉ đề nghị sửakhông
certificates.issue, certificates.revoke (P2)cóchi nhánhkhôngcấp; thu hồi cần branch_managerkhôngkhôngkhông
assessments.settings (mẫu, xếp loại, mẫu chứng nhận, mẫu câu)cókhôngkhôngchỉ mẫu câu nhận xétkhôngkhôngkhông

9Sự kiện phân tích

Sự kiệnThuộc tính
assessment_createdtype, scope (class|level), from_template, components_count, total_scale
assessment_scores_savedmode (grid|single|paste|flyer_import), cells_written, cells_invalid, seconds_in_grid, by_role, unmatched (flyer)
assessment_submitted / assessment_returnedstudents, absent_count, comments_missing, hours_from_exam_date, anomalies_flagged
assessment_publishedstudents, notified, skipped_no_channel, show_grade, hours_in_review
assessment_notification_sentchannel, outcome, template (published|adjusted|certificate)
assessment_score_regradedfield, days_after_publish, by_role, notify
assessment_exportedformat (xlsx|pdf), scope (class|student)
parent_result_viewedseconds_after_notification, has_attachment, has_grade
certificate_issued / certificate_revoked / certificate_verifiedtemplate_id, count, reason, source (qr|link)

10Trường hợp biên

11Câu hỏi còn mở

Trường Số (truongso.net) · Nội bộ FLYER