Expense Approval Queue
Feature Detail
Description
The Expense Approval Queue provides coordinators and organization administrators with a centralized inbox for reviewing and acting on submitted expense claims from peer mentors. Each claim displays key details - claimant, amount, expense type, date, and attachments - allowing approvers to accept or reject with a mandatory comment on rejection. The queue supports filtering by status (pending, approved, rejected), date range, and submitter, and paginates large result sets efficiently. Bulk approve is available for straightforward claims below configured auto-approval thresholds that were not caught automatically, giving approvers a fast path for routine reimbursements. Integration with the expense data model ensures full audit trail: every approval or rejection records the approver identity, timestamp, and comment, and triggers the appropriate notification to the claimant.
Analysis
Manual expense approval over email or paper is a significant administrative burden for coordinators and creates delays in reimbursing peer mentors, which erodes volunteer motivation. A structured queue removes ambiguity about what needs action, reduces processing time, and ensures no claim is lost or forgotten. For organizations with high activity volumes - HLF cited one peer mentor with 380 registrations in a year - an auditable digital approval workflow is essential for compliance and accounting reconciliation. The queue feeds directly into Bufdir reporting and accounting system exports, meaning approval accuracy has downstream financial consequences. Providing approvers with a clear, filterable interface also reduces training overhead and error rates, and the mandatory rejection comment creates a feedback loop that helps peer mentors correct submissions on resubmission.
Backend exposes a paginated REST endpoint returning expense claims scoped to the authenticated approver's organization, with query parameters for status, date range, and submitter ID. The approval and rejection actions are separate POST endpoints that write to the expense_claims table (status, approved_by, approved_at, rejection_reason) and enqueue a notification event. The admin portal renders the queue as a server-side-rendered Next.js page with optimistic UI updates on approve/reject actions. The Flutter mobile app does not expose this flow; it is admin-portal-only. Bulk approve sends a single batch request to avoid N+1 API calls. All mutations are wrapped in database transactions to ensure claim status and audit log entries are written atomically. Role guard middleware enforces that only Coordinator and Org Admin roles can access approval endpoints.
Components (44)
Shared Components
These components are reused across multiple features
User Interface (9)
Service Layer (15)
Data Layer (8)
Infrastructure (7)
User Stories
No user stories have been generated for this feature yet.