Receipt Capture and Attachment
Feature Detail
Description
Enables peer mentors to photograph or upload a receipt image directly within the expense entry flow for claims above a configurable monetary threshold (100 kr per HLF's requirement). The camera sheet opens inline within the wizard without navigating away from the form, and a thumbnail preview is shown before submission. Receipts are stored securely and linked to the specific claim record. For accessibility, the feature must support both camera capture and file-picker upload (for scanned PDFs or existing gallery images). VoiceOver/TalkBack labels must describe the attachment state clearly. The threshold is org-configurable so that Blindeforbundet and future organizations can apply their own rules.
Analysis
Satisfies auditing requirements for Bufdir reimbursement documentation and provides organizations with the evidence trail needed for accounting reconciliation, without requiring peer mentors to manage physical receipts or email attachments separately.
Use `image_picker` Flutter package. Upload to Supabase Storage with a path scoped to org/user/claim. Store the storage path in the claim record. Apply a file size limit and compress images client-side before upload. The threshold check (e.g., >100 kr) should gate whether receipt attachment is required vs. optional. Ensure the upload is non-blocking — allow form submission with an in-progress upload indicator.
Components (205)
Shared Components
These components are reused across multiple features
User Interface (59)
Service Layer (52)
Data Layer (33)
Infrastructure (54)
User Stories (12)
As a As a Peer Mentor (Likeperson)
I want to view the receipt image I attached to a previously submitted expense claim
So that I can verify what was submitted if a claim is queried or rejected by the coordinator
- Given I have submitted an expense claim with a receipt, When I navigate to my expense history and open the claim, Then the receipt thumbnail is visible in the claim detail view
- Given I tap the receipt thumbnail on a submitted claim, When the image loads, Then a full-screen modal opens with the receipt image
- Given the full-screen modal is open, When I pinch the image, Then I can zoom in to read receipt details
- +3 more
As a As a Peer Mentor (Likeperson)
I want to capture and attach a receipt image even when I have no internet connection, with the upload occurring automatically when connectivity is restored
So that I can complete my expense registration immediately after an activity without worrying about network availability
- Given I have no internet connection, When I capture a receipt and fill in the expense form, Then I can complete the form and the claim is saved locally in a pending state
- Given a claim is in pending state due to no connectivity, When I view the expense list, Then the pending claim is shown with a 'Waiting for connection' indicator
- Given connectivity is restored, When the app detects the network, Then pending uploads are processed automatically in the background without requiring me to reopen the form
- +3 more
As a As a Coordinator
I want to view the receipt image I attached to a previously submitted expense claim
So that I can verify what was submitted if a claim is queried or rejected by the coordinator
- Given I have submitted an expense claim with a receipt, When I navigate to my expense history and open the claim, Then the receipt thumbnail is visible in the claim detail view
- Given I tap the receipt thumbnail on a submitted claim, When the image loads, Then a full-screen modal opens with the receipt image
- Given the full-screen modal is open, When I pinch the image, Then I can zoom in to read receipt details
- +3 more
As a As a Coordinator
I want to capture and attach a receipt image even when I have no internet connection, with the upload occurring automatically when connectivity is restored
So that I can complete my expense registration immediately after an activity without worrying about network availability
- Given I have no internet connection, When I capture a receipt and fill in the expense form, Then I can complete the form and the claim is saved locally in a pending state
- Given a claim is in pending state due to no connectivity, When I view the expense list, Then the pending claim is shown with a 'Waiting for connection' indicator
- Given connectivity is restored, When the app detects the network, Then pending uploads are processed automatically in the background without requiring me to reopen the form
- +3 more
As a As a Peer Mentor (Likeperson)
I want to preview, replace, or remove an attached receipt image before submitting my expense claim
So that I can correct mistakes (blurry photo, wrong receipt) before the claim is sent for approval
- Given a receipt is attached to my expense, When I tap the thumbnail preview, Then a full-screen preview modal opens showing the receipt image
- Given the preview modal is open, When I tap 'Replace', Then the camera sheet reopens and I can capture a new image that replaces the previous one
- Given the preview modal is open, When I tap 'Remove', Then the attachment is cleared and the thumbnail indicator is removed from the form
- +3 more
As a As a Peer Mentor (Likeperson)
I want to be clearly informed when my expense amount requires a receipt attachment before I can submit
So that I understand exactly what is blocking submission and can take the correct action without confusion or frustration
- Given I enter an expense amount above the org-configured receipt threshold, When the amount field loses focus, Then a visual indicator appears on the receipt attachment section showing 'Receipt required for amounts over [X] NOK'
- Given the threshold indicator is shown, When a screen reader is active, Then the threshold requirement is announced via an accessibility live region
- Given I have not yet attached a receipt and the amount is above threshold, When I tap the Submit button, Then submission is blocked and the receipt section is scrolled into view with an error state highlighted
- +3 more
As a As a Coordinator
I want to preview, replace, or remove an attached receipt image before submitting my expense claim
So that I can correct mistakes (blurry photo, wrong receipt) before the claim is sent for approval
- Given a receipt is attached to my expense, When I tap the thumbnail preview, Then a full-screen preview modal opens showing the receipt image
- Given the preview modal is open, When I tap 'Replace', Then the camera sheet reopens and I can capture a new image that replaces the previous one
- Given the preview modal is open, When I tap 'Remove', Then the attachment is cleared and the thumbnail indicator is removed from the form
- +3 more
As a As a Coordinator
I want to be clearly informed when my expense amount requires a receipt attachment before I can submit
So that I understand exactly what is blocking submission and can take the correct action without confusion or frustration
- Given I enter an expense amount above the org-configured receipt threshold, When the amount field loses focus, Then a visual indicator appears on the receipt attachment section showing 'Receipt required for amounts over [X] NOK'
- Given the threshold indicator is shown, When a screen reader is active, Then the threshold requirement is announced via an accessibility live region
- Given I have not yet attached a receipt and the amount is above threshold, When I tap the Submit button, Then submission is blocked and the receipt section is scrolled into view with an error state highlighted
- +3 more
As a As a Peer Mentor (Likeperson)
I want to photograph a receipt directly within the expense registration flow using my phone camera
So that I can attach proof of purchase to my expense claim without leaving the app or using a separate scanning app
- Given I am on the expense registration screen and the expense amount exceeds the receipt threshold, When I tap the receipt attachment button, Then a bottom sheet opens with camera and gallery options
- Given the camera sheet is open, When I take a photo, Then a preview of the image is displayed and I can confirm or retake
- Given I confirm the photo, When the image is attached, Then a thumbnail indicator appears on the expense form confirming the attachment
- +3 more
As a As a Peer Mentor (Likeperson)
I want my receipt image to be securely uploaded and stored when I submit my expense claim
So that the receipt is available to the coordinator for review and is retained for audit purposes without me needing to manage file storage manually
- Given I submit an expense claim with a receipt attached, When the form is submitted, Then the receipt image is uploaded to Supabase Storage before the claim record is created
- Given the upload is in progress, When I am on the submission screen, Then an upload progress indicator is shown so I know the operation is ongoing
- Given the upload completes successfully, When the claim is saved, Then the receipt storage path is linked to the claim record in the database
- +3 more
As a As a Coordinator
I want to photograph a receipt directly within the expense registration flow using my phone camera
So that I can attach proof of purchase to my expense claim without leaving the app or using a separate scanning app
- Given I am on the expense registration screen and the expense amount exceeds the receipt threshold, When I tap the receipt attachment button, Then a bottom sheet opens with camera and gallery options
- Given the camera sheet is open, When I take a photo, Then a preview of the image is displayed and I can confirm or retake
- Given I confirm the photo, When the image is attached, Then a thumbnail indicator appears on the expense form confirming the attachment
- +3 more
As a As a Coordinator
I want my receipt image to be securely uploaded and stored when I submit my expense claim
So that the receipt is available to the coordinator for review and is retained for audit purposes without me needing to manage file storage manually
- Given I submit an expense claim with a receipt attached, When the form is submitted, Then the receipt image is uploaded to Supabase Storage before the claim record is created
- Given the upload is in progress, When I am on the submission screen, Then an upload progress indicator is shown so I know the operation is ongoing
- Given the upload completes successfully, When the claim is saved, Then the receipt storage path is linked to the claim record in the database
- +3 more