Trường Số PRD/01 Tuyển sinh
Trường Số · Yêu cầu sản phẩm · 09/2026

PRD 01 · Tuyển sinh (CRM)

Mở rộng pipeline khách hàng tiềm năng đang vận hành thật: nguồn và kênh, nhật ký cuộc gọi, đặt lịch học thử, kiểm tra xếp lớp, và việc chuyển đổi một lead thắng thành học viên nhập học kèm phụ huynh, một lớp học và một phiếu thu đầu tiên. Phần lớn backend đã có sẵn; PRD này khép lại khoảng trống giữa pipeline và nhà trường.

Xuất xứ / Prompt / Giới hạn
Status
Draft v1
Owner module
Tuyển sinh
Backend
EXISTING (148 /v3/crm paths) · NEW conversion, trials, DNC
Phase
P1
Depends on
02 Học viên, 03 Lớp học, 05 Tài chính

Tài liệu do trợ lý AI soạn trong một phiên làm việc ngày 10/09/2026, theo yêu cầu gốc được trích nguyên văn ở trang mục lục; mục Thiết kế đề xuất được bổ sung ngày 16/09/2026. Đâ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-frontend và đặc tả OpenAPI /v3 trê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ả /v3 trên staging tại thời điểm trên.

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:
    • Các trường lead của đối thủ và các nhóm "phân loại khách hàng"; liệu phụ huynh và trẻ có phải là hai đối tượng riêng biệt không.
    • Các loại "nhật ký chăm sóc" của họ và liệu kết quả cuộc gọi có phải là một danh sách cố định không.
    • Cách "học thử" được đặt lịch: từ lead hay từ lớp, và liệu có được tính vào điểm danh không.
    • Liệu "kiểm tra đầu vào" có lưu điểm theo từng kỹ năng và tự động ánh xạ sang một trình độ lớp không.
    • Cách hoạt động tích hợp lead từ Facebook của họ (hộp thư trang hay biểu mẫu lead).

Thiết kế đề xuất

Toàn bộ màn hình tuyển sinh nằm trong shell School OS với nhóm Tuyển sinh ở thanh bên; điều quan trọng nhất là chuỗi từ hàng đợi gọi lại, học thử, kiểm tra xếp lớp đến wizard chuyển đổi bốn bước, nơi lead thắng trở thành học viên, phụ huynh, ghi danh và hoá đơn đầu tiên trong một luồng.

1 · Danh sách khách hàng

/crm/customers · desktop

Danh sách khách hàng
Bảng pipeline với năm bộ lọc nhanh dạng tab phía trên (Tất cả · Của tôi · Gọi lại hôm nay · Học thử tuần này · Thắng tháng này) và công tắc Bảng/Kanban. Ba cột mới theo mục 5: Học viên dự kiến, Học thử (chip trạng thái buổi gần nhất) và Xếp lớp (trình độ và điểm). Bộ lọc "Có gọi lại" đang bật, một lead mang chip Không gọi (ADM-03), một lead sắp bị ẩn danh hoá sau 30 ngày (quy tắc 5); thanh thao tác hàng loạt có nút Gửi ZNS chỉ đếm các lead đã đồng ý.

2 · Chi tiết lead

/crm/customers/:id · desktop

Chi tiết lead
Drawer mở trên danh sách: đầu trang có trạng thái Thắng, nút Chuyển đổi thành học viên trở thành nút chính (ADM-06). Dòng thời gian ghi cuộc gọi, kết quả kiểm tra xếp lớp tự điền từ FLYER và hoạt động "Học thử xong" kèm nhận xét giáo viên (ADM-04). Thanh bên có nhóm Học viên dự kiến với hai trẻ, trong đó một trẻ đã chuyển đổi và chỉ còn liên kết (quy tắc 2), cùng khối Học thử và xếp lớp với hai thao tác Đặt lịch học thử, Tạo bài kiểm tra.

3 · Lịch hẹn và cuộc gọi, tab Gọi lại

/crm/schedules · desktop

Lịch hẹn và cuộc gọi, tab Gọi lại
Hàng đợi gọi lại sắp xếp quá hạn trước (giờ hẹn màu đỏ), rồi hôm nay, rồi sắp tới (ADM-02). Đủ các cột theo mục 5: Khách hàng, SĐT, Giờ hẹn gọi, Quá hạn, Người phụ trách, Lần gọi gần nhất và nút Gọi mở hộp thoại ghi nhanh với khách hàng đã chọn sẵn. Bộ lọc theo người phụ trách và khoảng ngày; chân trang nhắc lead Không gọi không xuất hiện trong hàng đợi (quy tắc 4).

4 · Học thử, danh sách

/crm/trials · desktop

Học thử, danh sách
Bảng đặt lịch học thử với đủ tám cột của mục 5 và bốn trạng thái Đã đặt, Đã học, Vắng, Đã huỷ. Nhận xét giáo viên rút gọn trên một dòng; hai lượt đã học có thao tác Chuyển đổi nổi bật. Thẻ chỉ số phía trên đếm chỗ học thử còn trống theo mặc định 2 chỗ mỗi lớp (quy tắc 3).

5 · Học thử, hộp thoại đặt lịch

/crm/trials (hộp thoại) · desktop

Học thử, hộp thoại đặt lịch
Hộp thoại đặt lịch cho học viên dự kiến Lê Gia Hân: chọn lớp có hiển thị trình độ, giáo viên và số chỗ học thử còn trống, lớp hết chỗ bị vô hiệu hoá (quy tắc 3); chọn một trong năm buổi sắp tới; ghi chú gửi giáo viên và công tắc Gửi xác nhận Zalo chỉ bật khi phụ huynh đã đồng ý (ADM-04). Ghi chú tự động nêu lead sẽ chuyển sang giai đoạn Học thử (quy tắc 7).

6 · Kiểm tra xếp lớp

/crm/placement-tests · desktop

Kiểm tra xếp lớp
Danh sách với tám cột theo mục 5 và nhãn trạng thái đã đồng bộ i18n: Chưa bắt đầu, Đang làm, Hoàn thành, Đã huỷ (ADM-05). Bài có tài khoản người học liên kết được gắn chip FLYER tự điền; cột Đề xuất lớp cảnh báo khi trình độ đề xuất thấp hơn trình độ đăng ký; thao tác Nhập kết quả chỉ xuất hiện ở bài chưa bắt đầu.

7 · Kiểm tra xếp lớp, nộp kết quả

/crm/placement-tests (hộp thoại) · desktop

Kiểm tra xếp lớp, nộp kết quả
Hộp thoại kết quả với bốn kỹ năng Nghe, Nói, Đọc, Viết trên thang 25, Điểm tổng tự cộng, Link kết quả và Ghi chú. Trường Nói đang báo lỗi vượt điểm tối đa; trình độ đề xuất tính ở phía client theo bảng ánh xạ PRD 03 và chỉ đọc (ADM-05).

8 · Wizard chuyển đổi, bước 1 Học viên

/crm/customers/:id/convert · desktop

Wizard chuyển đổi, bước 1 Học viên
Modal bốn bước. Bước 1 chọn học viên dự kiến (trẻ đã chuyển đổi bị ẩn và chỉ còn liên kết, quy tắc 2), chọn dùng tài khoản người học đã liên kết hoặc tạo học viên mới với Họ tên, Ngày sinh, Giới tính, Trường đang học; Chi nhánh mặc định theo lead. Ngày sinh bắt buộc với học viên dưới 18 tuổi đang ở trạng thái lỗi; cảnh báo mềm trùng tên trẻ và năm sinh theo ADM-01.

9 · Wizard chuyển đổi, bước 3 Lớp và gói

/crm/customers/:id/convert · desktop

Wizard chuyển đổi, bước 3 Lớp và gói
Bước 3 chọn lớp lọc theo chi nhánh và trình độ đề xuất, hiển thị số chỗ trống trên sĩ số, lớp đầy bị vô hiệu hoá, kèm tuỳ chọn Chờ xếp lớp; Ngày bắt đầu, Gói học phí từ PRD 05, Giảm giá theo phần trăm với lý do và Mã giảm giá. Giảm 15% vượt hạn mức nên hiển thị Cần duyệt và sẽ tạo yêu cầu phê duyệt gửi quản lý chi nhánh (ADM-06); bảng tính phải thu cập nhật ngay.

10 · Hàng đợi gọi lại của tư vấn viên

/crm/schedules (di động) · di động

Hàng đợi gọi lại của tư vấn viên
Khung điện thoại cho tư vấn viên: hàng đợi gọi lại nhóm theo Quá hạn, Hôm nay, Sắp tới với nút Gọi trên từng dòng. Bottom sheet ghi nhận cuộc gọi mở với khách hàng đã chọn sẵn, chọn kết quả, ghi chú và tạo việc nhắc; lưu bất kỳ kết quả nào sẽ xoá dòng khỏi hàng đợi (ADM-02).

1Mục đích

Tư vấn viên tuyển sinh đã làm việc trong b2c.truongso.net: lead đến qua nhập liệu hàng loạt hoặc nhập tay, di chuyển qua các giai đoạn của pipeline trên bảng Kanban hoặc bảng biểu, nhận cuộc gọi và ghi chú, và được đánh dấu thắng hoặc thất bại. Phần còn thiếu là chặng cuối cùng. Một lead thắng hiện nay chỉ dừng lại ở bản ghi khách hàng có liên kết với một người học; phía nhà trường (hồ sơ học viên, chỗ trong lớp, học phí) được nhập ở nơi khác. PRD này bổ sung đặt lịch học thử, hàng đợi gọi lại, xử lý không gọi mà giao diện đã có sẵn kỳ vọng, và một wizard chuyển đổi tạo ra học viên, phụ huynh, ghi danh và hoá đơn đầu tiên trong một luồng duy nhất.

Trong phạm vi

Ngoài phạm vi

2Hiện trạng

Chức năngFrontendAPI
Danh sách lead: Kanban theo từng giai đoạn với phân trang dạng cursor và kéo thả sang giai đoạn khác; bảng biểu 17 cột cộng thêm trường tuỳ chỉnh; bộ lọc giai đoạn, q, status[], priority[], call_status[], assigned_to[], tag_ids[], source[], channel[]; hiển thị cột được lưu theo từng viewfeatures/crm/customers/list/*GET /v3/crm/customers, /customers/kanban, PATCH /customers/{id}/kanban-position, /view-configs/customer_list
Drawer tạo và sửa kèm kiểm tra trùng theo số điện thoại; tạo nhanh nguồn, kênh, giai đoạn, trạng thái ngay trong biểu mẫucustomer-form.tsx, duplicate-check-modal.tsxPOST /customers, /customers/check-duplicate(-multi), POST /sources|channels|stages|statuses
Khung chi tiết: giá trị, thông tin cơ hội, liên hệ, marketing, nhóm tài khoản người học; các tab Hoạt động, Sản phẩm, Thảo luận, Tài liệu, Phân công, Học viên liên kết; Thắng, Thất bại, Lưu trữ, Gắn sao, Xoá, Phân côngcustomer-detail-shell.tsxGET/PATCH /customers/{id}, /activities, /audit-logs, /packages, /discussions, /customer-files, /assignments, /learners
Tương tác: gọi điện, cuộc họp, công việc, ghi chú với trạng thái đã xong/đã huỷ/lỡ cuộc gọi và kết quả cuộc gọifeatures/crm/calls/*, tab dòng thời gian/interactions, /quick-actions/log-call, /quick-actions/log-note
Kiểm tra xếp lớp: danh sách, tạo mới, nộp kết quảfeatures/crm/placement-tests/*/placement-tests, /{id}/submit-result, /v3/teacher/placement-test/send
Thao tác hàng loạt: lưu trữ, bỏ lưu trữ, phân công lại, nhập liệu kèm chiến lược loại trùng, xuất xlsxthanh thao tác hàng loạt trên bảng, wizard nhập liệu/customers/bulk, /assignments/bulk-reassign, /imports/*
Việc hôm nay, thông báo (WebSocket), tìm kiếm toàn cục, nhắc tênwidget/me/today-plan, /me/notifications, /search, /me/mentions
Tổng quan: tổng hợp theo sale, tổng hợp theo quản lý, phễu chuyển đổi, xu hướng, top sale, xem chi tiếtfeatures/crm/dashboard5 endpoint tổng quan

Được frontend tham chiếu nhưng chưa có trong API nên được đặc tả tại đây là mới: POST /customers/{id}/convert, POST /customers/{id}/do-not-call, POST /customers/{id}/transfer-school. Không mang sang: các endpoint công việc, cuộc họp và saved-view; công việc và cuộc họp là Tương tác (Interactions), saved view là view-config.

3Persona và vai trò

PersonaVai tròPhạm vi
Tư vấn viên tuyển sinhadmissionslead cá nhân; lead của cả nhóm nếu phạm vi là nhóm
Trưởng nhóm tuyển sinh / quản lý chi nhánhbranch_managertoàn bộ lead thuộc chi nhánh; phân công lại; phê duyệt giảm giá khi chuyển đổi
Giáo vụacademic_adminxem lead; xếp lịch học thử và kiểm tra xếp lớp; tiếp nhận học viên đã chuyển đổi
Chủ trung tâmownertoàn bộ

4User story và tiêu chí chấp nhận

ADM-01Ghi nhận một lead kèm thông tin phụ huynh và học viên
Tư vấn viên tạo một lead trong đó liên hệ là phụ huynh và học viên dự kiến là một trẻ.
  • Given Drawer tạo mới
  • When Nhập họ tên và số điện thoại phụ huynh, và tại mục "Học viên dự kiến" nhập tên trẻ, năm sinh và trình độ hiện tại
  • Then Khách hàng được tạo với guardian và relationship như hiện tại, và một khối JSON prospect_learners mới lưu tên trẻ, năm sinh, trường học, trình độ; kiểm tra trùng chạy theo số điện thoại như hiện tại và bổ sung thêm theo tên trẻ + năm sinh trong cùng trung tâm (chỉ cảnh báo mềm).
ADM-02Xử lý hàng đợi gọi lại
Tư vấn viên thấy toàn bộ các lead đã yêu cầu gọi lại, sắp xếp theo thời điểm yêu cầu.
  • Given Các cuộc gọi được ghi nhận với call_status = callback_requested và request_callback_at
  • When Mở Lịch hẹn & cuộc gọi → tab Gọi lại
  • Then Thấy các dòng quá hạn xuất hiện trước (đỏ), sau đó là hôm nay, rồi sắp tới, mỗi dòng có nút "Gọi" mở hộp thoại ghi nhanh kèm khách hàng đã chọn sẵn; ghi nhận bất kỳ kết quả nào sẽ xoá dòng đó khỏi danh sách.
ADM-03Đánh dấu không gọi
Tư vấn viên đánh dấu một lead đã yêu cầu không liên hệ.
  • Given Một lead
  • When Chọn Đánh dấu không gọi kèm lý do
  • Then do_not_call_at/by/reason được thiết lập; hộp thoại ghi nhanh cuộc gọi hiển thị cảnh báo không gọi đã có sẵn; thông báo hàng loạt ở PRD 07 bỏ qua số điện thoại này; gỡ đánh dấu cần quyền customers.force_call.
ADM-04Đặt lịch học thử
Tư vấn viên đặt lịch cho học viên dự kiến vào một buổi học thật của một lớp thật.
  • Given Các lớp có buổi học sắp tới (PRD 03) với allow_trial = true và còn chỗ học thử
  • When Chọn một lớp và một buổi trong hộp thoại Học thử trên lead
  • Then Một trial_booking được tạo với trạng thái booked, danh sách buổi học hiển thị học viên học thử kèm chip Học thử, phụ huynh nhận xác nhận qua ZNS (PRD 07) nếu đã có sự đồng ý, và lead chuyển sang giai đoạn được cấu hình là "giai đoạn học thử" của pipeline (nếu có thiết lập).
  • Given Buổi học đã diễn ra
  • When Giáo viên điểm danh (PRD 04)
  • Then Trạng thái đặt lịch học thử chuyển thành attended hoặc no_show, một hoạt động được ghi vào lead, và tư vấn viên nhận thông báo "Học thử xong: Nguyễn An (Movers 2A)" kèm nhận xét của giáo viên.
ADM-05Xếp lịch và ghi nhận kết quả kiểm tra xếp lớp
Tư vấn viên xếp lịch kiểm tra xếp lớp và ghi nhận kết quả.
  • Given Một lead có hoặc chưa có tài khoản người học liên kết
  • When Tạo một bài kiểm tra xếp lớp kèm trình độ và thời gian dự kiến
  • Then Trạng thái là not_started; nếu đã có tài khoản người học liên kết, bài kiểm tra FLYER được gửi (/v3/teacher/placement-test/send) và kết quả tự động điền khi hoàn thành; nếu chưa, tư vấn viên nộp điểm thủ công; khối kết quả hiển thị điểm tổng, bốn kỹ năng và một trình độ đề xuất cho lớp (bảng ánh xạ ở PRD 03).
  • Given Sự khác biệt về i18n
  • When Trang hiển thị các trạng thái
  • Then Nhãn là Chưa bắt đầu / Đang làm / Hoàn thành / Đã huỷ, khớp với enum của API.
ADM-06Chuyển đổi một lead thắng thành học viên nhập học
Tư vấn viên chuyển đổi trong một wizard duy nhất.
  • Given Một lead ở trạng thái cuối cùng là thắng, hoặc bất kỳ lead đang mở nào nếu có quyền customers.convert
  • When Nhấn Chuyển đổi
  • Then Một wizard 4 bước mở ra: (1) Học viên: chọn tài khoản người học đã liên kết hoặc tạo học viên mới (họ tên, ngày sinh, giới tính) và chọn chi nhánh đích; (2) Phụ huynh: xác nhận họ tên, số điện thoại, quan hệ, đồng ý nhận Zalo; (3) Lớp & gói: chọn lớp (lọc theo chi nhánh và trình độ đề xuất) hoặc "Chờ xếp lớp", chọn gói học phí hoặc gói từ PRD 05, ngày bắt đầu, giảm giá (cần phê duyệt nếu vượt hạn mức của tư vấn viên); (4) Xác nhận: bản tóm tắt và công tắc "Tạo hoá đơn ngay".
  • When Xác nhận
  • Then Trong một giao dịch duy nhất: hồ sơ người học được tạo mới hoặc dùng lại và liên kết (CustomerLearner), bản ghi học viên được tạo (PRD 02) ở trạng thái Đang học hoặc Chờ xếp lớp, bản ghi phụ huynh được tạo, một lượt ghi danh được tạo (PRD 03) nếu đã chọn lớp, học phí được tạo (PRD 05) nếu có yêu cầu, trạng thái lead được đặt thành thắng kèm won_at, một hoạt động "Đã chuyển thành học viên" được ghi lại, và wizard hiển thị liên kết đến học viên và hoá đơn.
  • Given Một bước gặp lỗi
  • Then Không có gì được lưu lại và thông báo lỗi nêu rõ bước gặp sự cố.
ADM-07Chuyển một lead sang chi nhánh khác
Quản lý chi nhánh chuyển một lead sang chi nhánh gần gia đình nhất.
  • Given Một lead có school_id là A
  • When Chọn Chuyển chi nhánh, chọn B và (không bắt buộc) một người phụ trách mới
  • Then school_id trở thành B, các phân công tại A kết thúc với lý do "transfer", người phụ trách mới được thông báo, và một mục nhật ký được ghi lại.
ADM-08Quản lý nguồn và kênh từ cài đặt
Chủ trung tâm duy trì danh mục nguồn và kênh.
  • Given Cài đặt → Nguồn hoặc Kênh
  • When Thêm, đổi tên, đổi màu, sắp xếp lại thứ tự hoặc vô hiệu hoá
  • Then Trang đọc và ghi qua /v3/crm/sources và /v3/crm/channels (thay thế dữ liệu giả trong localStorage), các mục đã vô hiệu hoá vẫn còn trên các lead cũ nhưng biến mất khỏi bộ chọn.

5Màn hình

Danh sách khách hàng (đã có, điều chỉnh) /crm/customers

Giữ nguyên Kanban và bảng biểu hiện tại. Điều chỉnh: thêm cột Học viên dự kiến (từ prospect_learners), Học thử (buổi học thử sắp tới hoặc gần nhất kèm chip), Xếp lớp (trình độ kiểm tra); thêm bộ lọc "Có gọi lại" và "Không gọi"; thêm các bộ lọc nhanh dạng tab phía trên bảng: Tất cả · Của tôi · Gọi lại hôm nay · Học thử tuần này · Thắng tháng này. Thanh thao tác hàng loạt có thêm "Gửi ZNS" (PRD 07) cho các lead đã có sự đồng ý.

Chi tiết lead (đã có, điều chỉnh) /crm/customers/:id

Thêm nhóm "Học viên dự kiến" ở thanh bên (tên trẻ, năm sinh, trình độ, trường học) và một tab "Học thử & xếp lớp" liệt kê các lượt đặt lịch học thử và kiểm tra xếp lớp kèm thao tác Đặt lịch học thử, Tạo bài kiểm tra. Nút Chuyển đổi trở thành nút chính khi trạng thái là thắng; nút cũng được bật cho các lead đang mở khi người dùng có quyền customers.convert. Bỏ cờ tính năng (feature flag).

Lịch hẹn & cuộc gọi /crm/schedules

Các tab: Hôm nay (việc trong ngày) · Gọi lại (hàng đợi gọi lại) · Cuộc hẹn (cuộc họp) · Học thử (các lượt đặt lịch học thử). Bảng cho tab Gọi lại: Khách hàng, SĐT, Giờ hẹn gọi, Quá hạn (chip), Người phụ trách, Lần gọi gần nhất, thao tác Gọi. Bộ lọc: người phụ trách, khoảng ngày. Trạng thái trống: "Không có yêu cầu gọi lại."

Học thử (đặt lịch học thử) /crm/trials
CộtGhi chú
Học viêntên học viên dự kiến; liên kết đến lead
Phụ huynh / SĐT
Lớptên lớp + chip trình độ
Buổingày và giờ buổi học
Trạng tháiĐã đặt (exc) · Đã học (ok) · Vắng (abs) · Đã huỷ (grey)
Nhận xét GVnhận xét của giáo viên, rút gọn
Người phụ trách
Thao tácĐổi buổi · Huỷ · Chuyển đổi

Các trường trong hộp thoại học thử: lớp (tìm kiếm, hiển thị trình độ, giáo viên, số chỗ học thử còn trống), buổi học (5 buổi sắp tới), ghi chú gửi giáo viên, công tắc "Gửi xác nhận Zalo". Kiểm tra hợp lệ: buổi học phải ở tương lai; chỗ học thử > 0; cùng một học viên dự kiến không được đặt hai lượt trong cùng một ngày.

Kiểm tra xếp lớp (đã có, sửa lại nhãn) /crm/placement-tests

Các cột: Khách hàng, Học viên, Trình độ, Thời gian, Trạng thái, Điểm, Đề xuất lớp, Thao tác. Toàn bộ nhãn trong biểu mẫu chuyển sang i18n: Trình độ, Thời gian kiểm tra, Hạn hoàn thành, Giám khảo, Mã đề FLYER, Ghi chú. Hộp thoại kết quả: Điểm tổng, Nghe, Nói, Đọc, Viết, Link kết quả, Ghi chú; trình độ đề xuất được tính ở phía client theo bảng ánh xạ ở PRD 03 và chỉ hiển thị, không chỉnh sửa được.

Wizard chuyển đổi (modal, 4 bước) /crm/customers/:id/convert
BướcTrườngKiểm tra hợp lệ
1 Học viênDanh sách radio tài khoản người học đã liên kết (từ /customers/{id}/learners) hoặc "Tạo học viên mới": Họ tên, Ngày sinh, Giới tính, Trường đang học; Chi nhánh (chọn từ các chi nhánh có quyền truy cập, mặc định lấy school_id của lead)họ tên bắt buộc; ngày sinh bắt buộc nếu dưới 18 tuổi; chi nhánh bắt buộc
2 Phụ huynhHọ tên, SĐT (điền sẵn từ số điện thoại của lead), Quan hệ (Bố/Mẹ/Ông bà/Khác), Zalo: hộp kiểm "Đồng ý nhận thông báo" kèm phiên bản nội dung đồng ý, Emailsố điện thoại bắt buộc và hợp lệ; sự đồng ý không bắt buộc nhưng được ghi lại
3 Lớp & góiLớp (tìm kiếm; lọc theo chi nhánh; hiển thị số chỗ trống / sĩ số, lịch học, trình độ; có tuỳ chọn "Chờ xếp lớp"), Ngày bắt đầu, Gói học phí (từ các gói học phí của khoá học ở PRD 05), Giảm giá (theo phần trăm hoặc số tiền, kèm lý do), Mã giảm giákiểm tra sĩ số lớp; giảm giá vượt hạn mức hiển thị "Cần duyệt" và tạo một yêu cầu phê duyệt
4 Xác nhậnBản tóm tắt; công tắc "Tạo hoá đơn ngay" (mặc định bật); công tắc "Gửi thông báo nhập học"

Màn hình kết quả: ba thẻ liên kết Học viên · Lớp · Hoá đơn, và "Chuyển đổi tiếp" dành cho anh chị em.

6Quy tắc nghiệp vụ

  1. Một số điện thoại là một lead cho mỗi trung tâm; kiểm tra trùng là bắt buộc khi tạo mới và nhập liệu (đã có). Anh chị em là các mục prospect_learners bổ sung trên cùng một lead, và mỗi học viên dự kiến chỉ chuyển đổi được một lần.
  2. Một lead có thể được chuyển đổi tối đa một lần cho mỗi học viên dự kiến; wizard ẩn các học viên dự kiến đã chuyển đổi và hiển thị liên kết đến học viên tương ứng.
  3. Đặt lịch học thử yêu cầu một buổi học của lớp ở tương lai và còn chỗ học thử (class.capacity_trial trừ đi số đã đặt). Số chỗ học thử mặc định cho mỗi lớp là 2.
  4. Không gọi chặn hộp thoại ghi nhanh cuộc gọi (trừ khi ép buộc), ZNS hàng loạt và nhắc hẹn; không chặn tin nhắn giao dịch gửi phụ huynh của học viên đã nhập học.
  5. Lưu trữ lead: các lead chưa thắng và không có hoạt động trong 24 tháng bị ẩn danh hoá bởi một tác vụ chạy hằng đêm (PRD 12); một chip cảnh báo xuất hiện 30 ngày trước thời điểm đó.
  6. Thắng yêu cầu hoặc một lượt chuyển đổi, hoặc một lý do "Thắng không chuyển đổi" rõ ràng (ví dụ nhập học tại một chi nhánh khác ngoài hệ thống).
  7. Tự động hoá giai đoạn (tuỳ chọn theo từng pipeline): đặt lịch học thử chuyển sang "giai đoạn học thử"; chuyển đổi chuyển sang trạng thái thắng cuối cùng; không có bước chuyển tự động nào khác.

7Thay đổi mô hình dữ liệu

Thực thểThay đổiTrường
customer (Customer)mở rộngprospect_learners jsonb [{key, name, birth_year, gender, school, level, converted_student_id}], marketing_consent_at, target_school_id (nullable; mặc định lấy school_id)
trial_bookingmớiid uuid; center_id; school_id; customer_id; prospect_key; class_id int64; session_id uuid (PRD 03); status enum(booked, attended, no_show, cancelled); teacher_note; consultant_id (sale_profile_id); notified_at; created_at; updated_at
placement_test (PlacementTest)mở rộngsuggested_level text (tự tính), prospect_key
pipeline (PipelineItem)mở rộngtrial_stage_id nullable, won_status_id (trạng thái cuối cùng), lost_status_id
conversionmớiid; customer_id; prospect_key; student_id (PRD 02); guardian_id; enrollment_id null; tuition_id null; converted_by; created_at

8Hợp đồng API

MethodPathRequest / responseStatus
GET/POST/PATCH/DELETE/v3/crm/customers[...]như hiện tại; prospect_learners, target_school_id được chấp nhận khi tạo và sửaextend
GET/v3/crm/interactions?interaction_type=call&call_status=callback_requested&status=hàng đợi gọi lại; thêm query callback_from, callback_to, overdueextend
POST/v3/crm/customers/{id}/do-not-call{reason} → Customer; DELETE để xoá đánh dấu (cần quyền customers.force_call)new
POST/v3/crm/customers/{id}/transfer-school{school_id, assignee_id?, note} → Customernew
GET/v3/crm/trial-bookingsstatus, class_id, from, to, assignee_id, page, limit → TrialBooking[] kèm customer, class, sessionnew
POST/v3/crm/trial-bookings{customer_id, prospect_key, class_id, session_id, note, notify} → TrialBooking; 409 NO_TRIAL_SEATS / DUPLICATE_TRIALnew
PATCH/v3/crm/trial-bookings/{id}{session_id?, status?, teacher_note?}new
GET/POST/PATCH/v3/crm/placement-tests[...]như hiện tại; response thêm suggested_levelextend
POST/v3/crm/customers/{id}/convert{prospect_key, learner: {learner_profile_id} | {display_name, birthday, gender, school_name}, school_id, guardian: {name, phone, relationship, email?, zalo_consent: bool, consent_version}, enrollment?: {class_id, start_date}, tuition?: {fee_plan_id, discount_pct?, discount_amount?, discount_reason?, voucher_code?, due_date}, notify: bool} → {student_id, guardian_id, enrollment_id?, tuition_id?, approval_request_id?}new
PATCH/v3/crm/pipelines/{id}thêm trial_stage_id, won_status_id, lost_status_idextend
GET/POST/PATCH/DELETE/v3/crm/sources, /v3/crm/channels (+reorder)dùng bởi các trang cài đặtexisting

9Phân quyền

Mã quyềnownerbranch_manageradmissionsacademic_admin
customers.view (phạm vi own/branch/all)Tất cảChi nhánhCá nhân hoặc nhómChi nhánh, chỉ xem
customers.create, customers.editcócócá nhânkhông
customers.deletecócókhôngkhông
customers.force_callcócókhôngkhông
customers.transfercócókhôngkhông
customers.convertcócócócó
trials.managecócócócó
crm.placement_tests.create (mã đã có sẵn)cócócócó
pipeline.manage, config.manage (nguồn, kênh, thẻ)cókhôngkhôngkhông
finance.discount.approve (dùng bởi wizard)cócókhôngkhông

10Sự kiện phân tích

Sự kiệnThuộc tính
lead_createdsource, channel, has_prospect, via (form|import|api)
call_loggedcall_type, call_result, duration_bucket, from (quick|timeline|queue)
callback_queue_viewedoverdue_count
trial_booked / trial_attended / trial_no_showclass_level, days_from_lead_created
placement_test_created / placement_result_submittedauto (bool), suggested_level
lead_convertedwith_class, with_tuition, discount_pct_bucket, days_from_lead_created, trial_before (bool)
lead_won_without_conversionreason
lead_transferredfrom_school, to_school

11Trường hợp biên

12Câu hỏi còn mở

Trường Số (truongso.net) · Nội bộ FLYER