# -*- coding: utf-8 -*-
r"""B184: BACKUP + ghi KPH tuần 3 (14/10) vào 2 CSDL:
  - Mở 3 vụ mới: TVT White (Tân Việt Tiến), HP 269 (Hạnh Phúc), Bóng Bex 03-2402 H 25% (Hành Mỹ)
  - Bổ sung tiến độ 14/10 vào 7 vụ đã có (chỉ NỐI, không ghi đè) + đổi trạng thái SW2-2108H -> Đang xử lý
"""
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)'
NGAY14 = '14/10/2026'

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

c = sqlite3.connect(BT)
k = sqlite3.connect(KPH)
c.execute('pragma foreign_keys=on')

# ── 1. MỞ 3 VỤ MỚI (su_co_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=("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.\n"
                "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 14/10/2026, đ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',
         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=("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 độ %s: KT chưa cập nhật thông tin mới." % NGAY14),
         loai='Độ nhớt thấp / nguyên liệu đầu vào', tt='Đang xử lý', ntd='KT',
         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=("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 độ %s: QC đang kiểm tra; chưa có báo cáo xử lý."
                "\nLiê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 sau ~50 ngày lưu kho)."
                % NGAY14),
         loai='Sai độ bóng / tái lập kém', tt='Đang xử lý', ntd='QC',
         nguon=NGUON),
]
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('  max id truoc: su_co_kph=%d · ho_so_kph=%d' % (max_c, max_k))
n_c = c.execute('select count(*) from su_co_kph').fetchone()[0]
n_k = k.execute('select count(*) from ho_so_kph').fetchone()[0]
idc, idk = [], []
for i, v in enumerate(MOI, 1):
    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'], {26: 3, 8: 30, 53: 115}[v['nm']], 1, v['mau'], v['tvv'], v['mo_ta'],
               '', '', '', '', 'QC/KT', '', '', '%s — Mở hồ sơ mới từ bảng theo dõi BGĐ tuần 3 tháng 10/2026.' % NGAY14, ''))
    idk.append(max_k)
c.commit(); k.commit()
print('  ĐÃ MỞ 3 vụ: su_co_kph %s · ho_so_kph %s' % (idc, idk))

# ── 2. BỔ SUNG TIẾN ĐỘ 14/10 (chỉ nối) ──────────────────────────────────
BO = {
    74: ("BGĐ chỉ đạo: thử thêm 5% paste trắng 3012 H vào Primer BT 02-2203 H (white). "
         "Tiến độ %s: 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ủ." % NGAY14),
    57: ("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 độ %s: KT chưa cập nhật thông tin mới." % NGAY14),
    60: ("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 độ %s: 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." % NGAY14),
    62: ("Tiến độ %s: 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." % NGAY14),
    70: ("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 độ %s: 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." % NGAY14),
    41: ("KPPN: RD điều chỉnh lại lớp lót; KT điều chỉnh lại quy trình. "
         "Tiến độ %s: RD làm mẫu và đưa KT thử nhưng chưa chốt được kết quả." % NGAY14),
    22: ("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 độ %s: KT chưa cập nhật thông tin mới." % NGAY14),
}
print('\n  --- bổ sung su_co_kph (chỉ nối vào trường còn trống/đã có):')
for i, txt in BO.items():
    tr = c.execute('select coalesce(ket_qua,""), coalesce(mo_ta_su_co,""), coalesce(trang_thai,"") from su_co_kph where id=?', (i,)).fetchone()
    if not tr:
        print('     #%-3d KHONG THAY -> bo qua' % i); continue
    cu_kq, cu_mt, tt = tr
    them = ('\nBổ sung %s — %s' % (NGAY14, txt))
    c.execute("""update su_co_kph set ket_qua = coalesce(ket_qua || ?, ?),
                        mo_ta_su_co = coalesce(mo_ta_su_co,'') || ?, nguon = coalesce(nguon,'') || ? where id=?""",
              ('\n' + them if cu_kq else them, them, '\n[%s] %s' % (NGAY14, NGUON), ' + ' + 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ý" (theo anh chốt)' % tt)
    print('     #%-3d ket_qua %4d -> %4d ký tự | trang_thai: %s' % (i, len(cu_kq), len(cu_kq or '') + len(them), tt or '(trống)'))
c.commit()

HO = {7: BO[74], 824: BO[57], 827: BO[60], 812: BO[70], 808: BO[41], 796: BO[22],
      15: ("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 độ %s: KT chưa cập nhật thông tin mới." % NGAY14)}
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 = '%s — %s — nguồn: %s' % (NGAY14, txt, 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()

# ── 3. KIỂM CHỨNG ĐỘC LẬP ───────────────────────────────────────────────
print('\n  === KIỂM CHỨNG:')
print('     su_co_kph: %d -> %d dong (them %d)' % (n_c, c.execute('select count(*) from su_co_kph').fetchone()[0], len(MOI)))
print('     ho_so_kph: %d -> %d ho so (them %d)' % (n_k, k.execute('select count(*) from ho_so_kph').fetchone()[0], len(MOI)))
for i in idc:
    r = c.execute('select id, substr(ten_vu_viec,1,60), trang_thai, length(mo_ta_su_co) from su_co_kph where id=?', (i,)).fetchone()
    print('     MOI su_co_kph #%d | %s | %s | mo_ta %dc' % r)
for i in idk:
    r = k.execute('select id, coalesce(ma_hs,"(trống)"), ngay_nhan, substr(san_pham_raw,1,44), 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()
