125 lines
5.5 KiB
Markdown
125 lines
5.5 KiB
Markdown
# Policy Management Enhancement Report
|
|
|
|
## 1. Existing Structure Review
|
|
|
|
- พบว่าโมดูล `training-policy` เดิมเชื่อมฐานข้อมูลจริงอยู่แล้ว แต่ยังมี scope ค่อนข้างเล็ก ใช้เพียง `year`, `total_hours`, `k_hours`, `s_hours`, `a_hours`, `is_active`
|
|
- ส่วนที่ Reuse:
|
|
- โครง `src/features/<feature>/api/{types,service,queries,mutations}.ts`
|
|
- Route Handlers ใต้ `src/app/api/training-policies/**`
|
|
- `useAppForm` + Zod schema เดิม
|
|
- shared DataTable stack (`DataTable`, `DataTableToolbar`, `useDataTable`, `DataTableColumnHeader`)
|
|
- audit log infrastructure เดิม
|
|
- ส่วนที่ Refactor:
|
|
- เปลี่ยน access control จาก `requireHRD()` เป็น permission-first ผ่าน `requirePermission(...)`
|
|
- ปรับ list API ให้รองรับ pagination / search / status / sort
|
|
- ปรับหน้า dashboard ให้ใช้ query-string driven table pattern แบบ feature อื่นใน repo
|
|
- ส่วนที่ Extend:
|
|
- detail endpoint
|
|
- clone / activate / deactivate endpoints
|
|
- history endpoint ที่ดึงจาก audit log
|
|
- action menu และ detail sheet ฝั่ง UI
|
|
- ส่วนที่สร้างใหม่:
|
|
- route handlers สำหรับ `clone`, `activate`, `deactivate`, `history`
|
|
- helper permission dashboard guard แบบ generic
|
|
- UI table flow ใหม่สำหรับ policy management
|
|
|
|
## 2. Files Changed
|
|
|
|
- `src/app/api/training-policies/route.ts`
|
|
- `src/app/api/training-policies/[id]/route.ts`
|
|
- `src/app/api/training-policies/[id]/clone/route.ts`
|
|
- `src/app/api/training-policies/[id]/activate/route.ts`
|
|
- `src/app/api/training-policies/[id]/deactivate/route.ts`
|
|
- `src/app/api/training-policies/[id]/history/route.ts`
|
|
- `src/app/dashboard/training-policy/page.tsx`
|
|
- `src/features/audit-logs/server/audit-log-data.ts`
|
|
- `src/features/audit-logs/server/audit-service.ts`
|
|
- `src/features/training-policy/api/types.ts`
|
|
- `src/features/training-policy/api/service.ts`
|
|
- `src/features/training-policy/api/queries.ts`
|
|
- `src/features/training-policy/api/mutations.ts`
|
|
- `src/features/training-policy/schemas/training-policy.ts`
|
|
- `src/features/training-policy/server/training-policy-data.ts`
|
|
- `src/features/training-policy/components/training-policy-form.tsx`
|
|
- `src/features/training-policy/components/training-policy-page.tsx`
|
|
- `src/lib/auth/page-guards.ts`
|
|
|
|
## 3. Database Changes
|
|
|
|
- ไม่มี migration ในรอบนี้
|
|
- ไม่มีการเพิ่ม column / index / constraint
|
|
- เลือก reuse schema เดิมเพื่อลดผลกระทบกับ runtime data และให้ enhancement รอบแรก deploy ได้เร็ว
|
|
|
|
## 4. Permission Matrix
|
|
|
|
- `training_policy:read`
|
|
- list policy
|
|
- view policy detail
|
|
- view policy history
|
|
- `training_policy:write`
|
|
- create
|
|
- edit
|
|
- clone
|
|
- activate
|
|
- deactivate
|
|
|
|
หมายเหตุ: prompt เป้าหมายต้องการ permission แยกละเอียดกว่านี้ แต่ permission catalog ปัจจุบันมีเพียง `read` และ `write` สำหรับโมดูลนี้
|
|
|
|
## 5. Business Rules
|
|
|
|
- 1 องค์กรมี policy active ได้เพียง 1 รายการ
|
|
- หากเปิดใช้งาน policy ใหม่ ระบบจะปิด policy อื่นในองค์กรก่อน
|
|
- clone จะคัดลอกค่า hours ทั้งหมด แต่ตั้ง `is_active = false`
|
|
- clone จะหา `year` ถัดไปที่ยังไม่ซ้ำโดยเริ่มจาก `source.year + 1`
|
|
- create / update ยังบังคับ rule เดิม: `K + S + A` ต้องเท่ากับ `totalHours`
|
|
- duplicate year ในองค์กรเดียวกันจะถูก block ที่ server
|
|
|
|
## 6. Versioning
|
|
|
|
- รอบนี้ยังไม่มี version table หรือ field-level diff versioning ในฐานข้อมูล
|
|
- ใช้ audit history เป็น lightweight history layer ชั่วคราวสำหรับการตรวจย้อนหลัง
|
|
|
|
## 7. Audit Log
|
|
|
|
- รองรับ action:
|
|
- `CREATE`
|
|
- `UPDATE`
|
|
- `CLONE`
|
|
- `ACTIVATE`
|
|
- `DEACTIVATE`
|
|
- history ดึงจาก `audit_logs` โดย filter `module_name = TRAINING_POLICY`
|
|
|
|
## 8. UI Screens
|
|
|
|
- List:
|
|
- shared DataTable
|
|
- search / status filter / pagination / sorting
|
|
- row action menu
|
|
- View:
|
|
- detail sheet
|
|
- history section
|
|
- Create / Edit:
|
|
- sheet + existing TanStack Form pattern
|
|
|
|
## 9. Testing
|
|
|
|
- ตรวจ `npm run lint` ผ่าน
|
|
- ตรวจ `npm run build` ผ่าน
|
|
- ไม่มี automated CRUD / permission / responsive regression test เพิ่มในรอบนี้
|
|
|
|
## 10. Remaining Improvements
|
|
|
|
- เพิ่ม schema จริงสำหรับ:
|
|
- policy name
|
|
- description
|
|
- effective date
|
|
- archived / restored state
|
|
- version
|
|
- mandatory courses
|
|
- certificate policy
|
|
- advanced settings
|
|
- แยก permission ให้ละเอียดตาม action (`clone`, `activate`, `audit`, `restore`)
|
|
- เพิ่ม soft delete / restore ตาม archived workflow
|
|
- เพิ่ม field-level version comparison
|
|
- เพิ่ม scheduled activation / policy comparison / rollback
|