high complexity extracted Organization Configuration & Multi-tenancy Confidence: 100%
16
Components
198
Shared
7
User Stories
Yes
Analyzed

Description

Each organization connects to different external systems for accounting and member management: Blindeforbundet uses Xledger for accounting with API integration needs; HLF integrates with a Dynamics-based portal ('min side') that must not overlap with the app's functionality; NHF references Cornerstone and Consio. This feature provides a per-organization configuration layer for external integration endpoints, API credentials (stored as Supabase secrets), field mappings, and sync schedules. The configuration is managed through the admin portal and determines how the app formats export payloads, which fields to include in API calls, and how to handle authentication with the external system. It also covers the Bufdir reporting export format, which while common to all organizations may require per-org field mappings to match their specific grant agreements and reporting templates.

Analysis

Business Value

Integration with existing accounting and member systems is a hard prerequisite for replacing manual Excel/Word workflows, particularly for reimbursement processing (HLF, Blindeforbundet) and Bufdir reporting (all organizations). Without this configuration layer, each integration would require a separate code deployment per organization, making the platform unscalable.

Implementation Notes

Store integration configs in an `organization_integrations` table with `integration_type` (xledger, dynamics, cornerstone, consio, bufdir), encrypted credential fields (use Supabase Vault), and a JSONB `field_mappings` column. Implement a REST API adapter pattern in the backend (Supabase Edge Functions) so each integration type has a standard interface. For HLF's Dynamics coordination specifically, include an 'excluded features' config to prevent the app from duplicating portal functionality — surfaced as a subset of the feature flags system.

Components (214)

User Interface (6)

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

Configure Automatic Sync Schedule for Integration
medium 5 pts

As a As an Organization Administrator

I want to define when and how often data is automatically synchronized to external systems

So that our accounting team receives timely data exports without requiring manual intervention each time

Acceptance Criteria
  • Given I am editing an integration, When I navigate to 'Sync Schedule', Then I see options for Manual Only, Daily, Weekly, Monthly, and Custom schedule
  • Given I select Daily sync, When I set the time to 02:00 and save, Then the system schedules a nightly sync job and displays the next scheduled run timestamp
  • Given I select Custom schedule, When I enter a cron expression, Then the system validates the expression syntax and shows a human-readable description of when syncs will occur
  • +3 more
View Full Story →
Control Which Features Are Included in External Sync
medium 5 pts

As a As an Organization Administrator

I want to specify which data categories and feature areas are included or excluded from external system synchronization

So that only relevant, approved data reaches our external systems and sensitive or incomplete records are not inadvertently exported

Acceptance Criteria
  • Given I am configuring an integration, When I open 'Included Data', Then I see a checklist of data categories: expense claims, mileage claims, driver honorariums, activity logs, with toggles for each
  • Given I enable 'Expense Claims', When I configure the filter, Then I can specify that only claims with status 'Approved' are exported, excluding 'Pending' and 'Rejected'
  • Given I set a date range filter, When I run a sync, Then only records created or approved within the specified date range are included in the export
  • +3 more
View Full Story →
Map Data Fields Between App and External System
high 8 pts

As a As an Organization Administrator

I want to define how data fields in the app map to fields in our external accounting or reporting system

So that exported records arrive in the correct format and columns expected by our accounting team without requiring manual transformation

Acceptance Criteria
  • Given an active integration exists, When I open the Field Mapping Editor, Then I see two columns: app fields on the left and external system fields on the right, with drag-and-drop or dropdown matching
  • Given I am mapping a date field, When I select the external system's date field, Then I can choose the output format (ISO 8601, DD.MM.YYYY, epoch) required by the target system
  • Given I have created a mapping, When I click 'Preview Mapping' with sample data, Then the system shows 3-5 example records transformed according to my mapping so I can visually verify correctness
  • +3 more
View Full Story →
Monitor Integration Health and Diagnose Sync Errors
high 8 pts

As a As an Organization Administrator

I want to view real-time integration health status, recent sync history, and detailed error logs

So that I can proactively detect and resolve integration failures before they impact payroll or accounting deadlines

Acceptance Criteria
  • Given I open the Integration Configuration Dashboard, When integrations are displayed, Then each shows a status indicator: green (last sync successful), yellow (last sync had warnings), red (last sync failed or no sync in 48h)
  • Given an integration is in error state, When I click on it, Then I see the error message returned by the external system, the timestamp of failure, and a list of records that failed to export
  • Given I view a failed record, When I expand the error detail, Then I see the specific validation message from the external system (e.g., 'Invalid cost center code: 9999') and the field that caused the failure
  • +3 more
View Full Story →
Configure External Accounting System Integration
high 13 pts

As a As an Organization Administrator

I want to configure a connection to our accounting system (Xledger or Dynamics) through a guided setup wizard

So that expense claims and reimbursements are automatically exported to our accounting platform without manual data entry

Acceptance Criteria
  • Given I am an org admin navigating to Settings, When I select 'External Integrations', Then I see a dashboard listing available integration types and their current status (not configured, active, error)
  • Given I click 'Add Integration', When the setup wizard opens, Then I can select from supported integration types: Xledger, Dynamics, or Generic REST API
  • Given I have selected Xledger as my integration type, When I enter API credentials and click 'Test Connection', Then the system validates the credentials against the Xledger sandbox/production endpoint and shows a success or failure message within 10 seconds
  • +3 more
View Full Story →
Securely Store and Rotate Integration API Credentials
critical 8 pts

As a As an Organization Administrator

I want to securely store, view the status of, and rotate API credentials for external system integrations

So that our integration credentials remain secure, are not exposed in plain text, and can be updated when keys expire or are compromised without service interruption

Acceptance Criteria
  • Given I enter API credentials during integration setup, When I save them, Then the credentials are stored encrypted and only a masked representation (e.g., '••••••••abcd') is shown in the UI
  • Given I need to update credentials due to a key rotation, When I click 'Update Credentials', Then I can enter new credentials without deleting the integration configuration or sync history
  • Given new credentials are entered, When I click 'Validate and Save', Then the system tests the new credentials against the live endpoint before replacing the old credentials, ensuring no downtime
  • +3 more
View Full Story →
Prevent Duplicate Records from Being Exported Twice
critical 8 pts

As a As an Organization Administrator

I want the system to track which records have already been exported and prevent the same record from being sent to the external system more than once

So that our accounting system does not contain duplicate expense entries that would require manual correction and could result in double payments

Acceptance Criteria
  • Given a record was successfully exported in a previous sync, When the next scheduled sync runs, Then that record is not included in the new export batch
  • Given an admin clicks 'Sync Now' after a partial failure, When the sync runs, Then only records not previously exported successfully are included, not the entire date range
  • Given an admin needs to re-export a specific record due to a system error on the accounting side, When they click 'Force Re-export', Then they must enter a reason and confirm the action, and the re-export is logged in the audit trail
  • +3 more
View Full Story →