---
url: https://docs.nemo12.com/quality/audits/2026-08-21-001.md
description: >-
  Audit #007 ngày 21.08.2026 về dữ liệu học liệu: đủ so với chuẩn nào, số lượng
  strand, chất lượng kiểm bằng máy, việc phải làm nốt.
---

# Audit #007 — Dữ liệu học liệu

Audit **chuyên đề** cho toàn bộ dữ liệu học: Package, Module, Unit, Learning Experience, Assessment Experience, item bank và Lab. Không đặt thang điểm mới ([lý do](../audit-standard/index.md)). Câu hỏi dẫn đường của chủ dự án: **đủ về số lượng chưa — đủ so với cái gì; ổn về chất lượng chưa — ổn so với cái gì.**

## 1. Chuẩn so sánh (đọc ra từ chính mã đang chạy, không tự bịa)

| Dữ liệu | "Đủ" nghĩa là | Nguồn của chuẩn |
| --- | --- | --- |
| Package · Module · Unit | Khớp cây đã chốt từ Pearl; seed script **dừng hẳn** khi tên Unit lệch, nên cây trong D1 là cây Pearl theo cấu trúc | `seed-b21-tree.mjs`, `seed-unit-prereqs.mjs` (chặn unit không tồn tại) |
| Learning Experience | Mỗi Unit tối thiểu **3 ô học**, trần 6; ô chỉ mọc khi node có câu | `unitPath()` trong `apps/learn/src/Learning.tsx` (SRC-295, SRC-374) |
| Assessment Experience | `assessReady = unitItems >= 6` — Unit dưới **6 câu published** thì Học vượt · Đo giữa · Đo cuối **khoá** | `apps/learn/src/Learning.tsx` (SRC-077) |
| Lab | Mỗi Unit hiện với learner có **một lab live**; `idx_labs_one_per_unit` chặn quá một | quỹ đạo SRC-399 → SRC-436 của chủ dự án |
| Item | Khuôn 4 vai canonical → variant → discriminator → boundary; 4 lựa chọn; đáp án xoay vị trí | `seed-items-from-json.mjs` |
| Bảng `learning_experiences` | Mặt phẳng sinh nội dung của Coral — **không phải** nguồn chạy runtime; đường đi của learner được suy ra từ item bank + labs | `workers/api` module coral |

Ghi chú về mốc: 6 câu/Unit là **sàn chức năng** (mở được bài đo). Mốc 16 câu/node (SRC-155, để phiên luyện 10 câu không lấn kho đề) chỉ ba môn lõi Toán · Văn · Anh đạt; ghi nhận là mốc vươn tới, không tính là thiếu ở audit này.

## 2. Số lượng — đo ngày 2026-08-21, chỉ tính strand đang HIỆN

| Môn | Unit hiện | Unit <6 câu (bài đo khoá) | Câu cần thêm | Unit chưa có lab |
| --- | ---: | ---: | ---: | ---: |
| math | 142 | 0 | 0 | 0 |
| vietnamese | 142 | 0 | 0 | 0 |
| english | 64 | 0 | 0 | 0 |
| biology | 78 | 0 | 0 | **6** |
| genai | 17 | 0 | 0 | 0 |
| physics | 279 | **199** | 398 | **207** |
| chemistry | 275 | **201** | 402 | **205** |
| informatics | 180 | **180** | 360 | 0 |
| ap | 18 | 13 | 48 | 0 |
| ielts | 18 | 13 | 46 | 0 |
| sat | 18 | 12 | 44 | 0 |
| **Tổng** | **1.231** | **618** | **1.298** | **418** |

Phát hiện nặng nhất: **605 Unit khoa học + 33 Unit luyện thi đang hiện với learner mà cả ba bài đo đều khoá** — learner học xong không có cách nào "xong Unit", đúng họ hàng với vòng lặp "Việc hôm nay" đã chữa ở SRC-417. Nguyên nhân: các đợt câu SRC-190/pearl và SRC-432 soạn đúng khuôn 4 câu/bài, mà sàn của bài đo là 6.

Không có node nào 0 câu; không Unit nào 0 câu — thiếu là thiếu **cách sàn 2 câu**, không phải trống.

## 3. Chất lượng — kiểm bằng máy trên toàn kho

| Kiểm | Kết quả |
| --- | --- |
| `audit-data.mjs` (21 phép kiểm: options hợp lệ, FK, prereq 2 chiều, lab parse được…) | ✓ sạch |
| `check-labs-ib.mjs` (34 lab IB) | ✓ sạch |
| difficulty ngoài \[0,1] | 0 |
| Câu khác 4 lựa chọn | 0 |
| Trùng khít prompt+options trong cùng node | 0 (72 bản đã retire ở SRC-416) |
| Trùng khít prompt+options **khác node** | 17 bản → **9 bản `b21g89-*` retire trong audit này** (bản sao cùng Unit với `b21-*`, learner gặp cùng câu hai lần một phiên); 1 cặp chemistry khác Unit sẽ viết lại khi bù câu; số còn lại là trùng chấp nhận được (đề khung "Which sentence is correct?" với bộ lựa chọn khác nhau) |
| Vị trí đáp án toàn kho | 4150 · 4036 · 2601 · 2359 — **lệch về ô A/B**, di sản các đợt trước khi có luật xoay; các đợt mới cân (35/35/35/35). Ghi nhận, chữa bằng xoay cơ học có kiểm soát khi có dịp, không chặn |
| Cạnh prerequisite ngược lớp | 0 trên cả 11 môn |
| Bảng `learning_experiences` | 6 dòng (Coral, draft) — đúng vai, không phải lỗ hổng runtime |

## 4. Việc phải làm nốt (theo thứ tự chặn nặng trước)

1. **T1 — Bù câu cho 638 Unit dưới sàn** (+1.298 câu, khuôn discriminator/boundary bổ sung): informatics 360 · chemistry 402 · physics 398 · ap 48 · ielts 46 · sat 44. Mở khoá bài đo — đây là chỗ learner đang kẹt thật.
2. **T2 — 418 lab còn thiếu**: physics 207 (AP·AT·CH·DT·NH·QH cũ) · chemistry 205 (CB·LK·NT·PU·TT·HC) · biology 6.
3. **T3 — Viết lại 1 câu chemistry trùng xuyên Unit** (gộp vào T1).
4. **T4 — Cân lại vị trí đáp án kho cũ** bằng xoay cơ học + kiểm phân bố (không đổi nội dung).

Tiến độ từng mục ghi ở intake theo SRC.
