commit
This commit is contained in:
147
docs/sprint-4-training-policy-course-master-review.md
Normal file
147
docs/sprint-4-training-policy-course-master-review.md
Normal file
@@ -0,0 +1,147 @@
|
||||
# Sprint 4 Review: Training Policy and Course Master
|
||||
|
||||
## 1. Summary of changes
|
||||
|
||||
- Implemented the HRD-only Training Policy module at `/dashboard/training-policy`.
|
||||
- Added yearly training policy create/update flow with Zod validation.
|
||||
- Enforced `kHours + sHours + aHours === totalHours`.
|
||||
- Added active policy handling so the active record drives dashboard targets.
|
||||
- Updated dashboard summary cards to use Training Policy values.
|
||||
- Enhanced Course Master to support:
|
||||
- `courseCode`
|
||||
- `courseName` via existing `name`
|
||||
- `description`
|
||||
- `defaultCategory` via existing `category`
|
||||
- `defaultHours` via existing `standardHours`
|
||||
- `provider` via existing `organizer`
|
||||
- `status` via existing `isActive`
|
||||
- `mandatory` via existing `isRequired`
|
||||
- `certificateRequired`
|
||||
- `validityMonths` via existing `certificateValidityMonths`
|
||||
- `trainingCost`
|
||||
- Added loading, empty, success, and error states for Sprint 4 pages.
|
||||
|
||||
## 2. Files changed
|
||||
|
||||
### Training Policy
|
||||
|
||||
- `src/app/api/training-policies/route.ts`
|
||||
- `src/app/api/training-policies/[id]/route.ts`
|
||||
- `src/app/dashboard/training-policy/page.tsx`
|
||||
- `src/app/dashboard/training-policy/loading.tsx`
|
||||
- `src/app/dashboard/training-policy/error.tsx`
|
||||
- `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/components/training-policy-page.tsx`
|
||||
- `src/features/training-policy/components/training-policy-form.tsx`
|
||||
- `src/features/training-policy/constants/training-policy-defaults.ts`
|
||||
- `src/features/training-policy/schemas/training-policy.ts`
|
||||
- `src/features/training-policy/server/training-policy-data.ts`
|
||||
|
||||
### Course Master
|
||||
|
||||
- `src/app/api/courses/route.ts`
|
||||
- `src/app/api/courses/[id]/route.ts`
|
||||
- `src/app/dashboard/courses/loading.tsx`
|
||||
- `src/app/dashboard/courses/error.tsx`
|
||||
- `src/app/dashboard/courses/[courseId]/loading.tsx`
|
||||
- `src/app/dashboard/courses/[courseId]/error.tsx`
|
||||
- `src/features/courses/api/types.ts`
|
||||
- `src/features/courses/components/course-form.tsx`
|
||||
- `src/features/courses/components/course-tables/columns.tsx`
|
||||
- `src/features/courses/components/course-tables/index.tsx`
|
||||
- `src/features/courses/components/course-tables/options.tsx`
|
||||
- `src/features/courses/constants/course-options.ts`
|
||||
- `src/features/courses/schemas/course.ts`
|
||||
- `src/features/courses/server/course-data.ts`
|
||||
|
||||
### Dashboard usage
|
||||
|
||||
- `src/features/overview/server/overview-data.ts`
|
||||
|
||||
## 3. Database changes
|
||||
|
||||
- No new schema changes were required.
|
||||
- Sprint 4 reused the existing `training_policies` table.
|
||||
- Sprint 4 reused existing `courses` columns:
|
||||
- `course_code`
|
||||
- `category`
|
||||
- `standard_hours`
|
||||
- `organizer`
|
||||
- `is_required`
|
||||
- `certificate_required`
|
||||
- `certificate_validity_months`
|
||||
- `training_cost`
|
||||
|
||||
## 4. Migration commands
|
||||
|
||||
- No new migration is required for this sprint.
|
||||
- If your database has not yet applied the current schema in the repository, run:
|
||||
|
||||
```bash
|
||||
npm run migrate
|
||||
```
|
||||
|
||||
## 5. New routes
|
||||
|
||||
- `GET /api/training-policies`
|
||||
- `POST /api/training-policies`
|
||||
- `PATCH /api/training-policies/[id]`
|
||||
- `/dashboard/training-policy`
|
||||
|
||||
## 6. Validation rules
|
||||
|
||||
### Training Policy
|
||||
|
||||
- `year` is required
|
||||
- `totalHours` is required and must be greater than `0`
|
||||
- `kHours` is required and must be `>= 0`
|
||||
- `sHours` is required and must be `>= 0`
|
||||
- `aHours` is required and must be `>= 0`
|
||||
- `kHours + sHours + aHours` must equal `totalHours`
|
||||
- `year` must be unique per organization
|
||||
|
||||
### Course Master
|
||||
|
||||
- `courseName` maps to `name` and must be at least 2 characters
|
||||
- `defaultCategory` maps to `category` and is required
|
||||
- `defaultHours` maps to `standardHours` and must be `>= 0`
|
||||
- `validityMonths` maps to `certificateValidityMonths` and must be an integer `>= 0`
|
||||
- `trainingCost` must be `>= 0` when provided
|
||||
- `courseCode` is optional and limited to 50 characters
|
||||
|
||||
## 7. Permission rules
|
||||
|
||||
- Training Policy page and APIs require HRD access through existing Auth.js session helpers.
|
||||
- Employee users cannot access `/dashboard/training-policy`.
|
||||
- Course Master remains HRD-only through the existing route and API guards.
|
||||
- Dashboard policy usage respects the user's existing organization/session scope.
|
||||
|
||||
## 8. Manual test checklist
|
||||
|
||||
- [ ] HRD can open Training Policy page.
|
||||
- [ ] Employee cannot open Training Policy page.
|
||||
- [ ] HRD can create policy.
|
||||
- [ ] HRD can edit policy.
|
||||
- [ ] System blocks invalid K/S/A sum.
|
||||
- [ ] Dashboard uses policy values.
|
||||
- [ ] HRD can create course.
|
||||
- [ ] HRD can edit course.
|
||||
- [ ] Course Master supports `certificateRequired`.
|
||||
- [ ] Course Master supports `trainingCost`.
|
||||
|
||||
## 9. Known limitations
|
||||
|
||||
- Course category input is now aligned to `K/S/A`, but legacy category values are still preserved for existing rows.
|
||||
- Training Policy currently supports create and update only; delete/archive flow is not part of Sprint 4.
|
||||
- Dashboard summary cards use the active policy, or the shared default example if no policy row exists yet.
|
||||
|
||||
## 10. Next recommended sprint
|
||||
|
||||
- Add audit logging for Training Policy changes.
|
||||
- Add a dedicated policy history detail or archive flow.
|
||||
- Expand dashboard policy reporting to show K/S/A completion progress, not only total-hour target progress.
|
||||
- Add course import/export support if HRD master-data volume is expected to grow.
|
||||
|
||||
Reference in New Issue
Block a user