high complexity extracted Organization Management Confidence: 100%
3
Components
18
Shared
0
User Stories
Yes
Analyzed

Description

Provides Org Admins with a UI to enable or disable optional platform modules on a per-organization basis. Each toggleable module corresponds to an area ID in the platform taxonomy (e.g. expense-reimbursement, encrypted-assignments, certification-training). The toggle state is persisted as tenant configuration and served to all clients via the bootstrap response. Clients render only the navigation items, screens, and flows for enabled modules; disabling a module removes its UI entirely without requiring a client release. Module dependencies are declared in the registry and enforced automatically.

Sources & reasoning

The module-toggle system is the central architectural decision of the entire platform (lines 232-248). It is listed as an always-on admin-organization capability (line 241) and is required from day one to support the four organizations with divergent needs. Assigned MVP because no meaningful multi-tenant operation is possible without it.

  • docs/source/likeperson.md · line 232-248
    Not every organization needs every capability... the platform treats each functional area as an independently toggleable module... Backend is the source of truth... Clients load generically.
  • docs/source/likeperson.md · line 240-241
    `admin-organization` is always-on because it hosts the Feature Toggles UI itself - disabling it would remove the only place toggles can be re-enabled (circular dependency).

Analysis

Business Value

Feature Toggles are the architectural mechanism that makes one codebase serve four organizations with materially different needs. Without them, the only alternatives are separate builds per organization (expensive, fragile) or always shipping every feature to every org (cluttered UX, compliance risk for features orgs never consented to). The toggle system directly enables the incremental rollout strategy: organizations can start with core modules and adopt optional ones on their own timeline. It also supports the principle that new tenants onboard by picking modules, never by shipping code - critical for scaling beyond the initial four organizations without linear engineering cost growth.

Implementation Notes

Toggle state is persisted in the module_toggles table (one-to-many from organizations). The bootstrap API endpoint aggregates the enabled module set for the current user's organization and returns it as part of the session response. Every backend endpoint belonging to an optional module checks the tenant's enabled set before executing, preventing API-level bypass. The Flutter module registry assembles navigation tabs, home widgets, and deep links at runtime from the enabled set returned at login; no compile-time switching. The admin portal toggle UI is itself part of admin-organization, which is always-on to prevent the circular dependency of disabling the only surface that re-enables modules. Dependency declarations between modules are stored in the registry and enforced at toggle time with visible warnings in the admin UI.

Quality Assurance

Organization Administrator (primary) · Global Administrator (primary, requires active support access grant)
2
Scenarios
11
UAT Steps
27
A11y Annotations
3
Role Boundaries
Organization Administrator

Organization Administrator

Quick UAT

  1. Logg inn i Admin-portalen som Organisasjonsadministrator. Naviger til Organisasjonsinnstillinger → Funksjonsmoduler.
  2. Bekreft at moduloversikten viser alle tilgjengelige moduler med nåværende på/av-status.
  3. Finn en deaktivert modul (f.eks. Reiserefusjon) og aktiver den ved ĂĄ trykke pĂĄ bryteren.
  4. Observer om systemet viser en avhengighetsmelding (dersom modulen krever en annen modul). Bekreft aktivering.
  5. Bekreft at modulen nĂĄ vises som aktiv og at endringen er umiddelbart synlig uten sideoppdatering.
  6. Deaktiver en aktiv valgfri modul og bekreft at den forsvinner fra navigasjonen i mobilappen ved neste oppstart.

Quick UAT — Accessibility

  1. Logg inn i Admin-portalen som Organisasjonsadministrator. Naviger til Organisasjonsinnstillinger → Funksjonsmoduler.
    • Screen reader Sideoverskrift 'Funksjonsmoduler' annonseres ved sideinnlasting; navigasjonslenker leses opp med full tekst.
    • Keyboard / focus Tab-rekkefølge: sidemeny → seksjonstittel → første modul-rad. Enter aktiverer lenker.
  2. Bekreft at moduloversikten viser alle tilgjengelige moduler med nåværende på/av-status.
    • Screen reader Skjermleser leser opp modulnavn og status ('aktivert' / 'deaktivert') for hvert listeelement.
    • Zoom Modulrader er lesbare og brukbare ved 200 % zoom uten horisontal scrolling.
    • Contrast Statusindikator formidler ikke status utelukkende via farge — tekst eller ikon-label er inkludert.
  3. Finn en deaktivert modul (f.eks. Reiserefusjon) og aktiver den ved ĂĄ trykke pĂĄ bryteren.
    • Screen reader Bryter annonseres som 'Reiserefusjon, av, bryter' og endres til 'Reiserefusjon, pĂĄ, bryter' etter aktivering.
    • Focus visibility Synlig fokusring pĂĄ bryterkontrollen; bryter er merket med modulnavnet som tilgjengelig navn.
    • Touch target Bryteren er minimum 24Ă—24 CSS-piksler.
  4. Observer om systemet viser en avhengighetsmelding (dersom modulen krever en annen modul). Bekreft aktivering.
    • Screen reader Modal eller varselmelding annonseres automatisk ved fremvisning ('Avhengighetsvarsel: aktivering krever...').
    • Focus visibility Fokus flyttes til bekreftelsesknappen i dialogen; Escape lukker uten endring.
    • Live region 'Modul aktivert. Avhengige moduler er ogsĂĄ aktivert.'
  5. Bekreft at modulen nĂĄ vises som aktiv og at endringen er umiddelbart synlig uten sideoppdatering.
    • Live region 'Reiserefusjon er nĂĄ aktivert for organisasjonen.'
    • Contrast Aktiv-tilstand er ikke utelukkende signalisert med grønn farge — tekstetikett eller ikon er inkludert.
  6. Deaktiver en aktiv valgfri modul og bekreft at den forsvinner fra navigasjonen i mobilappen ved neste oppstart.
    • Screen reader Bekreftelsesdialog annonseres; bekreft-knapp er første fokusbare element.
    • Live region 'Modul deaktivert. Endringen trer i kraft ved neste innlasting for mobilbrukere.'
Global Administrator

Global Administrator

Quick UAT

  1. Logg inn i Admin-portalen som Global Administrator. Bekreft at ingen organisasjonsdata er synlig uten aktiv støttetilgangstillatelse.
  2. Naviger til en organisasjon som har gitt Global Admin tidsbegrenset støttetilgang. Bekreft at tilgangen er aktiv og ikke utløpt.
  3. Åpne Organisasjonsinnstillinger → Funksjonsmoduler for den bevilgede organisasjonen.
  4. Observer gjeldende modulstatus uten å gjøre endringer. Bekreft at alle moduler vises korrekt.
  5. Verifiser at hendelsen er registrert i organisasjonens revisjonslogg med Global Admins identitet og tidsstempel.

Quick UAT — Accessibility

  1. Logg inn i Admin-portalen som Global Administrator. Bekreft at ingen organisasjonsdata er synlig uten aktiv støttetilgangstillatelse.
    • Screen reader Startskjerm annonseres som 'Global Administrator-dashbord'; ingen org-spesifikke data er tilgjengelig i DOM uten støttetilgang.
    • Keyboard / focus Tab-rekkefølge starter ved primærnavigasjon; ingen org-data er nĂĄbar uten støttegrant.
  2. Naviger til en organisasjon som har gitt Global Admin tidsbegrenset støttetilgang. Bekreft at tilgangen er aktiv og ikke utløpt.
    • Screen reader Organisasjonslisten leser opp navn og støttetilgangsstatus ('støttetilgang aktiv til {dato}').
    • Focus visibility Fokus plasseres pĂĄ første element i listen etter sidelasting; støttestatusindikator er tekstmerket.
    • Contrast Utløpsdato og aktiv-status er ikke utelukkende formidlet via farge.
  3. Åpne Organisasjonsinnstillinger → Funksjonsmoduler for den bevilgede organisasjonen.
    • Screen reader Sideoverskrift annonseres med organisasjonsnavnet for ĂĄ tydeliggjøre kontekst ('Funksjonsmoduler — [Org]').
    • Keyboard / focus Lenker i innstillingsmenyen nĂĄs via Tab; Enter ĂĄpner funksjonsmodul-siden.
  4. Observer gjeldende modulstatus uten å gjøre endringer. Bekreft at alle moduler vises korrekt.
    • Screen reader Hvert modulnavn og tilhørende status leses opp sekvensiell; ingen skjulte elementer.
    • Zoom Hele moduloversikten er lesbar ved 200 % zoom uten avkuttet innhold.
    • Contrast Aktiv/inaktiv-status er formidlet med tekst i tillegg til visuell indikator.
  5. Verifiser at hendelsen er registrert i organisasjonens revisjonslogg med Global Admins identitet og tidsstempel.
    • Screen reader Tabellen annonseres med kolonnehoder ('Bruker', 'Hendelse', 'Tidsstempel') ved navigering.
    • Keyboard / focus Revisjonslogg-side nĂĄs via Tab fra menyen; loggoppføringer er tilgjengelige som tabellrader med korrekte kolonneoverskrifter.

Role Boundaries

3 role(s) must NOT access this feature
  • Peer Mentor

    Skjermen finnes ikke i mobilappens navigasjon; direkte API-kall mot toggle-endepunkt returnerer 403.

  • Coordinator

    Skjermen finnes ikke i mobilappens navigasjon; direkte API-kall mot toggle-endepunkt returnerer 403.

  • Prospective Organization Representative

    Ingen innlogging i Admin-portalen; siden er ikke tilgjengelig fra salgsnettstedet.

Expected End State

  • Organization Administrator

    Valgte moduler er aktivert eller deaktivert for organisasjonen. Bootstrap-cachen er ugyldiggjort, og mobilappen laster inn oppdatert modulset ved neste oppstart. Endringen er registrert i revisjonsloggen.

  • Global Administrator

    Global Administrator har observert gjeldende modulkonfigurasjon innen rammen av aktiv støttetilgangsgrant. Tilgangsøkten er loggført i organisasjonens revisjonslogg med identitet og tidsstempel.

User Stories

No user stories have been generated for this feature yet.