high complexity extracted Activity Registration & Reporting Confidence: 100%
15
Components
198
Shared
14
User Stories
Yes
Analyzed

Description

Expense logging attached to an activity record, covering kilometre allowance, toll roads, parking, and public transport. The expense type selection uses a constrained set of options — not free text — with mutual exclusion rules that make logically incompatible combinations (e.g. km allowance and bus ticket for the same trip) technically impossible to submit simultaneously. This is a hard HLF requirement and should be implemented as a validation rule rather than a UI hint. Receipts above a configurable threshold (100 kr for HLF) require a photo attachment. Under a distance threshold (50 km for HLF) or when no expense is claimed, the record is auto-approved; above the threshold it enters a manual attestation queue visible to the coordinator. Blindeforbundet adds driver honoraria and a linked confidentiality declaration for drivers transporting clients.

Analysis

Business Value

Replaces manual expense forms and reduces processing time for coordinators. Auto-approval below thresholds eliminates unnecessary coordinator bottlenecks for the majority of claims. Mutual-exclusion validation prevents duplicate reimbursement, which is a direct financial risk.

Implementation Notes

Expense types stored as a catalogue with an `exclusive_groups` field — types in the same group cannot be co-selected. Implement as a custom multi-select widget that enforces group exclusivity on selection. Receipt image captured via image_picker, uploaded to Supabase Storage, stored as URL reference on the expense record. Auto-approval logic runs server-side in a Supabase Edge Function triggered on insert. Dynamics and Xledger API integration scoped to Phase 3.

Components (213)

User Interface (5)

Service Layer (5)

Data Layer (2)

Infrastructure (3)

Shared Components

These components are reused across multiple features

User Interface (59)

ui Role Switch Widget medium Shared ui Role-Aware Bottom Navigation medium Shared ui Activity Type Selection Screen low Shared ui Speech-to-Text Field Overlay medium Shared ui Receipt Capture Widget medium Shared ui Peer Mentor Single Selector low Shared ui Proxy Audit Badge Widget low Shared ui Export Period Picker low Shared ui Contact Card Widget low Shared ui Contact Search Bar low Shared ui Peer Mentor Card Widget low Shared ui Activity History List low Shared ui Multi-Chapter Affiliation Chip Widget medium Shared ui Certification Status Badge low Shared ui Duplicate Activity Warning Dialog medium Shared ui Mentor Multi-Select Widget medium Shared ui Map Filter Panel medium Shared ui Claim Status Badge low Shared ui Export Date Range Picker low Shared ui Custom Date Range Picker low Shared ui Duplicate Activity Warning Dialog low Shared ui Proxy Activity Form medium Shared ui Proxy Peer Mentor Selector medium Shared ui Expected Return Date Picker low Shared ui Pause Activation Screen low Shared ui Pause Status Indicator low Shared ui Admin KPI Stat Widget low Shared ui Organisation Hierarchy Navigator high Shared ui Bufdir Period Selector Widget low Shared ui Export History List medium Shared ui Activity Type Donut Chart medium Shared ui Monthly Activity Bar Chart medium Shared ui Statistics Period Filter Bar low Shared ui Statistics Summary Cards low Shared ui Notification Badge Widget low Shared ui Certificate Expiry Status Indicator low Shared ui Animated Stat Card Widget medium Shared ui In-App Notification Banner low Shared ui Accessible Modal Sheet Widget high Shared ui Live Region Announcer medium Shared ui Semantics Wrapper Widget medium Shared ui Sensitive Field Warning Dialog high Shared ui Confirm Before Submit Screen medium Shared ui Inline Contextual Help Widget low Shared ui Labelled Navigation Bar low Shared ui Plain Language Error Display low Shared ui Single-Action Screen Layout medium Shared ui Wizard Progress Indicator low Shared ui Accessible Text Style System medium Shared ui Accessible Touch Target Wrapper low Shared ui Contrast-Safe Color Palette Widget medium Shared ui Accessible Bottom Navigation Bar medium Shared ui Modal Close Button low Shared ui Persistent Back Button low Shared ui Vertical Scroll Container low Shared ui Organization Card Widget low Shared ui Terminology-Aware Text Widget low Shared ui FeatureGate Widget low Shared ui Chapter Switcher medium Shared

Service Layer (52)

service Authentication Service medium Shared service Authentication Session Manager medium Shared service Biometric Authentication Service medium Shared service Biometric Authentication Service medium Shared service Biometric Authentication Service medium Shared service Permission Checker Service medium Shared service Role State Manager medium Shared service No-Access Route Guard low Shared service Activity Type Metadata Resolver low Shared service Chapter Scope Resolver medium Shared service Organisation Hierarchy Resolver medium Shared service Coordinator Notification Service medium Shared service Duplicate Activity Detection Service high Shared service Mentor Filter Service low Shared service Receipt Threshold Validator low Shared service Approval Status Notification Service medium Shared service Threshold Evaluation Service medium Shared service Declaration Encryption Service high Shared service Organization Feature Flag Service low Shared service Participant Deduplication Service high Shared service Reporting Period Service medium Shared service Activity Attribution Service low Shared service Proxy Duplicate Detection Service medium Shared service Pause Management Service medium Shared service Pause Notification Service medium Shared service Admin Export Service medium Shared service Admin Row-Level Security Guard high Shared service Organisation Hierarchy Service high Shared service User Management Service high Shared service Role Access Validator low Shared service Peer Mentor Stats Aggregator medium Shared service Push Notification Dispatcher medium Shared service Notification Preference Service low Shared service Scenario Deep-Link Router medium Shared service Scenario Notification Content Builder medium Shared service Badge Criteria Integration medium Shared service Activity Summary Aggregator low Shared service Focus Management Service medium Shared service Screen Reader Detection Service medium Shared service Sensitive Field Privacy Guard high Shared service Plain Language Content Service medium Shared service Wizard State Manager medium Shared service Tab State Manager medium Shared service Organization Route Guard medium Shared service Tenant Context Service high Shared service Label Key Resolver Service low Shared service Organization Labels Notifier medium Shared service FeatureFlagProvider (Riverpod) medium Shared service Access Scope Service high Shared service Hierarchy Aggregation Service high Shared service Hierarchy Service high Shared service Unit Assignment Service medium Shared

Data Layer (33)

Infrastructure (54)

infrastructure Keyboard-Aware Layout Utility low Shared infrastructure Supabase Auth Client low Shared infrastructure Deep Link / OAuth Redirect Handler medium Shared infrastructure Secure Storage Adapter low Shared infrastructure Supabase Session Manager medium Shared infrastructure URL Launcher Utility low Shared infrastructure Local Storage Adapter low Shared infrastructure Supabase Activity Client low Shared infrastructure Organization Labels Provider low Shared infrastructure Supabase Client low Shared infrastructure Organisation Field Config Loader medium Shared infrastructure Speech-to-Text Adapter medium Shared infrastructure File Download Handler low Shared infrastructure Duplicate Reviewed Flag Middleware low Shared infrastructure Contact RLS Query Builder low Shared infrastructure Contact Form Validator low Shared infrastructure Design Token Theme low Shared infrastructure Organization Labels Provider low Shared infrastructure Supabase Client Provider low Shared infrastructure Search Debounce Utility low Shared infrastructure Expense Type Analytics Tracker low Shared infrastructure Receipt Image Picker Integration low Shared infrastructure CSV / JSON File Generator medium Shared infrastructure Coordinator Role Guard low Shared infrastructure Nightly Job Scheduler medium Shared infrastructure Supabase RLS Policy Configuration high Shared infrastructure Export File Storage Adapter low Shared infrastructure Supabase Storage Adapter low Shared infrastructure Peer Mentor Pause Management Service medium Shared infrastructure Push Notification Service medium Shared infrastructure fl_chart Adapter medium Shared infrastructure Push Notification Service low Shared infrastructure FCM Push Notification Sender medium Shared infrastructure FCM Notification Dispatcher medium Shared infrastructure Push Notification Dispatcher medium Shared infrastructure Supabase Realtime Subscription Service medium Shared infrastructure Organisation Data Isolation Guard low Shared infrastructure Push Notification Dispatcher medium Shared infrastructure Deep Link Handler medium Shared infrastructure QR Code Generator low Shared infrastructure Share Sheet Bridge low Shared infrastructure Semantics Service Facade medium Shared infrastructure Accessibility Design Token Enforcer medium Shared infrastructure Accessible Theme Builder medium Shared infrastructure Navigation Route Configuration medium Shared infrastructure Accessibility Live Region Announcer low Shared infrastructure Feature Flag Provider low Shared infrastructure Secure Storage Adapter low Shared infrastructure Supabase RLS Tenant Scope Configurator medium Shared infrastructure Label Key Registry low Shared infrastructure Terminology Riverpod Providers low Shared infrastructure WCAG Semantics Label Resolver low Shared infrastructure Feature Flag Key Constants low Shared infrastructure RLS Policy Manager high Shared

User Stories (14)

View Expense Registration Summary Before Submission
medium 3 pts

As a As a Peer Mentor (Likeperson)

I want to review a full summary of my expense claim including all selected types, amounts, and attachments before I submit

So that I can verify the claim is correct and avoid submitting errors that require coordinator rejection and resubmission

Acceptance Criteria
  • Given I have completed the expense form, when I tap 'Review', then a summary screen displays all expense line items with types, distances or amounts, and calculated reimbursement totals
  • Given a receipt has been attached, when the summary screen loads, then a thumbnail preview of the receipt is shown alongside the relevant expense line
  • Given the claim qualifies for auto-approval, when the summary screen is displayed, then a notice states 'This claim will be automatically approved'
  • +3 more
View Full Story →
Register Driver Honorarium with Confidentiality Declaration
medium 8 pts

As a As a Peer Mentor (Likeperson)

I want to register a driver honorarium fee and send a confidentiality declaration to the driver for acknowledgement

So that drivers who transport contacts are compensated correctly and the required privacy consent is formally documented

Acceptance Criteria
  • Given the driver feature flag is enabled for my organization, when I open the expense registration screen, then a 'Driver Honorarium' option is available
  • Given I select driver honorarium, when I fill in the registration form, then I can specify the driver, amount, and trip details
  • Given I complete the honorarium form, when I tap 'Send Declaration', then a confidentiality declaration is sent to the driver via the configured channel and a pending status is shown
  • +3 more
View Full Story →
Access Expense Registration Offline with Draft Persistence
medium 8 pts

As a As a Peer Mentor (Likeperson)

I want to start and save an expense claim even when I have no internet connection, with automatic submission when connectivity is restored

So that I can register expenses immediately after a visit in areas with poor connectivity without losing my data

Acceptance Criteria
  • Given I am offline, when I open the expense registration screen, then the form is fully functional and I can enter all expense details
  • Given I complete an expense form while offline, when I tap 'Submit', then the claim is saved as a local draft and marked 'Pending Upload' in my expense list
  • Given a draft exists and connectivity is restored, when the app detects network access, then the draft is automatically submitted to the server without requiring manual action
  • +3 more
View Full Story →
View Expense Registration Summary Before Submission
medium 3 pts

As a As a Coordinator

I want to review a full summary of my expense claim including all selected types, amounts, and attachments before I submit

So that I can verify the claim is correct and avoid submitting errors that require coordinator rejection and resubmission

Acceptance Criteria
  • Given I have completed the expense form, when I tap 'Review', then a summary screen displays all expense line items with types, distances or amounts, and calculated reimbursement totals
  • Given a receipt has been attached, when the summary screen loads, then a thumbnail preview of the receipt is shown alongside the relevant expense line
  • Given the claim qualifies for auto-approval, when the summary screen is displayed, then a notice states 'This claim will be automatically approved'
  • +3 more
View Full Story →
Register Driver Honorarium with Confidentiality Declaration
medium 8 pts

As a As a Coordinator

I want to register a driver honorarium fee and send a confidentiality declaration to the driver for acknowledgement

So that drivers who transport contacts are compensated correctly and the required privacy consent is formally documented

Acceptance Criteria
  • Given the driver feature flag is enabled for my organization, when I open the expense registration screen, then a 'Driver Honorarium' option is available
  • Given I select driver honorarium, when I fill in the registration form, then I can specify the driver, amount, and trip details
  • Given I complete the honorarium form, when I tap 'Send Declaration', then a confidentiality declaration is sent to the driver via the configured channel and a pending status is shown
  • +3 more
View Full Story →
Access Expense Registration Offline with Draft Persistence
medium 8 pts

As a As a Coordinator

I want to start and save an expense claim even when I have no internet connection, with automatic submission when connectivity is restored

So that I can register expenses immediately after a visit in areas with poor connectivity without losing my data

Acceptance Criteria
  • Given I am offline, when I open the expense registration screen, then the form is fully functional and I can enter all expense details
  • Given I complete an expense form while offline, when I tap 'Submit', then the claim is saved as a local draft and marked 'Pending Upload' in my expense list
  • Given a draft exists and connectivity is restored, when the app detects network access, then the draft is automatically submitted to the server without requiring manual action
  • +3 more
View Full Story →
Select Expense Types with Mutual Exclusion Rules
high 5 pts

As a As a Peer Mentor (Likeperson)

I want to select from a predefined list of expense types that automatically prevents logically incompatible combinations

So that I cannot accidentally submit invalid claims (e.g. both mileage and a bus ticket for the same trip), reducing errors and rework

Acceptance Criteria
  • Given I open the expense type selector, when the screen loads, then all available expense types for my organization are displayed as selectable options with clear labels
  • Given I select 'Mileage reimbursement', when I attempt to also select 'Public transit', then the public transit option is disabled and a tooltip explains the mutual exclusion rule
  • Given I select a valid combination (e.g. mileage + parking), when I proceed, then both expense types are included in the claim without error
  • +3 more
View Full Story →
Attach Receipt Photo to Expense Claim
high 5 pts

As a As a Peer Mentor (Likeperson)

I want to photograph and attach a receipt to my expense claim directly from the app

So that I can document expenses above the receipt threshold without needing to scan or email receipts separately

Acceptance Criteria
  • Given my expense amount exceeds the receipt threshold, when I view the expense form, then a receipt attachment section is displayed with a 'Required' indicator
  • Given I tap 'Add Receipt', when the camera sheet opens, then I can take a new photo or select an existing image from my gallery
  • Given I capture a photo, when the image is processed, then it is compressed to reduce file size and a thumbnail preview is shown for confirmation
  • +3 more
View Full Story →
Track Expense Claim Approval Status in Real Time
high 5 pts

As a As a Peer Mentor (Likeperson)

I want to see the current approval status of my submitted expense claims with a timeline of status changes

So that I can know when my claim has been approved and when to expect reimbursement without needing to contact my coordinator

Acceptance Criteria
  • Given I have submitted an expense claim, when I view my expense history, then each claim shows a status badge indicating its current state
  • Given I open a specific claim, when the detail view loads, then a status timeline is displayed showing each status change with timestamps
  • Given a coordinator approves or rejects my claim, when the action is processed, then my app updates the claim status in real time without requiring a manual refresh
  • +3 more
View Full Story →
Submit Mileage Reimbursement Claim
high 8 pts

As a As a Peer Mentor (Likeperson)

I want to register a mileage reimbursement claim by entering my route and distance with a real-time cost preview

So that I can be compensated for travel costs without manually calculating rates or filling out paper forms

Acceptance Criteria
  • Given I open the expense registration screen, when I select 'Mileage' as the expense type, then the mileage entry form is displayed with route input fields and a real-time reimbursement preview
  • Given I enter a distance, when the organizational rate is loaded, then the total reimbursement amount is calculated and displayed immediately without requiring a manual submit
  • Given the distance is below the auto-approval threshold and no other expenses are attached, when I submit, then the claim is automatically approved and I receive a confirmation
  • +3 more
View Full Story →
Select Expense Types with Mutual Exclusion Rules
high 5 pts

As a As a Coordinator

I want to select from a predefined list of expense types that automatically prevents logically incompatible combinations

So that I cannot accidentally submit invalid claims (e.g. both mileage and a bus ticket for the same trip), reducing errors and rework

Acceptance Criteria
  • Given I open the expense type selector, when the screen loads, then all available expense types for my organization are displayed as selectable options with clear labels
  • Given I select 'Mileage reimbursement', when I attempt to also select 'Public transit', then the public transit option is disabled and a tooltip explains the mutual exclusion rule
  • Given I select a valid combination (e.g. mileage + parking), when I proceed, then both expense types are included in the claim without error
  • +3 more
View Full Story →
Attach Receipt Photo to Expense Claim
high 5 pts

As a As a Coordinator

I want to photograph and attach a receipt to my expense claim directly from the app

So that I can document expenses above the receipt threshold without needing to scan or email receipts separately

Acceptance Criteria
  • Given my expense amount exceeds the receipt threshold, when I view the expense form, then a receipt attachment section is displayed with a 'Required' indicator
  • Given I tap 'Add Receipt', when the camera sheet opens, then I can take a new photo or select an existing image from my gallery
  • Given I capture a photo, when the image is processed, then it is compressed to reduce file size and a thumbnail preview is shown for confirmation
  • +3 more
View Full Story →
Track Expense Claim Approval Status in Real Time
high 5 pts

As a As a Coordinator

I want to see the current approval status of my submitted expense claims with a timeline of status changes

So that I can know when my claim has been approved and when to expect reimbursement without needing to contact my coordinator

Acceptance Criteria
  • Given I have submitted an expense claim, when I view my expense history, then each claim shows a status badge indicating its current state
  • Given I open a specific claim, when the detail view loads, then a status timeline is displayed showing each status change with timestamps
  • Given a coordinator approves or rejects my claim, when the action is processed, then my app updates the claim status in real time without requiring a manual refresh
  • +3 more
View Full Story →
Submit Mileage Reimbursement Claim
high 8 pts

As a As a Coordinator

I want to register a mileage reimbursement claim by entering my route and distance with a real-time cost preview

So that I can be compensated for travel costs without manually calculating rates or filling out paper forms

Acceptance Criteria
  • Given I open the expense registration screen, when I select 'Mileage' as the expense type, then the mileage entry form is displayed with route input fields and a real-time reimbursement preview
  • Given I enter a distance, when the organizational rate is loaded, then the total reimbursement amount is calculated and displayed immediately without requiring a manual submit
  • Given the distance is below the auto-approval threshold and no other expenses are attached, when I submit, then the claim is automatically approved and I receive a confirmation
  • +3 more
View Full Story →