QC · 03/10/2026

QC bản Trường Số theo DotB

Kết quả ba lượt kiểm tra trên bản demo truongso.net/dot và trạng thái sửa từng lỗi.

Xuất xứ / Prompt / Giới hạn
Yêu cầu nguyên văn: 1. Đóng vai top notch QC, scan 100% source hệ thống vừa build xem có chỗ nào bất thường, thì listing ra + đề xuất hướng giải quyết. 2. Scan 100% các source trong hệ thống để evaluate và listing các nơi có thể improve. (30/09/2026) check lại 100% các pages ở site này 3 lần nhé, xem có bugs gì không, vì anh gửi link đi demo cho khách hàng rồi đó (02/10/2026)

Do trợ lý AI soạn trong một phiên làm việc; là bản đề xuất để đội sản phẩm và kỹ thuật thảo luận, chưa phải kết luận.

Nguồn:

  • Lượt 1, máy tính 1440×900: 102 trang, 2.003 nút và menu, khoảng 45 biểu mẫu (gửi trống và gửi hợp lệ), 6 hướng dẫn chạy hết.
  • Lượt 2, điện thoại 390×844 và iPad 820×1180: 108 trang mỗi thiết bị.
  • Lượt 3, sáu hành trình của chủ trung tâm từ tuyển sinh đến báo cáo, đối chiếu số liệu giữa các màn.
  • Sau khi sửa, cả 95 lỗi được kiểm tra lại trên bản đang chạy; 87 trang tải lại không lỗi.
  • Mục đề xuất cải thiện lấy từ lần đọc mã nguồn ngày 30/09/2026 (255 ghi nhận), đối chiếu lại với mã hiện tại.

Giới hạn:

  • Bản demo chạy trên dữ liệu mẫu trong trình duyệt, chưa nối backend thật; lỗi về hiệu năng và dữ liệu thật chưa được đo.
  • Không thử thao tác xoá/huỷ hàng loạt, tải tệp lên, gửi tin SMS/Zalo thật, lập hoá đơn tháng hàng loạt.
  • Mỗi bảng chỉ thử dòng đầu tiên.

Tổng quan

LượtPhạm viSố lỗi
1. Máy tính102 trang · 2.003 nút · 45 biểu mẫu29
2. Điện thoại + iPad108 trang × 2 thiết bị26
3. Hành trình khách hàng6 hành trình40
TổngP1 14 · P2 46 · P3 35 · không có P095

Trạng thái ngày 03/10/2026: 94 đã sửa, 1 sửa một phần, 0 còn mở. Nguyên nhân của phần lớn lỗi P1 là hai bộ số liệu tiền chạy song song (đơn hàng mới và hoá đơn học phí cũ); nay đã gộp về một sổ, một lần bán hàng làm mọi màn cùng đổi một số tiền.

Danh sách lỗi và trạng thái

MãMứcLượtLỗiTrạng tháiBằng chứng sau khi sửa
P1-01P1Máy tínhLịch sử nhập dữ liệu: cột ngày hiện "PP p", tiêu đề và trạng thái tiếng AnhĐã sửaLive: headers Tên tệp/Trạng thái/Thời gian, statuses Hoàn thành/Hoàn thành một phần/Thất bại, dates 01/10/2026 09:30.ảnh
P1-02P1Máy tínhHoá đơn có giảm giá: dòng hoá đơn không khớp tổng tiềnĐã sửaLive inv_00003u: row 'Giảm giá trên hoá đơn (5%) · Anh chị em -283.500 đ' so lines sum to 5.386.500; Ngày lập 05/09 before hạn 12/09 and receipt 06/09; Thao tác column shows icons, not cut.ảnh
P1-11P1Máy tínhChốt quỹ ngày chấp nhận bỏ trống "Đếm thực tế" và chốt với 0 đĐã sửaLive: empty 'Đếm thực tế' -> inline 'Nhập số tiền đếm thực tế trước khi chốt.', 0 POST to /close; 'Theo sổ' = 222.117.075 đ (drawer balance).ảnh
P1-16P1Máy tínhTạo cuộc chat: danh sách lớp bật ra ngoài mép trên màn hình, không chọn được phần lớn lớpĐã sửaLive: class listbox opens at y=91..471 inside the 900px viewport, has a search input, 13 options scroll inside the list; dialog stays at y=40.ảnh
P1-17P1Máy tínhHoá đơn mới tạo có giảm giá %: chi tiết hoá đơn không hiện khoản giảm, dòng không khớp tổngĐã sửaLive: new invoice 9.600.000 đ with 10% discount (inv_00008p) -> detail shows row 'Giảm giá trên hoá đơn (10%) · Khuyến mãi -960.000 đ' under the line, Tổng tiền 8.640.000 đ; print uses the same rows.ảnh
P3-06P1Hành trình khách hàngBảng điều khiển không thay đổi sau khi bán và thu đủ 4.450.000 đ cho học viên mớiĐã sửaLive journey (API calls in page, same mock handlers as UI): new student + order 4.800.000 đ (new_sale) paid 2.400.000 cash + 2.400.000 transfer -> Dashboard Doanh thu 521,3 -> 526,1 tr (+39%), Học viên mới 56 -> 57.
P3-07P1Hành trình khách hàngBáo cáo Doanh thu và thực thu không ghi nhận khoản vừa thu; tiền mặt tháng này 0 đĐã sửaLive: Báo cáo doanh thu Thực thu 77,7 -> 82,5 tr, Tiền mặt 14.350.750 -> 16.750.750 đ, Chuyển khoản 58.405.000 -> 60.805.000 đ, row 03/10/2026 thực thu 19.881.500 -> 24.681.500 đ; equal to Đơn hàng/Phiếu thu (82,5 tr).
P3-08P1Hành trình khách hàngHồ sơ học viên: thẻ 'Tổng quan học phí' báo Đã thanh toán 0 đ dù đơn đã thu đủĐã sửaLive student card after the order: Đã thanh toán 4.800.000 đ, Học phí còn lại 4.800.000 đ.ảnh
P3-09P1Hành trình khách hàngÔ chọn phiếu thu trong popup ngân hàng đẩy popup ra khỏi màn hình; phiếu đầu danh sách không nhìn thấyĐã sửaLive 1440×900: bank match dialog stays put; receipt picker list at y=147..527 inside the viewport with a search box; first options (incl. newest PT2610000338) visible and clickable. The list opens upward and covers the dialog title while open.ảnh
P3-12P1Hành trình khách hàngSố nợ quá hạn và còn phải thu khác nhau giữa các màn tài chínhĐã sửaLive after reset: Còn phải thu 310,3 tr and Quá hạn 43,7 tr identical on Đơn hàng, Học phí, Báo cáo doanh thu; Công nợ Tổng nợ 43,7 tr; Phiếu thu Quá hạn 6 = 6 overdue orders; Thu tháng 77,7 tr on Đơn hàng/Học phí/Phiếu thu/Báo cáo/KPI.ảnh
P3-13P1Hành trình khách hàngDoanh thu thực tế trên Chỉ tiêu KPI mâu thuẫn với Bảng điều khiểnSửa một phầnLive: KPI actuals agree with Dashboard/Orders/Receipts/Report and move with new money. Local (8f240ae): months without a target show '—' instead of '0'. Out of reach: the sample centre's history starts 03/2026 (Quận 1) and 06/2026 (Thủ Đức), so T1–T2 (and T1–T5 for Thủ Đức) have no actuals; setting targets there would show invented misses or need fabricated revenue.ảnh
P3-18P1Hành trình khách hàngĐiểm danh trừ học phí ở thẻ Tổng quan nhưng không trừ ở tab Số dư học phí; hai số còn lại khác nhau ngay cả trước khi điểm danhĐã sửaLive stu_0046: card 'Học phí đã dùng 0 đ / còn lại 16.000.000 đ' = tab Số dư 'Tiền đã dùng 0 đ / Tiền còn lại 16.000.000 đ / 60 h' (one balance list; attendance draw/reversal verified in the fix-acad journey).ảnh
P3-31P1Hành trình khách hàngLịch sử Import: tiêu đề cột và trạng thái tiếng Anh, cột ngày hiển thị 'PP p'Đã sửaLive /crm/imports/history: Vietnamese headers/statuses, dates 01/10/2026 09:30 (same as P1-01).ảnh
P3-32P1Hành trình khách hàngTrình tạo báo cáo chạy trên bộ dữ liệu riêng, lệch với các màn nghiệp vụĐã sửaLive builder: Phiếu thu 340 rows = Phiếu thu screen 'Tất cả 340'; Đơn hàng 266 = 266; Cuộc gọi 44 = 44; Lịch hẹn 16.
P1-03P2Máy tínhChi tiết hoá đơn: Nhật ký hiện mã sự kiện và JSON thô, thời gian vô lýĐã sửaLocal :3064 (91b55b5): journal 02/10 08:42 Lập hoá đơn → 08:42 Gửi đơn → 09:07 Thu tiền PT2610000322 (was 00:46 before the invoice); receipt 09:07; subtitle without leading dot.ảnh
P1-04P2Máy tínhTrang /crm: tiêu đề tiếng Anh, công việc trỏ tới khách hàng "undefined"Đã sửaLive /crm: 'Tổng quan tuyển sinh', tiles Công việc hôm nay/Lịch hẹn hôm nay/Gọi lại/Quá hạn 21 (= Công việc Quá hạn 21); 0 links to /undefined.ảnh
P1-05P2Máy tínhNhật ký hệ thống: mã hành động và mã bản ghi thôĐã sửaLive audit log: actions 'Lưu điểm danh', 'Tạo hoá đơn', 'Ghi nhận thanh toán'; objects 'Phiếu điểm danh', 'Hoá đơn học phí 2610000259'; newest row 12:21 at 12:37 local.ảnh
P1-06P2Máy tínhTạo báo cáo: nguồn dữ liệu là tên bảng kỹ thuậtĐã sửaLocal (88fea43): builder 'Dữ liệu từ phân hệ khác' starts 'Trừ học phí theo điểm danh 992 dòng'; ledger_meta and fallback_balance_usage no longer offered; 0 '(crm)/(sales)/(academics)' raw names.ảnh
P1-09P2Máy tínhHướng dẫn: nút "Bảng điều khiển" trong tour gây lỗi JS và không làm gìĐã sửaLive: tour opened from hub shows 'Mở trang này' which navigates to /vi/students; no pageerror. The other footer chip ('Bảng điều khiển') now opens that tour.ảnh
P1-12P2Máy tínhBiểu mẫu Cài đặt báo lỗi bằng toast che mất nút Lưu, không đánh dấu ô lỗiĐã sửaLive Chi nhánh > Thêm chi nhánh empty: 2 fields aria-invalid with 'Tên chi nhánh là bắt buộc', 'Mã chi nhánh là bắt buộc' under the fields; no toast over the buttons.ảnh
P1-13P2Máy tínhThêm người dùng: tên đăng nhập có dấu cách, chữ hoa, dấu tiếng Việt vẫn được tạoĐã sửaLive /staff: username 'QA Tên đăng nhập 3780' blocked inline: 'Chỉ dùng chữ thường không dấu, số, dấu chấm, gạch ngang hoặc gạch dưới (3–40 ký tự)'; drawer stays open, no account created.ảnh
P1-18P2Máy tínhDữ liệu lớp: 5 lớp vượt sĩ số tối đa, 2 lớp trùng tên "Starters 1B", tab "Đang học" bỏ sót lớp đầyĐã sửaLive /classes: 11 classes, 0 over capacity (max 14/14, 12/12), one 'Starters 1B' (other renamed Starters 1D), Đầy classes listed in Đang học tab.ảnh
P1-19P2Máy tínhBuổi học Movers 2A hôm nay lúc 00:03–01:33 (nửa đêm)Đã sửaLive /attendance 03/10 (Saturday): sessions 09:00–10:30 and 14:00–16:00 only, no midnight sessions.ảnh
P1-20P2Máy tínhTạo lớp: lộ ghi chú kỹ thuật "ClassSchedule" và hai dòng breadcrumbĐã sửaLive /classes/new: single breadcrumb 'Học vụ > Lớp học > Tạo lớp'; no 'ClassSchedule' text.ảnh
P1-21P2Máy tínhĐiểm tích luỹ: tổng số dư điểm âm (-88), "Đã đổi" -180Đã sửaLive loyalty: Số dư điểm 2130, Tích luỹ +2210, Giới thiệu +60, Đã đổi -140; no negative balance.ảnh
P1-22P2Máy tínhCông việc có tiêu đề là chuỗi debug "4417025 / lead_name=… id=… time=…"Đã sửaLive /crm/tasks: no 'lead_name=' / '4417025' / 'Call Task' strings; titles like 'Gọi lại Trần Đức Đăng'.ảnh
P1-23P2Máy tínhTiêu đề cuộc gọi tự sinh bằng tiếng AnhĐã sửaLive /crm/calls: subjects 'Gọi đi tới HV tiềm năng · 095*****532'; 0 'Outbound'.ảnh
P1-24P2Máy tínhNguồn & Kênh: cột Khách hàng luôn 0, mã tự sinh còn dấu tiếng ViệtĐã sửaLive Nguồn: counts 3/3/4/11/4/1/2…, codes REFERRAL, WALK_IN, TRADE_SHOW (no accents), colour dots shown.ảnh
P1-25P2Máy tínhThẻ "Khách hàng của tôi" hiển thị mã nguồn thôĐã sửaLive dashboard 'Khách hàng của tôi': 'Digital marketing', no trade_show/telesales/referral codes in vi.ảnh
P1-26P2Máy tínhChi tiết đơn hàng: bảng Sản phẩm bị cắt cột bên phảiĐã sửaLive order so_00001q at 1440: no clipped cells in Sản phẩm table (0 truncated elements, no horizontal overflow).ảnh
P2-05P2Điện thoại / iPadBảng điều khiển trên iPad: nhãn % tràn khỏi thẻ, tiêu đề và biểu đồ bị cắtĐã sửaLive iPad 820: sidebar collapses to icon rail, KPI grid 2 columns, '+37%' badge inside the tile, card titles and pie labels readable (one long pie label 'Tiềm n…' ellipsised by the chart).ảnh
P2-06P2Điện thoại / iPadSổ quỹ trên iPad: số dư quỹ bị cắt thành "196,…", không đọc đượcĐã sửaLocal iPad (33074ba): account names wrap ('Vietcombank 0071000123456', 'MB Bank 8899123456' fully visible); no truncated tile text.ảnh
P2-07P2Điện thoại / iPadCài đặt › Dữ liệu trên iPad: 3 thẻ quá hẹp, chữ xuống dòng từng từ và nút bị cắtĐã sửaLive iPad settings/data: 0 clipped/overflowing text elements; cards stack, button inside card.ảnh
P2-08P2Điện thoại / iPadTrang Nhập dữ liệu trên điện thoại: thanh bước và vùng tải tệp bị bóp, chữ xuống dòng vụnĐã sửaLive phone crm/imports: 0 clipped elements, no horizontal overflow; steps and upload area stack.ảnh
P2-12P2Điện thoại / iPadCài đặt trên iPad dọc: hai menu cạnh nhau chỉ chừa ~290px cho nội dung, chữ xuống dòng từng từĐã sửaLocal iPad (6d89a65): 'Loại tin' column 189 px, names on one line ('Nhắc học phí', 'Xác nhận học thử'); sticky while the channel columns scroll.ảnh
P2-13P2Điện thoại / iPadNgăn "Tạo hoá đơn" trên điện thoại: ô đơn giá/giảm quá hẹp, chân ngăn tổng tiền bị bópĐã sửaLive phone invoice drawer: line fields 2×2 (SL+VAT, Đơn giá+Giảm dòng) full width; footer 'Tổng cộng 0 đ' on one line above Hủy / Tạo hoá đơn.ảnh
P2-14P2Điện thoại / iPadLịch sử Import trên điện thoại: bảng bị cắt cột, tên tệp xuống dòng vụn, nhãn tiếng AnhĐã sửaLive phone imports history: card list, labels Trạng thái/Thời gian/Thành công/Thất bại, 'Hoàn thành một phần', dates 01/10/2026 09:30.ảnh
P2-15P2Điện thoại / iPadDanh sách Đơn hàng trên điện thoại vẫn là bảng desktop, chỉ thấy 2 cộtĐã sửaLive phone orders: cards with mã đơn, học viên, trạng thái, tổng tiền, đã thu, còn nợ.ảnh
P2-17P2Điện thoại / iPadĐiểm danh buổi học trên điện thoại: nút Có mặt/Muộn/Phép/Vắng nằm ngoài màn hình, tên học viên trôi mất khi vuốt ngangĐã sửaLive phone session sheet: one card per student, buttons 'Có mặt / Muộn / Có phép / Vắng' 83×44 px with full labels, no horizontal overflow.ảnh
P2-19P2Điện thoại / iPadBáo cáo trên iPad: số tổng tràn khỏi thẻ, chồng lên thẻ bên cạnhĐã sửaLive iPad rpt_001: totals in a 2×2 grid, 77.732.915 đ etc. inside cards; detail table scrolls horizontally inside its card.ảnh
P2-20P2Điện thoại / iPadHồ sơ HV tiềm năng trên iPad: hàng thông tin chồng chữ, số điện thoại xếp từng chữ một dòngĐã sửaLive iPad lead cus_00000l: 0 clipped/overlapping text elements; fact row wraps.ảnh
P2-21P2Điện thoại / iPadNhân sự và phân quyền trên điện thoại: ô tìm kiếm bị bóp còn ~20px, nút "Lọc thêm" đè lênĐã sửaLive phone /staff: search input 237 px wide on its own row, 'Lọc thêm' not overlapping; 0 clipped elements.ảnh
P3-01P2Hành trình khách hàngBuổi học thử đặt từ hồ sơ Lead không hiện ở trang Học thửĐã sửaLive: demo appointment Q1-DEMO-07/10/2026-01 (Lịch hẹn) is listed on Học thử for Vũ Minh Kiên, with Đổi buổi / Huỷ / Chuyển đổi actions.ảnh
P3-03P2Hành trình khách hàngKhối 'Khách hàng của tôi' trên Bảng điều khiển hiện mã nguồn thôĐã sửaLive dashboard 'Khách hàng của tôi': 'Digital marketing', 'Hội thảo, sự kiện' (no trade_show/telesales/referral/advertisement in vi).ảnh
P3-04P2Hành trình khách hàngBước 'Lớp & gói' khi chuyển đổi: nhiều lớp mẫu vượt sĩ số (21/12, 19/12, 17/14)Đã sửaLive /classes and class-fill: every class ≤ capacity (max 12/12, 14/14), so the convert step can suggest classes with free seats (Starters 1D 11/12, Flyers 1B 9/12...).ảnh
P3-10P2Hành trình khách hàngKhông khớp được chuyển khoản đợt 2 trên Giao dịch ngân hàng: phiếu 'Chờ duyệt' không có trong 'Nhận giao dịch mới'Đã sửaLive: transfer receipt PT2610000339 in 'Chờ duyệt' -> bank-transactions/simulate on Vietcombank auto-matched it -> status Đã thu; audit 'Khớp chuyển khoản'.
P3-11P2Hành trình khách hàngSố tài khoản Vietcombank không thống nhất: VietQR 1029384756 nhưng Sổ quỹ ghi tiền vào 0071000123456Đã sửaLive: one Vietcombank account 0071000123456 for VietQR/bank accounts and Thu chi (balance 637 -> 639,4 tr after the matched transfer).
P3-19P2Hành trình khách hàngBuổi mới điểm danh 3/18 đã hiện 'Đã điểm danh' ở danh sách Điểm danhĐã sửaLive: marked 3/14 in Flyers 1A 03/10 09:00 -> sheet 'đã điểm danh 3/14', list 'Điểm danh một phần · 3/14' with 'Tiếp tục điểm danh'.ảnh
P3-20P2Hành trình khách hàngDữ liệu mẫu: hai buổi tối nay 22:08–23:38 và 22:58–00:28 đã 'Đã điểm danh' từ sángĐã sửaLive /attendance 03/10 at 12:37: today only 09:00–10:30 and 14:00–16:00 sessions; none at 22:xx or past midnight; morning sessions 'Chưa điểm danh', no future session marked.ảnh
P3-22P2Hành trình khách hàngĐiểm vừa nhập ở Bảng điểm không hiện trong tab Học tập của học viênĐã sửaLive stu_0121 Học tập tab: 'Bảng điểm Starters 1B – YLE Progress 1 · 23/09/2026 11/15 Giỏi Bản nháp, Listening 3,5/5, Reading & Writing 3,5/5, Speaking 4/5'.ảnh
P3-23P2Hành trình khách hàngĐiểm dùng dấu chấm thập phân (10.72, 12.75, 3.5) thay vì dấu phẩyĐã sửaLive gradebooks: Điểm TB 10,72 / 11,68 / 11,86 (comma).ảnh
P3-28P2Hành trình khách hàngCông việc: loại việc tiếng Anh ('Call Task', 'Meeting Task', 'Email Task') và tiêu đề thô 'lead_name=… id=… time=…'Đã sửaLive /crm/tasks: 0 'Call Task' / 'Meeting Task' / 'Email Task', 0 'lead_name='; types shown 'Gọi điện', 'Họp', 'Email'.ảnh
P3-29P2Hành trình khách hàngCuộc gọi: tiêu đề tự sinh tiếng Anh 'Outbound Call to …'Đã sửaLive /crm/calls: 38 Gọi đi rows titled 'Gọi đi tới HV tiềm năng · 095*****532' etc.; 0 'Outbound'.ảnh
P3-33P2Hành trình khách hàngTrình tạo báo cáo hiện tên bảng kỹ thuật tiếng Anh (lead_profiles, cj_templates, gradebook_groups…)Đã sửaSame change as P1-06 (88fea43).ảnh
P3-34P2Hành trình khách hàngQuy trình tự động đang bật nhưng không chạy khi tạo đơn và thu tiềnĐã sửaLive: automation prc_02 got runs #1469 PT2610000338 and #1470 PT2610000339 · Đinh Quang Thịnh 'Hoàn thành' right after each payment; 'Gửi hôm nay' 1 -> 3.
P3-35P2Hành trình khách hàngTrang chủ Tuyển sinh: nhãn tiếng Anh và số quá hạn sai (QUÁ HẠN 0 trong khi Công việc có 21 việc quá hạn)Đã sửaLive /crm: 'Tổng quan tuyển sinh', tiles in Vietnamese, 'Quá hạn 21' = Công việc 'Quá hạn 21'.ảnh
P3-36P2Hành trình khách hàngBản tiếng Anh còn tiêu đề và nhãn cố định tiếng Việt, số tiền theo định dạng ViệtĐã sửaLocal /en (d5bb353): roles Owner/Branch manager/Accountant/Viewer (+ 'Cloned from Academic admin'), lead stage chips 'New contact'/'Trial', holidays 'National Day', 'Lunar New Year', staff 'Teacher · Teaching', money '521,325,575 VND'. Not translated on purpose: names a centre types itself (branch 'Chi nhánh Quận 1', room 'Trực tuyến', product categories) are tenant data, stored in one language.ảnh
P3-37P2Hành trình khách hàngNhật ký hệ thống có giờ ở tương lai, hành động là mã thô, thiếu thao tác bán hàng vừa làmĐã sửaLocal (6379a51): Đối tượng for transfer.matched shows 'Giao dịch ngân hàng' (en 'Bank transaction'), e-invoice rows 'Hoá đơn điện tử'. Rest already fixed live.
P3-39P2Hành trình khách hàngBáo cáo lấp đầy lớp hiển thị lớp vượt sĩ số 121–175% (tô đỏ)Đã sửaLive class-fill: max 100% (Movers 2B 12/12, Starters 1B 12/12, Flyers 1A 14/14); none over capacity.ảnh
P3-40P2Hành trình khách hàngCác thẻ KPI tài chính tô đỏ trên màn đầu tiên khách mở (công nợ, phải thu, chưa khớp)Đã sửaLive: overdue debt 43,7 tr vs dashboard revenue 30 ngày 521,3 tr (8%, was 69%); Chờ duyệt 29,3 tr; Chưa khớp 16,6 tr. Debt amounts in table still in red tone (by design for overdue).ảnh
P1-07P3Máy tínhTên đăng nhập mất chữ ĐĐã sửaLive users: duc.van.pham@..., anh.duc.bui@... (Đ -> d).ảnh
P1-08P3Máy tínhDanh mục hiển thị khoá kỹ thuật, tiêu đề cột bị cắtĐã sửaLocal (d02ec70): value table 564 px inside a 564 px card, no horizontal scroll; actions column (up/down/remove) fully visible.ảnh
P1-10P3Máy tínhHướng dẫn: tiến độ "Đã xem x/64" không ghi nhận tour đã xem hếtĐã sửaLive: hub 'Đã xem 0/64' -> ran Bảng điều khiển tour to the end, pressed 'Xong' -> hub 'Đã xem 1/64'.ảnh
P1-14P3Máy tínhThêm ngày nghỉ (Cài đặt Trung tâm) không báo gì khi để trốngĐã sửaLive Cài đặt > Trung tâm > Thêm ngày nghỉ empty: inline 'Chọn ngày nghỉ' / 'Nhập tên ngày nghỉ', field aria-invalid.ảnh
P1-15P3Máy tínhDòng giáo viên có con trỏ bấm được nhưng bấm không mở hồ sơĐã sửaLive: click on a non-name cell of the first teacher row opens /vi/hr/teachers/hrt_024.
P1-27P3Máy tínhBảng Vai trò bị cắt cột bên phảiĐã sửaLive Vai trò at 1440: 0 clipped cells (icon actions). Role code 'QA5498' blocked inline: 'Mã chỉ gồm chữ thường không dấu, số và dấu gạch dưới'.ảnh
P1-28P3Máy tínhMàn Hôm nay (giáo viên): thanh điều hướng dưới trôi giữa trang và che thẻ buổi họcĐã sửaLive /teach/today 1440×900: bottom tab bar display:none on desktop.ảnh
P1-29P3Máy tínhChỉ tiêu KPI: thẻ "Đạt chỉ tiêu 2/2" trong khi tiến độ mới 12–13%Đã sửaLive /targets: tile 'Đúng tiến độ 2/2 · Đúng tiến độ đến ngày 3/31 của tháng'.ảnh
P2-01P3Điện thoại / iPadLỗi JavaScript "ti" khi đóng sớm hướng dẫn "Tạo đơn hàng"Đã sửaLive phone: opened 'Tạo đơn hàng' tour and pressed Esc after 0.6 s and 1 s (2/2 runs): 0 pageerrors.
P2-02P3Điện thoại / iPadBước cuối của hướng dẫn không có nút "Xong", chỉ có "Xem lại"Đã sửaLive: last step shows primary 'Xong' with 'Xem lại' as secondary.ảnh
P2-03P3Điện thoại / iPadKhung minh hoạ trong hướng dẫn bị cắt mất chữ ở mép tráiĐã sửaLocal phone (44e00fa): step 3 frame no longer zooms; 'Lớp (phổ thông)', 'Trình độ hiện tại', 'Số điện thoại' complete; spotlight kept.ảnh
P2-04P3Điện thoại / iPadMenu bên trên điện thoại không đóng bằng phím EscĐã sửaLive phone: sidebar opened (menu links visible) -> Esc -> closed.ảnh
P2-09P3Điện thoại / iPadCông việc hiển thị chuỗi dữ liệu thô "lead_name=… id=… time=…" làm tiêu đề/mô tảĐã sửaLive phone /crm/tasks: no 'lead_name=' / '4417025' text.ảnh
P2-10P3Điện thoại / iPadCuộc gọi: tiêu đề trộn tiếng Anh "Outbound Call to HV Tiềm năng"Đã sửaLive phone /crm/calls: 'Gọi đi tới HV tiềm năng · 095*****…'; 0 'Outbound'.ảnh
P2-11P3Điện thoại / iPadMa trận quyền trong "Tạo vai trò" chỉ thấy 2/4 cột phạm vi trên điện thoạiĐã sửaLive phone Tạo vai trò: matrix uses one scope select per permission (71 selects), 0 elements overflow the screen.ảnh
P2-16P3Điện thoại / iPadMở thẳng dashboard/drill-down hiện "Danh mục không hợp lệ"Đã sửaLive: /dashboard/drill-down without params redirects to /dot/vi/dashboard.
P2-18P3Điện thoại / iPadThanh tab dưới của "Hôm nay" (giáo viên) không chạm đáy màn hình, nội dung lộ ra bên dướiĐã sửaLive phone /teach/today: bar position fixed, bottom = 844 (flush with viewport); no sessions past midnight. iPad: bar hidden (desktop layout).ảnh
P2-22P3Điện thoại / iPadNút chính và nút biểu tượng nhỏ hơn 40pxĐã sửaLocal phone (f010988): 'Tạo bảng điểm' 40 px high, row icon buttons 40×40, Lọc thêm 40, sidebar rows 40, top-bar search/guide/bell/avatar 40×40. Left < 40 px: inline text links (student name, phone number, mock banner link).ảnh
P2-23P3Điện thoại / iPadChữ dưới 12px ở nhãn trạng thái, bộ đếm và chữ viết tắt ảnh đại diệnĐã sửaLocal phone /students (f010988): 0 text nodes under 12 px (status chips, sidebar group labels, ⌘K, bell count now 12 px).
P2-24P3Điện thoại / iPadÔ nhập trong ngăn trên iPad dùng chữ 14px nên Safari iPad tự phóng to khi chạmĐã sửaLive iPad Thêm học viên: every text/tel/email input and textarea 16px (select triggers 13.5px are buttons, no zoom).
P2-25P3Điện thoại / iPadMỗi trang phát ~24 yêu cầu prefetch (_rsc) trả 404, hiện lỗi đỏ trong consoleĐã sửaLocal production build (aa9f2cf, next build --webpack + next start): phone dashboard 0 prefetch requests (live: 4 on load, 8 after one click, all 404 through the proxy); clicking a tile still navigates (1 normal RSC fetch). Infra alternative: forward Next-Router-Segment-Prefetch in the truongso.net/dot rewrite.
P2-26P3Điện thoại / iPadTrang Tuyển sinh tổng quan có tiêu đề tiếng Anh "Dashboard", nhãn "TASK / MEETING / CALLBACK"Đã sửaLive phone /crm: 'Tổng quan tuyển sinh', tiles 'Công việc hôm nay / Lịch hẹn hôm nay / Gọi lại / Quá hạn'.ảnh
P3-02P3Hành trình khách hàngThời lượng cuộc gọi 8 phút hiển thị '8:00' (dễ đọc thành 8 giờ)Đã sửaLive /crm/calls: durations '8 phút 04 giây', '1 phút 13 giây', '0 giây' (no 8:00).ảnh
P3-05P3Hành trình khách hàngLịch chọn Ngày sinh cho phép năm tới 2036Đã sửaLive convert (cus_00000l): Ngày sinh year list 1940–2026 (no future years).ảnh
P3-14P3Hành trình khách hàngKhối tổng tiền đơn hàng ghi 'Đã thu -2.000.000 đ' (dấu âm)Đã sửaLive order after 1 cash payment: 'Đã thu 2.400.000 đ' (no minus) in header and totals; drawer line shows voucher amount separately (order-drawer voucherLine).ảnh
P3-15P3Hành trình khách hàngXuất hoá đơn điện tử: tên người mua mặc định là học viên (trẻ 10 tuổi), email phụ huynh không điền sẵnĐã sửaLive: Xuất hoá đơn from PT2610000329 (student Huỳnh Khánh Trang) pre-fills buyer 'Bùi Thị Linh' (paying parent) and email [email protected].ảnh
P3-16P3Hành trình khách hàngVoucher NEWYEAR27 ghi 'Còn hiệu lực' dù hiệu lực từ 06/01/2027Đã sửaLive vouchers: NEWYEAR27 'Sắp áp dụng' 06/01/2027 – 05/02/2027.ảnh
P3-17P3Hành trình khách hàngGiao dịch ngân hàng mẫu có giờ ở tương laiĐã sửaLive 12:39: top bank transaction 03/10/2026 12:32 (before now); seeded times clamped to the past.
P3-21P3Hành trình khách hàngPhiếu điểm danh cho bấm chọn trước giờ học rồi mới báo lỗi khi lưu; không có nút 'Có mặt tất cả'Đã sửaLive at 12:57: Starters 1D 14:00 sheet says 'Điểm danh mở lúc 13:30 ngày 03/10/2026, 30 phút trước giờ học. Các ô điểm danh đang khoá.'; 'Có mặt tất cả' button present (disabled until open).ảnh
P3-24P3Hành trình khách hàngXếp lớp: hai lớp cùng tên 'Starters 1B', gói học phí không cho chọn số dư đã đóngĐã sửaLive Xếp lớp for Huỳnh Anh Sơn: each class shows its code (STA-2608-01, STA-2608-02...) and 'Khác trình độ hiện tại (MOVERS)' warning; only one Starters 1B. Paid-balance option comes from the order (fix-acad 5753da6).ảnh
P3-25P3Hành trình khách hàngTin nhắn tự soạn gửi phụ huynh không có trong tab mặc định 'Gửi đa kênh', chỉ nằm trong 'Nhật ký tự động'Đã sửaLocal (2216596): custom message from Huỳnh Anh Sơn's profile is listed in the default 'Gửi đa kênh' tab ('Zalo · Bùi Minh Long · Lịch học tuần sau… · Đã gửi'); 'Nhật ký tự động' no longer lists it (0 rows) unless the type filter 'Tin tự soạn' is chosen (1 row).ảnh
P3-26P3Hành trình khách hàngDữ liệu mẫu giáo viên lạc đề với trung tâm tiếng AnhĐã sửaLive teachers: subjects Khoá tiêu chuẩn / Premium / TOEFL; no Thể thao, nấu ăn, tiếng Pháp, Dã ngoại.ảnh
P3-27P3Hành trình khách hàngMa trận quyền hiện mã kỹ thuật dưới mỗi quyền (customers.view, crm.placement_tests.create…)Đã sửaLive roles: no codes in list (branch_manager/le_tan hidden), Giáo viên edit drawer shows no permission codes.ảnh
P3-30P3Hành trình khách hàngDanh sách nhân sự ghi 'Teacher · Giảng dạy'Đã sửaLive /staff vi: 'Giáo viên · Giảng dạy' (0 'Teacher').ảnh
P3-38P3Hành trình khách hàngSức khoẻ: số đo dùng dấu chấm thập phân (133.5, 18.6, 9.3)Đã sửaLocal (43d13cd): the dotted column was Tuổi; now 8,3 / 8,6 / 9,3; weight/height/BMI already comma.ảnh

Còn lại

Ghi nhận thêm trong lúc kiểm tra lại, chưa nằm trong 95 lỗi:

Đề xuất cải thiện

Những điểm không phải lỗi hiển thị nhưng cần làm trước khi đưa vào dùng thật. Công sức: S vài giờ, M vài ngày, L vài tuần.

Hạng mụcHiện trạngĐề xuấtCông sức
Kết nối backend thậtToàn bộ dữ liệu đang chạy trên dữ liệu mẫu trong trình duyệt. Khoảng 550 endpoint chỉ có ở lớp giả lập; quy tắc tính giá, số dư, điểm danh nằm trong lớp này.Viết đặc tả API từ lớp giả lập (đã có kiểu dữ liệu), chuyển quy tắc tiền và số dư sang backend, dùng giao dịch thật thay cho chụp/khôi phục dữ liệu.L
Phân quyền theo vai tròBảng quyền 10 vai trò lưu được nhưng chỉ trang Giáo viên kiểm tra quyền; các trang khác mở cho mọi vai trò.Một danh mục mã quyền chung, kiểm tra ở cả nút thao tác và API; thêm quyền theo phạm vi (của tôi / chi nhánh / tất cả).M
Kiểm thử tự độngChưa có tệp kiểm thử nào. Ba lượt QC tay tìm 95 lỗi.Đưa các kịch bản QC (hành trình bán hàng, xếp lớp, điểm danh) thành kiểm thử Playwright chạy trong CI; kiểm thử đơn vị cho bộ tính giá và sổ quỹ.M
Dữ liệu mẫu quá lớn cho SafariDữ liệu mẫu lưu trong trình duyệt khoảng 3,9 triệu ký tự. Chrome đủ chỗ; Safari trên iPhone/iPad có thể đầy, khi đó thay đổi trong buổi demo mất sau khi tải lại.Nén dữ liệu khi lưu hoặc chuyển sang IndexedDB; hiện thông báo khi không lưu được.S
Tải trang nặngThư viện Excel (xlsx, exceljs) nạp ngay khi mở trang dù chỉ dùng lúc xuất tệp.Nạp thư viện khi người dùng bấm Xuất/Nhập (dynamic import).S
Mã cũ không còn dùngMột phần mã CRM cũ (danh sách khách hàng dạng bảng kéo thả, trang kiểm tra xếp lớp cũ) không còn trang nào gọi tới.Xoá mã chết để giảm nhầm lẫn khi bảo trì.S
Proxy truongso.net/dotProxy bỏ header Next-Router-Segment-Prefetch nên các yêu cầu tải trước bị 404; bản hiện tại đã tắt tải trước để tránh lỗi.Chuyển tiếp header này trong rewrite của truongso.net rồi bật lại tải trước.S