Second brainstorm output of the day. New tab alongside Pending /
History / Loans & Advances (the URL pattern already established at
?status=pending|paid|loans — this slots in at ?status=adjustments).
Key decisions:
- Semantic badge palette: 5 colour categories mapped across 7 types.
Loan/advance repayments get +15% saturation — same family, hotter
signal for "money coming back" vs "money going out".
- Three multi-select filters (Type, Workers, Teams) via Choices.js.
Teams cross-filter Workers using JSON pair map (mirrors Feature 1's
project<->team pattern). Auto-remove invalid selections with toast.
- Single-date default with optional range toggle; presets for
Today / This week / This month.
- Sticky filter bar; sortable columns (Date / Worker / Amount / Status).
- Group-by toggle: Flat / By Type / By Worker. Collapsible group
headers show count + net sum per group (+R additive / -R deductive).
- Bulk action bar (floating) for multi-row delete on unpaid rows only.
New endpoint POST /payroll/adjustments/bulk-delete/ filters
payroll_record__isnull=True for safety.
- Inline row actions reuse existing modals: Preview (unpaid) /
View Payslip (paid) / Edit + Delete (unpaid). Zero new modal code.
- Empty state, keyboard Esc, URL state for everything (bookmark-safe).
Scope: ~960 lines, ~12 tasks, 2 checkpoints. Uses existing
#addAdjustmentModal / #editAdjustmentModal / #payslipPreviewModal
already on payroll_dashboard.html — zero duplication.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>