# -*- coding: utf-8 -*-
r"""B59: CẬP NHẬT mục 12/10/2026 (chỉ trong mục cuối) theo kết quả SOÁT LẠI ảnh chủ nhân gửi lại:
ghi rõ 2 cách đọc lệch (tên ký + 2 mã số) rồi xuất LẠI DOCX."""
import os, re, 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')
MUC_MD = os.path.join(QC, '_muc_loc_1210.md')
DOCX = os.path.join(QC, 'BAO_CAO_QC_12-10-2026_Bui_Thien_Loc.docx')
MD2DOCX = r'C:\Users\admin\AppData\Local\hermes\skills\productivity\qc-daily-report-chain\scripts\md2docx-qc.py'

s = open(SRC, encoding='utf-8', newline='').read()
goc = s

# 1) sửa 4 dòng bảng thẻ mẫu (chỉ trong mục 12/10 — chuỗi duy nhất)
thay = [
 ('| 1 | Sơn màu NC TVT WHITE 20%: 140726 · Lót NC 2407 trắng: 2100726 | 28/07/2026 | KT Nông (hoặc Uong) · Quản đốc |',
  '| 1 | Sơn màu NC TVT WHITE 20%: 140726 · Lót NC 2407 trắng: **210726** [soát lần 2] / 2100726 [đọc lần 1] | 28/07/2026 | Chữ ký: **KT Uông** [soát lần 2] (lần 1 đọc “Nông/Uong”) · Quản đốc |'),
 ('| 2 | Sơn màu NC TVT WHITE 20%: 250726 · Dung môi NC có Super: 280726130 | 12/08/2026 | Kỹ thuật Thoại · Quản đốc |',
  '| 2 | Sơn màu NC TVT WHITE 20%: 250726 · Dung môi NC có Super: 280726130 | 12/08/2026 | Chữ ký Kỹ thuật: Thoại [lần 1] / **Thái** [soát lần 2] · Quản đốc |'),
 ('| 3 | NC TVT WHITE 20% 200726 · lót trắng: 2180726 | 31/07/2026 | KT Nông · Quản đốc |',
  '| 3 | NC TVT WHITE 20% 200726 · lót trắng: 2180726 [lần 1] / **210726** [soát lần 2] | 31/07/2026 | Chữ ký: **KT Uông** [soát lần 2] (lần 1 đọc “Nông”) · Quản đốc |'),
 ('| 4 | Sơn màu NC TVT-WHITE: 180826 (lô này toàn bộ chạy chuyền nằm) | 24/08/2026 | Quản đốc · Kỹ thuật Nông |',
  '| 4 | Sơn màu NC TVT-WHITE: 180826 (lô này toàn bộ chạy chuyền nằm) | 24/08/2026 | Quản đốc · Chữ ký Kỹ thuật: Nông [lần 1] / **Ngô** [soát lần 2] |'),
]
for a, b in thay:
    assert a in s, 'KHÔNG THẤY DÒNG: %s' % a[:60]
    s = s.replace(a, b, 1)

# 2) thêm ghi chú soát lại vào khối ⚠️ của mục 12/10
neo = '> - **Chưa kiểm:** chưa có kết quả đo máy quang phổ trên lô TVT White đang bị phản ánh (mới có thông số trên thẻ chuẩn) và chưa có nhiệt độ/độ ẩm xưởng Tân Việt Tiến khi phun.'
them = neo + """
> - **Soát lại ảnh (chủ nhân gửi lại đúng tấm ảnh thẻ mẫu, trùng byte md5 086d38482380 — không có nội dung mới):** lần đọc lại độc lập cho kết quả **khớp** về dòng sơn màu + ngày sản xuất 4 thẻ, nhưng **lệch 4 điểm** so với lần đọc đầu (đã ghi rõ cả hai cách đọc trong bảng mục 5): ① lót NC 2407 trắng thẻ 1: **210726** / 2100726; ② lót trắng thẻ 3: 2180726 / **210726**; ③ chữ ký kỹ thuật thẻ 2: Thoại / **Thái**; ④ chữ ký kỹ thuật thẻ 4: Nông / **Ngô**. Kết quả đọc tên ký cũng đổi từ “Nông/Uong” sang **“KT Uông”** ở 2 thẻ ⇒ **đề nghị QC xác nhận lại tên ký và 2 mã số lót** (không tự sửa số liệu)."""
assert neo in s, 'KHÔNG THẤY MỐC CHÈN'
s = s.replace(neo, them, 1)

open(SRC, 'w', encoding='utf-8', newline='').write(s)

# 3) kiểm: chỉ đụng trong MỤC CUỐI (12/10)
i = s.rfind('\n# BÁO CÁO')
truoc_cu = open(BKP, encoding='utf-8', newline='').read()
sm = difflib.SequenceMatcher(None, truoc_cu.split('\n'), s.split('\n'), autojunk=False)
print('  Locqc.md: %d -> %d B | mục # BÁO CÁO: %d | mục cuối bắt đầu ở ký tự %d' % (len(goc), len(s), s.count('# BÁO CÁO'), i))
print('  difflib so với bản backup đầu ngày: removed=%d added=%d' % (
    sum(i2 - i1 for tag, i1, i2, j1, j2 in sm.get_opcodes() if tag in ('replace', 'delete')),
    sum(j2 - j1 for tag, i1, i2, j1, j2 in sm.get_opcodes() if tag in ('replace', 'insert'))))
print('  phần TRƯỚC mục cuối có bị đổi không:', s[:i] == goc[:i])

# 4) xuất lại DOCX cho RIÊNG mục 12/10
muc = s[i:].strip()
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 (xuất lại):', r.returncode, ((r.stdout or '') + (r.stderr or '')).strip()[-200:])
from docx import Document
import zipfile
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 | có "soát lần 2": %s' % (
    os.path.getsize(DOCX), len(d.paragraphs), len(d.tables),
    len([n for n in z.namelist() if n.startswith('word/media/')]), toan.count('**'), 'soát lần 2' in toan))
