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

Description

This feature enables peer mentors and coordinators to register travel-related expenses incurred while performing volunteer activities, including kilometer allowances, toll roads, parking fees, and public transport costs. The registration flow uses fixed expense type selections rather than free text to prevent invalid combinations (e.g. claiming both per-kilometer allowance and a bus ticket for the same trip). Expenses are linked to the originating activity and stored for subsequent approval and reimbursement processing in the admin portal.

Sources & reasoning

Section 2.1 and the priority matrix mark travel expense registration as SHOULD HAVE in Phase 2 (Core Product) for HLF and Blindeforbundet, with explicit requirements for fixed expense types. Phase 5 roadmap also lists 'Reiserefusjonshåndtering' under Core Product.

  • Begge organisasjoner har behov for registrering av kilometergodtgjørelse, bompenger, parkering og kollektivt. ... Faste valg for utleggstype - ikke fritekst - for å hindre feilkombinasjon (f.eks. både km og bussbillett).
  • Reiserefusjon / utleggsregistrering | - | - | ✓ | ✓ | ✓ | SHOULD HAVE | 2

Analysis

Business Value

Travel reimbursement is a core operational concern for HLF and Blindeforbundet, where peer mentors regularly incur out-of-pocket travel costs and need a reliable, low-friction way to claim them back. Today the process is paper-driven and inconsistent, leading to delayed reimbursements, frustrated volunteers, and accounting errors. Digitalising expense registration directly inside the activity flow ties costs to verifiable activities, improves transparency for coordinators and admins, and makes downstream accounting integration (Xledger, Dynamics) materially easier. The structured capture also reduces fraud risk and supports clean Bufdir-aligned financial reporting.

Implementation Notes

Implement a Flutter form on mobile with offline-first persistence via Drift and the mutation outbox so expenses can be entered without connectivity and synced later. Expense records reference the activity ID and expense_type ID; validation runs both client- and server-side to enforce mutually exclusive type combinations. Backend exposes REST endpoints under /api/v1/expenses with tenant scoping and module-toggle gating on expense-reimbursement. Threshold-based auto-approval rules are applied server-side at submission time. Distance computation for kilometer claims uses user-entered start/end values; no automatic geocoding in the initial release.

Quality Assurance

Peer Mentor (Likeperson) (primary) · Coordinator (Koordinator) (same flow)
1
Scenarios
5
UAT Steps
15
A11y Annotations
3
Role Boundaries
Peer Mentor (Likeperson)

Peer Mentor (Likeperson)

Quick UAT

  1. Logg inn i Meander-mobilappen som Likeperson og åpne Mine aktiviteter.
  2. Velg en nylig registrert aktivitet og trykk 'Legg til utlegg'.
  3. Velg utleggstype 'Kilometergodtgjørelse' fra listen med faste valg og bekreft at dato og rute er forhåndsutfylt fra aktiviteten.
  4. Fyll inn antall kilometer og trykk 'Send inn'.
  5. Bekreft at utlegget vises i listen med status 'Auto-godkjent' (under terskel) eller 'Til godkjenning' (over terskel).

Quick UAT — Accessibility

  1. Logg inn i Meander-mobilappen som Likeperson og åpne Mine aktiviteter.
    • Screen reader TalkBack/VoiceOver annonserer 'Mine aktiviteter, overskrift' ved sidelast.
    • Keyboard / focus Tab-rekkefølge: hovedmeny → aktivitetsliste.
    • Focus visibility Synlig fokusring på første aktivitet i listen.
  2. Velg en nylig registrert aktivitet og trykk 'Legg til utlegg'.
    • Screen reader Knappen annonseres som 'Legg til utlegg, knapp'.
    • Focus visibility Synlig fokusring på knappen før aktivering.
    • Touch target ≥ 24×24 CSS px på 'Legg til utlegg'-knapp.
  3. Velg utleggstype 'Kilometergodtgjørelse' fra listen med faste valg og bekreft at dato og rute er forhåndsutfylt fra aktiviteten.
    • Screen reader Listevelgeren annonseres som 'Utleggstype, kombinasjonsboks, ett av seks valg'.
    • Keyboard / focus Piltaster opp/ned navigerer mellom faste utleggsvalg; ingen fritekst-felt eksisterer.
    • Focus visibility Forhåndsutfylte felter merket 'auto-fylt' for skjermleser.
  4. Fyll inn antall kilometer og trykk 'Send inn'.
    • Screen reader Tallfelt annonseres som 'Antall kilometer, obligatorisk, tall'.
    • Keyboard / focus Tab når 'Send inn'; Enter sender skjemaet.
    • Touch target 'Send inn'-knapp ≥ 24×24 CSS px.
    • Contrast Send inn-knapp har minst 4.5:1 kontrast mot bakgrunn.
  5. Bekreft at utlegget vises i listen med status 'Auto-godkjent' (under terskel) eller 'Til godkjenning' (over terskel).
    • Live region 'Utlegg sendt inn. Status: Auto-godkjent.' annonseres i polite live region.
    • Contrast Statusetikett bruker både ikon og tekst — ikke farge alene.

Role Boundaries

3 role(s) must NOT access this feature
  • Organization Administrator

    Organisasjonsadministrator logger ikke inn i mobilappen for registrering; utleggsregistrering er ikke tilgjengelig fra Admin Web Portal — kun godkjenningskøen er der.

  • Global Administrator

    Skjerm finnes ikke i mobilappens navigasjon; Global Admin har ingen mobilapp-tilgang og deep-link returnerer 403.

  • Prospective Buyer

    Ingen pålogging eller tilgang til mobilappen; utleggsregistrering er fullstendig utilgjengelig.

Expected End State

Utlegget er lagret i Expense Store, knyttet til den opprinnelige aktiviteten, og har enten status 'Auto-godkjent' (under konfigurert terskel uten kvitteringskrav) eller 'Til godkjenning' (over terskel — rutes til koordinator-attestering i Admin Web Portal).

User Stories

No user stories have been generated for this feature yet.