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

Description

A per-organisation catalogue of activity types that controls what options appear in the registration wizard. Each organisation has different terminology and different categories of work that count as peer mentoring activity — NHF distinguishes group events from one-on-one contact, Blindeforbundet uses assignment-based types tied to honorarium tiers, and HLF separates compensated from uncompensated work explicitly. Activity types carry metadata: whether the type is eligible for travel expense claims, whether it requires a structured report form, whether it triggers a reimbursement workflow, and which Bufdir reporting category it maps to. This metadata drives downstream behaviour throughout the app rather than requiring duplicate logic in every feature.

Analysis

Business Value

Correct activity type metadata is the single point of truth for reimbursement eligibility, Bufdir categorisation, and honorarium calculation. Miscategorisation at this layer propagates errors into financial exports and grant reports, making accurate configuration a financial compliance concern.

Implementation Notes

Store activity types in Supabase with an org_id foreign key and a JSON metadata column. Admin portal manages the catalogue. Mobile app fetches types on login and caches locally via Riverpod AsyncNotifier. The existing organisation labels system should be extended to cover activity type display names.

Components (202)

User Interface (2)

Service Layer (1)

Data Layer (1)

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)

Archive an Activity Type No Longer in Use
medium 3 pts

As a As a Coordinator

I want to archive an activity type that is no longer relevant so it no longer appears in the peer mentor selection screen, while preserving historical activity records that used it

So that the list of choices during activity registration stays clean and relevant, reducing decision fatigue for peer mentors, without losing historical reporting data

Acceptance Criteria
  • Given I am on the activity type form or admin screen, When I tap 'Archive' on an active type and confirm the dialog, Then the type is marked inactive
  • Given an activity type is archived, When a peer mentor opens the activity type selection screen, Then the archived type does not appear in the list
  • Given an activity type is archived, When I run a Bufdir export for a historical period, Then activities registered under the archived type are still included in the export
  • +3 more
View Full Story →
Archive an Activity Type No Longer in Use
medium 3 pts

As a As a Organization Administrator

I want to archive an activity type that is no longer relevant so it no longer appears in the peer mentor selection screen, while preserving historical activity records that used it

So that the list of choices during activity registration stays clean and relevant, reducing decision fatigue for peer mentors, without losing historical reporting data

Acceptance Criteria
  • Given I am on the activity type form or admin screen, When I tap 'Archive' on an active type and confirm the dialog, Then the type is marked inactive
  • Given an activity type is archived, When a peer mentor opens the activity type selection screen, Then the archived type does not appear in the list
  • Given an activity type is archived, When I run a Bufdir export for a historical period, Then activities registered under the archived type are still included in the export
  • +3 more
View Full Story →
Edit an Existing Activity Type
high 3 pts

As a As a Coordinator

I want to edit the details of an existing activity type including its name, description, default duration, and category mapping

So that I can correct mistakes, update terminology when organizational requirements change, and keep activity type metadata accurate over time without creating duplicate types

Acceptance Criteria
  • Given I tap an existing activity type in the admin list, When the form screen opens, Then all existing values are pre-populated in the correct fields
  • Given I edit the name field, When I save, Then the updated name appears in the admin list and in the peer mentor selection screen immediately
  • Given I change the default duration, When a peer mentor next selects this activity type, Then the updated duration is pre-filled in the duration step
  • +3 more
View Full Story →
View and Manage Activity Types for Organization
high 5 pts

As a As a Coordinator

I want to view a list of all activity types configured for my organization and manage them from a central admin screen

So that I can ensure peer mentors have the correct set of activity types available when registering their work, reflecting our organization's terminology and workflows

Acceptance Criteria
  • Given I am logged in as a Coordinator, When I navigate to the activity type admin screen, Then I see a list of all activity types belonging to my organization
  • Given the activity type list is loaded, When I view each entry, Then I can see the name, status (active/archived), and a short description for each type
  • Given I am on the admin screen, When I tap 'Create New Activity Type', Then I am taken to the activity type form screen
  • +3 more
View Full Story →
Create a New Activity Type with Metadata
high 5 pts

As a As a Coordinator

I want to create a new activity type by filling in a structured form with name, description, default duration, and Bufdir category mapping

So that peer mentors can select it during activity registration and the activity is automatically mapped to the correct Bufdir reporting category without manual intervention

Acceptance Criteria
  • Given I am on the activity type form screen, When I fill in the name and description fields and submit, Then a new activity type is created and appears in the admin list
  • Given I am filling the form, When I set a default duration, Then this duration pre-fills the duration step when a peer mentor selects this activity type during registration
  • Given I am filling the form, When I select a Bufdir category from the dropdown, Then the system stores the mapping used for automated Bufdir report generation
  • +3 more
View Full Story →
Configure Activity Types with Expense Association Flags
high 5 pts

As a As a Coordinator

I want to mark specific activity types as typically involving expense claims (e.g., travel reimbursement) when configuring them, and to optionally require a receipt for certain types

So that the registration flow can automatically prompt for expense details only when relevant, preventing peer mentors from missing required expense submissions and coordinators from manually chasing missing receipts

Acceptance Criteria
  • Given I am on the activity type form screen, When I toggle 'Involves Expenses', Then an additional option appears to set whether a receipt is required
  • Given an activity type has 'Involves Expenses' set to false, When a peer mentor selects that type, Then the expense registration step is skipped in the wizard
  • Given an activity type has 'Involves Expenses' set to true, When a peer mentor selects that type, Then the expense registration step is included in the wizard
  • +3 more
View Full Story →
Map Activity Types to Bufdir Reporting Categories
high 5 pts

As a As a Coordinator

I want to explicitly map each activity type to the correct Bufdir reporting category during configuration so that automated Bufdir exports are generated without manual reclassification

So that our organization's annual Bufdir submission is accurate and can be generated with a single action, saving significant administrative time and reducing the risk of misclassification penalties

Acceptance Criteria
  • Given I am on the activity type form screen, When I view the Bufdir category field, Then I see a dropdown with the current valid Bufdir categories
  • Given I select a Bufdir category, When I save the activity type, Then the mapping is persisted and associated with all future activities of this type
  • Given activities have been registered using this type, When the Bufdir export service runs for a reporting period, Then activities are automatically grouped under the correct Bufdir category based on their type mapping
  • +3 more
View Full Story →
Edit an Existing Activity Type
high 3 pts

As a As a Organization Administrator

I want to edit the details of an existing activity type including its name, description, default duration, and category mapping

So that I can correct mistakes, update terminology when organizational requirements change, and keep activity type metadata accurate over time without creating duplicate types

Acceptance Criteria
  • Given I tap an existing activity type in the admin list, When the form screen opens, Then all existing values are pre-populated in the correct fields
  • Given I edit the name field, When I save, Then the updated name appears in the admin list and in the peer mentor selection screen immediately
  • Given I change the default duration, When a peer mentor next selects this activity type, Then the updated duration is pre-filled in the duration step
  • +3 more
View Full Story →
View and Manage Activity Types for Organization
high 5 pts

As a As a Organization Administrator

I want to view a list of all activity types configured for my organization and manage them from a central admin screen

So that I can ensure peer mentors have the correct set of activity types available when registering their work, reflecting our organization's terminology and workflows

Acceptance Criteria
  • Given I am logged in as a Coordinator, When I navigate to the activity type admin screen, Then I see a list of all activity types belonging to my organization
  • Given the activity type list is loaded, When I view each entry, Then I can see the name, status (active/archived), and a short description for each type
  • Given I am on the admin screen, When I tap 'Create New Activity Type', Then I am taken to the activity type form screen
  • +3 more
View Full Story →
Create a New Activity Type with Metadata
high 5 pts

As a As a Organization Administrator

I want to create a new activity type by filling in a structured form with name, description, default duration, and Bufdir category mapping

So that peer mentors can select it during activity registration and the activity is automatically mapped to the correct Bufdir reporting category without manual intervention

Acceptance Criteria
  • Given I am on the activity type form screen, When I fill in the name and description fields and submit, Then a new activity type is created and appears in the admin list
  • Given I am filling the form, When I set a default duration, Then this duration pre-fills the duration step when a peer mentor selects this activity type during registration
  • Given I am filling the form, When I select a Bufdir category from the dropdown, Then the system stores the mapping used for automated Bufdir report generation
  • +3 more
View Full Story →
Configure Activity Types with Expense Association Flags
high 5 pts

As a As a Organization Administrator

I want to mark specific activity types as typically involving expense claims (e.g., travel reimbursement) when configuring them, and to optionally require a receipt for certain types

So that the registration flow can automatically prompt for expense details only when relevant, preventing peer mentors from missing required expense submissions and coordinators from manually chasing missing receipts

Acceptance Criteria
  • Given I am on the activity type form screen, When I toggle 'Involves Expenses', Then an additional option appears to set whether a receipt is required
  • Given an activity type has 'Involves Expenses' set to false, When a peer mentor selects that type, Then the expense registration step is skipped in the wizard
  • Given an activity type has 'Involves Expenses' set to true, When a peer mentor selects that type, Then the expense registration step is included in the wizard
  • +3 more
View Full Story →
Map Activity Types to Bufdir Reporting Categories
high 5 pts

As a As a Organization Administrator

I want to explicitly map each activity type to the correct Bufdir reporting category during configuration so that automated Bufdir exports are generated without manual reclassification

So that our organization's annual Bufdir submission is accurate and can be generated with a single action, saving significant administrative time and reducing the risk of misclassification penalties

Acceptance Criteria
  • Given I am on the activity type form screen, When I view the Bufdir category field, Then I see a dropdown with the current valid Bufdir categories
  • Given I select a Bufdir category, When I save the activity type, Then the mapping is persisted and associated with all future activities of this type
  • Given activities have been registered using this type, When the Bufdir export service runs for a reporting period, Then activities are automatically grouped under the correct Bufdir category based on their type mapping
  • +3 more
View Full Story →
Peer Mentor Selects Activity Type During Registration
critical 5 pts

As a As a Coordinator

I want peer mentors to see a clear, filtered list of activity types specific to our organization when starting an activity registration

So that they can quickly select the correct type in the first step of the registration wizard, with pre-filled defaults that minimize the number of additional inputs required

Acceptance Criteria
  • Given a peer mentor opens the activity registration flow, When the activity type selection screen loads, Then only active activity types for their organization are displayed
  • Given the selection screen is displayed, When it loads, Then it uses the cache provider so the list appears without network latency on repeat visits
  • Given I select an activity type with a configured default duration, When the duration step loads, Then the default duration is pre-filled
  • +3 more
View Full Story →
Peer Mentor Selects Activity Type During Registration
critical 5 pts

As a As a Organization Administrator

I want peer mentors to see a clear, filtered list of activity types specific to our organization when starting an activity registration

So that they can quickly select the correct type in the first step of the registration wizard, with pre-filled defaults that minimize the number of additional inputs required

Acceptance Criteria
  • Given a peer mentor opens the activity registration flow, When the activity type selection screen loads, Then only active activity types for their organization are displayed
  • Given the selection screen is displayed, When it loads, Then it uses the cache provider so the list appears without network latency on repeat visits
  • Given I select an activity type with a configured default duration, When the duration step loads, Then the default duration is pre-filled
  • +3 more
View Full Story →