critical priority high complexity frontend pending frontend specialist Tier 2

Acceptance Criteria

Wizard renders a linear step progress indicator showing all steps with current step highlighted and completed steps visually distinct
Forward navigation button is disabled until all required fields in the current step pass validation
Back navigation returns user to previous step preserving all previously entered values without clearing state
Each step panel (Credential Management Form, Field Mapping Editor, Sync Schedule Configuration) is correctly embedded at its designated step index
Final review-and-confirm screen displays a read-only summary of all configured values across all steps before submission
Wizard state persists within session if user navigates away and returns (Riverpod StateNotifier or equivalent)
Wizard is fully accessible: step indicator labels readable by screen reader, all interactive elements have semantic labels, focus advances correctly on step change
Wizard does not allow submission if any step contains validation errors
On successful completion, wizard emits a structured integration config payload consumed by the Integration Config Service
Loading state is displayed during async operations (credential test, final save) with appropriate skeleton or spinner
Error from any embedded panel is surfaced in context without leaving the wizard
Wizard layout is responsive and usable at standard Flutter admin breakpoints

Technical Requirements

frameworks
Flutter
BLoC
Riverpod
apis
Integration Config Service REST API (POST /integrations, PUT /integrations/:id)
data models
activity_type
performance requirements
Step transitions must complete within 150ms (no async blocking)
Wizard shell must not re-render embedded child panels unnecessarily on step change
State reconstruction from Riverpod provider must complete before first frame paint
security requirements
Wizard state must not persist credential values to device storage
Final payload must be transmitted over TLS via Supabase Edge Function — never directly from client to external system
Admin-only route guarded by role-based access control check before rendering wizard
ui components
StepProgressIndicator widget (custom)
WizardShell scaffold widget
WizardNavBar (Back / Next / Submit buttons)
ReviewConfirmScreen
CredentialManagementForm (embedded, from task-002)
FieldMappingEditor (embedded, from task-003)
SyncScheduleConfigPanel (embedded, from task-004)

Execution Context

Execution Tier
Tier 2

Tier 2 - 518 tasks

Can start after Tier 1 completes

Integration Task

Handles integration between different epics or system components. Requires coordination across multiple development streams.

Implementation Notes

Model wizard state as an immutable Riverpod StateNotifier with a WizardState class holding: currentStep (int), stepData (Map), validationErrors (Map>), isSubmitting (bool). Embed child panels as const-constructible widgets receiving their data slice from the wizard state via scoped providers — avoid prop drilling. Use IndexedStack or PageView with physics: NeverScrollableScrollPhysics() for step rendering so all panels stay mounted and preserve internal state. The review screen should reconstruct its display from WizardState.stepData without calling child panel widgets.

Guard wizard route with a role check (admin/coordinator role only). Step progress indicator should use design token colors for active/completed/pending states — do not hardcode hex values.

Testing Requirements

Unit tests: WizardState BLoC/Riverpod provider — test forward gating logic, back navigation state preservation, step index bounds. Widget tests: render each step, assert forward button disabled when required fields empty, assert back button absent on step 0. Integration test: complete full wizard flow from step 1 to review screen, assert summary contains all entered values. Accessibility test: verify screen reader traversal order with flutter_test semantics finder.

Coverage target: 85% on wizard shell and state logic.

Component
Integration Setup Wizard
ui high
Epic Risks (4)
medium impact high prob technical

The multi-step Integration Setup Wizard must render different credential fields, field mapping targets, and validation rules depending on the selected integration type. If the type-specific branching logic is implemented as conditional widget trees rather than driven by the Integration Type Registry, the wizard becomes unmaintainable and adding new integration types requires UI code changes.

Mitigation & Contingency

Mitigation: Design the wizard to be metadata-driven from the Integration Type Registry from day one. Credential form fields, required field validation, and mapping target lists are all fetched from the registry, not hardcoded in widgets. Implement one integration type end-to-end first (Xledger) to validate the pattern before building the others.

Contingency: If the metadata-driven approach proves too complex for the initial delivery, implement Xledger and Dynamics as hardcoded wizard variants and create a registry-driven refactor as a follow-up technical debt ticket with a fixed deadline.

medium impact medium prob dependency

The Excluded Features Configuration Panel must wire directly into the feature flag system to suppress HLF app features. If the feature flag system does not yet expose a writable admin interface, this panel cannot save its configuration, blocking the HLF-specific acceptance criteria.

Mitigation & Contingency

Mitigation: Verify that the Organization-scoped Feature Flags feature (a declared dependency) exposes a Dart API for programmatic flag writes before starting this panel. Coordinate with the feature flags team to ensure the write API is available. If needed, schedule this panel as the last item in the epic.

Contingency: If the feature flag write API is unavailable at implementation time, store excluded features in the integration's JSONB settings column and wire them into a local feature flag provider that merges database state with the standard flag system at app startup.

high impact medium prob scope

The Field Mapping Editor's usability for non-technical org admins is high-risk. If the visual mapping interface is confusing, admins will configure incorrect mappings that cause silent data corruption in accounting exports — a serious financial risk discovered only at month-end reconciliation.

Mitigation & Contingency

Mitigation: Conduct usability testing with at least one admin user from Blindeforbundet on the field mapping editor prototype before full implementation. Provide descriptive labels and sample data values for all fields. Add a 'test mapping' preview that shows a transformed sample record before saving.

Contingency: If usability testing reveals the visual editor is too complex, implement a simplified list-based mapping editor (select app field → select external field, one row at a time) as a fallback, deferring the drag-and-drop visual editor to a future iteration.

medium impact medium prob technical

The Credential Management Form's masked fields and connection-test flow may conflict with screen reader requirements — VoiceOver and JAWS must be able to navigate the form, understand which fields are already configured, and receive feedback on connection test results without exposing credential values in accessible text.

Mitigation & Contingency

Mitigation: Design accessible semantics labels for masked fields (e.g., 'API key: configured, last 4 characters: abcd') from the start. Use Flutter's Semantics widget to provide screen-reader-specific text that differs from visual display. Test with VoiceOver on iOS and TalkBack on Android during development, not only at QA.

Contingency: If accessibility conflicts with security requirements for the credential form, implement a separate 'accessibility mode' flow where credential configuration is done through a separate confirmation step that provides more explicit semantic feedback without risk of value exposure.