Quản lý Công việc (Task)

I. Tổng quan

Lưu ý: Các thuộc tính, quy tắc phân quyền và tính năng chung của đối tượng này được kế thừa từ tài liệu Objects (Đối tượng CRM).

Tính năng quản lý, phân công và theo dõi mọi hoạt động công việc (task / to-do list) có liên kết chuẩn với các đối tượng trong hệ thống CRM.

1. Vấn đề

  • Nhân sự làm việc không có công cụ nhắc nhở, dễ bỏ sót lịch hẹn, nhiệm vụ quan trọng với khách hàng (Contact) hoặc cơ hội bán hàng (Deal).
  • Các team thiếu một bức tranh tổng thể về khối lượng công việc đang xử lý dẫn tới phân phối nguồn lực không đồng đều.

2. Giải pháp

  • Ra mắt module Task cho phép tạo công việc cá nhân hoặc giao việc cho đối tác/nhân viên, có đính kèm file, thiết lập ngày hết hạn, tùy chọn loại cảnh báo thông báo nhắc nhở đa nền tảng và ghim chặt (link) với các Object CRM cốt lõi (Liên hệ, Công ty, Cơ hội, Đơn hàng).

3. Đối tượng

  • Sales/CSKH: Tự lập lịch nhắc việc bản thân.
  • Manager/Admin: Giao task, tạo deadline, monitor hiệu suất xử lý công việc của đội ngũ.

4. Tầm nhìn/insight

  • Tương lai tính năng Task sẽ được tự động hóa từ các luồng Automation (Ví dụ: Khách nhắn tin sau 24h chưa phản hồi -> Auto sinh Task gọi lại). Cần thiết kế cấu trúc DB linh hoạt, cho phép extend thêm các nguồn trigger sinh Task tự động.

II. Yêu cầu chức năng

1. Danh sách tính năng

  • Tạo mới Task (Giao diện Modal popup)
  • Xem bảng List Task (Hệ thống Data Grid, Custom View, Filters)
  • Xem nhanh chi tiết Task (Sửa Tên, Card Thông tin, Object Links, Ghi chú)
  • Tích hợp Lịch sử Task vào màn hình Chi Tiết CRM Entity (Phân cụm Sắp tới, Quá khứ)

2. Đặc tả chi tiết

Cách trình bày (Dạng gạch đầu dòng / Text)

  • User Story 1: Là một nhân sự, tôi muốn có thể tạo một công việc mới nhanh chóng trên hệ thống kèm thiết lập nhắc nhở để tránh quên.
    • Use case 1.1 (Tạo thành công):
      • Tại màn hình bất kỳ, chọn “Thêm mới task”. Hệ thống hiển thị Modal form.
      • Điền các trường bắt buộc (Tên công việc).
      • Cấu hình Thời gian hết hạn, và tuỳ chọn “Thông báo trước X phút”.
      • Click Thêm công việc -> Hệ thống lưu record vào DB, hiện popup thông báo thành công và reload lại danh sách hiện tại.
  • User Story 2: Là người dùng, tôi muốn xem lại tất cả các Task của mình (hoặc nhân viên dưới quyền) để check trạng thái hoàn thành.
    • Use case 2.1 (Bộ lọc và Hiển thị):
      • Click vào Menu bên trái icon “Task”. Bảng Danh sách Task xuất hiện.
      • Mặc định tải theo View hiện tại. Người dùng có thể click chuyển qua các View 1, View 2, View 3 (lưu preset filter).
      • Có thể filter nhanh theo: Nhân viên, Ngày hết hạn, Trạng thái, Độ ưu tiên. Có thanh Input search text.
      • Bảng hiển thị các cột cơ bản được pagination (vd: 50 dòng/page).
  • User Story 3: Là một Sales đang theo sát khách hàng, tôi muốn vào trong chi tiết khách hàng và xem được dọc theo timeline các công việc gì tôi chưa làm, công việc gì đã lỡ bỏ trôi.
    • Use case 3.1 (Lịch sử Task):
      • Tại màn Xem chi tiết Liên hệ. Tab “Lịch sử tương tác”.
      • Hệ thống load ra các Card ghi chú Task (có hiển thị Nhãn, Nguồn, Trạng thái check/uncheck, Assignee).
      • Render hai bộ nhóm thời gian riêng biệt: “Sắp tới” và “Quá khứ” (Chia nhỏ theo tháng) giúp Sales dễ quét mắt và định vị tính khẩn cấp của việc cần xử lý.

3. Danh sách nghiệp vụ (Logic & Validation Rules)

  • Rule 1: Các trường thông tin Khởi tạo Task
    • Tên công việc (Text): Không được bỏ trống.
    • Nhân viên phụ trách (User): Mặc định là Người đang tạo task (Current User).
    • Thời gian hết hạn (Date time):
      • Không thể nhỏ hơn hoặc bằng thời điểm quá khứ tại lúc tạo form (Trừ trường hợp cho phép log backdate - tuỳ hệ thống).
      • Logic mặc định: Lấy Thời gian hiện tại, sau đó cộng thêm 60 phút, làm tròn đơn vị phần nghìn.
    • Thông báo (Single option dropdown): Các giá trị cho phép: Tại thời điểm đến hạn (8:30 AM), Trước 10 phút, Trước 1 ngày, Trước 2 ngày, Trước 1 tuần.
    • Độ ưu tiên (Single option): Cao (Màu đỏ), Trung bình (Màu vàng cam), Thấp (Màu xanh).
    • File đính kèm (File input): Upload giới hạn size, tuân thủ rule server storage.
    • Mô tả (Rich text): Hỗ trợ đính bullet point, bold/italic.
    • Nhân viên hỗ trợ (Multi-users): Select-box nhiều options.
  • Rule 2: Khối Liên Kết (Link Objects) trong màn Xem Nhanh
    • Một task có thể liên kết (Link) tới Nhiều đối tượng (multi-objects) (Liên hệ, Công ty, Đơn hàng, Cơ hội, Phiếu ghi, Meeting).
    • Giao diện: Mặc định hiển thị n đối tượng có sẵn, bấm + Thêm hiển thị dropdown list phân cụm theo Object (Liên hệ / Công ty…). Khi gõ tìm kiếm, list data được render theo paging scroll dưới dropdown (VD: Cty Etron 2, Etron 3).
    • Logic đếm số Liên kết: Nếu chỉ có 1 liên hệ + 3 đơn hàng thì Label đếm liên kết hiển thị Liên kết (2) (Tức tổng nhóm Data Source là 2) HOẶC tự đếm tổng item theo yêu cầu spec hệ thống trước.
    • UI Ẩn n-link: Nếu vượt quá giới hạn khung chứa, hiển thị list icon user + text đại diện cho Object đầu tiên, và append theo sau là icon +n (VD: U Dương Thu Hoài Ngọc + 3). Khi hover vào +3, bật Tooltip liệt kê toàn bộ item bị giấu. Bấm x popup pop-confirm xác nhận gỡ liên kết.
  • Rule 3: Ghi chú trong màn Xem Nhanh
    • Editor note ghim ngang dưới đáy. Khung Header (Title task) fix cứng ở trên (Chỉ list note cuộn ở giữa).
    • Logic render note: Render Ngược (Theo thời gian).
    • Pagination ghi chú: Load mặc định 10 record gần nhất lúc init. Ghi chú mới gửi bay xuống cuối. Bấm text Xem thêm nằm trên đỉnh (đỉnh scroll-container) để gọi API fetch append 10 record cũ hơn.
  • Rule 4: Hiển thị Lịch sử nhóm ở Context Detail
    • Cụm [Sắp tới]: Bất kỳ Task nào có deadline >= ngày hiện tại.
    • Cụm [Quá khứ]: Bất kỳ Task nào có deadline < ngày hiện tại HOẶC Task bị hủy. Cụm Quá khứ phải được Group/Group-by theo Tháng.
    • Cập nhật Hot-update: Nếu Edit đổi ngày sang tương lai, cục card Task tự động văng bay sang bucket [Sắp tới] và ngược lại.

4. Giao diện

  • [Xem các tệp đính kèm: Thêm_mới_task.png, Danh_sách_task.png, Xem_nhanh_task.png, Lịch_sử_task.png]
  • Theme/Component: Dùng UI components chuẩn (Card, Popover, DatePicker, Select Multiple) cho đồng nhất hệ sinh thái Adahub.

III. Yêu cầu phi chức năng

  • Khối render ghi chú ở Quick View có thể bị “nặng” nếu tích tụ timeline quá dài. Bắt buộc tích hợp Infinite Reverse Load (Virtual Scrolling) thay vì Fetch & Append thẳng vào DOM gây lag thiết bị mỏng.

IV. Dependency (liên quan & phụ thuộc)

  • Notification Service: Phụ thuộc vào con Core Queue/CronJob để bắn thông báo chuông (App) hay Push notification (Web) dựa vào trường “Thông báo trước X phút/ngày”. Tính toán delay cẩn thận tránh spam.
  • Global Search: Task lưu xong phải được re-index chuyển qua Redis/ElasticSearch để có thể gõ text tìm bám xuyên hệ thống.

V. API Contract (dev viết)

[TODO: Tech Lead bổ sung Schema POST Create Task, PATCH Update Task, POST Fetch Notes Reverse Page]


VI. Test case (BA hoặc tester viết)

  • TC1: Test trigger mặc định thời gian khi bấm mở form tạo mới. Kiểm thử có đúng là Time current + 60 mins và làm tròn giây luôn không.
  • TC2: Nhập các test data siêu dài vào Tên công việc và Mô tả xem Quick View có dãn layout hoặc gãy vỡ hay không.
  • TC3: Đổi deadline task từ tương lai về quá khứ ngay trên màn Lịch sử Liên hệ. Expectation: Card Task biến mất khỏi block Sắp tới và nhảy xuống block Quá khứ (Tháng X). Đổi tiếp về tương lai, nhảy ngược lên bảng.
  • TC4: Hover tooltip vào khối Liên kết lớn hơn 5 object xem content tooltip có hiện đúng giới hạn item/viewport không. Mở ra kéo đi kéo lại resize window trình duyệt không bị vỡ.