---
name: tong-hop-bao-cao-kph
description: "Hướng dẫn tổng hợp báo cáo KPH (Khiếu nại - Phản ánh) từ dữ liệu thô trong thư mục Raw-Report — đọc dữ liệu, phân tích, viết báo cáo tổng hợp, lưu file DOCX và PDF."
version: 1.0.0
author: Phòng QC BT-Chem
---

# Tổng hợp báo cáo KPH từ Raw-Report

## Khi nào dùng skill này

Khi có thư mục dữ liệu thô trong `Raw-Report/` chứa:
- File DOCX báo cáo QC
- File ảnh JPEG (báo cáo viết tay)
- File PDF scan

Cần tổng hợp thành báo cáo hoàn chỉnh và lưu vào `BA0-CAO/`.

---

## Quy trình thực hiện

### Bước 1: Đọc danh sách file

```bash
ls -la "/c/antigra-DS/CLAW_LAM_VIEC/Bao cao - Hanh chinh/KPH/Raw-Report/<ten-thu-muc>/"
```

### Bước 2: Đọc nội dung từng file

- **DOCX:** Dùng `read_file()` để trích xuất text
- **Ảnh JPEG (báo cáo viết tay):** Dùng `vision_analyze()` với prompt:
  > "Đọc toàn bộ nội dung chữ trong ảnh, không bỏ sót chi tiết nào."
- **PDF scan:** Thử `read_file()`. Nếu là binary (không đọc được text), bỏ qua và dùng ảnh JPEG cùng thư mục (nếu có)
- **Ảnh chụp sản phẩm bị khiếu nại (JPEG/PNG, không phải văn bản viết tay):**
  - Đây là ảnh minh chứng thực tế (bề mặt lỗi, mẫu vật, bùi nhùi/dụng cụ kiểm tra dính lỗi...) — cần **giữ lại và chèn vào báo cáo**, không chỉ đọc mô tả rồi bỏ.
  - Nếu ảnh là screenshot có lẫn giao diện phần mềm/sidebar không liên quan, dùng Python (`PIL.Image.crop`) để cắt bỏ phần thừa trước khi chèn.
  - Nhận diện ảnh sản phẩm vs ảnh văn bản viết tay bằng cách xem trước nội dung ảnh (không có chữ viết tay dày đặc, chủ yếu là hình chụp vật thể/bề mặt).

### Bước 3: Phân tích & xác định các thông tin cốt lõi

| Thông tin | Mô tả |
|-----------|-------|
| Sản phẩm / Mã số | Tên màu, mã sản xuất (MSSX), số lượng |
| Nhà máy | Nơi xảy ra sự cố |
| Hiện tượng lỗi | Mô tả cụ thể lỗi |
| Nguyên nhân | Kết luận từ QC/KT |
| Giải pháp đã xử lý | Phương án tạm thời, kết quả |
| Giải pháp triệt để | Nếu có, quy trình mới |
| Timeline | Các mốc thời gian quan trọng |

### Bước 4: Viết báo cáo DOCX

Dùng `python-docx` (đã cài sẵn) để tạo file DOCX với cấu trúc:

```
I. THÔNG TIN CHUNG
II. VẤN ĐỀ KỸ THUẬT          ← Chèn ảnh sản phẩm bị khiếu nại ngay sau phần "1. Hiện tượng lỗi"
III. XỬ LÝ SỰ CỐ
IV. THÔNG TIN QUAN TRỌNG TRONG SẢN XUẤT
V. TỔNG HỢP TRẠNG THÁI XỬ LÝ ( ghi chính xác những thông tin trong báo cáo gốc đã ghi, nếu chưa có thì ghi chưa có ) 
VI. CÔNG VIỆC CẦN LÀM TIẾP THEO  ← QUAN TRỌNG: nêu rõ từng việc + người chịu trách nhiệm + mức độ ưu tiên ( nếu thông tin chưa có trong báo cáo gốc thì ghi chưa có, còn tự suy luận thì ghi rõ là nhận định của tôi )  
VII. NHẬN XÉT & KIẾN NGHỊ : ( nếu thông tin chưa có trong báo cáo gốc thì ghi chưa có, còn tự suy luận thì ghi rõ là nhận định của tôi )  

```

**QUY TẮC QUAN TRỌNG KHI VIẾT NỘI DUNG V, VI, VII:**
- **Mục V (Tổng hợp trạng thái xử lý):** Phải ghi chính xác những thông tin trong báo cáo gốc đã ghi nhận. Tuyệt đối không tự ý thêm bớt. Nếu báo cáo gốc không đề cập hoặc chưa có thông tin, bắt buộc phải ghi rõ là **"Chưa có"**. Đối với các đánh giá, kết luận hoặc trạng thái, phải mở ngoặc ghi rõ dẫn chứng từ file báo cáo gốc nào (ví dụ: *(Dẫn chứng: 1. NỘI DUNG KPH.docx)* hoặc *(Dẫn chứng: 2. BÁO CÁO KIỂM TRA CỦA KT TẠI KH.jpg)*).
- **Mục VI (Công việc cần làm tiếp theo):** Nêu rõ ràng từng đầu việc, người chịu trách nhiệm thực hiện và mức độ ưu tiên tương ứng. Nếu thông tin này chưa có trong báo cáo gốc, phải ghi là **"Chưa có"**. Đối với các công việc trích xuất từ báo cáo gốc, phải mở ngoặc ghi rõ dẫn chứng từ file báo cáo gốc nào. Trường hợp AI tự suy luận hoặc đề xuất riêng ngoài báo cáo gốc, phải ghi chú rõ ràng là **"nhận định của tôi"**.
- **Mục VII (Nhận xét & kiến nghị):** Ghi chính xác các nhận xét/kiến nghị từ báo cáo gốc và mở ngoặc ghi rõ dẫn chứng từ file báo cáo gốc nào. Nếu không có, ghi **"Chưa có"**. Các nhận xét, suy luận hay kiến nghị bổ sung riêng của AI phải được ghi rõ là **"nhận định của tôi"**.


**Chèn ảnh sản phẩm bị khiếu nại (nếu Raw-Report có):**
- Vị trí: ngay sau các gạch đầu dòng mô tả "Hiện tượng lỗi" trong mục II, trước phần "Kết quả kiểm tra".
- Mỗi ảnh đi kèm caption căn giữa, in nghiêng, mô tả ngắn gọn ảnh chụp gì (VD: "Hình 1: Bề mặt sản phẩm sau khi cán... — vệt loang không đều màu").
- Cắt ảnh bằng `PIL.Image.crop()` trước nếu ảnh gốc lẫn giao diện phần mềm/watermark không liên quan.
- Dùng hàm `add_image_with_caption()` (xem code mẫu bên dưới), độ rộng ảnh khoảng 9 Cm để vừa trang A4.

**Quy tắc định dạng DOCX:**
- Font: **Times New Roman**, cỡ 12
- Header: căn giữa, in đậm
- Bảng: có đường viền `Table Grid`, header màu xanh nhạt (`D9E2F3`)
- Kết quả: ✅ Đạt / ❌ Không đạt / ⚠️ Đã ghi nhận

**Lưu ý khi tạo DOCX:**
- Dùng `from docx import Document`
- Set margin: top/bottom 2cm, left/right 2.5cm
- Dùng `execute_code` để chạy Python script tạo DOCX
- File lưu tại: `C:\antigra-DS\CLAW_LAM_VIEC\Bao cao - Hanh chinh\KPH\BA0-CAO\`

### Bước 5: Xuất PDF (nếu cần)

Dùng `fpdf2` với font **Times New Roman** (có sẵn tại `C:\Windows\Fonts\times.ttf`):

```python
from fpdf import FPDF
pdf = FPDF()
pdf.add_font('TimesNewRoman', '', r'C:\Windows\Fonts\times.ttf')
pdf.add_font('TimesNewRoman', 'B', r'C:\Windows\Fonts\timesbd.ttf')
```

**Lưu ý:** Không dùng `weasyprint` — bị lỗi thiếu thư viện GTK trên Windows. Dùng `fpdf2` hoặc `python-docx`.

---

## Cấu trúc thư mục

```
KPH/
├── Raw-Report/              ← Dữ liệu thô
│   ├── <Tên vụ việc>/
│   └── SKILL.md
├── BA0-CAO/                 ← Báo cáo đầu ra (phân loại theo nhà máy)
│   ├── Ho Nai/
│   │   ├── Bao-cao-tong-hop-su-co-AQ929-HoNai.md
│   │   ├── Bao-cao-tong-hop-su-co-AQ929-HoNai.pdf
│   │   └── Bao-cao-tong-hop-su-co-AQ-002H-HoNai.docx
│   ├── Ho Nai M&M/
│   │   └── Bao-cao-tong-hop-su-co-AQ703-AQ724-HoNai-M&M.docx
│   ├── Ho Nai D&D/
│   │   └── Bao-cao-tong-hop-su-co-DD834-xi-vang-HoNai-D&D.docx
│   ├── Kim Phong/
│   │   └── Bao-cao-tong-hop-su-co-Lot-mau-KH-Cherry-FOA-H.docx
│   ├── Demeyer/
│   │   └── Bao-cao-tong-hop-su-co-Demeyer-White-H.docx
│   └── Minh Phat/
│       └── Bao-cao-tong-hop-su-co-Glaze-MP595H-MinhPhat.docx   ← có chèn ảnh sản phẩm
└── SKILL.md
```

---

## Các lỗi thường gặp

| Lỗi | Giải pháp |
|-----|-----------|
| `weasyprint` lỗi thiếu GTK | Bỏ qua, dùng `fpdf2` hoặc chỉ tạo DOCX |
| Pandoc không có trong PATH | Gọi qua `pypandoc` với `PYPANDOC_PANDOC` env var |
| File PDF binary không đọc được | Dùng ảnh JPEG cùng thư mục thay thế |
| `fpdf2` không tìm thấy font | Dùng font Times New Roman từ `C:\Windows\Fonts\` |
| Đường dẫn MSYS không hoạt động trong Python | Dùng raw string Windows path (`r'C:\...'`) |

---

## Ví dụ: Template DOCX (các đoạn code thường dùng)

```python
from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT

doc = Document()
style = doc.styles['Normal']
style.font.name = 'Times New Roman'
style.font.size = Pt(12)

# Heading
h = doc.add_heading('BÁO CÁO TỔNG HỢP', level=1)
for run in h.runs:
    run.font.color.rgb = RGBColor(0, 0, 0)

# Table
table = doc.add_table(rows=..., cols=...)
table.style = 'Table Grid'

# Chèn ảnh sản phẩm bị khiếu nại (đặt trong mục II, sau "Hiện tượng lỗi")
from docx.shared import Cm

def add_image_with_caption(doc, image_path, caption, width_cm=9):
    p = doc.add_paragraph()
    p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    run = p.add_run()
    run.add_picture(image_path, width=Cm(width_cm))
    cap = doc.add_paragraph()
    cap.alignment = WD_ALIGN_PARAGRAPH.CENTER
    r = cap.add_run(caption)
    r.italic = True
    r.font.name = 'Times New Roman'
    r.font.size = Pt(11)
    r.font.color.rgb = RGBColor(0, 0, 0)

# Nếu ảnh gốc lẫn giao diện phần mềm/watermark, cắt trước khi chèn:
# from PIL import Image
# im = Image.open(raw_path); im.crop((left, top, right, bottom)).save(clean_path)

add_image_with_caption(doc, 'duong_dan_anh_1.png', 'Hình 1: Mô tả ngắn gọn nội dung ảnh')

# Save
doc.save(path)
```

---

