Files
solution-erp/docs/_user-guide/_gen-user-05.js
pqhuy1987 16c2c9c79e [CLAUDE] Docs: User Manual 7 file rewrite compact cho end-user
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>
2026-05-06 17:06:01 +07:00

84 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// User Manual 05 — Budget Ngân sách dự án
// 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 Ngân sách Dự án",
"Phần 05: Budget - Tạo Ngân sách + Hạng mục + Liên kết HĐ/PE",
),
h1("1. Ngân sách dự án là gì?"),
p("Module Ngân sách quản lý dự toán chi phí cho từng dự án. Mỗi dự án có thể có 1 hoặc nhiều ngân sách (theo năm hoặc theo hạng mục lớn)."),
bullet("HĐ + Phiếu PE có thể liên kết Ngân sách để theo dõi \"đã chi vs ngân sách\""),
bullet("Workflow đơn giản 3 bước: Đang soạn thảo → Chờ CCM → Chờ CEO → Đã duyệt"),
h1("2. Tạo ngân sách mới"),
num("Sidebar → \"Ngân sách\" → \"Tạo mới\""),
num("Hoặc URL /budgets/new"),
num("Điền Header: Tên ngân sách, Năm, Dự án, Phòng ban, Mô tả"),
num("Click \"Lưu nháp\""),
note("Mã ngân sách format NS-{Năm tháng}-{số thứ tự} — tự gen."),
h1("3. Thêm hạng mục ngân sách"),
num("Mở ngân sách → section \"Hạng mục\""),
num("Click \"Thêm hạng mục\""),
num("Nhập: Mã nhóm / Tên nhóm / Mã hạng mục / Nội dung / Đơ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("Tổng ngân sách tự tổng hợp ở Header"),
num("Click \"Lưu\""),
tip("Mã nhóm + Mã hạng mục dùng để match với chi tiết HĐ/PE khi đối chiếu \"đã chi vs ngân sách\"."),
h1("4. Sửa hạng mục"),
num("Mở ngân sách ở phase Đang soạn thảo"),
num("Click vào ô cần sửa → inline edit"),
num("Click ngoài để lưu (auto-save)"),
warn("Sau khi trình duyệt, ngân sách bị khóa edit. Phải reject về Đang soạn thảo mới sửa được."),
h1("5. Trình duyệt ngân sách"),
num("Mở ngân sách ở phase Đang soạn thảo"),
num("Panel Quy trình bên phải → click \"Trình → Chờ CCM\""),
num("CCM duyệt → \"Chờ CEO\""),
num("CEO duyệt → \"Đã duyệt\""),
note("Workflow Budget cũng có duyệt 2-cấp phòng ban (NV Review → TPB Confirm) — xem Phần 03."),
h1("6. Liên kết HĐ / Phiếu PE với ngân sách"),
p("Khi tạo HĐ hoặc Phiếu PE, chọn ngân sách trong ô \"Liên kết Ngân sách\":"),
num("Tạo HĐ mới → form Header có dropdown \"Ngân sách\""),
num("Filter chỉ hiện ngân sách: Phase = Đã duyệt + cùng Dự án"),
num("Chọn ngân sách → HĐ liên kết với ngân sách đó"),
h1("7. Cột \"So với ngân sách\" trong Phiếu PE"),
p("Khi PE có liên kết ngân sách, bảng Hạng mục có thêm cột \"NS link · Δ\":"),
bullet("Match dòng PE với ngân sách qua key \"Mã nhóm | Mã hạng mục\""),
bullet("Hiển thị Đơn giá ngân sách + Δ chênh lệch"),
bullet("Δ < 0 (xanh) — báo giá NCC dưới ngân sách (tốt)"),
bullet("Δ > 0 (đỏ) — báo giá vượt ngân sách (cảnh báo)"),
bullet("Δ = 0 (xám) — khớp ngân sách"),
h1("8. Xem changelog ngân sách"),
num("Mở ngân sách → Panel phải → section \"Lịch sử thay đổi\""),
p("Ghi nhận: ai sửa, sửa gì (Header / hạng mục / phase transition), thời gian."),
h1("9. Xóa ngân sách nháp"),
num("Mở ngân sách ở phase Đang soạn thảo / Từ chối"),
num("Click icon thùng rác ở Header"),
num("Xác nhận \"Xóa\""),
warn("Chỉ xóa được ngân sách ở phase Đang soạn thảo / Từ chối. Đã duyệt KHÔNG xóa được."),
];
const doc = buildDoc(
"User Manual - 05 Ngân sách",
"SOLUTION_ERP - User Manual - 05 Budget Ngân sách",
children,
);
const outPath = path.join(__dirname, 'user', '05-Budget-Ngan-sach.docx');
Packer.toBuffer(doc).then(buf => {
fs.writeFileSync(outPath, buf);
console.log('✅ Generated:', outPath);
console.log(' Size:', (buf.length / 1024).toFixed(1) + ' KB');
});