Expense Approval Queue
Feature Detail
Description
Centralized queue in the Admin Web Portal where Organization Admins review, approve, or reject travel expense claims and reimbursements submitted by peer mentors and coordinators through the mobile app. The queue surfaces pending expenses with full context - submitter, activity link, amount, expense type, attached receipts, and any confidentiality declarations - so reviewers can make informed decisions quickly. Items flow into the queue from mobile-side travel expense registration and receipt photo upload, and exit when approved (triggering downstream reimbursement processing) or rejected (with reason returned to the submitter). The queue is the human-review counterpart to Auto-Approval Rules: expenses that fall outside automatic thresholds land here.
Sources & reasoning
The source describes manual attestation for expenses outside auto-approval thresholds, requiring a human-review surface in the admin portal. Placed in Core Product because §5 lists "Reiserefusjonshåndtering (faste valg, terskelbasert godkjenning)" under Fase 2.
-
docs/source/likeperson.md · line 43Automatisk godkjenning under 50 km / uten utlegg, manuell attestering ellers (HLF).
-
docs/source/likeperson.md · line 311Reiserefusjon
Analysis
Expense approval is one of the most time-consuming admin tasks in the current paper/Word-based workflows. A unified queue with all context in one place lets Org Admins clear backlogs efficiently and consistently, which directly reduces the reimbursement turnaround time that volunteers experience. Faster, more transparent approval improves volunteer retention - peer mentors are unpaid and reimbursement delays erode goodwill. From a compliance standpoint, a single auditable approval surface produces the trail needed for Bufdir reporting and internal audit, replacing the fragmented manual attestation processes the organizations described as painful.
Implemented as a Next.js admin page backed by REST endpoints that list, filter, and transition expense records. Filters include status, submitter, expense type, organization unit, and date range. Each row deep-links to the underlying activity and to attached receipts served from object storage. State transitions (pending → approved/rejected) write to the expenses table and emit notifications back to the submitter via the existing notifications module. Approval actions are logged in audit_logs with actor, timestamp, and prior/new state. The queue must respect tenant isolation and only show expenses for organizations the admin scope covers.
Quality Assurance
Organization Administrator (reviewer + decision-maker)Organization Administrator
Quick UAT
- Logg inn i Admin-portalen som Organisasjonsadministrator og åpne Utleggsgodkjenning → Godkjenningskø.
- Filtrer køen på status 'Til godkjenning' og sorter på eldste først; velg en pending utleggskrav fra en likeperson.
- Åpne detaljvisningen og kontroller kravstiller, beløp, vedlagt kvittering, utleggstype og eventuelle systemflagg (mangler kvittering, over terskel, duplikat).
- Trykk Godkjenn og bekreft i dialogen.
- Verifiser at kravet forsvinner fra køen, status endres til Godkjent, og telleren 'Til godkjenning' reduseres med én.
- Gå tilbake til køen, kryss av flere krav, og bruk Bulk-godkjenn for å godkjenne dem samlet.
- Velg et annet krav, trykk Avvis, skriv begrunnelse 'Mangler gyldig kvittering', og bekreft.
Quick UAT — Accessibility
-
Logg inn i Admin-portalen som Organisasjonsadministrator og åpne Utleggsgodkjenning → Godkjenningskø.
- Screen reader Sideoverskrift 'Godkjenningskø' annonseres; landemerker hoved/navigasjon eksponert; tab-rekkefølge: hovedmeny → filter → tabell.
- Keyboard / focus Hele navigasjonen nås med Tab; ingen tastaturfeller.
- Focus visibility Synlig fokusring (≥3:1 kontrast) på fokuserte menyelementer.
-
Filtrer køen på status 'Til godkjenning' og sorter på eldste først; velg en pending utleggskrav fra en likeperson.
- Screen reader Filter-kombobox annonseres som 'Status, kombinasjonsboks, Til godkjenning valgt'; tabellen annonseres som 'tabell, X rader'.
- Keyboard / focus Filter åpnes med Alt+pil ned; piltaster navigerer rader; Enter åpner valgt rad.
- Contrast Statusflagg (rødt/gult/grønt) kombineres med ikon og tekst — ikke kun farge.
-
Åpne detaljvisningen og kontroller kravstiller, beløp, vedlagt kvittering, utleggstype og eventuelle systemflagg (mangler kvittering, over terskel, duplikat).
- Screen reader Detaljpanel annonseres; kvittering har alt-tekst 'Kvitteringsbilde, last ned for å lese innhold'.
- Focus visibility Fokus flyttes til detalj-overskriften ved åpning; Esc lukker og returnerer fokus til opprinnelig rad.
- Zoom Detaljpanelet er brukbart ved 200% zoom uten horisontal scroll.
-
Trykk Godkjenn og bekreft i dialogen.
- Keyboard / focus Dialog kan bekreftes med Enter og avbrytes med Esc.
- Focus visibility Synlig fokusring på Godkjenn-knapp; bekreftelsesdialog fanger fokus; Esc avbryter.
- Touch target Godkjenn-knapp ≥ 24×24 CSS-piksler.
-
Verifiser at kravet forsvinner fra køen, status endres til Godkjent, og telleren 'Til godkjenning' reduseres med én.
- Screen reader Polite live-region annonsering uten å avbryte pågående lesing.
- Live region 'Utlegg godkjent. Ett element fjernet fra køen. X krav gjenstår til godkjenning.'
-
Gå tilbake til køen, kryss av flere krav, og bruk Bulk-godkjenn for å godkjenne dem samlet.
- Screen reader Header-checkbox annonserer 'Velg alle synlige rader, X valgt'.
- Keyboard / focus Sjekkbokser nås per rad; Mellomrom veksler; 'Velg alle synlige' tilgjengelig fra header-checkbox.
- Live region 'X utlegg godkjent. Køen oppdatert.'
-
Velg et annet krav, trykk Avvis, skriv begrunnelse 'Mangler gyldig kvittering', og bekreft.
- Screen reader Feilmelding annonseres dersom begrunnelse er tom: 'Feil: Begrunnelse er påkrevd'.
- Focus visibility Fokus flyttes til begrunnelsesfeltet ved åpning av Avvis-dialog; feltet har synlig label 'Begrunnelse (obligatorisk)'.
- Contrast Feiltekst 4.5:1 mot bakgrunn; markeres med ikon i tillegg til rød farge.
Role Boundaries
4 role(s) must NOT access this feature-
Peer Mentor (Likeperson)
Godkjenningskøen finnes ikke i mobilappens navigasjon; likepersoner kan kun se status på egne innsendte krav. Direkte API-kall til admin-endepunkt returnerer 403.
-
Coordinator (Koordinator)
Koordinatorer logger ikke inn i Admin-portalen og har derfor ingen tilgang til godkjenningskøen. Deep-link til /admin/expense-approval returnerer 403.
-
Global Administrator
Uten tidsbegrenset support-tilgang aktivert av organisasjonen er køen skjult og returnerer 403. Med support-tilgang er handlingene logget i organisasjonens audit-spor.
-
Prospective Buyer
Ingen pålogging til Admin-portalen; Salgsnettstedet eksponerer ikke denne funksjonen.
Expected End State
Det valgte utleggskravet har status Godkjent (eller Avvist med lagret begrunnelse) i databasen, er fjernet fra 'Til godkjenning'-køen, godkjenningstidspunkt og admin-identitet er logget i audit-sporet, og kravstilleren mottar varsel om utfallet.
Components (4)
Shared Components
These components are reused across multiple features
User Stories
No user stories have been generated for this feature yet.