Tính điểm, xếp loại theo TT 22 API
Điểm trung bình môn, xếp loại học kì và cả năm Tốt / Khá / Đạt / Chưa đạt, lên lớp, kiểm tra lại, danh hiệu cho lớp 6–12 theo Thông tư 22/2021/TT-BGDĐT.
Áp dụng quy định đánh giá của Thông tư 22/2021/TT-BGDĐT (THCS, THPT, lớp 6–12): điểm trung bình môn học kì (ΣĐĐGtx + 2 × ĐĐGgk + 3 × ĐĐGck) / (số ĐĐGtx + 5), điểm trung bình cả năm (HK I + 2 × HK II) / 3, làm tròn một chữ số thập phân, và Đạt / Chưa đạt cho môn đánh giá bằng nhận xét. Gửi điểm thành phần hoặc điểm trung bình đã có.
Kết quả học tập từng học kì và cả năm được xếp Tốt, Khá, Đạt hoặc Chưa đạt theo ngưỡng của Điều 9 (6,5 / 8,0 với ít nhất 6 môn, 5,0 / 6,5, 3,5…), kể cả quy định nâng lên mức liền kề khi bị hạ từ hai mức trở lên chỉ do một môn. Khi có kết quả rèn luyện và số buổi nghỉ, API xét lên lớp, rèn luyện hè hoặc kiểm tra lại (liệt kê môn phải kiểm tra lại) và danh hiệu Học sinh Giỏi / Xuất sắc. Số điểm thường xuyên được đối chiếu với số tiết của môn.
Công thức và ngưỡng không đổi theo TT 89/2026/TT-BGDĐT (từ 1/12/2026), văn bản chỉ sửa cách tổ chức kiểm tra và thời điểm kiểm tra lại. Chưa hỗ trợ tiểu học (TT 27/2020).
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
subjects | body | array | có | Danh sách môn: {name, type: "score" | "comment", periods?, hk1, hk2}; mỗi học kì là điểm trung bình (8.5 / "Đ") hoặc {regular: [...], mid, final}. | |
conduct | body | string | không | Kết quả rèn luyện cả năm: Tốt, Khá, Đạt, Chưa đạt (để xét lên lớp, khen thưởng). | |
absences | body | number | không | Số buổi nghỉ cả năm (quá 45 buổi phải ở lại lớp). |
Ví dụ
curl -X POST "https://apibox.io.vn/v1/vn-school-grade" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"subjects":[{"name":"Toán","periods":140,"hk1":{"regular":[8,9,7,8],"mid":8,"final":9},"hk2":9.1},{"name":"Ngữ văn","hk1":7.5,"hk2":8.2},{"name":"Tiếng Anh","hk1":9,"hk2":9.1},{"name":"GDCD","hk1":8.5,"hk2":9},{"name":"KHTN","hk1":8,"hk2":8.4},{"name":"Lịch sử và Địa lý","hk1":7.8,"hk2":8.6},{"name":"Thể dục","type":"comment","hk1":"Đ","hk2":"Đ"}],"conduct":"Tốt","absences":2}'const res = await fetch('https://apibox.io.vn/v1/vn-school-grade', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"subjects": [
{
"name": "Toán",
"periods": 140,
"hk1": {
"regular": [
8,
9,
7,
8
],
"mid": 8,
"final": 9
},
"hk2": 9.1
},
{
"name": "Ngữ văn",
"hk1": 7.5,
"hk2": 8.2
},
{
"name": "Tiếng Anh",
"hk1": 9,
"hk2": 9.1
},
{
"name": "GDCD",
"hk1": 8.5,
"hk2": 9
},
{
"name": "KHTN",
"hk1": 8,
"hk2": 8.4
},
{
"name": "Lịch sử và Địa lý",
"hk1": 7.8,
"hk2": 8.6
},
{
"name": "Thể dục",
"type": "comment",
"hk1": "Đ",
"hk2": "Đ"
}
],
"conduct": "Tốt",
"absences": 2
}),
});
const data = await res.json();
console.log(data);import requests
res = requests.post(
"https://apibox.io.vn/v1/vn-school-grade",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"subjects": [{"name": "Toán", "periods": 140, "hk1": {"regular": [8, 9, 7, 8], "mid": 8, "final": 9}, "hk2": 9.1}, {"name": "Ngữ văn", "hk1": 7.5, "hk2": 8.2}, {"name": "Tiếng Anh", "hk1": 9, "hk2": 9.1}, {"name": "GDCD", "hk1": 8.5, "hk2": 9}, {"name": "KHTN", "hk1": 8, "hk2": 8.4}, {"name": "Lịch sử và Địa lý", "hk1": 7.8, "hk2": 8.6}, {"name": "Thể dục", "type": "comment", "hk1": "Đ", "hk2": "Đ"}], "conduct": "Tốt", "absences": 2},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/vn-school-grade');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => '{"subjects":[{"name":"Toán","periods":140,"hk1":{"regular":[8,9,7,8],"mid":8,"final":9},"hk2":9.1},{"name":"Ngữ văn","hk1":7.5,"hk2":8.2},{"name":"Tiếng Anh","hk1":9,"hk2":9.1},{"name":"GDCD","hk1":8.5,"hk2":9},{"name":"KHTN","hk1":8,"hk2":8.4},{"name":"Lịch sử và Địa lý","hk1":7.8,"hk2":8.6},{"name":"Thể dục","type":"comment","hk1":"Đ","hk2":"Đ"}],"conduct":"Tốt","absences":2}',
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"subjects": [
{
"name": "Toán",
"type": "score",
"hk1": 8.3,
"hk2": 9.1,
"year": 8.8,
"details": {
"hk1": {
"regular": [
8,
9,
7,
8
],
"mid": 8,
"final": 9,
"formula": "(8 + 9 + 7 + 8 + 2×8 + 3×9) / 9"
},
"hk2": {
"given_average": 9.1
}
}
},
{
"name": "Ngữ văn",
"type": "score",
"hk1": 7.5,
"hk2": 8.2,
"year": 8,
"details": {
"hk1": {
"given_average": 7.5
},
"hk2": {
"given_average": 8.2
}
}
},
{
"name": "Thể dục",
"type": "comment",
"hk1": "Đạt",
"hk2": "Đạt",
"year": "Đạt",
"details": {
"hk1": {
"given": "Đ"
},
"hk2": {
"given": "Đ"
}
}
}
],
"learning": {
"hk1": {
"rating": "Khá",
"rating_en": "Good",
"level": 2
},
"hk2": {
"rating": "Tốt",
"rating_en": "Very good",
"level": 3
},
"year": {
"rating": "Tốt",
"rating_en": "Very good",
"level": 3
}
},
"conduct": "Tốt",
"promotion": {
"decision": "promoted",
"decision_vi": "Được lên lớp"
},
"award": {
"title": "Học sinh Giỏi",
"title_en": "Good student",
"note": "Xuất sắc needs ≥ 6 subjects with a year average ≥ 9.0 (has 1)"
},
"legal": {
"circular": "Thông tư 22/2021/TT-BGDĐT, sửa đổi bởi TT 10/2025/TT-BGDĐT và TT 89/2026/TT-BGDĐT",
"scope": "Lower and upper secondary (grades 6–12); primary school uses TT 27/2020/TT-BGDĐT"
},
"reviewed": "2026-11-11"
}
Ứng dụng
- Tính điểm trong app sổ liên lạc điện tử
- Để phụ huynh tự xem xếp loại trước khi có học bạ
- Kiểm tra dữ liệu nhập điểm trong phần mềm quản lý trường
- Thử xem cần bao nhiêu điểm để đạt Học sinh Giỏi
Hỏi đáp
Mỗi môn có bao nhiêu điểm thường xuyên?
Mỗi học kì: 2 với môn 35 tiết/năm, 3 với môn trên 35 đến 70 tiết, 4 với môn trên 70 tiết; môn nhận xét có 2 lần. Có cảnh báo khi số điểm khác.
Còn điểm trung bình các môn không?
Không. TT 22 xếp loại dựa trên điểm trung bình từng môn; API không tính điểm trung bình chung.
adjusted_from nghĩa là gì?
Kết quả bị hạ từ hai mức trở lên chỉ do một môn nên được nâng lên mức liền kề theo Điều 9.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.