# -*- coding: utf-8 -*-
"""
Generate comprehensive ERP survey analysis DOCX report
"""
import os
from docx import Document
from docx.shared import Inches, Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.enum.section import WD_ORIENT
from docx.oxml.ns import qn
from docx.oxml import OxmlElement

doc = Document()

# ---- Styles ----
style = doc.styles['Normal']
font = style.font
font.name = 'Times New Roman'
font.size = Pt(12)
style.paragraph_format.space_after = Pt(6)

style = doc.styles['Heading 1']
font = style.font
font.name = 'Times New Roman'
font.size = Pt(20)
font.bold = True
font.color.rgb = RGBColor(0, 51, 102)

style = doc.styles['Heading 2']
font = style.font
font.name = 'Times New Roman'
font.size = Pt(16)
font.bold = True
font.color.rgb = RGBColor(0, 70, 127)

style = doc.styles['Heading 3']
font = style.font
font.name = 'Times New Roman'
font.size = Pt(14)
font.bold = True
font.color.rgb = RGBColor(0, 90, 150)

def add_flow_box(doc, steps, title=""):
    """Add a text-based workflow flow diagram"""
    p = doc.add_paragraph()
    p.paragraph_format.space_before = Pt(6)
    p.paragraph_format.space_after = Pt(6)
    if title:
        run = p.add_run(f"📋 {title}\n")
        run.bold = True
        run.font.size = Pt(11)
        run.font.color.rgb = RGBColor(0, 51, 102)
    # Draw steps as a chain
    for i, step in enumerate(steps):
        run = p.add_run(f"  [{i+1}] {step}")
        run.font.size = Pt(10)
        if i < len(steps) - 1:
            p.add_run("\n       ⬇\n")
        else:
            p.add_run("\n")

def add_pain_item(doc, pain):
    """Add a pain point bullet"""
    p = doc.add_paragraph(style='List Bullet')
    p.text = pain

def set_cell_shading(cell, color):
    """Set cell background color"""
    tcPr = cell._tc.get_or_add_tcPr()
    shading = OxmlElement('w:shd')
    shading.set(qn('w:fill'), color)
    shading.set(qn('w:val'), 'clear')
    tcPr.append(shading)

# ================= TITLE PAGE =================
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.space_before = Pt(120)
run = p.add_run("BÁO CÁO PHÂN TÍCH NGHIỆP VỤ\nKHẢO SÁT ERP - BTCHEM")
run.bold = True
run.font.size = Pt(26)
run.font.color.rgb = RGBColor(0, 51, 102)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.space_before = Pt(30)
run = p.add_run("SƠ ĐỒ QUY TRÌNH CÔNG VIỆC & ĐIỂM ĐAU\nCÁC PHÒNG BAN")
run.font.size = Pt(16)
run.font.color.rgb = RGBColor(80, 80, 80)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
p.space_before = Pt(60)
run = p.add_run("Dự án: Xây dựng Phần mềm Quản lý Nội bộ Mới (ERP - Microsoft Dynamics 365 Business Central)\nNgày: 07/07/2026\nĐối tác triển khai: FPT Information System")
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(100, 100, 100)

doc.add_page_break()

# ================= MỤC LỤC =================
doc.add_heading('MỤC LỤC', level=1)
toc_items = [
    "I. TỔNG QUAN DỰ ÁN & DOANH NGHIỆP",
    "II. SƠ ĐỒ QUY TRÌNH CÔNG VIỆC & ĐIỂM ĐAU THEO PHÒNG BAN",
    "  1. Phòng Kinh Doanh (PKD) - Bán hàng (Quote to Cash)",
    "  2. Phòng Vật Tư (PVT) - Mua hàng (Procure to Pay)",
    "  3. Kho Thành Phẩm (KTP) - Kho & Tồn kho",
    "  4. Phòng Kế Toán (KT) - Tài chính Kế toán",
    "  5. Phòng Kỹ Thuật (PKT) - Hỗ trợ kỹ thuật & Chất lượng",
    "  6. Phòng R&D - Nghiên cứu & Phát triển",
    "  7. QC1 - Kiểm soát chất lượng (Sơn nước & Dung môi)",
    "  8. QC2 - Kiểm soát chất lượng (Dầu bóng & Khác)",
    "  9. Xưởng Sơn Nước (XSN) - Sản xuất Sơn gốc nước",
    "  10. Xưởng Dung Môi (XDM) - Sản xuất Dung môi",
    "  11. Xưởng Dầu Bóng (XDB) - Sản xuất Dầu bóng/UV",
    "  12. Xưởng Màu (XM) - Pha màu",
    "III. BẢNG TỔNG HỢP ĐIỂM ĐAU CHÍNH (Toàn Công ty)",
    "IV. CHÚ GIẢI THUẬT NGỮ CHUYÊN MÔN & VIẾT TẮT",
]

for item in toc_items:
    p = doc.add_paragraph(item)
    p.paragraph_format.space_after = Pt(2)
    p.runs[0].font.size = Pt(11)

doc.add_page_break()

# ================= I. TỔNG QUAN =================
doc.add_heading('I. TỔNG QUAN DỰ ÁN & DOANH NGHIỆP', level=1)

doc.add_paragraph("Công ty BTCHEM là doanh nghiệp sản xuất sơn và hóa chất (sơn gỗ, sơn nước, dung môi, dầu bóng UV/NC/PU) với quy mô vừa và lớn. Hiện tại công ty đang sử dụng phần mềm FAST cho kế toán và quản lý bán hàng cơ bản, kết hợp với Excel và Base (quy trình KPH).")

doc.add_paragraph("Dự án ERP mới (Microsoft Dynamics 365 Business Central - BC) do FPT triển khai nhằm số hóa toàn bộ quy trình: Bán hàng → Mua hàng → Sản xuất → Kho → Chất lượng → Kế toán → Báo cáo quản trị.")

p = doc.add_paragraph()
run = p.add_run("Các phòng ban tham gia khảo sát:")
run.bold = True

depts_list = [
    "1. Phòng Kinh Doanh (PKD)",
    "2. Phòng Vật Tư (PVT)",
    "3. Kho Thành Phẩm (KTP)",
    "4. Phòng Kế Toán (KT)",
    "5. Phòng Kỹ Thuật (PKT)",
    "6. Phòng R&D",
    "7. QC1 (Sơn nước & Dung môi)",
    "8. QC2 (Dầu bóng & khác)",
    "9. Xưởng Sơn Nước (XSN)",
    "10. Xưởng Dung Môi (XDM)",
    "11. Xưởng Dầu Bóng (XDB)",
    "12. Xưởng Màu (XM)",
]
for d in depts_list:
    doc.add_paragraph(d, style='List Number')

p = doc.add_paragraph()
run = p.add_run("\nHệ thống hiện tại: ")
run.bold = True
p.add_run("FAST (kế toán + bán hàng cơ bản) + Excel (KHSX, BOM, tồn kho) + Base (KPH, workflow phê duyệt) + Giấy tờ in ấn thủ công.")

p = doc.add_paragraph()
run = p.add_run("Mục tiêu ERP mới: ")
run.bold = True
p.add_run("Hợp nhất tất cả quy trình trên một nền tảng duy nhất (BC), tự động hóa MRP, QC, truy xuất nguồn gốc, báo cáo BI real-time, dashboard theo vai trò.")

doc.add_page_break()

# ================= II. QUY TRÌNH TỪNG PHÒNG BAN =================
doc.add_heading('II. SƠ ĐỒ QUY TRÌNH CÔNG VIỆC & ĐIỂM ĐAU THEO PHÒNG BAN', level=1)

# ----- 1. PKD -----
doc.add_heading('1. PHÒNG KINH DOANH (PKD) — BÁN HÀNG (QUOTE TO CASH)', level=2)

doc.add_heading('1.1. Các quy trình chính', level=3)

doc.add_heading('A. Quy trình Báo giá → Đơn hàng → Giao hàng → Xuất hóa đơn', level=3)
add_flow_box(doc, [
    "Tiếp nhận yêu cầu báo giá từ khách hàng (qua Zalo/Email/Điện thoại)",
    "Kiểm tra/tạo danh mục khách hàng mới (nếu có) → PKD đề xuất → Trưởng PKD duyệt → KT tạo mã trên FAST",
    "Lập bảng báo giá: Chọn sản phẩm trong danh sách giá hiện hành của KH đó (giá mới nhất / giá đã chào)",
    "Gửi báo giá cho khách hàng → Theo dõi phản hồi",
    "Nhận đơn đặt hàng từ khách (99% là sản phẩm đã báo giá) → Nhập đơn hàng vào hệ thống",
    "Kiểm tra công nợ KH (hiện tại qua Base → PKT rà soát tay), cảnh báo nếu vượt hạn mức",
    "Lập kế hoạch giao hàng (sắp xếp theo tuyến, vùng, tải trọng xe)",
    "Kiểm tra tồn kho → nếu thiếu → tạo yêu cầu sản xuất (KHSX)",
    "Lập biên nhận giao hàng (lấy giá mới nhất trong khung giá hiện hành, nếu giá=0 → cần nhập ngày áp giá)",
    "Giao hàng → Khách ký nhận",
    "Xuất hóa đơn (lấy dữ liệu từ biên nhận giao hàng, cho phép sửa tên SP trên hóa đơn)",
    "Theo dõi công nợ & thu tiền"
], "Quy trình Báo giá → Đơn hàng → Giao hàng → Xuất hóa đơn")

doc.add_heading('B. Quy trình Lập Kế hoạch Sản xuất (KHSX)', level=3)
add_flow_box(doc, [
    "PKD tổng hợp đơn hàng theo ngày → Lập KHSX trên Excel (thủ công)",
    "Gửi KHSX cho các xưởng trước 11h để SX cho ngày hôm sau (D+1)",
    "Xưởng báo số lượng SX thực tế cho PKD → PKD đối chiếu với đơn hàng cần giao",
    "KHSX màu: mỗi màu chỉ đưa vào 1 lần, nếu SL chưa đủ → số còn lại hiển thị để lập KHSX tiếp theo",
    "Cảnh báo nếu hàng chưa giao rớt lại quá 3 ngày"
], "Quy trình Lập Kế hoạch Sản xuất")

doc.add_heading('C. Quy trình Quản lý Giá & Chiết khấu', level=3)
add_flow_box(doc, [
    "Định kỳ/đột xuất: Lập bảng tăng giá/giảm giá (có cột giá thành, giá cũ, giá mới, % tăng)",
    "In bảng xin giá → Trình duyệt (chưa tự động chuyển qua Word/Excel)",
    "Áp dụng giá mới từ ngày hiệu lực → Hệ thống tự động lấy giá mới nhất cho các đơn hàng sau ngày đó",
    "Trường hợp hỗ trợ giá cũ: có ô chọn giá khác trên đơn hàng",
    "Chiết khấu đặc biệt → workflow phê duyệt riêng"
], "Quy trình Quản lý Giá & Chiết khấu")

doc.add_heading('D. Quy trình Hàng mẫu', level=3)
add_flow_box(doc, [
    "Tiếp nhận yêu cầu hàng mẫu",
    "Lập đơn hàng mẫu (mã xưởng = XUONGMAU)",
    "Giá hàng mẫu = giá thấp nhất bán cho khách -15%",
    "Biên nhận mẫu KHÔNG tính vào doanh thu bán hàng",
    "Khi sản phẩm chuyển sang SX đại trà → đổi mã xưởng (VD: DAUBONG), dữ liệu cũ giữ nguyên"
], "Quy trình Hàng mẫu")

doc.add_heading('1.2. Điểm đau (Pain Points)', level=3)
pain_pkd = [
    "❌ Quản lý giá thủ công: Bảng báo giá chưa tự động chuyển qua Word/Excel để in; chưa có nhiều mẫu in (mẫu hệ màu, mẫu truyền thống). Khi kiểm tra giá, mặt hàng có giá cũ không được cảnh báo cần báo giá lại.",
    "❌ Tìm kiếm khách hàng & sản phẩm kém: Ô tìm kiếm chỉ hiển thị ~5 ký tự đầu → dễ nhầm lẫn khách hàng tên giống nhau. Khi tìm sản phẩm, cần thêm thao tác để tìm ngoài danh sách đã báo giá.",
    "❌ Thiếu màn hình tổng quan khách hàng: Phải mở nhiều báo cáo riêng lẻ (giá, đơn hàng, doanh thu, sản lượng) để có thông tin đầy đủ về 1 KH.",
    "❌ Báo cáo thủ công trên Excel: Xuất nhiều file riêng lẻ, tự tổng hợp sản lượng & doanh thu theo tháng cho 30+ khách hàng → tốn thời gian, dễ sai.",
    "❌ Không theo dõi được tiến độ đơn hàng: Khi KH hỏi tình trạng đơn hàng, phải gọi hỏi nhiều bộ phận (SX, kho…).",
    "❌ Chưa có hạn mức tín dụng tự động: PKD gửi list đơn hàng qua Base → PKT rà soát tay → chậm, rủi ro nợ xấu.",
    "❌ KHSX bằng Excel thủ công: Chưa có MRP tự động từ SO + tồn kho + BOM. PKD phải tự cân đối.",
    "❌ Cảnh báo sản phẩm đặc biệt: Một số SP khi bán cho KH cụ thể cần hỏi lại QC/KT, nhưng cảnh báo chưa hiển thị trên đơn hàng.",
    "❌ Quy cách sản phẩm trên báo giá: Nhập 1 lần, lần sau không tự cập nhật, phải nhập lại.",
    "❌ Giá thành màu pha: Khi nhập giá thành mới, giá màu pha chưa tự động cập nhật.",
    "❌ Kế hoạch SX màu: Chưa hiển thị số lượng đã làm trước đó của đơn hàng.",
    "❌ Chưa có tự động gửi email/Zalo/Teams báo cáo định kỳ.",
    "❌ Đơn hàng trùng: Chưa có kiểm soát trùng số đơn hàng/tổng SL/tổng tiền tự động.",
    "❌ Biên nhận giao hàng: Chưa hiển thị công nợ KH tới thời điểm hiện tại.",
    "❌ Sắp xếp giao hàng: Cần tự động cân đối tồn kho, sắp xếp theo tuyến đường, tải trọng xe.",
]
for pain in pain_pkd:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- 2. PVT -----
doc.add_heading('2. PHÒNG VẬT TƯ (PVT) — MUA HÀNG (PROCURE TO PAY)', level=2)

doc.add_heading('2.1. Các quy trình chính', level=3)

doc.add_heading('A. Quy trình Mua hàng (Procure to Pay)', level=3)
add_flow_box(doc, [
    "Phát sinh nhu cầu mua hàng: Từ MRP (thiếu NVL cho KHSX) / Tồn kho min / Yêu cầu đột xuất",
    "Lập yêu cầu mua hàng (Purchase Requisition)",
    "Kiểm tra NCC hiện có: Đánh giá theo giá, lead time, chất lượng, điều kiện TT. Nếu NCC mới → PVT đề xuất → Trưởng PVT duyệt → KT tạo mã",
    "Gửi RFQ / Báo giá cho NCC (nếu cần)",
    "So sánh báo giá, chọn NCC → Lập đơn mua hàng (Purchase Order - PO)",
    "Trình duyệt PO (theo phân cấp giá trị)",
    "Gửi PO cho NCC → Theo dõi xác nhận đơn hàng",
    "Nhận hàng: NCC giao hàng → Kho kiểm tra số lượng → QC kiểm tra chất lượng đầu vào",
    "Nếu QC đạt → Nhập kho NVL (tự động tạo phiếu nhập kho). Nếu không đạt → lập NCR → trả NCC hoặc xử lý theo thỏa thuận",
    "KT nhận hóa đơn từ NCC → Đối chiếu PO + Phiếu nhập kho + Hóa đơn (3-way matching)",
    "Thanh toán cho NCC theo điều khoản TT"
], "Quy trình Mua hàng (Procure to Pay)")

doc.add_heading('B. Quy trình Đánh giá NCC', level=3)
add_flow_box(doc, [
    "Thu thập dữ liệu: Giao hàng đúng hạn, tỷ lệ đạt chất lượng, số lần khiếu nại, ổn định giá",
    "Chấm điểm NCC định kỳ (tháng/quý)",
    "Xếp hạng NCC → Cập nhật danh sách NCC ưu tiên",
    "NCC không đạt → xem xét thay thế"
], "Quy trình Đánh giá NCC")

doc.add_heading('C. Quy trình Chuyển đổi dữ liệu (Data Migration)', level=3)
add_flow_box(doc, [
    "Rà soát danh mục NVL/NCC hiện tại trên FAST",
    "Chuẩn hóa mã: Xây dựng quy tắc đặt mã mới (theo nhóm hàng + STT)",
    "Lập bảng mapping mã cũ → mã mới",
    "Import danh mục vào BC (bao gồm các trường: tên Việt/Anh, quy cách, ĐVT, MSDS, mã HS, lead time...)",
    "Đối chiếu & xác nhận dữ liệu sau migrate"
], "Quy trình Chuyển đổi dữ liệu")

doc.add_heading('D. Quy trình Ngoại lệ / Tình huống đặc biệt', level=3)
add_flow_box(doc, [
    "Mua gấp không qua RFQ: Phê duyệt đặc biệt của BGĐ",
    "NVL thay thế: Khi NCC chính không cung cấp được → R&D phê duyệt NVL thay thế → PVT mua NCC phụ",
    "Hủy PO: Khi đơn hàng KH hủy / thay đổi KHSX → Báo NCC → xử lý theo điều khoản hợp đồng",
    "Hàng trả NCC: QC không đạt → lập NCR → trả hàng → theo dõi bồi thường/ghi nợ NCC"
], "Quy trình Ngoại lệ")

doc.add_heading('2.2. Điểm đau (Pain Points)', level=3)
pain_pvt = [
    "❌ Chưa có MRP tự động: PVT phải tự rà soát tồn kho và KHSX trên Excel để xác định nhu cầu mua → chậm, thiếu chính xác, dễ bỏ sót.",
    "❌ Quản lý NCC thủ công: Chưa có hệ thống đánh giá/xếp hạng NCC tự động dựa trên dữ liệu thực tế (giao hàng đúng hạn, tỷ lệ đạt chất lượng).",
    "❌ Mã hàng chưa chuẩn hóa: Quy tắc đặt mã thủ công → khó mapping khi chuyển sang BC. Cần thiết kế number series tự động.",
    "❌ Theo dõi lead time chưa chính xác: Lead time mua NVL thay đổi (NK 2-4 tuần, nội địa 1 tuần) nhưng không được cập nhật thường xuyên trong hệ thống.",
    "❌ Chưa có reorder point/min-max tự động: Hiện tại làm thủ công bằng Excel, không có cảnh báo khi NVL sắp hết.",
    "❌ Thiếu kiểm soát chi phí NVL: Chưa phân tích được chênh lệch giá mua giữa các NCC, giá thị trường vs giá mua thực tế.",
    "❌ Phê duyệt nhiều bước thủ công: Giấy tờ/Base/Email chồng chéo, không tập trung.",
    "❌ Data Migration phức tạp: Khối lượng dữ liệu lớn (NVL, NCC, lịch sử giao dịch), cần làm sạch và mapping kỹ lưỡng.",
]
for pain in pain_pvt:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- 3. Kho TP -----
doc.add_heading('3. KHO THÀNH PHẨM (KTP) — KHO & TỒN KHO', level=2)

doc.add_heading('3.1. Các quy trình chính', level=3)

doc.add_heading('A. Quy trình Nhập kho Thành phẩm', level=3)
add_flow_box(doc, [
    "Xưởng SX hoàn thành lô sản phẩm → QC kiểm tra",
    "QC đạt → Kho nhận phiếu nhập kho → Kiểm tra số lượng thực tế",
    "Nhập kho vào BC: Quét/tạo Lot Number, ghi nhận vị trí lưu kho (bin location)",
    "Cập nhật tồn kho real-time",
    "In phiếu nhập kho, lưu chứng từ"
], "Quy trình Nhập kho")

doc.add_heading('B. Quy trình Xuất kho / Giao hàng', level=3)
add_flow_box(doc, [
    "PKD tạo biên nhận giao hàng → Kho nhận yêu cầu xuất",
    "Kho kiểm tra tồn → Áp dụng FEFO/FIFO → Chọn lô xuất",
    "Picking: Nhân viên kho lấy hàng theo vị trí",
    "Đóng gói, kiểm tra lần cuối, dán nhãn giao hàng",
    "Xuất kho trên hệ thống → Trừ tồn → In phiếu xuất kho",
    "Bàn giao cho vận chuyển → Giao hàng cho khách"
], "Quy trình Xuất kho / Giao hàng")

doc.add_heading('C. Quy trình Kiểm kê & Điều chỉnh tồn kho', level=3)
add_flow_box(doc, [
    "Lập kế hoạch kiểm kê (cuối năm) / Cycle counting (hàng giá trị cao định kỳ)",
    "Thực hiện kiểm kê: Đếm thực tế vs sổ sách",
    "Ghi nhận chênh lệch → KTP + KT xác nhận",
    "Điều chỉnh tồn kho (có reason code + phê duyệt BGĐ cho chênh lệch lớn)",
    "Báo cáo kết quả kiểm kê"
], "Quy trình Kiểm kê")

doc.add_heading('D. Quy trình Quản lý hàng Quarantine / Lỗi / Trả lại', level=3)
add_flow_box(doc, [
    "Hàng bị QC từ chối → chuyển sang khu vực quarantine",
    "Hàng trả lại từ KH → kiểm tra → phân loại: nhập lại kho / rework / scrap",
    "Hàng lưu kho quá hạn → QC kiểm tra định kỳ (3 tháng, 6 tháng) → quyết định giữ lại / thanh lý"
], "Quy trình Quản lý hàng không đạt")

doc.add_heading('3.2. Điểm đau (Pain Points)', level=3)
pain_ktp = [
    "❌ Chưa có barcode/RF scanner: Tất cả nhập xuất đều ghi tay rồi nhập lại vào hệ thống → chậm, sai sót.",
    "❌ Chưa quản lý bin/vị trí chi tiết: Khó tìm hàng trong kho, đặc biệt với hóa chất cần phân khu an toàn.",
    "❌ Chưa có picking list / put-away tự động: Nhân viên kho phải tự nhớ vị trí, dễ nhầm.",
    "❌ Không có cảnh báo tồn kho an toàn/reorder point: Phải theo dõi thủ công bằng Excel, nguy cơ hết hàng.",
    "❌ Chênh lệch kiểm kê: Phát sinh thường xuyên do nhập liệu chậm/sai, chưa có cycle counting.",
    "❌ Kiểm kê mất nhiều thời gian: Chỉ kiểm kê cuối năm, không có cycle counting định kỳ cho hàng giá trị cao.",
    "❌ Truy xuất nguồn gốc tốn công: Khi có khiếu nại, phải tra ngược từ sổ sách giấy/Excel → chậm, không đầy đủ.",
    "❌ Thiếu báo cáo tuổi tồn kho, hàng chậm luân chuyển: Dẫn đến hàng tồn lâu không được xử lý kịp thời.",
]
for pain in pain_ktp:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- 4. Ke Toan -----
doc.add_heading('4. PHÒNG KẾ TOÁN (KT) — TÀI CHÍNH KẾ TOÁN', level=2)

doc.add_heading('4.1. Các quy trình chính', level=3)

doc.add_heading('A. Quy trình Hạch toán Kế toán Tổng hợp', level=3)
add_flow_box(doc, [
    "Thu thập chứng từ: Hóa đơn mua vào, hóa đơn bán ra, phiếu nhập/xuất kho, phiếu thu/chi",
    "Kiểm tra & đối chiếu chứng từ (3-way matching: PO - Phiếu nhập - Hóa đơn)",
    "Hạch toán vào sổ kế toán (theo VAS, có phân bổ dimensions: phòng ban, kho, nhóm SP)",
    "Lập báo cáo tài chính: Bảng CĐKT, KQKD, LCTT",
    "Lập báo cáo thuế: GTGT, TNDN, báo cáo Sở Công Thương (hóa chất)",
    "Quyết toán cuối năm"
], "Quy trình Hạch toán Kế toán Tổng hợp")

doc.add_heading('B. Quy trình Quản lý Công nợ (AR/AP)', level=3)
add_flow_box(doc, [
    "AR (Phải thu KH): Theo dõi tuổi nợ, đối chiếu công nợ, gửi biên bản đối chiếu định kỳ",
    "AP (Phải trả NCC): Theo dõi hạn thanh toán, lập kế hoạch thanh toán, đối chiếu công nợ NCC",
    "Cảnh báo nợ quá hạn → BGĐ",
    "Lập dự phòng nợ khó đòi (nếu có)"
], "Quy trình Quản lý Công nợ")

doc.add_heading('C. Quy trình Quản lý Tài sản cố định (TSCĐ) & CCDC', level=3)
add_flow_box(doc, [
    "Ghi nhận tăng TSCĐ: Mua mới, XDCB hoàn thành → Gán mã TS, xác định thời gian & PP khấu hao",
    "Tính khấu hao hàng tháng → Hạch toán chi phí",
    "Theo dõi CCDC phân bổ nhiều kỳ",
    "Ghi giảm TSCĐ: Thanh lý, nhượng bán, hư hỏng",
    "Kiểm kê TSCĐ định kỳ"
], "Quy trình Quản lý TSCĐ")

doc.add_heading('D. Quy trình Tính giá thành', level=3)
add_flow_box(doc, [
    "Tập hợp chi phí: NVL trực tiếp, nhân công trực tiếp, chi phí SX chung",
    "Phân bổ chi phí theo tiêu thức (giờ máy, giờ công, sản lượng…)",
    "Tính giá thành theo lệnh SX/batch: Standard Cost (định mức) + Actual Cost (thực tế)",
    "Phân tích chênh lệch (variance): Quantity variance, Price variance, Mix variance",
    "Cập nhật giá thành cuối tháng (chính), có thể tạm tính hàng ngày cho BGĐ",
    "Cung cấp giá thành cho PKD để làm giá bán"
], "Quy trình Tính giá thành")

doc.add_heading('E. Quy trình Báo cáo Sở Công Thương (Hóa chất)', level=3)
add_flow_box(doc, [
    "Thu thập dữ liệu nhập-xuất-tồn hóa chất trong kỳ",
    "Lập báo cáo theo mẫu Sở Công Thương",
    "Nộp báo cáo định kỳ (tháng/quý/năm)",
    "Lưu trữ hồ sơ, tờ khai hóa chất, MSDS"
], "Quy trình Báo cáo Sở Công Thương")

doc.add_heading('4.2. Điểm đau (Pain Points)', level=3)
pain_kt = [
    "❌ Nhập liệu trùng lặp: Dữ liệu từ FAST phải nhập lại hoặc export/import thủ công qua Excel để làm báo cáo quản trị.",
    "❌ Chưa có hạch toán tự động từ chứng từ gốc: Nhiều bút toán phải làm thủ công (phân bổ chi phí, khấu hao, tính giá thành).",
    "❌ Chưa quản lý được hạn mức tín dụng: Phải rà soát tay qua Base khi PKD gửi đơn hàng → chậm, rủi ro.",
    "❌ Báo cáo thuế & Sở Công Thương mất nhiều thời gian: Phải tổng hợp số liệu từ nhiều nguồn (FAST, Excel, giấy tờ).",
    "❌ Chưa có hệ thống dimension đầy đủ: Khó phân tích lợi nhuận theo phòng ban, xưởng, sản phẩm, khách hàng, kênh bán.",
    "❌ Đối chiếu công nợ thủ công: Gửi email/file Excel, dễ sai lệch, mất thời gian.",
    "❌ Kiểm soát chi phí chưa chặt: Không có budget/ngân sách để so sánh thực tế vs kế hoạch.",
    "❌ Tài sản cố định quản lý trên Excel: Dễ thất lạc, khó theo dõi lịch sử biến động.",
    "❌ Giá thành chưa kịp thời: Chỉ tính được cuối tháng, BGĐ không có số liệu kịp thời để ra quyết định.",
]
for pain in pain_kt:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- 5. PKT -----
doc.add_heading('5. PHÒNG KỸ THUẬT (PKT) — HỖ TRỢ KỸ THUẬT & CHẤT LƯỢNG', level=2)

doc.add_heading('5.1. Các quy trình chính', level=3)

doc.add_heading('A. Quy trình Hỗ trợ Kỹ thuật & Khách hàng', level=3)
add_flow_box(doc, [
    "Tiếp nhận yêu cầu hỗ trợ kỹ thuật từ PKD/Khách hàng (vấn đề sản phẩm, ứng dụng)",
    "Khảo sát thực tế tại nhà máy khách hàng",
    "Đánh giá nguyên nhân → Đề xuất giải pháp (điều chỉnh quy trình sử dụng, thay đổi sản phẩm…)",
    "Báo cáo kết quả → Phản hồi cho PKD/KH",
    "Phát hiện đối thủ cạnh tranh vào nhà máy KH → Báo cáo ngay cho BGĐ"
], "Quy trình Hỗ trợ Kỹ thuật")

doc.add_heading('B. Quy trình Thử nghiệm & Đánh giá Sản phẩm', level=3)
add_flow_box(doc, [
    "R&D chuyển giao công thức sản phẩm mới → PKT thử nghiệm ứng dụng thực tế",
    "Đánh giá kết quả, góp ý điều chỉnh (dựa trên điều kiện sử dụng thực tế của KH)",
    "Phối hợp với QC để xác nhận chỉ tiêu chất lượng",
    "Lập tài liệu hướng dẫn sử dụng cho KH"
], "Quy trình Thử nghiệm & Đánh giá")

doc.add_heading('C. Quy trình Xử lý Sự cố & Khiếu nại', level=3)
add_flow_box(doc, [
    "Tiếp nhận khiếu nại từ KH → PKT điều tra nguyên nhân",
    "Phối hợp với QC, R&D, SX để xác định root cause",
    "Đề xuất hành động khắc phục (CAPA)",
    "Theo dõi hiệu quả sau khắc phục",
    "Báo cáo sự cố ngay khi xảy ra (real-time) → BGĐ"
], "Quy trình Xử lý Sự cố")

doc.add_heading('5.2. Điểm đau (Pain Points)', level=3)
pain_pkt = [
    "❌ Báo cáo còn thủ công: Báo cáo sự cố, cạnh tranh, nhân sự, chấm công, kế hoạch mẫu màu chưa tự động tổng hợp.",
    "❌ Phụ thuộc vào Base & Excel: Nhiều quy trình (duyệt KPH, báo cáo tuần…) vẫn chạy trên Base và Excel rời rạc.",
    "❌ Thiếu dashboard cho BGĐ: Cần báo cáo tình hình SX, mẫu màu, cạnh tranh, sự cố, nhân sự cho BGĐ nhưng chưa có dashboard tập trung.",
    "❌ Chưa có hệ thống quản lý KPH/CAPA toàn diện: Mặc dù đã có KPH trên Base, nhưng chưa liên thông dữ liệu với SX, QC, R&D.",
    "❌ Theo dõi mẫu màu thủ công: Kế hoạch mẫu màu, kết quả mẫu chưa được số hóa và liên kết với đơn hàng.",
]
for pain in pain_pkt:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- 6. RD -----
doc.add_heading('6. PHÒNG R&D — NGHIÊN CỨU & PHÁT TRIỂN', level=2)

doc.add_heading('6.1. Các quy trình chính', level=3)

doc.add_heading('A. Quy trình Phát triển Sản phẩm Mới', level=3)
add_flow_box(doc, [
    "Tiếp nhận yêu cầu phát triển SP mới (từ BGĐ, PKD, marketing, xu hướng thị trường)",
    "Nghiên cứu công thức → Thử nghiệm trong phòng lab",
    "SX thử nghiệm (3-5 lô đầu tiên) → QC kiểm tra → Đánh giá",
    "Điều chỉnh công thức (nếu cần) → Thử nghiệm lại",
    "Chốt công thức chính thức → Ban hành BOM, TDS, MSDS, tiêu chuẩn kỹ thuật",
    "Chuyển giao công thức cho SX (hiện tại: gửi giấy cho xưởng, chưa có trên hệ thống)",
    "Theo dõi chất lượng các lô SX đầu tiên → Điều chỉnh nếu cần"
], "Quy trình Phát triển Sản phẩm Mới")

doc.add_heading('B. Quy trình Đánh giá Nguyên liệu Mới/Thay thế', level=3)
add_flow_box(doc, [
    "Nhu cầu thay thế NVL: NCC ngưng cung cấp / tìm loại tốt hơn / giảm chi phí",
    "Tìm kiếm NVL thay thế → Đánh giá thông số kỹ thuật",
    "Thử nghiệm trong phòng lab → So sánh với NVL hiện tại",
    "SX thử nghiệm → QC kiểm tra chất lượng SP",
    "Phê duyệt bởi GĐ R&D → Cập nhật BOM",
    "Báo cáo kết quả đánh giá NVL mới"
], "Quy trình Đánh giá NVL Mới")

doc.add_heading('C. Quy trình Quản lý Công thức (BOM)', level=3)
add_flow_box(doc, [
    "Lưu trữ công thức (hiện tại: Excel + giấy, chưa có hệ thống tập trung)",
    "Khi thay đổi công thức: R&D đề xuất → Trưởng R&D / GĐ duyệt → Cập nhật version mới",
    "Áp dụng từ ngày ký duyệt (có hiệu lực theo thời gian)",
    "Phân quyền xem BOM: Chỉ R&D, KT (giá thành), BGĐ được xem (bảo mật tài sản trí tuệ)",
    "Quản lý NVL thay thế (substitution) trong BOM"
], "Quy trình Quản lý BOM/Công thức")

doc.add_heading('6.2. Điểm đau (Pain Points)', level=3)
pain_rd = [
    "❌ BOM/công thức quản lý trên Excel + giấy: Chưa có hệ thống quản lý BOM tập trung, version control, phân quyền. R&D gửi công thức giấy cho xưởng.",
    "❌ Chưa có lịch sử thay đổi công thức: Khi điều chỉnh công thức, không ghi nhận được lý do thay đổi, thời gian, người phê duyệt trên cùng 1 hệ thống.",
    "❌ Thiếu báo cáo tiến độ R&D: Chưa có dashboard/Báo cáo danh sách SP đang nghiên cứu, tiến độ mẫu duyệt, kết quả thử nghiệm.",
    "❌ Theo dõi NVL thay thế thủ công: Chưa có quy trình đánh giá NVL mới chuẩn hóa trên hệ thống.",
    "❌ Tài liệu kỹ thuật (TDS, MSDS, tiêu chuẩn KT) rời rạc: Chưa tập trung, khó tra cứu, cập nhật.",
    "❌ Sản phẩm thử nghiệm chưa quản lý được chi phí: Costing tạm thời theo ước lượng, không theo dõi được chi phí thực tế của quá trình R&D.",
    "❌ Thiếu KPI cho R&D: Số lượng SP mới, tỷ lệ thành công, thời gian phát triển, tỷ lệ chuyển thành SP thương mại...",
]
for pain in pain_rd:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- 7. QC1 & QC2 -----
doc.add_heading('7. QC1 & QC2 — KIỂM SOÁT CHẤT LƯỢNG', level=2)

doc.add_paragraph("QC1 phụ trách: Sản phẩm Sơn nước, Dung môi, Xưởng Pha Màu. QC2 phụ trách: Sản phẩm Dầu bóng và các sản phẩm khác. Cả hai có quy trình tương tự nhau nhưng khác phạm vi sản phẩm.")

doc.add_heading('7.1. Các quy trình chính (Chung cho QC1 & QC2)', level=3)

doc.add_heading('A. Quy trình Thiết lập QC', level=3)
add_flow_box(doc, [
    "R&D và QC xây dựng chỉ tiêu kiểm tra cho từng mặt hàng (độ nhớt, độ mịn, màu sắc, độ phủ, hàm lượng rắn, pH, tỷ trọng...)",
    "QC lập bảng tiêu chuẩn sản phẩm dựa trên kết quả 3-5 lô SX đầu tiên",
    "Màu sắc: PKT yêu cầu tiêu chuẩn qua thẻ màu KH ký → QC kiểm tra theo tiêu chuẩn",
    "Định kỳ rà soát & cập nhật chỉ tiêu"
], "Thiết lập QC")

doc.add_heading('B. Quy trình Kiểm tra Chất lượng (Chi tiết)', level=3)
add_flow_box(doc, [
    "① QC ĐẦU VÀO (QA - Nguyên liệu mua về): R&D kiểm tra NVL mới (trừ nguyên liệu màu do QC1 kiểm tra) → QC kiểm tra mỗi lô NVL mới",
    "② QC TRONG SX (Bán thành phẩm): Xưởng SX tự kiểm tra bán thành phẩm → QC1/QC2 giám sát",
    "③ QC CUỐI SX (Thành phẩm): QC kiểm tra mỗi lô thành phẩm (1 mẫu/lô) → Ghi kết quả vào phiếu báo kiểm (FAST)",
    "④ QC TRƯỚC XUẤT BÁN: QC kiểm tra lại nếu cần (khi có yêu cầu đặc biệt)",
    "⑤ QC ĐỊNH KỲ TRONG KHO: QC kiểm tra hàng lưu kho 3 tháng, 6 tháng theo quy định BGĐ",
    "⑥ KIỂM TRA THỰC TẾ TẠI KH: PKT kiểm tra các chỉ tiêu cơ bản, cảm quan khi giao hàng cho KH",
    "Kích hoạt QC → Hệ thống tạo Quality Order → Nhập kết quả (thủ công, có thể import từ thiết bị đo trong tương lai)",
    "Lưu kết quả QC (photo/scan), biểu đồ, COA từ phòng lab"
], "Quy trình Kiểm tra Chất lượng Toàn diện")

doc.add_heading('C. Quy trình Xử lý Hàng Không Đạt (NCR)', level=3)
add_flow_box(doc, [
    "QC phát hiện không đạt → Ghi nhận kết quả không đạt",
    "Trường hợp 1 (có thể xử lý trong SX): Báo nội dung không đạt ở trạng thái sơ bộ → Xưởng chỉnh sửa → Tái kiểm → Lặp lại đến khi đạt",
    "Trường hợp 2 (không thể xử lý trong SX): QC báo kết quả không đạt (trạng thái cuối cùng) → Tự động chuyển SP sang sổ theo dõi KPH → QC ghi NCR → R&D kiểm tra + hướng xử lý → Xưởng xử lý (tái kiểm/rework/giảm cấp/scrap/trả NCC)",
    "Cách ly hàng không đạt (quarantine) trong suốt quá trình xử lý",
    "Ghi nhận nguyên nhân lỗi (root cause) → Đề xuất hành động khắc phục/phòng ngừa (CAPA) trên Base"
], "Quy trình Xử lý Hàng Không Đạt")

doc.add_heading('D. Quy trình COA/COC', level=3)
add_flow_box(doc, [
    "KH yêu cầu COA/COC (đặc biệt KH xuất khẩu, KH yêu cầu ISO)",
    "QC xuất COA từ thông tin lô SX",
    "Tự động in/gửi COA kèm khi giao hàng cho KH có yêu cầu",
    "Lưu trữ COA theo lô"
], "Quy trình COA/COC")

doc.add_heading('7.2. Điểm đau (Pain Points)', level=3)
pain_qc = [
    "❌ Nhập kết quả QC thủ công: Chưa import được từ thiết bị đo → tốn thời gian, dễ sai sót khi nhập liệu.",
    "❌ Kết quả QC trên FAST chưa liên thông: Kết quả kiểm tra, NCR, KPH trên FAST/Base chưa liên kết với dữ liệu SX, kho, mua hàng.",
    "❌ Chưa có truy xuất chất lượng tự động: Khi có khiếu nại KH, việc truy xuất từ lot TP → lệnh SX → lot NVL → NCC mất nhiều thời gian do dữ liệu rời rạc.",
    "❌ Phiếu báo kiểm vẫn trên FAST cũ: Cần chuyển sang Quality Order tự động trên BC.",
    "❌ COA chưa tự động: Phải xuất thủ công, chưa tự động in/gửi kèm khi giao hàng.",
    "❌ Thiếu báo cáo QC đa chiều: Cần báo cáo tiến độ chất lượng lô hàng đang SX (real-time), tỷ lệ lỗi theo NCC/công đoạn/loại lỗi, xu hướng chất lượng theo thời gian, số lô phải chỉnh >2 lần.",
    "❌ Xưởng Pha Màu: QC kiểm soát công thức và quy trình pha màu phải phù hợp quy định BGĐ, nhưng chưa có hệ thống giám sát tự động.",
    "❌ Hàng lưu kho kiểm tra định kỳ (3, 6 tháng): Chưa có cảnh báo tự động khi đến hạn kiểm tra.",
    "❌ KPH trên Base chưa đồng bộ: Dữ liệu KPH không tự động cập nhật sang hệ thống chất lượng.",
]
for pain in pain_qc:
    add_pain_item(doc, pain)

doc.add_page_break()

# ----- WORKSHOPS 8-12 -----
doc.add_heading('8. XƯỞNG SƠN NƯỚC (XSN) — SẢN XUẤT SƠN GỐC NƯỚC', level=2)

doc.add_heading('8.1. Quy trình Sản xuất', level=3)
add_flow_box(doc, [
    "Nhận KHSX từ PKD (trước 11h, cho ngày D+1)",
    "Kiểm tra tồn kho NVL → Nếu thiếu → Báo PVT mua gấp",
    "Lập lệnh SX (Production Order): Nháp → Lên lịch → Phát hành → Đang SX → Hoàn thành → Đóng",
    "In phiếu SX + Phiếu cấp phát NVL (Pick List) + Work Instruction",
    "Cân đong NVL → Phối trộn → Nghiền/phân tán → Kiểm tra độ mịn → Pha màu (nếu có) → Gia công → QC kiểm tra → Đóng gói → Dán nhãn",
    "QC đạt → Nhập kho thành phẩm (tự động khi hoàn thành lệnh SX + QC pass)",
    "Ghi nhận: Sản lượng thực tế, NVL tiêu hao thực tế, thời gian máy, giờ công theo công đoạn",
    "Hỗ trợ nhập kho nhiều lần cho 1 lệnh SX (partial completion)"
], "Quy trình Sản xuất Sơn Nước")

doc.add_heading('8.2. Điểm đau riêng của XSN', level=3)
pain_xsn = [
    "❌ KHSX bằng Excel thủ công: Chưa có MRP tự động, PKD phải tự cân đối → gửi Excel cho xưởng.",
    "❌ BOM/công thức trên giấy: R&D gửi công thức giấy cho xưởng, chưa có trên hệ thống, dễ thất lạc, khó version control.",
    "❌ Nút thắt công suất: Tại công đoạn pha chế/phân tán, nghiền, chiết rót-đóng gói (phải bơm lọc), chờ QC → cần quản lý capacity.",
    "❌ Nhập dữ liệu SX thủ công: Xưởng nhập tay trên PC, chưa có thiết bị chuyên dụng hoặc import từ trạm cân.",
    "❌ Tiêu hao thực tế vs định mức: Chưa có phân tích chênh lệch tự động → khó kiếm soát chi phí SX.",
    "❌ Quản lý lot: Cần truy xuất lot NVL → lot TP → KH, nhưng hiện tại dữ liệu rời rạc.",
    "❌ By-product (dung môi thu hồi): Chưa quản lý và hạch toán giá trị by-product tốt.",
]
for pain in pain_xsn:
    add_pain_item(doc, pain)

doc.add_heading('9. XƯỞNG DUNG MÔI (XDM) — SẢN XUẤT DUNG MÔI', level=2)

doc.add_heading('9.1. Quy trình Sản xuất', level=3)
add_flow_box(doc, [
    "Nhận KHSX từ PKD (hàng ngày, chốt trước 11h)",
    "Kiểm tra tồn kho NVL → Lập lệnh SX",
    "Cân đong NVL → Phối trộn → Kiểm tra độ hòa tan → QC kiểm tra → Đóng gói → Dán nhãn → Nhập kho",
    "Máy móc: Máy khuấy, bồn phối trộn, hệ thống cân bơm tự động → Cần machine center cho từng thiết bị",
    "Batch size: VD 1000kg/lô Dung môi. Tỷ lệ hao hụt chuẩn 0.4-0.8%",
    "Quản lý by-product: Dung môi thu hồi"
], "Quy trình Sản xuất Dung Môi")

doc.add_heading('9.2. Điểm đau riêng', level=3)
pain_xdm = [
    "❌ BOM quản lý trên Excel + giấy: Chưa có hệ thống tập trung.",
    "❌ Chưa có picking list / put-away: Xuất NVL cho SX và nhập TP còn thủ công.",
    "❌ Chưa có barcode: Tất cả nhập liệu bằng tay.",
    "❌ Lead time SX 1-3 ngày: Cần quản lý chính xác hơn để cam kết ngày giao hàng.",
    "❌ Không có nút thắt công suất rõ ràng: Nhưng vẫn cần quản lý capacity để tối ưu.",
]
for pain in pain_xdm:
    add_pain_item(doc, pain)

doc.add_heading('10. XƯỞNG DẦU BÓNG (XDB) — SẢN XUẤT DẦU BÓNG/UV', level=2)

doc.add_heading('10.1. Quy trình Sản xuất', level=3)
add_flow_box(doc, [
    "Tương tự XDM nhưng sản phẩm là dầu bóng UV/NC/PU",
    "Cân đong NVL → Phối trộn → Kiểm tra → Đóng gói → Nhập kho",
    "Sản xuất kết hợp: MTO (hàng chuyên dụng) + MTS (hàng chuẩn), theo batch",
    "By-product: Dung môi thu hồi",
    "Phân quyền BOM: Chỉ R&D, KT (giá thành), BGĐ"
], "Quy trình Sản xuất Dầu Bóng")

doc.add_heading('10.2. Điểm đau riêng', level=3)
pain_xdb = [
    "❌ Quản lý BOM trên Excel+giấy: Cần số hóa và version control.",
    "❌ Chưa có hệ thống MRP: KHSX bằng Excel thủ công.",
    "❌ Chưa có cảnh báo tồn kho an toàn NVL.",
    "❌ Chưa có cycle counting: Chỉ kiểm kê cuối năm.",
    "❌ Dashboard xưởng chưa có: Cần real-time WIP, tiến độ SX, tiêu hao, tỷ lệ lỗi.",
]
for pain in pain_xdb:
    add_pain_item(doc, pain)

doc.add_heading('11. XƯỞNG MÀU (XM) — PHA MÀU', level=2)

doc.add_heading('11.1. Quy trình Sản xuất', level=3)
add_flow_box(doc, [
    "Nhận KHSX màu từ PKD (mỗi màu chỉ đưa vào KHSX 1 lần, nếu SL chưa đủ → số còn lại hiển thị để lập tiếp)",
    "Pha màu theo công thức, đối chiếu thẻ màu KH ký",
    "QC kiểm tra màu sắc, độ nhớt, độ bóng → Đạt → Nhập kho",
    "SX lượng nhỏ trước → QC kiểm tra → SX lượng lớn",
    "QC kiểm soát công thức và quy trình phải phù hợp quy định BGĐ",
    "Khi SP chuyển từ Xưởng Màu sang xưởng khác → đổi mã xưởng, dữ liệu cũ giữ nguyên"
], "Quy trình Sản xuất Xưởng Màu")

doc.add_heading('11.2. Điểm đau riêng', level=3)
pain_xm = [
    "❌ Nút thắt công suất lớn nhất: Xưởng Màu có nhiều công đoạn pha màu phức tạp → cần quản lý capacity chi tiết.",
    "❌ KHSX màu phức tạp: Mỗi màu xử lý riêng, cần theo dõi số lượng đã làm, còn lại của từng đơn hàng.",
    "❌ Cảnh báo hàng chưa giao: Cần cảnh báo nếu hàng rớt lại quá 3 ngày.",
    "❌ Chuyển đổi mã xưởng: Khi sản phẩm chuyển sang xưởng khác SX, cần quản lý lịch sử rõ ràng.",
    "❌ Công thức màu: Phức tạp, nhiều biến thể → cần BOM linh hoạt.",
]
for pain in pain_xm:
    add_pain_item(doc, pain)

doc.add_page_break()

# ================= III. TỔNG HỢP ĐIỂM ĐAU CHÍNH =================
doc.add_heading('III. BẢNG TỔNG HỢP ĐIỂM ĐAU CHÍNH (TOÀN CÔNG TY)', level=1)

doc.add_paragraph("Bảng dưới đây tổng hợp các điểm đau chính xuất hiện ở hầu hết các phòng ban, phân loại theo mức độ ảnh hưởng và tần suất.")

# Create summary table
table = doc.add_table(rows=1, cols=4)
table.style = 'Table Grid'
table.alignment = WD_TABLE_ALIGNMENT.CENTER

# Header
hdr_cells = table.rows[0].cells
headers = ['STT', 'Điểm đau chính', 'Phòng ban liên quan', 'Mức độ']
for i, h in enumerate(headers):
    hdr_cells[i].text = h
    for p in hdr_cells[i].paragraphs:
        for run in p.runs:
            run.bold = True
            run.font.size = Pt(9)
    set_cell_shading(hdr_cells[i], '003366')
    for p in hdr_cells[i].paragraphs:
        for run in p.runs:
            run.font.color.rgb = RGBColor(255, 255, 255)

pain_summary = [
    ["1", "Quản lý BOM/Công thức trên Excel + giấy, chưa có hệ thống version control", "R&D, Tất cả xưởng SX", "RẤT CAO"],
    ["2", "KHSX & MRP bằng Excel thủ công, chưa tự động từ SO + tồn kho + BOM", "PKD, PVT, Tất cả xưởng", "RẤT CAO"],
    ["3", "Nhập liệu thủ công (QC, SX, Kho), chưa có import từ thiết bị/barcode", "QC1, QC2, XSN, XDM, XDB, KTP", "CAO"],
    ["4", "Truy xuất nguồn gốc 2 chiều chưa tự động (NVL→TP→KH)", "QC, R&D, Kho, SX", "RẤT CAO"],
    ["5", "Chưa có hạn mức tín dụng tự động và kiểm soát công nợ real-time", "PKD, KT, PKT", "CAO"],
    ["6", "Thiếu dashboard quản trị theo vai trò (BGĐ, PKD, Xưởng, KT, QC)", "Tất cả", "CAO"],
    ["7", "Báo cáo thủ công trên Excel, chưa tự động xuất/lên lịch/gửi email", "Tất cả", "CAO"],
    ["8", "Chưa có hệ thống quản lý KPH/CAPA liên thông", "QC, R&D, PKT, SX", "CAO"],
    ["9", "Quản lý kho chưa có barcode/bin location/picking list", "KTP, XSN, XDM, XDB", "CAO"],
    ["10", "Chưa có reorder point/min-max/cảnh báo tồn kho tự động", "PVT, Kho, SX", "CAO"],
    ["11", "Dữ liệu rời rạc trên FAST + Excel + Base + Giấy", "Tất cả", "RẤT CAO"],
    ["12", "Giá thành chưa kịp thời, chỉ tính cuối tháng", "KT, BGĐ, PKD", "CAO"],
    ["13", "Tìm kiếm khách hàng/sản phẩm hạn chế, chưa có autocomplete", "PKD", "TB"],
    ["14", "Chưa có quy trình đánh giá NCC tự động (scorecard)", "PVT, QC", "TB"],
    ["15", "Tài liệu kỹ thuật (TDS, MSDS) rời rạc, chưa tập trung", "R&D, PKT", "TB"],
    ["16", "Quy trình phê duyệt trên Base/Email thủ công, chưa workflow tự động", "Tất cả", "CAO"],
    ["17", "Cảnh báo sản phẩm đặc biệt/giá cũ/đơn hàng trùng chưa tự động", "PKD", "TB"],
    ["18", "Chưa theo dõi tiến độ đơn hàng real-time (SX, giao hàng)", "PKD, CSKH", "CAO"],
    ["19", "Data Migration phức tạp: Mã cũ→mới, dữ liệu lớn cần làm sạch", "PVT, KT", "CAO"],
    ["20", "Chưa có quản lý budget/ngân sách để so sánh thực tế vs kế hoạch", "KT, BGĐ", "TB"],
]

for row_data in pain_summary:
    row = table.add_row()
    for i, val in enumerate(row_data):
        row.cells[i].text = val
        for p in row.cells[i].paragraphs:
            for run in p.runs:
                run.font.size = Pt(9)

# Set column widths
widths = [Cm(1), Cm(8.5), Cm(4.5), Cm(2)]
for row in table.rows:
    for i, w in enumerate(widths):
        row.cells[i].width = w

doc.add_page_break()

# ================= IV. GLOSSARY =================
doc.add_heading('IV. CHÚ GIẢI THUẬT NGỮ CHUYÊN MÔN & VIẾT TẮT', level=1)

doc.add_heading('A. Thuật ngữ ERP & Công nghệ thông tin', level=3)

glossary_it = [
    ("ERP", "Enterprise Resource Planning", "Hệ thống hoạch định nguồn lực doanh nghiệp - Phần mềm quản trị tổng thể"),
    ("BC / BC365", "Microsoft Dynamics 365 Business Central", "Phần mềm ERP của Microsoft, phiên bản dành cho doanh nghiệp vừa"),
    ("FAST", "FAST Business Software", "Phần mềm kế toán & quản lý hiện tại của BTCHEM"),
    ("Base", "Base.vn / Base Platform", "Nền tảng quản lý quy trình nội bộ (dùng cho KPH, workflow phê duyệt)"),
    ("MRP", "Material Requirements Planning", "Hoạch định nhu cầu nguyên vật liệu"),
    ("MPS", "Master Production Schedule", "Kế hoạch sản xuất tổng thể"),
    ("BI", "Business Intelligence", "Hệ thống báo cáo & phân tích dữ liệu kinh doanh"),
    ("RBAC", "Role-Based Access Control", "Phân quyền truy cập theo vai trò"),
    ("SSO", "Single Sign-On", "Đăng nhập một lần"),
    ("COA", "Chart of Accounts", "Hệ thống tài khoản kế toán"),
    ("VAS", "Vietnamese Accounting Standards", "Chuẩn mực kế toán Việt Nam"),
    ("3PL", "Third-Party Logistics", "Dịch vụ logistics thuê ngoài"),
    ("RFQ", "Request for Quotation", "Yêu cầu báo giá"),
    ("RF Scanner", "Radio Frequency Scanner", "Máy quét mã vạch không dây"),
    ("3-way matching", "Three-way matching", "Đối chiếu 3 chứng từ: Đơn mua hàng - Phiếu nhập kho - Hóa đơn"),
    ("Data Migration", "Data Migration", "Chuyển đổi dữ liệu từ hệ thống cũ sang mới"),
    ("Number Series", "Number Series", "Dãy số tự động sinh mã"),
    ("Dimension", "Dimension", "Chiều phân tích dữ liệu kế toán (phòng ban, kho, sản phẩm…)"),
]

table = doc.add_table(rows=1, cols=4)
table.style = 'Table Grid'
hdr = table.rows[0].cells
for i, h in enumerate(["Thuật ngữ", "Tên đầy đủ", "Giải thích", ""]):
    hdr[i].text = h
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.bold = True
            run.font.size = Pt(9)
    set_cell_shading(hdr[i], '003366')
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.font.color.rgb = RGBColor(255, 255, 255)

for item in glossary_it:
    row = table.add_row()
    for i, val in enumerate(item):
        row.cells[i].text = val
        for p in row.cells[i].paragraphs:
            for run in p.runs:
                run.font.size = Pt(9)

doc.add_paragraph()

doc.add_heading('B. Thuật ngữ Sản xuất & Chất lượng', level=3)

glossary_sx = [
    ("BOM", "Bill of Materials", "Định mức nguyên vật liệu / Công thức sản xuất"),
    ("NVL", "Nguyên Vật Liệu", "Nguyên liệu đầu vào cho sản xuất"),
    ("TP", "Thành Phẩm", "Sản phẩm hoàn chỉnh sau sản xuất"),
    ("BTP", "Bán Thành Phẩm", "Sản phẩm trung gian giữa NVL và TP"),
    ("KHSX", "Kế Hoạch Sản Xuất", "Kế hoạch sản xuất hàng ngày/tuần/tháng"),
    ("Batch / Mẻ / Lô SX", "Production Batch", "Đơn vị sản xuất theo mẻ"),
    ("Lot Number", "Lot / Số lô", "Mã số lô sản phẩm dùng để truy xuất nguồn gốc"),
    ("MTO", "Make-to-Order", "Sản xuất theo đơn đặt hàng"),
    ("MTS", "Make-to-Stock", "Sản xuất để tồn kho"),
    ("WIP", "Work in Progress", "Hàng đang sản xuất dở dang"),
    ("Routing", "Production Routing", "Lộ trình công đoạn sản xuất"),
    ("Work Center", "Work/Machine Center", "Trung tâm máy/công đoạn sản xuất"),
    ("Setup time", "Setup time", "Thời gian chuẩn bị (vệ sinh máy, chuyển đổi sản phẩm)"),
    ("Runtime", "Runtime", "Thời gian sản xuất chuẩn"),
    ("Backflush", "Backflush", "Xuất NVL tự động theo định mức khi hoàn thành SX"),
    ("Manual Issue", "Manual Issue", "Xuất NVL thủ công (cân đong chính xác)"),
    ("Pick List", "Pick List", "Danh sách NVL cần xuất kho cho lệnh SX"),
    ("Put-away", "Put-away", "Quy trình nhập hàng vào vị trí lưu kho"),
    ("OEE", "Overall Equipment Effectiveness", "Hiệu suất tổng thể thiết bị"),
    ("Scrap", "Scrap / Phế phẩm", "Sản phẩm hỏng không sửa được"),
    ("Rework", "Rework / Sửa lỗi", "Sản phẩm lỗi được sửa chữa lại"),
    ("By-product", "Phụ phẩm", "Sản phẩm phụ tạo ra trong quá trình SX (VD: dung môi thu hồi)"),
    ("Substitution", "Nguyên liệu thay thế", "NVL thay thế khi NVL chính không có sẵn"),
    ("Standard Cost", "Giá thành định mức", "Giá thành tính theo định mức chuẩn"),
    ("Actual Cost", "Giá thành thực tế", "Giá thành tính theo chi phí thực tế phát sinh"),
    ("Variance", "Cost Variance", "Chênh lệch giữa giá thành thực tế và định mức"),
    ("OTIF", "On Time In Full", "Tỷ lệ giao hàng đúng hạn và đủ số lượng"),
]

table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'
hdr = table.rows[0].cells
for i, h in enumerate(["Thuật ngữ", "Tên đầy đủ", "Giải thích"]):
    hdr[i].text = h
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.bold = True
            run.font.size = Pt(9)
    set_cell_shading(hdr[i], '003366')
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.font.color.rgb = RGBColor(255, 255, 255)

for item in glossary_sx:
    row = table.add_row()
    for i, val in enumerate(item):
        row.cells[i].text = val
        for p in row.cells[i].paragraphs:
            for run in p.runs:
                run.font.size = Pt(9)

doc.add_paragraph()

doc.add_heading('C. Thuật ngữ Chất lượng', level=3)

glossary_qc = [
    ("QC", "Quality Control", "Kiểm soát chất lượng"),
    ("QA", "Quality Assurance", "Đảm bảo chất lượng"),
    ("NCR", "Non-Conformance Report", "Báo cáo sự không phù hợp / Phiếu ghi nhận lỗi"),
    ("KPH", "Khắc Phục / Phòng ngừa", "Hành động khắc phục và phòng ngừa"),
    ("CAPA", "Corrective and Preventive Action", "Hành động khắc phục và phòng ngừa (tương đương KPH)"),
    ("CA", "Corrective Action", "Hành động khắc phục"),
    ("PA", "Preventive Action", "Hành động phòng ngừa"),
    ("Root Cause", "Root Cause / Nguyên nhân gốc", "Nguyên nhân gốc rễ của vấn đề chất lượng"),
    ("COA", "Certificate of Analysis", "Chứng nhận phân tích / Phiếu kiểm nghiệm chất lượng"),
    ("COC", "Certificate of Conformance", "Chứng nhận hợp quy / Chứng nhận phù hợp"),
    ("Quarantine", "Cách ly", "Khu vực cách ly hàng chờ xử lý chất lượng"),
    ("MSDS", "Material Safety Data Sheet", "Bảng dữ liệu an toàn hóa chất"),
    ("TDS", "Technical Data Sheet", "Bảng dữ liệu kỹ thuật sản phẩm"),
    ("SPM", "Sản Phẩm Mẫu", "Sản phẩm mẫu thử nghiệm"),
    ("ĐC", "Đối Chứng", "Mẫu đối chứng để so sánh"),
    ("TTNL", "Thử Nghiệm Nguyên Liệu", "Kiểm tra nguyên liệu đầu vào"),
    ("FEFO", "First Expired First Out", "Ưu tiên xuất hàng có hạn dùng gần nhất"),
    ("FIFO", "First In First Out", "Ưu tiên xuất hàng nhập trước"),
    ("Cycle Counting", "Cycle Counting", "Kiểm kê luân phiên định kỳ"),
    ("Reason Code", "Reason Code", "Mã lý do (dùng khi điều chỉnh tồn kho)"),
]

table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'
hdr = table.rows[0].cells
for i, h in enumerate(["Thuật ngữ", "Tên đầy đủ", "Giải thích"]):
    hdr[i].text = h
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.bold = True
            run.font.size = Pt(9)
    set_cell_shading(hdr[i], '003366')
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.font.color.rgb = RGBColor(255, 255, 255)

for item in glossary_qc:
    row = table.add_row()
    for i, val in enumerate(item):
        row.cells[i].text = val
        for p in row.cells[i].paragraphs:
            for run in p.runs:
                run.font.size = Pt(9)

doc.add_paragraph()

doc.add_heading('D. Thuật ngữ Kinh doanh & Kế toán', level=3)

glossary_kd = [
    ("PKD", "Phòng Kinh Doanh", "Bộ phận bán hàng"),
    ("PVT", "Phòng Vật Tư", "Bộ phận mua hàng"),
    ("PKT", "Phòng Kỹ Thuật", "Bộ phận hỗ trợ kỹ thuật"),
    ("KT", "Kế Toán", "Bộ phận kế toán tài chính"),
    ("KTP", "Kho Thành Phẩm", "Bộ phận quản lý kho thành phẩm"),
    ("BGĐ", "Ban Giám Đốc", "Ban lãnh đạo công ty"),
    ("CSKH", "Customer Service", "Bộ phận chăm sóc khách hàng"),
    ("SO", "Sales Order", "Đơn đặt hàng / Đơn bán hàng"),
    ("PO", "Purchase Order", "Đơn mua hàng"),
    ("AR", "Accounts Receivable", "Khoản phải thu / Công nợ khách hàng"),
    ("AP", "Accounts Payable", "Khoản phải trả / Công nợ nhà cung cấp"),
    ("MST", "Mã Số Thuế", "Mã số thuế doanh nghiệp"),
    ("CK", "Chiết Khấu", "Giảm giá"),
    ("ĐVT", "Đơn Vị Tính", "Đơn vị đo lường (Kg, Lít, Thùng...)"),
    ("ĐH", "Đơn Hàng", "Đơn đặt hàng"),
    ("BN", "Biên Nhận", "Biên nhận giao hàng"),
    ("KH", "Khách Hàng", "Khách hàng"),
    ("NCC", "Nhà Cung Cấp", "Nhà cung cấp nguyên vật liệu"),
    ("SP", "Sản Phẩm", "Sản phẩm / Mặt hàng"),
    ("TSCĐ", "Tài Sản Cố Định", "Tài sản dài hạn của doanh nghiệp"),
    ("CCDC", "Công Cụ Dụng Cụ", "Công cụ dụng cụ (tài sản ngắn hạn)"),
    ("HS Code", "Harmonized System Code", "Mã HS dùng cho khai báo hải quan và hóa chất"),
    ("Sở CT", "Sở Công Thương", "Cơ quan quản lý nhà nước về công thương"),
    ("XSN", "Xưởng Sơn Nước", "Xưởng sản xuất sơn gốc nước"),
    ("XDM", "Xưởng Dung Môi", "Xưởng sản xuất dung môi"),
    ("XDB", "Xưởng Dầu Bóng", "Xưởng sản xuất dầu bóng"),
    ("XM", "Xưởng Màu", "Xưởng pha màu"),
    ("NK", "Nhập Khẩu", "Hàng nhập khẩu"),
    ("BCTC", "Báo Cáo Tài Chính", "Báo cáo tài chính định kỳ"),
    ("GTGT", "Giá Trị Gia Tăng", "Thuế giá trị gia tăng"),
    ("TNDN", "Thu Nhập Doanh Nghiệp", "Thuế thu nhập doanh nghiệp"),
]

table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'
hdr = table.rows[0].cells
for i, h in enumerate(["Thuật ngữ", "Tên đầy đủ", "Giải thích"]):
    hdr[i].text = h
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.bold = True
            run.font.size = Pt(9)
    set_cell_shading(hdr[i], '003366')
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.font.color.rgb = RGBColor(255, 255, 255)

for item in glossary_kd:
    row = table.add_row()
    for i, val in enumerate(item):
        row.cells[i].text = val
        for p in row.cells[i].paragraphs:
            for run in p.runs:
                run.font.size = Pt(9)

doc.add_paragraph()

doc.add_heading('E. Thuật ngữ về Sản phẩm Sơn & Hóa chất', level=3)

glossary_son = [
    ("UV", "Ultraviolet", "Sơn UV - đóng rắn bằng tia cực tím"),
    ("NC", "Nitrocellulose", "Sơn NC - gốc nitrocellulose"),
    ("PU", "Polyurethane", "Sơn PU - gốc polyurethane"),
    ("WB", "Water-Based", "Sơn gốc nước"),
    ("Sơn nước", "Sơn gốc nước", "Sơn sử dụng nước làm dung môi pha loãng"),
    ("Dung môi", "Solvent", "Chất dùng để hòa tan/phân tán các thành phần khác"),
    ("Dầu bóng", "Clear Coat / Varnish", "Lớp phủ bảo vệ bề mặt gỗ"),
    ("Pha màu", "Color Mixing", "Quy trình pha trộn màu sắc theo yêu cầu"),
    ("Xưởng màu", "Color Workshop", "Xưởng chuyên pha màu theo đơn hàng"),
    ("Độ nhớt", "Viscosity", "Thông số đo độ đặc/loãng của sơn"),
    ("Độ mịn", "Fineness", "Kích thước hạt phân tán trong sơn"),
    ("Độ phủ", "Coverage / Opacity", "Khả năng che phủ bề mặt"),
    ("Hàm lượng rắn", "Solid Content", "Tỷ lệ phần trăm chất rắn còn lại sau khi sơn khô"),
    ("Tỷ trọng", "Density / Specific Gravity", "Khối lượng riêng của sơn/dung môi"),
    ("pH", "pH level", "Độ axit/kiềm của sản phẩm"),
    ("Nhựa", "Resin", "Chất kết dính tạo màng trong sơn"),
    ("Bột màu", "Pigment", "Chất tạo màu trong sơn"),
    ("Phụ gia", "Additive", "Chất bổ trợ cải thiện tính năng sơn"),
]

table = doc.add_table(rows=1, cols=3)
table.style = 'Table Grid'
hdr = table.rows[0].cells
for i, h in enumerate(["Thuật ngữ", "Tên đầy đủ", "Giải thích"]):
    hdr[i].text = h
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.bold = True
            run.font.size = Pt(9)
    set_cell_shading(hdr[i], '003366')
    for p in hdr[i].paragraphs:
        for run in p.runs:
            run.font.color.rgb = RGBColor(255, 255, 255)

for item in glossary_son:
    row = table.add_row()
    for i, val in enumerate(item):
        row.cells[i].text = val
        for p in row.cells[i].paragraphs:
            for run in p.runs:
                run.font.size = Pt(9)

# ---- Footer ----
doc.add_paragraph()
doc.add_paragraph()
p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("--- HẾT BÁO CÁO ---")
run.bold = True
run.font.size = Pt(12)
run.font.color.rgb = RGBColor(0, 51, 102)

p = doc.add_paragraph()
p.alignment = WD_ALIGN_PARAGRAPH.CENTER
run = p.add_run("Báo cáo được tổng hợp từ dữ liệu khảo sát ERP của 12 phòng ban BTCHEM, tháng 06-07/2026.\nĐối tác triển khai: FPT Information System")
run.font.size = Pt(9)
run.font.color.rgb = RGBColor(128, 128, 128)

# ---- Save ----
output_path = r"C:\antigra-DS\CLAW_LAM_VIEC\ERP\CAUHOIKHAOSATMS\BAO_CAO_SO_DO_QUY_TRINH_VA_DIEM_DAU_BTCHEM.docx"
doc.save(output_path)
print(f"Report saved to: {output_path}")
print("Done!")
