# -*- coding: utf-8 -*-
"""Bổ sung 16/09 (Đăng Long DLO 16/19 — độ bám không đạt) vào khối 30 portal + 2 CSDL."""
import io, os, re, shutil, sqlite3, datetime

CL2 = r"C:\Claw 2\Bao cao - Hanh chinh\BAOCAOTONGHOP\HTML\KPH_TongHop_0508"
P = os.path.join(CL2, "index.html")
STAMP = datetime.datetime.now().strftime("%Y%m%d_%H%M")
h = io.open(P, encoding="utf-8", newline="").read()
shutil.copy2(P, P.replace(".html", f".bak_{STAMP}_truoc_danglong_1609.html"))
NL = "\r\n" if "\r\n" in h else "\n"

PANEL = """        <div class="sub">📎 Bổ sung 16/09/2026 — Màu DLO 16/19 (quy trình MDF): ĐỘ BÁM DÍNH KHÔNG ĐẠT ở lô sản xuất tiếp theo (~600 sản phẩm)</div>
        <div class="txt"><ul>
          <li><b>Diễn biến:</b> công đoạn hoàn thiện sản xuất <b>lúc 19 giờ ngày 15/9/2026</b> (sản phẩm <b>mặt hộc kéo</b>); <b>hôm nay 16/09 kiểm tra chất lượng: độ bám dính KHÔNG ĐẠT</b>.</li>
          <li><b>Glaze màu công thức CHƯA điều chỉnh</b> — mới giao xuống, <b>mã số tháng 9</b>. Kỹ thuật kiểm tra trước: <b>màu sắc lệch so với thẻ gốc</b>; kỹ thuật <b>điều chỉnh màu lại và cho sản xuất</b> — <b>không có thông tin màu sai về công ty</b>.</li>
          <li>Trong quy trình sản xuất trên chuyền, kỹ thuật có <b>điều chỉnh 3% phụ gia 08/22</b> vào hỗn hợp <b>Lót NC HB</b>.</li>
          <li><b>Đã sản xuất khoảng 53 sản phẩm hộc kéo/ngày</b>; <b>thứ Hai 14/09/2026</b> và ngày <b>15/09/2026</b> kiểm tra chất lượng <b>độ bám ĐẠT yêu cầu</b> (hôm nay kiểm tra lại <b>vẫn đạt</b>). <b>Tiếp tục sản xuất số lượng còn lại khoảng 600 sản phẩm</b> thì kiểm tra <b>độ bám KHÔNG ĐẠT</b>.</li>
          <li><b>Điều chỉnh công thức glaze màu DLO 16/19</b> (sử dụng <b>màu hệ Pegasol pha với glaze tự nhiên và dung môi PE</b>): kỹ thuật đã <b>kiểm tra trước trên thẻ</b> — kết quả <b>ĐẠT</b>; hôm nay cho <b>thử thực tế trên chuyền</b> — <b>mai 17/09 sẽ đánh giá kết quả</b>.</li>
        </ul></div>
        <div class="callout warn"><b class="t">⚠️ Điểm cần đối chiếu</b><ul>
          <li><b>Nối vụ cùng nhà máy – cùng sản phẩm 16/19 – cùng lỗi độ bám:</b> vụ <b>DLO 11 (16/19) 28–29/08/2026</b> (200 hộc kéo, khách TJX) độ bám yếu <b>~20–30%</b> tại công đoạn <b>glaze kéo sọc cọ</b>; lần này lô <b>~600 sản phẩm</b> không đạt <b>sau khi đổi công thức glaze (mã tháng 9)</b> ⇒ <b>nghi vấn tập trung ở công đoạn glaze / lót</b> — đề nghị kiểm tra chéo mẻ glaze mới.</li>
          <li>⚠️ <b>KT tự điều chỉnh màu khi lệch thẻ gốc mà không báo về công ty</b> → phá vỡ kiểm soát màu (nhóm A: một mã = một bộ chuẩn; mọi lệch phải báo &amp; ghi biên bản).</li>
          <li>⚠️ <b>Chốt mốc đạt → không đạt:</b> cần ghi rõ <b>mẻ glaze mã tháng 9</b>, <b>tỷ lệ pha công thức chưa điều chỉnh</b>, <b>thời điểm thêm 3% phụ gia 08/22 vào Lót NC HB</b>, <b>độ nhớt</b> và <b>khoảng cách giữa các lớp</b>.</li>
          <li>📌 <b>Kết quả thử chuyền công thức glaze mới (17/09):</b> yêu cầu ghi <b>tỷ lệ Pegasol : glaze tự nhiên : dung môi PE</b>, độ nhớt, <b>độ bám sau 24 giờ</b> (giật băng keo + cắt ca rô) và <b>màu so thẻ gốc</b>.</li>
        </ul></div>
        <p class="src">Báo cáo Lộc QC 16/09/2026 — Cty Đăng Long, màu DLO 16/19 (quy trình MDF): độ bám dính không đạt ~600 sản phẩm + thử công thức glaze mới</p>
"""
i_blk = h.find('id="danglong-dlo11"')
assert i_blk > 0, "không tìm thấy khối 30"
i_src = h.find('<p class="src">', i_blk)
i_end = h.find('<!-- ============', i_blk + 10)
assert 0 < i_src < i_end, "p.src không thuộc khối 30"
h2 = h[:i_src] + PANEL.replace("\n", NL) + "        " + h[i_src:]
for tag in ("div", "ul", "li", "figure"):
    a, b = h2.count(f"<{tag}"), h2.count(f"</{tag}>")
    assert a == b, (tag, a, b)
assert h2.count('class="inc"') == 39
io.open(P, "w", encoding="utf-8", newline="").write(h2)

from bs4 import BeautifulSoup
soup = BeautifulSoup(io.open(P, encoding="utf-8").read(), "html.parser")
blk = [x for x in soup.select("div.inc") if x.get("id") == "danglong-dlo11"][0]
txt = blk.get_text(" ", strip=True)
print("panel trong khối 30:", "Bổ sung 16/09/2026" in txt, "| có 600 SP:", "600 sản phẩm" in txt,
      "| có Pegasol:", "Pegasol" in txt, "| có 3% phụ gia:", "3% phụ gia 08/22" in txt)
print("portal:", h2.count('class="inc"'), "khối | div:", (h2.count("<div"), h2.count("</div>")), "| figure:", h2.count("<figure"))

MO = (" — BỔ SUNG 16/09/2026 (Cty Đăng Long — màu DLO 16/19, quy trình MDF, sản phẩm mặt hộc kéo): công đoạn hoàn thiện sản xuất 19 giờ ngày 15/9/2026; "
      "hôm nay 16/09 kiểm tra chất lượng ĐỘ BÁM DÍNH KHÔNG ĐẠT. Quy trình dùng glaze màu công thức CHƯA điều chỉnh, mới giao xuống mã số tháng 9; "
      "kỹ thuật kiểm tra trước phát hiện màu sắc lệch so với thẻ gốc, kỹ thuật điều chỉnh màu lại và cho sản xuất — KHÔNG có thông tin màu sai về công ty. "
      "Trên chuyền kỹ thuật có điều chỉnh 3% phụ gia 08/22 vào hỗn hợp Lót NC HB. Đã sản xuất khoảng 53 sản phẩm hộc kéo/ngày; thứ Hai 14/09/2026 và ngày 15/09/2026 kiểm tra độ bám ĐẠT yêu cầu "
      "(hôm nay kiểm lại vẫn đạt); tiếp tục sản xuất số lượng còn lại khoảng 600 sản phẩm thì kiểm tra độ bám KHÔNG ĐẠT. "
      "Điều chỉnh công thức glaze màu DLO 16/19 (màu hệ Pegasol pha với glaze tự nhiên và dung môi PE): kỹ thuật đã kiểm tra trước trên thẻ — ĐẠT; hôm nay cho thử thực tế trên chuyền, mai 17/09 sẽ đánh giá kết quả.")
k = sqlite3.connect(r"C:\Claw\Khieu Nai KHach Hang\btchem_kph.db", timeout=90, isolation_level=None)
kc = k.cursor(); kc.execute("BEGIN IMMEDIATE")
kc.execute("UPDATE ho_so_kph SET mo_ta = mo_ta || ?, cap_nhat = cap_nhat || ? WHERE id = 812",
           (MO, " | 16/09/2026 — Bổ sung báo cáo Lộc QC 16/09 (DLO 16/19 quy trình MDF: độ bám dính không đạt ~600 sản phẩm; KT tự điều chỉnh màu lệch thẻ gốc không báo công ty; thử công thức glaze mới — đánh giá 17/09) vào khối 30 portal — Phòng Kỹ thuật"))
kc.execute("COMMIT")
print("hồ sơ #812:", kc.execute("SELECT length(mo_ta), length(cap_nhat) FROM ho_so_kph WHERE id=812").fetchone())
k.close()
c = sqlite3.connect(r"C:\c\deepseek-harness\claw2-db\btchem.db", timeout=90, isolation_level=None)
cc = c.cursor(); cc.execute("BEGIN IMMEDIATE")
cc.execute("UPDATE su_co_kph SET mo_ta_su_co = mo_ta_su_co || ? WHERE id = 48", (MO,)); cc.execute("COMMIT")
print("su_co_kph #48:", cc.execute("SELECT length(mo_ta_su_co) FROM su_co_kph WHERE id=48").fetchone())
c.close()
