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

Description

Allows peer mentors and coordinators to register travel expenses including kilometer reimbursement, tolls, parking, and public transport costs. Fixed choice fields prevent invalid type combinations and standard defaults reduce input friction for the most common scenarios. Automatic server-side approval applies for trips under the organization-configured threshold; larger claims queue for manual coordinator attestation before reimbursement is processed. Records persist in the local Drift database and sync when connectivity is restored, linking to the parent activity record. Accounting export to Xledger or Dynamics is handled through the admin portal accounting module rather than directly from the mobile client.

Sources & reasoning

Lines 66 and 341 explicitly describe the expense registration need for HLF and Blindeforbundet. The priority matrix at line 148 places the parent area as SHOULD HAVE Fase 2, which maps to v1.0 by ordinal phase position.

  • Begge organisasjoner har behov for registrering av kilometergodtgjørelse, bompenger, parkering og kollektivt. Behovene er like, men HLF har mest detaljert krav:
  • Reiserefusjon / utleggsregistrering | - | - | ✓ | ✓ | ✓ | SHOULD HAVE | 2
  • Reiserefusjonshåndtering (faste valg, terskelbasert godkjenning)

Analysis

Business Value

HLF and Blindeforbundet both reported significant administrative overhead from paper-based expense management: manual km logs, physical receipt submission, and Excel aggregation create delays and errors in the reimbursement cycle. Digitizing registration with enforced type selection eliminates a category of submission errors before they reach the approval queue, directly reducing coordinator workload and accelerating payment to peer mentors who are often volunteers covering real costs. Bufdir-funded organizations must maintain accurate expense records to demonstrate grant compliance. A structured digital trail replaces manual aggregation, reduces audit risk, and enables automated Bufdir export from the admin portal without additional data entry. The threshold-based auto-approval further cuts coordinator time spent on routine small claims while maintaining oversight for larger reimbursements.

Implementation Notes

Built as a Flutter screen with Riverpod state management and Drift offline persistence, using ExpenseRegistrationScreen and ExpenseService. Expense type selection enforces mutually exclusive category rules at the UI layer via ExpenseTypeSelectorWidget with reactive disabling. Auto-approval threshold logic runs server-side against per-organization configuration stored in organization_settings; the mobile client submits the claim and receives an approval status in the response. The expense record links to its parent activity via the activities to expenses one-to-many relationship. In offline mode the record is queued in the mutation outbox and synced on reconnect. Distance-based reimbursement accepts manual km entry or device GPS input, with rate lookup performed server-side against the organization's expense_types configuration. Accounting integration for Xledger and Dynamics is scoped to the admin-accounting module to keep the mobile layer decoupled from accounting-system specifics.

Quality Assurance

Peer Mentor (primær) · Coordinator (samme flyt)
1
Scenarios
6
UAT Steps
20
A11y Annotations
2
Role Boundaries
Peer Mentor

Peer Mentor

Quick UAT

  1. Logg inn i appen som Likeperson. Trykk på «Legg til»-knappen i bunnen og velg «Utlegg».
  2. Velg utleggstype «Kilometergodtgjørelse». Bekreft at «Bussbillett» og «Bompenger» er deaktivert og ikke kan velges samtidig som km.
  3. Skriv inn antall kilometer og kontroller at godtgjørelsesbeløpet beregnes automatisk basert på organisasjonens sats.
  4. Trykk «Neste», gå gjennom oppsummeringen og trykk «Send inn utlegg».
  5. Bekreft at utlegget vises med status «Automatisk godkjent» dersom turen er under terskelen, eller «Til manuell attestering» dersom den er over.
  6. Slå av nettilgang. Legg inn et nytt utlegg og bekreft at det lagres lokalt med synkroniseringsstatus «Venter på sync».

Quick UAT — Accessibility

  1. Logg inn i appen som Likeperson. Trykk på «Legg til»-knappen i bunnen og velg «Utlegg».
    • Screen reader «Legg til»-knapp annonseres som knapp; menyalternativet «Utlegg» leses opp med rolle og tilstand.
    • Keyboard / focus Tab når «Legg til»-knappen; Enter åpner menyen; piltaster navigerer alternativer.
    • Touch target «Legg til»-knapp og «Utlegg»-valg ≥ 24×24 CSS px.
  2. Velg utleggstype «Kilometergodtgjørelse». Bekreft at «Bussbillett» og «Bompenger» er deaktivert og ikke kan velges samtidig som km.
    • Screen reader Deaktiverte alternativer annonseres som «ikke tilgjengelig» eller «grået ut»; valgt type annonseres som «valgt».
    • Keyboard / focus Piltaster navigerer typevalg; deaktiverte alternativ er hoppbare men annonseres med tilstand.
    • Contrast Deaktiverte valg har synlig visuell forskjell fra aktive; tilstand formidles ikke kun med farge.
  3. Skriv inn antall kilometer og kontroller at godtgjørelsesbeløpet beregnes automatisk basert på organisasjonens sats.
    • Screen reader Inndatafelt har label «Antall kilometer»; beregnet beløp i live-region annonseres ved endring.
    • Focus visibility Synlig fokusring på km-felt; feilmelding ved ugyldig verdi er knyttet til feltet via aria-describedby.
    • Live region «Beregnet beløp: X kr» annonseres som høflig live-region ved endring i km-felt.
    • Zoom Felt og beløpsvisning er lesbare og brukbare ved 200 % zoom uten horisontal scrolling.
  4. Trykk «Neste», gå gjennom oppsummeringen og trykk «Send inn utlegg».
    • Screen reader Oppsummeringssiden annonserer overskrift og alle feltverdi-par; «Send inn utlegg»-knapp leses opp med rolle.
    • Keyboard / focus Tab-rekkefølge: tilbake-knapp → oppsummering → send inn.
    • Focus visibility Fokus flyttes til oppsummeringsoverskriften ved sidebytte; «Send inn»-knapp har synlig fokusring.
    • Touch target «Send inn utlegg»-knapp ≥ 24×24 CSS px.
  5. Bekreft at utlegget vises med status «Automatisk godkjent» dersom turen er under terskelen, eller «Til manuell attestering» dersom den er over.
    • Screen reader Statusbadge leses opp i sin helhet; status formidles ikke kun med farge.
    • Live region «Utlegg sendt inn. Status: Automatisk godkjent» eller tilsvarende annonseres som høflig live-region.
    • Contrast «Automatisk godkjent» og «Til manuell attestering» bruker tekst eller ikon i tillegg til farge for å formidle status; 4.5:1 kontrastforhold oppfyllt.
  6. Slå av nettilgang. Legg inn et nytt utlegg og bekreft at det lagres lokalt med synkroniseringsstatus «Venter på sync».
    • Screen reader Offlinebanner annonseres; «Venter på sync»-indikator leses opp ved lagring.
    • Live region «Utlegg lagret lokalt. Synkroniseres når nettforbindelsen er gjenopprettet.» annonseres som høflig live-region.
    • Contrast Offline-statusindikator bruker tekst i tillegg til farge; 4.5:1 kontrast på bannertekst.

Role Boundaries

2 role(s) must NOT access this feature
  • Global Administrator

    Global Admin har ingen tilgang til mobilappen; innlogging omdirigerer til admin-portalen.

  • Prospective Organization Representative

    Ingen app-tilgang; skjermen finnes ikke i navigasjon og deep-link returnerer 401.

Expected End State

Utlegget er lagret og koblet til foreldreaktiviteten. Krav under organisasjonens terskel får status «Automatisk godkjent»; krav over terskel får status «Til manuell attestering» og vises i koordinatorens godkjenningskø i Admin-portalen.

User Stories

No user stories have been generated for this feature yet.