medium complexity extracted Expense & Reimbursement Confidence: 100%
5
Components
39
Shared
0
User Stories
Yes
Analyzed

Description

Travel Expense Registration enables peer mentors and coordinators to submit reimbursement claims for kilometers driven, tolls, parking, and public transport directly from the mobile app. The feature replaces manual paper forms and Excel sheets with a structured digital flow that enforces valid expense combinations and applies organization-specific rules. Each claim is linked to a specific activity or assignment, ensuring traceability for Bufdir reporting and internal audits. The form pre-fills common values such as today's date and the user's home address to minimize friction, particularly for users with cognitive or motor impairments.

Analysis

Business Value

Manual expense reporting is a significant administrative burden for both peer mentors and coordinators. HLF reported that a single peer mentor logged 380 individual registrations in one year, many of which involved travel. Digitizing this flow reduces coordinator workload for attestation and eliminates transcription errors that cause reimbursement delays. For organizations receiving Bufdir funding, accurate and auditable expense data is a compliance requirement. Automating sub-threshold approvals (e.g. under 50 km or without receipts) reduces bottlenecks and speeds up reimbursement cycles, directly improving volunteer retention by ensuring timely payment.

Implementation Notes

The expense form is built as a multi-step Flutter flow with Riverpod state management. Expense type selection uses a fixed enum-backed widget rather than free text to prevent invalid combinations (e.g. selecting both mileage and a bus ticket for the same trip). The backend REST endpoint validates claim structure before persisting to the expense_claims and expense_items tables in PostgreSQL. Threshold-based auto-approval logic runs server-side against configurable organization rules stored in module_configurations. Offline submission is supported via the Drift mutation outbox, with sync retrying on reconnect. Integration hooks for Xledger and Dynamics are stubbed at this phase and activated when the accounting-system-integration feature is enabled.

Components (44)

User Interface (1)

Service Layer (2)

Data Layer (2)

Shared Components

These components are reused across multiple features

User Stories

No user stories have been generated for this feature yet.