// User Manual 03 — Duyệt Workflow (9 phase + 2-stage approval + smart reject) // Style: end-user friendly — các bước duyệt cơ bản. const fs = require('fs'); const path = require('path'); const H = require('./_helpers'); const { h1, h2, h3, p, bullet, num, note, warn, tip, titlePage, buildDoc, Packer } = H; const children = [ ...titlePage( "Hướng dẫn Duyệt Workflow", "Phần 03: 9 phase HĐ + 2-cấp duyệt phòng ban + Từ chối/Trình lại", ), h1("1. 9 phase quy trình"), num("Đang chọn — chưa khởi tạo"), num("Đang soạn thảo — Drafter đang soạn"), num("Đang góp ý — các phòng ban góp ý song song"), num("Đang đàm phán — đàm phán với NCC/NTP"), num("Đang in ký — in nháp, ký nháp"), num("Đang kiểm tra CCM — CCM kiểm tra (skip với HĐ Bypass)"), num("Đang trình ký — BOD trình ký"), num("Đang đóng dấu — HRA đóng dấu (mã HĐ tự gen)"), num("Đã phát hành — HĐ phát hành chính thức"), bullet("Từ chối — bị reject, Drafter có thể sửa và trình lại"), h1("2. Inbox - HĐ chờ tôi duyệt"), num("Mở /inbox hoặc Sidebar → \"Hộp thư\""), num("Panel trái: danh sách HĐ chờ vai trò bạn duyệt"), num("Click 1 HĐ → Panel giữa hiện chi tiết, Panel phải hiện Quy trình"), h1("3. Duyệt 1 HĐ"), num("Mở HĐ trong Inbox"), num("Đọc kỹ: Header / Chi tiết / Đính kèm / Bình luận"), num("Panel Quy trình bên phải → click nút \"Trình → [phase tiếp theo]\""), num("(Tùy chọn) Nhập ghi chú duyệt"), num("Click \"Xác nhận\""), p("HĐ chuyển sang phase mới, Drafter + role kế tiếp nhận notification."), h1("4. Duyệt 2-cấp phòng ban (mới)"), p("Khi vai trò bạn thuộc phòng ban (ví dụ NV.PRO), quy trình duyệt 2 cấp:"), num("Bạn (NV) duyệt → ghi nhận \"Review\" — phase CHƯA chuyển"), num("Trưởng phòng cùng dept (TPB) duyệt → ghi nhận \"Confirm\" — phase chuyển"), p("Panel Quy trình hiển thị section \"Tiến trình duyệt 2-cấp phòng ban\":"), bullet("Review NV — ai đã review + thời gian + ghi chú"), bullet("Confirm TPB — chờ TPB confirm (highlight vàng)"), note("Admin có thể bật \"Bypass\" cho 1 NV cụ thể — NV được Confirm trực tiếp, skip Review."), h1("5. Từ chối (Reject)"), num("Mở HĐ trong Inbox"), num("Panel Quy trình → click nút \"Trình → Từ chối\""), num("Nhập lý do từ chối (bắt buộc)"), num("Click \"Xác nhận\""), p("HĐ tự động về phase Đang soạn thảo. Drafter sửa rồi trình lại."), h1("6. Trình lại sau khi sửa (Resume)"), num("Drafter mở HĐ ở Đang soạn thảo (sau reject)"), num("Sửa Header / Chi tiết theo góp ý"), num("Panel Quy trình → click \"Trình → [phase tiếp theo]\""), num("Click \"Xác nhận\""), note("Hệ thống tự nhảy về phase đã reject (không cần đi lại từ đầu)."), h1("7. Comment / Góp ý"), num("Mở HĐ → tab \"Bình luận\""), num("Nhập nội dung"), num("Click \"Gửi\""), p("Comment KHÔNG ảnh hưởng phase — chỉ thông tin cho team."), h1("8. SLA - Hạn xử lý"), bullet("Mỗi phase có SLA mặc định (1-7 ngày tùy phase)"), bullet("Khi sắp hết hạn (còn 20%), Drafter nhận notification cảnh báo"), bullet("Hết hạn → hệ thống tự auto-approve (qua phase tiếp theo)"), tip("Inbox có badge đỏ \"Quá hạn\" để ưu tiên xử lý."), h1("9. Lịch sử duyệt"), num("Mở HĐ → Panel phải → cuộn xuống section \"Lịch sử duyệt\""), p("Hiển thị từng lần chuyển phase: ai duyệt, từ phase nào → phase nào, ghi chú, thời gian."), h1("10. Quy tắc đặc biệt"), bullet("Admin có quyền duyệt mọi phase (skip role check + 2-stage)"), bullet("HĐ Dịch vụ / Mua bán / Nguyên tắc bypass phase Kiểm tra CCM"), bullet("Sau Đang đóng dấu, HĐ KHÔNG sửa được nữa — chỉ xem"), ]; const doc = buildDoc( "User Manual - 03 Duyệt Workflow", "SOLUTION_ERP - User Manual - 03 Duyệt Workflow", children, ); const outPath = path.join(__dirname, 'user', '03-Duyet-Workflow.docx'); Packer.toBuffer(doc).then(buf => { fs.writeFileSync(outPath, buf); console.log('✅ Generated:', outPath); console.log(' Size:', (buf.length / 1024).toFixed(1) + ' KB'); });