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

Description

Expense Types & Requirements defines and enforces the structured taxonomy of allowable expense categories and the business rules that govern their combination and documentation requirements. Rather than letting peer mentors enter free-text descriptions, the feature presents a curated set of expense types (mileage, toll, parking, public transport, honorarium) that are configured per organization. Each type carries metadata such as whether a receipt is required, whether it is mutually exclusive with other types, and what the auto-approval threshold is. This configuration is managed by organization administrators and consumed by the expense form at runtime, making the validation logic data-driven rather than hardcoded. The feature also surfaces clear error states when invalid combinations are attempted, supporting users with cognitive accessibility needs.

Analysis

Business Value

Unstructured free-text expense entries are a primary source of reimbursement errors and audit failures. HLF explicitly identified that allowing peer mentors to combine mileage and public transport on the same claim was causing finance rejections and requiring manual correction. A structured, rule-enforced type system eliminates this class of error at the point of entry rather than during auditor review, saving hours of coordinator and finance team time per reporting period. For organizations with Bufdir reporting obligations, having clean and categorized expense data also simplifies the generation of statutory reports and reduces the risk of funding clawback due to documentation errors.

Implementation Notes

Expense type definitions are stored in the module_configurations table as JSON configuration per organization, loaded at app startup and cached offline via Drift. The Expense Validation Service exposes a REST endpoint returning the active type list with their mutual exclusivity rules and threshold values for the authenticated user's organization. The Flutter expense form widget reads this configuration to build the type selector dynamically and enforces exclusivity at the UI layer with immediate visual feedback. Server-side validation re-checks the same rules on submission to prevent bypass via API. The admin portal provides a configuration UI under Organization Management where admins can adjust type definitions, thresholds, and receipt requirements without a code deployment. Adding a new expense type requires only a configuration change, not a client release.

Components (42)

User Interface (1)

Service Layer (1)

Data Layer (1)

Shared Components

These components are reused across multiple features

User Stories

No user stories have been generated for this feature yet.