Danh mục tính năng›Nghiệm thu gói Basic
Gói Basic đã vận hành được chưa?
Một người vận hành trung tâm tiếng Anh chạy trọn một tuần việc (tuyển sinh, học viên, lớp, điểm danh, học phí, liên lạc) trên hai bản: hệ thống thật Flyer CRM tại b2c.truongso.net và bản mẫu gói Basic tại truongso.net/ps/basic.
Xuất xứ / Prompt / Giới hạn
Ngày 02/11/2026: "Trường Số bản basic đã chạy được chưa? Đóng vai là một người vận hành trường học/trung tâm tiếng Anh và nghiệm thu cho anh bằng data thật nhé".
Do trợ lý AI soạn; là bản đề xuất để đội sản phẩm đối chiếu, chưa phải kết luận chính thức.
Nguồn
- Hệ thống thật: Flyer CRM tại b2c.truongso.net, tài khoản trung tâm QC do người yêu cầu đăng ký ngày 02/11/2026, trống hoàn toàn; toàn bộ dữ liệu trong tài khoản này do người thử nhập (tên và số điện thoại hư cấu). Không mở bất kỳ trung tâm hay khách hàng nào khác.
- Bản mẫu: truongso.net/ps/basic (gói Basic, 9 mục menu). Trang tự ghi "Dữ liệu mẫu (mock)"; dữ liệu nằm trong IndexedDB của trình duyệt, API /api/v3 trả về kết quả rỗng.
- Trình duyệt tự động, khổ 1440×900 và 390×844; ghi lại từng lời gọi API, thời gian và mã trả về.
Giới hạn
- Chưa thử với dữ liệu khách hàng thật của một trung tâm đang dùng; chưa thử trên điện thoại thật; không truy cập cơ sở dữ liệu.
- Dữ liệu QC để lại trong tài khoản trung tâm QC để đối chiếu; danh sách ở cuối tab, có thể xoá.
Hành trình vận hành
| # | Việc | Kết quả | Ghi chú |
|---|---|---|---|
| 1 | Đăng nhập lần đầu và onboarding | Một phần | Đăng nhập bằng SĐT + mật khẩu thành công (POST /api/v3/auth/login 201, 340 ms), chuyển tới /vi/onboarding. Onboarding chỉ có 2 bước: Họ/Tên và Tên trung tâm; nút ghi 'Tạo center' (lẫn tiếng Anh). Không có bước tạo chi nhánh/trường. Tạo trung tâm 'Trung tâm Anh ngữ Sao Mai' thành công (POST /crm/onboarding/create-center 200, 712 ms, chậm nhất phiên). Không thể tạo trường 'Sao Mai – Cầu Giấy': trang Trường học của trung tâm chỉ cho link trường đã có trên app Flyer ('Bạn cần là quản lý (Owner hoặc Admin) của trường'); API không có endpoint tạo trường (POST /crm/settings/schools 405, POST /crm/schools 404). Trước khi onboarding xong, trang gọi 4 API trả 400 'Missing center ID' và WebSocket wss://staging-api.flyer.us 404 trên production. |
| 2 | Cài đặt: nguồn, nhãn, người dùng/vai trò | Một phần | Nhãn 'Ưu tiên tháng 11' tạo được qua API (POST /crm/tags 201, id dbk0t0oa83dgtcknkl2g) và dùng được trong form khách hàng. Nguồn: hệ thống đã seed sẵn Facebook, Google, Zalo, TikTok, Giới thiệu (code referral), Website; trang Cài đặt Nguồn là mock tĩnh, danh sách hiển thị (GOOGLE_ADS, REFERRAL 'Referral') khác API, nút Create New tạo 'GIOI_THIEU' chỉ lưu phía trình duyệt, không có request và không xuất hiện trong form khách hàng. Vai trò: 'Create Role' trả toast 'Role created (Mock)', vai trò 'Lễ tân' không được lưu. Người dùng: không có chức năng mời theo email/SĐT, chỉ có 'Assign Role' cho người đã trong trung tâm và trang Yêu cầu tham gia (người khác phải xin vào); vì vậy không mời qc-test+saomai@example.com, không có mail nào được gửi. Trang Tenant Settings hiển thị 'Vibe English Center' cố định, không gọi API. Toàn bộ trang cài đặt hiển thị tiếng Anh dù chọn ngôn ngữ VI. |
| 3 | Tuyển sinh: 6 lead, kéo giai đoạn, chuyển đổi 4, thua 1, kiểm tra trùng SĐT | Một phần | Tạo 6 khách hàng qua drawer (POST /crm/customers 201, 126 đến 163 ms) với SĐT 09000000 11 đến 16, nguồn Facebook/Zalo/Giới thiệu, kênh, phụ huynh, giá trị cơ hội, nhãn. Form không có trường 'Khoá học quan tâm' dù API có course_of_interest và file mẫu import có cột này; đã ghi khoá vào Chiến dịch và Ghi chú. Kiểm tra trùng: POST /customers/check-duplicate chạy khi rời ô SĐT, cảnh báo inline 'Số điện thoại đã tồn tại trong hệ thống'; lưu vẫn bị chặn ở server (409 'Tài nguyên đã tồn tại', thông báo chung chung). Kéo giai đoạn qua thanh giai đoạn trong drawer hoạt động (PATCH /kanban-position 200, 121 đến 148 ms), lịch sử ghi 'đã kéo thẻ từ Mới (new) → Tiềm năng (lead)'. Thua: hộp thoại chỉ xác nhận, không có ô lý do; lý do phải ghi bằng Ghi chú hoạt động nhưng POST /crm/interactions trả 400 'missing field completed_at' nên không lưu được. Chuyển đổi: nút 'Thắng (Convert)' chỉ đổi trạng thái sang Thành công (PATCH status_id), không tạo học viên; tab Học sinh chỉ link được tài khoản Flyer khớp SĐT/email hoặc học sinh của trường đã link, trung tâm chưa có trường nên không link được ai. Thẻ thắng/thua biến mất khỏi kanban, chỉ xem lại được qua bộ lọc Trạng thái = Thành công/Thất bại. |
| 4 | Học viên: thêm 10 qua UI, import Excel, sửa, tìm kiếm/lọc | Một phần | Sau khi liên kết trường, trang Học sinh của CRM liệt kê đủ 14 học sinh với lớp đang học (GET /crm/learning/students total_count 14), bộ lọc Tất cả/Đã link/Chưa link và nút 'Link vào lead' cho từng em; học sinh phải được tạo trên teacher.flyer.us (CRM không có form tạo học viên). Import khách hàng của CRM vẫn hỏng (nút 'Import 5 KH' không gửi request); sửa, tìm kiếm, lọc khách hàng hoạt động như đã ghi. Chưa thực hiện link 4 lead đã thắng với học sinh tương ứng để tránh thao tác thêm trên dữ liệu QC; nút có sẵn. |
| 5 | Lớp học: 2 lớp, lịch, giáo viên, ghi danh 7 + 7, thời khoá biểu | Một phần | Lớp không tạo được trong CRM; đã tạo trên teacher.flyer.us: Starters 1A (Pre A1 Starters, Class 598595, mã CL26946) trong onboarding và Movers 1A (A1 Movers, Class 598597, mã CL11091) qua 'Tạo lớp mới'; 14 tài khoản học sinh dùng thử tạo ở trang Học sinh rồi 'Chuyển học sinh' vào lớp 7 + 7 (mutation PartnerViewerMoveClassStudent). CRM Lớp học hiển thị đúng 2 lớp, 7 học sinh mỗi lớp cùng số liệu học tập (0 bài). Không có nơi đặt lịch học Thứ 2/4 18:00-19:30 hay Thứ 3/5, không có giáo viên riêng (chủ trường là giáo viên), không có thời khoá biểu ở cả hai phía. Tạo học sinh trong onboarding teacher thất bại im lặng (USERNAME_ALREADY_EXIST sau 5 lần thử hậu tố); phải dùng form Học sinh có ô Tên đăng nhập. |
| 6 | Điểm danh: 2 buổi/lớp, sửa, lịch sử | Lỗi | Sau khi có trường và 2 lớp, Điểm danh hiển thị 6 tab (Hôm nay, Chưa điểm danh, Theo lớp, Theo học viên, Thống kê tháng, Đơn xin nghỉ) với cột Có mặt/Muộn/Vắng/Có phép và chọn được lớp, nhưng mọi tab đều rỗng: 'Tháng 11/2026 · 0 buổi học · 7 học viên', 'Không có buổi học nào trong ngày này'. Buổi học phải sinh từ lịch học của lớp mà không có màn hình nào tạo lịch ở CRM (không có nút Tạo buổi, các route /crm/classes, /schedules, /sessions đều 404) lẫn teacher web (/schedule, /calendar, class detail không có tab lịch). API GET /crm/classes/{id}/attendance/sessions trả rỗng, POST trả 405. Không thể điểm danh, sửa hay xem lịch sử. |
| 7 | Học phí: phí tháng 11, 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR | Một phần | Tạo học phí theo lớp hoạt động: 'Học phí tháng 11/2026' 1.500.000 đ cho 7 học sinh Starters 1A và 1.800.000 đ cho 7 học sinh Movers 1A, hạn 10/11/2026 (POST /crm/tuitions, 197 và 238 ms, mỗi lần 7 khoản, mã FLY…); thêm 'Phí giáo trình Starters' 250.000 đ hạn 25/10/2026 để kiểm tra Quá hạn. Thu tiền từ danh sách (POST /tuitions/{id}/pay): 5 khoản thu đủ (3 tiền mặt, 2 chuyển khoản) và 1 thu một phần 500.000 đ cho Trần Minh Anh, trạng thái và tổng cập nhật đúng (Đã đóng 5, Chưa đóng 16, Quá hạn 7, tổng 24.850.000 đ). Trang Thu học phí tại quầy: chọn học viên, chọn khoản, Khách đưa, hình thức Tiền mặt/Chuyển khoản/Quẹt thẻ/QR, lập phiếu PT-86675-202611-0001 (POST /tuition-collect/receipts 145 ms), thống kê trong ngày đúng 1.800.000 đ. Hạn chế: thu tiền từ danh sách không sinh phiếu thu nên 6 lần thu đầu không có phiếu; tab Phiếu thu đếm 'Đã xác nhận 1' nhưng bảng ghi 'Không có phiếu thu nào', không mở được chi tiết hay bản in phiếu; QR và chuyển khoản tại quầy bị vô hiệu kèm hướng dẫn 'Trường chưa có tài khoản nhận tiền' nên không gọi được /v3/payment/qr (không thêm tài khoản ngân hàng giả); nhấn vào dòng hoá đơn không mở chi tiết; nút Nhắc học phí vẫn vô hiệu. |
| 8 | Tổng quan/báo cáo: đối chiếu số liệu | Một phần | Số liệu khớp phần lớn (xem numbers_check): Tổng thu 8,6 tr = 3×1,5 tr + 2×1,8 tr + 0,5 tr; Đăng ký mới 14; Nhân sự 1; Đăng ký mới nhất liệt kê đúng 10 học sinh theo lớp; Hoạt động gần đây ghi từng hoá đơn. Sai lệch: 'Học viên đang học' và 'Lớp đang học' vẫn 0 dù có 14 học sinh trong 2 lớp (active_students/active_classes = 0, có lẽ tính theo buổi học nên bằng 0 khi không có lịch); vẫn không có KPI phễu tuyển sinh; kanban cộng giá trị thẻ thắng/thua đã ẩn. |
| 9 | Mobile 390×844 | Chạy được | Dashboard, Khách hàng, drawer khách hàng, Học sinh, Điểm danh, Học phí, Thu học phí đều không tràn ngang (scrollWidth = 390). Sidebar thu thành nút mở ngăn kéo; kanban hiển thị một cột và cuộn ngang trong bảng; bộ lọc xếp 2 cột. Chưa kiểm tra được màn hình điểm danh/học phí có dữ liệu vì bị chặn ở bước 5 đến 7. Chụp lại sau khi có dữ liệu: Học phí, Điểm danh, Học sinh, Lớp học ở 390 px vẫn không tràn ngang. |
| 10 | Vệ sinh dữ liệu | Chạy được | Dữ liệu QC để nguyên ở cả hai phía (CRM và teacher.flyer.us). Danh sách đầy đủ ở created_vi. Không mở trường, khách hàng hay tenant nào khác; không mời ai, không gửi email/SMS (học sinh QC không có SĐT/email). |
| 11 | Tạo trường trên teacher.flyer.us rồi liên kết vào CRM | Một phần | Đăng nhập teacher.flyer.us bằng cùng tài khoản (GraphQL LoginViewLogInWithPasswordMutation 417 ms) vào onboarding 'nhận 7 ngày trải nghiệm': chọn Quản lý trung tâm; form Tên/Họ, Trường (chỉ gợi ý trường đã có, gõ tên mới phải chọn 'Khác' rồi nhập 'Tên trường' = 'Sao Mai – Cầu Giấy'), Số lượng giáo viên 1-20, Số lượng học sinh 1-50, chương trình Cambridge; bước 'Bạn biết chúng tôi qua' chọn Khác; bước tạo lớp đầu tiên Starters 1A (Pre A1 Starters); bước mời học sinh (tạo tài khoản theo tên) thất bại im lặng vì trùng tên đăng nhập tự sinh, bỏ qua. Kết quả: teacher profile 68156, gói dùng thử 7 ngày (hết 09/11/2026), vai trò Chủ trường, trường school_id 86675 nhưng tên là "Thị Lan Nguyễn's school" (tên đã nhập bị bỏ qua, không có chỗ đổi tên ở Cài đặt trường). Về CRM, Cài đặt → Trường học của trung tâm hiện trường với nút Link; bấm Link (POST /crm/settings/schools/86675/link 109 ms, link_state linked_here), GET /crm/me/accessible-schools trả về trường; các trang Lớp học, Học sinh, Điểm danh, Học phí, Thanh toán mở khoá ngay. Lộ trình này không được CRM gợi ý ở bất kỳ màn hình bị chặn nào. |
Số liệu trên màn so với số đã nhập
| Chỉ số | Đã nhập | Hiển thị | Khớp |
|---|---|---|---|
| Tổng khách hàng (GET /crm/customers total_count) | 6 | 6 | Khớp |
| Khách hàng Thành công (lọc Trạng thái) | 4 | 4 | Khớp |
| Khách hàng Thất bại | 1 | 1 | Khớp |
| Khách hàng đang theo dõi trên kanban (cột Tiềm năng) | 1 | 1 | Khớp |
| Khách hàng import thêm | 5 | 0 | Lệch |
| Tổng cột kanban 'Mới' (0 cơ hội) | 0 đ | 5,200,000 đ | Lệch |
| Tổng cột kanban 'Học thử' (0 cơ hội) | 0 đ | 19,400,000 đ | Lệch |
| Sale summary cold_customers | 1 (Vũ Đức Minh chưa có hoạt động) | 1 | Khớp |
| Nguồn trong form khách hàng sau khi tạo GIOI_THIEU | 7 | 6 | Lệch |
| Vai trò sau khi tạo 'Lễ tân' | 4 | 3 | Lệch |
| Học sinh trên CRM sau khi link trường (GET /crm/learning/students) | 14 | 14 | Khớp |
| Lớp và sĩ số trên CRM Lớp học | Starters 1A 7, Movers 1A 7 | Starters 1A 7, Movers 1A 7 | Khớp |
| Tổng học phí (tuitions/stats) | 7×1,5 tr + 7×1,8 tr + 7×0,25 tr = 24.850.000 đ | 24.850.000 đ | Khớp |
| Khoản Đã đóng / Chưa đóng / Quá hạn | 5 / 16 (gồm 1 thu một phần) / 7 | 5 / 16 / 7 | Khớp |
| Dashboard Tổng thu (học phí) tháng này | 8.600.000 đ (3×1,5 + 2×1,8 + 0,5) | 8,6 tr | Khớp |
| Dashboard Đăng ký mới | 14 | 14 | Khớp |
| Dashboard Nhân sự | 1 | 1 | Khớp |
| Dashboard Học viên đang học / Lớp đang học | 14 / 2 | 0 / 0 | Lệch |
| Phiếu thu sau 7 lần thu tiền | 7 | 1 | Lệch |
| Hôm nay tại quầy ĐÃ THU | 10.400.000 đ (8,6 tr + 1,8 tr) | 1.800.000 đ | Lệch |
| Buổi học Điểm danh tháng 11 | 4 buổi (2 mỗi lớp) | 0 | Lệch |
Lỗi phát hiện
| Lỗi | Mức |
|---|---|
| Trung tâm mới không thể tạo chi nhánh/trường trong CRM và CRM không có CTA hay hướng dẫn nào: các trang Lớp học, Điểm danh, Học phí, Thanh toán chỉ ghi 'Trung tâm chưa có trường nào'. Lộ trình thật là đăng nhập teacher.flyer.us, hoàn tất onboarding giáo viên (tạo trường + lớp), rồi về Cài đặt → Trường học của trung tâm bấm Link; người dùng không thể tự suy ra. | Cao |
| Điểm danh không dùng được: buổi học phải sinh từ lịch học nhưng không có màn hình tạo lịch/buổi ở CRM (không nút tạo, POST /crm/classes/{id}/attendance/sessions 405) lẫn teacher web (không tab lịch học, /schedule 404); mọi tab Điểm danh rỗng dù lớp có 7 học viên. | Cao |
| Onboarding teacher.flyer.us bỏ qua 'Tên trường' đã nhập, trường được tạo với tên mặc định "Thị Lan Nguyễn's school" và không có chỗ đổi tên trong Cài đặt trường; tên này lan sang toàn bộ CRM (bộ lọc chi nhánh, học phí, phiếu thu PT-86675-…). | Cao |
| Import khách hàng: preview đúng (5/5 hợp lệ) nhưng nút 'Import 5 KH' không gửi request, không toast, không lỗi; thử 4 lần với .xlsx và .csv, có và không chọn nhân viên phân bổ. | Cao |
| Không lưu được Ghi chú hoạt động trong hồ sơ khách hàng: POST /api/v3/crm/interactions trả 400 'missing field completed_at' (frontend không gửi trường bắt buộc), toast 'Không thể lưu hoạt động'. | Cao |
| Trang Vai trò: 'Create Role' chỉ là mock (toast 'Role created (Mock)'), vai trò 'Lễ tân' không được lưu, danh sách giữ nguyên 3 vai trò mặc định. | Cao |
| Trang Cài đặt Nguồn và Tenant Settings là giao diện tĩnh: danh sách nguồn hiển thị (GOOGLE_ADS, REFERRAL 'Referral') khác dữ liệu API (google, referral 'Giới thiệu'); 'Create New' tạo GIOI_THIEU chỉ lưu phía trình duyệt, không có request và không dùng được trong form khách hàng; Tenant Settings hiển thị 'Vibe English Center' thay vì tên trung tâm vừa tạo. | Cao |
| Teacher onboarding bước 'Mời học sinh' tạo tài khoản theo tên sinh tên đăng nhập trùng (minhanh, baongoc…), thử hậu tố 2 đến 5 rồi dừng, không báo lỗi, form đứng yên; cần dùng form Học sinh có ô Tên đăng nhập. | Vừa |
| Thu tiền từ danh sách Học phí (POST /tuitions/{id}/pay) không sinh phiếu thu: 6 lần thu 8,6 tr không có phiếu, 'Hôm nay tại quầy' ghi 0 đ; chỉ trang Thu học phí tại quầy mới lập phiếu PT-… | Vừa |
| Tab Phiếu thu đếm 'Đã xác nhận 1 / Tất cả 1' nhưng bảng hiển thị 'Không có phiếu thu nào'; không có thao tác xem chi tiết hay in phiếu thu, nhấn dòng hoá đơn cũng không mở chi tiết. | Vừa |
| Dashboard 'Học viên đang học' và 'Lớp đang học' = 0 dù trường có 14 học sinh trong 2 lớp (active_students/active_classes phụ thuộc buổi học), trong khi 'Đăng ký mới' = 14. | Vừa |
| Đánh dấu Thua không có ô lý do thua; chỉ có hộp thoại xác nhận, không lưu được lý do (ghi chú cũng lỗi 400). | Vừa |
| 'Thắng (Convert)' chỉ đổi trạng thái sang Thành công, không tạo học viên và không mở luồng ghi danh; link học sinh đòi hỏi tài khoản Flyer khớp SĐT/email hoặc học sinh của trường đã link nên không chuyển đổi được lead nào. | Vừa |
| Kanban ẩn thẻ Thành công/Thất bại nhưng vẫn cộng giá trị vào tổng cột: 'Mới: 0 cơ hội · 5,200,000 đ', 'Học thử: 0 cơ hội · 19,400,000 đ'. | Vừa |
| Form khách hàng thiếu trường 'Khoá học quan tâm' dù API có course_of_interest và file mẫu import có cột này; nhân viên phải ghi vào Chiến dịch/Ghi chú. | Vừa |
| Dashboard không có KPI phễu tuyển sinh (lead mới, tỷ lệ chuyển đổi, giá trị pipeline) dù đã có 6 lead, 4 thắng, 1 thua. | Vừa |
| Không có cách mời nhân viên (email/SĐT) vào trung tâm; chỉ có 'Assign Role' cho người đã vào và trang Yêu cầu tham gia. | Vừa |
| Mỗi lần điều hướng, ứng dụng gọi lặp /crm/me, /me/permissions, /me/accessible-schools, /customers?limit=1, /me/notifications/unread-count (mỗi endpoint 120 đến 170 lần trong phiên) và POST /pipelines/switch 46 lần; thời gian tới networkidle của mỗi trang 3,5 đến 5,5 s dù API đơn lẻ chỉ 100 đến 400 ms. | Vừa |
| Trên production, frontend mở WebSocket tới wss://staging-api.flyer.us/ws/notifications và nhận 404 liên tục; trước khi onboarding xong, dashboard gọi 4 API trả 400 'Missing center ID'/'Missing CRM sale profile ID'. | Vừa |
| Thanh toán QR/chuyển khoản tại quầy bị vô hiệu cho tới khi đăng ký tài khoản ngân hàng của trường (có hướng dẫn rõ 'Trường chưa có tài khoản nhận tiền', nút Thêm tài khoản); /v3/payment/qr không kiểm tra được. Tạo học phí ghi 'gửi nhắc tới phụ huynh ngay khi tạo' và không thể xoá, không có bước xem trước. | Thấp |
| Form tạo học sinh trên teacher.flyer.us: ô nhãn 'Họ' bind vào firstName và 'Tên' vào lastName; xác nhận đi qua hộp thoại 'nâng cấp tài khoản… tính phí: 0' dễ gây hiểu nhầm; trang Học sinh mặc định lọc 30 ngày nên tổng số hiển thị 0 ngay sau khi tạo. | Thấp |
| Lẫn ngôn ngữ ở giao diện VI: toàn bộ trang cài đặt bằng tiếng Anh (Tenant Settings, System Users, Roles & Permissions, Sources, Channels, Tags, Create New, Save), nút 'Tạo center', mức ưu tiên hiện mã 'high', ngày 'Nov 2', ngày tạo nhãn 'Nov 1, 2026' lệch múi giờ (tạo lúc 11:16 ngày 02/11 giờ VN), cột Giá trị dự kiến '5200000.00'. | Thấp |
| Import .csv cảnh báo sai định dạng ngày sinh với 12/03/2018 và 05/07/2017 (hợp lệ DD/MM/YYYY) trong khi 22/11/2016 không bị cảnh báo. | Thấp |
| Lưu khách hàng trùng SĐT bị chặn đúng (409) nhưng toast chỉ ghi 'Tài nguyên đã tồn tại', không nói rõ là SĐT trùng và không gợi ý mở hồ sơ cũ (cảnh báo inline thì đúng). | Thấp |
| Trang Placement Tests hiển thị 'Dữ liệu mẫu' với khách hàng không thuộc tenant (Nguyễn Thị Mai) và tiêu đề tiếng Anh; API trả rỗng. | Thấp |
| Trong drawer khách hàng, nút 'Lưu trữ' và 'Lưu' đặt cạnh nhau cùng tiền tố, dễ bấm nhầm khi thao tác nhanh. | Thấp |
Tốc độ
| Màn hoặc API | ms | Ghi chú |
|---|---|---|
| POST b2c.truongso.net/api/v3/crm/onboarding/create-center | 712 | 200 · 1 lần |
| POST teacher.flyer.us/api/v2/graphql LoginViewLogInWithPasswordMutation | 417 | 200 · 1 lần |
| POST b2c.truongso.net/api/v3/auth/login | 340 | 201 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/tuition-collect/due-students | 202 | 200x5 · 5 lần |
| POST b2c.truongso.net/api/v3/crm/tuitions | 197 | 200x3 · 3 lần |
| GET b2c.truongso.net/api/v3/crm/join-requests | 189 | 200 · 1 lần |
| POST teacher.flyer.us/api/v2/graphql ViewerCreateTeacherProfileMutation | 174 | 200 · 1 lần |
| POST teacher.flyer.us/api/v2/graphql ViewerPartnerCreateClass | 171 | 200x2 · 2 lần |
| GET b2c.truongso.net/api/v3/crm/classes/{id}/sessions | 164 | 404 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/classes/{id}/schedule | 160 | 404 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/class-sessions | 156 | 404 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/learning/classes/{id} | 150 | 404 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/schools/{id}/schedules | 150 | 404 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/customers/{id} | 148 | 200x53 · 53 lần |
| GET b2c.truongso.net/api/v3/crm/sources | 148 | 200x56 · 56 lần |
| POST b2c.truongso.net/api/v3/crm/tuition-collect/receipts | 145 | 200 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/customers/{id}/assignments | 141 | 200x28 · 28 lần |
| POST b2c.truongso.net/api/v3/crm/customers | 140 | 201x6 409 · 7 lần |
| GET b2c.truongso.net/api/v3/crm/placement-tests | 140 | 200 · 1 lần |
| GET b2c.truongso.net/api/v3/crm/customers | 139 | 200x214 400x2 401x2 · 218 lần |
| PATCH b2c.truongso.net/api/v3/crm/customers/{id} | 139 | 200x8 · 8 lần |
| GET b2c.truongso.net/api/v3/crm/me | 139 | 200x175 401x6 · 181 lần |
| GET b2c.truongso.net/api/v3/crm/view-configs/customer_list | 139 | 200x46 · 46 lần |
| POST teacher.flyer.us/api/v2/graphql PartnerViewerRollupLowTeachers | 137 | 200 · 1 lần |
| POST teacher.flyer.us/api/v2/graphql PartnerViewerRollupTeachers | 137 | 200 · 1 lần |
Từng việc kèm ảnh
1. Đăng nhập lần đầu và onboarding Một phần
Đăng nhập bằng SĐT + mật khẩu thành công (POST /api/v3/auth/login 201, 340 ms), chuyển tới /vi/onboarding. Onboarding chỉ có 2 bước: Họ/Tên và Tên trung tâm; nút ghi 'Tạo center' (lẫn tiếng Anh). Không có bước tạo chi nhánh/trường. Tạo trung tâm 'Trung tâm Anh ngữ Sao Mai' thành công (POST /crm/onboarding/create-center 200, 712 ms, chậm nhất phiên). Không thể tạo trường 'Sao Mai – Cầu Giấy': trang Trường học của trung tâm chỉ cho link trường đã có trên app Flyer ('Bạn cần là quản lý (Owner hoặc Admin) của trường'); API không có endpoint tạo trường (POST /crm/settings/schools 405, POST /crm/schools 404). Trước khi onboarding xong, trang gọi 4 API trả 400 'Missing center ID' và WebSocket wss://staging-api.flyer.us 404 trên production.



2. Cài đặt: nguồn, nhãn, người dùng/vai trò Một phần
Nhãn 'Ưu tiên tháng 11' tạo được qua API (POST /crm/tags 201, id dbk0t0oa83dgtcknkl2g) và dùng được trong form khách hàng. Nguồn: hệ thống đã seed sẵn Facebook, Google, Zalo, TikTok, Giới thiệu (code referral), Website; trang Cài đặt Nguồn là mock tĩnh, danh sách hiển thị (GOOGLE_ADS, REFERRAL 'Referral') khác API, nút Create New tạo 'GIOI_THIEU' chỉ lưu phía trình duyệt, không có request và không xuất hiện trong form khách hàng. Vai trò: 'Create Role' trả toast 'Role created (Mock)', vai trò 'Lễ tân' không được lưu. Người dùng: không có chức năng mời theo email/SĐT, chỉ có 'Assign Role' cho người đã trong trung tâm và trang Yêu cầu tham gia (người khác phải xin vào); vì vậy không mời qc-test+saomai@example.com, không có mail nào được gửi. Trang Tenant Settings hiển thị 'Vibe English Center' cố định, không gọi API. Toàn bộ trang cài đặt hiển thị tiếng Anh dù chọn ngôn ngữ VI.



3. Tuyển sinh: 6 lead, kéo giai đoạn, chuyển đổi 4, thua 1, kiểm tra trùng SĐT Một phần
Tạo 6 khách hàng qua drawer (POST /crm/customers 201, 126 đến 163 ms) với SĐT 09000000 11 đến 16, nguồn Facebook/Zalo/Giới thiệu, kênh, phụ huynh, giá trị cơ hội, nhãn. Form không có trường 'Khoá học quan tâm' dù API có course_of_interest và file mẫu import có cột này; đã ghi khoá vào Chiến dịch và Ghi chú. Kiểm tra trùng: POST /customers/check-duplicate chạy khi rời ô SĐT, cảnh báo inline 'Số điện thoại đã tồn tại trong hệ thống'; lưu vẫn bị chặn ở server (409 'Tài nguyên đã tồn tại', thông báo chung chung). Kéo giai đoạn qua thanh giai đoạn trong drawer hoạt động (PATCH /kanban-position 200, 121 đến 148 ms), lịch sử ghi 'đã kéo thẻ từ Mới (new) → Tiềm năng (lead)'. Thua: hộp thoại chỉ xác nhận, không có ô lý do; lý do phải ghi bằng Ghi chú hoạt động nhưng POST /crm/interactions trả 400 'missing field completed_at' nên không lưu được. Chuyển đổi: nút 'Thắng (Convert)' chỉ đổi trạng thái sang Thành công (PATCH status_id), không tạo học viên; tab Học sinh chỉ link được tài khoản Flyer khớp SĐT/email hoặc học sinh của trường đã link, trung tâm chưa có trường nên không link được ai. Thẻ thắng/thua biến mất khỏi kanban, chỉ xem lại được qua bộ lọc Trạng thái = Thành công/Thất bại.



4. Học viên: thêm 10 qua UI, import Excel, sửa, tìm kiếm/lọc Một phần
Sau khi liên kết trường, trang Học sinh của CRM liệt kê đủ 14 học sinh với lớp đang học (GET /crm/learning/students total_count 14), bộ lọc Tất cả/Đã link/Chưa link và nút 'Link vào lead' cho từng em; học sinh phải được tạo trên teacher.flyer.us (CRM không có form tạo học viên). Import khách hàng của CRM vẫn hỏng (nút 'Import 5 KH' không gửi request); sửa, tìm kiếm, lọc khách hàng hoạt động như đã ghi. Chưa thực hiện link 4 lead đã thắng với học sinh tương ứng để tránh thao tác thêm trên dữ liệu QC; nút có sẵn.



5. Lớp học: 2 lớp, lịch, giáo viên, ghi danh 7 + 7, thời khoá biểu Một phần
Lớp không tạo được trong CRM; đã tạo trên teacher.flyer.us: Starters 1A (Pre A1 Starters, Class 598595, mã CL26946) trong onboarding và Movers 1A (A1 Movers, Class 598597, mã CL11091) qua 'Tạo lớp mới'; 14 tài khoản học sinh dùng thử tạo ở trang Học sinh rồi 'Chuyển học sinh' vào lớp 7 + 7 (mutation PartnerViewerMoveClassStudent). CRM Lớp học hiển thị đúng 2 lớp, 7 học sinh mỗi lớp cùng số liệu học tập (0 bài). Không có nơi đặt lịch học Thứ 2/4 18:00-19:30 hay Thứ 3/5, không có giáo viên riêng (chủ trường là giáo viên), không có thời khoá biểu ở cả hai phía. Tạo học sinh trong onboarding teacher thất bại im lặng (USERNAME_ALREADY_EXIST sau 5 lần thử hậu tố); phải dùng form Học sinh có ô Tên đăng nhập.



6. Điểm danh: 2 buổi/lớp, sửa, lịch sử Lỗi
Sau khi có trường và 2 lớp, Điểm danh hiển thị 6 tab (Hôm nay, Chưa điểm danh, Theo lớp, Theo học viên, Thống kê tháng, Đơn xin nghỉ) với cột Có mặt/Muộn/Vắng/Có phép và chọn được lớp, nhưng mọi tab đều rỗng: 'Tháng 11/2026 · 0 buổi học · 7 học viên', 'Không có buổi học nào trong ngày này'. Buổi học phải sinh từ lịch học của lớp mà không có màn hình nào tạo lịch ở CRM (không có nút Tạo buổi, các route /crm/classes, /schedules, /sessions đều 404) lẫn teacher web (/schedule, /calendar, class detail không có tab lịch). API GET /crm/classes/{id}/attendance/sessions trả rỗng, POST trả 405. Không thể điểm danh, sửa hay xem lịch sử.



7. Học phí: phí tháng 11, 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR Một phần
Tạo học phí theo lớp hoạt động: 'Học phí tháng 11/2026' 1.500.000 đ cho 7 học sinh Starters 1A và 1.800.000 đ cho 7 học sinh Movers 1A, hạn 10/11/2026 (POST /crm/tuitions, 197 và 238 ms, mỗi lần 7 khoản, mã FLY…); thêm 'Phí giáo trình Starters' 250.000 đ hạn 25/10/2026 để kiểm tra Quá hạn. Thu tiền từ danh sách (POST /tuitions/{id}/pay): 5 khoản thu đủ (3 tiền mặt, 2 chuyển khoản) và 1 thu một phần 500.000 đ cho Trần Minh Anh, trạng thái và tổng cập nhật đúng (Đã đóng 5, Chưa đóng 16, Quá hạn 7, tổng 24.850.000 đ). Trang Thu học phí tại quầy: chọn học viên, chọn khoản, Khách đưa, hình thức Tiền mặt/Chuyển khoản/Quẹt thẻ/QR, lập phiếu PT-86675-202611-0001 (POST /tuition-collect/receipts 145 ms), thống kê trong ngày đúng 1.800.000 đ. Hạn chế: thu tiền từ danh sách không sinh phiếu thu nên 6 lần thu đầu không có phiếu; tab Phiếu thu đếm 'Đã xác nhận 1' nhưng bảng ghi 'Không có phiếu thu nào', không mở được chi tiết hay bản in phiếu; QR và chuyển khoản tại quầy bị vô hiệu kèm hướng dẫn 'Trường chưa có tài khoản nhận tiền' nên không gọi được /v3/payment/qr (không thêm tài khoản ngân hàng giả); nhấn vào dòng hoá đơn không mở chi tiết; nút Nhắc học phí vẫn vô hiệu.



8. Tổng quan/báo cáo: đối chiếu số liệu Một phần
Số liệu khớp phần lớn (xem numbers_check): Tổng thu 8,6 tr = 3×1,5 tr + 2×1,8 tr + 0,5 tr; Đăng ký mới 14; Nhân sự 1; Đăng ký mới nhất liệt kê đúng 10 học sinh theo lớp; Hoạt động gần đây ghi từng hoá đơn. Sai lệch: 'Học viên đang học' và 'Lớp đang học' vẫn 0 dù có 14 học sinh trong 2 lớp (active_students/active_classes = 0, có lẽ tính theo buổi học nên bằng 0 khi không có lịch); vẫn không có KPI phễu tuyển sinh; kanban cộng giá trị thẻ thắng/thua đã ẩn.



9. Mobile 390×844 Chạy được
Dashboard, Khách hàng, drawer khách hàng, Học sinh, Điểm danh, Học phí, Thu học phí đều không tràn ngang (scrollWidth = 390). Sidebar thu thành nút mở ngăn kéo; kanban hiển thị một cột và cuộn ngang trong bảng; bộ lọc xếp 2 cột. Chưa kiểm tra được màn hình điểm danh/học phí có dữ liệu vì bị chặn ở bước 5 đến 7. Chụp lại sau khi có dữ liệu: Học phí, Điểm danh, Học sinh, Lớp học ở 390 px vẫn không tràn ngang.



10. Vệ sinh dữ liệu Chạy được
Dữ liệu QC để nguyên ở cả hai phía (CRM và teacher.flyer.us). Danh sách đầy đủ ở created_vi. Không mở trường, khách hàng hay tenant nào khác; không mời ai, không gửi email/SMS (học sinh QC không có SĐT/email).
11. Tạo trường trên teacher.flyer.us rồi liên kết vào CRM Một phần
Đăng nhập teacher.flyer.us bằng cùng tài khoản (GraphQL LoginViewLogInWithPasswordMutation 417 ms) vào onboarding 'nhận 7 ngày trải nghiệm': chọn Quản lý trung tâm; form Tên/Họ, Trường (chỉ gợi ý trường đã có, gõ tên mới phải chọn 'Khác' rồi nhập 'Tên trường' = 'Sao Mai – Cầu Giấy'), Số lượng giáo viên 1-20, Số lượng học sinh 1-50, chương trình Cambridge; bước 'Bạn biết chúng tôi qua' chọn Khác; bước tạo lớp đầu tiên Starters 1A (Pre A1 Starters); bước mời học sinh (tạo tài khoản theo tên) thất bại im lặng vì trùng tên đăng nhập tự sinh, bỏ qua. Kết quả: teacher profile 68156, gói dùng thử 7 ngày (hết 09/11/2026), vai trò Chủ trường, trường school_id 86675 nhưng tên là "Thị Lan Nguyễn's school" (tên đã nhập bị bỏ qua, không có chỗ đổi tên ở Cài đặt trường). Về CRM, Cài đặt → Trường học của trung tâm hiện trường với nút Link; bấm Link (POST /crm/settings/schools/86675/link 109 ms, link_state linked_here), GET /crm/me/accessible-schools trả về trường; các trang Lớp học, Học sinh, Điểm danh, Học phí, Thanh toán mở khoá ngay. Lộ trình này không được CRM gợi ý ở bất kỳ màn hình bị chặn nào.





























3.197 lượt gọi (CRM REST b2c.truongso.net/api/v3 và GraphQL teacher.flyer.us/api/v2, gộp theo operationName), 156 endpoint; ms = trung vị, ms_max = lớn nhất. CRM: chậm nhất create-center 712 ms, learning/classes 659 ms, accessible-schools 903 ms (1 lượt), còn lại 90 đến 250 ms; thao tác ghi tuitions 197/238 ms, pay 106 đến 145 ms, receipts 145 ms, link 109 ms. Teacher: PartnerViewerStudentsCreate 3.572 ms (14 tài khoản), nhiều truy vấn 1.000 đến 1.070 ms cùng lúc khi mở trang Học sinh. Lỗi 4xx: 401 trước đăng nhập, 400 'Missing center ID' trước onboarding, 409 trùng SĐT (đúng), 400 POST /crm/interactions (lỗi), 404/405 khi dò endpoint tạo trường và tạo buổi học (không tồn tại), teacher GET /api/v4/teacher/school/settings 404x4. Không có 5xx. Log: ~/qc-ts/b2c/_netlog.jsonl (đã che mật khẩu, JWT).
Dữ liệu QC đã tạo (có thể xoá)
- Trung tâm 'Trung tâm Anh ngữ Sao Mai' (center_id dbk0rboa83dnlksnk4p0, code trung-tam-anh-ngu-sao-mai), sale_profile_id 24 'Thị Lan Nguyễn' (họ Nguyễn, tên Thị Lan), role_id owner dbk0rboa83dgd2knk4pg; pipeline Mặc định dbk0rboa83dgd2knk4ug do hệ thống seed
- Nhãn 'Ưu tiên tháng 11' #f59e0b (tag id dbk0t0oa83dgtcknkl2g)
- Khách hàng 1: Trần Minh Anh, 0900000011, id dbk0v28a83dgd2knkp00, CT-ec046c40e9ad, Facebook/Messenger, Học thử, Thành công
- Khách hàng 2: Lê Bảo Ngọc, 0900000012, id dbk0v58a83dgtcknkp6g, CT-0f7b853c2543, Zalo/Zalo OA, Học thử, Thành công
- Khách hàng 3: Phạm Quốc Huy, 0900000013, id dbk0v8ga83dgnksnkp90, CT-c84da9e48f5e, Giới thiệu/Điện thoại, Học thử, Thành công
- Khách hàng 4: Hoàng Gia Hân, 0900000014, id dbk0vbga83dgusknkpdg, CT-169ad932147d, Facebook/Messenger, Học thử, Thành công
- Khách hàng 5: Vũ Đức Minh, 0900000015, id dbk0veoa83dh7c4nkpkg, CT-5bb1e77e44ca, Zalo/Zalo OA, Tiềm năng, Đang theo dõi; đã sửa email vuducminh.ph@example.com, địa chỉ 18 Nguyễn Khánh Toàn
- Khách hàng 6: Đặng Thu Hà, 0900000016, id dbk0vhoa83dgnksnkppg, CT-0b06f3efc9ac, Giới thiệu/Điện thoại, Mới, Thất bại
- Không được lưu (chỉ phía trình duyệt/mock): nguồn GIOI_THIEU 'Giới thiệu' ở trang Cài đặt Nguồn; vai trò 'Lễ tân' (le_tan); 5 dòng import (Nguyễn Hải Đăng, Trịnh Khánh Linh, Bùi Minh Khang, Ngô Phương Thảo, Đỗ Tuấn Kiệt, SĐT 09000000 21 đến 25) không vào hệ thống; ghi chú 'Lý do thua' lỗi 400
- teacher.flyer.us: teacher profile TeacherProfile/68156 (Thị Lan Nguyễn, gói dùng thử 7 ngày tới 09/11/2026), trường school_id 86675 "Thị Lan Nguyễn's school" (vai trò Chủ trường, OWNER), đã link vào CRM (POST /crm/settings/schools/86675/link)
- Lớp Starters 1A: Class/598595, mã CL26946, Pre A1 Starters, 7 học sinh; lớp Movers 1A: Class/598597, mã CL11091, A1 Movers, 7 học sinh
- 14 tài khoản học sinh dùng thử (gói Cambridge 1 level, 0 coin), không SĐT/email, mật khẩu chung QC: Starters 1A = saomaiminhanh (1924086) Trần Minh Anh, saomaibaongoc (1924080) Lê Bảo Ngọc, saomaiducminh (1924087) Vũ Đức Minh, saomaihaidang (1924081) Nguyễn Hải Đăng, saomaikhanhlinh (1924088) Trịnh Khánh Linh, saomaituankiet (1924089) Đỗ Tuấn Kiệt, saomaigiabao (1924082) Lý Gia Bảo; Movers 1A = saomaiquochuy (1924079) Phạm Quốc Huy, saomaigiahan (1924083) Hoàng Gia Hân, saomaiminhkhang (1924084) Bùi Minh Khang, saomaiphuongthao (1924091) Ngô Phương Thảo, saomaianhthu (1924090) Mai Anh Thư, saomaiminhquan (1924092) Lương Minh Quân, saomaingocdiep (1924085) Tạ Ngọc Diệp
- Học phí CRM (school 86675): nhóm dbk25qga83dkl84nmfg0 'Học phí tháng 11/2026 - Starters 1A' 7 × 1.500.000 đ hạn 10/11/2026; nhóm dbk25soa83dl684nmfk0 'Học phí tháng 11/2026 - Movers 1A' 7 × 1.800.000 đ hạn 10/11/2026; nhóm dbk29n0a83dl98cnmjc0 'Phí giáo trình Starters (quá hạn QC)' 7 × 250.000 đ hạn 25/10/2026 (đã quá hạn). Tổng 21 khoản, 24.850.000 đ
- Thanh toán: Đỗ Tuấn Kiệt 1.500.000 tiền mặt (dbk25qga83dkl84nmfjg), Trịnh Khánh Linh 1.500.000 chuyển khoản (…nmfj0), Vũ Đức Minh 1.500.000 tiền mặt (…nmfig), Lương Minh Quân 1.800.000 chuyển khoản (dbk25soa83dl684nmfng), Ngô Phương Thảo 1.800.000 tiền mặt (…nmfn0), Trần Minh Anh 500.000 tiền mặt một phần (dbk25qga83dkl84nmfi0); phiếu thu PT-86675-202611-0001 (dbk2b98a83dl684nmke0) Hoàng Gia Hân 1.800.000 tiền mặt
- Không tạo: lịch học/buổi học, điểm danh, tài khoản ngân hàng, giáo viên, lời mời, email/SMS
- File cục bộ: ~/qc-ts/b2c/import_hoc_vien_saomai.xlsx, .csv, _template_mau-import-khach-hang.xlsx, _netlog.jsonl, _api_summary.json, _page_*.txt, _tpage_*.txt, _cpage_*.txt, scripts *.mjs, shots/ (195 ảnh)
Giới hạn: Lộ trình mở khoá (teacher.flyer.us) chỉ chạy sau khi điều phối viên yêu cầu; bước 6 vẫn bị chặn vì không tìm thấy nơi tạo lịch học hay buổi học ở CRM lẫn teacher web (có thể thuộc app di động hoặc gói khác), nên không đo được API điểm danh ghi. QR/chuyển khoản tại quầy cần tài khoản ngân hàng của trường; không thêm tài khoản giả nên /v3/payment/qr chưa kiểm tra. Không link 4 lead đã thắng với học sinh (nút có sẵn) để hạn chế thao tác. Học sinh QC không có SĐT/email nên nhắc học phí không gửi tới ai. openpyxl không có, xlsx tạo bằng cách sửa file mẫu. Thời gian tải trang đo tới networkidle (CRM) hoặc load + 2,5 s (teacher) bằng Playwright.
Dữ liệu có được lưu không
| Phép thử | Kết quả |
|---|---|
| Tải lại trang | Còn |
| Mở bằng trình duyệt khác | Không có dữ liệu đã nhập |
| Ghi lên máy chủ | 0 request ghi nào tới máy chủ. 72 request POST/PUT/PATCH (tenant, branch, courses, fee-plans, leads, logs, convert, students, classes, enrollments, attendance, records, collect, contact-book) đều do service worker /ps/mockServiceWorker.js (MSW 2.14.2) trả 200 với body giả, lưu vào IndexedDB truongso-mock; 1 PUT attendance trả 409 (chặn điểm danh sớm) cũng từ SW. 34 request GET lọt xuống máy chủ thật khi SW chưa kích hoạt đều nhận 404 (truongso.net/api/v3/* không có backend). Mở trình duyệt hồ sơ mới: tên trung tâm vẫn là mẫu Ánh Dương, không có học viên/lớp đã nhập. |
Hành trình vận hành
| # | Việc | Kết quả | Ghi chú |
|---|---|---|---|
| 1 | Cài đặt trung tâm, chi nhánh, 2 khoá học và gói phí | Chạy được | Lưu tên Sao Mai, địa chỉ, giờ làm việc, ngày nghỉ, đổi tên chi nhánh, tạo 2 khoá + 2 gói phí theo tháng; giữ sau reload. |
| 2 | Phễu tuyển sinh: 6 lead, đổi giai đoạn, 4 chuyển đổi, 1 mất | Chạy được | 6 lead tạo được, đổi trạng thái qua nhật ký chăm sóc, 4 lead thành học viên, 1 lead Không có nhu cầu; lý do chỉ ghi dạng văn bản tự do. |
| 3 | Học viên: thêm 10, sửa 1, tìm kiếm, lọc theo lớp | Chạy được | 14 học viên mới (89 tổng), sửa địa chỉ/sức khoẻ giữ sau reload, tìm theo tên và SĐT không dấu cách, lọc lớp ra đúng 7. |
| 4 | Lớp học: 2 lớp, giáo viên, 7+7 học viên, lịch | Một phần | Tạo lớp có xem trước 8 buổi và cảnh báo trùng phòng/GV; khai giảng không được trước hôm nay; xếp lớp từng người một; không có dạng thời khoá biểu. |
| 5 | Điểm danh 2 buổi mỗi lớp, sửa 1 bản ghi, lịch sử | Một phần | Chỉ điểm danh từ 30 phút trước giờ học (phải chỉnh đồng hồ trình duyệt). 4 phiếu lưu được, sửa bắt buộc lý do nhưng không thấy nhật ký; thống kê khớp. |
| 6 | Học phí tháng 11: 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR | Một phần | Thu đủ 5 phiếu (tiền mặt, chuyển khoản), in phiếu thu mẫu 01-TT, QR VietQR hiển thị. Không lập được hoá đơn chưa thu cho cả lớp; thu một phần bị ghi thành hoá đơn nhỏ hơn, không còn công nợ. |
| 7 | Sổ liên lạc: gửi nhận xét cho một phụ huynh | Một phần | Viết nội dung bài học, BTVN, nhận xét cho 1 học viên và Lưu và gửi được; chỉ đổi trạng thái Đã gửi, không có bản phụ huynh nhận hay kênh gửi thật. |
| 8 | Tổng quan và báo cáo: đối chiếu số liệu | Một phần | Học viên 73, tổng thu 66,3 tr, phễu, chuyên cần khớp số nhập. Đăng ký mới 13 không khớp 14 học viên xếp lớp; công nợ thu một phần không hiện. |
| 9 | Thiết lập menu và giới hạn gói Basic | Một phần | Ẩn Sổ liên lạc còn 8/9, trang vẫn mở bằng URL, khôi phục 9/9. teaching-plans chuyển về dashboard; hr, finance trả trang trắng /ps/500; settings/branches không bị chặn. |
| 10 | Di động 390x844 | Chạy được | Tổng quan, học viên, điểm danh, thu học phí, phiếu điểm danh không cuộn ngang, 0 lỗi console; nút Thu tiền ghim đáy. |
| 11 | Thời gian tải và lỗi console | Chạy được | Bấm menu tới hiển thị 85–320 ms, tải nguội 539–923 ms, 0 lỗi console trên 6 trang chính. |
Số liệu trên màn so với số đã nhập
| Chỉ số | Đã nhập | Hiển thị | Khớp |
|---|---|---|---|
| Học viên đang học (59 mẫu + 14 nhập) | 73 | 73 | Khớp |
| Tổng học viên (75 mẫu + 14) | 89 | 89 | Khớp |
| Chờ xếp lớp sau khi xếp 14 em | 2 (mẫu) | 2 | Khớp |
| Số lớp (7 mẫu + 2) | 9 | Tất cả 9; Đang học 6, Sắp khai giảng 2 | Khớp |
| Sĩ số Starters 1A / Movers 1A | 7 / 7 | 7/12 / 7/12 | Khớp |
| Tổng thu tháng 11 (55,45 tr mẫu + 10,8 tr nhập) | 66.252.250 đ | 66,3 tr dashboard; 66.252.250 đ quầy | Khớp |
| Phiếu thu người thu Nguyễn Minh Tuấn (5 mẫu + 6) | 11 phiếu, 16.800.000 đ | 11 phiếu, 16.800.000 đ | Khớp |
| Phễu: Đã đăng ký 14+4, Không có nhu cầu 6+1, Gọi lại sau 5+1, tổng 86+6 | 18 / 7 / 6 / 92 | 18 / 7 / 6 / 92 | Khớp |
| Chuyên cần Starters 1A (2 buổi: 10 có mặt, 2 muộn, 2 phép) | 100% | 100% | Khớp |
| Chuyên cần Movers 1A (10 có mặt, 2 muộn, 1 vắng, 1 phép) | 92% | 92% | Khớp |
| Đăng ký mới tháng này (7 mẫu + 14 xếp lớp) | 21 | 13 | Lệch |
| Công nợ Trần Gia Bảo sau thu 1.000.000/1.800.000 | 800.000 đ | Không có công nợ | Lệch |
Lỗi phát hiện
| Lỗi | Mức |
|---|---|
| Dữ liệu chỉ lưu IndexedDB trình duyệt; không request ghi nào tới máy chủ; trình duyệt khác không thấy. | Cao |
| Thu một phần: sửa ô Học phí thành 1.000.000 tạo hoá đơn 1.000.000 Đã đủ, không ghi công nợ 800.000. | Cao |
| Không lập được hoá đơn học phí tháng cho cả lớp hay hoá đơn chưa thu; nút Thu 0 đ bị khoá. | Cao |
| Đường dẫn ẩn /ps/vi/hr, /finance, /homework, /crm/campaigns chuyển tới /ps/500/dashboard trang trắng. | Vừa |
| /ps/vi/settings/branches vẫn mở ở Basic, có nút Thêm chi nhánh dù gói một cơ sở. | Vừa |
| Khai giảng không được trước hôm nay và điểm danh chỉ từ 30 phút trước giờ học: không nhập hồi tố. | Vừa |
| Xếp lớp chỉ chọn được 1 học viên mỗi lần; 7 học viên cần 7 lượt mở hộp thoại. | Vừa |
| Gửi sổ liên lạc chỉ đổi trạng thái; không có bản xem phụ huynh nhận, không có kênh Zalo/app thật. | Vừa |
| Bộ lọc Lớp của Sổ liên lạc không trả về buổi học của lớp mới tạo, dù danh sách chung có. | Vừa |
| Chỉ số Đăng ký mới 13 không khớp 14 học viên xếp lớp (đếm theo phiếu thu). | Vừa |
| Tìm học viên theo SĐT có dấu cách (0912 331) không ra kết quả. | Thấp |
| Sửa điểm danh bắt buộc lý do nhưng không thấy nhật ký ở phiếu; Lịch sử thay đổi lớp trống. | Thấp |
| Chuyển lead sang Không có nhu cầu không có trường lý do riêng, chỉ ghi văn bản tự do. | Thấp |
| Lớp học không có dạng lịch tuần; chỉ bảng và danh sách buổi. | Thấp |
| Trùng phòng và giáo viên chỉ cảnh báo, vẫn cho tạo lớp. | Thấp |
| 34 request GET lọt xuống máy chủ thật trả 404 khi service worker chưa kích hoạt. | Thấp |
Tốc độ
| Màn hoặc API | ms | Ghi chú |
|---|---|---|
| Tổng quan | 320 | 0 lỗi console |
| Phễu tuyển sinh | 137 | 0 lỗi console |
| Thu học phí | 114 | 0 lỗi console |
| Điểm danh | 95 | 0 lỗi console |
| Học viên | 93 | 0 lỗi console |
| Lớp học | 85 | 0 lỗi console |
Từng việc kèm ảnh
1. Cài đặt trung tâm, chi nhánh, 2 khoá học và gói phí Chạy được
Lưu tên Sao Mai, địa chỉ, giờ làm việc, ngày nghỉ, đổi tên chi nhánh, tạo 2 khoá + 2 gói phí theo tháng; giữ sau reload.



2. Phễu tuyển sinh: 6 lead, đổi giai đoạn, 4 chuyển đổi, 1 mất Chạy được
6 lead tạo được, đổi trạng thái qua nhật ký chăm sóc, 4 lead thành học viên, 1 lead Không có nhu cầu; lý do chỉ ghi dạng văn bản tự do.



3. Học viên: thêm 10, sửa 1, tìm kiếm, lọc theo lớp Chạy được
14 học viên mới (89 tổng), sửa địa chỉ/sức khoẻ giữ sau reload, tìm theo tên và SĐT không dấu cách, lọc lớp ra đúng 7.



4. Lớp học: 2 lớp, giáo viên, 7+7 học viên, lịch Một phần
Tạo lớp có xem trước 8 buổi và cảnh báo trùng phòng/GV; khai giảng không được trước hôm nay; xếp lớp từng người một; không có dạng thời khoá biểu.



5. Điểm danh 2 buổi mỗi lớp, sửa 1 bản ghi, lịch sử Một phần
Chỉ điểm danh từ 30 phút trước giờ học (phải chỉnh đồng hồ trình duyệt). 4 phiếu lưu được, sửa bắt buộc lý do nhưng không thấy nhật ký; thống kê khớp.



6. Học phí tháng 11: 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR Một phần
Thu đủ 5 phiếu (tiền mặt, chuyển khoản), in phiếu thu mẫu 01-TT, QR VietQR hiển thị. Không lập được hoá đơn chưa thu cho cả lớp; thu một phần bị ghi thành hoá đơn nhỏ hơn, không còn công nợ.



7. Sổ liên lạc: gửi nhận xét cho một phụ huynh Một phần
Viết nội dung bài học, BTVN, nhận xét cho 1 học viên và Lưu và gửi được; chỉ đổi trạng thái Đã gửi, không có bản phụ huynh nhận hay kênh gửi thật.



8. Tổng quan và báo cáo: đối chiếu số liệu Một phần
Học viên 73, tổng thu 66,3 tr, phễu, chuyên cần khớp số nhập. Đăng ký mới 13 không khớp 14 học viên xếp lớp; công nợ thu một phần không hiện.



9. Thiết lập menu và giới hạn gói Basic Một phần
Ẩn Sổ liên lạc còn 8/9, trang vẫn mở bằng URL, khôi phục 9/9. teaching-plans chuyển về dashboard; hr, finance trả trang trắng /ps/500; settings/branches không bị chặn.



10. Di động 390x844 Chạy được
Tổng quan, học viên, điểm danh, thu học phí, phiếu điểm danh không cuộn ngang, 0 lỗi console; nút Thu tiền ghim đáy.



11. Thời gian tải và lỗi console Chạy được
Bấm menu tới hiển thị 85–320 ms, tải nguội 539–923 ms, 0 lỗi console trên 6 trang chính.















Giới hạn: Kiểm thử trên bản demo dữ liệu mẫu; mọi API do service worker MSW trả lời nên hành vi máy chủ thật, phân quyền, gửi Zalo/app, xác nhận kế toán và đối soát SePay chưa được kiểm chứng. Vì lớp không cho khai giảng trước hôm nay và điểm danh chỉ mở 30 phút trước giờ học, bước 5 và 7 dùng đồng hồ trình duyệt giả lập (02 đến 06/11/2026) để mở phiếu; trên máy thật thao tác này phải chờ đến giờ học. Thu một phần và hoá đơn chưa thu không thực hiện được nên không có học viên mới quá hạn; danh sách quá hạn chỉ gồm dữ liệu mẫu. Một lần tải /ps/vi/guide bị ERR_TIMED_OUT do mạng. Kịch bản chạy bằng Playwright trên Chrome, hồ sơ trình duyệt ~/qc-ts/basic/profile, log mạng ~/qc-ts/basic/_netlog.jsonl.