Danh mục tính năng›Nghiệm thu gói Basic

Trường Số · Nghiệm thu vận hành · 02/11/2026

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á.
Kết luận
Sau khi đi theo đúng lộ trình của sản phẩm (tạo trường trên teacher.flyer.us rồi liên kết vào CRM), Flyer CRM vận hành được phần lớn tuần làm việc của trung tâm: Khách hàng (phễu tuyển sinh), Lớp học và Học sinh (đọc từ app Flyer), Học phí (tạo khoản thu theo lớp, thu tiền, phiếu thu tại quầy, lọc quá hạn) và Tổng quan có số liệu khớp. Vẫn còn ba khoảng trống lớn: (1) Điểm danh không dùng được vì không có nơi nào tạo lịch học/buổi học, cả CRM lẫn teacher web (API chỉ đọc, POST 405); (2) CRM không có CTA hay hướng dẫn nào cho trung tâm mới biết phải sang app giáo viên tạo trường, và trường tạo trong onboarding bị đặt tên mặc định "Thị Lan Nguyễn's school" thay vì tên đã nhập; (3) Import khách hàng, Ghi chú hoạt động, Vai trò, Nguồn, Tenant Settings vẫn lỗi hoặc là mock. Thanh toán QR/chuyển khoản bị khoá cho tới khi đăng ký tài khoản ngân hàng (có hướng dẫn rõ). So với bộ Basic: đạt Phễu tuyển sinh, Lớp học, Học viên (đọc), Thu học phí; Tổng quan và Cài đặt đạt một phần; Điểm danh chưa dùng được; Sổ liên lạc và Hướng dẫn không có.
2/11việc chạy trọn
8một phần
1lỗi hoặc chưa có
26lỗi ghi nhận

Hành trình vận hành

#ViệcKết quảGhi chú
1Đăng nhập lần đầu và onboardingMộ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.
2Cài đặt: nguồn, nhãn, người dùng/vai tròMột phầnNhã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.
3Tuyển sinh: 6 lead, kéo giai đoạn, chuyển đổi 4, thua 1, kiểm tra trùng SĐTMột phầnTạ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.
4Học viên: thêm 10 qua UI, import Excel, sửa, tìm kiếm/lọcMột phầnSau 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.
5Lớp học: 2 lớp, lịch, giáo viên, ghi danh 7 + 7, thời khoá biểuMột phầnLớ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ỗiSau 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ử.
7Học phí: phí tháng 11, 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QRMột phầnTạ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.
8Tổng quan/báo cáo: đối chiếu số liệuMột phầnSố 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.
9Mobile 390×844Chạy đượcDashboard, 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.
10Vệ sinh dữ liệuChạy đượcDữ 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).
11Tạo trường trên teacher.flyer.us rồi liên kết vào CRMMộ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ậpHiển thịKhớp
Tổng khách hàng (GET /crm/customers total_count)66Khớp
Khách hàng Thành công (lọc Trạng thái)44Khớp
Khách hàng Thất bại11Khớp
Khách hàng đang theo dõi trên kanban (cột Tiềm năng)11Khớp
Khách hàng import thêm50Lệ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_customers1 (Vũ Đức Minh chưa có hoạt động)1Khớp
Nguồn trong form khách hàng sau khi tạo GIOI_THIEU76Lệch
Vai trò sau khi tạo 'Lễ tân'43Lệch
Học sinh trên CRM sau khi link trường (GET /crm/learning/students)1414Khớp
Lớp và sĩ số trên CRM Lớp họcStarters 1A 7, Movers 1A 7Starters 1A 7, Movers 1A 7Khớ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ạn5 / 16 (gồm 1 thu một phần) / 75 / 16 / 7Khớp
Dashboard Tổng thu (học phí) tháng này8.600.000 đ (3×1,5 + 2×1,8 + 0,5)8,6 trKhớp
Dashboard Đăng ký mới1414Khớp
Dashboard Nhân sự11Khớp
Dashboard Học viên đang học / Lớp đang học14 / 20 / 0Lệch
Phiếu thu sau 7 lần thu tiền71Lệch
Hôm nay tại quầy ĐÃ THU10.400.000 đ (8,6 tr + 1,8 tr)1.800.000 đLệch
Buổi học Điểm danh tháng 114 buổi (2 mỗi lớp)0Lệch

Lỗi phát hiện

LỗiMứ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 APImsGhi chú
POST b2c.truongso.net/api/v3/crm/onboarding/create-center712200 · 1 lần
POST teacher.flyer.us/api/v2/graphql LoginViewLogInWithPasswordMutation417200 · 1 lần
POST b2c.truongso.net/api/v3/auth/login340201 · 1 lần
GET b2c.truongso.net/api/v3/crm/tuition-collect/due-students202200x5 · 5 lần
POST b2c.truongso.net/api/v3/crm/tuitions197200x3 · 3 lần
GET b2c.truongso.net/api/v3/crm/join-requests189200 · 1 lần
POST teacher.flyer.us/api/v2/graphql ViewerCreateTeacherProfileMutation174200 · 1 lần
POST teacher.flyer.us/api/v2/graphql ViewerPartnerCreateClass171200x2 · 2 lần
GET b2c.truongso.net/api/v3/crm/classes/{id}/sessions164404 · 1 lần
GET b2c.truongso.net/api/v3/crm/classes/{id}/schedule160404 · 1 lần
GET b2c.truongso.net/api/v3/crm/class-sessions156404 · 1 lần
GET b2c.truongso.net/api/v3/crm/learning/classes/{id}150404 · 1 lần
GET b2c.truongso.net/api/v3/crm/schools/{id}/schedules150404 · 1 lần
GET b2c.truongso.net/api/v3/crm/customers/{id}148200x53 · 53 lần
GET b2c.truongso.net/api/v3/crm/sources148200x56 · 56 lần
POST b2c.truongso.net/api/v3/crm/tuition-collect/receipts145200 · 1 lần
GET b2c.truongso.net/api/v3/crm/customers/{id}/assignments141200x28 · 28 lần
POST b2c.truongso.net/api/v3/crm/customers140201x6 409 · 7 lần
GET b2c.truongso.net/api/v3/crm/placement-tests140200 · 1 lần
GET b2c.truongso.net/api/v3/crm/customers139200x214 400x2 401x2 · 218 lần
PATCH b2c.truongso.net/api/v3/crm/customers/{id}139200x8 · 8 lần
GET b2c.truongso.net/api/v3/crm/me139200x175 401x6 · 181 lần
GET b2c.truongso.net/api/v3/crm/view-configs/customer_list139200x46 · 46 lần
POST teacher.flyer.us/api/v2/graphql PartnerViewerRollupLowTeachers137200 · 1 lần
POST teacher.flyer.us/api/v2/graphql PartnerViewerRollupTeachers137200 · 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.

Đăng nhập lần đầu và onboarding
Đăng nhập lần đầu và onboarding
Đăng nhập lần đầu và onboarding

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.

Cài đặt: nguồn, nhãn, người dùng/vai trò
Cài đặt: nguồn, nhãn, người dùng/vai trò
Cài đặt: nguồn, nhãn, người dùng/vai trò

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.

Tuyển sinh: 6 lead, kéo giai đoạn, chuyển đổi 4, thua 1, kiểm tra trùng SĐT
Tuyển sinh: 6 lead, kéo giai đoạn, chuyển đổi 4, thua 1, kiểm tra trùng SĐT
Tuyển sinh: 6 lead, kéo giai đoạn, chuyển đổi 4, thua 1, kiểm tra trùng SĐT

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.

Học viên: thêm 10 qua UI, import Excel, sửa, tìm kiếm/lọc
Học viên: thêm 10 qua UI, import Excel, sửa, tìm kiếm/lọc
Học viên: thêm 10 qua UI, import Excel, sửa, tìm kiếm/lọc

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.

Lớp học: 2 lớp, lịch, giáo viên, ghi danh 7 + 7, thời khoá biểu
Lớp học: 2 lớp, lịch, giáo viên, ghi danh 7 + 7, thời khoá biểu
Lớp học: 2 lớp, lịch, giáo viên, ghi danh 7 + 7, thời khoá biểu

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ử.

Điểm danh: 2 buổi/lớp, sửa, lịch sử
Điểm danh: 2 buổi/lớp, sửa, lịch sử
Điểm danh: 2 buổi/lớp, sửa, 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.

Học phí: phí tháng 11, 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR
Học phí: phí tháng 11, 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR
Học phí: phí tháng 11, 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR

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.

Tổng quan/báo cáo: đối chiếu số liệu
Tổng quan/báo cáo: đối chiếu số liệu
Tổng quan/báo cáo: đối chiếu số liệu

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.

Mobile 390×844
Mobile 390×844
Mobile 390×844

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.

Tạo trường trên teacher.flyer.us rồi liên kết vào CRM
Tạo trường trên teacher.flyer.us rồi liên kết vào CRM
Tạo trường trên teacher.flyer.us rồi liên kết vào CRM
Lỗi: 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.
Lỗi: Đ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.
Lỗi: 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-…).
Lỗi: 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ổ.
Lỗi: 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'.
Lỗi: 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.
Lỗi: 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.
Lỗi: 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.
Lỗi: 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-…
Lỗi: 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.
Lỗi: 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.
Lỗi: Đá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).
Lỗi: '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.
Lỗi: 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 đ'.
Lỗi: 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ú.
Lỗi: 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.
Lỗi: 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.
Lỗi: 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.
Lỗi: 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'.
Lỗi: 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.
Lỗi: 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.
Lỗi: 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'.
Lỗi: 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.
Lỗi: 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).
Lỗi: 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.
Lỗi: 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.

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á)

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.

Kết luận
Chưa thể vận hành trung tâm trên bản Basic hôm nay: luồng nhập liệu (tuyển sinh, học viên, lớp, điểm danh, thu tiền) chạy mượt và số liệu khớp, nhưng toàn bộ dữ liệu chỉ nằm trong IndexedDB của một trình duyệt (service worker MSW giả lập API), không thu một phần, không lập được công nợ, và một số đường dẫn ẩn trả trang trắng.
5/11việc chạy trọn
6một phần
0lỗi hoặc chưa có
16lỗi ghi nhận

Dữ liệu có được lưu không

Phép thửKết quả
Tải lại trangCòn
Mở bằng trình duyệt khácKhô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ệcKết quảGhi chú
1Cài đặt trung tâm, chi nhánh, 2 khoá học và gói phíChạy đượcLư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.
2Phễu tuyển sinh: 6 lead, đổi giai đoạn, 4 chuyển đổi, 1 mấtChạy được6 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.
3Học viên: thêm 10, sửa 1, tìm kiếm, lọc theo lớpChạy được14 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.
4Lớp học: 2 lớp, giáo viên, 7+7 học viên, lịchMột phầnTạ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ầnChỉ đ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.
6Học phí tháng 11: 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QRMột phầnThu đủ 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ợ.
7Sổ liên lạc: gửi nhận xét cho một phụ huynhMột phầnViế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.
8Tổng quan và báo cáo: đối chiếu số liệuMột phầnHọ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.
9Thiết lập menu và giới hạn gói BasicMộ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.
10Di động 390x844Chạy đượcTổ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.
11Thời gian tải và lỗi consoleChạy đượcBấ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ậpHiển thịKhớp
Học viên đang học (59 mẫu + 14 nhập)7373Khớp
Tổng học viên (75 mẫu + 14)8989Khớp
Chờ xếp lớp sau khi xếp 14 em2 (mẫu)2Khớp
Số lớp (7 mẫu + 2)9Tất cả 9; Đang học 6, Sắp khai giảng 2Khớp
Sĩ số Starters 1A / Movers 1A7 / 77/12 / 7/12Khớ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ầyKhớ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+618 / 7 / 6 / 9218 / 7 / 6 / 92Khớ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)2113Lệch
Công nợ Trần Gia Bảo sau thu 1.000.000/1.800.000800.000 đKhông có công nợLệch

Lỗi phát hiện

LỗiMứ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 APImsGhi chú
Tổng quan3200 lỗi console
Phễu tuyển sinh1370 lỗi console
Thu học phí1140 lỗi console
Điểm danh950 lỗi console
Học viên930 lỗi console
Lớp học850 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.

Cài đặt trung tâm, chi nhánh, 2 khoá học và gói phí
Cài đặt trung tâm, chi nhánh, 2 khoá học và gói phí
Cài đặt trung tâm, chi nhánh, 2 khoá học và gói phí

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.

Phễu tuyển sinh: 6 lead, đổi giai đoạn, 4 chuyển đổi, 1 mất
Phễu tuyển sinh: 6 lead, đổi giai đoạn, 4 chuyển đổi, 1 mất
Phễu tuyển sinh: 6 lead, đổi giai đoạn, 4 chuyển đổi, 1 mất

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.

Học viên: thêm 10, sửa 1, tìm kiếm, lọc theo lớp
Học viên: thêm 10, sửa 1, tìm kiếm, lọc theo lớp
Học viên: thêm 10, sửa 1, tìm kiếm, lọc theo lớp

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.

Lớp học: 2 lớp, giáo viên, 7+7 học viên, lịch
Lớp học: 2 lớp, giáo viên, 7+7 học viên, lịch
Lớp học: 2 lớp, giáo viên, 7+7 học viên, lịch

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.

Điểm danh 2 buổi mỗi lớp, sửa 1 bản ghi, lịch sử
Điểm danh 2 buổi mỗi lớp, sửa 1 bản ghi, lịch sử
Điểm danh 2 buổi mỗi lớp, sửa 1 bản ghi, lịch sử

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ợ.

Học phí tháng 11: 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR
Học phí tháng 11: 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR
Học phí tháng 11: 5 phiếu thu, 1 thu một phần, phiếu thu, quá hạn, QR

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.

Sổ liên lạc: gửi nhận xét cho một phụ huynh
Sổ liên lạc: gửi nhận xét cho một phụ huynh
Sổ liên lạc: gửi nhận xét cho một phụ huynh

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.

Tổng quan và báo cáo: đối chiếu số liệu
Tổng quan và báo cáo: đối chiếu số liệu
Tổng quan và báo cáo: đối chiếu số liệu

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.

Thiết lập menu và giới hạn gói Basic
Thiết lập menu và giới hạn gói Basic
Thiết lập menu và giới hạn gói Basic

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.

Di động 390x844
Di động 390x844
Di động 390x844

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.

Lỗi: 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.
Lỗi: 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.
Lỗi: 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á.
Lỗi: Đường dẫn ẩn /ps/vi/hr, /finance, /homework, /crm/campaigns chuyển tới /ps/500/dashboard trang trắng.
Lỗi: /ps/vi/settings/branches vẫn mở ở Basic, có nút Thêm chi nhánh dù gói một cơ sở.
Lỗi: 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ố.
Lỗi: 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.
Lỗi: 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.
Lỗi: 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ó.
Lỗi: 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).
Lỗi: Tìm học viên theo SĐT có dấu cách (0912 331) không ra kết quả.
Lỗi: 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.
Lỗi: 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.
Lỗi: Lớp học không có dạng lịch tuần; chỉ bảng và danh sách buổi.
Lỗi: Trùng phòng và giáo viên chỉ cảnh báo, vẫn cho tạo lớp.

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.