95fa37ebdf
Final-review findings: - ExpenseCategoriesController was finance-only at the class level, but the member self-service reimbursement form reads the category list to populate its dropdown, so members got 403 and could not submit. Open GET to any authenticated user; keep group/subcategory writes finance-only (mirrors MinistriesController). Verified live with a member-role account: reads 200, writes 403, self-submit 200. - MonthlyStatementService Update/Finalize now use FirstOrDefaultAsync for convention consistency with the rest of the service layer. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>