120 lines
5.0 KiB
Markdown
120 lines
5.0 KiB
Markdown
# Sprint 6 Phase 4 Dashboard Review
|
|
|
|
## 1. Summary
|
|
|
|
ปรับปรุง Dashboard ทั้งฝั่ง Employee และ HRD บนโมดูล `overview` เดิม โดยเพิ่ม KPI cards, filter, chart sections, K/S/A progress, recent activity และย้ายการคำนวณหลักไปใช้ database aggregation เพื่อลดการโหลดข้อมูลดิบเข้าหน่วยความจำ
|
|
|
|
## 2. Files Changed
|
|
|
|
- `src/app/dashboard/overview/layout.tsx`
|
|
- `src/app/dashboard/overview/page.tsx`
|
|
- `src/app/dashboard/overview/@area_stats/page.tsx`
|
|
- `src/app/dashboard/overview/@bar_stats/page.tsx`
|
|
- `src/app/dashboard/overview/@pie_stats/page.tsx`
|
|
- `src/app/dashboard/overview/@sales/page.tsx`
|
|
- `src/features/overview/server/overview-data.ts`
|
|
- `src/features/overview/components/overview-filter-panel.tsx`
|
|
- `src/features/overview/components/ksa-progress.tsx`
|
|
- `src/features/overview/components/top-courses-chart.tsx`
|
|
- `src/features/overview/components/area-graph.tsx`
|
|
- `src/features/overview/components/bar-graph.tsx`
|
|
- `src/features/overview/components/pie-graph.tsx`
|
|
|
|
## 3. Database Queries Added
|
|
|
|
- Aggregate KPI query by approval status
|
|
- Aggregate K/S/A approved hours by category
|
|
- Monthly approved-hours and approved-record trend by month
|
|
- Department ranking by approved hours
|
|
- Top courses by approved hours
|
|
- Active employee scope query with company/department filters
|
|
- Passed / not-passed target calculation from per-user yearly approved hours
|
|
- Pending review count query
|
|
- Distinct filter option queries for year, company, department
|
|
- Recent activity query with `limit 5`
|
|
|
|
## 4. KPI Cards Added
|
|
|
|
### Employee
|
|
|
|
- Approved Hours
|
|
- Pending Hours
|
|
- Rejected Hours
|
|
- Completion Percentage
|
|
|
|
### HRD
|
|
|
|
- Total Employees
|
|
- Employees Passed Target
|
|
- Employees Not Passed Target
|
|
- Pending Review Count
|
|
|
|
## 5. Charts Added
|
|
|
|
### Employee
|
|
|
|
- K/S/A Progress section
|
|
- Recent Activity section
|
|
|
|
### HRD
|
|
|
|
- K/S/A Distribution
|
|
- Monthly Training Trend
|
|
- Department Ranking
|
|
- Top Courses
|
|
|
|
## 6. Filters Added
|
|
|
|
### Employee
|
|
|
|
- Year
|
|
|
|
### HRD
|
|
|
|
- Year
|
|
- Company
|
|
- Department
|
|
|
|
## 7. Responsive Notes
|
|
|
|
- Filter panel ใช้ grid ที่ยุบลงได้บน mobile/tablet
|
|
- KPI cards แสดง 1 คอลัมน์บนจอแคบ และขยายเป็น 2/4 คอลัมน์ตาม breakpoint
|
|
- Employee dashboard ใช้ 2 sections หลักที่ไม่บีบข้อความจนอ่านยากบน 360px - 412px
|
|
- HRD charts ถูกจัดใน grid เดิมของ overview และยังคงรองรับ 768px, 1024px, 1440px
|
|
|
|
## 8. Performance Notes
|
|
|
|
- ใช้ SQL aggregation สำหรับ KPI และ charts แทนการโหลด training records ทั้งหมดมา reduce ใน memory
|
|
- Recent activity จำกัดที่ 5 รายการ
|
|
- Ranking charts จำกัดที่ top 5
|
|
- Filter options ดึงจาก query ที่ group/distinct ตาม organization
|
|
- ใช้ `cache()` เพื่อให้ layout และ parallel routes ใช้ dataset ชุดเดียวกันใน request เดียว
|
|
|
|
## 9. Manual Test Checklist
|
|
|
|
- Employee เปิด `/dashboard/overview` แล้วเห็น KPI 4 ใบ
|
|
- Employee เปลี่ยนปีแล้ว KPI, K/S/A progress และ recent activity เปลี่ยนตาม
|
|
- HRD เปิด `/dashboard/overview` แล้วเห็น KPI 4 ใบและ chart 4 ส่วน
|
|
- HRD กรองตามปี / บริษัท / แผนก แล้ว KPI และ chart เปลี่ยนตาม
|
|
- HRD ดู Pending Review Count ได้ถูกต้อง
|
|
- Recent Activity แสดงสถานะรายการอบรมถูกต้อง
|
|
- Dashboard ใช้งานได้บน 360px, 390px, 412px, 768px, 1024px, 1440px
|
|
|
|
## 10. Known Limitations
|
|
|
|
- การกรอง HRD ตาม company/department ยังอิงข้อมูลบน `users` ปัจจุบัน ไม่ใช่ historical snapshot ตอน submit record
|
|
- Top Courses และ Department Ranking ใช้ approved hours เป็นตัวจัดอันดับหลัก
|
|
- หากปีที่เลือกไม่มี training policy ระบบจะ fallback ไป policy ล่าสุด หรือ 0 ชั่วโมงเมื่อไม่มี policy เลย
|
|
|
|
## 11. Go-Live Readiness Score
|
|
|
|
**8.5 / 10**
|
|
|
|
เหตุผล:
|
|
|
|
- ฟังก์ชันหลักครบตาม requirement
|
|
- ไม่มี schema change และไม่ต้อง migrate
|
|
- typecheck ผ่าน
|
|
- lint ผ่าน โดยเหลือเฉพาะ warning เดิมของโปรเจกต์ที่ไม่เกี่ยวกับ phase นี้
|
|
- ยังควรมี manual QA ฝั่ง responsive และตรวจค่าจริงกับ dataset production-like ก่อน go-live
|