# -*- coding: utf-8 -*-
r"""B32: ghi MỤC 10/10/2026 (Lộc QC - Công ty Thiết Đan) vào Locqc.md + xuất DOCX.
Đã backup trước: QC\12102026\BACKUP_MD\Nhan su tham gia\QC__Locqc.md"""
import os, re, shutil, subprocess, sys, difflib

QC = r'C:\Claw 2\QC'
SRC = os.path.join(QC, 'Locqc.md')
BKP = os.path.join(QC, r'12102026\BACKUP_MD\Nhan su tham gia\QC__Locqc.md')
IMG_SRC = os.path.join(QC, r'images\_loc_1010\loc_1010_02.jpg')
IMG_DICH = os.path.join(QC, 'images', 'loc_thietdan_the-mau-287-whitewood_1010.jpg')
MUC_MD = os.path.join(QC, '_muc_loc_1010.md')
DOCX = os.path.join(QC, 'BAO_CAO_QC_10-10-2026_Bui_Thien_Loc.docx')
MD2DOCX = r'C:\Users\admin\AppData\Local\hermes\skills\productivity\qc-daily-report-chain\scripts\md2docx-qc.py'

# ── ảnh được chọn: copy vào images\ theo quy ước tên
shutil.copy2(IMG_SRC, IMG_DICH)
print('  ảnh chèn:', os.path.basename(IMG_DICH), os.path.getsize(IMG_DICH), 'B')

MUC = """# BÁO CÁO QC — CẬP NHẬT 10/10/2026: Kiểm tra tại **Công ty Thiết Đan** — màu **WW #08 White**, **WW 11/16 (hệ PU)**, **#81 Demin**; mẫu mới **#287 White Wood** ký ngày 10/10 và đã có đơn hàng

**Ngày báo cáo:** 10/10/2026
**Người báo cáo:** Bùi Thiên Lộc (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 Bùi Thiên Lộc, hội thoại “Loc QC ( So 2)” — gửi lúc 18:25 ngày 10/10/2026: 02 tin nhắn chữ + 09 ảnh (không có video); kèm 01 ảnh chụp bản báo cáo viết tay + 01 ảnh thẻ mẫu màu do chủ nhân gửi.

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

> **Báo cáo công việc hằng ngày:**
> Thống kê và đánh giá qui trình sx thực tế kỹ thuật các nhà máy gửi về. Còn một số cty chưa gửi về, sẽ bổ sung sau.

> **Kiểm tra tại cty Thiết Đan :**
> Sản phẩm sx trên chuyền đang sx màu # 08 white sản phẩm tủ kệ chi tiết rời, kiểm tra chất lượng đạt yêu cầu
> Màu ww 11/16 ( hệ pu) khách wooddy sản phẩm ghế công đoạn gói đầu và hoàn thiện đạt.
> Màu # 81 demin sản phẩm ghế đang công đoạn lót màu.
> Qui trình sx thực tế phù hợp, phân công nhân sự đáp ứng kịp tiến độ trong sx va mẫu.
>
> **Thông tin :**
> Mẫu màu phát triển TDan 287 khách white wood  đã ký ngày 10/10 và đã có đơn hàng.
> Sx hệ nc mod 1106 chất lượng đạt ko có bị mốc môi trường ( có điều chỉnh 5% Retarder vô hỗn hợp khi trời mưa và sáng sớm)

## 2. Bản báo cáo viết tay (trích nguyên văn từ ảnh chủ nhân gửi)

**Kính gửi:** BLĐ phòng Kỹ thuật & phòng QC BT-Chem · **Người viết báo cáo:** Bùi Thiên Lộc · **Ngày viết báo cáo:** 10/10/2026 · **Nội dung:** Kiểm tra tại cty Thiết Đan

- **Chất lượng sản phẩm sx trên chuyền:** đang sản xuất màu **ww # 08 white** sản phẩm kệ chi tiết rời đang sx gối đầu và hoàn thiện ➜ chất lượng kiểm tra đạt yêu cầu. Màu **# 81 Demin** đang công đoạn lót màu, màu **ww 11/16 (hệ PU)** sản phẩm ghế ráp sẵn đang sx gối đầu và hoàn thiện ➜ kiểm tra các công đoạn theo thẻ công đoạn Đạt yêu cầu.
- **Phân công nhân sự — 3 kỹ thuật cắm chốt:**
  - Kỹ thuật **Trí**: kiểm tra chất lượng trước khi nhập kho và sx màu **WW 75, TDAN 03/15**
  - Kỹ thuật **Bụng (Tổ trưởng)**: kiểm tra chung, kiểm tra chất lượng trên chuyền sx và làm mẫu thẻ
  - Kỹ thuật **Hân**: kiểm tra chất lượng trên chuyền
- **Thông tin, nhận xét, đề xuất:**
  - Màu **# 287** màu mới khách **White Wood** ký mẫu ngày **10/10/2026** và **có đơn hàng để sx**
  - Các màu sử dụng **hệ NC mod** chất lượng Đạt yêu cầu, **không bị mốc môi trường** (trong thời tiết mưa và sáng sớm kỹ thuật có **điều chỉnh 5% Retarder** vào hỗn hợp pha lót / Bóng)
  - Trong tuần sx **7 cont** (2 cont Wooddy + 5 cont của White Wood), **không có nhà cung cấp cạnh tranh**
  - Hỗn hợp pha được kiểm soát tỷ lệ và **đo độ nhớt trước khi chuyển lên chuyền sx**
  - Qui trình sx trên chuyền phù hợp, khu vực xử lý sản phẩm lỗi **có qui trình hướng dẫn tại chỗ** ➜ kỹ thuật kiểm tra qui trình và hỗn hợp pha thường xuyên
- **Chữ ký:** Kỹ thuật duyệt/Tổ trưởng — **Lê Văn Bụng** · Người báo cáo — **Bùi Thiên Lộc**

## 3. Thẻ mẫu màu #287 (ảnh thẻ mẫu chủ nhân gửi)

| Trường | Nội dung |
|---|---|
| Mã mẫu màu / khách hàng | **#287** — khách hàng **WHITE WOOD** |
| Loại gỗ | Cao su |
| Hệ sơn / độ bóng | **NC** · bóng **40% (±5%)** |
| Qui trình sơn | 1/ Lót màu NC (2 lần) · 2/ Lót màu NC (bù) · 3/ Chà light cạnh · 4/ Bóng NC **NY 1807 40%** |
| Người lập thẻ mẫu | Kỹ thuật **Lê Văn Bụng** — ngày làm mẫu **02/10/2026**, mã số thẻ **629** |
| Xác nhận trên mẫu | Bút dạ xanh **“10/10/26 TDN”** + chữ ký duyệt mẫu ngày **10/10/2026** |

### 📸 Hình ảnh minh họa

![](images/loc_thietdan_the-mau-287-whitewood_1010.jpg)

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

> ⚠️ **Ghi chú đối chiếu:**
> - **02 nguồn khớp nhau** ở các điểm chính: màu **#08 white đạt**, **#81 Demin đang lót màu**, **WW 11/16 (hệ PU) đạt**, mẫu **#287 White Wood ký 10/10 + đã có đơn hàng**, **5% Retarder** cho hệ NC mod khi mưa/sáng sớm.
> - Lệch nhỏ về câu chữ giữa 2 nguồn (giữ nguyên văn cả hai, đề nghị QC xác nhận khi cần): Zalo ghi *“sản phẩm tủ kệ chi tiết rời”* / *“ghế công đoạn **gói đầu** và hoàn thiện”*, bản viết tay ghi *“sản phẩm **kệ** chi tiết rời”* / *“ghế **ráp sẵn** đang sx **gối đầu** và hoàn thiện”*.
> - **Bản viết tay có thêm 2 dữ kiện Zalo không nêu:** (1) **phân công 3 kỹ thuật** (Trí · Bụng · Hân) và các màu Trí phụ trách (**WW 75, TDAN 03/15**); (2) **sản lượng tuần 7 cont** (2 cont Wooddy + 5 cont White Wood) và **không có nhà cung cấp cạnh tranh** tại nhà máy.
> - Thẻ mẫu **#287 (mã thẻ 629)** do **Kỹ thuật Lê Văn Bụng** lập ngày **02/10/2026**, được **ký duyệt 10/10/2026** — khớp mốc “ký mẫu ngày 10/10” trong tin nhắn.
> - **Nối chuỗi mục 09/10/2026:** mốc chờ *(1)* Trí QC tổng kết chỉ số L\\*a\\*b\\* màu MK 12/17 H (dự kiến 10/10) để đối chiếu với số máy X-Rite của Lộc — **hôm nay chưa có kết quả trong báo cáo**; *(2)* kết luận cuộc họp sản phẩm không phù hợp (Lộc tham gia 09/10) cũng chưa có kết luận ⇒ **2 mốc này vẫn đang chờ**. **Mốc chờ mới:** kết quả đơn hàng màu #287 sau khi vào sản xuất; theo dõi hiện tượng mốc môi trường hệ NC mod khi trời mưa/sáng sớm (đã xử lý bằng 5% Retarder).
> - **Chưa kiểm:** chưa có số liệu đo độ bóng/độ bám của các màu trong ngày (báo cáo chỉ ghi “đạt theo thẻ công đoạn”) và chưa có nhiệt độ/độ ẩm xưởng.
"""

# ── ghi vào cuối Locqc.md (append, không sửa mục cũ)
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 10/10/2026', s), 'MỤC 10/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()

# ── verify
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'))))

# ── xuất DOCX cho riêng mục ngày
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()[-300:])
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)
import zipfile
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')))
