# -*- coding: utf-8 -*-
"""SỬA mục 09/10/2026 trong 'Tri qc.md': tách số liệu độ nhớt theo TỪNG LỚP SƠN (bản đọc bảng mục B
của báo cáo 01-1026 cho thấy bản ghi trước đã gộp 2 lớp) + bổ sung tỷ lệ pha, điều kiện đóng gói.
Backup lần 2 trước khi sửa; verify: câu cũ = 0, câu mới = 1, số mục # BÁO CÁO KHÔNG đổi."""
import difflib, os, shutil, time

GOC = r'C:\Claw 2\QC'
TEP = os.path.join(GOC, 'Tri qc.md')
BK2 = os.path.join(GOC, '09102026', 'BACKUP_MD', 'Nhan su tham gia', 'QC__Tri qc.md_0910_trc_sua-do-nhot.md')

CU = "| Độ nhớt Lót màu PU | mới pha **14,71 giây** → sau 1 giờ **19,40** → sau 2 giờ **27,15** → sau 3 giờ **45,18** → sau 4 giờ **bị sệt, không đo được** |"

MOI = """| Ba lớp sơn trong bảng kiểm tra | **Lớp lót (nhúng) PU** · **Lớp màng (lót màu) PU** · **Lớp phủ** |
| Tỷ lệ pha · độ nhớt đầu (cấp NK2) | Lớp lót (nhúng) PU: **5-1-5** · 8 – 9 giây — cứng PU FD 1223 · dung môi PU TXXT (Scansia) · Lớp màng PU: **2,5-1-1** · 13 – 14 giây · Lớp phủ: **3-1-1** — cứng PU 0707B (Scansia) · dung môi PU TXXT (Scansia) |
| Độ nhớt theo mốc thời gian | **Lớp lót (nhúng) PU:** mới pha **8"21** → sau 1 giờ **19"40**. **Lớp màng PU:** mới pha **14"71** → sau 2 giờ **27"15** → sau 3 giờ **45"18** → sau 4 giờ **bị sệt, không đo được**. **Lớp phủ:** nguồn không ghi. |
| Thời gian đóng gói | Điều kiện: **đặt 0,5 kg/cm² sau 5 giờ** |"""

THEM_GHICHU = """> - **Hai bản đọc về tỷ lệ pha của lớp lót (nhúng) PU:** bản đọc bảng mục B hôm nay ghi **5-1-5** / 8 – 9 giây; còn mục **07/10/2026 (cùng file)** ghi **10-2-10** / 8" → <9" cho cùng lớp lót nhúng PU BLACK (Walmart) trên gỗ tràm — **cùng một tỉ lệ, chỉ khác cách viết** (5-1-5 = 10-2-10 chia đôi). Đề nghị Trí xác nhận cách viết chuẩn trên phiếu.
> - **Nhãn "3 Kg" trên 3 tấm ảnh mục 5:** báo cáo 01-1026 ghi **"đẩy vật cứng 3 lần — đạt"** và điều kiện đóng gói **"đặt 0,5 kg/cm² sau 5 giờ"** ⇒ nhiều khả năng **"3 Kg" là tải trọng của phép thử**, không phải khối lượng lô; đề nghị Trí xác nhận cùng câu hỏi về việc ảnh thuộc bộ sơn PU BLACK (Walmart) hay 4 thẻ AQ 455.
"""

truoc = open(TEP, encoding='utf-8', newline='').read()
assert truoc.count(CU) == 1, 'câu cũ phải xuất hiện đúng 1 lần, đang có %d' % truoc.count(CU)
assert truoc.count('![](images/tri_0910_boson-PU-Black-Walmart_caro-3moc_0910.jpg)') == 1
shutil.copy2(TEP, BK2)
print('backup lần 2:', os.path.basename(BK2), os.path.getsize(BK2), 'B')

sau = truoc.replace(CU, MOI)
neo = '> - **Điểm cần xác nhận (01 câu):**'
assert sau.count(neo) == 1, 'anchor ghi chú cuối không duy nhất'
sau = sau.replace(neo, THEM_GHICHU + neo)
open(TEP, 'w', encoding='utf-8', newline='').write(sau)

# ---- verify
moi = open(TEP, encoding='utf-8', newline='').read()
i = moi.rfind('# BÁO CÁO QC — CẬP NHẬT 09/10/2026')
seg = moi[i:]
print('byte TRƯỚC → SAU: %d → %d (+%d)' % (len(truoc.encode()), len(moi.encode()), len(moi.encode()) - len(truoc.encode())))
print('câu cũ còn lại:', moi.count(CU.split('|')[1].strip()[:40]), '(0 = đã thay hết)')
print('số mục # BÁO CÁO:', truoc.count('\n# BÁO CÁO'), '→', moi.count('\n# BÁO CÁO'))
for tu in ('8"21', '19"40', '14"71', '27"15', '45"18', '0,5 kg/cm²', '2,5-1-1', '5-1-5', '0707B', 'Lớp lót (nhúng) PU', 'tải trọng của phép thử'):
    print('   %-26s %s' % (tu, 'CÓ' if tu in seg else 'THIẾU ⚠'))
sm = difflib.SequenceMatcher(None, truoc.split('\n'), moi.split('\n'), autojunk=False)
rem = add = first = None
for tag, i1, i2, j1, j2 in sm.get_opcodes():
    if tag in ('replace', 'delete'):
        rem = (rem or 0) + (i2 - i1); first = i1 if first is None else first
    if tag in ('replace', 'insert'):
        add = (add or 0) + (j2 - j1)
print('difflib: removed =', rem, '| added =', add, '| dòng thay đổi đầu tiên =', first,
      '| dòng bắt đầu mục 09/10 =', truoc[:i].count('\n'))
print('   ⇒ mọi thay đổi nằm TRONG mục 09/10:', first is not None and first >= truoc[:i].count('\n') - 2)
