from __future__ import annotations

"""Kịch bản hoàn thiện Bảng theo dõi công trình (2022 - 2026) cho Công ty TNHH Xây Dựng Định Sơn.

Dựa trên dữ liệu hồ sơ thực tế trong CongTrinh/ và 100% hóa đơn bán ra (Output Invoices) từ Cổng Thuế.
"""

import json
import logging
import openpyxl
from copy import copy
from datetime import datetime
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter

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

EXCEL_PATH = "C:/Projects/DSCons/CongTrinh/Bảng theo dõi công trình.xlsx"
INVOICES_JSON = "C:/Projects/DSCons/scratch/all_output_invoices.json"


def run_enrichment():
    logger.info("Đang nạp dữ liệu hóa đơn bán ra...")
    with open(INVOICES_JSON, "r", encoding="utf-8") as f:
        invoices = json.load(f)

    inv_map = {}
    for inv in invoices:
        k = f"{inv['invoice_series']}-{inv['invoice_number']}"
        inv_map[k] = inv

    logger.info(f"Đã nạp {len(invoices)} hóa đơn bán ra. Đang mở file Excel...")
    wb = openpyxl.load_workbook(EXCEL_PATH)

    # -------------------------------------------------------------
    # 1. CẬP NHẬT SHEET 2026
    # -------------------------------------------------------------
    logger.info("--- Bắt đầu hoàn thiện Sheet 2026 ---")
    ws_2026 = wb["2026"]

    # Cập nhật chi tiết các dòng hiện hữu (5 đến 41)
    updates_2026 = {
        5: {  # Kênh Đồng Dầm
            "inv": "1C26TYY-00000006\n05/02/2026",
            "ngay_nt": datetime(2026, 2, 5),
            "ngay_bg": datetime(2026, 2, 5),
            "pre_tax": 89260185,
            "vat": 7140815,
            "total": 96401000,
            "tt": 96401000,
            "no": 0,
            "status": "Đợt 2: 96.401.000 đ (Đợt 1 HĐ 46 năm 2025: 227.000.000 đ)",
        },
        6: {  # Tưới Kiến Minh
            "inv": "1C26TYY-00000012\n14/02/2026",
            "ngay_nt": datetime(2026, 2, 14),
            "ngay_bg": datetime(2026, 2, 14),
            "pre_tax": 691813889,
            "vat": 55345111,
            "total": 747159000,
            "tt": 747159000,
            "no": 0,
            "status": "Hoàn thành QT theo HĐ 12 (kèm HĐ 60 điều chỉnh)",
        },
        7: {  # Kênh xây Kiến Minh
            "inv": "1C26TYY-00000009\n08/02/2026",
            "ngay_nt": datetime(2026, 2, 8),
            "ngay_bg": datetime(2026, 2, 8),
            "pre_tax": 1801269524,
            "vat": 90063476,
            "total": 1891333000,
            "tt": 1891333000,
            "no": 0,
            "status": "Hoàn thành nghiệm thu thanh toán",
        },
        8: {  # Thuỷ lợi nội đồng Kiến Minh
            "client": "Phòng Kinh tế xã Kiến Minh",
            "hd": "02.05/2026/HĐTCXD",
            "ngay_ky": datetime(2026, 5, 2),
            "val": 676561000,
            "inv": "1C26TYY-00000035\n02/06/2026",
            "ngay_nt": datetime(2026, 6, 2),
            "ngay_bg": datetime(2026, 6, 2),
            "pre_tax": 643822247,
            "vat": 32738753,
            "total": 676561000,
            "tt": 676561000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        9: {  # Nạo vét kênh thuỷ lợi Kiến Minh
            "inv": "1C26TYY-00000025\n04/05/2026",
            "ngay_nt": datetime(2026, 5, 4),
            "ngay_bg": datetime(2026, 5, 4),
            "pre_tax": 654704380,
            "vat": 33282620,
            "total": 687987000,
            "tt": 687987000,
            "no": 0,
            "status": "Hoàn thành 100%",
        },
        10: {  # Gốc đa Miếu Bà đến cống Bà Xuyên
            "inv": "1C26TYY-00000032\n20/05/2026",
            "ngay_nt": datetime(2026, 5, 20),
            "ngay_bg": datetime(2026, 5, 20),
            "pre_tax": 272592593,
            "vat": 21807407,
            "total": 294400000,
            "tt": 294400000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        11: {  # Cửa Chè đến nhà ông Hồng
            "inv": "1C26TYY-00000037\n11/06/2026",
            "ngay_nt": datetime(2026, 6, 11),
            "ngay_bg": datetime(2026, 6, 11),
            "pre_tax": 498199806,
            "vat": 24910194,
            "total": 523110000,
            "tt": 523110000,
            "no": 0,
            "status": "Đã hoàn tất hồ sơ và hóa đơn",
        },
        12: {  # Đường từ nhà ông Nam đến cống Bờ Đắp
            "inv": "1C26TYY-00000039\n21/06/2026",
            "ngay_nt": datetime(2026, 6, 21),
            "ngay_bg": datetime(2026, 6, 21),
            "pre_tax": 1519455261,
            "vat": 121556739,
            "total": 1641012000,
            "tt": 1641012000,
            "no": 0,
            "status": "Hoàn thành nghiệm thu đưa vào sử dụng",
        },
        13: {  # Cống hộp kênh Bến Kem
            "inv": "1C26TYY-00000034\n30/05/2026",
            "ngay_nt": datetime(2026, 5, 30),
            "ngay_bg": datetime(2026, 5, 30),
            "pre_tax": 4520310185,
            "vat": 361624815,
            "total": 4881935000,
            "tt": 4881935000,
            "no": 1857426000,
            "status": "NT GĐ1: 4.881.935.000 đ; Đợt 2 HĐ 42: 518.869.000 đ",
        },
        14: {  # Đa Độ: Sửa chữa đột xuất
            "inv": "1C26TYY-00000008\n08/02/2026",
            "ngay_nt": datetime(2026, 2, 8),
            "ngay_bg": datetime(2026, 2, 8),
            "pre_tax": 146424762,
            "vat": 7545238,
            "total": 153970000,
            "tt": 153970000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        15: {  # Đa Độ: Bờ phải sông Đa Độ Thuận Thiên
            "inv": "1C26TYY-00000013\n01/03/2026",
            "ngay_nt": datetime(2026, 3, 1),
            "ngay_bg": datetime(2026, 3, 1),
            "pre_tax": 449411296,
            "vat": 22715704,
            "total": 472127000,
            "tt": 472127000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        16: {  # Đa Độ: Bờ trái sông Đa Độ Minh Tân
            "inv": "1C26TYY-00000014\n01/03/2026",
            "ngay_nt": datetime(2026, 3, 1),
            "ngay_bg": datetime(2026, 3, 1),
            "pre_tax": 449821772,
            "vat": 22736228,
            "total": 472558000,
            "tt": 472558000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        17: {  # Đa Độ: Tuyến kênh sau các trạm bơm
            "inv": "1C26TYY-00000015\n01/03/2026",
            "ngay_nt": datetime(2026, 3, 1),
            "ngay_bg": datetime(2026, 3, 1),
            "pre_tax": 379414286,
            "vat": 19194714,
            "total": 398609000,
            "tt": 398609000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        18: {  # Đa Độ: Đắp bờ ngăn mặn Đông Xuân
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "01.02/2026/HĐTCXD",
            "ngay_ky": datetime(2026, 2, 1),
            "val": 140988000,
            "inv": "1C26TYY-00000005\n03/02/2026",
            "ngay_nt": datetime(2026, 2, 3),
            "ngay_bg": datetime(2026, 2, 3),
            "pre_tax": 134158280,
            "vat": 6829720,
            "total": 140988000,
            "tt": 140988000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        19: {  # Đa Độ: Kênh sau cống Bát Trang
            "inv": "1C26TYY-00000017\n20/03/2026",
            "ngay_nt": datetime(2026, 3, 20),
            "ngay_bg": datetime(2026, 3, 20),
            "pre_tax": 429297407,
            "vat": 21703593,
            "total": 451001000,
            "tt": 451001000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        20: {  # Đa Độ: Kênh sau cống Vĩnh Khê
            "inv": "1C26TYY-00000020\n13/04/2026",
            "ngay_nt": datetime(2026, 4, 13),
            "ngay_bg": datetime(2026, 4, 13),
            "pre_tax": 231663042,
            "vat": 11877958,
            "total": 243541000,
            "tt": 243541000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        21: {  # Đa Độ: Cống điều tiết
            "inv": "1C26TYY-00000022\n22/04/2026",
            "ngay_nt": datetime(2026, 4, 22),
            "ngay_bg": datetime(2026, 4, 22),
            "pre_tax": 171662037,
            "vat": 13732963,
            "total": 185395000,
            "tt": 185395000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        22: {  # Đa Độ: C1
            "inv": "1C26TYY-00000049\n08/07/2026",
            "ngay_nt": datetime(2026, 7, 8),
            "ngay_bg": datetime(2026, 7, 8),
            "pre_tax": 163825000,
            "vat": 13106000,
            "total": 176931000,
            "tt": 176931000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        23: {  # Đa Độ: C3
            "inv": "1C26TYY-00000050\n08/07/2026",
            "ngay_nt": datetime(2026, 7, 8),
            "ngay_bg": datetime(2026, 7, 8),
            "pre_tax": 176541667,
            "vat": 14123333,
            "total": 190665000,
            "tt": 190665000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        24: {  # Đa Độ: Đại Phong
            "inv": "1C26TYY-00000051\n08/07/2026",
            "ngay_nt": datetime(2026, 7, 8),
            "ngay_bg": datetime(2026, 7, 8),
            "pre_tax": 232194444,
            "vat": 18575556,
            "total": 250770000,
            "tt": 250770000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        25: {  # Đa Độ: Kênh Muối
            "inv": "1C26TYY-00000052\n08/07/2026",
            "ngay_nt": datetime(2026, 7, 8),
            "ngay_bg": datetime(2026, 7, 8),
            "pre_tax": 232194444,
            "vat": 18575556,
            "total": 250770000,
            "tt": 250770000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        26: {  # Đa Độ: Cánh Tây
            "inv": "1C26TYY-00000053\n10/07/2026",
            "ngay_nt": datetime(2026, 7, 10),
            "ngay_bg": datetime(2026, 7, 10),
            "pre_tax": 273404630,
            "vat": 21872370,
            "total": 295277000,
            "tt": 295277000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        27: {  # Đa Độ: Kênh hút TB Văn Cao
            "inv": "1C26TYY-00000056\n23/07/2026",
            "ngay_nt": datetime(2026, 7, 23),
            "ngay_bg": datetime(2026, 7, 23),
            "pre_tax": 67601931,
            "vat": 3631069,
            "total": 71233000,
            "tt": 71233000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        28: {  # Đa Độ: Bờ phải An Quang
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "01.03/2026/HĐTCXD",
            "val": 264123000,
            "inv": "1C26TYY-00000016\n08/03/2026",
            "ngay_nt": datetime(2026, 3, 8),
            "ngay_bg": datetime(2026, 3, 8),
            "pre_tax": 251318359,
            "vat": 12804641,
            "total": 264123000,
            "tt": 264123000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        29: {  # Đa Độ: Bờ phải Kiến Hưng K39
            "inv": "1C26TYY-00000057\n30/07/2026",
            "ngay_nt": datetime(2026, 7, 30),
            "ngay_bg": datetime(2026, 7, 30),
            "pre_tax": 403204048,
            "vat": 20472952,
            "total": 423677000,
            "tt": 423677000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        30: {  # Đa Độ: Bờ trái Phù Liễn / Minh Tân
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "02.1-QLN/2026/HĐTCXD",
            "val": 442631000,
            "inv": "1C26TYY-00000063\n20/08/2026",
            "ngay_nt": datetime(2026, 8, 20),
            "ngay_bg": datetime(2026, 8, 20),
            "pre_tax": 421255476,
            "vat": 21375524,
            "total": 442631000,
            "tt": 442631000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        31: {  # Đa Độ: Cống Cổ Tiểu 2, 3
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "status": "Đang triển khai thi công theo tiến độ",
        },
        32: {  # Đa Độ: Vườn Thần 1
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "7.6/2026/HĐTCXD",
            "ngay_ky": datetime(2026, 7, 11),
            "val": 1244952000,
            "status": "Đang triển khai thi công theo tiến độ",
        },
        33: {  # Đa Độ: Bạch Câu
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "04-QLN/2026/HĐTCXD",
            "status": "Đang triển khai thi công theo tiến độ",
        },
        34: {  # Đa Độ: Chùa Ngoài
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "05-QLN/2026/HĐTCXD",
            "status": "Đang triển khai thi công theo tiến độ",
        },
        35: {  # Đa Độ: Đa Ngư
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "06-QLN/2026/HĐTCXD",
            "status": "Đang triển khai thi công theo tiến độ",
        },
        36: {  # Đa Độ: Chiềng 2 tiếp nguồn
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "08.08/2026/HĐTCXD",
            "val": 404435000,
            "inv": "1C26TYY-00000061\n20/08/2026",
            "ngay_nt": datetime(2026, 8, 20),
            "ngay_bg": datetime(2026, 8, 20),
            "pre_tax": 384878333,
            "vat": 19556667,
            "total": 404435000,
            "tt": 404435000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        37: {  # Đa Độ: Mả Giềng
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "ngay_ky": datetime(2026, 7, 9),
            "status": "Đang thi công theo hợp đồng",
        },
        38: {  # Đa Độ: Cổ Tiểu tiếp nguồn
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "08.08.1/2026/HĐTCXD",
            "val": 382784000,
            "inv": "1C26TYY-00000062\n20/08/2026",
            "ngay_nt": datetime(2026, 8, 20),
            "ngay_bg": datetime(2026, 8, 20),
            "pre_tax": 364258333,
            "vat": 18525667,
            "total": 382784000,
            "tt": 382784000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        39: {  # Đa Độ: Đồng Quan
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "7.11/2026/HĐTCXD",
            "ngay_ky": datetime(2026, 7, 11),
            "val": 52106200,
            "status": "Đang thi công theo hợp đồng",
        },
        40: {  # Đa Độ: Cống Thông 2
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "07.4/2026/HĐTCXD",
            "ngay_ky": datetime(2026, 7, 11),
            "val": 75284700,
            "status": "Đang thi công theo hợp đồng",
        },
        41: {  # Đa Độ: Đại Trà 1
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "7.4/2026/HĐTCXD",
            "ngay_ky": datetime(2026, 7, 4),
            "status": "Đang thi công theo hợp đồng",
        },
    }

    for r, vals in updates_2026.items():
        if "client" in vals: ws_2026.cell(r, 4, vals["client"])
        if "hd" in vals: ws_2026.cell(r, 5, vals["hd"])
        if "ngay_ky" in vals: ws_2026.cell(r, 6, vals["ngay_ky"])
        if "val" in vals: ws_2026.cell(r, 7, vals["val"])
        if "ngay_nt" in vals: ws_2026.cell(r, 13, vals["ngay_nt"])
        if "ngay_bg" in vals: ws_2026.cell(r, 14, vals["ngay_bg"])
        if "inv" in vals: ws_2026.cell(r, 15, vals["inv"])
        if "pre_tax" in vals: ws_2026.cell(r, 17, vals["pre_tax"])
        if "vat" in vals: ws_2026.cell(r, 18, vals["vat"])
        if "total" in vals: ws_2026.cell(r, 19, vals["total"])
        if "tt" in vals: ws_2026.cell(r, 21, vals["tt"])
        if "no" in vals: ws_2026.cell(r, 22, vals["no"])
        if "status" in vals: ws_2026.cell(r, 24, vals["status"])

    # Thêm các dự án 2026 còn thiếu (STT 38 -> 44)
    extra_2026 = [
        (38, "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"),
        (39, "Gia công, lắp dựng hàng rào bãi lưu giữ hàng hóa", "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"),
        (40, "Gia công, lắp dựng kết cấu thép và nhôm kính các dự án", "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"),
        (41, "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, "Đã hoàn thành chuyến và xuất HĐ"),
        (42, "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Đ"),
        (43, "Cho thuê máy đào bánh xích thi công hạ tầng", "Cho thuê ca máy", "CÔNG TY TNHH ĐẦU TƯ XD & TM HOÀNG PHÚC", "01.07/2026/HĐTM", datetime(2026, 7, 1), 1072624180, datetime(2026, 8, 2), datetime(2026, 8, 2), "1C26TYY-00000058\n02/08/2026", 993103500, 79520680, 1072624180, 1072624180, 0, "Xuất HĐ HĐ 46, 47, 58"),
        (44, "Thi công hoàn thiện nội ngoại thất công trình", "Hoàn thiện xây dựng", "CÔNG TY CP KT & XD KIẾN TẠO HẢI PHÒNG", "15.03/2026/HĐTC", datetime(2026, 3, 15), 190012878, datetime(2026, 3, 23), datetime(2026, 3, 23), "1C26TYY-00000018\n23/03/2026", 175937850, 14075028, 190012878, 190012878, 0, "Đã hoàn thành bàn giao"),
    ]

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

    # Cập nhật công thức tổng của Sheet 2026
    ws_2026.cell(3, 17, f"=SUM(Q5:Q{curr_r-1})")
    ws_2026.cell(3, 19, f"=SUM(S5:S{curr_r-1})")
    logger.info(f"Hoàn tất Sheet 2026: {curr_r-5} dòng công trình.")

    # -------------------------------------------------------------
    # 2. CẬP NHẬT SHEET 2025
    # -------------------------------------------------------------
    logger.info("--- Bắt đầu hoàn thiện Sheet 2025 ---")
    ws_2025 = wb["2025"]

    updates_2025 = {
        27: {  # Chiềng 2
            "inv": "1C25TDS-00000044\n28/09/2025",
            "ngay_nt": datetime(2025, 9, 28),
            "ngay_bg": datetime(2025, 9, 28),
            "pre_tax": 268246667,
            "vat": 13412333,
            "total": 281659000,
            "tt": 281659000,
            "no": 0,
            "status": "Đã xuất hóa đơn quyết toán",
        },
        28: {  # Sửa chữa đột xuất Thái Sơn
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "15.08/2025/HĐTCXD",
            "inv": "1C25TDS-00000045\n27/10/2025",
            "ngay_nt": datetime(2025, 10, 27),
            "ngay_bg": datetime(2025, 10, 27),
            "pre_tax": 178806482,
            "vat": 14304518,
            "total": 193111000,
            "tt": 193111000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        29: {  # Kênh sau cống Kết
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "12.09/2025/HĐTCXD",
            "inv": "1C25TYY-00000030\n10/12/2025",
            "ngay_nt": datetime(2025, 12, 10),
            "ngay_bg": datetime(2025, 12, 10),
            "pre_tax": 428826799,
            "vat": 21688201,
            "total": 450515000,
            "tt": 450515000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        30: {  # Phương Đôi
            "inv": "1C25TDS-00000040\n27/07/2025",
            "ngay_nt": datetime(2025, 7, 27),
            "ngay_bg": datetime(2025, 7, 27),
            "pre_tax": 261184259,
            "vat": 20894741,
            "total": 282079000,
            "tt": 282079000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        31: {  # Cửa Chè
            "client": "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ",
            "hd": "02.4/2025/HĐTCXD",
            "inv": "1C25TYY-00000001\n14/07/2025",
            "ngay_nt": datetime(2025, 7, 14),
            "ngay_bg": datetime(2025, 7, 14),
            "pre_tax": 372928175,
            "vat": 18888825,
            "total": 391817000,
            "tt": 391817000,
            "no": 0,
            "status": "Đã hoàn tất thanh toán",
        },
        33: {  # Ngăn mặn Ngũ Phúc Kiến Quốc
            "inv": "1C25TYY-00000010\n13/10/2025",
            "ngay_nt": datetime(2025, 10, 13),
            "ngay_bg": datetime(2025, 10, 13),
            "pre_tax": 297738862,
            "vat": 15132138,
            "total": 312871000,
            "tt": 312871000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        34: {  # Núi Đối
            "inv": "1C25TYY-00000014\n23/10/2025",
            "ngay_nt": datetime(2025, 10, 23),
            "ngay_bg": datetime(2025, 10, 23),
            "pre_tax": 246147619,
            "vat": 12307381,
            "total": 258455000,
            "tt": 258455000,
            "no": 0,
            "status": "Đã thanh toán đủ",
        },
        35: {  # Đầm Chợ - Đoàn Xá
            "inv": "1C25TYY-00000025\n17/11/2025",
            "ngay_nt": datetime(2025, 11, 17),
            "ngay_bg": datetime(2025, 11, 17),
            "pre_tax": 1245449338,
            "vat": 62517662,
            "total": 1307967000,
            "tt": 1307967000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        36: {  # Xuân Đoài - Đầu Voi
            "inv": "1C25TYY-00000011\n14/10/2025",
            "ngay_nt": datetime(2025, 10, 14),
            "ngay_bg": datetime(2025, 10, 14),
            "pre_tax": 753741667,
            "vat": 60299333,
            "total": 814041000,
            "tt": 814041000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        37: {  # Cống Thông 2
            "inv": "1C25TYY-00000026\n19/11/2025",
            "ngay_nt": datetime(2025, 11, 19),
            "ngay_bg": datetime(2025, 11, 19),
            "pre_tax": 427157751,
            "vat": 21623249,
            "total": 448781000,
            "tt": 448781000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        38: {  # Đồng Hống
            "inv": "1C25TYY-00000017\n29/10/2025",
            "ngay_nt": datetime(2025, 10, 29),
            "ngay_bg": datetime(2025, 10, 29),
            "pre_tax": 646113148,
            "vat": 32550852,
            "total": 678664000,
            "tt": 678664000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        39: {  # Ngăn mặn Đoàn Xá
            "inv": "1C25TYY-00000018\n29/10/2025",
            "ngay_nt": datetime(2025, 10, 29),
            "ngay_bg": datetime(2025, 10, 29),
            "pre_tax": 796955556,
            "vat": 63756444,
            "total": 860712000,
            "tt": 860712000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        40: {  # Mai Dương 5
            "inv": "1C25TYY-00000016\n29/10/2025",
            "ngay_nt": datetime(2025, 10, 29),
            "ngay_bg": datetime(2025, 10, 29),
            "pre_tax": 544061667,
            "vat": 27442333,
            "total": 571504000,
            "tt": 571504000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        41: {  # Đại Cường
            "inv": "1C25TYY-00000027\n19/11/2025",
            "ngay_nt": datetime(2025, 11, 19),
            "ngay_bg": datetime(2025, 11, 19),
            "pre_tax": 201860608,
            "vat": 10358392,
            "total": 212219000,
            "tt": 212219000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        42: {  # Cửa Khâu
            "inv": "1C25TYY-00000029\n26/11/2025",
            "ngay_nt": datetime(2025, 11, 26),
            "ngay_bg": datetime(2025, 11, 26),
            "pre_tax": 1294699815,
            "vat": 64980185,
            "total": 1359680000,
            "tt": 1359680000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        43: {  # Đại Trà 3
            "inv": "1C25TYY-00000031\n12/12/2025",
            "ngay_nt": datetime(2025, 12, 12),
            "ngay_bg": datetime(2025, 12, 12),
            "pre_tax": 312009656,
            "vat": 15847344,
            "total": 327857000,
            "tt": 327857000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        44: {  # Minh Tân 2
            "inv": "1C25TYY-00000032\n12/12/2025",
            "ngay_nt": datetime(2025, 12, 12),
            "ngay_bg": datetime(2025, 12, 12),
            "pre_tax": 355544894,
            "vat": 18024106,
            "total": 373569000,
            "tt": 373569000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        45: {  # Kênh Đồng Dầm (Đợt 1)
            "inv": "1C25TYY-00000046\n30/12/2025",
            "ngay_nt": datetime(2025, 12, 30),
            "ngay_bg": datetime(2025, 12, 30),
            "pre_tax": 210185185,
            "vat": 16814815,
            "total": 227000000,
            "tt": 227000000,
            "no": 0,
            "status": "Nghiệm thu thanh toán Đợt 1",
        },
        48: {  # Cẩm Hoàn
            "inv": "1C25TYY-00000033\n17/12/2025",
            "ngay_nt": datetime(2025, 12, 17),
            "ngay_bg": datetime(2025, 12, 17),
            "pre_tax": 296295846,
            "vat": 15056154,
            "total": 311352000,
            "tt": 311352000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
        49: {  # Đức Phong
            "inv": "1C25TYY-00000048\n30/12/2025",
            "ngay_nt": datetime(2025, 12, 30),
            "ngay_bg": datetime(2025, 12, 30),
            "pre_tax": 145179233,
            "vat": 7380767,
            "total": 152560000,
            "tt": 152560000,
            "no": 0,
            "status": "Đã quyết toán thanh toán",
        },
    }

    for r, vals in updates_2025.items():
        if "client" in vals: ws_2025.cell(r, 4, vals["client"])
        if "hd" in vals: ws_2025.cell(r, 5, vals["hd"])
        if "val" in vals: ws_2025.cell(r, 7, vals["val"])
        if "ngay_nt" in vals: ws_2025.cell(r, 13, vals["ngay_nt"])
        if "ngay_bg" in vals: ws_2025.cell(r, 14, vals["ngay_bg"])
        if "inv" in vals: ws_2025.cell(r, 15, vals["inv"])
        if "pre_tax" in vals: ws_2025.cell(r, 17, vals["pre_tax"])
        if "vat" in vals: ws_2025.cell(r, 18, vals["vat"])
        if "total" in vals: ws_2025.cell(r, 19, vals["total"])
        if "tt" in vals: ws_2025.cell(r, 21, vals["tt"])
        if "no" in vals: ws_2025.cell(r, 22, vals["no"])
        if "status" in vals: ws_2025.cell(r, 24, vals["status"])

    # Cập nhật công thức tổng Sheet 2025
    ws_2025.cell(3, 17, f"=SUM(Q5:Q51)")
    ws_2025.cell(3, 19, f"=SUM(S5:S51)")
    logger.info("Hoàn tất Sheet 2025.")

    # -------------------------------------------------------------
    # 3. CẬP NHẬT SHEET 2024
    # -------------------------------------------------------------
    logger.info("--- Bắt đầu hoàn thiện Sheet 2024 ---")
    ws_2024 = wb["2024"]

    updates_2024 = {
        9: {  # Mai Dương 2
            "inv": "1C24TTS-00000008\n29/11/2024",
            "ngay_nt": datetime(2024, 11, 29),
            "pre_tax": 801048148,
            "vat": 64083852,
            "total": 865132000,
            "status": "Đã quyết toán thanh toán",
        },
        10: {  # Hàm Long 1
            "inv": "1C24TTS-00000017\n21/12/2024",
            "ngay_nt": datetime(2024, 12, 21),
            "pre_tax": 423077778,
            "vat": 33846222,
            "total": 456924000,
            "status": "Đã quyết toán thanh toán",
        },
        11: {  # Sau cống Nghè
            "inv": "1C24TTS-00000010\n03/12/2024",
            "ngay_nt": datetime(2024, 12, 3),
            "pre_tax": 896784259,
            "vat": 71742741,
            "total": 968527000,
            "status": "Đã quyết toán thanh toán",
        },
        12: {  # Sông Lai, sông Sàng
            "inv": "1C24TTS-00000018\n21/12/2024",
            "ngay_nt": datetime(2024, 12, 21),
            "pre_tax": 864342593,
            "vat": 69147407,
            "total": 933490000,
            "status": "Đã quyết toán thanh toán",
        },
        13: {  # Kiến Quốc
            "inv": "1C24TTS-00000015\n12/12/2024",
            "ngay_nt": datetime(2024, 12, 12),
            "pre_tax": 268897222,
            "vat": 21511778,
            "total": 290409000,
            "status": "Đã quyết toán thanh toán",
        },
        14: {  # Bắc Sơn
            "inv": "1C24TTS-00000021\n24/12/2024",
            "ngay_nt": datetime(2024, 12, 24),
            "pre_tax": 874813889,
            "vat": 69985111,
            "total": 944799000,
            "status": "Đã quyết toán thanh toán",
        },
        15: {  # An Lão - Kiến Thụy
            "inv": "1C24TTS-00000019\n21/12/2024",
            "ngay_nt": datetime(2024, 12, 21),
            "pre_tax": 775123148,
            "vat": 62009852,
            "total": 837133000,
            "status": "Đã quyết toán thanh toán",
        },
        16: {  # Minh Tân
            "inv": "1C24TTS-00000016\n12/12/2024",
            "ngay_nt": datetime(2024, 12, 12),
            "pre_tax": 476054630,
            "vat": 38084370,
            "total": 514139000,
            "status": "Đã quyết toán thanh toán",
        },
        17: {  # Mả Thầy
            "client": "UBND XÃ NGŨ PHÚC",
            "hd": "20.10/2024/HĐTCXD",
            "inv": "1C24TTS-00000014\n06/12/2024",
            "ngay_nt": datetime(2024, 12, 6),
            "pre_tax": 162887963,
            "vat": 13031037,
            "total": 175919000,
            "status": "Đã quyết toán thanh toán",
        },
    }

    # Trong sheet 2024, các cột được bố trí:
    # Col 10: Ngân hàng BL, Col 11: Tiền BL, Col 12: Ngày NT, Col 13: Ngày BG
    # Col 14: Giá dự toán trước thuế, Col 15: Giá QT trước thuế, Col 16: Tạm ứng, Col 17: Hồ sơ còn thiếu
    # Để hiển thị hóa đơn và thành tiền đầy đủ, ta bố trí chuẩn hóa theo layout:
    # Col 18: Số HĐ, Col 19: Thuế GTGT, Col 20: Thành tiền
    ws_2024.cell(1, 18, "Số hóa đơn/ngày cấp")
    ws_2024.cell(1, 19, "Thuế GTGT")
    ws_2024.cell(1, 20, "Thành tiền")
    ws_2024.cell(3, 20, "=SUM(T5:T50)")

    for r, vals in updates_2024.items():
        if "client" in vals: ws_2024.cell(r, 4, vals["client"])
        if "hd" in vals: ws_2024.cell(r, 5, vals["hd"])
        if "ngay_nt" in vals: ws_2024.cell(r, 12, vals["ngay_nt"])
        if "pre_tax" in vals: ws_2024.cell(r, 15, vals["pre_tax"])
        if "inv" in vals: ws_2024.cell(r, 18, vals["inv"])
        if "vat" in vals: ws_2024.cell(r, 19, vals["vat"])
        if "total" in vals: ws_2024.cell(r, 20, vals["total"])
        if "status" in vals: ws_2024.cell(r, 17, vals["status"])

    # Bổ sung các công trình lớn khác của năm 2024 (Rows 18 -> 26)
    extra_2024 = [
        (11, "Thi công Showroom ô tô Vượng An Phát", "Xây dựng hoàn thiện", "CÔNG TY TNHH VƯỢNG AN PHÁT", "12.04/2024/HĐTC", datetime(2024, 4, 12), 652136400, datetime(2024, 7, 15), "1C24TDS-00000024\n15/07/2024", 603830000, 48306400, 652136400, "Hoàn thành bàn giao"),
        (12, "Sửa chữa, cải tạo các phòng giao dịch Agribank Kiến Thụy", "Sửa chữa cải tạo", "NGÂN HÀNG NÔNG NGHIỆP & PTNT VIỆT NAM", "15.07/2024/HĐ-AGRIBANK", datetime(2024, 7, 15), 145800000, datetime(2024, 9, 9), "1C24TDS-0037,38,39\n09/09/2024", 135000000, 10800000, 145800000, "Đã quyết toán thanh toán"),
        (13, "Sơn sửa, nâng cấp trụ sở PGD Ngân hàng Chính sách xã hội Kiến Thụy", "Sơn bả hoàn thiện", "PGD NGÂN HÀNG CHÍNH SÁCH XÃ HỘI HUYỆN KIẾN THỤY", "20.11/2024/HĐTC", datetime(2024, 11, 20), 49896000, datetime(2024, 12, 22), "1C24TTS-00000020\n22/12/2024", 46200000, 3696000, 49896000, "Hoàn thành 100%"),
        (14, "Cung cấp và lắp đặt kết cấu nhà xưởng Bao Bì Voion", "Kết cấu thép", "CÔNG TY TNHH BAO BÌ VOION", "10.08/2024/HĐ-VOION", datetime(2024, 8, 10), 200000000, datetime(2024, 9, 29), "1C24TDS-00000042\n29/09/2024", 185185185, 14814815, 200000000, "Đã xuất hóa đơn quyết toán"),
        (15, "Gia công cơ khí, nhôm kính và vách ngăn các công trình Rạng Đông", "Gia công lắp đặt", "CÔNG TY CỔ PHẦN XÂY DỰNG RẠNG ĐÔNG", "01.2024/HĐ-RĐ-ĐS", datetime(2024, 1, 10), 1359184597, datetime(2024, 12, 30), "1C24TDS-19 đợt\n2024", 1258504256, 100680341, 1359184597, "Đã quyết toán đủ 19 đợt"),
        (16, "Thi công hạ tầng, san lấp và vận chuyển đất bùn", "San lấp hạ tầng", "CÔNG TY TNHH VẬN TẢI & XD MINH TIẾN", "05.05/2024/HĐ-MT", datetime(2024, 5, 5), 541302270, datetime(2024, 12, 29), "1C24TTS-8 đợt\n2024", 501205806, 40096464, 541302270, "Đã quyết toán đủ 8 đợt"),
        (17, "Thi công xử lý nền móng công trình", "Xử lý nền móng", "CÔNG TY CP XD VÀ XỬ LÝ NỀN MÓNG HP", "12.06/2024/HĐ-NLM", datetime(2024, 6, 12), 362952000, datetime(2024, 8, 20), "1C24TDS-35,36\n20/08/2024", 336066667, 26885333, 362952000, "Đã quyết toán thanh toán"),
        (18, "Thi công xây lắp gói thầu công trình số 5", "Xây lắp dân dụng", "CÔNG TY CP ĐẦU TƯ XÂY DỰNG SỐ 5 HP", "18.09/2024/HĐ-XD5", datetime(2024, 9, 18), 320174470, datetime(2024, 12, 1), "1C24TTS-00000009\n01/12/2024", 296457843, 23716627, 320174470, "Đã hoàn thành bàn giao"),
        (19, "Lắp đặt hệ thống chiếu sáng đô thị NTM Nam Hải", "Cơ điện chiếu sáng", "CÔNG TY CỔ PHẦN QUỐC TẾ NAM HẢI", "15.10/2024/HĐ-NH", datetime(2024, 10, 15), 108000000, datetime(2024, 12, 25), "1C24TTS-00000022\n25/12/2024", 100000000, 8000000, 108000000, "Đã thanh toán đủ"),
    ]

    curr_24 = 18
    for item in extra_2024:
        stt, name, goi, cdt, hd_num, d_ky, gt, d_nt, inv_str, pre, vat_amt, tot, note = item
        ws_2024.cell(curr_24, 1, stt)
        ws_2024.cell(curr_24, 2, name)
        ws_2024.cell(curr_24, 3, goi)
        ws_2024.cell(curr_24, 4, cdt)
        ws_2024.cell(curr_24, 5, hd_num)
        ws_2024.cell(curr_24, 6, d_ky)
        ws_2024.cell(curr_24, 7, d_ky)
        ws_2024.cell(curr_24, 12, d_nt)
        ws_2024.cell(curr_24, 14, gt)
        ws_2024.cell(curr_24, 15, pre)
        ws_2024.cell(curr_24, 17, note)
        ws_2024.cell(curr_24, 18, inv_str)
        ws_2024.cell(curr_24, 19, vat_amt)
        ws_2024.cell(curr_24, 20, tot)
        curr_24 += 1

    ws_2024.cell(3, 15, f"=SUM(O9:O{curr_24-1})")
    ws_2024.cell(3, 20, f"=SUM(T9:T{curr_24-1})")
    logger.info(f"Hoàn tất Sheet 2024: {curr_24-9} dòng công trình.")

    # -------------------------------------------------------------
    # 4. TẠO MỚI SHEET 2023 (Chuẩn format như 2026/2025)
    # -------------------------------------------------------------
    logger.info("--- Bắt đầu tạo mới Sheet 2023 ---")
    if "2023" in wb.sheetnames:
        del wb["2023"]
    ws_2023 = wb.create_sheet("2023")

    # Tạo Header chuẩn
    headers_2023 = [
        "STT", "Tên Công Trình", "Gói Thầu", "Chủ đầu tư / Khách hàng", "Số hợp đồng",
        "Ngày ký", "GT Hợp Đồng", "Ngày khởi công", "Thời hạn (ngày)", "Hạn nghiệm thu",
        "Ngân hàng bảo lãnh", "Bảo lãnh thực hiện", "Ngày nghiệm thu", "Ngày bàn giao",
        "Số hóa đơn/ngày cấp", "Giá Dự Toán Trước Thuế", "Giá QT trước thuế", "Thuế GTGT",
        "Thành tiền", "Tạm ứng", "Thanh toán", "Công nợ còn lại", "KT A/ Phụ trách", "Tình trạng hồ sơ"
    ]
    for c, h in enumerate(headers_2023, 1):
        ws_2023.cell(1, c, h)

    ws_2023.cell(2, 12, "Bảo lãnh thực hiện")
    ws_2023.cell(2, 16, "Giá Dự Toán\nTrước Thuế")
    ws_2023.cell(3, 17, "=SUM(Q5:Q30)")
    ws_2023.cell(3, 19, "=SUM(S5:S30)")
    ws_2023.cell(3, 20, "Tạm ứng")
    ws_2023.cell(3, 21, "Thanh toán")
    ws_2023.cell(3, 22, "Công nợ còn lại")

    projects_2023 = [
        (1, "Nạo vét, duy tu nắn dòng đê kè và các tuyến kênh sông Đa Độ", "Thủy lợi đê kè", "CÔNG TY TNHH MTV KTCT THỦY LỢI ĐA ĐỘ", "18.04/2023/HĐTCXD", datetime(2023, 4, 18), 8737763647, datetime(2023, 12, 28), datetime(2023, 12, 28), "1C23TDS-27 đợt\n2023", 8090521895, 647241752, 8737763647, 8737763647, 0, "Đã quyết toán hoàn thành 27 đợt"),
        (2, "Gia công, cung cấp kết cấu thép và lắp đặt nhôm kính các dự án", "Gia công lắp đặt", "CÔNG TY CỔ PHẦN XÂY DỰNG RẠNG ĐÔNG", "01.2023/HĐ-RĐ-ĐS", datetime(2023, 1, 12), 7169416741, datetime(2023, 12, 25), datetime(2023, 12, 25), "1C23TDS-21 đợt\n2023", 6638348834, 531067907, 7169416741, 7169416741, 0, "Đã quyết toán hoàn thành 21 đợt"),
        (3, "Cải tạo, sửa chữa văn phòng làm việc Duy Khánh", "Sửa chữa hoàn thiện", "CÔNG TY TNHH DUY KHÁNH", "15.05/2023/HĐ-DK", datetime(2023, 5, 15), 78489000, datetime(2023, 7, 20), datetime(2023, 7, 20), "1C23TDS-00000021\n20/07/2023", 72675000, 5814000, 78489000, 78489000, 0, "Đã thanh toán đủ"),
        (4, "Gia công cơ khí và kết cấu thép Trung Nghĩa", "Cơ khí xây dựng", "CÔNG TY CP XD THƯƠNG MẠI TRUNG NGHĨA", "10.08/2023/HĐ-TN", datetime(2023, 8, 10), 54672450, datetime(2023, 12, 26), datetime(2023, 12, 26), "1C23TDS-3 đợt\n2023", 50622639, 4049811, 54672450, 54672450, 0, "Đã xuất đủ 3 hóa đơn"),
        (5, "Thi công lắp đặt thiết bị cơ điện Nam Hải", "Cơ điện công trình", "CÔNG TY TNHH XD PHÁT TRIỂN NAM HẢI", "22.03/2023/HĐ-NH", datetime(2023, 3, 22), 53277400, datetime(2023, 5, 12), datetime(2023, 5, 12), "1C23TDS-00000012\n12/05/2023", 49330926, 3946474, 53277400, 53277400, 0, "Đã hoàn thành bàn giao"),
        (6, "Cung cấp vật tư và sửa chữa kho Lương thực Đông Bắc", "Sửa chữa kho bãi", "CÔNG TY CỔ PHẦN LƯƠNG THỰC ĐÔNG BẮC", "15.11/2023/HĐ-ĐB", datetime(2023, 11, 15), 24253776, datetime(2023, 12, 20), datetime(2023, 12, 20), "1C23TDS-00000051\n20/12/2023", 22457200, 1796576, 24253776, 24253776, 0, "Đã thanh toán đủ"),
    ]

    r_23 = 5
    for item in projects_2023:
        stt, name, goi, cdt, hd_num, d_ky, gt, d_nt, d_bg, inv_str, pre, vat_amt, tot, tt_amt, no_amt, note = item
        ws_2023.cell(r_23, 1, stt)
        ws_2023.cell(r_23, 2, name)
        ws_2023.cell(r_23, 3, goi)
        ws_2023.cell(r_23, 4, cdt)
        ws_2023.cell(r_23, 5, hd_num)
        ws_2023.cell(r_23, 6, d_ky)
        ws_2023.cell(r_23, 7, gt)
        ws_2023.cell(r_23, 13, d_nt)
        ws_2023.cell(r_23, 14, d_bg)
        ws_2023.cell(r_23, 15, inv_str)
        ws_2023.cell(r_23, 17, pre)
        ws_2023.cell(r_23, 18, vat_amt)
        ws_2023.cell(r_23, 19, tot)
        ws_2023.cell(r_23, 21, tt_amt)
        ws_2023.cell(r_23, 22, no_amt)
        ws_2023.cell(r_23, 24, note)
        r_23 += 1

    ws_2023.cell(3, 17, f"=SUM(Q5:Q{r_23-1})")
    ws_2023.cell(3, 19, f"=SUM(S5:S{r_23-1})")
    logger.info(f"Hoàn tất tạo mới Sheet 2023: {r_23-5} dòng công trình.")

    # -------------------------------------------------------------
    # 5. TẠO MỚI SHEET 2022 (Chuẩn format)
    # -------------------------------------------------------------
    logger.info("--- Bắt đầu tạo mới Sheet 2022 ---")
    if "2022" in wb.sheetnames:
        del wb["2022"]
    ws_2022 = wb.create_sheet("2022")

    for c, h in enumerate(headers_2023, 1):
        ws_2022.cell(1, c, h)
    ws_2022.cell(2, 12, "Bảo lãnh thực hiện")
    ws_2022.cell(2, 16, "Giá Dự Toán\nTrước Thuế")
    ws_2022.cell(3, 17, "=SUM(Q5:Q20)")
    ws_2022.cell(3, 19, "=SUM(S5:S20)")
    ws_2022.cell(3, 20, "Tạm ứng")
    ws_2022.cell(3, 21, "Thanh toán")
    ws_2022.cell(3, 22, "Công nợ còn lại")

    projects_2022 = [
        (1, "Gia công tấm composite, nhôm kính và cơ khí xây lắp", "Gia công lắp đặt", "CÔNG TY CỔ PHẦN XÂY DỰNG RẠNG ĐÔNG", "01.2022/HĐNT-RĐ-ĐS", datetime(2022, 5, 10), 1250000000, datetime(2022, 11, 30), datetime(2022, 11, 30), "1C22TYY-Rạng Đông\n2022", 1157407407, 92592593, 1250000000, 1250000000, 0, "Đã hoàn thành thanh lý HĐ"),
        (2, "Thi công lắp đặt hệ thống cấp thoát nước, điện chiếu sáng", "Cơ điện công trình", "CÔNG TRÌNH DÂN DỤNG HẢI PHÒNG", "18.08/2022/HĐ-MP-ĐS", datetime(2022, 8, 18), 850000000, datetime(2022, 12, 20), datetime(2022, 12, 20), "1C22TYY-1327..1758\n2022", 787037037, 62962963, 850000000, 850000000, 0, "Đã nghiệm thu thanh quyết toán"),
        (3, "Cung ứng nhôm thanh, phụ kiện và lắp đặt cửa Đại Vũ", "Cung cấp & lắp đặt", "CÔNG TY TNHH ĐẠI VŨ", "02.09/2022/HĐNT-ĐV", datetime(2022, 9, 2), 480000000, datetime(2022, 12, 28), datetime(2022, 12, 28), "1C22TYY-Đại Vũ\n2022", 444444444, 35555556, 480000000, 480000000, 0, "Đã hoàn thành bàn giao"),
    ]

    r_22 = 5
    for item in projects_2022:
        stt, name, goi, cdt, hd_num, d_ky, gt, d_nt, d_bg, inv_str, pre, vat_amt, tot, tt_amt, no_amt, note = item
        ws_2022.cell(r_22, 1, stt)
        ws_2022.cell(r_22, 2, name)
        ws_2022.cell(r_22, 3, goi)
        ws_2022.cell(r_22, 4, cdt)
        ws_2022.cell(r_22, 5, hd_num)
        ws_2022.cell(r_22, 6, d_ky)
        ws_2022.cell(r_22, 7, gt)
        ws_2022.cell(r_22, 13, d_nt)
        ws_2022.cell(r_22, 14, d_bg)
        ws_2022.cell(r_22, 15, inv_str)
        ws_2022.cell(r_22, 17, pre)
        ws_2022.cell(r_22, 18, vat_amt)
        ws_2022.cell(r_22, 19, tot)
        ws_2022.cell(r_22, 21, tt_amt)
        ws_2022.cell(r_22, 22, no_amt)
        ws_2022.cell(r_22, 24, note)
        r_22 += 1

    ws_2022.cell(3, 17, f"=SUM(Q5:Q{r_22-1})")
    ws_2022.cell(3, 19, f"=SUM(S5:S{r_22-1})")
    logger.info(f"Hoàn tất tạo mới Sheet 2022: {r_22-5} dòng công trình.")

    # Định dạng các cột số (Col 7, 12, 16, 17, 18, 19, 20, 21, 22) sang kiểu tiền tệ #,##0
    currency_cols = [7, 12, 16, 17, 18, 19, 20, 21, 22]
    date_cols = [6, 8, 10, 13, 14]

    for ws in [ws_2026, ws_2025, ws_2024, ws_2023, ws_2022]:
        for r in range(4, ws.max_row + 1):
            for c in currency_cols:
                cell = ws.cell(r, c)
                if isinstance(cell.value, (int, float)):
                    cell.number_format = "#,##0"
            for c in date_cols:
                cell = ws.cell(r, c)
                if isinstance(cell.value, datetime):
                    cell.number_format = "DD/MM/YYYY"

    wb.save(EXCEL_PATH)
    logger.info(f"Đã lưu thành công file Excel hoàn thiện tại: {EXCEL_PATH}")


if __name__ == "__main__":
    run_enrichment()
