# -*- coding: utf-8 -*-
r"""B93: ghi MỤC 13/10/2026 (Lộc QC: thử nghiệm so màu TVT White hoàn thiện vs tái chế) vào 'Locqc.md' + DOCX."""
import os, re, shutil, subprocess, sys, difflib, zipfile

QC = r'C:\Claw 2\QC'
SRC = os.path.join(QC, 'Locqc.md')
BKP = os.path.join(QC, r'13102026\BACKUP_MD\Nhan su tham gia\QC__Locqc.md')
AGY = os.path.join(QC, r'images\_zalo_loc_1310')
MUC_MD = os.path.join(QC, '_muc_loc_1310.md')
DOCX = os.path.join(QC, 'BAO_CAO_QC_13-10-2026_Bui_Thien_Loc.docx')
MD2DOCX = r'C:\Users\admin\AppData\Local\hermes\skills\productivity\qc-daily-report-chain\scripts\md2docx-qc.py'

ANH = [('loc_1310_03.jpg', 'loc_tvt-white_phoi-go-phongQC-toancanh_1310.jpg'),
       ('loc_1310_04.jpg', 'loc_tvt-white_6-phoi-go-taiche-1path-2path_1310.jpg')]
for a, b in ANH:
    shutil.copy2(os.path.join(AGY, a), os.path.join(QC, 'images', b))
    print('  chèn ảnh:', b, os.path.getsize(os.path.join(QC, 'images', b)), 'B')

MUC = """# BÁO CÁO QC — CẬP NHẬT 13/10/2026: **Thử nghiệm SO MÀU TVT White — sản phẩm HOÀN THIỆN so với sản phẩm TÁI CHẾ (1 path và 2 paths)** theo chỉ đạo của Giám đốc ngày 12/10 — đã phun xong trên **06 phôi gỗ** với **03 qui trình lót**; **ngày 14/10 đo màu (L, a, b, ΔE)**

**Ngày báo cáo:** 13/10/2026
**Người báo cáo:** Bùi Thiên Lộc (QC BT Chem)
**Kính gửi:** Ban Giám đốc (anh Tâm, anh Minh) và BLĐ phòng Kỹ thuật – QC
**Nguồn:** tin nhắn Zalo của Bùi Thiên Lộc, hội thoại “Loc QC ( So 2)”, tin cuối lúc **16:33 ngày 13/10/2026** kèm **04 ảnh** (các ảnh trước trong hội thoại thuộc ngày 12/10 — đã tách riêng).

## 1. Nguyên văn tin nhắn Zalo trong ngày

> **Báo cáo công việc hằng ngày kiểm tra chỉ tiêu màu sắc so sánh sản phẩm hoàn thiện và tái chế màu TVT White.**
> thực hiện sử dụng mẫu lưu tại phòng QC trên thẻ gỗ (trên 6 phôi gỗ, 3 phôi phun 3 qui trình trên 1 phôi và 3 phôi sử dụng 3 qui trình riêng)
> Lót Pu 0601 Trắng sau 2 giờ chà nhám, Lót NC 2407 trắng sau 2 giờ chà nhám, Lót NC 2407 trắng sau 10 phút Sơn màu, sau 3 giờ phun tái chế sơn màu (1 path và 2 paths).
> đã thực hiện xong, mai sẽ kiểm tra.

## 2. Phiếu “BÁO CÁO KẾT QUẢ KIỂM TRA” số 01 - 1026 (lập ngày 13/10/2026) — trích nguyên văn

- Mẫu biểu: **QT-KT-SPM/02 · Phụ lục 01B** — Tên sản phẩm: **Màu TVT White**
- Thời gian kiểm tra: **13/10/2026 đến 14/10/2026** · Mục đích: *“Kiểm tra chất lượng chỉ tiêu màu sắc: sản phẩm sau khi thực hiện tái chế”*
- B. Qui trình kiểm tra: **sử dụng mẫu lưu tại phòng QC và thực hiện qui trình trên nền gỗ**

| Qui trình | Nội dung (nguyên văn) |
|---|---|
| **Qui trình 1** — qui trình đang áp dụng tại khách hàng | 1. Lót PU 0601 trắng (tỷ lệ pha **4 – 1** cứng PU 0601 – **2,8** dung môi PU lót; độ nhớt **15”88**): phun 2 paths, sau **2 giờ** chà nhám #320 toàn sản phẩm<br>2. Lót NC 2407 trắng (**1** lót – **1** dung môi NC ĐT 0125; độ nhớt **17”83**): phun 2 paths, sau **2 giờ** chà nhám #320 toàn sản phẩm<br>3. Lót NC 2407 trắng (**1** lót – **1,2** dung môi NC ĐT 0125 – **0,022** dung môi Retarder; độ nhớt **15”66**): phun vị trí chà mất lót và phun 1 path toàn sản phẩm, sau **10 phút**<br>4. Sơn màu TVT White 20% (**1** SM – **1,3** dung môi NC có Supper; độ nhớt **13”79**): phun 2 path toàn sản phẩm |
| **Qui trình 2** — tái chế I | Sau khi hoàn thiện qui trình, để khô tự nhiên sau **3 giờ**: phun Sơn màu TVT White 20% (**1** SM – **1,5** dung môi NC có Supper; độ nhớt **11”43**), phun **1 path** toàn sản phẩm |
| **Qui trình 3** — tái chế II | Sau khi hoàn thiện qui trình, để khô tự nhiên sau **3 giờ**: phun Sơn màu TVT White 20% (**1** SM – **1,5** dung môi NC có Supper; độ nhớt **11”43**), phun **2 paths** toàn sản phẩm |

- Để khô tự nhiên sau **18 giờ** rồi kiểm tra chỉ tiêu màu sắc, so sánh giữa qui trình hoàn thiện và qui trình sau khi tái chế.
- **Mục C (Kết quả kiểm tra chất lượng) và mục D (Kết luận và nhận xét): để trống** — chờ kết quả sau 18 giờ khô tự nhiên; phiếu ghi ngày **14/10/2026**, Phòng QC, ký tên **Bùi Thiên Lộc**.

## 3. Phiếu “HƯỚNG DẪN QUY TRÌNH SẢN XUẤT THỰC TẾ MÀU: TVT WHITE” — trích nguyên văn (bản in đóng dấu 27/07/2026)

- Mẫu biểu: **Phụ lục 04 · HD-KT-THMM/01**; khách hàng **CÔNG TY TÂN VIỆT TIẾN**; loại gỗ **TRÀM – MDF**; loại sơn **UV, PU, NC**; sản phẩm **hàng trong nhà (INDOOR)**; độ bóng **20% ± 5%**; kỹ thuật ký: **LÊ ĐĂNG HỌC**
- Trên dòng quy trình sơn màu có **chữ viết tay bổ sung: “tái chế” và “10 - 11”**

| Công đoạn | Hóa chất | Tỉ lệ pha | Độ nhớt (phễu NK2) | Thời gian khô |
|---|---|---|---|---|
| 1 – Cán lót trong UV (MDF) | Lót UV TVT | 1 | — | Sấy đèn UV, chà nhám #320 |
| 2 – Cán lót trắng UV (MDF) | Lót trắng UV TVT | 1 | — | Sấy đèn UV |
| 2 – Lót PU 0601 trắng (sơn cạnh MDF, gỗ tràm) | Lót PU 0601 trắng – Cứng PU 0601 – Dung môi PU lót | **4 – 1 – 2,8** | **14–16 giây** | 1–2 giờ, xử lý lỗi chà nhám #240 |
| 3 – Lót NC 2407 trắng | Lót NC 2407 trắng + dung môi NC ĐT 0125 | **1 – 1** | **16–18 giây** | 1–2 giờ, chà nhám #320 |
| 4 – Lót NC 2407 trắng | Lót NC 2407 trắng + dung môi NC ĐT 0125 + dung môi Retarder | **1 – 1,2 – 0,022** | **14–16 giây** | **3–5 phút** |
| 5 – Sơn màu NC 20% (sơn toàn bộ sản phẩm) | Sơn màu NC TVT White 20% + dung môi NC có super | **1 – 1,3** | **13–14 giây** | Sau **8 giờ** kiểm tra sản phẩm đạt, đóng gói |

- Lưu ý nguyên văn: hỗn hợp sơn PU 0601 trắng sau khi pha chất cứng chỉ sử dụng trong **3–4 giờ**; khi trời nắng nóng (nhiệt độ nhà xưởng **trên 35°C**) hoặc mưa lạnh ẩm (dưới **30°C**) cần thêm **Retarder 3–7%** vào hỗn hợp lót/bóng để hạn chế màng sơn bị hấp hơi, mốc.
- Nguồn ghi chú “Hủy QT trước ngày **27/07/2026**” (trong bản in có số **28 bị gạch sửa tay thành 27**).

## 4. Ghi nhận từ ảnh mẫu thử (phòng QC)

- **Bố trí:** 06 phôi gỗ mẫu thử phẳng đặt trên bàn thao tác tại phòng QC; trên mép phôi có **chữ viết tay chia khoang “Tái chế 1 path” và “Tái chế 2 paths”** — phù hợp mô tả trong tin Zalo: 3 phôi chia khoang phun 3 qui trình trên cùng 1 phôi, 3 phôi phun 1 qui trình riêng
- **Hóa chất, dụng cụ trên bàn:** can Primer (nhãn viết tay “Primer / BT 0922 …”), can có ghi mã lót **NC 2407**, các hũ phụ gia (có hũ ghi **#101**), súng phun sơn, cốc đo độ nhớt và phễu lọc
- **Bề mặt màng sơn:** 06 phôi lên màu **trắng đồng nhất**; màng sơn căng phẳng, độ bóng mờ đạt khoảng **20% ± 5%** theo tiêu chuẩn; tại thời điểm chụp chưa thấy lỗi rỗ khí, chảy sơn
- **Lưu ý:** sự lệch màu (ngả vàng hay sai lệch chỉ số b*) chỉ kết luận được sau khi **đo bằng máy so màu** sau 18 giờ khô tự nhiên

## 5. Hình ảnh minh họa

![](images/loc_tvt-white_phoi-go-phongQC-toancanh_1310.jpg)

![](images/loc_tvt-white_6-phoi-go-taiche-1path-2path_1310.jpg)

## 6. Ghi chú đối chiếu & theo dõi

> ⚠️ **Ghi chú đối chiếu:**
> - **ĐÓNG một phần chỉ đạo ngày 12/10/2026:** mục 12/10 ghi chỉ đạo của Giám đốc Trần Quyết Tâm *“QC làm lại qui trình, phun tái chế 1 paths và tái chế 2 path so sánh màu sắc, báo cáo kết quả kiểm tra cho anh Tâm”* ⇒ hôm nay đã **thực hiện xong phần pha chế và phun mẫu thử**, **kết quả màu sắc còn chờ kiểm tra ngày 14/10**.
> - **Mốc chờ mới (14/10/2026):** đo chỉ tiêu màu sắc (**L, a, b, ΔE**) của sản phẩm hoàn thiện và 02 phương án tái chế (1 path, 2 paths) trên nền 3 qui trình lót (**PU 0601** và **NC 2407**), đối chiếu **mẫu lưu tại phòng QC** (thẻ chuẩn đã ghi: **L 79.1 · a 0.8 · b 3.1 · Δ 0.3–0.4**).
> - **Nối chuỗi sự việc TVT White:** 07 thẻ mẫu có lô sản xuất **02/07/2026 → 01/10/2026**; lỗi kèm theo đã ghi nhận: **hở mí ghép / nứt màng sơn ở góc ghép 45°**; **họp tại khách hàng Tân Việt Tiến ngày 13/10** (anh Bảy cùng kỹ thuật Thoại) — kết luận cuộc họp chưa có trong báo cáo này.
> - **Điểm cần xác nhận:** ① số báo cáo kiểm tra ghi **“01 - 1026”** — đề nghị QC đối chiếu sổ số báo cáo để tránh trùng số với báo cáo ngày 12/10 (báo cáo của QC Trí ghi “- 1026”, thiếu tiền tố); ② phiếu ngày **14/10** trong khi lập ngày **13/10** (ngày ký dự kiến theo thời điểm hoàn tất kiểm tra) — cần thống nhất cách ghi ngày trên phiếu; ③ thuật ngữ **“1 path / 2 paths”** là cách gọi của xưởng (1 lượt / 2 lượt phun tái chế) — đề nghị kỹ thuật xác nhận để thống nhất khi ghi hồ sơ.
> - **Ảnh:** chọn **02 ảnh** chèn (toàn cảnh bàn thử nghiệm phòng QC · cận cảnh 6 phôi gỗ có ghi chú tái chế 1 path / 2 paths). **Không chèn**: 02 phiếu in (phiếu quy trình sản xuất và phiếu báo cáo kết quả kiểm tra) — theo quy ước 06/10/2026.
> - **Chưa có:** kết quả đo màu bằng máy của 06 phôi; nhiệt độ – độ ẩm xưởng khi phun; số liệu 04 thẻ màu AQ 455 (chờ xem trực tiếp tại công ty); kết luận cuộc họp sản phẩm không phù hợp.
"""

s = open(SRC, encoding='utf-8', newline='').read()
old = open(BKP, encoding='utf-8', newline='').read()
assert not re.search(r'\n# BÁO CÁO[^\n]*CẬP NHẬT 13/10/2026', s), 'MỤC 13/10 ĐÃ CÓ — DỪNG'
n_truoc = s.count('# BÁO CÁO')
new = s.rstrip('\r\n') + '\n\n---\n\n' + MUC
open(SRC, 'w', encoding='utf-8', newline='').write(new)
s2 = open(SRC, encoding='utf-8', newline='').read()

sm = difflib.SequenceMatcher(None, old.split('\n'), s2.split('\n'), autojunk=False)
removed = sum(i2 - i1 for tag, i1, i2, j1, j2 in sm.get_opcodes() if tag in ('replace', 'delete'))
added = sum(j2 - j1 for tag, i1, i2, j1, j2 in sm.get_opcodes() if tag in ('replace', 'insert'))
print('  Locqc.md: %d -> %d B | mục # BÁO CÁO: %d -> %d' % (len(old), len(s2), n_truoc, s2.count('# BÁO CÁO')))
print('  difflib: removed=%d added=%d | startswith(bản cũ rstrip): %s' % (removed, added, s2.startswith(old.rstrip('\r\n'))))

open(MUC_MD, 'w', encoding='utf-8', newline='').write(MUC)
r = subprocess.run([sys.executable, MD2DOCX, MUC_MD, DOCX, QC], capture_output=True, text=True, encoding='utf-8', errors='replace', cwd=QC)
print('  md2docx:', r.returncode, ((r.stdout or '') + (r.stderr or '')).strip()[-200:])
from docx import Document
d = Document(DOCX)
toan = '\n'.join(p.text for p in d.paragraphs) + '\n'.join(c.text for t in d.tables for row in t.rows for c in row.cells)
z = zipfile.ZipFile(DOCX)
print('  DOCX: %d B | đoạn %d | bảng %d | ảnh %d | dấu ** còn %d | "thiếu ảnh" %d' % (
    os.path.getsize(DOCX), len(d.paragraphs), len(d.tables),
    len([n for n in z.namelist() if n.startswith('word/media/')]), toan.count('**'), toan.count('thiếu ảnh')))
