BỐI CẢNH: Bạn đang làm việc trong dự án “Bao cao lam mau” của Công ty TNHH SX-TM Hóa Keo Bình Thạnh (BT CHEM). Đây là việc LẶP HẰNG TUẦN: TUẦN 40 (từ 28/09/2026 đến 04/10/2026). Hãy làm giống hệt cách các tuần trước, KHÔNG tự nghĩ cách khác. BƯỚC 0 — BẮT BUỘC ĐỌC TRƯỚC ĐỂ BÁM CHUẨN: - `clean_and_merge_tuan39.py` (bản gần nhất — bám đúng class, từ điển chuẩn hoá tên kỹ thuật, cách ghi file sạch). - `da lam sach\Bao_cao_lam_sach_Tuan39.md` (bố cục báo cáo MD tuần trước). - `da lam sach\Tuan_39_*.xlsx` (định dạng file sạch tuần trước: cột, thứ tự cột, kiểu trình bày). - `generate_report.py` / `generate_report_ttf.py` nếu tuần trước dùng để ra file DOCX. BƯỚC 1 — ĐỌC 3 FILE ĐẦU VÀO (tên file và số dòng dưới đây là do tôi tự đếm, dùng làm mốc đối chiếu): 1. `TUẦN 40 (28.09-04.10).xlsx` — file chính (Mến). ⚠️ Sheet duy nhất tên là `Sheet1` (tuần trước tên sheet là `TUẦN 39`) — tự kiểm tra dòng tiêu đề và khối tổng hợp trước khi xử lý. - **122 dòng có dữ liệu, dòng cuối cùng có dữ liệu là dòng 125.** (tôi đếm theo cách: dòng có ít nhất 1 ô không rỗng) 2. `KẾT QUẢ MẪU TUẦN 40.xlsx` — khách lẻ (Nguyễn Thị Thu). Sheet duy nhất: `KQM 40`, **61 dòng có dữ liệu (dòng cuối 61)**. 3. `W40.xlsx` — nhật ký theo dõi mẫu (Lan), **24 sheet, 6.008.514 byte**. ⚠️ Sheet tuần này tên là **`40`** (tuần trước nằm ở sheet `nhập`). Các sheet quan trọng kèm số dòng dữ liệu tôi đếm được: `THEO DÕI MẪU NĂM 2021-2023` (3.235) · `40` (**637**) · `DM VẬT TƯ` (63) · `MẪU GỬI ĐI` (438) · `GIAO TRÀ` (71) · `NHẬP HÀNG 2021-2023` (3.246) · `NHẬP HÀNG 2024` (1.055) · `IN DỌC` (39) · `IN NGANG` (43) · `IN LỊCH TRỰC` (37) · `phiếu phân công` (36) · `DECAL 4` (40). ⚠️ CẢNH BÁO KỸ THUẬT: đọc Excel bằng `openpyxl.load_workbook(path, read_only=True, data_only=True)`; **TUYỆT ĐỐI KHÔNG quét `ws.max_row`** cho tới hết (file có định dạng phủ hết cột ⇒ báo 1.048.576 dòng, sẽ treo/ngốn RAM); dừng ở dòng cuối có dữ liệu. Máy yếu (7 GB RAM) — đọc từng sheet rồi giải phóng, không nạp 3 file cùng lúc. BƯỚC 2 — SẢN PHẨM CẦN TẠO (đặt đúng như các tuần trước): a) Trong `da lam sach\`: - `Tuan_40_28.09-04.10_DA-LAM-SACH.xlsx` (file gộp sạch — tương ứng `Tuan_39_21.09-27.09_DA-LAM-SACH.xlsx`) - `Tuan_40_File1_Chinh_DA-LAM-SACH.xlsx`, `Tuan_40_File2_KQM_DA-LAM-SACH.xlsx`, `Tuan_40_File3_W40_DA-LAM-SACH.xlsx` - `Bao_cao_lam_sach_Tuan40.md` — bố cục theo `Bao_cao_lam_sach_Tuan39.md`: “Thông tin chung” (file gốc 1/2/3 + file sạch đầu ra + ngày xử lý) → “Thống kê dữ liệu gộp” (tổng số nhà máy, tổng số dòng, tổng sản lượng mẫu, số mẫu đã có đơn hàng) → 2 bảng `Loại mẫu | Số lượng dòng` và `Trạng thái | Số lượng dòng`. b) Trong `Bao cao\`: `Bao_cao_tien_do_lam_mau_tuan_37_40.docx` — báo cáo TIẾN ĐỘ LÀM MẪU 4 TUẦN (tuần 37 → 40), bố cục và font giống hệt `Bao_cao_tien_do_lam_mau_tuan_36_39.docx` (mở file đó ra đọc để bám: cùng tiêu đề, cùng thứ tự mục, cùng kiểu bảng). Lưu ý: bản tuần 36–39 đã có, nên báo cáo này chỉ cần phủ tuần 37–40. BƯỚC 3 — QUY TẮC BẮT BUỘC: - **KHÔNG ghi đè file đã có**: nếu trùng tên thì thêm `_v2` và nói rõ trong báo cáo MD. (Tôi đã backup thư mục `da lam sach\` trước khi giao việc này.) - **Giữ nguyên mọi con số**, chỉ chuẩn hoá CÁCH VIẾT tên. Tên chuẩn đã chốt: **Nguyễn Đức Thăng** (không viết “Thắng”) · **Lê Văn Hòa** (không viết “Hoà”) · nhà máy **Geuther**, **Demeyer** · khách **Axcess** (không viết “Access”) · hãng sơn **Xinpan**. Không viết tắt “KTV”. - **KHÔNG bịa số**: chỗ không chắc ghi “chưa chắc/chưa rõ”. Không tự sửa số liệu của 3 file nguồn. - In ra stdout (bằng tiếng Việt có dấu): danh sách file đã tạo kèm dung lượng, bảng thống kê tuần 40, và **số dòng đọc được từ MỖI file** để tôi đối chiếu mốc (122 / 61 / 3235 / 637). - Ghi dần kết quả ra file ngay khi làm xong từng phần (đừng đợi hết mới ghi), để tôi theo dõi được tiến độ. - Kết thúc bằng dòng xác nhận `HOÀN TẤT` và liệt kê đường dẫn tuyệt đối của từng sản phẩm.