Trường Số PRD/16 Công việc
Trường Số · Yêu cầu sản phẩm · 09/2026

PRD 16 · Công việc nội bộ, nhắc nhở và đơn xin nghỉ

Một thực thể công việc dùng chung cho mọi nhân sự, gắn được với khách hàng, học viên, lớp học, buổi học, hoá đơn hoặc sự cố; công việc lặp cho thủ tục vận hành; công việc do hệ thống sinh ra có quy tắc khử trùng lặp; trung tâm thông báo và bản tổng hợp 08:00; đơn xin nghỉ của nhân sự và giáo viên có phê duyệt theo chi nhánh; báo cáo sự cố từ ứng dụng giáo viên. Hiện tại backend chỉ có công việc theo dõi gắn với khách hàng và các endpoint thông báo cá nhân.

Xuất xứ / Prompt / Giới hạn
Trạng thái
Dự thảo v1
Mô-đun phụ trách
Vận hành
Backend
EXISTING today-plan, notifications, class-schedules remind · EXTEND customers interactions · NEW task, task_comment, leave_request, incident
Giai đoạn
P1 (giao việc, nhắc nhở, thông báo trong ứng dụng) / P2 (đơn xin nghỉ có phê duyệt, báo cáo sự cố)
Phụ thuộc vào
01 Tuyển sinh, 04 Điểm danh, 06 Nhân sự, 17 Ứng dụng di động

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-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.
  • Đợ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 (pse4.one, khảo sát công khai ngày 16/09/2026): bảng giá liệt kê giao việc, thông báo, đơn xin nghỉ và nhắc lịch tự động trong mọi gói; tiếp thị nhấn mạnh "thông báo và nhắc nhở thông minh" trong ứng dụng di động; ứng dụng giáo viên có báo cáo sự cố. Việc các tính năng này có mặt ở gói thấp nhất cho thấy khách hàng xem chúng là nền tảng.

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ông việc của đối thủ có gắn được với học viên, lớp học hoặc hoá đơn hay chỉ là danh sách việc rời; có checklist và bình luận không.
    • Đối thủ có công việc lặp và công việc do hệ thống tự sinh không, và cách xử lý trùng lặp khi cùng một điều kiện lặp lại.
    • Đơn xin nghỉ của đối thủ dành cho nhân sự, học viên hay cả hai; các loại nghỉ; ai duyệt; đơn được duyệt có tự đánh dấu buổi học cần dạy thay không.
    • "Thông báo và nhắc nhở thông minh" của đối thủ gồm những loại nào, có bản tổng hợp hằng ngày và giờ yên tĩnh không; báo cáo sự cố có ảnh, mức độ và định tuyến đến ai.

Thiết kế đề xuất

Mọi việc vận hành của chi nhánh đi qua một mục Công việc duy nhất với năm tab (Việc của tôi · Việc của đội · Mẫu công việc lặp · Đơn xin nghỉ · Sự cố); điều quan trọng nhất người đọc nên thấy là mỗi dòng công việc luôn ghi rõ nguồn (Giao tay, Lặp, Hệ thống) và đối tượng gắn kèm, còn đơn xin nghỉ và sự cố chỉ là hai cách khác sinh ra công việc cho cùng danh sách đó.

1 · Việc của tôi

/tasks/my · desktop

Việc của tôi
Năm nhóm đúng thứ tự của mục 4: Quá hạn, Hôm nay, Chờ xác nhận của tôi, Tuần này, Sau đó; mỗi dòng có ô hoàn thành, tiêu đề, đối tượng gắn kèm (chip có biểu tượng học viên, lớp, hoá đơn hoặc "Không gắn"), hạn, mức ưu tiên, nguồn và số bình luận chưa đọc; bộ lọc chi nhánh, nguồn, đối tượng. Dòng đang trỏ chuột hiện ba thao tác Hoàn thành, Hoãn đến ngày mai, Mở chi tiết; nhóm Chờ xác nhận của tôi thay bằng Xác nhận và Trả lại (TSK-02). Hai dòng quá hạn tô đỏ ở cột hạn vì quá hạn là điều kiện, không phải trạng thái (quy tắc 5); công việc "Chốt quỹ 15/09" chưa xong vẫn tồn tại song song với kỳ 16/09 (TSK-03); nhóm Sau đó trống hiển thị đúng câu trạng thái rỗng của PRD.

2 · Việc của tôi trên ứng dụng giáo viên

/teach/tasks · mobile

Việc của tôi trên ứng dụng giáo viên
Thanh tab của giáo viên có thêm mục Việc như mục 4 yêu cầu. Cùng năm nhóm, mỗi dòng rút gọn còn tiêu đề, hạn, đối tượng gắn kèm, nguồn, mức ưu tiên và bình luận chưa đọc; việc quá hạn do trigger session_unmarked đứng đầu. Chạm giữ một dòng mở bottom sheet với đúng ba thao tác trên dòng (Hoàn thành, Hoãn đến ngày mai, Mở chi tiết).

3 · Việc của đội

/tasks/team · desktop

Việc của đội
Bảng đủ chín cột của mục 4 (tiêu đề, người nhận, người giao, đối tượng gắn kèm, hạn, mức ưu tiên, trạng thái, nguồn, cập nhật gần nhất) với sáu bộ lọc và công tắc Chỉ quá hạn. Tóm tắt theo nhân sự (mở, quá hạn, hoàn thành 7 ngày) được đưa lên thành dải thẻ phía trên bảng thay cho cột bên, vì chín cột bảng đã chiếm hết chiều ngang khung 1440. Hai dòng đã chọn bật thanh thao tác hàng loạt Giao lại, Đổi hạn, Đóng kèm lý do; trạng thái Chờ xác nhận, Hoàn thành và các dòng do Hệ thống hoặc Mẫu lặp giao cho thấy đủ năm trạng thái và ba nguồn.

4 · Mẫu công việc lặp

/tasks/routines · desktop

Mẫu công việc lặp
Bốn ô số liệu (mẫu đang chạy, việc sinh hôm nay theo múi giờ trung tâm, kỳ trước chưa hoàn thành, mẫu bỏ qua ngày nghỉ lễ) và bảng đủ cột: tên, chu kỳ, giờ sinh, hạn sau bao lâu, người nhận (nhân sự cụ thể hoặc vai trò tại chi nhánh), phạm vi chi nhánh, lần sinh gần nhất, công tắc Đang chạy / Tạm dừng. Ba mẫu gợi ý cho tenant mới (Chốt quỹ, Kiểm kho, Xác nhận lịch tuần tới) mang nhãn "Mẫu gợi ý có sẵn"; menu ba chấm có Sinh ngay một kỳ và Tạm dừng; dòng chú thích nhắc quy tắc mỗi kỳ chỉ sinh một lần và sửa mẫu chỉ ảnh hưởng các lần sinh sau (quy tắc 6, 7).

5 · Chi tiết công việc

/tasks/:id · drawer trên Việc của đội · desktop

Chi tiết công việc
Phần đầu: tiêu đề sửa tại chỗ, chip nguồn kèm mã trigger, bộ chọn trạng thái, mức ưu tiên, hạn, người nhận và cờ Cần xác nhận. Thân trái: đối tượng gắn kèm mở đúng hồ sơ học viên (kèm phụ huynh), mô tả, checklist 2/3 ghi người và ngày đánh dấu, đính kèm 1/10 và nhắc nhở với mốc mặc định 09:00 ngày hạn cùng nút + Nhắc. Cột phải là dòng thời gian bình luận: bình luận người dùng có @tên, bình luận hệ thống dạng nét đứt ghi "Vắng thêm buổi ngày 15/09, tổng 4 buổi" và mức ưu tiên tăng một bậc thay vì sinh việc mới (TSK-04, quy tắc 8); thanh thao tác cố định Huỷ việc · Giao lại · Hoàn thành, và vì cờ cần xác nhận đang bật, nút chính ghi rõ chuyển sang Chờ xác nhận (TSK-02).

6 · Đơn xin nghỉ · tab Chờ tôi duyệt

/leave · desktop

Đơn xin nghỉ · tab Chờ tôi duyệt
Bộ chuyển Đơn của tôi / Chờ tôi duyệt (chỉ hiện với người có quyền duyệt) và bảng đủ cột: người gửi, loại (Nghỉ phép, Nghỉ ốm, Nghỉ không lương, Đổi ca), từ ngày đến ngày kèm buổi trong ngày, số ngày, số buổi học bị ảnh hưởng, trạng thái, người duyệt, ngày gửi. Đơn của Phạm Hồng Nhung quá 48 giờ chưa xử lý mang thêm nhãn "Quá 48 giờ · đã leo thang" (quy tắc 13); đơn bị từ chối hiển thị lý do ngay dưới trạng thái; đơn nghỉ ốm có biểu tượng giấy khám đính kèm.

7 · Duyệt đơn xin nghỉ

/leave/:id · drawer · desktop

Duyệt đơn xin nghỉ
Drawer phê duyệt cho đơn của Lê Thu Trang: người gửi kèm số ngày phép đã dùng, loại, khoảng thời gian, lý do, và danh sách bốn buổi học bị ảnh hưởng ghi rõ vai trò giáo viên chính hay dạy thay. Khung cảnh báo nêu tác động khi duyệt: gắn cờ Cần dạy thay, sinh việc "Phân công dạy thay" cho giáo vụ, loại khỏi bảng công (TSK-07, quy tắc 14); ô ghi chú bắt buộc khi từ chối; hai nút Từ chối và Duyệt đơn ở góc phải, nút Đóng ở xa bên trái.

8 · Gửi đơn xin nghỉ

/teach/leave/new · mobile

9 · Báo cáo sự cố từ buổi học

/teach/incidents/new · mobile

Gửi đơn xin nghỉ
Báo cáo sự cố từ buổi học
Màn hình 8: biểu mẫu của giáo viên với loại đơn dạng chip lớn, khoảng ngày, bộ chọn cả ngày / sáng / chiều / tối, lý do, đính kèm giấy khám; trước khi gửi, khung cảnh báo vàng liệt kê bốn buổi học bị ảnh hưởng đúng như TSK-06, kèm ghi chú người duyệt mặc định là quản lý chi nhánh chính, đơn chỉ huỷ được khi còn Chờ duyệt và đơn trùng khoảng sẽ bị từ chối (quy tắc 12, 13). Màn hình 9: một màn hình duy nhất với chi nhánh, phòng và buổi học điền sẵn từ ngữ cảnh, loại và mức độ dạng chip lớn, ảnh tối đa 5 nén phía máy khách, tiêu đề và mô tả; banner vàng cho biết đang ngoại tuyến và báo cáo sẽ tự gửi khi có mạng; dòng chú thích nêu mức Nghiêm trọng và An toàn học viên gửi đẩy ngay bỏ qua giờ yên tĩnh (TSK-08, quy tắc 16).

10 · Sự cố

/incidents · desktop

Sự cố
Bốn ô số liệu (Mới, Đang xử lý, Đã xử lý chờ xác nhận, Nghiêm trọng trong 30 ngày) và bảng theo chi nhánh với đủ cột: tiêu đề kèm mã và số ảnh, loại, mức độ, phòng học, người báo cáo, thời điểm, trạng thái, công việc liên kết. Mỗi sự cố có đúng một công việc xử lý kèm người nhận và trạng thái của việc đó; sự cố "Học viên trượt ngã cầu thang" mức Nghiêm trọng đã đẩy ngay cho chủ trung tâm; các sự cố Đã xử lý tự chuyển Đóng sau 3 ngày nếu người báo cáo không xác nhận (quy tắc 15).

11 · Trung tâm thông báo

/notifications · panel mở từ chuông · desktop

Trung tâm thông báo
Panel thả xuống từ biểu tượng chuông trên thanh đầu trang với chip lọc Tất cả · Công việc · Đơn xin nghỉ · Sự cố · Hệ thống, liên kết Đọc tất cả và Cài đặt thông báo. Mục đầu là bản tổng hợp 08:00 duy nhất của ngày, liệt kê bốn nhóm kèm số lượng và ba mục đầu (TSK-05, quy tắc 10); các mục còn lại có biểu tượng loại, tiêu đề, dòng phụ, thời gian tương đối và dấu chưa đọc; mục đang trỏ chuột hiện nút Lưu trữ; hai mục đã đọc hiển thị nhạt hơn; chân panel nhắc thông báo tự lưu trữ sau 90 ngày.

1Mục đích

Phần lớn việc vận hành một trung tâm không thuộc về một mô-đun cụ thể: gọi lại cho phụ huynh, tìm giáo viên dạy thay, chốt quỹ cuối ngày, kiểm kho đầu tuần, sửa máy chiếu hỏng. Hiện tại những việc này nằm trong nhóm Zalo, sổ tay hoặc bảng tính, và không ai biết việc nào đã xong. Mô-đun này đưa vào một thực thể công việc duy nhất mà mọi nhân sự có thể được giao, mọi mô-đun khác có thể tự sinh ra, và mọi người thấy trong một màn hình "Việc của tôi". Cùng cơ chế nhắc nhở và thông báo đó phục vụ đơn xin nghỉ của nhân sự và báo cáo sự cố từ lớp học.

Trong phạm vi

Ngoài phạm vi

2Hiện trạng

Năng lực hiện cóEndpointGiữ lại?
Việc hôm nay: công việc, cuộc gọi, cuộc hẹn gắn với khách hàng, widget trên Tổng quanGET /v3/crm/me/today-planexisting giữ; nguồn dữ liệu mở rộng sang thực thể công việc mới
Công việc theo dõi khách hàng: một loại tương tác (Task) trong timeline, có hạn, người được giao, trạng tháiGET /v3/crm/customers/{id}/interactionsextend di trú tương tác loại Task thành công việc gắn khách hàng
Trung tâm thông báo cá nhân: danh sách, số chưa đọc, đã đọc, đọc tất cả, lưu trữGET /v3/crm/me/notifications, GET .../unread-count, POST .../{id}/read, POST .../read-all, POST .../{id}/archiveexisting giữ; thêm loại thông báo mới, không đổi hợp đồng
Nhắc lịch buổi học gửi phụ huynh và xem trước giờ gửiPOST /v3/teacher/class-schedules/{id}/remind, POST /v3/teacher/class-schedules/preview-remind-timeexisting thuộc PRD 07; không thay đổi
Công việc dùng chung, công việc lặp, công việc hệ thống sinh, đơn xin nghỉ, báo cáo sự cốkhông cónew

Quyết định đề xuất: tách công việc khỏi tương tác khách hàng. Tương tác loại Task được di trú một lần thành task với source = migrated và linked_type = customer, giữ người được giao và hạn; tương tác chỉ còn cuộc gọi, cuộc họp và ghi chú; timeline khách hàng đọc thêm từ bảng công việc.

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

TSK-01Giao việc cho đồng nghiệp
Quản lý chi nhánh giao một việc có hạn cho giáo vụ, gắn với một học viên.
  • Given Đang mở hồ sơ học viên hoặc màn hình Việc của đội
  • When Chọn "+ Giao việc", nhập tiêu đề, người nhận (một hoặc nhiều), hạn, mức ưu tiên, mô tả và checklist tuỳ chọn
  • Then Công việc được tạo ở trạng thái Mới, gắn với học viên; mỗi người nhận nhận thông báo trong ứng dụng và thông báo đẩy trong vòng 1 phút; công việc xuất hiện trong Việc của tôi của người nhận và trong tab Công việc của hồ sơ học viên.
TSK-02Xử lý và hoàn thành công việc
Người nhận cập nhật tiến độ và gửi kết quả để người giao xác nhận.
  • Given Một công việc có checklist ba mục và cờ "cần xác nhận" đang bật
  • When Người nhận đánh dấu các mục checklist, đính kèm ảnh và chọn "Hoàn thành"
  • Then Trạng thái chuyển sang Chờ xác nhận và người giao được thông báo; người giao chọn "Xác nhận" để chuyển sang Hoàn thành hoặc "Trả lại" kèm bình luận để quay về Đang làm; khi cờ tắt, "Hoàn thành" chuyển thẳng sang Hoàn thành.
TSK-03Công việc lặp cho thủ tục vận hành
Kế toán có việc chốt quỹ xuất hiện mỗi ngày làm việc mà không phải tạo tay.
  • Given Một mẫu công việc lặp "Chốt quỹ chi nhánh": hằng ngày trừ Chủ nhật, giờ sinh 16:00, hạn 18:00, người nhận là vai trò kế toán tại chi nhánh
  • When Đến giờ sinh
  • Then Một công việc mới được tạo cho từng chi nhánh đang hoạt động và gán cho nhân sự giữ vai trò kế toán tại đó; nếu công việc kỳ trước chưa hoàn thành, công việc mới vẫn được tạo và công việc cũ hiển thị quá hạn; mẫu có thể tạm dừng, và sửa mẫu chỉ ảnh hưởng các lần sinh sau.
TSK-04Công việc do hệ thống sinh ra, không trùng lặp
Nhân sự chăm sóc học viên nhận đúng một việc cho một học viên vắng nhiều buổi.
  • Given Học viên đã có công việc mở "Liên hệ phụ huynh: vắng 3 buổi" do PRD 04 kích hoạt
  • When Học viên vắng thêm buổi thứ tư trước khi công việc hoàn thành
  • Then Không có công việc mới; công việc hiện có nhận bình luận hệ thống "Vắng thêm buổi ngày dd/MM, tổng 4 buổi", mức ưu tiên tăng một bậc và người nhận được nhắc lại; nếu công việc đã hoàn thành trong 7 ngày gần nhất cũng không sinh mới.
TSK-05Nhắc nhở, bản tổng hợp và trung tâm thông báo
Mỗi nhân sự bắt đầu ngày làm việc với một bản tổng hợp và xử lý thông báo ở một nơi.
  • Given Người dùng có 2 việc quá hạn, 3 việc đến hạn hôm nay, 1 việc chờ xác nhận và 1 đơn xin nghỉ chờ duyệt
  • When Đồng hồ điểm 08:00 theo múi giờ của trung tâm
  • Then Một thông báo tổng hợp duy nhất được tạo trong trung tâm thông báo và gửi đẩy, liệt kê bốn nhóm kèm số lượng và ba mục đầu mỗi nhóm; email tổng hợp gửi nếu người dùng bật; nhắc nhở riêng theo công việc (mặc định 09:00 ngày hạn) vẫn hoạt động độc lập; chọn một thông báo sẽ đánh dấu đã đọc qua endpoint hiện có và mở đúng công việc.
TSK-06Giáo viên gửi đơn xin nghỉ
Giáo viên xin nghỉ hai ngày và thấy ngay các buổi học bị ảnh hưởng.
  • Given Giáo viên mở Đơn xin nghỉ trong ứng dụng di động
  • When Chọn loại Nghỉ phép, khoảng ngày, lý do và gửi
  • Then Hệ thống liệt kê các buổi học giáo viên là giáo viên chính hoặc dạy thay trong khoảng đó trước khi gửi; đơn được tạo ở trạng thái Chờ duyệt, người duyệt là quản lý chi nhánh chính của giáo viên và được thông báo; giáo viên huỷ được đơn khi còn Chờ duyệt.
TSK-07Phê duyệt đơn xin nghỉ và tác động
Quản lý chi nhánh duyệt đơn và hệ thống chuẩn bị các bước tiếp theo.
  • Given Một đơn Chờ duyệt có 4 buổi học bị ảnh hưởng
  • When Người duyệt chọn "Duyệt" kèm ghi chú tuỳ chọn
  • Then Đơn chuyển sang Đã duyệt; mỗi buổi bị ảnh hưởng được gắn cờ "Cần dạy thay" (PRD 03) và một công việc "Phân công dạy thay: [lớp] [ngày]" được tạo cho giáo vụ chi nhánh; các buổi trong khoảng nghỉ không vào bảng công của giáo viên nghỉ (PRD 06); giáo viên nhận thông báo kết quả; khi "Từ chối", lý do là bắt buộc và buổi học không thay đổi.
TSK-08Giáo viên báo cáo sự cố từ lớp học
Giáo viên báo cáo điều hoà hỏng bằng điện thoại trong chưa đầy một phút.
  • Given Giáo viên đang trong buổi học và mở "Báo cáo sự cố" từ màn hình buổi học
  • When Chọn loại Cơ sở vật chất, mức độ Trung bình, chụp hai ảnh, nhập mô tả ngắn và gửi
  • Then Sự cố được tạo với chi nhánh, phòng học và buổi học điền sẵn; một công việc "Xử lý sự cố: [tiêu đề]" được tạo cho quản lý chi nhánh với mức ưu tiên tương ứng; sự cố mức Nghiêm trọng gửi đẩy ngay cho quản lý chi nhánh và chủ trung tâm; giáo viên theo dõi trạng thái trong Sự cố của tôi.

4Màn hình

Việc của tôi (desktop và di động) /tasks/my · /teach/tasks

Các nhóm theo thứ tự: Quá hạn · Hôm nay · Chờ xác nhận của tôi · Tuần này · Sau đó. Mỗi dòng: ô hoàn thành, tiêu đề, đối tượng gắn kèm (chip có biểu tượng và tên), hạn, mức ưu tiên, nguồn (Giao tay / Lặp / Hệ thống), số bình luận chưa đọc. Bộ lọc: chi nhánh, nguồn, đối tượng. Thao tác trên dòng: Hoàn thành, Hoãn đến ngày mai, Mở chi tiết. Trạng thái rỗng: "Không có việc nào đến hạn. Việc được giao và việc hệ thống sinh ra sẽ xuất hiện tại đây." Trên di động, thanh tab của giáo viên có thêm mục Việc.

Việc của đội và mẫu công việc lặp (desktop) /tasks/team · /tasks/routines

Bảng: tiêu đề, người nhận, người giao, đối tượng gắn kèm, hạn, mức ưu tiên, trạng thái, nguồn, cập nhật gần nhất. Bộ lọc: chi nhánh, người nhận, trạng thái, mức ưu tiên, nguồn, quá hạn. Cột bên: tóm tắt theo nhân sự (mở, quá hạn, hoàn thành 7 ngày). Chọn nhiều dòng: Giao lại, Đổi hạn, Đóng kèm lý do. Trang mẫu công việc lặp: tên, chu kỳ (hằng ngày, ngày làm việc, hằng tuần vào thứ N), giờ sinh, hạn sau bao lâu, người nhận (nhân sự hoặc vai trò tại chi nhánh), phạm vi chi nhánh, lần sinh gần nhất, Đang chạy / Tạm dừng; tenant mới có sẵn ba mẫu gợi ý: Chốt quỹ (hằng ngày), Kiểm kho (thứ Hai), Xác nhận lịch tuần tới (thứ Sáu). Trạng thái rỗng: "Chi nhánh chưa có công việc nào. Tạo mẫu công việc lặp để bắt đầu."

Chi tiết công việc (drawer trên desktop, màn hình trên di động) /tasks/:id

Phần đầu: tiêu đề sửa tại chỗ, nguồn, mức ưu tiên, hạn, bộ chọn trạng thái, người nhận. Phần thân: đối tượng gắn kèm (liên kết mở đúng hồ sơ), mô tả, checklist, đính kèm, nhắc nhở (mặc định 09:00 ngày hạn, nút + Nhắc). Bình luận là dòng thời gian gồm bình luận người dùng (có @tên để nhắc) và bình luận hệ thống (đổi trạng thái, giao lại, leo thang); nhật ký xem qua liên kết "Lịch sử". Thanh thao tác cố định: Hoàn thành · Giao lại · Huỷ.

Đơn xin nghỉ (desktop và di động) /leave · /teach/leave

Hai tab: Đơn của tôi và Chờ tôi duyệt (chỉ với người có quyền duyệt). Bảng: người gửi, loại (Nghỉ phép / Nghỉ ốm / Nghỉ không lương / Đổi ca), từ ngày đến ngày, số ngày, số buổi học bị ảnh hưởng, trạng thái, người duyệt, ngày gửi. Biểu mẫu: loại, khoảng thời gian (cả ngày hoặc sáng/chiều/tối), lý do, đính kèm (giấy khám bệnh); với đổi ca: buổi học và giáo viên nhận ca đề xuất. Trước khi gửi hiển thị danh sách buổi học bị ảnh hưởng. Người duyệt thấy nút Duyệt / Từ chối kèm ô ghi chú. Trạng thái rỗng: "Chưa có đơn xin nghỉ nào."

Sự cố (desktop) và Báo cáo sự cố (di động) /incidents · /teach/incidents/new

Desktop: bảng theo chi nhánh với tiêu đề, loại (Cơ sở vật chất / An toàn học viên / Hành vi / Thiết bị / Khác), mức độ (Thấp / Trung bình / Cao / Nghiêm trọng), phòng học, người báo cáo, thời điểm, trạng thái (Mới / Đang xử lý / Đã xử lý / Đóng), công việc liên kết. Di động: một màn hình gồm loại và mức độ (chip lớn), ảnh (tối đa 5, nén phía máy khách), mô tả; chi nhánh, phòng học và buổi học điền sẵn từ ngữ cảnh; gửi được khi offline và đồng bộ sau. Trạng thái rỗng: "Chưa có sự cố nào trong 30 ngày."

Trung tâm thông báo (panel) /notifications

Panel mở từ biểu tượng chuông, chip lọc: Tất cả · Công việc · Đơn xin nghỉ · Sự cố · Hệ thống. Mỗi mục: biểu tượng loại, tiêu đề, dòng phụ, thời gian tương đối, dấu chưa đọc. Thao tác: chọn để mở, Đọc tất cả, Lưu trữ từng mục; liên kết "Cài đặt thông báo" mở tuỳ chọn kênh theo loại (trong ứng dụng luôn bật; đẩy và email bật tắt được). Trạng thái rỗng: "Không có thông báo mới."

5Quy tắc nghiệp vụ

  1. Chuyển đổi trạng thái hợp lệ: new → in_progress; in_progress → pending_review (khi cờ cần xác nhận bật) hoặc done; pending_review → done hoặc in_progress; bất kỳ → cancelled kèm lý do. Công việc done hoặc cancelled không mở lại.
  2. Công việc có ít nhất một người nhận. Với nhiều người nhận, công việc hoàn thành khi bất kỳ ai hoàn thành (mặc định) hoặc khi tất cả hoàn thành (cờ require_all). Người nhận là nhân sự cụ thể hoặc một vai trò tại một chi nhánh; khi là vai trò, hệ thống gán cho mọi nhân sự đang hoạt động giữ vai trò đó tại thời điểm tạo.
  3. Mức ưu tiên dùng chung thang với lead ở PRD 01. Quá hạn không phải trạng thái mà là điều kiện due_at < now trên công việc chưa done hoặc cancelled.
  4. Công việc lặp sinh theo múi giờ của trung tâm, bỏ qua ngày nghỉ lễ của chi nhánh (PRD 03) khi mẫu bật cờ tương ứng. Cặp (routine_id, period_key) là duy nhất nên một kỳ không bao giờ sinh hai lần; sửa mẫu chỉ ảnh hưởng các lần sinh sau.
  5. Công việc hệ thống mang dedupe_key = trigger_code cộng đối tượng gắn kèm. Khi đã có công việc mở cùng dedupe_key, hệ thống không tạo mới mà thêm bình luận hệ thống, tăng một bậc ưu tiên (tối đa urgent) và nhắc lại. Sau khi hoàn thành, dedupe_key được giữ 7 ngày (cấu hình tenant, 0 đến 30) trước khi được sinh lại.
  6. Trigger ở P1 và người nhận mặc định: lead_cold (không có tương tác 7 ngày; người phụ trách lead), student_absent (ngưỡng theo PRD 04; người chăm sóc học viên tại chi nhánh), invoice_overdue (quá hạn 7 ngày; kế toán chi nhánh), session_unmarked (kết thúc quá 2 giờ; giáo viên của buổi, leo thang lên quản lý chi nhánh sau 24 giờ), substitute_needed (giáo vụ chi nhánh), incident_new (quản lý chi nhánh). Mỗi trigger bật tắt được theo tenant.
  7. Nhắc nhở theo công việc mặc định 09:00 ngày hạn, thêm được tối đa 3 mốc; chỉ gửi cho người nhận của công việc chưa đóng. Bản tổng hợp 08:00 là một thông báo daily_digest cho mỗi người dùng có ít nhất một mục, được thay thế nếu ngày đó đã có. Thông báo đẩy tuân thủ giờ yên tĩnh 21:30 đến 07:00 (dùng chung cài đặt với PRD 04); thông báo trong ứng dụng không bị giữ và tự lưu trữ sau 90 ngày.
  8. Trung tâm thông báo giữ nguyên hợp đồng endpoint hiện có; loại mới được thêm vào enum type, payload luôn có entity_type và entity_id để giao diện mở đúng ngữ cảnh.
  9. Người gửi chỉ huỷ đơn xin nghỉ khi pending; người duyệt thu hồi được đơn đã duyệt trước ngày bắt đầu kèm lý do, cờ dạy thay được gỡ nếu chưa phân công. Đơn trùng khoảng với đơn khác của cùng nhân sự bị từ chối khi tạo.
  10. Người duyệt mặc định là quản lý chi nhánh chính của người gửi (PRD 06); người gửi là quản lý chi nhánh thì người duyệt là chủ trung tâm; tenant đặt được người duyệt thay thế theo chi nhánh. Đơn quá 48 giờ chưa xử lý được leo thang lên chủ trung tâm bằng thông báo; hệ thống không tự duyệt.
  11. Khi đơn được duyệt, mọi buổi học trong khoảng nghỉ mà người gửi là giáo viên chính hoặc dạy thay được gắn needs_substitute = true; PRD 03 xử lý phân công; các buổi này không sinh dòng bảng công cho người nghỉ (PRD 06) trừ khi giáo viên đó thực tế điểm danh buổi (điểm danh thắng đơn nghỉ và được ghi cảnh báo). Đổi ca được duyệt tạo phân công dạy thay ngay cho giáo viên nhận ca.
  12. Mỗi sự cố sinh đúng một công việc xử lý; đóng công việc chuyển sự cố sang resolved, người báo cáo xác nhận hoặc sau 3 ngày tự chuyển closed. Sự cố an toàn học viên hoặc mức critical gửi đẩy ngay cho quản lý chi nhánh và chủ trung tâm, bỏ qua giờ yên tĩnh.
  13. Mọi thực thể thuộc một trung tâm (center_id) và một chi nhánh (school_id); công việc không gắn chi nhánh lấy chi nhánh của người tạo. Người dùng chỉ thấy công việc mà họ là người giao, người nhận, người được nhắc tên, hoặc thuộc chi nhánh trong phạm vi quyền. Đính kèm dùng dịch vụ tệp của CRM: tối đa 10 tệp mỗi công việc, 20 MB mỗi tệp.

6Mô hình dữ liệu

Thực thểTrườngGhi chú
taskid uuid; center_id; school_id; title; description; source enum(manual, routine, system, migrated); trigger_code null; dedupe_key null (unique khi mở); routine_id null; period_key null; linked_type enum(customer, student, class, session, invoice, incident) null; linked_id null; created_by_staff_id; priority enum(low, medium, high, critical, urgent); status enum(new, in_progress, pending_review, done, cancelled); require_review bool; require_all bool; due_at; completed_at; cancelled_reason; version intnew; chỉ mục (center_id, school_id, status, due_at) và (linked_type, linked_id); nhật ký chi tiết ở task_history
task_assigneetask_id; staff_id; assigned_by_rule enum(direct, role); role_code null; state enum(open, done); done_at; last_reminded_atkhoá chính (task_id, staff_id)
task_checklist_item · task_attachment · task_reminderchecklist: id; task_id; position; label; checked; checked_by. attachment: id; task_id; file_id; uploaded_by. reminder: id; task_id; kind enum(relative, absolute); offset_minutes null; fire_at; fired_at nulltối đa 30 mục, 10 tệp, 4 mốc nhắc
task_commentid uuid; task_id; author_staff_id null (null là hệ thống); body; kind enum(user, system); mentions staff_id[]; created_atnew
task_routineid; center_id; school_ids[] (rỗng là mọi chi nhánh); name; title_template; checklist_template json; priority; require_review; recurrence enum(daily, weekdays, weekly); weekday null; generate_time; due_after_minutes; skip_holidays bool; assignee_rule {staff_ids[] | role_code}; is_paused; last_generated_atnew
notification (hiện có) · notification_preferencetype enum mở rộng: task_assigned, task_due, task_overdue, task_commented, task_review_requested, task_returned, task_completed, leave_submitted, leave_decided, leave_escalated, incident_reported, incident_updated, daily_digest; payload {entity_type, entity_id, title, body}. preference: staff_id; type; push bool; email boolextend chỉ thêm enum và payload; preference là new
leave_requestid uuid; center_id; school_id; staff_id; type enum(annual, sick, unpaid, shift_swap); date_from; date_to; part_of_day enum(full, morning, afternoon, evening); session_id null; swap_with_staff_id null; reason; attachment_file_id null; status enum(pending, approved, rejected, cancelled); approver_staff_id; decided_at; decision_note; escalated_at nullnew; leave_request_session (leave_request_id; session_id; substitute_task_id null) tính lúc gửi, tính lại lúc duyệt
incident · incident_attachmentid uuid; center_id; school_id; room_id null; session_id null; class_id null; reported_by_staff_id; type enum(facility, student_safety, behaviour, equipment, other); severity enum(low, medium, high, critical); title; description; status enum(new, in_progress, resolved, closed); task_id; resolved_at; closed_at. attachment: id; incident_id; file_idnew; tối đa 5 ảnh, nén còn 1.600 px cạnh dài
task_policy (cấu hình tenant)dedupe_window_days (7); digest_time (08:00); default_reminder_time (09:00); triggers {lead_cold: {enabled, days}, student_absent, invoice_overdue: {enabled, days}, session_unmarked, substitute_needed, incident_new}; leave_approver_overrides [{school_id, staff_id}]; leave_escalation_hours (48); incident_autoclose_days (3)lưu trong cấu hình trung tâm (PRD 10)

7Hợp đồng API

MethodPathRequest / responseStatus
GET/v3/crm/me/today-plan→ bổ sung mảng tasks (quá hạn, hôm nay, chờ xác nhận) bên cạnh cuộc gọi và cuộc hẹn hiện cóexisting
GET · POST/v3/crm/me/notifications · /unread-count · /{id}/read · /read-all · /{id}/archivekhông đổi hợp đồng; thêm tham số lọc type?existing
POST/v3/teacher/class-schedules/{id}/remind · /preview-remind-timenhắc lịch cho phụ huynh, thuộc PRD 07; chỉ tham chiếuexisting
GET/v3/crm/customers/{id}/interactionstrả thêm công việc gắn khách hàng dưới dạng mục timeline kind = task (chỉ đọc); tạo công việc dùng /v3/crm/tasksextend
GET / POST/v3/crm/tasksview=my|team, school_id, assignee_id, status[], priority[], source, linked_type, linked_id, overdue, due_from, due_to, q; POST {title, description?, assignees: [{staff_id} | {role_code, school_id}], due_at?, priority?, require_review?, require_all?, linked?: {type, id}, checklist?, reminders?, attachments?}new
GET / PATCH/v3/crm/tasks/{id}chi tiết gồm checklist, attachments, reminders, comments, history; PATCH kèm version, 409 STALE_VERSIONnew
POST/v3/crm/tasks/{id}/transition · /reassign · /v3/crm/tasks/bulk{to, reason?} kiểm tra theo mục 5; {assignees[], note?}; bulk {ids[], action: reassign|reschedule|cancel, payload}new
PUT · GET/POST · POST/DELETE/v3/crm/tasks/{id}/checklist · /comments · /reminderschecklist thay toàn bộ; comment {body, mentions?} thông báo người được nhắc tên; reminder {kind, offset_minutes | fire_at}new
GET / POST / PATCH / DELETE/v3/crm/task-routines · /{id}các trường ở mục 6; PATCH {is_paused}; POST /{id}/run-now sinh ngay một kỳnew
GET / PUT/v3/crm/me/notification-preferences[{type, push, email}]new
GET / POST/v3/crm/leave-requestsview=mine|to_approve|all, school_id, staff_id, status[], from, to; POST {type, date_from, date_to, part_of_day, session_id?, swap_with_staff_id?, reason, attachment_file_id?} → kèm affected_sessions[]; POST /preview-impact trả affected_sessions[] trước khi gửinew
POST/v3/crm/leave-requests/{id}/decide · /cancel · /revokedecide {decision: approved|rejected, note?} (note bắt buộc khi rejected) gắn cờ buổi học và sinh công việc dạy thay; cancel bởi người gửi khi pending; revoke bởi người duyệt trước ngày bắt đầu {reason}new
GET / POST/v3/crm/incidentsschool_id, status[], severity[], type[], from, to; POST {type, severity, title, description, room_id?, session_id?, class_id?, attachments[], client_created_at?} idempotent theo (reported_by, client_created_at)new
GET / PATCH/v3/crm/incidents/{id}chi tiết kèm task; PATCH {status, severity?, note?}; POST /{id}/confirm-resolved bởi người báo cáonew
GET / PUT/v3/teacher/school-configthêm khối task_policyextend
GET/v3/crm/tasks/reportschool_id, from, to, group_by=assignee|source|trigger → số tạo, hoàn thành, đúng hạn, thời gian hoàn thành trung vị; dùng cho PRD 09new

8Phân quyền

Mã quyềnownerbranch_manageradmissionsacademic_adminaccountantteacher
tasks.viewtất cảchi nhánhcủa bản thân + được nhắc tênchi nhánhcủa bản thân + gắn hoá đơn trong chi nhánhcủa bản thân + gắn lớp của bản thân
tasks.createcócócó (gắn khách hàng của bản thân)cócócó (gắn lớp, buổi của bản thân)
tasks.assign_others, tasks.edit_any, tasks.bulk, tasks.team_viewtất cảchi nhánhkhông (chỉ tự giao)chi nhánhkhôngkhông
tasks.routinescóchi nhánhkhôngkhôngkhôngkhông
leave.request, incidents.reportcócócócócócó
leave.approvetất cảchi nhánhkhôngkhôngkhôngkhông
leave.viewtất cảchi nhánhcủa bản thânchi nhánh (chỉ xem, để xếp dạy thay)chi nhánh (chỉ xem, để tính lương)của bản thân
incidents.managetất cảchi nhánhkhôngchi nhánhkhôngcủa bản thân (xác nhận đã xử lý)
tasks.policycókhôngkhôngkhôngkhôngkhông
tasks.reporttất cảchi nhánhkhôngchi nhánhkhôngkhông

Phụ huynh không có quyền trong mô-đun này; yêu cầu từ phụ huynh đi qua PRD 07 và trở thành công việc cho bộ phận lễ tân qua trigger hệ thống.

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

Sự kiệnThuộc tính
task_createdsource (manual|routine|system|migrated), trigger_code, linked_type, assignee_count, has_due, has_checklist, by_role, device
task_transitionedfrom, to, hours_open, was_overdue, by_role, source
task_dedupedtrigger_code, priority_before, priority_after
reminder_sentkind (task|digest), channel (in_app|push|email), quiet_hours_deferred
notification_openedtype, minutes_after_send, device
routine_generatedroutine_id, recurrence, schools_count, previous_period_incomplete
leave_submittedtype, days, part_of_day, affected_sessions, device
leave_decideddecision, hours_to_decide, escalated, affected_sessions
incident_reportedtype, severity, photos, offline_queued, seconds_to_submit
incident_resolvedhours_to_resolve, confirmed_by_reporter, autoclosed

10Trường hợp biên

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

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