// 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');
});
