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

Description

Automatic detection and flagging of likely duplicate activity records before or immediately after submission. A duplicate is defined as the same peer mentor, the same activity type, and the same date appearing more than once — either from the same user submitting twice or from two coordinators independently logging the same group event. NHF explicitly requires this because their 1 400 local chapters create real-world scenarios where the same event is reported from multiple angles. On detection, the app surfaces a non-blocking warning with side-by-side comparison of the suspected duplicate and the current entry. The user can proceed (if the records are genuinely distinct), merge (if one is a correction), or cancel. Coordinators see a separate deduplication queue in their view for records flagged but not resolved by the submitting peer mentor.

Analysis

Business Value

Prevents inflation of Bufdir-submitted activity counts, which would constitute misrepresentation in grant applications. Also reduces coordinator administrative burden from having to manually reconcile duplicate entries at the end of each reporting period.

Implementation Notes

Check for duplicates in a Supabase RPC called before the final insert in the activity wizard. Query: same peer_mentor_id + activity_type_id + date, status not 'cancelled'. Return candidate matches to the client. Render a bottom-sheet comparison UI. If user confirms as intentional, insert with a `duplicate_reviewed: true` flag. Coordinator deduplication queue is a filtered view of activities where `duplicate_reviewed = false` and a matching record exists.

Components (207)

User Interface (3)

Service Layer (3)

Data Layer (2)

Infrastructure (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 (18)

Audit Log of All Duplicate Detection Events
medium 5 pts

As a As a Peer Mentor (Likeperson)

I want to view an audit history of all duplicate warnings that were triggered, dismissed, or resolved under my chapter

So that I can demonstrate to national administrators and Bufdir auditors that duplicate activity pairs were actively reviewed rather than silently ignored

Acceptance Criteria
  • Given a coordinator dismisses a duplicate warning by selecting 'Submit Anyway', When the activity is saved, Then a log entry is written with the coordinator ID, both activity IDs, resolution action 'PROCEED_WITH_DUPLICATE', and timestamp
  • Given a coordinator resolves a pair in the deduplication queue, When the resolution is saved, Then a log entry is written with resolution action, resolver ID, and timestamp
  • Given the coordinator opens the duplicate audit log, When they view the list, Then each entry shows a human-readable summary: date, peer mentor name (masked if sensitive), resolution action, and resolver name
  • +2 more
View Full Story →
Configure Duplicate Detection Sensitivity Thresholds
medium 5 pts

As a As a Peer Mentor (Likeperson)

I want to configure the time window and matching criteria used to classify two activities as potential duplicates

So that I can tune detection sensitivity to match my chapter's operational patterns without generating excessive false-positive warnings that slow down registration

Acceptance Criteria
  • Given the coordinator accesses duplicate detection settings, When they view the configuration screen, Then they can set the time-overlap threshold: 'exact time overlap', 'within same hour', 'within same day'
  • Given the coordinator sets a threshold, When a new activity is submitted, Then duplicate detection uses the configured window to determine if a match exists
  • Given the coordinator wishes to exclude an activity type from duplicate detection (e.g., 'group informational session'), When they toggle that type off in settings, Then submissions of that activity type bypass duplicate checks
  • +2 more
View Full Story →
Audit Log of All Duplicate Detection Events
medium 5 pts

As a As a Coordinator

I want to view an audit history of all duplicate warnings that were triggered, dismissed, or resolved under my chapter

So that I can demonstrate to national administrators and Bufdir auditors that duplicate activity pairs were actively reviewed rather than silently ignored

Acceptance Criteria
  • Given a coordinator dismisses a duplicate warning by selecting 'Submit Anyway', When the activity is saved, Then a log entry is written with the coordinator ID, both activity IDs, resolution action 'PROCEED_WITH_DUPLICATE', and timestamp
  • Given a coordinator resolves a pair in the deduplication queue, When the resolution is saved, Then a log entry is written with resolution action, resolver ID, and timestamp
  • Given the coordinator opens the duplicate audit log, When they view the list, Then each entry shows a human-readable summary: date, peer mentor name (masked if sensitive), resolution action, and resolver name
  • +2 more
View Full Story →
Configure Duplicate Detection Sensitivity Thresholds
medium 5 pts

As a As a Coordinator

I want to configure the time window and matching criteria used to classify two activities as potential duplicates

So that I can tune detection sensitivity to match my chapter's operational patterns without generating excessive false-positive warnings that slow down registration

Acceptance Criteria
  • Given the coordinator accesses duplicate detection settings, When they view the configuration screen, Then they can set the time-overlap threshold: 'exact time overlap', 'within same hour', 'within same day'
  • Given the coordinator sets a threshold, When a new activity is submitted, Then duplicate detection uses the configured window to determine if a match exists
  • Given the coordinator wishes to exclude an activity type from duplicate detection (e.g., 'group informational session'), When they toggle that type off in settings, Then submissions of that activity type bypass duplicate checks
  • +2 more
View Full Story →
Audit Log of All Duplicate Detection Events
medium 5 pts

As a As a Organization Administrator

I want to view an audit history of all duplicate warnings that were triggered, dismissed, or resolved under my chapter

So that I can demonstrate to national administrators and Bufdir auditors that duplicate activity pairs were actively reviewed rather than silently ignored

Acceptance Criteria
  • Given a coordinator dismisses a duplicate warning by selecting 'Submit Anyway', When the activity is saved, Then a log entry is written with the coordinator ID, both activity IDs, resolution action 'PROCEED_WITH_DUPLICATE', and timestamp
  • Given a coordinator resolves a pair in the deduplication queue, When the resolution is saved, Then a log entry is written with resolution action, resolver ID, and timestamp
  • Given the coordinator opens the duplicate audit log, When they view the list, Then each entry shows a human-readable summary: date, peer mentor name (masked if sensitive), resolution action, and resolver name
  • +2 more
View Full Story →
Configure Duplicate Detection Sensitivity Thresholds
medium 5 pts

As a As a Organization Administrator

I want to configure the time window and matching criteria used to classify two activities as potential duplicates

So that I can tune detection sensitivity to match my chapter's operational patterns without generating excessive false-positive warnings that slow down registration

Acceptance Criteria
  • Given the coordinator accesses duplicate detection settings, When they view the configuration screen, Then they can set the time-overlap threshold: 'exact time overlap', 'within same hour', 'within same day'
  • Given the coordinator sets a threshold, When a new activity is submitted, Then duplicate detection uses the configured window to determine if a match exists
  • Given the coordinator wishes to exclude an activity type from duplicate detection (e.g., 'group informational session'), When they toggle that type off in settings, Then submissions of that activity type bypass duplicate checks
  • +2 more
View Full Story →
Receive Real-Time Duplicate Activity Warning During Registration
high 8 pts

As a As a Peer Mentor (Likeperson)

I want to be warned immediately when I attempt to register an activity that appears to duplicate one already registered by another coordinator or peer mentor

So that I can avoid submitting redundant records that would inflate Bufdir reporting figures and create administrative cleanup work

Acceptance Criteria
  • Given a coordinator submits an activity registration, When the system detects a record with the same participant and overlapping date/time window and same activity type, Then a duplicate-warning-bottom-sheet appears before the record is saved
  • Given the warning dialog is shown, When the coordinator views it, Then both the new activity and the conflicting existing activity are displayed side by side in a duplicate-comparison-panel with date, time, type, and registrant
  • Given the warning dialog is shown, When the coordinator selects 'Cancel', Then no record is saved and the wizard returns to the previous step
  • +2 more
View Full Story →
Review and Resolve Deduplication Queue
high 8 pts

As a As a Peer Mentor (Likeperson)

I want to access a dedicated deduplication queue screen that lists all suspected duplicate activity pairs requiring my review

So that I can systematically work through unresolved conflicts rather than discovering them only at export time or when Bufdir questions the data

Acceptance Criteria
  • Given the coordinator opens the deduplication queue screen, When there are unresolved duplicate pairs, Then each pair is listed with participant name, activity type, date, and the names of both registrants
  • Given the coordinator taps a pair in the queue, When they expand it, Then a full duplicate-comparison-panel is shown with all fields of both records visible
  • Given the coordinator reviews a pair, When they choose 'Mark as Distinct', Then both records remain, the duplicate flag is cleared, and the pair is removed from the queue
  • +3 more
View Full Story →
Detect Duplicates in Proxy and Bulk Registrations
high 8 pts

As a As a Peer Mentor (Likeperson)

I want the duplicate check to run automatically when I register activities on behalf of one or more peer mentors using proxy or bulk registration

So that I do not accidentally create duplicate records while performing batch registrations for recurring group activities

Acceptance Criteria
  • Given a coordinator submits a proxy registration on behalf of a peer mentor, When the submitted activity matches an existing record for that peer mentor, Then a duplicate-warning-dialog appears with the same comparison interface as self-registration
  • Given a coordinator submits a bulk registration for 10 peer mentors, When 3 of the 10 have conflicting existing records, Then a consolidated duplicate summary shows all 3 conflicts grouped in one review screen before the batch is saved
  • Given the consolidated duplicate summary is shown, When the coordinator resolves each conflict (mark distinct or skip), Then only the non-conflicting records plus the explicitly approved duplicates are saved
  • +2 more
View Full Story →
Detect Duplicates Across Chapter Boundaries
high 13 pts

As a As a Peer Mentor (Likeperson)

I want the duplicate detection system to check for matching activities registered by coordinators in other chapters that a shared peer mentor belongs to

So that I can prevent the same peer mentor's single activity from being credited to multiple chapters simultaneously, which would violate Bufdir reporting rules

Acceptance Criteria
  • Given a peer mentor belongs to two chapters, When a coordinator in Chapter B registers an activity that matches an existing activity logged under Chapter A for the same peer mentor, Then a duplicate warning is triggered referencing the Chapter A record
  • Given a cross-chapter duplicate warning is displayed, When the coordinator views it, Then the warning clearly states which chapter the conflicting record belongs to and who registered it
  • Given a peer mentor is added to a second chapter, When the system processes the new chapter affiliation, Then a retroactive duplicate check runs against the peer mentor's existing activity history and flags any cross-chapter conflicts into the deduplication queue
  • +2 more
View Full Story →
Receive Real-Time Duplicate Activity Warning During Registration
high 8 pts

As a As a Coordinator

I want to be warned immediately when I attempt to register an activity that appears to duplicate one already registered by another coordinator or peer mentor

So that I can avoid submitting redundant records that would inflate Bufdir reporting figures and create administrative cleanup work

Acceptance Criteria
  • Given a coordinator submits an activity registration, When the system detects a record with the same participant and overlapping date/time window and same activity type, Then a duplicate-warning-bottom-sheet appears before the record is saved
  • Given the warning dialog is shown, When the coordinator views it, Then both the new activity and the conflicting existing activity are displayed side by side in a duplicate-comparison-panel with date, time, type, and registrant
  • Given the warning dialog is shown, When the coordinator selects 'Cancel', Then no record is saved and the wizard returns to the previous step
  • +2 more
View Full Story →
Review and Resolve Deduplication Queue
high 8 pts

As a As a Coordinator

I want to access a dedicated deduplication queue screen that lists all suspected duplicate activity pairs requiring my review

So that I can systematically work through unresolved conflicts rather than discovering them only at export time or when Bufdir questions the data

Acceptance Criteria
  • Given the coordinator opens the deduplication queue screen, When there are unresolved duplicate pairs, Then each pair is listed with participant name, activity type, date, and the names of both registrants
  • Given the coordinator taps a pair in the queue, When they expand it, Then a full duplicate-comparison-panel is shown with all fields of both records visible
  • Given the coordinator reviews a pair, When they choose 'Mark as Distinct', Then both records remain, the duplicate flag is cleared, and the pair is removed from the queue
  • +3 more
View Full Story →
Detect Duplicates in Proxy and Bulk Registrations
high 8 pts

As a As a Coordinator

I want the duplicate check to run automatically when I register activities on behalf of one or more peer mentors using proxy or bulk registration

So that I do not accidentally create duplicate records while performing batch registrations for recurring group activities

Acceptance Criteria
  • Given a coordinator submits a proxy registration on behalf of a peer mentor, When the submitted activity matches an existing record for that peer mentor, Then a duplicate-warning-dialog appears with the same comparison interface as self-registration
  • Given a coordinator submits a bulk registration for 10 peer mentors, When 3 of the 10 have conflicting existing records, Then a consolidated duplicate summary shows all 3 conflicts grouped in one review screen before the batch is saved
  • Given the consolidated duplicate summary is shown, When the coordinator resolves each conflict (mark distinct or skip), Then only the non-conflicting records plus the explicitly approved duplicates are saved
  • +2 more
View Full Story →
Detect Duplicates Across Chapter Boundaries
high 13 pts

As a As a Coordinator

I want the duplicate detection system to check for matching activities registered by coordinators in other chapters that a shared peer mentor belongs to

So that I can prevent the same peer mentor's single activity from being credited to multiple chapters simultaneously, which would violate Bufdir reporting rules

Acceptance Criteria
  • Given a peer mentor belongs to two chapters, When a coordinator in Chapter B registers an activity that matches an existing activity logged under Chapter A for the same peer mentor, Then a duplicate warning is triggered referencing the Chapter A record
  • Given a cross-chapter duplicate warning is displayed, When the coordinator views it, Then the warning clearly states which chapter the conflicting record belongs to and who registered it
  • Given a peer mentor is added to a second chapter, When the system processes the new chapter affiliation, Then a retroactive duplicate check runs against the peer mentor's existing activity history and flags any cross-chapter conflicts into the deduplication queue
  • +2 more
View Full Story →
Receive Real-Time Duplicate Activity Warning During Registration
high 8 pts

As a As a Organization Administrator

I want to be warned immediately when I attempt to register an activity that appears to duplicate one already registered by another coordinator or peer mentor

So that I can avoid submitting redundant records that would inflate Bufdir reporting figures and create administrative cleanup work

Acceptance Criteria
  • Given a coordinator submits an activity registration, When the system detects a record with the same participant and overlapping date/time window and same activity type, Then a duplicate-warning-bottom-sheet appears before the record is saved
  • Given the warning dialog is shown, When the coordinator views it, Then both the new activity and the conflicting existing activity are displayed side by side in a duplicate-comparison-panel with date, time, type, and registrant
  • Given the warning dialog is shown, When the coordinator selects 'Cancel', Then no record is saved and the wizard returns to the previous step
  • +2 more
View Full Story →
Review and Resolve Deduplication Queue
high 8 pts

As a As a Organization Administrator

I want to access a dedicated deduplication queue screen that lists all suspected duplicate activity pairs requiring my review

So that I can systematically work through unresolved conflicts rather than discovering them only at export time or when Bufdir questions the data

Acceptance Criteria
  • Given the coordinator opens the deduplication queue screen, When there are unresolved duplicate pairs, Then each pair is listed with participant name, activity type, date, and the names of both registrants
  • Given the coordinator taps a pair in the queue, When they expand it, Then a full duplicate-comparison-panel is shown with all fields of both records visible
  • Given the coordinator reviews a pair, When they choose 'Mark as Distinct', Then both records remain, the duplicate flag is cleared, and the pair is removed from the queue
  • +3 more
View Full Story →
Detect Duplicates in Proxy and Bulk Registrations
high 8 pts

As a As a Organization Administrator

I want the duplicate check to run automatically when I register activities on behalf of one or more peer mentors using proxy or bulk registration

So that I do not accidentally create duplicate records while performing batch registrations for recurring group activities

Acceptance Criteria
  • Given a coordinator submits a proxy registration on behalf of a peer mentor, When the submitted activity matches an existing record for that peer mentor, Then a duplicate-warning-dialog appears with the same comparison interface as self-registration
  • Given a coordinator submits a bulk registration for 10 peer mentors, When 3 of the 10 have conflicting existing records, Then a consolidated duplicate summary shows all 3 conflicts grouped in one review screen before the batch is saved
  • Given the consolidated duplicate summary is shown, When the coordinator resolves each conflict (mark distinct or skip), Then only the non-conflicting records plus the explicitly approved duplicates are saved
  • +2 more
View Full Story →
Detect Duplicates Across Chapter Boundaries
high 13 pts

As a As a Organization Administrator

I want the duplicate detection system to check for matching activities registered by coordinators in other chapters that a shared peer mentor belongs to

So that I can prevent the same peer mentor's single activity from being credited to multiple chapters simultaneously, which would violate Bufdir reporting rules

Acceptance Criteria
  • Given a peer mentor belongs to two chapters, When a coordinator in Chapter B registers an activity that matches an existing activity logged under Chapter A for the same peer mentor, Then a duplicate warning is triggered referencing the Chapter A record
  • Given a cross-chapter duplicate warning is displayed, When the coordinator views it, Then the warning clearly states which chapter the conflicting record belongs to and who registered it
  • Given a peer mentor is added to a second chapter, When the system processes the new chapter affiliation, Then a retroactive duplicate check runs against the peer mentor's existing activity history and flags any cross-chapter conflicts into the deduplication queue
  • +2 more
View Full Story →