User feedback: "ko cần quá đầy đủ chi tiết, cho end-user họ làm". Rewrite 7 generator scripts theo style end-user friendly: - Bỏ field validation table 5 cột (Tên field / Kiểu / Bắt buộc / Validation / Ví dụ) - Bỏ error troubleshoot table 3 cột (Lỗi / Nguyên nhân / Cách xử lý) - Bỏ FAQ chi tiết 8 câu (giữ 1 chương "Khi gặp lỗi" 4-5 bullet) - Bỏ phím tắt table - Giữ: tổng quan ngắn, numbered steps đơn giản, note/warn/tip chỉ khi critical 7 file generator (đã refactor dùng _helpers.js shared): - _gen-user-01: Bắt đầu (login + đổi pwd + hồ sơ + dashboard + sidebar + chuông) - _gen-user-02: Hợp đồng (7 loại + tạo + sửa + xóa + đính kèm + comment) - _gen-user-03: Duyệt Workflow (9 phase + 2-stage NV/TPB + reject + resume) - _gen-user-04: Phiếu Duyệt NCC (PE) (A/B + matrix báo giá + winner + 4PB + tạo HĐ) - _gen-user-05: Ngân sách (tạo + hạng mục + WF 3-step + liên kết HĐ/PE) - _gen-user-06: Cheatsheet 7 loại HĐ (mỗi loại 1 page: use case + field + format mã) - _gen-admin-02: Quản lý Users-Roles (tạo + role + reset + lock + bypass review S9) Setup: package.json + npm install docx@9.5.0 + script "gen:all". Output sizes: - 01: 12.1 KB (cũ 21.7 KB → giảm ~44%) - 02: 12.4 KB - 03: 12.2 KB - 04: 12.4 KB - 05: 12.0 KB - 06: 12.8 KB - admin-02: 12.7 KB - Tổng ~86 KB cho 7 file đầy đủ chức năng cốt lõi. Note: ContractType label "Phương án" → "Giải pháp" (đã rebrand session 3). 2-stage dept approval mention ở Phần 03 + admin-02 (Migration 16 Session 8/9). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
97 lines
4.6 KiB
JavaScript
97 lines
4.6 KiB
JavaScript
// User Manual 02 — Hợp đồng (Tạo + Sửa + 7 loại + Xóa)
|
||
// Style: end-user friendly — các bước đơn giả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 Hợp đồng",
|
||
"Phần 02: 7 loại HĐ - Tạo, Sửa, Xóa",
|
||
),
|
||
|
||
h1("1. 7 loại hợp đồng"),
|
||
bullet("HĐ Thầu phụ (HĐTP) — thuê NTP xây thô / hoàn thiện"),
|
||
bullet("HĐ Giao khoán (HĐGK) — khoán công việc cho tổ đội"),
|
||
bullet("HĐ NCC — mua vật tư, thiết bị từ NCC"),
|
||
bullet("HĐ Dịch vụ (HĐDV) — thuê tư vấn, kiểm định, vệ sinh"),
|
||
bullet("HĐ Mua bán (HĐMB) — mua bán thiết bị, vật phẩm"),
|
||
bullet("HĐ Nguyên tắc NCC — khung nguyên tắc lâu dài với NCC"),
|
||
bullet("HĐ Nguyên tắc DV — khung nguyên tắc dịch vụ lâu dài"),
|
||
note("Tham khảo Phần 06 để biết field đặc thù mỗi loại."),
|
||
|
||
h1("2. Inbox vs Hợp đồng của tôi"),
|
||
bullet("Inbox (/inbox) — HĐ đang chờ vai trò bạn duyệt"),
|
||
bullet("Hợp đồng của tôi (/my-contracts) — HĐ bạn là Drafter (mọi phase)"),
|
||
tip("Filter theo loại: thêm ?type=N (1-7) vào URL hoặc dùng menu Sidebar."),
|
||
|
||
h1("3. Tạo HĐ mới"),
|
||
num("Sidebar → Hợp đồng → chọn loại HĐ → Tạo mới"),
|
||
num("Hoặc URL trực tiếp /contracts/new?type=N (N = 1-7)"),
|
||
num("Điền Header: Tên HĐ, NCC/NTP, Dự án, Phòng ban chủ trì, Giá trị, Ngày dự kiến"),
|
||
num("(Tùy chọn) Liên kết Ngân sách dự án"),
|
||
num("Click \"Lưu nháp\" → hệ thống tạo HĐ ở phase Đang soạn thảo"),
|
||
note("Mã HĐ chưa gen ngay — sẽ tự gen khi chuyển sang phase Đang đóng dấu."),
|
||
|
||
h1("4. Thêm chi tiết HĐ"),
|
||
p("Sau khi tạo nháp, mở HĐ → tab \"Chi tiết\" để nhập hạng mục cụ thể."),
|
||
num("Mở HĐ → tab \"Chi tiết\""),
|
||
num("Click \"Thêm hạng mục\""),
|
||
num("Nhập Mã / Tên hạng mục / Đơn vị / Khối lượng / Đơn giá"),
|
||
num("Hệ thống tự tính Thành tiền = Khối lượng × Đơn giá"),
|
||
num("Click \"Lưu\""),
|
||
tip("Lặp lại để thêm nhiều hạng mục. Tổng giá trị HĐ tự tổng hợp."),
|
||
|
||
h1("5. Sửa HĐ nháp"),
|
||
num("Mở HĐ ở phase Đang soạn thảo"),
|
||
num("Click \"Sửa\" ở Header hoặc inline edit từng hạng mục"),
|
||
num("Click \"Lưu\""),
|
||
warn("Sau khi trình duyệt (Phase ≠ Đang soạn thảo), HĐ bị khóa edit. Phải reject về Đang soạn thảo mới sửa được."),
|
||
|
||
h1("6. Trình duyệt HĐ"),
|
||
num("Mở HĐ ở phase Đang soạn thảo"),
|
||
num("Panel Quy trình bên phải → click \"Trình → Đang góp ý\""),
|
||
num("(Tùy chọn) Nhập ghi chú"),
|
||
num("Click \"Xác nhận\""),
|
||
p("HĐ chuyển sang phase tiếp theo, người duyệt nhận notification."),
|
||
p("Chi tiết quy trình duyệt 9 phase: xem Phần 03 - Duyệt Workflow."),
|
||
|
||
h1("7. Đính kèm file"),
|
||
num("Mở HĐ → tab \"Đính kèm\" hoặc kéo thả file vào khu vực dropzone"),
|
||
num("Chọn loại file: Báo giá / Yêu cầu KT / Phiếu duyệt / ..."),
|
||
num("File upload xong, hiển thị trong danh sách"),
|
||
num("Click tên file để tải về"),
|
||
|
||
h1("8. Comment / Góp ý"),
|
||
num("Mở HĐ → tab \"Bình luận\""),
|
||
num("Nhập nội dung góp ý vào khung text"),
|
||
num("Click \"Gửi\""),
|
||
note("Drafter + role đã comment trước nhận notification realtime."),
|
||
|
||
h1("9. Xóa HĐ nháp"),
|
||
num("Mở HĐ ở phase Đang soạn thảo / Từ chối"),
|
||
num("Click icon \"Xóa\" (thùng rác) ở Header"),
|
||
num("Xác nhận \"Xóa\""),
|
||
warn("Chỉ xóa được HĐ ở phase Đang soạn thảo hoặc Từ chối. HĐ đã trình duyệt KHÔNG xóa được."),
|
||
|
||
h1("10. Tìm + Filter"),
|
||
bullet("Search box: tìm theo Mã HĐ / Tên / NCC"),
|
||
bullet("Filter Phase: dropdown 9 phase + Từ chối"),
|
||
bullet("Filter NCC / Dự án: dropdown"),
|
||
bullet("Filter SLA: chỉ hiện HĐ sắp đến hạn / quá hạn"),
|
||
tip("URL có thể bookmark, vd /my-contracts?type=5&phase=2 = HĐ Mua bán phase Đang soạn thảo."),
|
||
];
|
||
|
||
const doc = buildDoc(
|
||
"User Manual - 02 Hợp đồng",
|
||
"SOLUTION_ERP - User Manual - 02 Hợp đồng",
|
||
children,
|
||
);
|
||
|
||
const outPath = path.join(__dirname, 'user', '02-Hop-dong.docx');
|
||
Packer.toBuffer(doc).then(buf => {
|
||
fs.writeFileSync(outPath, buf);
|
||
console.log('✅ Generated:', outPath);
|
||
console.log(' Size:', (buf.length / 1024).toFixed(1) + ' KB');
|
||
});
|