User Interface medium complexity mobile
0
Dependencies
0
Dependents
1
Entities
0
Integrations

Description

Native camera and photo library picker widget embedded in the expense form. Displays a preview thumbnail of the captured or selected image and shows a validation indicator when a qualifying receipt has been attached. Blocks form submission and shows an inline warning when the expense amount exceeds the org-configured threshold and no receipt is attached.

Feature: Receipt Photo Upload

receipt-camera-widget

Sources & reasoning

Line 68 states a hard receipt photo requirement for claims over 100 kr (HLF). Line 69 confirms that claims without receipts qualify for auto-approval, establishing the conditional enforcement logic. The Phase 2 roadmap (line 343) groups this under Reiserefusjonshåndtering, placing it at v1.0.

  • docs/source/likeperson.md · line 68
    Kvitteringsbilde for utlegg over 100 kr (HLF).
  • docs/source/likeperson.md · line 69
    Automatisk godkjenning under 50 km / uten utlegg, manuell attestering ellers (HLF).

Responsibilities

  • Invoke device camera or open photo library picker on user action
  • Display compressed image thumbnail after capture or selection
  • Enforce receipt-required validation when amount exceeds configured threshold
  • Emit attachment events to the parent expense form for state tracking
  • Show upload progress and offline-pending status indicators

Interfaces

open(mode: 'camera' | 'library'): Promise<ImageAsset>
validate(amount: number, threshold: number): ValidationResult
onAttach(callback: (asset: ImageAsset) => void): void
reset(): void

Related Data Entities (1)

Data entities managed by this component