#05 – User flow & thiết kế trải nghiệm
Giai đoạn: Thiết kế UX · Nguồn: [UF], [MT], 03 – SRS · Phiên bản 0.1 – 29/10/2026
Các luồng dưới đây chuyển từ sơ đồ draw.io [UF] sang Mermaid, bổ sung các bước còn thiếu (đánh dấu ★) theo phát hiện F1–F7 ở 02 §3.3.
#1. Nguyên tắc thiết kế
| # | Nguyên tắc | Áp dụng cụ thể |
|---|---|---|
| 1 | Ô nhập ID là trung tâm | Ô nhập ID chiếm vị trí đầu trang chủ và có trên thanh đầu trang mọi màn hình; bàn phím tự bật chữ hoa |
| 2 | Ba chạm tới nội dung | Quét QR → nội dung (1 chạm); mở web → nhập ID → nội dung (≤ 3 chạm) |
| 3 | Luôn có đường quay về sách | Cuối mỗi tài nguyên: "Học tiếp trên sách – trang X, mục Y" |
| 4 | Kết quả luôn dẫn tới hành động | Màn hình kết quả có khối "Ôn gì tiếp" với ID tương ứng trên sách |
| 5 | Thiết kế cho điện thoại, 4G chập chờn | Tự lưu, trạng thái ngoại tuyến, ảnh/video tải theo nhu cầu |
| 6 | Không làm học sinh mất bài | Không có thao tác nào xoá câu trả lời mà không xác nhận |
| 7 | Tôn trọng thói quen làm đề trên giấy | Chế độ Phiếu trả lời và Tra đáp án ngang hàng với Làm trên máy |
#2. User flow
#2.1 Kích hoạt sách lần đầu
★ Luồng bổ sung, không có trong [UF].
flowchart TD
A(["Mua sách, cào tem/quét QR kích hoạt"]) --> B{"Đã đăng nhập?"}
B -- "Chưa" --> C["Đăng nhập / Đăng ký<br/>(giữ mã kích hoạt)"]
C --> D
B -- "Rồi" --> D["Trang kích hoạt<br/>mã điền sẵn"]
D --> E{"Kiểm tra mã"}
E -- "Hợp lệ" --> F["Xác nhận thông tin sách"]
F --> G["Kích hoạt thành công<br/>Hướng dẫn dùng ID trên sách"]
G --> H(["Sách của tôi"])
E -- "Không tồn tại" --> I["Báo lỗi, gợi ý ký tự dễ nhầm"] --> D
E -- "Đã dùng bởi tài khoản này" --> H
E -- "Đã dùng bởi tài khoản khác" --> J["Báo lỗi + mã tham chiếu<br/>Liên hệ hỗ trợ"]
E -- "Sai quá nhiều lần" --> K["Captcha / khoá tạm 15 phút"]
#2.2 Toán (chuyển từ [UF], bổ sung ★)
flowchart TD
subgraph GIAY["📖 Sách giấy"]
G1(["Mở sách giấy"]) --> G2["Xem mind map lý thuyết"]
G2 -- "đã hiểu" --> G3["Xem ví dụ minh hoạ"]
G3 -- "đã hiểu" --> G4["Làm bài tập thực hành"]
G5["Làm đề thi thử"]
end
subgraph SO["📱 Nền tảng số"]
S1["Nhập ID mind map"] --> S2["Xem giải thích lý thuyết<br/>(text, video)"]
S3["Nhập ID ví dụ"] --> S4["Xem video giải thích"]
S5["Nhập ID bài tập"] --> S5a{"★ Chọn chế độ"}
S5a -- "Làm trên máy" --> S5b["★ Làm bài tương tác"] --> S6
S5a -- "Đã làm trên giấy" --> S6["Xem đáp án, giải thích"]
S6 --> S7["Nhận đề xuất kiến thức"]
S8["★ Nhập ID đề"] --> S8a{"★ Chọn chế độ"}
S8a -- "Làm trên máy (90 phút)" --> S8b["★ Làm đề"] --> S9["★ Kết quả, đáp án, giải thích"]
S8a -- "Đã làm trên giấy" --> S9
S9 --> S7
S10["★ Gói đề mở rộng (P3)"]
end
G2 -- "cần chi tiết" --> S1
S2 --> G3
G3 -- "cần chi tiết" --> S3
S4 --> G4
G4 --> S5
S7 -- "chuyên đề yếu" --> S2
S6 --> G5
G5 --> S8
S9 -- "★ làm hết đề trong sách" --> S10
#2.3 Tiếng Anh (chuyển từ [UF], bổ sung ★)
flowchart TD
subgraph GIAY["📖 Sách giấy"]
G1(["Mở sách giấy"]) --> G2["Đọc hướng dẫn làm test"]
G2 -- "không test" --> G3["Xem tổng hợp kiến thức (lý thuyết)"]
G3 -- "bỏ qua chi tiết" --> G4["Xem cấu trúc đề, dạng bài"]
G4 --> G5["Xem đề luyện tập"]
end
subgraph SO["📱 Nền tảng số"]
S1["Nhập ID test (1–5)"] --> S2["Làm mini test 20 câu<br/>một câu/màn hình, đo thời gian"]
S2 --> S3["Xem kết quả, đáp án, giải thích"]
S3 --> S4["Nhận đề xuất kiến thức<br/>(chuyên đề trong 12 chuyên đề)"]
S4 --> S6
S5["Nhập ID chuyên đề"] --> S6["Xem video giải thích 3–5 phút"]
S6 --> S7["Làm bài tập thực hành 5–10 câu"]
S8["Nhập ID đề luyện tập"] --> S8a{"★ Chọn chế độ"}
S8a -- "Làm trên máy (50 phút)" --> S9["Làm đề luyện tập"]
S8a -- "Đã làm trên giấy" --> S10
S9 --> S10["★ Kết quả, key, giải thích"]
S10 --> S11["★ Đề xuất chủ đề/dạng bài sai nhiều"]
S11 --> S6
end
G2 -- "làm test" --> S1
G3 -- "xem chi tiết" --> S5
S7 -- "muốn xem cấu trúc đề" --> G4
S7 -- "muốn làm đề" --> S8
G5 -- "muốn làm đề" --> S8
#2.4 Ngữ văn (suy ra từ [MT])
flowchart TD
subgraph GIAY["📖 Sách giấy"]
G1(["Mở sách giấy"]) --> G0["Đọc phân tích cấu trúc đề thi"]
G0 --> G2["Xem mind map kỹ năng"]
G2 -- "đã hiểu" --> G3["Đọc ví dụ và đáp án ngắn gọn"]
G3 -- "đã hiểu" --> G4["Đọc đề bài tập vận dụng"]
G6["Đọc đề thi thử (5–10 đề)"]
end
subgraph SO["📱 Nền tảng số"]
S1["Nhập ID kỹ năng"] --> S2["Xem video tóm tắt lý thuyết"]
S3["Nhập ID ví dụ"] --> S4["Xem video hướng dẫn làm bài"]
S5["Nhập ID bài / đề"] --> S5a{"Chọn chế độ"}
S5a -- "Viết trên máy" --> S5b["Soạn bài / tải ảnh bài viết tay"] --> S6
S5a -- "Đã viết trên giấy" --> S6["Xem đáp án, hướng dẫn giải"]
S6 --> S7["Tự chấm theo rubric (P1)"]
S7 --> S8["Gợi ý kỹ năng cần ôn lại"]
S8 --> S2
end
G2 -- "cần chi tiết" --> S1
S2 --> G3
G3 -- "cần chi tiết" --> S3
S4 --> G4
G4 --> S5
S6 --> G6
G6 --> S5
#2.5 Làm bài và nhận đề xuất (dùng chung 3 môn)
stateDiagram-v2
[*] --> GioiThieu: Mở bằng ID / QR / bài được giao
GioiThieu --> TraDapAn: "Đã làm trên giấy"
GioiThieu --> DangLam: "Bắt đầu" (chọn chế độ hiển thị)
GioiThieu --> DangLam: "Tiếp tục lượt đang làm"
DangLam --> DangLam: Trả lời → tự lưu
DangLam --> NgoaiTuyen: Mất mạng
NgoaiTuyen --> DangLam: Có mạng, đồng bộ
DangLam --> DaNop: Nộp bài / hết giờ
TraDapAn --> PhieuTraLoi: "Nhập đáp án để biết chuyên đề cần ôn"
PhieuTraLoi --> DaNop
DaNop --> KetQua: Chấm câu khách quan
KetQua --> TuCham: Có câu tự luận
TuCham --> DeXuat
KetQua --> DeXuat
DeXuat --> HocLieu: Mở lý thuyết / ví dụ / bài tập
DeXuat --> SachGiay: "Học tiếp trên sách"
KetQua --> GioiThieu: Làm lại
HocLieu --> [*]
SachGiay --> [*]
#2.6 Giáo viên giao bài ★
sequenceDiagram
actor GV as Giáo viên
participant LMS as LMS Hoclieu
participant SYS as Nền tảng hybrid
actor HS as Học sinh
GV->>SYS: Đăng nhập (SSO Hoclieu)
SYS->>LMS: Lấy danh sách lớp, học sinh
GV->>SYS: Chọn đề trong sách, chọn lớp, đặt hạn nộp
SYS-->>HS: Thông báo "Bài được giao"
HS->>SYS: Làm bài, nộp
SYS->>SYS: Chấm, gắn lượt với bài giao
SYS-->>LMS: Đồng bộ điểm (nếu LMS hỗ trợ)
GV->>SYS: Xem tiến độ, phổ điểm, câu sai nhiều
GV->>SYS: Giao bài tập củng cố chuyên đề yếu (P2)
#2.7 Sản xuất nội dung và ID cho sách in ★
flowchart LR
A["BTV biên soạn<br/>bản thảo sách"] --> B["Nhập/Import câu hỏi,<br/>lời giải, video lên CMS"]
B --> C["Gắn tag<br/>ma trận kiến thức"]
C --> D["Sinh ID cho tài nguyên"]
D --> E["Trưởng ban duyệt<br/>& KHOÁ ID"]
E --> F["Xuất Excel ID + ảnh QR<br/>+ lô mã kích hoạt"]
F --> G["Dàn trang chèn ID/QR<br/>Nhà in in tem kích hoạt"]
G --> H["Kiểm tra liên kết<br/>(mọi ID mở được)"]
H --> I["Xuất bản nội dung số"]
I --> J(["Sách phát hành"])
H -- "Lỗi" --> B
Điểm kiểm soát quan trọng: sau bước E, ID không được đổi. Nội dung đích của ID vẫn sửa được trên hệ thống đến trước và sau khi phát hành.
#3. Sơ đồ trang (Sitemap)
flowchart TD
HOME["SCR-01 Trang chủ<br/>(ô Nhập ID)"] --> AUTH["SCR-02 Đăng nhập / Đăng ký"]
HOME --> ACT["SCR-03 Kích hoạt sách"]
HOME --> MY["SCR-04 Sách của tôi"]
MY --> LIB["SCR-22 Thư viện học liệu (P2)"]
HOME --> RES{{"Tài nguyên theo ID"}}
RES --> TH["SCR-05 Lý thuyết"]
RES --> EX["SCR-06 Ví dụ minh hoạ"]
RES --> INT["SCR-08 Giới thiệu bài làm"]
INT --> T1["SCR-09 Làm bài – đề thi"]
INT --> T2["SCR-10 Làm bài – phiếu trả lời"]
INT --> T3["SCR-11 Làm bài – một câu/màn hình"]
INT --> KEY["SCR-13 Đáp án & lời giải"]
T1 & T2 & T3 --> RS["SCR-12 Kết quả"]
RS --> KEY
RS --> SG["SCR-14 Tự chấm tự luận"]
RS --> REC["SCR-15 Đề xuất củng cố"]
HOME --> HIS["SCR-16 Lịch sử làm bài"]
HOME --> PRO["SCR-17 Tiến bộ (biểu đồ)"]
HOME --> ASG["SCR-23 Bài được giao"]
HOME --> PKG["SCR-18 Gói đề mở rộng"] --> PAY["SCR-19 Thanh toán"]
HOME --> ME["SCR-21 Tài khoản"]
RES -.-> ERR["SCR-20 Không tìm thấy ID /<br/>Chưa kích hoạt"]
#4. Danh mục màn hình
#4.1 Học sinh (web mobile-first)
| Mã | Màn hình | Thành phần chính | FR | Release |
|---|---|---|---|---|
| SCR-01 | Trang chủ | Ô Nhập ID + nút quét QR, Sách của tôi, Bài được giao, Tiếp tục học | FR-02.01 | MVP1 |
| SCR-02 | Đăng nhập / Đăng ký | SSO Hoclieu, SĐT/email, quên mật khẩu, đồng ý điều khoản | FR-01.01 | MVP1 |
| SCR-03 | Kích hoạt sách | Ô mã (điền sẵn từ QR), thông tin sách, xác nhận, trạng thái lỗi | FR-01.02–04 | MVP1 |
| SCR-04 | Sách của tôi | Thẻ sách, hạn dùng, ô nhập ID theo sách | FR-01.05 | MVP1 |
| SCR-05 | Lý thuyết | Tiêu đề chuyên đề, video, nội dung text, "Cùng chuyên đề", "Học tiếp trên sách" | FR-03.01 | MVP1 |
| SCR-06 | Ví dụ minh hoạ | Đề ví dụ, video, đáp án/phân tích (thu gọn) | FR-03.02 | MVP1 |
| SCR-07 | Trình phát video (thành phần) | HLS, tốc độ, toàn màn hình, tiếp tục xem | FR-03.03 | MVP1 |
| SCR-08 | Giới thiệu bài làm | Số câu, thời gian, cấu trúc phần, chọn chế độ, "Đã làm trên giấy – xem đáp án", lượt đang làm dở | FR-04.02–05, 05.06 | MVP1 |
| SCR-09 | Làm bài – giao diện đề thi | Đồng hồ, câu hỏi, bảng điều hướng, trạng thái lưu, nộp bài | FR-04.02 | MVP1 |
| SCR-10 | Làm bài – phiếu trả lời | Lưới câu theo phần, ô A–D / Đ–S / ô số | FR-04.03 | MVP1 |
| SCR-11 | Làm bài – một câu/màn hình | Thanh tiến độ 1/20, câu hỏi, nút Tiếp | FR-04.04 | MVP1 |
| SCR-12 | Kết quả | Điểm, điểm theo phần, thời gian, đúng/sai/bỏ trống, khối "Ôn gì tiếp" | FR-05.01, 05.02 | MVP1 |
| SCR-13 | Đáp án & lời giải | Danh sách câu, lọc câu sai, lời giải, video | FR-05.03, 05.06 | MVP1 |
| SCR-14 | Tự chấm tự luận | Bài làm, hướng dẫn giải, rubric chọn mức, tổng điểm "Tự đánh giá" | FR-05.04, 05.05 | MVP1 / R1 |
| SCR-15 | Đề xuất củng cố | Danh sách chuyên đề yếu, tỷ lệ sai, liên kết lý thuyết/ví dụ/bài tập + ID sách | FR-06.x | MVP1 (TA) / R1 |
| SCR-16 | Lịch sử làm bài | Bộ lọc môn/loại, danh sách lượt | FR-07.01–02 | R1 |
| SCR-17 | Tiến bộ | Biểu đồ điểm theo môn | FR-07.03–04 | R1 |
| SCR-18 | Gói đề mở rộng | Danh sách gói, giá, đề mẫu | FR-08.01 | P3 |
| SCR-19 | Thanh toán | Chọn phương thức, kết quả thanh toán | FR-08.02–04 | P3 |
| SCR-20 | Lỗi ID / Chưa kích hoạt | Thông báo, gợi ý, hình vị trí ID, nút Kích hoạt | FR-02.05–06 | MVP1 |
| SCR-21 | Tài khoản | Hồ sơ, đổi mật khẩu, xoá tài khoản, điều khoản | FR-01.07 | MVP1 / R1 |
| SCR-22 | Thư viện học liệu | Cây sách → phần → chuyên đề, trạng thái đã học | FR-03.05–06 | R1 |
| SCR-23 | Bài được giao | Danh sách bài GV giao, hạn nộp, trạng thái | FR-09.03 | R1 |
#4.2 Giáo viên
| Mã | Màn hình | FR | Release |
|---|---|---|---|
| SCR-GV-01 | Lớp của tôi (đồng bộ LMS / mã lớp) | FR-09.01 | R1 |
| SCR-GV-02 | Giao bài | FR-09.02 | R1 |
| SCR-GV-03 | Báo cáo bài giao: tiến độ, phổ điểm, bảng điểm | FR-09.04–05, 09.07 | R1 |
| SCR-GV-04 | Phân tích câu/chuyên đề sai nhiều | FR-09.06 | R1 |
#4.3 CMS (BTV, Trưởng ban) và Quản trị (Admin HEID)
| Mã | Màn hình | FR | Release |
|---|---|---|---|
| SCR-CMS-01 | Cây nội dung sách | FR-10.01 | MVP1 |
| SCR-CMS-02 | Ngân hàng câu hỏi (lọc theo môn, tag, trạng thái) | FR-10.02 | MVP1 |
| SCR-CMS-03 | Soạn câu hỏi (LaTeX, hình, lời giải, video, rubric) | FR-10.02, 10.10 | MVP1 |
| SCR-CMS-04 | Import hàng loạt + xem trước lỗi | FR-10.03 | MVP1 |
| SCR-CMS-05 | Soạn bài làm/đề | FR-10.07 | MVP1 |
| SCR-CMS-06 | Thư viện video | FR-10.04 | MVP1 |
| SCR-CMS-07 | Ma trận kiến thức | FR-10.06, 10.12 | MVP1 |
| SCR-CMS-08 | Quản lý ID & xuất QR | FR-10.05 | MVP1 |
| SCR-CMS-09 | Lô mã kích hoạt | FR-10.09 | MVP1 |
| SCR-CMS-10 | Kiểm tra liên kết ID | FR-10.14 | MVP1 |
| SCR-CMS-11 | Hàng chờ duyệt & lịch sử phiên bản | FR-10.08 | R1 |
| SCR-CMS-12 | Báo lỗi nội dung từ học sinh | FR-03.07 | R1 |
| SCR-CMS-13 | Người dùng CMS & phân quyền | FR-10.13 | MVP1 |
| SCR-ADM-01 | Dashboard tổng quan | FR-11.02 | R1 |
| SCR-ADM-02 | Báo cáo hiệu quả học liệu | FR-11.03 | R1 |
| SCR-ADM-03 | Báo cáo kinh doanh, quản lý gói | FR-11.04, 08.06 | P3 |
| SCR-ADM-04 | Hỗ trợ người dùng | FR-11.06 | R1 |
#5. Mô tả khung màn hình quan trọng (wireframe dạng chữ)
SCR-01 – Trang chủ (mobile)
┌────────────────────────────────┐
│ ☰ Ôn thi Hybrid 👤 │
├────────────────────────────────┤
│ Nhập ID trên sách │
│ ┌───────────────────┐ ┌──────┐ │
│ │ VD: TV012 │ │ 📷QR │ │
│ └───────────────────┘ └──────┘ │
│ [ Mở nội dung ] │
├────────────────────────────────┤
│ ▶ Tiếp tục: Đề thi thử Toán 3 │
│ Còn 42:10 · Câu 15/22 │
├────────────────────────────────┤
│ Bài được giao (2) > │
├────────────────────────────────┤
│ Sách của tôi │
│ [Toán 2027] [Anh 2027] [+ Kích hoạt] │
├────────────────────────────────┤
│ Ôn gì tiếp: Nguyên hàm (sai 67%)│
└────────────────────────────────┘
SCR-08 – Giới thiệu bài làm
┌────────────────────────────────┐
│ ← Đề thi thử Toán số 3 · TD003 │
├────────────────────────────────┤
│ 22 câu · 90 phút · Thang 10 │
│ Phần I: 12 câu trắc nghiệm │
│ Phần II: 4 câu đúng/sai │
│ Phần III: 6 câu trả lời ngắn │
├────────────────────────────────┤
│ Cách làm: │
│ (•) Xem đề trên máy │
│ ( ) Phiếu trả lời – đề ở sách │
│ [✓] Tính giờ 90 phút │
│ [ Bắt đầu làm bài ] │
├────────────────────────────────┤
│ Đã làm trên giấy? │
│ [ Xem đáp án & lời giải ] │
├────────────────────────────────┤
│ Bạn đã làm 2 lần · cao nhất 7,25│
└────────────────────────────────┘
SCR-12 – Kết quả
┌────────────────────────────────┐
│ Kết quả · Đề thi thử Toán số 3 │
│ 7,25 / 10 │
│ Đúng 14 · Sai 6 · Bỏ trống 2 │
│ Thời gian 78 phút │
│ Phần I 2,5/3 · II 2,75/4 · III 2/3│
├────────────────────────────────┤
│ ÔN GÌ TIẾP │
│ 1. Nguyên hàm – Tích phân 67% │
│ Lý thuyết TL021 · Ví dụ TV045│
│ [Mở lý thuyết] [Bài tập] │
│ 2. Xác suất có điều kiện 50% │
├────────────────────────────────┤
│ [Xem lời giải] [Làm lại] │
│ Học tiếp trên sách: trang 112 │
└────────────────────────────────┘
#6. Kế hoạch prototype cho mốc M1 (15/11)
| Hạng mục | Nội dung | Công cụ |
|---|---|---|
| Design system tối thiểu | Màu, chữ, nút, ô nhập, thẻ, trạng thái | Figma |
| Luồng demo 1 | Quét QR kích hoạt → Sách của tôi → Nhập ID ví dụ Toán → Video | Figma prototype |
| Luồng demo 2 | Nhập ID đề Toán → Phiếu trả lời → Kết quả → Đề xuất → Lý thuyết | Figma prototype |
| Luồng demo 3 | Placement test Tiếng Anh một câu/màn hình → Đề xuất chuyên đề → Video | Figma prototype |
| Luồng demo 4 | Ngữ văn: Nhập ID bài vận dụng → Viết → Hướng dẫn giải → Tự chấm | Figma prototype |
| Màn hình CMS | Import câu hỏi, Quản lý ID & xuất QR (2–3 màn hình tĩnh) | Figma |
| Bản chạy thật (nếu kịp) | Nhập ID → xem lời giải/video với nội dung mẫu | Môi trường staging |
Nội dung mẫu cần HEID cung cấp trước 08/11: 1 chuyên đề Toán (mind map, 2 ví dụ, 1 bộ bài tập, 1 đề), 1 placement test Tiếng Anh, 1 bài vận dụng Ngữ văn kèm hướng dẫn chấm, 3–5 video.