Cấu hình phê duyệt nhiều cấp + ngưỡng giá trị
Tài liệu này hướng dẫn admin doanh nghiệp thiết lập quy trình phê duyệt tự động cho 4 loại yêu cầu: mua hàng, thanh toán, phiếu nhận tiền, phiếu nhập kho. Không cần code — toàn bộ qua giao diện.
Engine phê duyệt của OpsOne hỗ trợ 4 năng lực chính giúp doanh nghiệp quy mô lớn kiểm soát chi tiêu mà vẫn nhanh:
- Ngưỡng giá trị — yêu cầu nhỏ duyệt 1 cấp, yêu cầu lớn yêu cầu cả giám đốc duyệt.
- Nhiều cấp tuần tự — qua bước 1 mới đến bước 2, v.v.
- SLA mỗi bước — đếm giờ chờ duyệt, tô màu cảnh báo khi sắp quá hạn.
- Vai trò hoặc người cụ thể — bước này dành cho "Kế toán trưởng" (vai trò) hoặc cho "Nguyễn Văn A" (người cụ thể).
1. Thuật ngữ cần biết
manager — SLA 24 giờ.>, >=, <, <=, =. Bỏ trống = luôn áp dụng.amount > 50000000 nghĩa là flow chỉ áp dụng cho yêu cầu trên 50 triệu.director → 3 phó giám đốc đều có thể duyệt. Hoặc chọn user = "Anh A" → chỉ anh A duyệt được.2. Truy cập module Phê duyệt
- Đăng nhập app.opsoneai.com bằng tài khoản admin.
- Sidebar bên trái → mục "📥 Phê duyệt" (trong nhóm "Vận hành").
- Trên thanh tab phía trên có 3 mục: 📥 Hộp thư · ⚙️ Cấu hình flow · 📊 Báo cáo.
- Chọn "⚙️ Cấu hình flow" để thiết lập flow mới.
3. Bốn loại yêu cầu hỗ trợ
| Loại | Khi nào tự kích hoạt flow | Trường được match điều kiện |
|---|---|---|
| 🛒 Yêu cầu mua hàng | Khi NV tạo phiếu YCMH trong module Mua hàng | amount = giá trị ước tính (đồng) |
| 💳 Đề nghị thanh toán | Khi NV tạo đề nghị chi tiền cho NCC | amount = số tiền đề nghị (đồng) |
| 🧾 Phiếu nhận tiền | Khi NV ghi nhận tiền khách thanh toán | amount = số tiền phiếu (đồng) |
| 📦 Phiếu nhập kho | Khi NV nhập kho hàng từ NCC | total_value = giá trị nhập kho |
amount dùng đơn vị đồng VN. Vd nhập 50000000 = 50 triệu.
4. Tạo flow đơn giản (1 cấp, không ngưỡng)
Trường hợp đơn giản nhất: mọi phiếu nhận tiền đều cần kế toán trưởng duyệt.
- Vào tab "⚙️ Cấu hình flow" → bấm "+ Tạo flow".
- Trong form:
- Loại yêu cầu: 🧾 Phiếu nhận tiền
- Tên: "Phiếu nhận tiền — duyệt bởi KTT"
- Độ ưu tiên: 0 (mặc định)
- Điều kiện áp dụng: chọn "(không)" → luôn áp dụng
- Mục "Các bước duyệt" đã có sẵn 1 bước. Sửa:
- Tên bước: "Kế toán trưởng duyệt"
- Loại người duyệt: Theo vai trò
- Vai trò: chọn "Kế toán trưởng" (hoặc role có trong list)
- SLA: 24 (giờ)
- Bấm "Lưu" → flow active ngay. Mọi phiếu nhận tiền tạo từ giờ sẽ vào hộp thư của KTT.
5. Flow theo ngưỡng giá trị
Đây là pattern quan trọng nhất với doanh nghiệp scale: giao dịch nhỏ duyệt nhanh, giao dịch lớn duyệt kỹ.
5.1. Cách hoạt động
Khi NV tạo yêu cầu, engine:
- Lấy tất cả flow active của loại yêu cầu đó.
- Sắp xếp theo
sort_ordergiảm dần. - Duyệt từ trên xuống, gặp flow đầu tiên có điều kiện khớp → áp dụng.
sort_order cao hơn flow ngưỡng thấp, nếu không yêu cầu lớn sẽ rơi vào flow nhỏ.
5.2. Ví dụ: 3 tầng cho Đề nghị thanh toán
amount <= 5000000 · sort_order = 1amount > 5000000 · sort_order = 2amount > 50000000 · sort_order = 3Yêu cầu 3 triệu khớp Flow A. Yêu cầu 20 triệu khớp Flow B (Flow C không khớp). Yêu cầu 80 triệu khớp Flow C (cả 3 đều khớp, sort_order cao nhất là 3 nên chọn C).
6. Flow nhiều cấp tuần tự
Trong cùng 1 flow, thêm nhiều bước. Engine xử lý tuần tự — qua bước 1 mới đến bước 2.
- Khi tạo/sửa flow, ở mục "Các bước duyệt", bấm "+ Thêm bước" để thêm bước mới.
- Điền tên, vai trò/user, SLA giống bước 1.
- Bước hiển thị theo thứ tự sẽ là thứ tự duyệt thực tế. Để đổi thứ tự, xoá rồi thêm lại (UI hiện chưa có drag-drop).
- Lưu flow.
6.1. Quy trình thực thi
- NV tạo yêu cầu → engine khớp flow → khởi tạo các bước với trạng thái
pending. - Bước 1 approver được notify (chuông + email + Zalo nếu đã cấu hình).
- Approver vào Hộp thư duyệt → bấm "Duyệt".
- Bước 1 chuyển sang
approved. Engine notify approver bước 2. - Cứ thế đến bước cuối. Khi bước cuối
approved→ yêu cầu hoàn tất.
rejected ngay. NV tạo yêu cầu được notify lý do.
7. SLA — thời hạn mỗi bước
Mỗi bước có SLA riêng tính bằng giờ. Engine ghi sla_due_at = thời điểm step pending + SLA giờ. Inbox hiển thị thời gian còn lại + phân loại màu:
| Trạng thái | Điều kiện | Hiệu ứng inbox |
|---|---|---|
| OK | Còn > 24h | Bình thường |
| Sắp tới hạn | Còn < 24h | Vàng cảnh báo |
| Khẩn | Còn < 4h | Cam đậm |
| Quá hạn | Đã qua deadline | Đỏ + filter "Quá hạn" có thể bật |
8. Hộp thư duyệt (Inbox)
- Của tôi (mine): các yêu cầu mà bạn là approver bước hiện tại + đang pending.
- Đã gửi (submitted): các yêu cầu do chính bạn tạo (tracker tiến độ).
- Tất cả (all): chỉ super admin tenant 1 thấy được — toàn bộ pending trong project.
8.1. Phím tắt
- J / K — chọn dòng kế tiếp / trước.
- A — duyệt yêu cầu đang chọn (mở modal confirm).
- R — từ chối (yêu cầu nhập lý do).
- Enter — mở chi tiết yêu cầu.
8.2. Bulk approve
Tick chọn nhiều yêu cầu cùng loại → bấm "Duyệt hàng loạt". Mỗi yêu cầu vẫn chạy qua engine riêng, có yêu cầu pass có yêu cầu fail (vd Sapo không match) — UI trả về danh sách kết quả từng item.
9. Yêu cầu bổ sung (Needs revision)
Thay vì reject cứng, approver có thể trả lại để NV bổ sung. Đỡ rejection rate, giảm phiền NV làm lại từ đầu.
- Approver bấm "↩ Yêu cầu bổ sung" (thay vì Duyệt/Từ chối).
- Nhập lý do cụ thể (bắt buộc, vd "Thiếu hoá đơn đầu vào").
- Yêu cầu chuyển trạng thái
needs_revision. NV tạo yêu cầu được notify. - NV sửa nội dung yêu cầu → bấm "Gửi lại". Engine reset về bước 1, các bước sau pending lại.
- Approver bước 1 lại được notify.
revision_logs. Báo cáo có thể đếm tỉ lệ bổ sung theo NV → đào tạo NV nào hay sai sót.
10. Ba tình huống thực tế
10.1. Tình huống: Doanh nghiệp 50 NV, kiểm soát chi tiêu
Bối cảnh: Cty TBBV bán cân điện tử, doanh thu ~700tr/tháng. Hiện admin (giám đốc) duyệt tay mọi đơn mua hàng — quá tải. Muốn delegate cho trưởng phòng nhưng vẫn kiểm soát đơn lớn.
Cấu hình:
- Flow A: YC mua hàng — không điều kiện, sort=1 — 1 bước: Trưởng phòng mua (24h)
- Flow B: YC mua hàng —
amount > 30000000, sort=2 — 2 bước: Trưởng phòng (24h) → Giám đốc (48h)
Kết quả: 80% đơn nhỏ (<30tr) trưởng phòng duyệt; 20% đơn lớn vẫn cần giám đốc. Giám đốc giảm 80% workload.
10.2. Tình huống: Chuỗi 4 cửa hàng (EduTrust)
Bối cảnh: Trung tâm tư vấn du học có 4 chi nhánh. Cần kiểm soát phiếu nhận tiền học phí: phiếu <10tr giáo viên báo lên kế toán xác nhận; phiếu lớn cần cả giám đốc duyệt.
Cấu hình:
- Flow A: Phiếu nhận tiền —
amount <= 10000000, sort=1 — 1 bước: Kế toán - Flow B: Phiếu nhận tiền —
amount > 10000000, sort=2 — 2 bước: Kế toán → Giám đốc
Kết quả: Phiếu nhỏ duyệt trong giờ. Phiếu lớn (đặt cọc khoá học >30tr) qua 2 cấp, có dấu vết audit đầy đủ.
10.3. Tình huống: Cấu hình sai sort_order
Triệu chứng: Tạo phiếu 80tr nhưng chỉ thấy kế toán duyệt, không có bước giám đốc.
Nguyên nhân: Flow B (ngưỡng 50tr, 2 bước) có sort_order = 1, bằng Flow A (luôn áp dụng, 1 bước). Engine sort theo sort_order desc rồi id asc → Flow A được chọn trước.
Cách sửa: Sửa Flow B → set sort_order = 2 (cao hơn A). Phiếu mới tạo từ đó sẽ vào đúng B.
11. Câu hỏi thường gặp
Tôi đã tạo flow nhưng phiếu mới vẫn duyệt bằng admin, không đi qua flow?
Có 3 nguyên nhân phổ biến:
- Flow không active (cờ
is_active = false). Vào sửa lại flow, bật active. - Điều kiện không khớp. Vd flow đặt
amount > 100000000nhưng phiếu 50tr. Sửa lại điều kiện. - Phiếu được tạo TRƯỚC khi flow được tạo. Engine chỉ áp dụng cho phiếu mới.
Tôi muốn 2 người trong cùng 1 bước cùng phải duyệt (chữ ký kép)?
Engine có hỗ trợ parallel mode (chế độ song song) với 2 lựa chọn: parallel_any (1 trong N duyệt là pass) và parallel_all (cả N phải duyệt). Hiện UI Cấu hình flow chưa expose toggle này — sẽ bổ sung ở phiên bản tiếp theo. Tạm thời nếu cần, liên hệ hỗ trợ để config qua DB.
Sửa flow đang chạy thì các phiếu pending có bị ảnh hưởng không?
Không. Khi engine khởi tạo các bước cho 1 phiếu, nó COPY các step vào bảng approval_steps riêng cho phiếu đó. Sau đó sửa flow chỉ ảnh hưởng phiếu mới. Đây là design để tránh "đổi luật giữa chừng" gây tranh cãi.
Quá SLA thì sao? Có tự reject không?
Hiện không. SLA chỉ là tín hiệu inbox (đổi màu cảnh báo). Approver vẫn duyệt được sau deadline. Roadmap có escalation: quá SLA bao giờ → tự eskal lên cấp cao hơn, hoặc gửi reminder lần 2/3.
Tôi (admin) có thể duyệt thay người khác không?
Mặc định không — engine check user phải khớp role/user của bước. Nếu muốn admin bypass, dùng delegation (uỷ quyền): trong phần Hồ sơ → Uỷ quyền duyệt → chọn người uỷ quyền + khoảng thời gian. User được uỷ quyền sẽ pass canApproveStep cho mọi bước thuộc người uỷ quyền gốc.
NV tạo phiếu sai amount, sửa lại thì flow có đổi không?
Phụ thuộc loại. Phiếu nhận tiền không cho sửa amount sau khi tạo (phải xoá + tạo lại). YC mua hàng có thể sửa nhưng flow đã khởi tạo sẽ không tự chuyển sang flow ngưỡng khác. Nếu sửa amount vượt ngưỡng mới → tạo lại phiếu hoặc liên hệ admin reset.
Tôi muốn báo cáo "phiếu nào đang ở bước nào, ai chưa duyệt"?
Vào tab "📊 Báo cáo" trong module Phê duyệt. Đang có: số phiếu pending theo loại, theo người duyệt, theo SLA bucket (ok/warning/overdue), throughput theo tuần. Báo cáo "approver throughput cá nhân" (ai duyệt nhanh/chậm) đang trên roadmap.
Phiếu nhận tiền — sau khi flow approve, Sapo + Hoá đơn điện tử có tự chạy không?
Có. Khi bước cuối của flow approve, engine gọi helper approvePaymentReceipt — helper này tự (1) cập nhật orders.paid_amount, (2) đẩy giao dịch lên Sapo (nếu có sapo_id), (3) gọi MISA/Viettel để phát hành hoá đơn điện tử (nếu config). Hoạt động giống như trước có flow — chỉ thêm phần duyệt nhiều cấp ở trước.
Cần em hỗ trợ thiết lập?
Liên hệ [email protected] để được demo 15 phút thiết lập flow cho doanh nghiệp anh/chị.
Mở module Phê duyệt Xem hướng dẫn khác