Tài liệu Yêu cầu Triển khai
Hệ thống Quản lý Task Nội bộ
Vòng đời · Phân phối · Task con · Chat & Thông báo — module Quản lý công việc được xây ngay trên nền tảng NolimitHub, tận dụng tài khoản người dùng và hạ tầng thông báo sẵn có thay vì dựng app rời.
Bổ sung module Quản lý công việc (Task) vào NolimitHub: tạo task, giao trực tiếp hoặc qua người phân phối, task con (parent–child), chat theo task, lịch sử & log, thông báo có gộp.
KHÔNG xây nền tảng quản lý dự án đầy đủ kiểu Jira/Asana — không Gantt, không timesheet, không workflow builder tự do. Chỉ đúng các trạng thái & hành vi mô tả trong tài liệu này.
Bối cảnh & Mục tiêu
⭐ Đây là 2 mục quan trọng nhất. Dev đọc kỹ phần này để hiểu đúng vấn đề và phạm vi trước khi nghĩ tới cách làm. Toàn bộ thiết kế kỹ thuật (API/DB/cronjob/cấu trúc code) dev tự lo.
2.1 · Bối cảnh hiện tại
Hiện tại việc giao và theo dõi công việc nội bộ chủ yếu diễn ra rời rạc — qua tin nhắn chat, trao đổi miệng, hoặc mỗi người tự ghi chú riêng. Không có một nơi tập trung để biết: ai đang làm gì, task đang ở bước nào, bao giờ hết hạn, đã xong và được duyệt hay chưa.
Hệ quả của trạng thái hiện tại
Việc giao qua chat dễ bị trôi, không ai nhận rõ ràng → công việc rơi mà không ai hay biết.
Một việc không biết chính xác ai là người làm, ai là người giao / điều phối.
Không nhìn ra task nào đang chờ, đang làm, hay đã quá hạn.
Làm xong là coi như xong, không có bước review trước khi đóng → chất lượng không kiểm soát được.
Không biết task đã bị đổi gì, ai đổi, khi nào; không lưu vết lúc đóng task.
Trao đổi quanh một việc nằm tản mát, mỗi tin nhắn là một thông báo riêng → loạn, dễ bỏ lỡ tin quan trọng.
Chưa có một hệ thống quản lý task tập trung với vòng đời rõ ràng, cơ chế giao – điều phối, và truy vết. Mọi thứ đang phụ thuộc thao tác thủ công & trí nhớ.
Tính năng cần bổ sung: xây module Quản lý Task nội bộ gồm các khối nghiệp vụ dưới đây (mô tả ở mức nghiệp vụ — cách hiện thực do dev tự thiết kế).
Vòng đời của task lớn
Các trạng thái và ý nghĩa được khoá cứng theo mô tả nghiệp vụ. Không thêm trạng thái ngoài danh sách dưới đây.
// hoặc
Cần làm lại ↩ Chờ làm
Thông tin một task lớn
Mỗi task lớn mang các trường thông tin sau. Đây là danh sách trường nghiệp vụ; kiểu dữ liệu / bảng / index do dev tự thiết kế.
| # | Trường | Ghi chú | Bắt buộc |
|---|---|---|---|
| 01 | Tên task | Tiêu đề ngắn gọn của công việc. | required |
| 02 | Mô tả | Chi tiết công việc, yêu cầu, bối cảnh. | required |
| 03 | Tài liệu đính kèm | File / link tham chiếu (nếu có). | optional |
| 04 | Thời gian tạo | Timestamp khi task được khởi tạo. | auto |
| 05 | Người tạo | Tài khoản NolimitHub khởi tạo task. | required |
| 06 | Người phân phối | Chỉ có ở luồng "cách 2". | conditional |
| 07 | Thời gian hết hạn | Deadline; vượt qua → trạng thái "Quá hạn". | required |
| 08 | Mức độ ưu tiên | Priority do người tạo gán. | required |
| 09 | Trạng thái | Một trong các giá trị ở vòng đời (a). | auto |
| 10 | Danh sách người nhận | Có thể nhiều người ở cấp task lớn. | conditional |
| 11 | Đoạn chat của task | Xem mục (e). | embedded |
| 12 | Danh sách task con | Xem mục (d). | embedded |
| 13 | Lịch sử thay đổi | Xem mục (f). | embedded |
// Entity gợi ý — schema thực do dev tự thiết kế Task { id : UUID name : String // Tên task description : Text // Mô tả attachments : List<File> // Tài liệu đính kèm createdAt : Timestamp createdBy : User // Người tạo dispatcher : User? // Người phân phối (cách 2) dueAt : Timestamp // Thời gian hết hạn priority : Priority status : LifecycleStatus // Tạo / Chờ giao / Chờ làm / ... assignees : List<User> // Người nhận — có thể nhiều chat : Thread // Chat gắn theo task lớn (e) subtasks : List<SubTask> // Task con (d) history : List<Change> // Lịch sử thay đổi (f) closeLog : CloseLog? // Log ghi khi đóng task }
Tạo & phân phối task — 2 cách đưa việc
Khi tạo: nhập Tên, Mô tả, đính kèm tài liệu (nếu có), mức ưu tiên, thời gian hết hạn. Sau đó chọn 1 trong 2 cách.
Chọn luôn người nhận → task vào thẳng trạng thái "Chờ làm" (bỏ qua "Chờ giao").
Chọn người phân phối → task ở "Chờ giao". Người phân phối giao cho người phù hợp; hoặc ai phù hợp có thể tự nhận. Có người nhận → chuyển "Chờ làm".
Task con (sub-task)
Một task lớn có thể chứa nhiều task con bên trong. Đây là quan hệ parent–child bắt buộc trong tài liệu này.
Thông tin task con
Vòng đời task con
Mỗi task con chỉ 1 người thực hiện.
Task lớn tự chuyển "Hoàn thành" khi TẤT CẢ task con đã được Đóng.
Với task lớn không có task con thì chính người nhận báo hoàn thành → review → đóng như vòng đời ở mục (a).
Chat theo task
Mỗi task lớn có một đoạn chat riêng để trao đổi xoay quanh task đó. Chat gắn ở cấp task lớn — task con dùng chung chat của task lớn, không có thread riêng cho task con.
- •1 task lớn = 1 thread chat duy nhất.
- •Task con không có chat riêng — dùng chung chat của task lớn.
- •Mọi tin nhắn liên quan đến task (kể cả thuộc 1 task con) đều nằm gọn ở thread này.
- •Là nguồn cho cơ chế gộp thông báo tin nhắn ở mục (g).
Lịch sử & log
Mỗi task lưu lịch sử thay đổi để biết task đã được đổi gì, khi nào.
Khi task chuyển sang trạng thái Đóng, hệ thống ghi 1 bản log riêng.
-
08/06/2026 · 09:14CTO đã tạo task → trạng thái Tạo
-
08/06/2026 · 09:14Trạng thái: Tạo → Chờ giao · gán người phân phối PM A
-
08/06/2026 · 10:32PM A giao cho Dev 1, Dev 2 · trạng thái Chờ giao → Chờ làm
-
08/06/2026 · 14:00Trạng thái Chờ làm → Đang làm
-
10/06/2026 · 17:403/3 task con đã Đóng → tự chuyển Hoàn thành, chờ review
-
10/06/2026 · 18:05CTO review đạt · trạng thái Đóng task · close log ghi
Thông báo
g.1 · Thông báo trạng thái
Báo cho người liên quan khi task có diễn biến để mọi người nắm được tình hình. Các tình huống bắn thông báo:
g.2 · Thông báo tin nhắn — phải GỘP theo task lớn
Khi có tin nhắn mới trong một task, cộng dồn vào một thông báo của chính task đó — KHÔNG tạo thông báo mới cho từng tin nhắn. Khi người dùng mở / đọc task thì reset bộ đếm.
// Khi có chat mới trong taskId on newChatMessage(taskId, message) { for recipient in task.participants { notif = findExisting(recipient, taskId, "chat") if notif exists { notif.unreadCount += 1 // CỘNG DỒN, không tạo mới notif.text = "Có {n} tin nhắn mới trong task ABC" } else { create(recipient, taskId, type="chat", count=1) } } } on userOpensTask(userId, taskId) { reset(userId, taskId, "chat") // reset bộ đếm }
2.2 · Mục tiêu & phạm vi
Chỉ hiện thực đúng các trạng thái & hành vi ở 2.1. KHÔNG workflow builder tự do, không hệ thống phân quyền / loại trạng thái phức tạp ngoài mô tả, không phình thành nền tảng PM đầy đủ. Giữ tính năng đơn giản, đúng nhu cầu.
Sau khi làm xong
Mọi công việc nội bộ được tạo – giao – theo dõi trong một hệ thống tập trung; mỗi task luôn rõ: ai tạo, ai làm/điều phối, hạn khi nào, đang ở bước nào.
Có đủ 2 cách đưa việc: giao thẳng người làm, hoặc qua người phân phối / để người phù hợp tự nhận.
Task lớn chia được thành task con (mỗi task con 1 người); task lớn tự hoàn thành khi mọi task con đã đóng.
Có bước review trước khi đóng; review trượt thì trả về làm lại.
Mọi thay đổi được lưu lịch sử; lúc đóng task có log.
Trao đổi của một task nằm gọn trong chat của task; thông báo tin nhắn được gộp theo task, không gây nhiễu.
Ngắn hạn — release đầu
Chỉ số đo lường thành công
5 KPI dưới đây để xác định module đã giải quyết đúng vấn đề ở mục 2.1.
Tỷ lệ công việc nội bộ được quản lý qua hệ thống tăng dần tới phần lớn task đi qua hệ thống.
Có người làm hoặc người phân phối rõ ràng + có trạng thái + có hạn.
Mọi thay đổi và mỗi lần đóng task đều có log.
Task chỉ Đóng sau khi đi qua "Hoàn thành, chờ review".
Tin nhắn mới trong 1 task chỉ làm tăng bộ đếm của 1 thông báo, không sinh notif lẻ.
Quick reference
Bảng tham chiếu nhanh — không phải spec kỹ thuật chính thức; thiết kế API do dev tự lo.
ref-01
Bảng trạng thái — Task lớn vs Task con
| Code | Trạng thái | Task lớn | Task con |
|---|---|---|---|
| S0 | Tạo | ✓ | — |
| S1 | Chờ giao | ✓ (cách 2) | — |
| S2 | Chờ làm | ✓ | ✓ |
| S3 | Đang làm | ✓ | ✓ |
| S3* | Quá hạn | ✓ (overlay) | ✓ (overlay) |
| S4 | Hoàn thành, chờ review | ✓ (auto từ con) | ✓ |
| S5 | Đóng | ✓ (+log) | ✓ |
| ↩ | Cần làm lại | → S2 | → S2 |
ref-02
Quan hệ số lượng người
| Đối tượng | Số lượng người | Ghi chú |
|---|---|---|
| Task lớn · Người tạo | 1 | Người khởi tạo task |
| Task lớn · Người phân phối | 0 hoặc 1 | Chỉ có ở cách 2 |
| Task lớn · Người nhận | 1..n | Có thể nhiều người |
| Task con · Người làm | 1 | Duy nhất, không nhiều |
| Chat thread | 1 / task lớn | Task con dùng chung |
ref-03
Trigger thông báo & quy tắc gộp
| Event | Loại notify | Gộp? |
|---|---|---|
| Được giao task | status | — |
| Được nhận task | status | — |
| Đổi trạng thái | status | — |
| Sắp / đã quá hạn | status | — |
| Chờ review | status | — |
| Bị trả về làm lại | status | — |
| Đóng task | status | — |
| Tin nhắn mới trong chat | chat | ✓ GỘP theo task lớn |