sync/workflow/2026-09-24-be-workflow-sla-overdue.md · Xem trên GitHub

SLA theo bước: slaHours/isBusinessHours, cờ isOverdue, cảnh báo sắp/đã quá hạn

Đã đóng normal feature
Module
workflow
Từ
BE
Người raise
ThaiThanhLuan
Ngày tạo
2026-09-24
Refs
WORKFLOW-005, WORKFLOW-006, IDENTITY-023
Bên nhận
FE appliedMobile n/a

Tóm tắt

Mỗi bước quy trình có thể khai báo SLA (số giờ xử lý tối đa). Task ở quá SLA của bước hiện tại được gắn cờ isOverdue: true (để board hiện "Quá hạn" và đếm "Z Quá hạn" theo bước), người phụ trách nhận cảnh báo trước khi hết hạn và thông báo khi đã quá hạn.

Chi tiết

  • POST /workflows/:id/steps nhận thêm slaHours?: number (số nguyên ≥ 1, bỏ trống = bước không có SLA) và isBusinessHours?: boolean (mặc định true = tính theo giờ làm việc của người phụ trách; false = giờ đồng hồ). Object WorkflowStep ở mọi response có thêm slaHours: number | null, isBusinessHours: boolean.
  • Object WorkflowTask ở mọi response có thêm isOverdue: boolean. Cờ được đặt bởi job kiểm tra SLA (mặc định mỗi 60 giây) và tự về false khi task chuyển bước.
  • Số đếm "Z Quá hạn" theo bước: FE tự đếm từ GET /workflows/:id/tasks (currentStepId + isOverdue), không có endpoint tổng hợp riêng.
  • Hạn xử lý được tính lúc task vào bước, từ lịch làm việc của người phụ trách tại thời điểm đó (snapshot) — sửa lịch làm việc sau đó không làm đổi hạn của task đang chạy. Không có người phụ trách → tính giờ đồng hồ.
  • Thông báo mới (entityType: "workflow_task", gửi bởi hệ thống, không có actor):
type actionCategory Người nhận Khi nào
workflow.task.sla_warning action_required người phụ trách đã dùng 80% SLA của bước (chưa quá hạn)
workflow.task.overdue action_required người phụ trách quá SLA của bước
workflow.task.overdue watching người tạo (nếu khác người phụ trách) như trên

Contract (trước → sau)

Trước Sau
Endpoint POST /workflows/:id/steps không đổi
Request { name } { name, slaHours?, isBusinessHours? }
Response WorkflowStep, WorkflowTask WorkflowStep + slaHours, isBusinessHours; WorkflowTask + isOverdue
Lỗi — 400 nếu slaHours không phải số nguyên ≥ 1

Việc bên nhận cần làm

  • FE: form thêm bước — thêm ô "SLA (giờ)" + lựa chọn "Tính theo giờ làm việc".
  • FE: board — hiện cờ "Quá hạn" trên thẻ task có isOverdue, và "Z Quá hạn" ở đầu cột theo từng bước.
  • FE: thêm slaHours/isBusinessHours vào type WorkflowStep, isOverdue vào type WorkflowTask.

Cách kiểm tra

Thêm bước với slaHours: 1, isBusinessHours: false, tạo task có người phụ trách ở bước đó → sau ~48 phút người phụ trách nhận workflow.task.sla_warning, sau ~1 giờ task có isOverdue: true và thông báo workflow.task.overdue.

Thảo luận

[BE] 2026-09-24 @ThaiThanhLuan — raised

Ngưỡng cảnh báo sớm 80% là giả định (tài liệu không định lượng) — cần sản phẩm xác nhận. Chưa có API sửa SLA của bước đã tạo (chưa có PATCH bước). Mobile n/a: mobile/ chưa có code.

[FE] 2026-09-24 @NinelXram — applied

Form thêm bước có "SLA (giờ)" + "Tính theo giờ làm việc", builder hiện SLA; board hiện "Quá hạn" trên thẻ, "Z quá hạn" đầu cột (đếm mọi nhiệm vụ của bước, không theo bộ lọc) và trong panel (WORKFLOW-FE-004, nhánh feat/WORKFLOW-FE-004-sla-overdue, commit f2fb360..c4085e8). Góp ý: AddWorkflowStepDto.slaHours chưa có @Max, nên số vượt Int sẽ thành lỗi 500. FE đang chặn ở 2147483647.