Two payment-safety fixes in the Batch Pay modal JS:
1. Changing the team/loan filter force-checked every visible row,
silently re-selecting workers the admin had deliberately unticked
(untick a disputed worker -> change filter -> Confirm & Pay All pays
them anyway). Filters now only EXCLUDE (hidden rows untick); visible
rows keep the admin's manual choice, and Select All reflects the
real state instead of being forced on.
2. The batch-pay fetch() redirected to the dashboard on ANY HTTP
response — fetch only rejects on network failure, so a 500 (batch
died partway; each worker pays in its own transaction) looked like
success. Now checks resp.ok and tells the admin to verify the
History tab before retrying.
JS-only change; needs manual verification in the browser (no JS test
harness in this project).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>