## Jira - [SH-121](https://luby-us.atlassian.net/browse/SH-121) (advanced filters global search context) - [SH-196](https://luby-us.atlassian.net/browse/SH-196) — Has uplift facet (related) - Merge **after** PR2 so severity module stays unified (`work-order-severity.ts`). ## Summary - Extend advanced search with design-parity facets: **Severity** (SEV 1–5), **Indicators** (rescheduled ≥ 2, carried over ≥ 2, add-on), **Flag** colours, **Internal (SH) WO#**, and **Uplift** (has uplift + status refinement). - Wire `toBoardSearchQueryParams` / `GET /board/search` query params: `severities`, `rescheduled`, `carriedOver`, `addOn`, `flagColors`, `internalOnly`, `hasUplift`, `upliftStatuses`. - Applied-filter chips and clear handlers for each new group; docs updated in `docs/work-orders/board-search-api.md`. - Single severity source: `work-order-severity.ts` (removed `work-order-severity-levels.ts`). ## Scope ### In - `WorkOrderAdvancedFilters` + sheet sections + banner chips - `board-query-params` mapping and `WorkOrderBoardSearchQueryParams` types - Unit tests for param builders and chip clear - Client-side predicates for indicators/flags/internal (fields already on board rows) ### Out (follow-up PRs) - Global search rewrite (SH-121 bar behaviour) - New board columns, severity wizard/type cell (PR2), uplift column/dialog CRUD (PR3) - Aveta compliance filter (`avetaOnly`) — pending BE `avetaRequired` field ## API / BE Contract assumed from `docs/work-orders/pending-be-contract.md`: | Param | Notes | | ------------------------------ | ------------------------------------------------------- | | `severities` | multi `1`–`5`; requires `severity` on search rows (PR2) | | `rescheduled` / `carriedOver` | boolean; BE filters count ≥ 2 | | `addOn` | boolean; `isAddOn` indicator (not WO type 7) | | `flagColors` | multi `#RRGGBB` | | `internalOnly` | WO# prefix `SH` | | `hasUplift` + `upliftStatuses` | requires uplift summary on rows (PR3) | **Blocked on BE:** until search endpoint accepts these params, advanced search may return unfiltered or 400 for unsupported keys. FE sends param names as documented; no alternate naming. **Aveta** facet intentionally omitted until `avetaRequired` is confirmed. Severity / uplift / add-on facets are **enabled in UI**; server-side filtering depends on BE shipping the contract above. ## Test plan - [ ] Advanced Filters sheet shows Severity, Indicators, Flag, WO#, Uplift sections - [ ] Apply filters → network `GET /board/search` includes mapped query params - [ ] Banner chips reflect selections; dismiss clears only that group - [ ] Uplift chip clear resets both `hasUplift` and `upliftStatuses` - [ ] `npm run verify` green locally ## Base - Base branch: `dev`