[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>
This commit is contained in:
pqhuy1987
2026-05-06 17:06:01 +07:00
parent bdd175c07b
commit 16c2c9c79e
17 changed files with 1231 additions and 0 deletions

View File

@ -0,0 +1,83 @@
// 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');
});