high complexity extracted Travel Reimbursement & Expense Handling Confidence: 100%
11
Components
198
Shared
16
User Stories
Yes
Analyzed

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

Business Value

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.

Implementation Notes

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)

User Interface (4)

Service Layer (2)

Data Layer (3)

Infrastructure (2)

Shared Components

These components are reused across multiple features

User Interface (59)

ui Role Switch Widget medium Shared ui Role-Aware Bottom Navigation medium Shared ui Activity Type Selection Screen low Shared ui Speech-to-Text Field Overlay medium Shared ui Receipt Capture Widget medium Shared ui Peer Mentor Single Selector low Shared ui Proxy Audit Badge Widget low Shared ui Export Period Picker low Shared ui Contact Card Widget low Shared ui Contact Search Bar low Shared ui Peer Mentor Card Widget low Shared ui Activity History List low Shared ui Multi-Chapter Affiliation Chip Widget medium Shared ui Certification Status Badge low Shared ui Duplicate Activity Warning Dialog medium Shared ui Mentor Multi-Select Widget medium Shared ui Map Filter Panel medium Shared ui Claim Status Badge low Shared ui Export Date Range Picker low Shared ui Custom Date Range Picker low Shared ui Duplicate Activity Warning Dialog low Shared ui Proxy Activity Form medium Shared ui Proxy Peer Mentor Selector medium Shared ui Expected Return Date Picker low Shared ui Pause Activation Screen low Shared ui Pause Status Indicator low Shared ui Admin KPI Stat Widget low Shared ui Organisation Hierarchy Navigator high Shared ui Bufdir Period Selector Widget low Shared ui Export History List medium Shared ui Activity Type Donut Chart medium Shared ui Monthly Activity Bar Chart medium Shared ui Statistics Period Filter Bar low Shared ui Statistics Summary Cards low Shared ui Notification Badge Widget low Shared ui Certificate Expiry Status Indicator low Shared ui Animated Stat Card Widget medium Shared ui In-App Notification Banner low Shared ui Accessible Modal Sheet Widget high Shared ui Live Region Announcer medium Shared ui Semantics Wrapper Widget medium Shared ui Sensitive Field Warning Dialog high Shared ui Confirm Before Submit Screen medium Shared ui Inline Contextual Help Widget low Shared ui Labelled Navigation Bar low Shared ui Plain Language Error Display low Shared ui Single-Action Screen Layout medium Shared ui Wizard Progress Indicator low Shared ui Accessible Text Style System medium Shared ui Accessible Touch Target Wrapper low Shared ui Contrast-Safe Color Palette Widget medium Shared ui Accessible Bottom Navigation Bar medium Shared ui Modal Close Button low Shared ui Persistent Back Button low Shared ui Vertical Scroll Container low Shared ui Organization Card Widget low Shared ui Terminology-Aware Text Widget low Shared ui FeatureGate Widget low Shared ui Chapter Switcher medium Shared

Service Layer (52)

service Authentication Service medium Shared service Authentication Session Manager medium Shared service Biometric Authentication Service medium Shared service Biometric Authentication Service medium Shared service Biometric Authentication Service medium Shared service Permission Checker Service medium Shared service Role State Manager medium Shared service No-Access Route Guard low Shared service Activity Type Metadata Resolver low Shared service Chapter Scope Resolver medium Shared service Organisation Hierarchy Resolver medium Shared service Coordinator Notification Service medium Shared service Duplicate Activity Detection Service high Shared service Mentor Filter Service low Shared service Receipt Threshold Validator low Shared service Approval Status Notification Service medium Shared service Threshold Evaluation Service medium Shared service Declaration Encryption Service high Shared service Organization Feature Flag Service low Shared service Participant Deduplication Service high Shared service Reporting Period Service medium Shared service Activity Attribution Service low Shared service Proxy Duplicate Detection Service medium Shared service Pause Management Service medium Shared service Pause Notification Service medium Shared service Admin Export Service medium Shared service Admin Row-Level Security Guard high Shared service Organisation Hierarchy Service high Shared service User Management Service high Shared service Role Access Validator low Shared service Peer Mentor Stats Aggregator medium Shared service Push Notification Dispatcher medium Shared service Notification Preference Service low Shared service Scenario Deep-Link Router medium Shared service Scenario Notification Content Builder medium Shared service Badge Criteria Integration medium Shared service Activity Summary Aggregator low Shared service Focus Management Service medium Shared service Screen Reader Detection Service medium Shared service Sensitive Field Privacy Guard high Shared service Plain Language Content Service medium Shared service Wizard State Manager medium Shared service Tab State Manager medium Shared service Organization Route Guard medium Shared service Tenant Context Service high Shared service Label Key Resolver Service low Shared service Organization Labels Notifier medium Shared service FeatureFlagProvider (Riverpod) medium Shared service Access Scope Service high Shared service Hierarchy Aggregation Service high Shared service Hierarchy Service high Shared service Unit Assignment Service medium Shared

Data Layer (33)

Infrastructure (54)

infrastructure Keyboard-Aware Layout Utility low Shared infrastructure Supabase Auth Client low Shared infrastructure Deep Link / OAuth Redirect Handler medium Shared infrastructure Secure Storage Adapter low Shared infrastructure Supabase Session Manager medium Shared infrastructure URL Launcher Utility low Shared infrastructure Local Storage Adapter low Shared infrastructure Supabase Activity Client low Shared infrastructure Organization Labels Provider low Shared infrastructure Supabase Client low Shared infrastructure Organisation Field Config Loader medium Shared infrastructure Speech-to-Text Adapter medium Shared infrastructure File Download Handler low Shared infrastructure Duplicate Reviewed Flag Middleware low Shared infrastructure Contact RLS Query Builder low Shared infrastructure Contact Form Validator low Shared infrastructure Design Token Theme low Shared infrastructure Organization Labels Provider low Shared infrastructure Supabase Client Provider low Shared infrastructure Search Debounce Utility low Shared infrastructure Expense Type Analytics Tracker low Shared infrastructure Receipt Image Picker Integration low Shared infrastructure CSV / JSON File Generator medium Shared infrastructure Coordinator Role Guard low Shared infrastructure Nightly Job Scheduler medium Shared infrastructure Supabase RLS Policy Configuration high Shared infrastructure Export File Storage Adapter low Shared infrastructure Supabase Storage Adapter low Shared infrastructure Peer Mentor Pause Management Service medium Shared infrastructure Push Notification Service medium Shared infrastructure fl_chart Adapter medium Shared infrastructure Push Notification Service low Shared infrastructure FCM Push Notification Sender medium Shared infrastructure FCM Notification Dispatcher medium Shared infrastructure Push Notification Dispatcher medium Shared infrastructure Supabase Realtime Subscription Service medium Shared infrastructure Organisation Data Isolation Guard low Shared infrastructure Push Notification Dispatcher medium Shared infrastructure Deep Link Handler medium Shared infrastructure QR Code Generator low Shared infrastructure Share Sheet Bridge low Shared infrastructure Semantics Service Facade medium Shared infrastructure Accessibility Design Token Enforcer medium Shared infrastructure Accessible Theme Builder medium Shared infrastructure Navigation Route Configuration medium Shared infrastructure Accessibility Live Region Announcer low Shared infrastructure Feature Flag Provider low Shared infrastructure Secure Storage Adapter low Shared infrastructure Supabase RLS Tenant Scope Configurator medium Shared infrastructure Label Key Registry low Shared infrastructure Terminology Riverpod Providers low Shared infrastructure WCAG Semantics Label Resolver low Shared infrastructure Feature Flag Key Constants low Shared infrastructure RLS Policy Manager high Shared

User Stories (16)

Configure Expense Approval Thresholds Per Organization
medium 3 pts

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

Acceptance Criteria
  • 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
View Full Story →
Monitor Auto-Approval Activity for Oversight and Compliance
medium 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Configure Expense Approval Thresholds Per Organization
medium 3 pts

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

Acceptance Criteria
  • 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
View Full Story →
Monitor Auto-Approval Activity for Oversight and Compliance
medium 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
View Claim Status Timeline and Audit History
high 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Receive Real-Time Notifications for Claims Requiring Approval
high 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Validate Receipt Attachment for Claims Above Receipt Threshold
high 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Bulk Approve Multiple Expense Claims
high 8 pts

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

Acceptance Criteria
  • 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
View Full Story →
View Claim Status Timeline and Audit History
high 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Receive Real-Time Notifications for Claims Requiring Approval
high 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Validate Receipt Attachment for Claims Above Receipt Threshold
high 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Bulk Approve Multiple Expense Claims
high 8 pts

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

Acceptance Criteria
  • 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
View Full Story →
Approve or Reject an Individual Expense Claim
critical 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Review Pending Expense Claims Queue
critical 8 pts

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

Acceptance Criteria
  • 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
View Full Story →
Approve or Reject an Individual Expense Claim
critical 5 pts

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

Acceptance Criteria
  • 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
View Full Story →
Review Pending Expense Claims Queue
critical 8 pts

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

Acceptance Criteria
  • 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
View Full Story →