# Câu hỏi bổ sung gửi khách — soạn 16/09/2026, đã trả lời xong hết ngày 19/09/2026

Trạng thái: **Không còn câu nào tồn đọng.** File này giữ lại làm nhật ký câu hỏi/trả lời, không cần gửi thêm gì cho khách nữa. Nếu phát sinh câu hỏi mới, mở batch mới thay vì viết tiếp vào đây.

Bối cảnh: các câu hỏi này phát sinh trong lúc dựng demo hoặc còn sót lại từ 6 câu hỏi Giai đoạn 0 đã gửi trước đó. Không điểm nào từng chặn việc tiếp tục demo bằng dữ liệu mẫu.

Đã bỏ khỏi danh sách:
- **"Bộ máy duyệt 4 cấp"** — khách đã trả lời (TGĐ → GĐKV → Trưởng bộ phận → NVKD; chỉ cần GĐKV duyệt là đủ cho đa số đơn; TGĐ/Kế toán trưởng chỉ can thiệp khi đơn có xin thêm khuyến mãi/chiết khấu ngoài quy định; một số khu vực không đủ 4 cấp do thiếu Trưởng bộ phận, khi đó chỉ cần GĐKV duyệt) — đã build xong (`p1-4`), xem `CLAUDE.md` và `src/lib/rbac.ts`/`src/app/(app)/don-hang/actions.ts`.
- **"Chương trình chuyển giao"** — khách đã trả lời ngày 19/09/2026: đây là các lớp học quy trình sử dụng sản phẩm, đại lý phải học xong mới được lấy hàng nhóm sản phẩm tương ứng (ví dụ: mediworld.vn/khoa-hoc-da-tham-my/); hệ thống chỉ cần hiển thị danh sách khoá đã học của từng khách để tra nhanh thay vì kiểm giấy tờ; có khoá tốn phí nhưng thường miễn phí nếu đơn đạt 5tr trở lên hoặc NVKD hỗ trợ, đây là quyết định linh hoạt của NVKD chứ không phải luật cứng hệ thống; đề xuất học gần như luôn được duyệt nên không cần luồng phê duyệt riêng. Trùng khớp với phần đã xây sẵn (`trainingCourses`/`customerCourseCompletions`, trang `/danh-muc/khoa-hoc` và mục "Khóa học đã học" ở hồ sơ khách hàng) — đã bổ sung dữ liệu mẫu (5 khoá, 37 lượt hoàn thành) và xác nhận đúng đầu ra ngày 19/09/2026.
- **"Ngưỡng cảnh báo kinh doanh"** — khách trả lời ngày 19/09/2026: không có ý kiến cụ thể về mức 30%/70% (do bộ phận khác đề xuất), chỉ xác nhận cơ chế đúng ý (so % với kỳ trước, dưới ngưỡng thì cảnh báo bằng icon tam giác) và muốn **tự chỉnh được ngưỡng, không cố định**. Kiểm tra code thì tính năng này đã xây xong từ trước — `/danh-muc/cai-dat` (chỉ DIRECTOR), lưu ở `tenants.alertRevenueDropPercent`/`alertStaffMinAchievementPercent`, `runAlertScan` đọc lại từ DB mỗi lần quét (không cần sửa code khi đổi số). Đã xác nhận sống: đổi 25/75 → lưu → tải lại vẫn đúng → trả về 30/70. Sửa 1 chỗ: dòng chú thích trong `/danh-muc/cai-dat` từng ghi nhầm "so theo tuần/tháng/quý/năm đang xem" — thực tế cảnh báo là job quét tự động mỗi đêm, luôn so tháng vừa đóng sổ với tháng trước, không theo bộ lọc kỳ người dùng đang xem ở trang báo cáo — đã sửa lại chữ cho đúng thực tế (`settings-form.tsx`).
- **"Văn bản"** — khách trả lời ngày 19/09/2026: văn bản chung công ty, thường là file PDF đã duyệt; toàn công ty xem/tải được; chỉ Admin/TGĐ hoặc 1 người được cấp quyền riêng (ví dụ HCNS) mới tải lên được. Kiểm tra code thì đã xây xong từ trước, khớp gần như tuyệt đối — trang `/van-ban` (mọi vai trò xem được, không lọc), tải lên chỉ khi `role === DIRECTOR` hoặc cờ `users.canUploadDocuments` (cấp qua bảng Người dùng, chỉ DIRECTOR cấp được), nhận PDF/PNG/JPEG tối đa 8MB. Đã xác nhận sống hai chiều: NVKD thường không thấy nút tải lên → cấp quyền → nút hiện ra đúng → gỡ quyền → nút biến mất lại. Hệ thống này không có vai trò "Admin" tách riêng khỏi "TGĐ" — `DIRECTOR` (Ban giám đốc) đóng cả hai vai, không cần hỏi thêm khách điểm này.
- **"Đề xuất — 4 loại phiếu"** — khách trả lời ngày 19/09/2026: 4 loại chỉ là phổ biến chứ không phải danh sách cố định (loại khác vẫn có thể phát sinh); ai cũng tạo được (NVKD, trợ lý GĐ, admin kinh doanh, nhân viên chuyên môn); luồng duyệt là quản lý trực tiếp trước, rồi TGĐ và 1 bộ phận liên quan tuỳ nội dung (ví dụ khuyến mãi → kế toán trưởng, mở lớp → trưởng phòng chuyên môn); không có mẫu trường dữ liệu cố định — khách tự đề xuất kiểu tự nhập nội dung rồi gắn thẻ người cần duyệt, mỗi người có nút duyệt/từ chối riêng, và hỏi lại có làm được kiểu đó không. Kiểm tra code thì đã xây đúng y như vậy từ trước (`proposals`/`proposalApprovers`, trang `/cong-viec/de-xuat`) — tiêu đề/nội dung tự do không mẫu cố định, mọi vai trò tạo được, gắn thẻ tự do bất kỳ ai làm người duyệt, mỗi người chỉ tự quyết được dòng của mình, đủ tất cả duyệt mới "Đã duyệt", 1 người từ chối là "Từ chối" toàn bộ. Đã xác nhận sống: NVKD tạo đề xuất gắn thẻ quản lý trực tiếp + TGĐ → cả hai lần lượt duyệt → trạng thái tổng chuyển đúng "Đã duyệt". Sửa 1 lỗi nhỏ phát hiện khi kiểm tra: danh sách người duyệt hiển thị không theo đúng thứ tự đã gắn thẻ (thiếu `ORDER BY` trên cột `sortOrder`) — đã sửa ở `src/lib/proposals.ts`, giờ hiển thị đúng thứ tự quản lý trước/TGĐ sau như khách mô tả (thứ tự chỉ để hiển thị, không chặn ai duyệt trước — đúng tinh thần đề xuất đơn giản của khách).
- **"Ngân sách khuyến mãi"** — khách trả lời ngày 19/09/2026: **không có ngân sách** — khuyến mãi là chính sách chiết khấu theo bậc giá trị đơn (VD: đơn ≥5tr được 15% KM, ≥10tr được 20%,...) hoặc mua-nhiều-tặng-nhiều (mua 5 tặng 1, mua 10 tặng 2...), luôn quy thẳng ra hàng chứ không hoàn tiền mặt — đúng khớp cơ chế `qtyPromo`/`promoValue` đã có sẵn trên đơn hàng, không cần xây gì thêm cho phần này. Trường hợp NVKD xin thêm ngoài chính sách chuẩn (đại lý tốt) thì quản lý trực tiếp duyệt trước, lên TGĐ duyệt lần nữa — dùng đúng tính năng "Đề xuất" ở trên, gắn thẻ quản lý + TGĐ là đủ, không cần luồng riêng. Khách bổ sung 1 yêu cầu mới: nếu được thì thêm tính năng xem số lượng + tên mặt hàng khuyến mãi mà từng NVKD đã dùng, theo Tuần/Tháng/Quý/Năm. Đã xây bảng "Hàng khuyến mãi theo NVKD" ở `/bao-cao` (hàm `promoGoodsByStaff` trong `src/lib/reports.ts`), dùng lại đúng 5 kỳ Ngày/Tuần/Tháng/Quý/Năm đã có sẵn trên trang, và thêm sheet "Hàng KM theo NVKD" vào file Excel xuất ra. Đã xác nhận sống: tổng giá trị KM trong bảng mới khớp chính xác 243.320.000đ với số "Giá trị hàng khuyến mãi" đã có ở sheet Tổng hợp.
- **"Nhân viên & Chuyên môn"** — khách trả lời ngày 19/09/2026 (2 vòng): vòng 1 — Chuyên môn phụ trách đào tạo, quyền hạn như NVKD, chỉ khác KPI; báo cáo lớp đã dạy theo ngày; muốn xem số lớp theo Tuần/Tháng/Quý/Năm kèm loại lớp và ghi chú tình hình từng lớp. Đã build trang hồ sơ nhân viên `/danh-muc/nguoi-dung/[id]` (`p4-2`, xong trước câu này). Vòng 2 (chính là câu "chỉ tiêu mời khách theo sự kiện") — khách làm rõ: **lớp học không có chỉ tiêu** (số người học do đại lý quyết, khớp đúng những gì đã build), **sự kiện tại BV/TMV theo khu vực cũng không cần chỉ tiêu**; chỉ có **sự kiện được giao chỉ tiêu mời khách** mới cần theo dõi — không thường xuyên (trung bình 1 tháng 1 sự kiện toàn công ty), TGĐ giao chỉ tiêu theo khu vực, GĐKV giao lại cho từng NVKD trong khu vực mình, NVKD ghi nhận khách mời cộng dồn tới hạn (không bắt buộc nhập hàng ngày); hiện quản lý bằng Excel do trợ lý GĐKV phụ trách; đặc thù riêng: một số khách yêu cầu CME hoặc chứng nhận tham dự (có thu phí), tra lại trong Excel rất chậm mỗi khi tới đợt cấp — đây là tính năng TGĐ bên khách muốn có.

  Đã xây mới hoàn chỉnh (bảng `inviteEvents`/`inviteEventTerritoryQuotas`/`inviteEventStaffQuotas`/`inviteEventGuests`, trang `/danh-muc/su-kien-moi-khach` + `/danh-muc/su-kien-moi-khach/[id]`, cũng gắn link ở `/cong-viec` để NVKD vào được không cần quyền Danh mục): TGĐ tạo sự kiện + giao chỉ tiêu theo khu vực; GĐKV giao lại chỉ tiêu cho từng NVKD trong khu vực mình; NVKD ghi nhận từng khách mời (tên, loại, ngày mời, ghi chú) không giới hạn phải nhập hàng ngày; mỗi khách mời có 2 cờ riêng **CME** và **Chứng nhận tham dự** cùng cờ tham dự thực tế, kèm bộ lọc "chỉ hiện khách mua CME hoặc chứng nhận" — tra ngay lập tức thay vì lục Excel. Phân quyền xem/sửa theo đúng miền (khu vực): NVKD chỉ thấy khu vực mình, nhưng thấy được khách đồng nghiệp cùng miền mời (không chỉ riêng mình) — chỉ sửa/xoá được khách do chính mình ghi nhận; GĐKV/TGĐ thấy và giao chỉ tiêu được cho khu vực mình phụ trách; TGĐ thấy toàn bộ. Đã xác nhận sống đầy đủ: TGĐ sửa chỉ tiêu khu vực → số cộng dồn đúng; thêm khách mới → thống kê theo khu vực/NVKD tự cập nhật; đánh dấu CME xong lọc ra đúng; test chéo Phạm Thu Hà (Miền Bắc) thấy được khách Đỗ Quang Huy mời nhưng không có nút sửa/xoá trên dòng đó, đúng thiết kế; test Võ Thị Lan (Miền Trung, SALES) không thấy chỉ tiêu/khách của Miền Bắc/Miền Nam.
