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

Description

Receipt Photo Upload allows peer mentors to capture and attach photographic proof of expenditure directly within the expense registration flow. The feature invokes the device camera or photo library, compresses the selected image to a configurable maximum size, and uploads it to object storage linked to the parent expense record. Multiple receipts can be attached to a single expense, and thumbnails are shown inline for review before submission. Uploaded receipts are accessible to approvers in the admin portal.

User Flow

Receipt Photo Upload user flow
Click to expand

Analysis

Business Value

Requiring physical receipt submission creates friction that delays reimbursement cycles and increases the risk of lost documentation. A mobile-first photo upload flow lets peer mentors capture receipts immediately at point of purchase, reducing the likelihood of missing documentation during monthly reconciliation. For organisations such as HLF that mandate receipts for claims above 100 NOK, this feature makes compliance straightforward and auditable. Digitised receipts also accelerate accounting system reconciliation and reduce coordinator time spent chasing paper.

Implementation Notes

The Flutter UI uses the image_picker package for camera and gallery access, with flutter_image_compress applied before upload to keep payloads under 2 MB. Files are uploaded via a multipart POST to the REST API, which streams them to an S3-compatible object storage bucket (Receipt Object Storage component). The database stores a reference URL and metadata in the expense_receipts table linked to the parent expense. Pre-signed URLs are generated server-side for secure retrieval by the admin portal. WCAG considerations include descriptive labels on the camera trigger button and confirmation feedback after a successful upload.

Components (38)

User Interface (2)

Service Layer (2)

Data Layer (1)

Infrastructure (1)

Shared Components

These components are reused across multiple features

User Stories

No user stories have been generated for this feature yet.