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

Description

Expense Types & Requirements manages the configurable catalogue of reimbursable cost categories and the business rules that govern their use. Each expense type specifies which other types it is mutually exclusive with, whether a receipt is mandatory, and which approval path applies. Organisation admins can extend or restrict the default type catalogue from the admin portal. The mobile app fetches the active type list per organisation and enforces all rules at the form level, preventing invalid combinations before data reaches the API.

User Flow

Expense Types & Requirements user flow
Click to expand

Analysis

Business Value

Uncontrolled free-text expense entry leads to duplicate categories, misclassification, and audit failures. A structured type catalogue enforced at the UI layer eliminates the most common data quality issues in expense reporting, reducing the manual correction workload for coordinators and accountants. For HLF specifically, preventing invalid combinations (e.g. simultaneously claiming km allowance and a bus ticket for the same journey) is a hard compliance requirement. A shared type catalogue also enables consistent Bufdir reporting across peer mentors and simplifies accounting system export mapping.

Implementation Notes

Expense types and their mutual-exclusion rules are stored in the expense_types table and served through a REST endpoint scoped to the authenticated user's organisation. The Flutter Expense Type Selector component fetches this list on screen load and applies exclusion logic reactively - selecting one type disables incompatible options. Receipt requirements are enforced by the form validator before allowing submission. The admin portal provides a CRUD interface for managing types per organisation. Default types are seeded during organisation onboarding and can be customised without affecting other tenants, supporting multi-tenancy isolation in the database layer.

Components (35)

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.