# -*- coding: utf-8 -*-
r"""B85: ghi MỤC 12/10/2026 (Trí QC: kết quả dính mặt PU BLACK/Scansia + điều chỉnh quy trình DL 16/19) vào 'Tri qc.md' + DOCX."""
import os, re, shutil, subprocess, sys, difflib, zipfile

QC = r'C:\Claw 2\QC'
SRC = os.path.join(QC, 'Tri qc.md')
BKP = os.path.join(QC, r'12102026\BACKUP_MD\Nhan su tham gia\QC__Tri qc.md')
AGY = os.path.join(QC, r'images\_zalo_tri_1210')
MUC_MD = os.path.join(QC, '_muc_tri_1210.md')
DOCX = os.path.join(QC, 'BAO_CAO_QC_12-10-2026_Nguyen_Anh_Tri.docx')
MD2DOCX = r'C:\Users\admin\AppData\Local\hermes\skills\productivity\qc-daily-report-chain\scripts\md2docx-qc.py'

ANH = [('tri_1210_01.jpg', 'tri_scansia_pu-black_dan-dinh-mat-4h5h6h_1210.jpg'),
       ('tri_1210_05.jpg', 'tri_danglong_dl-16-19_phao-chi-sau-hoanthien_1210.jpg'),
       ('tri_1210_06.jpg', 'tri_danglong_dl-16-19_phao-chi-xep-chu-thap_1210.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 12/10/2026: **Kết quả KIỂM TRA DÍNH MẶT bộ sơn PU BLACK (Walmart) giao Scansia Pacific** — khô 4 giờ và 5 giờ **KHÔNG ĐẠT** (bị dính form), khô **6 giờ ĐẠT** (dằn 0,5 kg/cm² trong 42 giờ) · Điều chỉnh quy trình + công thức **glaze màu DL 16/19** (dùng **stain dặm** thay **glaze dặm**)

**Ngày báo cáo:** 12/10/2026
**Người báo cáo:** Nguyễn Anh Trí (QC BT Chem)
**Kính gửi:** BLĐ phòng Kỹ thuật & phòng QC BT-Chem
**Nguồn:** tin nhắn Zalo của Nguyễn Anh Trí, hội thoại “Trí QC” — tin cuối lúc **19:27 ngày 12/10/2026** (05 ảnh) và 02 ảnh ở tin khác trong ngày = **07 ảnh của ngày 12/10** (đã tự loại 03 ảnh thuộc ngày 10/10). Trong hội thoại có **01 tin nhắn đã được thu hồi** — không đọc được nội dung.

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

> **E gửi a kết quả kiểm tra dính mặt của bộ sơn pu giao cho cty scansia**
> Dằn 0,5 kg/ cm vuông -> dằn trong 42 giờ tháo ra
> - khô sau 4 giờ bị dính from không đạt
> - khô sau 5 giờ bị dính from không đạt
> -khô sau 6 giờ đạt

> **Báo cáo a công việc hôm nay ở cty bình thanh:** kiểm tra chất lượng màu DL 16/19 ( điều chỉnh quy trình và điều chỉnh công thức glaze màu )
> Công đoạn trước khi bóng sử dụng stain dặm thay cho glaze dặm
> Hôm nay đã thực hiện xong quy trình mai kiểm tra chất lượng độ bám

## 2. Báo cáo kết quả kiểm tra số “- 1026” (Bộ phận QC, 12/10/2026) — trích nguyên văn

**A. Thông tin sản phẩm** (bộ sơn điều chỉnh giao Scansia Pacific, sản xuất tại xưởng màu):

| Sản phẩm | MSSX |
|---|---|
| Lót nhúng PU BLACK (WALMART) | 070926 |
| Lót màu PU BLACK (WALMART) | 070926 |
| Sơn màu PU BLACK (WALMART) 20% | 090926 |
| Cứng PU FD WS 1223 | 19061026 |
| Cứng PU FD TOD 0405 (scansia) | 19061026 |
| Dung môi PU TXXT (Scansia) | 21082612 |

**B. Tỷ lệ pha & độ nhớt (cup NK2)**

| | Lót nhúng PU | Lót màu PU | Sơn màu PU |
|---|---|---|---|
| Tỷ lệ pha | 5-1-1 (nguyên văn: 5-1-5) | 2,5-1-1 | 3-1-1 |
| Độ nhớt yêu cầu | 8 – 9 giây | 13-14 giây | 13-14 giây |
| Mới pha | 8 giây 21 | 14 giây 71 | 14 giây 28 |
| Sau 1 giờ | 19 giây 40 | 19 giây 40 | |
| Sau 2 giờ | | 27 giây 15 | |
| Sau 3 giờ | | 45 giây 18 | |
| Sau 4 giờ | | **bị sệt không đo được** | |

**Màng sơn:** đạt, không bị đọng cạnh (cả 3 lớp) · **Độ bám dính:** cắt ca-rô **5B/5B đạt**, đẩy vật cứng 3 lần đạt.

**Thời gian đóng gói (dằn 0,5 kg/cm², dằn trong 42 giờ rồi tháo ra):**

| Mốc khô | Kết quả dính mặt |
|---|---|
| Sau **4 giờ** | **bị dính form — KHÔNG ĐẠT** |
| Sau **5 giờ** | **bị dính form — KHÔNG ĐẠT** |
| Sau **6 giờ** | **ĐẠT** (không bị dính form) |

**C. Nhận xét, đánh giá (nguyên văn):** “Bộ sơn điều chỉnh giao cho công ty scansia pacific kiểm tra chất lượng độ bám dính đạt yêu cầu; kiểm tra dính mặt theo quy trình khô sau 5 giờ không đạt (bị dính from). Hỗn hợp lót màu pu: pha sau 1 giờ độ nhớt tăng 5 giây; pha sau 2 giờ tăng 13 giây và sau 3 giờ tăng 31 giây. Đề nghị phòng RD xem lại vấn đề tăng độ nhớt của hỗn hợp lót màu pu.” — Ngày 12-10-2026, Bộ phận QC (**Nguyễn Anh Trí**).

## 3. Công thức pha glaze màu DL 16/19 (bản viết tay ngày 12/10/2026) — trích nguyên văn

- **1) Tinh màu (A):** Nâu Bu 5511 (1-1) DM = **100** · Đen TCL3 (1-2) DM = **10**
- **2) Glaze màu:** Tinh màu (A) = **30** · Dung Glaze tự nhiên = **10** (chữ “Dung” có gạch ngang trước “Glaze tự nhiên”) · Dung môi glaze = **45**
- **3) Công thức stain màu dặm:** Nâu BU 5511 (1-1) DM = **150** · Đen TCL3 (1-2) DM = **8** ⇒ (B) pha loãng **1-3 DM NC 02**

## 4. Điều chỉnh quy trình màu DL 16/19 (theo tin Zalo + ảnh mẫu)

- Điều chỉnh **quy trình** và **công thức glaze màu**: công đoạn **trước khi bóng dùng STAIN DẶM thay cho GLAZE DẶM**
- Hôm nay (12/10) **đã thực hiện xong quy trình**, **mai 13/10 kiểm tra lại chất lượng độ bám**
- Ảnh mẫu (04 ảnh): thanh phào chỉ lượn sóng màu DL 16/19 sau hoàn thiện — màng sơn bóng đều, tim/tôm gỗ nổi rõ dưới lớp glaze, đồng màu giữa các khúc ghép; 01 ảnh mẫu ở công đoạn màu nền (vàng nâu nhạt) trước khi lau glaze/dặm

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

![](images/tri_scansia_pu-black_dan-dinh-mat-4h5h6h_1210.jpg)

![](images/tri_danglong_dl-16-19_phao-chi-sau-hoanthien_1210.jpg)

![](images/tri_danglong_dl-16-19_phao-chi-xep-chu-thap_1210.jpg)

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

> ⚠️ **Ghi chú đối chiếu:**
> - **ĐÓNG MỐC CHỜ TỪ MỤC 10/10/2026:** mục 10/10 ghi “kiểm dính mặt 3 mốc dằn 4h · 5h · 6h nhưng CHƯA có kết luận” ⇒ hôm nay đã có kết luận: **4 giờ và 5 giờ không đạt, 6 giờ đạt**. Khuyến nghị vận hành: **chỉ xếp chồng/đóng gói sau khi màng khô tối thiểu 6 giờ** khi dằn 0,5 kg/cm². Cách thử này khớp với lần trước (báo cáo 02-0826 từng ghi nhận **vết hằn lún ở mốc dằn 5 giờ**).
> - **Nối chuỗi DL 16/19 (khách Cty Đăng Long):** mục 03/10 và 05/10 ghi **cả 4 phương án công thức glaze tróc lớp — không đạt**, đã chuyển R&D ⇒ hôm nay đã **điều chỉnh (stain dặm thay glaze dặm)** và **mai 13/10 kiểm tra độ bám** ⇒ **mốc chờ mới**.
> - **Vẫn treo:** vấn đề **tăng độ nhớt hỗn hợp lót màu PU** (14 giây 71 → 19"40 sau 1 giờ → 27"15 sau 2 giờ → 45"18 sau 3 giờ → sệt sau 4 giờ) — hôm nay QC **đề nghị Phòng R&D xem lại** (lặp lại đề nghị của mục 09/10), chưa có phản hồi.
> - **Điểm cần xác nhận về dữ liệu:** ① **số báo cáo kiểm tra bị thiếu số** — phiếu ghi “Báo cáo kiểm tra số: **- 1026**” (các phiếu gần đây là 01-1026, 04-1026, 05-1026) ⇒ đề nghị bộ phận QC bổ sung số đúng; ② **01 tin nhắn trong hội thoại đã được thu hồi** — nếu là nội dung quan trọng, đề nghị Trí gửi lại; ③ phiếu ghi tỷ lệ lót nhúng **“5-1-5”** trong khi phần diễn giải trước đây của cùng bộ sơn là **10-2-10** ⇒ đề nghị QC xác nhận tỷ lệ đang áp dụng.
> - **Ảnh:** chọn **03 ảnh** để chèn (mẫu dằn 4H/5H/6H có cắt ca-rô · mẫu phào chỉ sau hoàn thiện · mẫu phào chỉ so màu tại xưởng). **Không chèn**: phiếu báo cáo kiểm tra (in), công thức viết tay, ảnh mẫu công đoạn nền — theo quy ước 06/10/2026.
> - **Chưa có:** nhiệt độ – độ ẩm xưởng khi phun, số đo độ bóng bằng máy cho mẫu DL 16/19, số liệu **4 thẻ màu AQ 455** (vẫn 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 12/10/2026', s), 'MỤC 12/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('  Tri qc.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()[-220:])
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')))
