Threshold-Based Expense Approval Workflow
Feature Detail
Description
Implements a two-path approval model: claims below the auto-approval threshold (distance and/or amount) are marked approved immediately on submission; claims above the threshold enter a pending state and appear in the coordinator's review queue. Coordinators can approve or reject individual claims with an optional comment. The submitting peer mentor receives a push notification on status change. The workflow must handle the case where a claim has multiple expense lines (e.g., mileage + parking) and the combined total crosses the threshold. Coordinators can also perform bulk approval for batches of low-complexity claims. All state transitions are timestamped and stored for audit purposes.
Analysis
Automates the most common approval path (sub-threshold claims), freeing coordinators to focus on exceptions. Provides a complete audit log required for Bufdir reporting and accounting integration. Reduces the round-trip time between claim submission and payment for peer mentors.
Model claim status as a finite state machine: draft → submitted → approved | rejected → exported. Store all transitions in a claim_events table. Coordinator review screen uses a paginated list with bulk-select. Push notifications via Supabase Realtime or FCM. Threshold evaluation logic lives in a shared Dart utility (also used server-side in a Supabase Edge Function for server-authoritative validation).
Components (209)
Shared Components
These components are reused across multiple features
User Interface (59)
Service Layer (52)
Data Layer (33)
Infrastructure (54)
User Stories (16)
As a As a Coordinator
I want to view the currently configured automatic approval thresholds for my organization
So that I understand which claims will be auto-approved and which will require my manual review, enabling me to set accurate expectations with peer mentors
- Given a coordinator navigates to expense settings, when the threshold configuration screen loads, then the current automatic approval rules are displayed in plain language (e.g., 'Claims under 50 km with no receipts are automatically approved')
- Given a coordinator views the threshold configuration, when the screen renders, then all active threshold rules for their organization are listed including mileage limits, monetary limits, and receipt requirement rules
- Given the threshold configuration is read-only for coordinators, when a coordinator attempts to edit a threshold value, then the UI indicates that threshold changes must be made by an organization administrator
- +2 more
As a As a Coordinator
I want to view a log of all claims that were automatically approved without my manual review
So that I can maintain oversight of the full reimbursement activity in my chapter, detect any anomalies, and satisfy compliance or audit requirements
- Given a coordinator navigates to the auto-approval log, when the screen loads, then all claims automatically approved within the selected time period are listed with claimant name, expense type, amount, and approval timestamp
- Given the coordinator filters the log by a specific peer mentor, when results load, then only auto-approved claims for that peer mentor are shown
- Given the coordinator filters the log by time period, when results load, then claims outside the selected range are excluded
- +2 more
As a As a Organization Administrator
I want to view the currently configured automatic approval thresholds for my organization
So that I understand which claims will be auto-approved and which will require my manual review, enabling me to set accurate expectations with peer mentors
- Given a coordinator navigates to expense settings, when the threshold configuration screen loads, then the current automatic approval rules are displayed in plain language (e.g., 'Claims under 50 km with no receipts are automatically approved')
- Given a coordinator views the threshold configuration, when the screen renders, then all active threshold rules for their organization are listed including mileage limits, monetary limits, and receipt requirement rules
- Given the threshold configuration is read-only for coordinators, when a coordinator attempts to edit a threshold value, then the UI indicates that threshold changes must be made by an organization administrator
- +2 more
As a As a Organization Administrator
I want to view a log of all claims that were automatically approved without my manual review
So that I can maintain oversight of the full reimbursement activity in my chapter, detect any anomalies, and satisfy compliance or audit requirements
- Given a coordinator navigates to the auto-approval log, when the screen loads, then all claims automatically approved within the selected time period are listed with claimant name, expense type, amount, and approval timestamp
- Given the coordinator filters the log by a specific peer mentor, when results load, then only auto-approved claims for that peer mentor are shown
- Given the coordinator filters the log by time period, when results load, then claims outside the selected range are excluded
- +2 more
As a As a Coordinator
I want to view a complete chronological timeline of every status change for an expense claim
So that I can trace the full lifecycle of a claim, understand who acted on it and when, and provide accurate answers to peer mentors asking about their reimbursement status
- Given a coordinator opens a claim detail view, when the timeline section loads, then each status change is shown with event type, timestamp, and actor (user name or 'System' for automated actions)
- Given an expense claim was automatically approved below threshold, when a coordinator views its timeline, then the auto-approval event is logged with the threshold rule that triggered it
- Given a claim was rejected and then resubmitted by the peer mentor, when a coordinator views its timeline, then all events including the rejection reason and the resubmission are shown in chronological order
- +2 more
As a As a Coordinator
I want to receive an immediate push notification when a new expense claim is submitted that requires my manual approval
So that I can act on approval requests promptly without needing to check the queue manually or risk claims going unreviewed for extended periods
- Given a peer mentor submits an expense claim above the threshold, when the claim is persisted, then a push notification is sent to all coordinators associated with that peer mentor's organizational unit within 30 seconds
- Given the coordinator receives the push notification, when they tap it, then the app opens directly to the claim detail screen for that specific claim
- Given a push notification is sent, when the coordinator views it, then the notification text includes the peer mentor's name and the total claim amount
- +2 more
As a As a Coordinator
I want the system to automatically flag or block expense claims that exceed the receipt requirement threshold but lack an attached receipt
So that I only receive complete, auditable claims for review and do not have to manually follow up with peer mentors for missing documentation
- Given a peer mentor submits an expense with an amount above the receipt threshold and no receipt attached, when they tap submit, then the submission is blocked with a message explaining the receipt requirement and linking to the receipt capture flow
- Given a peer mentor attaches a receipt image to an expense above the threshold, when they submit, then the claim proceeds to the coordinator review queue with the receipt accessible
- Given a coordinator views a claim in the review queue that required a receipt, when the detail view loads, then the receipt attachment is present and viewable
- +2 more
As a As a Coordinator
I want to select multiple pending expense claims and approve them all in a single action
So that I can efficiently process a backlog of routine claims without having to open and approve each one individually
- Given a coordinator is viewing the claims queue, when they long-press a claim or tap a multi-select mode toggle, then checkboxes appear on each claim and a bulk approval bar appears at the bottom
- Given one or more claims are selected, when the coordinator taps the bulk approve button, then a confirmation dialog shows the count and total amount of selected claims before proceeding
- Given the coordinator confirms bulk approval, when processing completes, then all selected claims are marked as approved, peer mentors receive notifications, and the claims are removed from the pending queue
- +2 more
As a As a Organization Administrator
I want to view a complete chronological timeline of every status change for an expense claim
So that I can trace the full lifecycle of a claim, understand who acted on it and when, and provide accurate answers to peer mentors asking about their reimbursement status
- Given a coordinator opens a claim detail view, when the timeline section loads, then each status change is shown with event type, timestamp, and actor (user name or 'System' for automated actions)
- Given an expense claim was automatically approved below threshold, when a coordinator views its timeline, then the auto-approval event is logged with the threshold rule that triggered it
- Given a claim was rejected and then resubmitted by the peer mentor, when a coordinator views its timeline, then all events including the rejection reason and the resubmission are shown in chronological order
- +2 more
As a As a Organization Administrator
I want to receive an immediate push notification when a new expense claim is submitted that requires my manual approval
So that I can act on approval requests promptly without needing to check the queue manually or risk claims going unreviewed for extended periods
- Given a peer mentor submits an expense claim above the threshold, when the claim is persisted, then a push notification is sent to all coordinators associated with that peer mentor's organizational unit within 30 seconds
- Given the coordinator receives the push notification, when they tap it, then the app opens directly to the claim detail screen for that specific claim
- Given a push notification is sent, when the coordinator views it, then the notification text includes the peer mentor's name and the total claim amount
- +2 more
As a As a Organization Administrator
I want the system to automatically flag or block expense claims that exceed the receipt requirement threshold but lack an attached receipt
So that I only receive complete, auditable claims for review and do not have to manually follow up with peer mentors for missing documentation
- Given a peer mentor submits an expense with an amount above the receipt threshold and no receipt attached, when they tap submit, then the submission is blocked with a message explaining the receipt requirement and linking to the receipt capture flow
- Given a peer mentor attaches a receipt image to an expense above the threshold, when they submit, then the claim proceeds to the coordinator review queue with the receipt accessible
- Given a coordinator views a claim in the review queue that required a receipt, when the detail view loads, then the receipt attachment is present and viewable
- +2 more
As a As a Organization Administrator
I want to select multiple pending expense claims and approve them all in a single action
So that I can efficiently process a backlog of routine claims without having to open and approve each one individually
- Given a coordinator is viewing the claims queue, when they long-press a claim or tap a multi-select mode toggle, then checkboxes appear on each claim and a bulk approval bar appears at the bottom
- Given one or more claims are selected, when the coordinator taps the bulk approve button, then a confirmation dialog shows the count and total amount of selected claims before proceeding
- Given the coordinator confirms bulk approval, when processing completes, then all selected claims are marked as approved, peer mentors receive notifications, and the claims are removed from the pending queue
- +2 more
As a As a Coordinator
I want to open an individual expense claim, review its details including any attached receipt, and approve or reject it with a single action
So that I can make informed approval decisions quickly and peer mentors receive timely feedback on their submissions
- Given a coordinator opens a pending claim, when the detail view loads, then it shows expense type, amount, submission date, receipt thumbnail (if present), and current status
- Given a coordinator taps Approve, when the action is confirmed, then the claim status changes to 'approved', a push notification is sent to the peer mentor, and the claim is queued for accounting export
- Given a coordinator taps Reject, when prompted for a reason and they submit it, then the claim status changes to 'rejected', the reason is stored, and the peer mentor is notified with the rejection reason
- +2 more
As a As a Coordinator
I want to see a prioritized queue of all pending expense claims that require my manual review
So that I can process reimbursement requests efficiently and ensure peer mentors are paid without unnecessary delays
- Given a coordinator opens the attestation queue screen, when there are pending claims above the approval threshold, then the queue displays each claim with claimant name, expense type, total amount, and submission timestamp
- Given a claim falls below the configured automatic approval threshold (e.g., mileage under 50 km with no additional expenses), when it is submitted by a peer mentor, then it does NOT appear in the coordinator review queue and is marked as auto-approved
- Given the queue is open, when a new claim is submitted in real time, then the queue updates without requiring a manual page refresh
- +2 more
As a As a Organization Administrator
I want to open an individual expense claim, review its details including any attached receipt, and approve or reject it with a single action
So that I can make informed approval decisions quickly and peer mentors receive timely feedback on their submissions
- Given a coordinator opens a pending claim, when the detail view loads, then it shows expense type, amount, submission date, receipt thumbnail (if present), and current status
- Given a coordinator taps Approve, when the action is confirmed, then the claim status changes to 'approved', a push notification is sent to the peer mentor, and the claim is queued for accounting export
- Given a coordinator taps Reject, when prompted for a reason and they submit it, then the claim status changes to 'rejected', the reason is stored, and the peer mentor is notified with the rejection reason
- +2 more
As a As a Organization Administrator
I want to see a prioritized queue of all pending expense claims that require my manual review
So that I can process reimbursement requests efficiently and ensure peer mentors are paid without unnecessary delays
- Given a coordinator opens the attestation queue screen, when there are pending claims above the approval threshold, then the queue displays each claim with claimant name, expense type, total amount, and submission timestamp
- Given a claim falls below the configured automatic approval threshold (e.g., mileage under 50 km with no additional expenses), when it is submitted by a peer mentor, then it does NOT appear in the coordinator review queue and is marked as auto-approved
- Given the queue is open, when a new claim is submitted in real time, then the queue updates without requiring a manual page refresh
- +2 more