// User Manual 06 — Cheatsheet 7 loại HĐ (mỗi loại 1 page tóm gọn) // Style: end-user friendly — chỉ thông tin cốt lõi để Drafter biết khi nào dùng loại nào. const fs = require('fs'); const path = require('path'); const H = require('./_helpers'); const { h1, h2, p, bullet, num, note, tip, titlePage, buildDoc, Packer } = H; const cheatsheet = (info) => { const out = [ h1(info.title), p("Khi nào dùng: " + info.use), ]; if (info.bypass !== undefined) { out.push(p("Bypass CCM: " + (info.bypass ? "Có (skip phase Kiểm tra CCM)" : "Không (đầy đủ 9 phase)"))); } out.push(h2("Field đặc thù khi tạo")); for (const f of info.fields) out.push(bullet(f)); out.push(h2("Mã HĐ format")); out.push(p(info.codeFormat)); if (info.tips) { out.push(h2("Lưu ý")); for (const t of info.tips) out.push(bullet(t)); } return out; }; const children = [ ...titlePage( "Cheatsheet 7 loại Hợp đồng", "Phần 06: Khi nào dùng loại nào + Field đặc thù mỗi loại", ), h1("Tóm tắt - Bảng phân loại nhanh"), bullet("HĐ Thầu phụ (HĐTP) — thuê NTP làm việc cho dự án xây dựng (xây thô, hoàn thiện, MEP)"), bullet("HĐ Giao khoán (HĐGK) — khoán việc cho tổ đội nhỏ (theo công nhật, theo m²)"), bullet("HĐ NCC — mua vật tư / thiết bị 1 lần từ NCC (cụ thể đầu việc)"), bullet("HĐ Dịch vụ (HĐDV) — thuê tư vấn / kiểm định / vệ sinh / dịch vụ phụ trợ"), bullet("HĐ Mua bán (HĐMB) — mua bán thiết bị / hàng hóa (không phải vật tư xây dựng)"), bullet("HĐ Nguyên tắc NCC — khung hợp tác lâu dài với NCC, cụ thể từng đợt qua phiếu yêu cầu"), bullet("HĐ Nguyên tắc DV — khung dịch vụ lâu dài (vd hợp đồng vệ sinh năm)"), tip("Nếu phân vân, hỏi P.CCM hoặc P.Mua hàng để chốt loại."), ...cheatsheet({ title: "1. HĐ Thầu phụ (HĐTP) — Type 1", use: "Thuê nhà thầu phụ (NTP) thực hiện gói thầu xây dựng cho 1 dự án cụ thể.", bypass: false, fields: [ "NCC/NTP: chọn từ danh sách nhà thầu phụ (Master)", "Dự án: chọn dự án áp dụng", "Hạng mục: liệt kê đầy đủ công việc + khối lượng + đơn giá", "Thanh toán: tỷ lệ tạm ứng / thanh toán theo tiến độ / quyết toán / bảo hành", "Bảo hành: thời gian bảo hành sau quyết toán", ], codeFormat: "{Mã DA}/HĐTP/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", tips: [ "Đầy đủ 9 phase, có duyệt CCM", "Mỗi NTP chỉ 1 HĐTP active per dự án (chia nhiều đợt qua Hạng mục)", ], }), ...cheatsheet({ title: "2. HĐ Giao khoán (HĐGK) — Type 2", use: "Khoán việc cho tổ đội nhỏ (10-50 người) làm phần việc cụ thể trong dự án.", bypass: false, fields: [ "Tổ đội: chọn tổ trưởng + tên tổ (Master)", "Dự án + Phạm vi công việc", "Khối lượng giao khoán: theo m², công nhật, hoặc trọn gói", "Đơn giá khoán: per đơn vị", "Thời hạn hoàn thành", ], codeFormat: "{Mã DA}/HĐGK/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", }), ...cheatsheet({ title: "3. HĐ NCC — Type 3", use: "Mua vật tư / thiết bị 1 lần từ NCC cho 1 dự án (vd mua thép, xi măng, thang máy).", bypass: false, fields: [ "NCC: chọn từ Master", "Dự án", "Hạng mục: vật tư + quy cách + khối lượng + đơn giá", "Giao hàng: địa điểm + thời gian + điều kiện", "Thanh toán: tỷ lệ tạm ứng + còn lại sau giao hàng", ], codeFormat: "{Mã DA}/NCC/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", tips: [ "Trước khi tạo HĐ NCC, NÊN tạo Phiếu Duyệt NCC (PE) để so sánh giá nhiều NCC", "Sau khi PE Đã duyệt, click \"Tạo HĐ từ phiếu\" → tự sinh HĐ NCC nháp", ], }), ...cheatsheet({ title: "4. HĐ Dịch vụ (HĐDV) — Type 4", use: "Thuê dịch vụ tư vấn, kiểm định, thí nghiệm, vệ sinh, an ninh cho 1 dự án.", bypass: true, fields: [ "NCC dịch vụ", "Dự án", "Phạm vi dịch vụ: liệt kê công việc tư vấn / kiểm định / ...", "Phí dịch vụ: trọn gói hoặc theo giờ / theo lần", "Sản phẩm bàn giao: báo cáo / chứng nhận / ...", ], codeFormat: "{Mã DA}/HĐDV/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", }), ...cheatsheet({ title: "5. HĐ Mua bán (HĐMB) — Type 5", use: "Mua bán thiết bị / hàng hóa không thuộc nhóm vật tư xây dựng (vd máy tính văn phòng).", bypass: true, fields: [ "NCC bán hàng", "Dự án (nếu có) hoặc Phòng ban đặt mua", "Hạng mục hàng hóa: tên / model / số lượng / đơn giá", "Bảo hành nhà sản xuất + bảo hành NCC", "Phương thức giao hàng + thanh toán", ], codeFormat: "{Mã DA}/MB/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", }), ...cheatsheet({ title: "6. HĐ Nguyên tắc NCC — Type 6", use: "Khung hợp tác lâu dài với 1 NCC (vd hợp đồng nguyên tắc cung cấp xi măng cả năm).", bypass: true, fields: [ "NCC + Phạm vi sản phẩm", "Đơn giá khung (có thể điều chỉnh theo CPI / thị trường)", "Thời hạn HĐ nguyên tắc (thường 1 năm)", "Điều kiện chung: thanh toán / giao hàng / phạt", ], codeFormat: "{Năm 4 chữ số}/NCC/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", tips: [ "Mã HĐ theo NĂM (không theo dự án) — vì áp dụng cho nhiều dự án", "Mỗi đợt mua thực tế tạo Phiếu yêu cầu vật tư (chưa có module — manual)", ], }), ...cheatsheet({ title: "7. HĐ Nguyên tắc DV — Type 7", use: "Khung dịch vụ lâu dài (vd hợp đồng vệ sinh hàng năm cho mọi dự án).", bypass: true, fields: [ "NCC dịch vụ + Phạm vi dịch vụ", "Phí dịch vụ khung", "Thời hạn HĐ nguyên tắc (thường 1 năm)", "Điều kiện chung", ], codeFormat: "{Năm 4 chữ số}/HĐDV/SOL&{Mã NCC}/{số thứ tự 2 chữ số}", }), h1("Mẹo chung khi tạo HĐ"), bullet("Chọn đúng loại ngay từ đầu — không chuyển loại sau khi tạo (phải xóa + tạo lại)"), bullet("Liên kết Ngân sách dự án nếu có — để theo dõi \"đã chi vs ngân sách\""), bullet("Đính kèm đầy đủ: báo giá, biên bản đàm phán, phụ lục"), bullet("Mã HĐ KHÔNG gen ngay — chỉ gen khi chuyển sang phase \"Đang đóng dấu\""), ]; const doc = buildDoc( "User Manual - 06 Cheatsheet 7 loại HĐ", "SOLUTION_ERP - User Manual - 06 Cheatsheet 7 loại HĐ", children, ); const outPath = path.join(__dirname, 'user', '06-7-Loai-HD-Cheatsheet.docx'); Packer.toBuffer(doc).then(buf => { fs.writeFileSync(outPath, buf); console.log('✅ Generated:', outPath); console.log(' Size:', (buf.length / 1024).toFixed(1) + ' KB'); });