Tab: Đánh giá (screen-danhgia)
File:app.jslines 1623-2498,index.htmllines 304-347
1. Tổng quan
Màn hình cho phép đánh giá 6S theo 3 loại với form chấm điểm 0-5.
📝 Đánh giá nhanh (Quick Walk)
Loại đánh giá:
[🔍 Tự DG] [🔄 DG chéo] [👨🏫 BLD + Chuyên gia]
📍 Khu vực của bạn:
[🏘️ Xưởng May 2] [🔧 C1 - Chuyền 1]
→ Chọn lịch → Form chấm điểm → Gửi kết quả
2. Chọn loại đánh giá
| Loại | data-type | Icon | Mô tả |
|---|---|---|---|
| Tự DG | self | 🔍 | Người dùng tự chấm khu vực của mình |
| DG chéo | cross | 🔄 | Nhóm khác đánh giá chéo |
| BLĐ + Chuyên gia | expert | 👨🏫 | Ban lãnh đạo hoặc chuyên gia đánh giá |
Cách chọn: Click vào card. Card được chọn có border #1a237e, background #e8eaf6.
Hàm: onAssessEvalTypeChange(type)
3. Chọn khu vực (Location)
Tự DG (Self)
- Hiển thị danh sách các location của user (lấy từ
user.location_idsau login) - Giao diện: Cards grid với tên + path
- Click card → chọn location đó
- Hàm:
renderSelfLocCards(),selectSelfLoc(locId)
DG chéo / Chuyên gia (Cross/Expert)
- Tải danh sách nhiệm vụ được phân công từ API
/my-assignments - Hiển thị dạng card assignment:
📍 Xưởng May 2 (XM2-7)
🟢 Hàng tuần · Bộ tiêu chí 6S
📋 Lịch đánh giá tuần 26
🚀 Bắt đầu →
- Hàm:
loadCrossAssignments(),renderCrossAssignments(assignments)
4. Chọn lịch đánh giá
Khi chọn location, gọi API GET /schedules/by-location?location_id=X.
Lịch được nhóm theo tần suất:
| Icon | Tần suất |
|---|---|
| 🔴 | Hàng ngày |
| 🟠 | Hàng tuần |
| 🟢 | Hàng tháng / Quý / Năm / Một lần |
Click vào schedule → gọi startAssessSession(locId, templateId, scheduleId)
5. Form chấm điểm
Hiển thị sau khi chọn schedule.
Header phiên
📋 ASM-2026-00001 Đạt từ: 90%
Nhóm tiêu chí (Grouped by S)
Mỗi nhóm (S1, S2, ..., S6) hiển thị:
[🏘️ S1 - Sàng lọc 25/30 (83%)]
[████████████████████░░░░░░░░░░░] ← progress bar
S1.01 · Tiêu chí 1
💡 Gợi ý từ tags: 3/5 ← nếu có gợi ý từ thẻ 6S
❌0 ⚠️1 ✅2 ⭐3 ⭐4 ⭐5 ← radio chấm điểm
[Ghi chú..._________________________]
⚠️ Treo thẻ ← nếu điểm ≤ 1
Thang điểm
| Điểm | Icon | Ý nghĩa |
|---|---|---|
| 0 | ❌ | Không đạt |
| 1 | ⚠️ | Cần cải thiện |
| 2-3 | ✅ | Đạt |
| 4-5 | ⭐ | Xuất sắc |
Progress bar tổng thể
📊 Tiến độ: 18/24 73%
[████████████████░░░░░░░░░] 73% (màu vàng nếu < ngưỡng)
Ngưỡng đạt (threshold):
- Tự DG: 90%
- DG chéo: 85%
- Chuyên gia: 80%
Các hàm xử lý
| Hàm | Mô tả |
|---|---|
renderAssessForm() | Render form chấm điểm |
setAssessScore(itemId, score) | Lưu điểm + re-render |
setAssessComment(itemId, comment) | Lưu comment |
startAssessSession(locId, templateId, scheduleId) | Tạo phiên + load items |
6. Gửi kết quả
Nút: 📤 GỬI KẾT QUẢ
Hàm: submitAudit()
Quy trình:
Kiểm tra đã chấm hết item chưa?
→ Nếu chưa: confirm "Chỉ chấm X/Y tiêu chí. Gửi?"
→ Gọi API POST /sessions/{id}/submit
→ Tính điểm %
→ Hiển thị kết quả
Màn hình kết quả
✅ (hoặc ❌)
ĐẠT (hoặc KHÔNG ĐẠT)
85%
34/40 điểm
📋 Phiên: ASM-2026-00001
📍 Khu vực: Xưởng May 2
📋 Bộ tiêu chí: 6S Checklist
🏷️ Loại: Tự DG
📊 Đạt từ: 90%
⚠️ Tạo Observation ← nếu không đạt
✅ Hoàn tất
Đóng
7. Treo thẻ nhanh từ Assessment (quickCreateTagFromItem)
Khi chấm điểm ≤ 1 cho một item, hiển thị nút ⚠️ Treo thẻ.
Quy trình:
- Click → mở modal
- Tự động điền: mô tả = "[Từ đánh giá] item_name - comment"
- Phân loại S = group_code
- Loại thẻ = Đỏ nếu S6, Vàng nếu S1-S5
- User có thể chụp ảnh + chỉnh sửa mô tả
- Submit →
POST /tags→ tạo thẻ 6S
Hàm: quickCreateTagFromItem(itemId, itemName, groupCode), submitQuickTag(groupCode)
8. Tạo Observation (assessCreateObservation)
Khi kết quả không đạt, nút ⚠️ Tạo Observation xuất hiện.
- Click → mở form tạo observation
- Nhập mô tả + chọn loại S
- Submit → tạo thẻ 6S với prefix "[Observation từ đánh giá]"
Hàm: assessCreateObservation(), assessSubmitObservation()
9. "🔍 Tự DG" từ Location Drawer
Trong tab Danh sách, mỗi location drawer có nút 🔍 Tự DG.
Click → tự động:
- Chuyển sang tab Đánh giá
- Chọn loại
self - Chọn location đó
Hàm: startSelfAssessForLocation(locId)
Audio thuyết minh
audio/05-danh-gia.mp3Click play để nghe hướng dẫn bằng giọng đọc.
Screenshots

Chú thích: 3 lựa chọn loại đánh giá: Tự DG (🔍), Đánh giá chéo (🔄), BLĐ+Chuyên gia (👨🏫)

Chú thích: Click 🔍 Tự ĐG → danh sách location được gán hiện ra dạng card

Chú thích: User có location → các card khu vực hiện thị tên, thống kê thẻ

Chú thích: Click vào location → schedules/lịch đánh giá assigned cho khu vực đó

Chú thích: Form chấm điểm với các group S1-S6 và radio chấm điểm

Chú thích: Group S1 Sàng lọc với các tiêu chí S1.01, S1.02...

Chú thích: Radio button chấm điểm 0-5 cho 1 tiêu chí
images/danhgia/08-suggested-score.pngChú thích: Gợi ý điểm màu cam từ hệ thống 6S tags

Chú thích: Nút "⚠️ Treo thẻ" xuất hiện khi điểm ≤ 1

Chú thích: Modal tạo thẻ 6S nhanh từ kết quả đánh giá
images/danhgia/11-submit-result.pngChú thích: Modal kết quả sau khi submit đánh giá