49 lines
3.0 KiB
Markdown
49 lines
3.0 KiB
Markdown
# HR/Finance Phase 1 Sprint 1b — Plan kickoff (B9-B11 + F1-F6)
|
|
|
|
> Plan: `.harness/plans/hr-finance-fiscalisation.md` §3b
|
|
> Branch: `feature/hr-finance-phase-1b` (worktree `.worktrees/hr-finance-phase-1b/`)
|
|
> Owner: backend-expert (pre-step, B9-B11) → frontend-expert (F1-F6) → code-reviewer (gate).
|
|
|
|
## What this commit does
|
|
|
|
Two planning artefacts — no code yet.
|
|
|
|
1. **Spec the Sprint 1b scope** in `hr-finance-fiscalisation.md` §3b. Three backend touch-points (`PUT /finance/expenses/:id/approve|reject`, `GET /finance/expenses/summary`, verifier pin for `?status=` filters) and four frontend pages (LeaveApproval, StaffDirectory, PayrollRuns, Payslips) plus two modifications (Expenses approval actions, HRManagement alert cleanup).
|
|
2. **Relocate three untracked stub trackers** from the repo root into `.harness/plans/stubs-sprint-1b/` as `A.md`, `B.md`, `C.md`. These are the spec the parallel Track A/B/C stub sweep will follow after Sprint 1b lands.
|
|
|
|
## Files touched
|
|
|
|
| File | Change |
|
|
|---|---|
|
|
| `.harness/plans/hr-finance-fiscalisation.md` | +74 (insert §3b between §3a and §6) |
|
|
| `.harness/plans/stubs-sprint-1b/A.md` | renamed from `STUBS_TRACK_A_IDENTITY_ACCESS.md` |
|
|
| `.harness/plans/stubs-sprint-1b/B.md` | renamed from `STUBS_TRACK_B_FEES_AND_COPY.md` |
|
|
| `.harness/plans/stubs-sprint-1b/C.md` | renamed from `STUBS_TRACK_C_MODULE_PLACEHOLDERS.md` |
|
|
| `.harness/changelogs/2026-07-04-phase1b-planning.md` | new (this file) |
|
|
|
|
## What lands next (commit-by-commit)
|
|
|
|
| # | Commit | Owner | Notes |
|
|
|---|---|---|---|
|
|
| 1 | `feat(finance): B9 approve/reject state machine` | backend-expert | `PUT /api/finance/expenses/:id/approve\|reject` — records `approved_by` / `approved_at`, 409 on already-decided rows. |
|
|
| 2 | `feat(finance): B10 /expenses/summary` | backend-expert | Powers the approval queue tile on the Finance dashboard. |
|
|
| 3 | `docs: B11 verifier pin for ?status= filters` | backend-expert | One-line additions to the plan; no code unless a filter is missing. |
|
|
| 4 | `feat(hr/finance): F1-F6 — LeaveApproval, StaffDirectory, PayrollRuns, Payslips, Expenses approve UI, HRManagement cleanup` | frontend-expert | 4 new pages + 2 modifications. Routes + nav wiring + SCREENS.md update. |
|
|
| 5 | `feat(routes): remove /finance/payroll/runs placeholder mapping` | frontend-expert | `App.tsx:330` routes to `PayrollRuns`, not `HRManagement`. |
|
|
| 6 | review | code-reviewer | Gate. |
|
|
|
|
## Acceptance (recap from §3b)
|
|
|
|
- B9 happy path: approve `status='pending'` row → 200 with `status='approved'`, `approved_by`/`approved_at` populated.
|
|
- B9 sad path: approve already-approved row → 409.
|
|
- All 4 new pages render with real data; no `alert(`, no `window.prompt`, no `<Module Under Construction>`.
|
|
- `/finance/payroll/runs` no longer maps to `HRManagement`.
|
|
- `npm run build` green.
|
|
|
|
## Out of scope (parked)
|
|
|
|
- `approved → paid` transition (Sprint 1c).
|
|
- Accountant/Librarian/Nurse dashboards (§9 Phase 2+).
|
|
- Test framework + CI (`tester` rein's first sprint).
|
|
- Phase 0 nits (still parked on `fix/stabilise-finance-nits`).
|