- Given Có quyền
targets.managephạm vi tất cả - When Chọn Chỉ tiêu → + Tạo chỉ tiêu, chọn kỳ Tháng 10/2026, chọn chỉ tiêu từ danh mục (lead mới 300, học thử 120, chuyển đổi 60, doanh thu ký mới 900.000.000, thực thu 850.000.000) và Lưu nháp
- Then Một
targettrạng tháidraftđược tạo với một dòng cho mỗi chỉ tiêu ở phạm vi trung tâm; cạnh mỗi ô nhập hiển thị thực tế của kỳ liền trước và cùng kỳ năm trước; bản nháp chỉ hiển thị cho người có quyền quản lý.
PRD 15 · Chỉ tiêu và hiệu suất
Chỉ tiêu theo tháng và quý cho trung tâm, chi nhánh và từng cá nhân; giá trị thực tế tính tự động từ dữ liệu tuyển sinh, học phí và điểm danh, không nhập tay. Bảng chỉ tiêu có mục tiêu, thực tế, phần trăm, dự báo về đích, cảnh báo khi chậm và lịch sử sửa đổi có lý do. Quy tắc thưởng chỉ ở mức công thức, chi trả thuộc PRD 06.
Xuất xứ / Prompt / Giới hạn
Tài liệu do trợ lý AI soạn trong một phiên làm việc ngày 16/09/2026, mở rộng bộ PRD theo yêu cầu gốc được trích nguyên văn ở trang mục lục. Đây là bản đề xuất để đội thảo luận, chưa phải quyết định của đội sản phẩm.
Nguồn
- Nghiên cứu công khai về đối thủ cạnh tranh (PSE ONE, pse4.one), mã nguồn
center-crm-frontendvà đặc tả OpenAPI/v3trên staging (182 endpoint), tính đến ngày 10/09/2026. - Nhãn existing / extend / new trong trang được xác định bằng cách đối chiếu với đặc tả
/v3trên staging tại thời điểm trên. - Đợt quét thứ hai các nguồn công khai của PSE ONE ngày 16/09/2026 (trang tính năng, bảng phí dịch vụ, mục hướng dẫn sử dụng).
- Tham chiếu đối thủ cạnh tranh: trang chủ pse4.one (khảo sát công khai ngày 16/09/2026) liệt kê mô-đun "Quản lý chỉ tiêu"; mô-đun báo cáo có "Thống kê doanh số tư vấn", "Thống kê giáo viên", "Thống kê buổi học còn lại" trong khoảng 50 loại báo cáo; lương giáo viên tính tự động theo giờ dạy, hệ số, thưởng và phạt. Cách đặt chỉ tiêu không được công bố; thiết kế dưới đây là của Trường Số.
Giới hạn
- Cần xác minh khi khảo sát trực tiếp trong ứng dụng, vì đăng nhập tự động vào sản phẩm tham chiếu chưa được cấp phép trong phiên soạn:
- Mô-đun "Quản lý chỉ tiêu" của đối thủ đặt chỉ tiêu theo phạm vi nào (trung tâm, chi nhánh, từng nhân viên) và theo kỳ nào (tháng, quý, năm).
- Giá trị thực tế của họ được tính tự động hay nhập tay, và có dự báo về đích hay không.
- "Thống kê doanh số tư vấn" có so sánh với chỉ tiêu và có bảng xếp hạng nhân viên hay không.
- Thưởng và phạt trong công thức lương giáo viên có gắn với chỉ tiêu hay là khoản nhập tay trong bảng lương.
Thiết kế đề xuất
Bảng chỉ tiêu đặt mục tiêu cạnh thực tế trên cùng một dòng với chip trạng thái theo tốc độ; luồng tạo và phân bổ ba bước chặn xuất bản khi tổng dòng con lệch dòng cha; tư vấn viên chỉ thấy chỉ tiêu và thứ hạng của bản thân, kể cả trên điện thoại.









1Mục đích
Chủ trung tâm điều hành bằng vài con số: tháng này cần bao nhiêu học viên mới, bao nhiêu doanh thu, chi nhánh nào đang chậm, tư vấn viên nào dẫn đầu. Hiện nay các con số này nằm trong Excel, còn dashboard của ứng dụng chỉ hiển thị thực tế mà không có mục tiêu để so sánh. Mô-đun này đặt chỉ tiêu cạnh thực tế trên cùng một màn hình: phân bổ từ trung tâm xuống chi nhánh và từng cá nhân, thực tế tính từ bản ghi đã có, mọi thay đổi để lại dấu vết kèm lý do. Nguyên tắc cốt lõi: không có ô nhập tay cho giá trị thực tế, mọi giá trị truy nguyên được đến bản ghi nguồn; con số không tính được từ dữ liệu thì chưa được đưa vào danh mục chỉ tiêu.
Trong phạm vi
- Danh mục chỉ tiêu cố định theo bốn nhóm: tuyển sinh, doanh thu và công nợ, giáo vụ, giáo viên; mỗi chỉ tiêu có công thức và nguồn xác định.
- Kỳ theo tháng và theo quý; phạm vi trung tâm, chi nhánh, cá nhân (tư vấn viên, giáo viên, kế toán).
- Phân bổ từ trên xuống có kiểm tra tổng: các chi nhánh cộng lại bằng trung tâm, các cá nhân cộng lại bằng chi nhánh, hoặc ghi đè có lý do.
- Bảng chỉ tiêu (mục tiêu, thực tế, phần trăm, tốc độ, dự báo về đích), xếp hạng tư vấn viên, ô "Chỉ tiêu của tôi".
- Cảnh báo khi tốc độ dưới 80% từ giữa kỳ; mục chỉ tiêu trong bản tổng hợp hằng tuần của PRD 09.
- Ảnh chụp (snapshot) hằng ngày, chốt kỳ, lịch sử sửa đổi kèm người sửa và lý do.
- P2: quy tắc thưởng dạng công thức; đầu ra là số tiền ước tính, chi trả qua bảng công của PRD 06.
Ngoài phạm vi
- Nhập tay hoặc nhập từ Excel giá trị thực tế.
- Chỉ tiêu theo tuần hoặc theo ngày.
- Tính lương, hoa hồng và chi trả thưởng (PRD 06).
- OKR, mục tiêu định tính, mục tiêu cá nhân tự đặt.
- Dự báo bằng mô hình thống kê; dự báo ở đây là phép chiếu tuyến tính theo tốc độ hiện tại.
2Hiện trạng
Không có khái niệm chỉ tiêu trong center-crm-frontend hoặc API /v3; các endpoint dashboard hiện có trả về thực tế theo kỳ và là nguồn cho mô-đun này, được một tiến trình nền tổng hợp thành ảnh chụp hằng ngày.
| Năng lực hiện có | Endpoint | Giữ lại? |
|---|---|---|
| Thẻ quản lý: số lượng và giá trị đã thắng, đã thua, tỷ lệ chuyển đổi | GET /v3/crm/dashboard/manager-summary existing | có; nguồn cho chuyển đổi, doanh thu ký mới (trung tâm, chi nhánh) |
| Funnel theo giai đoạn; xu hướng thắng/thua; số lượng và giá trị thắng theo từng tư vấn viên | /funnel, /won-lost-trend, /top-sales existing | có; nguồn cho lead mới, đường tốc độ theo tuần và chỉ tiêu cá nhân của tư vấn viên |
| Số liệu học phí: tổng lập, đã thanh toán, chưa thanh toán, số quá hạn | GET /v3/teacher/school-finance/tuitions/stats existing | có; nguồn cho thực thu và thu công nợ quá hạn |
| Danh sách tư vấn viên; chi nhánh được truy cập | /v3/crm/sale-profiles, /lightweight, /v3/crm/me/accessible-schools existing | có; dùng khi phân bổ và lọc |
| Chỉ tiêu, dòng chỉ tiêu, ảnh chụp, lịch sử sửa đổi, quy tắc thưởng | không có | new dưới /v3/crm/targets |
| Chuyên cần, tái ghi danh, học viên nghỉ học, số buổi dạy, đánh giá của phụ huynh | thực thể mới của PRD 02, 04, 05, 06, 07 | nguồn cho nhóm P2, khả dụng khi mô-đun nguồn phát hành |
3User story và tiêu chí chấp nhận
- Given Bản nháp trung tâm có chuyển đổi 60
- When Mở bước Phân bổ, chọn "Chia theo tỷ trọng kỳ trước" hoặc nhập tay từng chi nhánh
- Then Mỗi chi nhánh trong
accessible-schoolsnhận một dòng con; tổng dòng con được so với dòng cha theo thời gian thực; khi lệch, nút Xuất bản bị vô hiệu và hiển thị chênh lệch ("Thiếu 4"); "Ghi đè tổng" cần lý do bắt buộc. Quản lý chi nhánh lặp lại bước này cho tư vấn viên (danh sách từsale-profiles/lightweight); tư vấn viên chỉ thấy chỉ tiêu của bản thân sau khi xuất bản.
- Given Ngày 18/10/2026, chỉ tiêu tháng 10 đã xuất bản, ảnh chụp hằng ngày đã chạy
- When Mở Chỉ tiêu → tab Chi nhánh
- Then Mỗi dòng hiển thị mục tiêu, thực tế đến hết ngày hôm trước, phần trăm đạt, tốc độ, dự báo cuối kỳ và chip Đã đạt / Đúng tiến độ / Chậm / Nguy cơ theo ngưỡng ở mục 5; thời điểm ảnh chụp gần nhất hiển thị ở đầu bảng.
- Given Đã qua giữa kỳ (ngày 15 của tháng, ngày 45 của quý) và một dòng có tốc độ dưới 0,80
- When Ảnh chụp hằng ngày hoàn tất
- Then Thông báo trong ứng dụng "Chỉ tiêu [tên] của [phạm vi] đang ở 62% tốc độ, dự báo đạt 71%" gửi đến chủ sở hữu dòng và cấp quản lý trực tiếp; tối đa một cảnh báo mỗi 7 ngày cho mỗi dòng; khi tốc độ trở lại từ 0,80, gửi thông báo "đã trở lại tiến độ".
- Given Chỉ tiêu đã xuất bản
- When Giảm chuyển đổi của một chi nhánh từ 25 xuống 18 vì chi nhánh đóng cửa sửa chữa hai tuần, nhập lý do
- Then Một
target_revisionlưu giá trị trước, sau, người sửa, thời điểm, lý do; các dòng con lệch tổng được đánh dấu cần phân bổ lại; người nhìn thấy dòng đó được thông báo; các ảnh chụp trước vẫn giữ mục tiêu tại thời điểm chụp.
- Given Kỳ đã kết thúc và qua thời gian chờ đối soát (mặc định 5 ngày)
- When Tiến trình nền chạy ảnh chụp cuối cùng
- Then Chỉ tiêu chuyển sang
closed, ảnh chụp cuối mang cờis_final; ghi nhận muộn không thay đổi số đã chốt; chỉ chủ trung tâm được "Mở lại kỳ" kèm lý do, tạo ảnh chụp cuối mới và một bản ghi sửa đổi.
- Given PRD 04 và 07 đã phát hành; chỉ tiêu quý có chuyên cần 92%, tái ghi danh 75%, học viên nghỉ học tối đa 12
- When Mở bảng chỉ tiêu tab Chi nhánh
- Then Dòng tỷ lệ hiển thị mục tiêu và thực tế theo phần trăm, không có dự báo tuyến tính; dòng "học viên nghỉ học tối đa" có chiều càng thấp càng tốt và chuyển sang Nguy cơ khi thực tế vượt 80% mức tối đa trước giữa kỳ; giáo viên chỉ thấy dòng của bản thân trên trang chủ giáo viên.
- Given Có quyền
targets.bonus_rules - When Tạo quy tắc tại
/settings/targets/bonus-rules: vai trò tư vấn viên, chỉ tiêu doanh thu ký mới, bậc [100% đến dưới 120%: 2% doanh thu ký mới; từ 120%: 3%], hiệu lực từ tháng 1/2027 - Then Các bậc phải liên tục và không chồng lấn; từ ảnh chụp cuối cùng, mỗi dòng cá nhân có
bonus_estimate; PRD 06 đọc giá trị này để tạo dòng điều chỉnh "Thưởng chỉ tiêu tháng MM/YYYY" trong bảng công; phê duyệt và chi trả nằm ở PRD 06.
4Màn hình
Bộ chọn kỳ (tháng, quý; mặc định kỳ hiện tại), bộ lọc chi nhánh, tab: Trung tâm · Chi nhánh · Cá nhân · Xếp hạng · Lịch sử. Dòng "Số liệu đến hết 17/10/2026 23:30" và nút "Tính lại ngay" cho người có quyền quản lý. Hành động: + Tạo chỉ tiêu, Xuất Excel.
Cột: chỉ tiêu, phạm vi (trung tâm, chi nhánh hoặc cá nhân kèm ảnh đại diện), mục tiêu, thực tế (từ ảnh chụp gần nhất, liên kết drill-down đến báo cáo nguồn của PRD 09), % đạt (thanh tiến độ), tốc độ, dự báo (trống với kiểu tỷ lệ), trạng thái (chip Đã đạt / Đúng tiến độ / Chậm / Nguy cơ / Chưa đủ dữ liệu), thao tác (Sửa mục tiêu, Phân bổ, Xem lịch sử).
Chọn một dòng mở trang chi tiết /targets/:id: cây dòng chỉ tiêu (trung tâm → chi nhánh → cá nhân), biểu đồ thực tế tích luỹ theo ngày so với đường mục tiêu tuyến tính, tab Lịch sử (thời điểm, người sửa, giá trị trước, sau, lý do) và tab Thưởng (P2). Trạng thái rỗng: "Chưa có chỉ tiêu cho kỳ này. Tạo chỉ tiêu để so sánh với số liệu thực tế." kèm nút Tạo chỉ tiêu và "Sao chép từ kỳ trước". Với tư vấn viên và giáo viên, tab Trung tâm và Chi nhánh ẩn đi.
Bước 1 Kỳ và chỉ tiêu: chọn loại kỳ, kỳ, đánh dấu chỉ tiêu theo nhóm; mỗi chỉ tiêu có ô nhập mục tiêu trung tâm và hai cột tham chiếu (kỳ liền trước, cùng kỳ năm trước). Bước 2 Chi nhánh: bảng chỉ tiêu × chi nhánh; nút "Chia đều", "Chia theo tỷ trọng kỳ trước"; dòng tổng ở cuối với chênh lệch tô màu theo token trạng thái. Bước 3 Cá nhân (tuỳ chọn, quản lý chi nhánh có thể làm sau): bảng chỉ tiêu × cá nhân theo chi nhánh. Nút Lưu nháp và Xuất bản; xuất bản bị chặn khi còn chênh lệch tổng chưa ghi đè.
Bộ chọn kỳ, chi nhánh (hoặc toàn trung tâm), chỉ tiêu xếp hạng (mặc định doanh thu ký mới). Cột: hạng, thay đổi so với tuần trước, tư vấn viên, chi nhánh, mục tiêu, thực tế, % đạt, tốc độ; xếp theo phần trăm đạt, không theo giá trị tuyệt đối. Tư vấn viên thấy toàn bộ bảng trong chi nhánh khi ranking_visibility = branch (mặc định) hoặc chỉ thứ hạng của bản thân khi là self. Ba dòng đầu có nền nhạt; dòng của người đang xem được ghim khi cuộn. Trạng thái rỗng: "Chưa có chỉ tiêu cá nhân nào được xuất bản cho kỳ này."
Ô trên trang chủ: tối đa năm thanh tiến độ gồm nhãn, thực tế / mục tiêu, phần trăm, "còn thiếu N", số ngày còn lại; dòng cuối "Hạng 3/8 trong chi nhánh" khi được phép xem. Trang đầy đủ: cùng dữ liệu kèm đường tốc độ theo tuần (từ dữ liệu thắng/thua) và danh sách cảnh báo đã nhận. Trạng thái rỗng: "Chưa có chỉ tiêu được giao cho kỳ này."
5Quy tắc nghiệp vụ
| metric_key | Nhãn (nhóm) | Kiểu | Phạm vi (TT trung tâm, CN chi nhánh) | Giá trị thực tế và nguồn | Giai đoạn |
|---|---|---|---|---|---|
leads_new | Lead mới (tuyển sinh) | đếm | TT, CN, cá nhân | lead tạo trong kỳ, trừ lead trùng; nguồn funnel | P1 |
trials_attended | Học thử (tuyển sinh) | đếm | TT, CN, cá nhân | trial_booking trạng thái attended trong kỳ (PRD 01), quy cho tư vấn viên tạo lượt đặt | P1 |
conversions | Chuyển đổi (tuyển sinh) | đếm | TT, CN, cá nhân | lead chuyển sang thắng trong kỳ; nguồn manager-summary, top-sales | P1 |
revenue_signed | Doanh thu ký mới (doanh thu) | tiền | TT, CN, cá nhân | tổng giá trị cơ hội của lead thắng trong kỳ; nguồn manager-summary, top-sales | P1 |
revenue_collected | Doanh thu thực thu (doanh thu) | tiền | TT, CN | tổng thanh toán hợp lệ ghi nhận trong kỳ; nguồn tuitions/stats | P1 |
overdue_collected | Thu công nợ quá hạn (doanh thu) | tiền | TT, CN, cá nhân (kế toán) | thanh toán trong kỳ trên hoá đơn đã quá hạn tại đầu kỳ; nguồn tuitions/stats (mở rộng) | P1 |
attendance_rate | Tỷ lệ chuyên cần (giáo vụ) | tỷ lệ | TT, CN | (có mặt + muộn) / đã điểm danh trên các buổi học trong kỳ (PRD 04) | P2 |
renewal_rate | Tỷ lệ tái ghi danh (giáo vụ) | tỷ lệ | TT, CN | học viên có gói kết thúc trong kỳ và có gói mới trong 30 ngày sau / học viên có gói kết thúc trong kỳ (PRD 02, 05) | P2 |
withdrawals_max | Học viên nghỉ học tối đa (giáo vụ) | đếm, càng thấp càng tốt | TT, CN | học viên chuyển sang Đã nghỉ trong kỳ (PRD 02) | P2 |
sessions_taught | Số buổi dạy (giáo viên) | đếm | cá nhân (giáo viên) | buổi học đã diễn ra với vai trò giáo viên chính hoặc dạy thay (PRD 04, 06) | P2 |
parent_rating | Đánh giá của phụ huynh (giáo viên) | điểm 1–5 | cá nhân (giáo viên), CN | điểm trung bình đánh giá của phụ huynh trong kỳ (PRD 07); tối thiểu 5 đánh giá | P2 |
- Danh mục chỉ tiêu cố định ở cấp sản phẩm; tenant chọn chỉ tiêu để dùng, không tự định nghĩa công thức; chỉ tiêu có mô-đun nguồn chưa phát hành không hiển thị.
- Một
targetlà duy nhất theo (center_id, period_type, period_key); kỳ tháng ghi2026-10, kỳ quý ghi2026-Q4. Chỉ tiêu quý và tháng độc lập. - Kiểm tra tổng áp dụng cho kiểu đếm và tiền: tổng dòng con bằng dòng cha, sai số 0. Kiểu tỷ lệ và điểm không kiểm tra tổng; dòng cha dùng thực tế tổng hợp. Ghi đè tổng cần quyền
targets.overridevà lý do tối thiểu 10 ký tự; dòng cha mang cờsum_overridden. - Phần trăm thời gian đã qua = số ngày đã qua / tổng số ngày của kỳ (múi giờ Asia/Ho_Chi_Minh); tenant có thể bật "tính theo ngày làm việc" để loại chủ nhật và ngày nghỉ lễ của PRD 03. Tốc độ = (thực tế / mục tiêu) / phần trăm thời gian đã qua; dự báo = thực tế / phần trăm thời gian đã qua; chỉ tính từ ngày thứ 3 của kỳ, trước đó hiển thị Chưa đủ dữ liệu.
- Ngưỡng trạng thái: Đã đạt khi thực tế lớn hơn hoặc bằng mục tiêu; Đúng tiến độ khi tốc độ từ 0,95; Chậm khi từ 0,80 đến dưới 0,95; Nguy cơ khi dưới 0,80. Với chỉ tiêu càng thấp càng tốt, Nguy cơ khi thực tế / mục tiêu lớn hơn phần trăm thời gian đã qua cộng 0,20. Với kiểu tỷ lệ, so sánh trực tiếp và Chưa đủ dữ liệu khi mẫu số dưới 10.
- Cảnh báo tốc độ chỉ gửi từ giữa kỳ, tối đa một lần mỗi 7 ngày cho mỗi dòng; không gửi cho dòng đã đạt hoặc vừa được sửa trong 24 giờ.
- Ảnh chụp chạy hằng ngày lúc 23:30 cho mọi kỳ đang mở, kích hoạt tay (quyền quản lý) tối đa 6 lần một giờ; ảnh chụp lưu mục tiêu tại thời điểm chụp nên sửa mục tiêu không thay đổi lịch sử.
- Kỳ được chốt tự động sau thời gian chờ đối soát (mặc định 5 ngày, cấu hình 0–15). Sau khi chốt, số liệu không thay đổi; mở lại cần quyền
targets.reopen. Sửa mục tiêu sau khi xuất bản luôn cần lý do; xoá chỉ được phép ở trạng thái nháp. - Cá nhân được quy chỉ tiêu theo hồ sơ (sale_profile_id, staff_id), không theo tài khoản đăng nhập; thực tế của cá nhân quy theo người phụ trách chính tại thời điểm sự kiện, không tính lại khi phân công lại.
- Xếp hạng luôn theo phần trăm đạt, bằng nhau thì theo giá trị tuyệt đối. Quy tắc thưởng (P2) chỉ tạo
bonus_estimatetrên ảnh chụp cuối cùng; một cá nhân và một chỉ tiêu áp dụng tối đa một quy tắc trong một kỳ, quy tắc có hiệu lực gần nhất được chọn.
6Mô hình dữ liệu
| Thực thể | Trường | Ghi chú |
|---|---|---|
| target | id uuid; center_id; period_type enum(month, quarter); period_key text; status enum(draft, published, closed, archived); working_days bool; grace_days int; ranking_visibility enum(branch, self, all); created_by; published_at; closed_at; version int | new; unique (center_id, period_type, period_key) |
| target_line | id uuid; target_id; center_id; school_id null; scope enum(center, branch, individual); parent_line_id null; metric_key; owner_type enum(none, sale_profile, staff); owner_id null; goal numeric; direction enum(higher, lower); sum_overridden bool; override_reason null; inactive_owner bool; updated_by; updated_at | new; unique (target_id, metric_key, scope, school_id, owner_id) |
| target_snapshot | id uuid; line_id; center_id; school_id null; snapshot_date; goal_at_snapshot; actual; denominator null; pct; elapsed_pct; pace null; forecast null; status enum(achieved, on_track, behind, at_risk, no_data); is_final bool; computed_at | new; unique (line_id, snapshot_date); denominator cho kiểu tỷ lệ |
| target_revision | id uuid; target_id; line_id null; action enum(created, published, goal_changed, allocated, overridden, closed, reopened); field; old_value; new_value; reason; actor_id; created_at | new; chi tiết nhật ký, tab Lịch sử |
| bonus_rule (P2) | id uuid; center_id; name; role enum(admissions, teacher, accountant); metric_key; bonus_type enum(pct_of_actual, fixed); tiers [{from_pct, to_pct null, value}]; effective_from period_key; active bool; created_by | new; công thức, không phải khoản chi trả |
| bonus_estimate (P2) | id uuid; line_id; snapshot_id (is_final); rule_id; achieved_pct; tier_index; amount; exported_to_timesheet_at null | new; PRD 06 đọc để tạo dòng điều chỉnh bảng công |
Danh mục chỉ tiêu (metric_key, nhãn vi/en, nhóm, kiểu, phạm vi, chiều, nguồn, mẫu số tối thiểu, giai đoạn) cố định trong mã nguồn. Mọi bảng mang center_id (tenant) và school_id (chi nhánh) khi dòng thuộc một chi nhánh; vai trò phạm vi chi nhánh luôn được lọc theo accessible-schools; dòng phạm vi trung tâm chỉ hiển thị cho vai trò phạm vi tất cả.
7Hợp đồng API
| Method | Path | Mục đích | Trạng thái |
|---|---|---|---|
| GET | /v3/crm/dashboard/manager-summary | period → conversions, revenue_signed (trung tâm, chi nhánh) | existing |
| GET | /v3/crm/dashboard/top-sales | period → conversions, revenue_signed theo tư vấn viên | existing |
| GET | /v3/crm/dashboard/funnel | period → leads_new; thêm school_id, assignee_id | extend |
| GET | /v3/crm/dashboard/won-lost-trend · /sale-summary | đường tốc độ theo tuần; thẻ hiện có cạnh ô Chỉ tiêu của tôi | existing |
| GET | /v3/teacher/school-finance/tuitions/stats | revenue_collected; thêm overdue_collected_amount, tham số from, to, school_id | extend |
| GET | /v3/crm/sale-profiles/lightweight · /v3/crm/me/accessible-schools | danh sách cá nhân và chi nhánh khi phân bổ | existing |
| GET · POST | /v3/crm/targets | GET period_type, period_key, status → Target[]; POST {period_type, period_key, working_days?, grace_days?, lines: [{metric_key, goal}]} → Target (draft); 409 PERIOD_EXISTS | new |
| GET | /v3/crm/targets/{id} | → Target kèm cây dòng và ảnh chụp gần nhất; as_of để xem tại một ngày | new |
| PATCH | /v3/crm/targets/{id} | {working_days?, grace_days?, ranking_visibility?, version}; 409 STALE_VERSION | new |
| PUT | /v3/crm/targets/{id}/lines | {lines: [{id?, metric_key, scope, school_id?, owner_type?, owner_id?, goal, parent_line_id?}], override?: {reason}, reason?} → dòng đã lưu; 422 SUM_MISMATCH kèm chênh lệch theo dòng cha; reason bắt buộc sau xuất bản | new |
| POST | /v3/crm/targets/{id}/allocate | {line_id, method: even | last_period_share, children: [{school_id | owner_id}]} → đề xuất phân bổ, không lưu | new |
| POST | /v3/crm/targets/{id}/publish · /close · /reopen | reopen cần {reason}; publish trả 422 SUM_MISMATCH khi còn chênh lệch chưa ghi đè | new |
| GET · POST | /v3/crm/targets/{id}/snapshots · /revisions · /snapshot | → TargetSnapshot[] (line_id, from, to); TargetRevision[]; POST /snapshot chạy ảnh chụp tay, 429 khi vượt 6 lần một giờ | new |
| GET | /v3/crm/targets/board | period_type, period_key, scope, school_id?, metric_key? → dòng kèm ảnh chụp gần nhất, lọc theo quyền; format=xlsx | new |
| GET | /v3/crm/targets/ranking | period_type, period_key, metric_key, school_id? → [{rank, rank_delta, owner, school, goal, actual, pct, pace}] | new |
| GET | /v3/crm/targets/me | → dòng cá nhân của người dùng hiện tại kèm thứ hạng | new |
| GET/POST/PATCH | /v3/crm/targets/bonus-rules · /{id} | {name, role, metric_key, bonus_type, tiers, effective_from, active}; 422 TIER_OVERLAP; GET /targets/{id}/bonus-estimates → BonusEstimate[] sau chốt kỳ, PRD 06 đọc | new |
| GET/PUT | /v3/school/digest-settings | thêm khối targets: {enabled, metrics[]} cho bản tổng hợp hằng tuần (PRD 09) | extend |
8Phân quyền
| Mã quyền | owner | branch_manager | admissions | academic_admin | accountant | teacher |
|---|---|---|---|---|---|---|
targets.view | tất cả | chi nhánh | bản thân | chi nhánh (nhóm giáo vụ) | chi nhánh (nhóm doanh thu) | bản thân |
targets.manage (tạo, sửa, xuất bản) | có | dòng cá nhân trong chi nhánh | không | không | không | không |
targets.override, targets.reopen | có | không | không | không | không | không |
targets.ranking.view | tất cả | chi nhánh | chi nhánh hoặc bản thân (theo cấu hình) | không | không | không |
targets.export | tất cả | chi nhánh | không | không | chi nhánh | không |
targets.bonus_rules (P2) | có | không | không | không | chỉ xem | không |
targets.bonus_estimates.view (P2) | tất cả | chi nhánh | bản thân | không | tất cả | bản thân |
Phụ huynh không có quyền nào trong mô-đun này. Phạm vi "bản thân" chỉ trả về dòng có owner_id trùng hồ sơ của người dùng và dòng cha chi nhánh ở dạng chỉ đọc.
9Sự kiện phân tích
| Sự kiện | Thuộc tính |
|---|---|
| target_created | period_type, metrics_count, copied_from_previous |
| target_allocated | level (branch|individual), method (manual|even|last_period_share), children_count, overridden |
| target_published | period_type, branch_lines, individual_lines, days_before_period_start |
| target_goal_changed | metric_key, scope, old, new, days_into_period, by_role |
| target_board_viewed | role, scope_tab, snapshot_age_hours |
| target_pace_alert_sent | metric_key, scope, pace, forecast_pct, kind (at_risk|recovered) |
| target_closed / target_reopened | grace_days, late_records_after_close |
| bonus_rule_saved / bonus_estimate_exported | role, metric_key, tiers_count / lines, total_amount |
10Trường hợp biên
- Tư vấn viên chuyển chi nhánh giữa kỳ: dòng cá nhân ở chi nhánh cũ dừng tại ngày chuyển, một dòng mới được tạo ở chi nhánh mới với mục tiêu do quản lý chi nhánh mới đặt; mỗi dòng chỉ tính sự kiện trong khoảng ngày tương ứng.
- Tư vấn viên nghỉ việc giữa kỳ: dòng mang cờ
inactive_owner, không nhận cảnh báo, vẫn tính vào tổng chi nhánh và xuất hiện trong xếp hạng đến hết kỳ. - Lead thắng bị chuyển về trạng thái mở trong cùng kỳ: giá trị thực tế giảm ở ảnh chụp kế tiếp; sau khi chốt kỳ, thay đổi này không ảnh hưởng số đã chốt.
- Ảnh chụp thất bại do nguồn dữ liệu lỗi: bảng tiếp tục hiển thị ảnh chụp gần nhất kèm tuổi dữ liệu; thử lại sau 30 phút, tối đa 3 lần, rồi thông báo cho chủ trung tâm.
- Ghi nhận muộn sau khi chốt (thanh toán ngày 3 tháng sau cho hoá đơn tháng trước): tính vào kỳ ghi nhận thực tế; số bản ghi muộn hiển thị trong sự kiện
target_closedđể kế toán quyết định có mở lại hay không.
11Câu hỏi còn mở
- Doanh thu ký mới nên tính theo giá trị cơ hội của lead thắng (có ngay từ CRM) hay theo giá trị hoá đơn phát hành cho lượt ghi danh mới (chính xác hơn nhưng cần liên kết lead và hoá đơn của PRD 01 và 05)? Đề xuất: P1 dùng giá trị cơ hội, P2 chuyển sang giá trị hoá đơn và ghi rõ thay đổi định nghĩa trong tab Lịch sử.
- Chỉ tiêu quý có nên ràng buộc bằng tổng ba chỉ tiêu tháng không? Đề xuất: không ràng buộc ở P1, chỉ cảnh báo mềm khi tổng ba tháng khác chỉ tiêu quý.
- Bảng xếp hạng có nên hiển thị cho toàn bộ tư vấn viên của trung tâm không? Đề xuất:
ranking_visibility = alllà tuỳ chọn, mặc định theo chi nhánh.
Trường Số (truongso.net) · Nội bộ FLYER