# Hợp đồng bộ đề 3.2 – phần bổ sung so với 3.1 Bản 3.2 **giữ nguyên toàn bộ 3.1** (mọi file 3.0 / 3.1 vẫn hợp lệ) và thêm các phần tuỳ chọn dưới đây. Ghi `"schema": "bo-de/3.2"` khi dùng bất kỳ phần nào. JSON Schema dùng chung: `/schema/bo-de-3.1.schema.json` (đã gồm phần 3.2). Bộ đề 3.2 dùng được cho mọi ngôn ngữ và mọi kỳ thi (K12 Việt Nam, chứng chỉ cloud, SAT…): ngôn ngữ và khung chương trình là dữ liệu của bộ. ## 1. `blueprint` – ma trận rút đề đi kèm bộ Mô tả cách rút một đề từ bộ (hoặc từ nhiều bộ cùng chương trình), để trường / trung tâm trao đổi "khung đề" cùng câu hỏi. ```json "blueprint": { "label": "Chứng chỉ Toán 5", "subject": "toan", "grade": 5, "time_limit_sec": 2700, "include_essay": false, "freeze_variants": true, "scope": { "weeks": [1, 18] }, "sections": [ { "id": "p1", "title": "Trắc nghiệm", "cells": [ { "type": "single", "level": 1, "count": 6 }, { "type": "single", "level": 3, "skill": "toan5-ps3", "count": 4 } ] } ] } ``` - `level`: 1 Nhận biết · 2 Thông hiểu · 3 Vận dụng · 4 Vận dụng cao (bỏ trống = bất kỳ). `type`: dạng câu của 3.1. `skill`: mã trong `ext.k12.skills`. - `scope.weeks`: chỉ dùng kỹ năng thuộc các tuần đó (theo danh mục chương trình của nơi dùng). Tối đa 20 phần, 50 ô mỗi phần, 200 câu mỗi ô. ## 2. `certification` – thông tin kỳ thi chứng chỉ ```json "pass_score": 80, "certification": { "title": "Chứng chỉ Toán 5", "issuer": "Trung tâm A", "valid_days": 365, "max_attempts": 2 } ``` - Điểm đạt dùng `pass_score` sẵn có của 3.1 (phần trăm). `valid_days`: 1–3650. `max_attempts`: 1–10. - Khi app tổ chức thi chứng chỉ: chỉ dùng câu trong **kho bảo mật**; mỗi lượt rút một đề riêng theo `blueprint` với độ khó tương đương; thí sinh không xem đáp án; đạt thì được cấp chứng chỉ có mã, ai cũng tra được ở `/xac-minh.html` (chỉ tên, kỳ thi, đơn vị cấp, ngày, kết quả, hạn). ## 3. Điểm từng câu Đã có từ 3.1: `points` ở từng câu (mặc định 1). Đề chứng chỉ tính điểm theo `points`, quy về thang 10. ## 4. `subject` và `framework` – môn và khung chương trình ```json "lang": "en", "subject": "aws-cloud", "framework": { "id": "aws-saa-c03", "level": "Associate", "version": "2024" } ``` - `subject`: mã môn chuẩn, chữ thường không dấu (`toan`, `tieng-viet`, `tieng-anh`, `ly`, `hoa`, `sinh`, `tin`… hoặc mã riêng như `aws-cloud`). App hiển thị tên môn theo ngôn ngữ giao diện của người xem. Bộ K12 cũ dùng `ext.k12.subject` vẫn được; có cả hai thì app dùng `subject`. - `framework.id`: khung chương trình / kỳ thi (`vn-k12`, `vn-vao-10`, `aws-saa-c03`, `sat`…), chữ thường, số, `.` và `-`, tối đa 48 ký tự. `level`: mức trong khung (vd "Lớp 9", "Associate"), `version`: phiên bản khung. Hồ sơ kỳ thi của app (i4) dựa vào `framework.id`. - `lang` của bộ (đã có từ 3.0) là ngôn ngữ nội dung câu hỏi – khác ngôn ngữ giao diện của app. ## 5. `lang` của từng câu Câu có ngôn ngữ khác bộ (vd câu tiếng Anh trong bộ Tiếng Việt) ghi `"lang": "en"` ở câu. App chấm theo ngôn ngữ của câu: số viết `1,234.5` (tiếng Anh) hoặc `1.234,5` (tiếng Việt) đều đúng; một dấu duy nhất (`3,5` hay `3.5`) luôn là dấu thập phân. ## 6. `select` – chọn đúng N phương án (dạng `multi`) ```json { "type": "multi", "prompt": "Which TWO services store objects? (Choose TWO.)", "select": 2, "options": [ { "text": "Amazon S3", "correct": true }, { "text": "Amazon EBS" }, { "text": "Amazon S3 Glacier", "correct": true }, { "text": "Amazon EC2" } ] } ``` - Số phương án `"correct": true` phải đúng bằng `select`. Có `select` thì không cần `min_select` / `max_select`. - Chấm như `multi` (mặc định đúng hết mới có điểm; `"scoring": "partial"` để chấm từng phần). ## 7. `numeric.range` và `numeric.tolerance_pct` (dạng `short`) ```json { "type": "short", "prompt": "Ước lượng chiều cao cột cờ (m).", "numeric": { "range": [9.5, 10.5], "unit": "m" } } { "type": "short", "prompt": "Tính lãi sau 1 năm.", "numeric": { "value": 1250000, "tolerance_pct": 1 } } ``` - `range: [nhỏ nhất, lớn nhất]` thay cho `value` (đáp án là cả khoảng). `tolerance_pct`: sai số theo % của `value`; có thể dùng cùng `tolerance`. ## 8. Dạng câu `pick` – chọn câu / cụm từ trong đoạn ```json { "type": "pick", "prompt": "Câu nào trong đoạn dùng biện pháp so sánh?", "spans": [ { "text": "Trời hôm nay trong xanh." }, { "text": "Mặt hồ phẳng lặng như một tấm gương.", "correct": true }, { "text": "Đàn chim bay về tổ.", "feedback": "Câu này chỉ kể sự việc, không so sánh." } ] } ``` - Đoạn văn chia thành 2–40 mẩu liền nhau theo đúng thứ tự (app không trộn); học sinh chạm vào mẩu đúng. - Phải có ít nhất một mẩu đúng và một mẩu sai. `select` (chọn đúng N), `min_select`, `max_select`, `scoring`, `feedback` dùng như `multi`. - Dùng cho đọc hiểu, tìm câu sai ngữ pháp, tìm câu chứa ý chính, tìm dòng code lỗi… ## 9. Tự kiểm tra thêm cho 3.2 - `select` = số đáp án đúng; câu `pick` có cả mẩu đúng và mẩu sai; `range` theo thứ tự [nhỏ, lớn]. - Dùng `subject` / `framework` / `select` / `pick` / `range` thì khai báo `"schema": "bo-de/3.2"`.