SLA & Escalation
Hệ thống SLA trong @nx/helpdesk theo dõi hai deadline cho mỗi ticket: thời gian first response và thời gian resolution. Khi ngưỡng bị vượt, các worker BullMQ tự động escalate và gửi thông báo.
Mức SLA Mặc định
| Priority | Code | Response | Resolution |
|---|---|---|---|
| Low | 100 | 24 giờ | 72 giờ |
| Normal | 200 | 8 giờ | 24 giờ |
| High | 300 | 4 giờ | 12 giờ |
| Urgent | 400 | 1 giờ | 4 giờ |
Data Model
SlaPolicy
| Cột | Type | Mô tả |
|---|---|---|
id | bigint | Snowflake ID |
name | jsonb | Tên policy (i18n: {en, vi}) |
priority | smallint | Mức priority (100/200/300/400) |
responseTimeMinutes | int | Thời gian response cho phép (phút) |
resolutionTimeMinutes | int | Thời gian resolution cho phép (phút) |
warningThresholdPercent | smallint | Ngưỡng cảnh báo (mặc định 75%) |
criticalThresholdPercent | smallint | Ngưỡng critical (mặc định 90%) |
escalationRules | jsonb[] | Định nghĩa rule auto-escalation |
businessHoursOnly | boolean | Chỉ đếm trong giờ làm việc |
isActive | boolean | Policy có đang hiệu lực không |
SlaTracker
Theo dõi tiến độ SLA cho mỗi ticket:
| Cột | Type | Mô tả |
|---|---|---|
ticketId | bigint | FK → Ticket |
slaPolicyId | bigint | FK → SlaPolicy |
responseDeadline | timestamp | Deadline response từ khi tạo ticket |
resolutionDeadline | timestamp | Deadline resolution |
firstResponseAt | timestamp | Mốc thời gian first response thực tế |
resolvedAt | timestamp | Mốc thời gian resolution thực tế |
firstResponseStatus / resolutionStatus | enum | OK / WARNING / BREACHED (SlaStatuses) |
warningTriggeredAt | timestamp | Khi cảnh báo được gửi |
breachTriggeredAt | timestamp | Khi vi phạm được ghi nhận |
SlaEscalation
Lịch sử các event escalation:
| Cột | Type | Mô tả |
|---|---|---|
ticketId | bigint | FK → Ticket |
level | smallint | Level escalation (1/2/3) |
reason | text | Lý do escalation |
escalatedAt | timestamp | Mốc thời gian escalation |
handledBy | bigint | Agent xử lý escalation |
Luồng Vi phạm SLA (End-to-End)
Tag SLA Tự Áp dụng
| Tag | Điều kiện | Mô tả |
|---|---|---|
SLA_BREACHED | Vượt 100% deadline | SLA bị vi phạm |
OVERDUE | Deadline đã qua | Quá deadline resolution |
CRITICAL_BREACH | Vượt 150% deadline | Vi phạm critical, kích hoạt tái phân công |
REST API
Chính sách SLA được phục vụ dưới /sla-policies (RestPaths.SLA) bởi SlaController — tham khảo endpoint đầy đủ render trực tiếp từ /v1/api/helpdesk/doc/openapi.json. Bảng endpoint cố ý không duy trì thủ công.
Use Case SLA
| Use Case | Mô tả |
|---|---|
CreateSlaPolicyUseCase | Tạo một chính sách SLA mới |
UpdateSlaPolicyUseCase | Cập nhật tham số SLA |
DeleteSlaPolicyUseCase | Gỡ một policy |
GetSlaPolicyByIdUseCase | Lấy chi tiết policy |
ListSlaPoliciesUseCase | Liệt kê tất cả policy |
InitializeSlaTrackerUseCase | Tạo tracker khi ticket được tạo |
MarkFirstResponseUseCase | Ghi nhận first response của agent |
MarkResolvedUseCase | Ghi nhận resolution ticket |
CalculateBatchSlaStatusUseCase | Tính status SLA theo batch |
BulkMarkSlaWarningUseCase | Áp dụng cờ cảnh báo hàng loạt |
BulkMarkSlaBreachedUseCase | Áp dụng cờ vi phạm hàng loạt |
TriggerSlaCheckUseCase | Trigger một kiểm tra thủ công |
ProcessEscalationUseCase | Xử lý một event escalation đơn lẻ |
RunSlaMonitorUseCase | Thực thi một lượt quét SLA monitor |
Workers
| Worker | Hàng đợi | Tần suất | Chức năng |
|---|---|---|---|
sla-monitor.worker | helpdesk.sla-monitor | Cron (1 phút) | Quét tracker đang gần hoặc quá deadline |
escalation.worker | helpdesk.escalation | Job delayed | Xử lý escalation Level 2 và Level 3 |
Tái phân công cho senior agent ở Level 2+ hiện bị tắt trong code (chỉ thông báo). Xem Vận hành → Vấn đề đã biết.
Đền bù (CompensationCalculatorService)
Khi xảy ra vi phạm SLA, đền bù được tính theo một ma trận:
| Tiêu chí | Mô tả |
|---|---|
| Tier khách hàng | VIP / PREMIUM / STANDARD |
| Priority ticket | LOW / NORMAL / HIGH / URGENT |
| Thời lượng vi phạm | Thời gian đã trôi qua deadline |
| Level escalation | Chỉ kích hoạt từ Level 2 trở lên |
Kết quả được lưu vào bảng Compensation để xử lý offline.