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

Description

Provides a fixed, org-configurable set of expense type options - kilometer allowance, tolls, parking, public transport, chauffeur honorarium - presented as mutually exclusive choices. Selecting one type automatically disables incompatible alternatives, making invalid combinations such as kilometer allowance and public transport ticket on the same entry technically impossible. Expense type definitions include validation rules, required fields, and documentation requirements enforced at point of entry. Organization admins configure available types and mutual-exclusion rules in the Admin Web Portal; the mobile app fetches and caches this configuration offline so enforcement applies even without connectivity.

Sources & reasoning

Lines 67 and 112 both explicitly require fixed type choices with technical enforcement of mutual exclusivity, framed as a hard HLF requirement. This is part of Reiserefusjonshåndtering in the Phase 2 roadmap (line 343), placing it at v1.0.

  • docs/source/likeperson.md · line 67
    Faste valg for utleggstype - ikke fritekst - for å hindre feilkombinasjon (f.eks. både km og bussbillett).
  • docs/source/likeperson.md · line 112
    Detaljert refusjonsstyring med faste valg som gjør feilkombinasjon teknisk umulig (f.eks. km + bussbillett kan ikke velges samtidig). Automatisk godkjenning under terskel.

Analysis

Business Value

HLF stated that making invalid type combinations technically impossible is a hard requirement. When peer mentors can freely combine expense types, coordinators must manually detect and reject invalid claims, adding review overhead and causing frustration on both sides. Fixed mutually exclusive type options eliminate this class of error at source, reducing coordinator workload and improving data quality. A well-structured expense type system also streamlines accounting exports: each type maps cleanly to accounting categories in Xledger (Blindeforbundet) and Dynamics (HLF), reducing manual categorization during export. Centralized type configuration in the Admin Web Portal ensures consistency across all peer mentors in an organization without requiring app updates when policies change.

Implementation Notes

Expense types are stored in the expense_types table with a mutual-exclusion group field. The mobile app fetches available types and constraint rules from /api/v1/expense-types at session bootstrap and caches them in Drift for offline enforcement. The Flutter expense form renders types as a radio group or segmented control, dynamically disabling incompatible options on selection. Server-side validation re-checks type combinations on submission, returning a structured error if client constraints were bypassed. The Admin Web Portal provides a configuration screen for org admins to enable or disable types and define exclusion rules per organization. Data model must be org-scoped so different organizations can expose different type subsets while sharing the same schema.

User Stories

No user stories have been generated for this feature yet.