# -*- coding: utf-8 -*-
r"""B184b: BACKUP + ghi KPH tuần 3 (14/10) vào 2 CSDL — bản KHÔNG dùng %-format (dùng token {{N}})."""
import os, shutil, sqlite3, datetime, zipfile

BT = r'C:\c\deepseek-harness\claw2-db\btchem.db'
KPH = r'C:\Claw\Khieu Nai KHach Hang\btchem_kph.db'
LUUTRU = r'C:\Claw\Khieu Nai KHach Hang\_Luu-Tru'
TS = datetime.datetime.now().strftime('%Y%m%d_%H%M')
NGUON = 'Bảng theo dõi sự cố BGĐ tuần 3 tháng 10/2026 (12-14/10/2026)'


def T(s, n='14/10/2026'):
    return s.replace('{{N}}', n)


b1 = BT + '_bak_' + TS + '_truoc_kph_tuan3'
if not os.path.exists(b1):
    shutil.copy2(BT, b1)
os.makedirs(LUUTRU, exist_ok=True)
b2 = os.path.join(LUUTRU, 'btchem_kph_luu-tru_' + TS + '.zip')
if not os.path.exists(b2):
    with zipfile.ZipFile(b2, 'w', zipfile.ZIP_DEFLATED) as z:
        z.write(KPH, 'btchem_kph.db')
print('  backup: %s (%d byte) | %s (%d byte)' % (os.path.basename(b1), os.path.getsize(b1),
                                                 os.path.basename(b2), os.path.getsize(b2)))

c = sqlite3.connect(BT)
k = sqlite3.connect(KPH)

MOI = [
    dict(ngay='2026-10-12', nm=26, mau='Màu TVT White',
         tvv='Tân Việt Tiến (TVT White): khách phản ánh đơn sản xuất 13/08/26 bị ngả vàng (KPH mới 12/10/2026)',
         mo_ta=T("Nội dung khiếu nại: Mail phản ánh — đơn hàng sản xuất ngày 13/08/26 khách hàng phản ánh bị ngả vàng. "
                 "QC báo: quy trình sau khi tái chế phun 1 path và tái chế phun 2 paths sơn màu so với quy trình chuẩn, "
                 "màu sắc có sự chênh lệch nhưng không khác biệt nhiều. Chưa có báo cáo của KT. "
                 "Xử lý: chưa có báo cáo xử lý.\n"
                 "Bổ sung (QC, Báo cáo kiểm tra số 01-1026 ngày {{N}}, đo máy X-Rite sau 18 giờ): "
                 "sản xuất thực tế L 95,70 · a -0,18 · b 7,97; tái chế 1 path L 95,55 · a -0,16 · b 7,71 · ΔE 0,30; "
                 "tái chế 2 paths L 95,34 · a -0,28 · b 7,28 · ΔE 0,70; cảm quan: chênh lệch nhưng không đáng kể."),
         loai='Ngả vàng / sai màu', tt='Đang xử lý', ntd='QC + KT', kh=3,
         nguon=NGUON + ' + Báo cáo kiểm tra 01-1026 (QC, 14/10/2026)'),
    dict(ngay='2026-09-14', nm=8, mau='HP 269',
         tvv='Hạnh Phúc (HP 269): độ nhớt thấp (KPH 14/09/2026)',
         mo_ta=T("Nội dung: độ nhớt thấp. KPPN: KT cập nhật lại tỉ lệ pha của lót NC T 2012 là 1:1.5 và báo cáo lại cho sếp Tâm. "
                 "Tiến độ {{N}}: KT chưa cập nhật thông tin mới."),
         loai='Độ nhớt thấp / nguyên liệu đầu vào', tt='Đang xử lý', ntd='KT', kh=30, nguon=NGUON),
    dict(ngay='2026-10-12', nm=53, mau='Bóng Bex 03-2402 H 25% (BC) — Tumbling BC',
         tvv='Hành Mỹ (Bóng Bex 03-2402 H 25% (BC)): độ bóng láng bề mặt không đạt so với mẫu gốc (KPH mới 12/10/2026)',
         mo_ta=T("Nội dung khiếu nại: Mail phản ánh + KT báo — độ bóng láng bề mặt sản phẩm không đạt so với mẫu gốc. "
                 "Vật tư liên quan: Bóng Bex 03-2402 H 25% Tumbling BC (nsx: 19/09, 30/09) — SL: 140 kg. "
                 "Tiến độ {{N}}: QC đang kiểm tra; chưa có báo cáo xử lý.\n"
                 "Liên hệ nội bộ: cùng sản phẩm Bóng Bex 03-2402 H 25% BC với hồ sơ KPH 59-26 (lỗi khác: lỗi sản phẩm sau ~50 ngày lưu kho)."),
         loai='Sai độ bóng / tái lập kém', tt='Đang xử lý', ntd='QC', kh=115, nguon=NGUON),
]
n_c = c.execute('select count(*) from su_co_kph').fetchone()[0]
n_k = k.execute('select count(*) from ho_so_kph').fetchone()[0]
max_c = c.execute('select max(id) from su_co_kph').fetchone()[0] or 0
max_k = k.execute('select max(id) from ho_so_kph').fetchone()[0] or 0
print('  truoc: su_co_kph %d dong (max id %d) | ho_so_kph %d ho so (max id %d)' % (n_c, max_c, n_k, max_k))
idc, idk = [], []
for v in MOI:
    max_c += 1
    c.execute("""insert into su_co_kph (id, ngay_tao, giao_cho, ten_vu_viec, nha_may_id, san_pham_mau, mo_ta_su_co,
                                        loai_sai, giai_doan, trang_thai, nguyen_nhan, ket_qua, phuong_an_xu_ly,
                                        nguoi_theo_doi, nguon)
                 values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",
              (max_c, v['ngay'], '', v['tvv'], v['nm'], v['mau'], v['mo_ta'], v['loai'], '', v['tt'],
               '', '', '', v['ntd'], v['nguon']))
    idc.append(max_c)
    max_k += 1
    k.execute("""insert into ho_so_kph (id, nguon, sheet, loai_hs, ma_hs, ngay_nhan, id_kh, id_ngoi_bao,
                                        san_pham_raw, hien_tuong_raw, mo_ta, ket_qua_kiem_tra, nguyen_nhan,
                                        phuong_an, cong_viec_tiep, nguoi_chiu_trach, chi_dao, kppn, cap_nhat, ghi_chu)
                 values (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)""",
              (max_k, 'KPH tuần 3 tháng 10/2026 (bảng BGĐ 12-14/10/2026)', 'SỰ CỐ KPH 2026 (MỚI)', 'chat_luong',
               '', v['ngay'], v['kh'], 1, v['mau'], v['tvv'], v['mo_ta'], '', '', '', '', 'QC/KT', '', '',
               T('{{N}} — Mở hồ sơ mới từ bảng theo dõi BGĐ tuần 3 tháng 10/2026.'), ''))
    idk.append(max_k)
c.commit(); k.commit()
print('  ĐÃ MỞ 3 vụ: su_co_kph %s · ho_so_kph %s' % (idc, idk))

BO = {
    74: T("BGĐ chỉ đạo: thử thêm 5% paste trắng 3012 H vào Primer BT 02-2203 H (white). "
          "Tiến độ {{N}}: KT đã sơn thử nghiệm lên 10 chi tiết hàng rời, kết quả tương đối đồng màu khi ráp lại trên cùng 1 sản phẩm tủ."),
    57: T("KPPN: kỹ thuật up thẻ mẫu đầu chuyền có các giá trị Lab và chữ ký khách hàng; mang thẻ mẫu về cho QC ghi nhận và theo dõi. "
          "QC xác nhận đã nhận thẻ màu theo nội dung đã thống nhất với khách hàng. Tiến độ {{N}}: KT chưa cập nhật thông tin mới."),
    60: T("KPPN: RD điều chỉnh lại công thức; QC2 điều chỉnh lại phương pháp kiểm tra. "
          "Tiến độ {{N}}: QC2 kiểm tra bóng NC Mod 1106 30% — kết quả màng sơn bị đục; chuyển RD xem lại và điều chỉnh."),
    62: T("Tiến độ {{N}}: QC2 kiểm tra bóng NC Mod 1106 30% — kết quả màng sơn bị đục; chuyển RD xem lại và điều chỉnh."),
    70: T("BGĐ chỉ đạo: QC xuống nhà máy kiểm tra thực tế sản xuất và lấy mẫu về công ty kiểm tra. "
          "Tiến độ {{N}}: khi nào nhà máy chạy đơn hàng màu này trên gỗ MDF, QC sẽ xuống kiểm tra."),
    41: T("KPPN: RD điều chỉnh lại lớp lót; KT điều chỉnh lại quy trình. "
          "Tiến độ {{N}}: RD làm mẫu và đưa KT thử nhưng chưa chốt được kết quả."),
    22: T("KPPN: làm lại quy trình các màu đang bị khiếu nại dính mặt (KT) — quy trình mới màu TVIET 299A chưa có. "
          "Tiến độ {{N}}: KT chưa cập nhật thông tin mới."),
}
print('\n  --- bổ sung su_co_kph (chỉ NỐI):')
for i, txt in BO.items():
    tr = c.execute('select coalesce(ket_qua,""), coalesce(trang_thai,"") from su_co_kph where id=?', (i,)).fetchone()
    if not tr:
        print('     #%-3d KHONG THAY -> bo qua' % i); continue
    cu_kq, tt = tr
    them = 'Bổ sung 14/10/2026 — ' + txt
    c.execute("""update su_co_kph set ket_qua = coalesce(ket_qua || char(10), '') || ?,
                        nguon = coalesce(nguon,'') || ? where id = ?""", (them, ' + ' + NGUON, i))
    if i == 41:
        c.execute("update su_co_kph set trang_thai='Đang xử lý' where id=41")
        print('     #41  trang_thai: "%s" -> "Đang xử lý"' % tt)
    print('     #%-3d ket_qua %4d -> %4d ký tự' % (i, len(cu_kq), len(cu_kq) + len(them) + 1))
c.commit()

HO = {7: BO[74], 824: BO[57], 827: BO[60], 812: BO[70], 808: BO[41], 796: BO[22],
      15: T("Cập nhật quy trình đóng gói; cập nhật và theo dõi lại quy trình màu MHT 02 (KT). "
            "KPPN: KT phải kết luận cho BGĐ — chốt với khách hàng, thử theo quy trình mới kết quả có làm được hay không? "
            "Tiến độ {{N}}: KT chưa cập nhật thông tin mới.")}
print('\n  --- bổ sung ho_so_kph.cap_nhat:')
for i, txt in HO.items():
    r = k.execute('select coalesce(cap_nhat,"") from ho_so_kph where id=?', (i,)).fetchone()
    if not r:
        print('     #%-4d KHONG THAY -> bo qua' % i); continue
    cu = r[0]
    moc = '14/10/2026 — ' + txt + ' — nguồn: ' + NGUON
    k.execute("update ho_so_kph set cap_nhat = coalesce(cap_nhat || ' | ', '') || ? where id=?", (moc, i))
    print('     #%-4d cap_nhat %4d -> %4d ký tự' % (i, len(cu), len(cu) + len(moc) + 3))
k.commit()

print('\n  === KIỂM CHỨNG ĐỘC LẬP:')
print('     su_co_kph: %d -> %d dong | ho_so_kph: %d -> %d ho so' % (
    n_c, c.execute('select count(*) from su_co_kph').fetchone()[0],
    n_k, k.execute('select count(*) from ho_so_kph').fetchone()[0]))
for i in idc:
    r = c.execute('select id, substr(ten_vu_viec,1,58), trang_thai, length(mo_ta_su_co) from su_co_kph where id=?', (i,)).fetchone()
    print('     MOI su_co_kph #%-3d | %s | %s | mo_ta %dc' % r)
for i in idk:
    r = k.execute('select id, coalesce(nullif(ma_hs,""),"(trống)"), ngay_nhan, substr(san_pham_raw,1,40), length(cap_nhat) from ho_so_kph where id=?', (i,)).fetchone()
    print('     MOI ho_so_kph #%-4d | ma_hs=%s | %s | %s | cap_nhat %dc' % r)
print('     integrity: btchem=%s | kph=%s' % (c.execute('pragma integrity_check').fetchone()[0],
                                              k.execute('pragma integrity_check').fetchone()[0]))
c.close(); k.close()
