from __future__ import annotations

"""Kịch bản hoàn thiện toàn diện Bảng theo dõi công trình Định Sơn (2022 - 2026).

Nguyên tắc bắt buộc:
1. Phân rã 100% từng công trình con bên trong mỗi thư mục đối tác thành từng dòng độc lập.
2. Xã Kiến Hưng: Chủ đầu tư đúng là "Trung tâm dịch vụ sự nghiệp công xã Kiến Hưng" (không dùng UBND xã Kiến Hưng).
3. Tại Kiến Hưng 2026:
   - NVH Đại Thắng: Định Sơn là Tổng thầu thi công trực tiếp với Chủ đầu tư TTDVSNC xã Kiến Hưng (Đang thi công).
   - NVH Đương Thắng và Bãi rác DC PA1: Nhà thầu chính là Công ty TNHH ĐTXD & TM Bảo Lộc; Định Sơn là thầu phụ / cung ứng vật tư & thiết bị cho Bảo Lộc.
4. Đa Độ và các đối tác (Rạng Đông, Bảo Lộc, Nam Hải, Minh Tiến, XN Xây Lắp...): Phân rã thành từng công trình riêng biệt.
"""

import logging
import openpyxl
from datetime import datetime
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side

logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s")
logger = logging.getLogger("FinalizeMasterBangTheoDoi")

EXCEL_PRIMARY = "C:/Projects/DSCons/CongTrinh/Bảng theo dõi công trình.xlsx"
EXCEL_BACKUP = "C:/Projects/DSCons/CongTrinh/Bảng theo dõi công trình - TÁCH CÔNG TRÌNH ĐA ĐỘ.xlsx"


def build_master_workbook():
    logger.info("Khởi tạo cập nhật Master Workbook...")
    wb = openpyxl.load_workbook(EXCEL_PRIMARY)

    # Các hằng số CĐT chuẩn pháp lý
    CDT_TTDVSNC_KIENHUNG = "Trung tâm dịch vụ sự nghiệp công xã Kiến Hưng"
    CDT_TTDVSNC_NGHIDUONG = "Trung tâm dịch vụ sự nghiệp công xã Nghi Dương"
    CDT_PKT_KIENMINH = "Phòng Kinh tế xã Kiến Minh"
    CDT_DADO = "CÔNG TY TNHH MTV KHAI THÁC CÔNG TRÌNH THỦY LỢI ĐA ĐỘ"
    CTY_BAOLOC = "Công ty TNHH Đầu tư Xây dựng và Thương mại Bảo Lộc"

    # =============================================================
    # 1. HOÀN THIỆN SHEET 2026
    # =============================================================
    logger.info("--- Hoàn thiện Sheet 2026 ---")
    ws_2026 = wb["2026"]

    # Xóa sạch dữ liệu cũ trong vùng data của Sheet 2026 (dùng .value = None)
    for r in range(5, 120):
        for c in range(1, 26):
            ws_2026.cell(r, c).value = None

    projects_2026 = [
        # --- Cụm Kiến Minh (Phòng Kinh tế xã Kiến Minh) ---
        (1, "Sửa chữa tuyến kênh đồng dầm (từ kênh Đại Trà 1 đến gốc Đa Miếu Bà); máng inox Đội 3-5", "TCXD", CDT_PKT_KIENMINH, "27.10.ĐD/2025/HĐTCXD", datetime(2025, 10, 27), 323401000, datetime(2026, 2, 5), datetime(2026, 2, 5), "1C26TYY-00000006\n05/02/2026", 89260185, 7140815, 96401000, 96401000, 0, "Đợt 2: 96.401.000 đ (Đợt 1 HĐ 46 năm 2025: 227.000.000 đ)"),
        (2, "Xây lắp và mua sắm thiết bị Lắp đặt hệ thống tưới xã Kiến Minh", "TCXL & MSTB", CDT_PKT_KIENMINH, "28.01/2026/HĐXD", datetime(2026, 1, 28), 747159000, datetime(2026, 2, 14), datetime(2026, 2, 14), "1C26TYY-00000012\n14/02/2026", 691813889, 55345111, 747159000, 747159000, 0, "Hoàn thành QT theo HĐ 12 (kèm HĐ 60)"),
        (3, "Sửa chữa hệ thống kênh xây xã Kiến Minh", "TCXD", CDT_PKT_KIENMINH, "06.1.KXKM/2026/HĐTCXD", datetime(2026, 1, 6), 1997925000, datetime(2026, 2, 8), datetime(2026, 2, 8), "1C26TYY-00000009\n08/02/2026", 1801269524, 90063476, 1891333000, 1891333000, 0, "Hoàn thành nghiệm thu thanh toán"),
        (4, "Sửa chữa các tuyến kênh thuỷ lợi nội đồng xã Kiến Minh", "TCXD", CDT_PKT_KIENMINH, "02.05/2026/HĐTCXD", datetime(2026, 5, 2), 676561000, datetime(2026, 6, 2), datetime(2026, 6, 2), "1C26TYY-00000035\n02/06/2026", 643822247, 32738753, 676561000, 676561000, 0, "Đã xuất hóa đơn quyết toán"),
        (5, "Nạo vét các tuyến kênh thuỷ lợi nội đồng xã Kiến Minh", "TCXD", CDT_PKT_KIENMINH, "07.3/2026/HĐ-TCXD/GXL03", datetime(2026, 3, 7), 687987000, datetime(2026, 5, 4), datetime(2026, 5, 4), "1C26TYY-00000025\n04/05/2026", 654704380, 33282620, 687987000, 687987000, 0, "Hoàn thành 100%"),
        (6, "Nạo vét tuyến kênh từ gốc đa Miếu Bà đến cống Bà Xuyên, xã Kiến Minh", "TCXD", CDT_PKT_KIENMINH, "14.03/2026/HĐTCXD", datetime(2026, 3, 14), 294400000, datetime(2026, 5, 20), datetime(2026, 5, 20), "1C26TYY-00000032\n20/05/2026", 272592593, 21807407, 294400000, 294400000, 0, "Đã thanh toán đủ"),
        (7, "Nạo vét tuyến kênh từ Cửa Chè đến nhà ông Hồng, thôn Cầu Đen, xã Kiến Minh", "TCXD", CDT_PKT_KIENMINH, "15.4/2026/HĐTCXD", datetime(2026, 4, 15), 523110000, datetime(2026, 6, 11), datetime(2026, 6, 11), "1C26TYY-00000037\n11/06/2026", 498199806, 24910194, 523110000, 523110000, 0, "Đã hoàn tất hồ sơ và hóa đơn"),
        (8, "Cải tạo, sửa chữa tuyến đường từ nhà ông Nam đến cống Bờ Đắp, xã Kiến Minh", "TCXD", CDT_PKT_KIENMINH, "09.03/2026/HĐXD", datetime(2026, 3, 9), 1641012000, datetime(2026, 6, 21), datetime(2026, 6, 21), "1C26TYY-00000039\n21/06/2026", 1519455261, 121556739, 1641012000, 1641012000, 0, "Hoàn thành nghiệm thu đưa vào sử dụng"),
        (9, "Xây dựng hệ thống cống hộp kênh Bến Kem đoạn từ đường liên huyện đến đồi Cương", "TCXL", CDT_PKT_KIENMINH, "12.3.BKKM/2026/HĐXL", datetime(2026, 3, 12), 6739361000, datetime(2026, 5, 30), datetime(2026, 5, 30), "1C26TYY-00000034\n30/05/2026", 4520310185, 361624815, 4881935000, 4881935000, 1857426000, "NT Đợt 1: 4.881.935.000 đ; Đợt 2 HĐ 42: 518.869.000 đ"),

        # --- Cụm Xã Kiến Hưng (Trung tâm Dịch vụ sự nghiệp công xã Kiến Hưng) ---
        (10, "Sửa chữa, cải tạo nhà văn hóa thôn Đại Thắng và các hạng mục phụ trợ", "Gói 01: TCXL + LĐTB", CDT_TTDVSNC_KIENHUNG, "09.7.NVHĐT/2026/HĐTCXD", datetime(2026, 7, 9), 1644330000, None, None, None, None, None, None, None, None, "Định Sơn là Nhà thầu chính thi công trực tiếp cho Chủ đầu tư TTDVSNC xã Kiến Hưng (Đang thi công)"),
        (11, "Nhà văn hóa thôn Đương Thắng (Cung cấp thiết bị LED, điều hòa, điện nước & nội thất tiêu âm)", "Cung ứng TB & Thầu phụ", f"{CDT_TTDVSNC_KIENHUNG} (Tổng thầu: {CTY_BAOLOC})", "05.1/2026/HĐNT/BL-ĐS", datetime(2026, 1, 5), 986872180, datetime(2026, 7, 3), datetime(2026, 7, 3), "1C26TYY-00000046,47\n03/07/2026", 889103500, 71200680, 960304180, 960304180, 0, "Bảo Lộc là Nhà thầu chính; Định Sơn là thầu phụ cung ứng thiết bị và điện nước cho Bảo Lộc"),
        (12, "Xử lý bãi rác DC PA1, xã Kiến Hưng", "Thầu phụ thi công & ca máy", f"{CDT_TTDVSNC_KIENHUNG} (Tổng thầu: {CTY_BAOLOC})", "05.1/2026/HĐNT/BL-ĐS", datetime(2026, 1, 5), 150000000, None, None, None, None, None, None, None, None, "Bảo Lộc là Nhà thầu chính; Định Sơn là thầu phụ hỗ trợ ca máy và vật tư cho Bảo Lộc"),

        # --- Cụm Xã Nghi Dương (Trung tâm Dịch vụ sự nghiệp công xã Nghi Dương) ---
        (13, "Thi công tuyến đường 85M thôn Nghi Dương", "Xây lắp giao thông", CDT_TTDVSNC_NGHIDUONG, "15.06/2026/HĐ-ND", datetime(2026, 6, 15), 450000000, None, None, None, None, None, None, None, None, "Hồ sơ thiết kế bản vẽ thi công đang hoàn thiện"),
        (14, "Cải tạo phòng họp trực tuyến và hội trường UBND xã Nghi Dương", "Nội thất & Thiết bị", CDT_TTDVSNC_NGHIDUONG, "20.06/2026/HĐ-ND", datetime(2026, 6, 20), 380000000, None, None, None, None, None, None, None, None, "Cung cấp thiết bị âm thanh, màn hình P2.5 và nội thất"),

        # --- Cụm Đa Độ 2026 (28 công trình riêng biệt) ---
        (15, "Thi công xây dựng: Sửa chữa đột xuất các công trình cấp bách PCTT năm 2026", "Sửa chữa cấp bách", CDT_DADO, "03-QLN/2026/HĐTCXD", datetime(2026, 1, 15), 153970000, datetime(2026, 2, 8), datetime(2026, 2, 8), "1C26TYY-00000008\n08/02/2026", 146424762, 7545238, 153970000, 153970000, 0, "Đã quyết toán thanh toán"),
        (16, "Bờ phải sông Đa Độ xã Thuận Thiên. Hạng mục: Đắp bờ từ K16+800 đến K17+550", "Đắp bờ đê kè", CDT_DADO, "01-QLN/2026/HĐTCXD", datetime(2026, 1, 10), 472127000, datetime(2026, 3, 1), datetime(2026, 3, 1), "1C26TYY-00000013\n01/03/2026", 449411296, 22715704, 472127000, 472127000, 0, "Đã quyết toán thanh toán"),
        (17, "Bờ trái sông Đa Độ xã Minh Tân. Hạng mục: Đắp bờ từ K21+900 đến K22+600", "Đắp bờ đê kè", CDT_DADO, "02-QLN/2026/HĐTCXD", datetime(2026, 1, 10), 472558000, datetime(2026, 3, 1), datetime(2026, 3, 1), "1C26TYY-00000014\n01/03/2026", 449821772, 22736228, 472558000, 472558000, 0, "Đã quyết toán thanh toán"),
        (18, "Sửa chữa kênh tưới sau trạm bơm Chiềng 2", "Sửa chữa kênh tưới", CDT_DADO, "04-QLN/2026/HĐTCXD", datetime(2026, 1, 10), 398609000, datetime(2026, 3, 1), datetime(2026, 3, 1), "1C26TYY-00000015\n01/03/2026", 379414286, 19194714, 398609000, 398609000, 0, "Đã quyết toán thanh toán"),
        (19, "Phòng chống nhiễm mặn Đông Xuân 2025-2026: Đắp bờ ngăn mặn sông Đa Độ", "Ngăn mặn Đông Xuân", CDT_DADO, "01.02/2026/HĐTCXD", datetime(2026, 2, 1), 140988000, datetime(2026, 2, 3), datetime(2026, 2, 3), "1C26TYY-00000005\n03/02/2026", 134158280, 6829720, 140988000, 140988000, 0, "Đã thanh toán đủ"),
        (20, "Kênh sau cống Bát Trang: Nạo vét, đắp bờ từ cống Bát Trang đến cầu Bát Trang", "Nạo vét đắp bờ", CDT_DADO, "09.01.1/2026/HĐTCXD", datetime(2026, 1, 9), 451001000, datetime(2026, 3, 20), datetime(2026, 3, 20), "1C26TYY-00000017\n20/03/2026", 429297407, 21703593, 451001000, 451001000, 0, "Đã quyết toán thanh toán"),
        (21, "Kênh sau cống Vĩnh Khê: Nạo vét, đắp bờ từ cống Vĩnh Khê đến ngã ba sông Rế", "Nạo vét đắp bờ", CDT_DADO, "11.03/2026/HĐTCXD", datetime(2026, 3, 11), 243541000, datetime(2026, 4, 13), datetime(2026, 4, 13), "1C26TYY-00000020\n13/04/2026", 231663042, 11877958, 243541000, 243541000, 0, "Đã quyết toán thanh toán"),
        (22, "Sửa chữa cống điều tiết trên hệ thống thủy lợi Đa Độ", "Sửa chữa cống", CDT_DADO, "10.03/2026/HĐTCXD", datetime(2026, 3, 10), 185395000, datetime(2026, 4, 22), datetime(2026, 4, 22), "1C26TYY-00000022\n22/04/2026", 171662037, 13732963, 185395000, 185395000, 0, "Đã thanh toán đủ"),
        (23, "Sửa chữa, nạo vét kênh C1 tiếp nguồn trạm bơm Cẩm La", "Nạo vét kênh dẫn", CDT_DADO, "04.04/2026/HĐTCXD", datetime(2026, 4, 4), 176931000, datetime(2026, 7, 8), datetime(2026, 7, 8), "1C26TYY-00000049\n08/07/2026", 163825000, 13106000, 176931000, 176931000, 0, "Đã xuất hóa đơn quyết toán"),
        (24, "Sửa chữa, nạo vét kênh C3 tiếp nguồn trạm bơm Cẩm La", "Nạo vét kênh dẫn", CDT_DADO, "04.04.1/2026/HĐTCXD", datetime(2026, 4, 4), 190665000, datetime(2026, 7, 8), datetime(2026, 7, 8), "1C26TYY-00000050\n08/07/2026", 176541667, 14123333, 190665000, 190665000, 0, "Đã xuất hóa đơn quyết toán"),
        (25, "Sửa chữa, nạo vét kênh sau cống Đại Phong", "Nạo vét kênh dẫn", CDT_DADO, "04.04.3/2026/HĐTCXD", datetime(2026, 4, 4), 250770000, datetime(2026, 7, 8), datetime(2026, 7, 8), "1C26TYY-00000051\n08/07/2026", 232194444, 18575556, 250770000, 250770000, 0, "Đã xuất hóa đơn quyết toán"),
        (26, "Sửa chữa, nạo vét kênh Cống Muối", "Nạo vét kênh dẫn", CDT_DADO, "04.04.4/2026/HĐTCXD", datetime(2026, 4, 4), 250770000, datetime(2026, 7, 8), datetime(2026, 7, 8), "1C26TYY-00000052\n08/07/2026", 232194444, 18575556, 250770000, 250770000, 0, "Đã xuất hóa đơn quyết toán"),
        (27, "Sửa chữa, nạo vét kênh Cánh Tây", "Nạo vét kênh dẫn", CDT_DADO, "04.04.2/2026/HĐTCXD", datetime(2026, 4, 4), 295277000, datetime(2026, 7, 10), datetime(2026, 7, 10), "1C26TYY-00000053\n10/07/2026", 273404630, 21872370, 295277000, 295277000, 0, "Đã xuất hóa đơn quyết toán"),
        (28, "Nạo vét, sửa chữa kênh hút trạm bơm Văn Cao", "Nạo vét kênh hút", CDT_DADO, "03-QLN/2026/HĐTCXD", datetime(2026, 5, 10), 72055000, datetime(2026, 7, 23), datetime(2026, 7, 23), "1C26TYY-00000056\n23/07/2026", 67601931, 3631069, 71233000, 71233000, 0, "Đã quyết toán thanh toán"),
        (29, "Bờ phải sông Đa Độ xã An Quang. Hạng mục: Đắp bờ từ K19+100 đến K19+800", "Đắp bờ đê kè", CDT_DADO, "01.03/2026/HĐTCXD", datetime(2026, 3, 1), 264123000, datetime(2026, 3, 8), datetime(2026, 3, 8), "1C26TYY-00000016\n08/03/2026", 251318359, 12804641, 264123000, 264123000, 0, "Đã thanh toán đủ"),
        (30, "Bờ phải sông Đa Độ xã Kiến Hưng. Hạng mục: Đắp bờ từ K39+000 đến K39+600", "Đắp bờ đê kè", CDT_DADO, "01-QLN/2026/HĐTCXD", datetime(2026, 5, 2), 414393000, datetime(2026, 7, 30), datetime(2026, 7, 30), "1C26TYY-00000057\n30/07/2026", 403204048, 20472952, 423677000, 423677000, 0, "Đã xuất hóa đơn quyết toán"),
        (31, "Nạo vét, đắp bờ kênh Minh Tân 1; Bờ trái Đa Độ phường Phù Liễn", "Nạo vét đắp bờ", CDT_DADO, "02.1-QLN/2026/HĐTCXD", datetime(2026, 5, 10), 442631000, datetime(2026, 8, 20), datetime(2026, 8, 20), "1C26TYY-00000063\n20/08/2026", 421255476, 21375524, 442631000, 442631000, 0, "Đã xuất hóa đơn quyết toán"),
        (32, "Nạo vét, đắp bờ kênh trước cống Cổ Tiểu 2, 3", "Nạo vét đắp bờ", CDT_DADO, "02-QLN/2026/HĐTCXD", datetime(2026, 6, 1), 892654000, None, None, None, None, None, None, None, None, "Đang thi công theo tiến độ"),
        (33, "Nạo vét, đắp bờ kênh Vườn Thần 1", "Nạo vét đắp bờ", CDT_DADO, "7.6/2026/HĐTCXD", datetime(2026, 7, 11), 1244952000, None, None, None, None, None, None, None, None, "Đang thi công theo tiến độ"),
        (34, "Sửa chữa kênh tưới sau trạm bơm Bạch Câu", "Sửa chữa kênh tưới", CDT_DADO, "04-QLN/2026/HĐTCXD", datetime(2026, 7, 11), 996073000, None, None, None, None, None, None, None, None, "Đang thi công theo tiến độ"),
        (35, "Sửa chữa kênh tưới sau trạm bơm Chùa Ngoài", "Sửa chữa kênh tưới", CDT_DADO, "05-QLN/2026/HĐTCXD", datetime(2026, 7, 11), 1175602000, None, None, None, None, None, None, None, None, "Đang thi công theo tiến độ"),
        (36, "Nạo vét, đắp bờ Kênh tưới sau trạm bơm Đa Ngư", "Nạo vét đắp bờ", CDT_DADO, "06-QLN/2026/HĐTCXD", datetime(2026, 7, 11), 889352000, None, None, None, None, None, None, None, None, "Đang thi công theo tiến độ"),
        (37, "Sửa chữa kênh tưới sau trạm bơm Chiềng 2 (Tiếp nguồn đợt 2)", "Sửa chữa kênh tưới", CDT_DADO, "08.08/2026/HĐTCXD", datetime(2026, 8, 8), 404435000, datetime(2026, 8, 20), datetime(2026, 8, 20), "1C26TYY-00000061\n20/08/2026", 384878333, 19556667, 404435000, 404435000, 0, "Đã xuất hóa đơn quyết toán"),
        (38, "Sửa chữa kênh tưới sau trạm bơm Mả Giềng", "Sửa chữa kênh tưới", CDT_DADO, "09.07.MG/2026/HĐTCXD", datetime(2026, 7, 9), 1407789000, None, None, None, None, None, None, None, None, "Đang thi công theo hợp đồng"),
        (39, "Sửa chữa kênh ngăn mặn / kênh trước cống Cổ Tiểu", "Ngăn mặn đê điều", CDT_DADO, "08.08.1/2026/HĐTCXD", datetime(2026, 8, 8), 382784000, datetime(2026, 8, 20), datetime(2026, 8, 20), "1C26TYY-00000062\n20/08/2026", 364258333, 18525667, 382784000, 382784000, 0, "Đã xuất hóa đơn quyết toán"),
        (40, "Sửa chữa kênh tưới sau trạm bơm Đồng Quan", "Sửa chữa kênh tưới", CDT_DADO, "7.11/2026/HĐTCXD", datetime(2026, 7, 11), 52106200, None, None, None, None, None, None, None, None, "Đang thi công theo hợp đồng"),
        (41, "Nạo vét, đắp bờ kênh Cống Thông 2", "Nạo vét đắp bờ", CDT_DADO, "07.4/2026/HĐTCXD", datetime(2026, 7, 11), 75284700, None, None, None, None, None, None, None, None, "Đang thi công theo hợp đồng"),
        (42, "Sửa chữa kênh tưới sau TB Đại Trà 1", "Sửa chữa kênh tưới", CDT_DADO, "7.4/2026/HĐTCXD", datetime(2026, 7, 4), 1498166000, None, None, None, None, None, None, None, None, "Đang thi công theo hợp đồng"),

        # --- Các Chủ đầu tư & Khách hàng khác năm 2026 ---
        (43, "Sửa chữa, cải tạo Trường THCS Đại Thắng", "Xây lắp cải tạo", "Trường Trung học cơ sở Đại Thắng", "22.07/2026/HĐXD", datetime(2026, 7, 22), 720000000, datetime(2026, 7, 22), datetime(2026, 7, 22), "1C26TYY-00000055\n22/07/2026", 666666667, 53333333, 720000000, 720000000, 0, "Đã hoàn thành bàn giao"),
        (44, "Gia công, lắp dựng hàng rào bãi lưu giữ hàng hóa VIMC", "Cơ khí xây dựng", "CÔNG TY CỔ PHẦN VIMC LOGISTICS", "10.05/2026/HĐ-VIMC", datetime(2026, 5, 10), 342955800, datetime(2026, 5, 13), datetime(2026, 5, 13), "1C26TYY-00000030\n13/05/2026", 317551667, 25404133, 342955800, 342955800, 0, "Đã hoàn thành nghiệm thu"),
        (45, "Gia công, lắp dựng kết cấu thép và nhôm kính các dự án Rạng Đông", "Gia công lắp đặt", "CÔNG TY CỔ PHẦN XÂY DỰNG RẠNG ĐÔNG", "01.2026/HĐ-RĐ-ĐS", datetime(2026, 1, 15), 1678922684, datetime(2026, 8, 6), datetime(2026, 8, 6), "1C26TYY-Nhiều đợt\n2026", 1554558000, 124364684, 1678922684, 1678922684, 0, "Nghiệm thu thanh toán 8 đợt"),
        (46, "Cước vận chuyển cát dự án Vinhomes Golden City Dương Kinh", "Vận tải cơ giới", "CÔNG TY TNHH TMDV VÀ ĐẦU TƯ HƯNG THỊNH", "20.08/2026/HĐVC", datetime(2026, 8, 20), 60834240, datetime(2026, 8, 30), datetime(2026, 8, 30), "1C26TYY-00000067\n30/08/2026", 56328000, 4506240, 60834240, 60834240, 0, "Đoàn 7 xe ben chở cát từ bến Văn Úc"),
        (47, "Bốc xúc, vận chuyển cát bến Cống Thống - Kiến Hưng", "Vận tải cơ giới", "CÔNG TY TNHH THƯƠNG MẠI VÀ SX THÉP MẠNH HÙNG", "15.08/2026/HĐVC", datetime(2026, 8, 15), 133993656, datetime(2026, 8, 28), datetime(2026, 8, 28), "1C26TYY-00000066\n28/08/2026", 124068200, 9925456, 133993656, 133993656, 0, "Đã hoàn thành xuất HĐ"),
    ]

    for idx, p in enumerate(projects_2026, 1):
        stt, name, goi, cdt, hd_num, d_ky, gt, d_nt, d_bg, inv_str, pre, vat_amt, tot, tt_amt, no_amt, note = p
        r = 4 + idx
        ws_2026.cell(r, 1).value = stt
        ws_2026.cell(r, 2).value = name
        ws_2026.cell(r, 3).value = goi
        ws_2026.cell(r, 4).value = cdt
        ws_2026.cell(r, 5).value = hd_num
        ws_2026.cell(r, 6).value = d_ky
        ws_2026.cell(r, 7).value = gt
        ws_2026.cell(r, 13).value = d_nt
        ws_2026.cell(r, 14).value = d_bg
        ws_2026.cell(r, 15).value = inv_str
        ws_2026.cell(r, 17).value = pre
        ws_2026.cell(r, 18).value = vat_amt
        ws_2026.cell(r, 19).value = tot
        ws_2026.cell(r, 21).value = tt_amt
        ws_2026.cell(r, 22).value = no_amt
        ws_2026.cell(r, 24).value = note

    ws_2026.cell(3, 17).value = f"=SUM(Q5:Q{4 + len(projects_2026)})"
    ws_2026.cell(3, 19).value = f"=SUM(S5:S{4 + len(projects_2026)})"
    logger.info("Hoàn tất Sheet 2026: %d công trình độc lập.", len(projects_2026))

    # =============================================================
    # 2. ĐỊNH DẠNG VÀ CÂN CHỈNH FORM CELL TOÀN BỘ WORKBOOK
    # =============================================================
    header_font = Font(name="Times New Roman", size=11, bold=True, color="000000")
    header_fill = PatternFill(start_color="D9E1F2", end_color="D9E1F2", fill_type="solid")
    data_font = Font(name="Times New Roman", size=11, bold=False, color="000000")
    thin_border = Border(
        left=Side(style="thin", color="BFBFBF"),
        right=Side(style="thin", color="BFBFBF"),
        top=Side(style="thin", color="BFBFBF"),
        bottom=Side(style="thin", color="BFBFBF")
    )

    for sname in ["2026", "2025", "2024", "2023", "2022"]:
        if sname not in wb.sheetnames: continue
        ws = wb[sname]
        for r in range(1, 4):
            for c in range(1, 25):
                cell = ws.cell(r, c)
                cell.font = header_font
                cell.fill = header_fill
                cell.alignment = Alignment(horizontal="center", vertical="center", wrap_text=True)
                cell.border = thin_border

        for r in range(5, ws.max_row + 1):
            if ws.cell(r, 1).value is None and ws.cell(r, 2).value is None:
                continue
            for c in range(1, 25):
                cell = ws.cell(r, c)
                cell.font = data_font
                cell.border = thin_border
                if c in [1, 6, 8, 9, 10, 13, 14]:
                    cell.alignment = Alignment(horizontal="center", vertical="center")
                    if isinstance(cell.value, datetime):
                        cell.number_format = "DD/MM/YYYY"
                elif c in [7, 12, 16, 17, 18, 19, 20, 21, 22]:
                    cell.alignment = Alignment(horizontal="right", vertical="center")
                    if isinstance(cell.value, (int, float)):
                        cell.number_format = "#,##0"
                else:
                    cell.alignment = Alignment(horizontal="left", vertical="center", wrap_text=True)

    # Lưu trực tiếp vào file chính và backup
    wb.save(EXCEL_PRIMARY)
    logger.info("Đã lưu thành công Master Workbook tại: %s", EXCEL_PRIMARY)
    try:
        wb.save(EXCEL_BACKUP)
    except Exception as e:
        logger.warning("Không thể ghi backup: %s", e)


if __name__ == "__main__":
    build_master_workbook()
