# Payroll finalization scope fix checklist - [x] Inspect live payroll, open cycle, and finalized overlap data for the affected cutoff. - [x] Identify the mixed-brand selection and lost 422 response details. - [x] Preserve structured finalization API errors. - [x] Add a brand filter to the payroll selection view. - [x] Derive the finalize scope from selected active rows and block mixed-brand submission. - [x] Make duplicate legacy open-cycle lookup deterministic for the selected cutoff. - [x] Allow a configured matching open cycle after a void-and-reopen workflow. - [x] Add concise server logging for finalization rejection and exception diagnosis. - [x] Add and apply the payroll batch ID auto-increment repair migration. - [x] Add a finalization preflight check for the required batch ID schema. - [x] Add focused tests for structured errors and selection scope. - [x] Run focused PHP and frontend tests. - [ ] Manually finalize one complete brand scope in the authenticated application.