FLYER Teacher · Acceptance Test · 03/09/2026

Nghiệm thu tính năng Điểm danh — teacher.flyer.us

Nghiệm thu end-to-end như một giáo viên mới 100% (tài khoản +8412345673359, trial 7 ngày): tạo lớp → tạo 10 học sinh → xếp lớp → thiết lập thời khóa biểu → điểm danh buổi đầu → xem /vi/report/attendance → tạo khóa học → thu học phí. Screenshot chụp thật bằng script tự động, 1440×900.

Phạm vi
Điểm danh + Báo cáo + Khóa học + Học phí
Data mẫu
1 lớp · 10 HS · 13 buổi · 1 khóa 1,5tr
Kết quả
PASS có điều kiện
Blocker
2 (đều ở mảng Học phí)
Tester
Claude (script) · Tùng review
Verdict nhanh Điểm danh: PASS Báo cáo: PASS Khóa học: PASS (2 lỗi nhỏ) Thu học phí: FAIL

1Flow đã chạy

Tạo lớp "Lớp Nghiệm Thu ĐD" (#CL71410, Pre A1 Starters) → Tạo 10 HS batch (NT HS 01-10 · 0 coin nhờ trial) → [vòng] Học sinh chưa xếp lớp → bulk "Chuyển học sinh" → vào lớp → Tab Điểm danh: gate "thiết lập thời khóa biểu" → Th5 hàng tuần, 03/09→30/11 (13 buổi) → Điểm danh buổi 1: bulk có mặt → HS09 Vắng, HS10 Đi trễ → Xác nhận (8·1·1) → Report /vi/report/attendance: 10 HS · TB 90% · 1 HS cần theo dõi [OK] realtime → Tạo khóa học "Khóa Starters Nghiệm Thu" 13 buổi · 1.500.000đ · Hoạt động → Tab Quản lý học phí: chọn 10/10 HS → "Gửi phiếu thu" → [FAIL] KHÔNG CÓ GÌ XẢY RA

2Bằng chứng từng bước

2.1 Báo cáo điểm danh — empty state (trước khi có data)

4 KPI (Tổng HS · Tỉ lệ TB · Lớp cần theo dõi · HS cần theo dõi) + banner "Điểm danh cho lớp có buổi học hôm nay" + bảng theo lớp + filter thời gian + Xuất dữ liệu. Empty state có hướng dẫn hành động rõ — tốt.

2.2 Tạo lớp

Form đủ: Loại lớp (bắt buộc) · Tên lớp · Khóa học (tùy chọn — móc sẵn sang tính năng Khóa học) · lớp online toggle · mục tiêu giờ học/tuần. Lưu ý: chọn Loại lớp xong mới lộ field "Mục tiêu" bắt buộc thứ 2 — dễ bấm Xác nhận hụt một nhịp.
Lớp tạo thành công, có mã lớp #CL71410 copy được để HS join.

2.3 Tạo 10 học sinh

Form batch tối đa 30 em/lần + import Excel (.xlsx ≤2MB có file mẫu) + mật khẩu chung + panel Gói (trial → 0 coin). Đây là form tốt nhất trong flow.
Modal xác nhận tính phí minh bạch: "nâng cấp các tài khoản được chọn và tính phí: 0 C".
"Tạo tài khoản thành công". Nhưng để ý nền phía sau: Tổng số học sinh vẫn 0.

2.4 Finding: HS vừa tạo "biến mất" khỏi trang Học sinh

Sau khi tạo 10 HS thành công, trang Học sinh hiện "TỔNG SỐ HỌC SINH: 0" + "Thông tin tìm kiếm không tồn tại". 10 em thực ra nằm ở tab thứ 2 "Học sinh chưa xếp lớp" — nhưng GV mới không được dẫn sang đó. Cảm giác đầu tiên là "mất dữ liệu".
Lối thoát đúng: tab "Học sinh chưa xếp lớp" → tick tất cả → nút "Chuyển học sinh" xuất hiện → chọn lớp → OK. Bulk hoạt động tốt, nhưng phải tự mò ra.

2.5 Thiết lập thời khóa biểu (gate của Điểm danh)

Điểm danh yêu cầu thời khóa biểu trước: chọn khoảng ngày + tick thứ trong tuần + giờ mỗi buổi. Hợp lý về mô hình (buổi học sinh ra từ lịch) nhưng là bước chặn thứ 2 giữa "muốn điểm danh" và "được điểm danh". Bug nhỏ: giờ nhập 18:00–19:30 không được nhận — buổi lưu với giờ mặc định 07:00–17:00.

2.6 Điểm danh buổi học

Ma trận 13 buổi × 10 HS với 4 trạng thái (Có mặt · Vắng · Đi trễ · Nghỉ phép) + tỉ lệ từng em + tab "Buổi học hôm nay"/"Tổng quan" + Xuất báo cáo.
Điểm danh nhanh: nút bulk "tất cả có mặt" rồi chỉnh từng em; mỗi em có ô ghi chú. Modal xác nhận đếm đúng "8 có mặt · 1 vắng · 1 đi trễ" và nói rõ vẫn sửa được sau. UX tốt.

2.7 Báo cáo cập nhật realtime

Ngay sau xác nhận, /vi/report/attendance hiển thị: 10 học sinh · Tỉ lệ TB 90% · 1 học sinh cần theo dõi (HS09 vắng) + dòng lớp Nghiệm Thu trong bảng. Số liệu khớp tuyệt đối với thao tác. PASS.

2.8 Tạo khóa học

"Khóa Starters Nghiệm Thu" tạo OK: 1.500.000 VND · trạng thái Hoạt động · hỗ trợ trả 1 lần / chia nhỏ. 2 lỗi nhỏ: (1) ô search của select Cấp độ không lọc theo text gõ — gõ "Starters" nhưng Enter chọn "IELTS" (option đầu); (2) validation hiển thị tiếng Anh "Cấp độ is required" giữa UI tiếng Việt.

2.9 Blocker: Gửi phiếu thu không phản hồi

Tab Quản lý học phí: tick 10/10 HS → nút "Gửi phiếu thu" enable → bấm 3 lầnkhông có gì xảy ra: không modal, không chuyển trang, không toast, không lỗi console, không request HTTP lỗi. Nghi do GV chưa có Hồ sơ thanh toán/STK — nhưng hệ thống không nói gì. Silent failure = lỗi nặng nhất về UX.

2.10 Blocker: Hồ sơ thanh toán treo vô hạn

/vi/bank-account ("Hồ sơ thanh toán") — spinner quay vô hạn (>5s, không nội dung, không lỗi). GV tự do trial không thể thiết lập STK → toàn bộ phễu thu học phí bị khóa với persona này.

3Tổng hợp findings

#FindingMứcĐề xuất
1"Gửi phiếu thu" silent failure — chọn đủ HS, bấm không phản hồi gìBlockerNếu thiếu điều kiện (STK, hồ sơ) → hiện modal giải thích + CTA thiết lập; không bao giờ để nút enable mà chết im
2Hồ sơ thanh toán (/vi/bank-account) spinner vô hạn với GV tự do trialBlockerFix API/permission; thêm timeout + error state cho trang
3HS mới tạo hiển thị "Tổng số 0" — nằm ở tab "chưa xếp lớp" nhưng không được dẫnCaoSau tạo thành công: toast/redirect sang tab chưa xếp lớp + gợi ý "Chuyển vào lớp ngay"
4Modal "Thêm học sinh" trong lớp chỉ có Tạo mới / Mời kết nối — không chọn từ HS sẵn có; phải vòng qua student-list → "Chuyển học sinh"CaoThêm lựa chọn thứ 3 "Chọn từ danh sách học sinh của tôi" ngay trong modal của lớp
5Giờ học nhập trong form thời khóa biểu không được lưu (nhận default 07:00–17:00)Trung bìnhKiểm tra binding time-picker; hiển thị lại giờ đã lưu để GV thấy sai mà sửa
6Select "Cấp độ" (form Khóa học) search không lọc — gõ "Starters" Enter ra "IELTS"Trung bìnhBật filterOption theo label cho mọi select search
7Validation lẫn tiếng Anh: "Cấp độ is required"ThấpBổ sung i18n key cho message antd form
8Điểm danh cần 2 gate (xếp lớp + thời khóa biểu) trước khi dùng được — CTA "Điểm danh ngay" ở report chưa nói trước điều đóThấpCTA dẫn thẳng vào checklist còn thiếu ("Bạn cần: ① HS trong lớp ② thời khóa biểu")

Những gì làm tốt (giữ nguyên)

Kết luận nghiệm thu: Điểm danh + Báo cáo: PASS — chất lượng tốt, cho phép công bố. Thu học phí: FAIL với persona GV tự do/trial (finding #1, #2) — cần fix trước khi marketing tính năng học phí cho GV cá nhân; với trung tâm có school setup đầy đủ có thể hành xử khác (chưa kiểm chứng). Khớp với data production: tuitions toàn hệ chỉ 16 phiếu / 2 PAID — silent failure kiểu này có thể là một phần nguyên nhân adoption ≈ 0.

4Kế hoạch nghiệm thu tiếp (100% functions)

Chuỗi trang /acceptance/<slug> sẽ nghiệm thu lần lượt từng nhóm chức năng của teacher.flyer.us với cùng persona (GV 10–50 HS), mỗi trang có screenshot + findings:

SlugPhạm viTrạng thái
/acceptance/attendanceĐiểm danh · thời khóa biểu · report · khóa học · học phíXong (trang này)
/acceptance/assigntestKhám phá đề → giao bài 3 bước → theo dõi nộp → nhắc nhởXong
/acceptance/aigradingChấm Writing + Speaking AI · quota coinXong
/acceptance/reportDashboard 18 báo cáo · red-flag · xuấtXong
/acceptance/challengeThách đấu realtime + xếp hạngXong
/acceptance/awardsĐá Tri Thức (khen thưởng) v4Xong
/acceptance/programChương trình + Giao bài tự độngXong
/acceptance/placementKiểm tra đầu vàoXong
/acceptance/aiassistantTrợ Giảng AI (chat + call)Xong
/acceptance/libraryTạo đề Builder + Thư viện của tôiXong

← Danh mục PRD · PRD Điểm danh · Onboarding giáo viên · Roadmap