# Cross-system handoff map

These are workflow boundaries and design/continuity recommendations, not implemented links. Only `explicit-design-handoff` is a direct retained-system instruction from the reviewed design. Other bridges depend on rollout, owner/retirement decisions, object mapping and authorization. Source-backed route patterns are not verified production URLs.

## Link contract

- Resolve legacy product explicitly. **Online format is not BSF Online product identity.**
- Independently authenticate/authorize the target action; never transport role grants in URLs. Match business person, child, class, group, study/year and location identities rather than assuming shared IDs.
- Distinguish shared `locationId` from class-meeting association `classLocationId`. Do not join facilities by address alone.
- Use supported target routes/parameters only. No production origin, greenfield runtime route or generic `returnUrl` was established here.
- Prefer a separate tab until a supported return contract is verified. This preserves the visible source page, not shared-session isolation; revalidate role/scope and refresh state on return.
- New-only fellowships or group-date overrides may lack an old attendance `meetingId`. Define event-type eligibility/calendar ownership before routing attendance.

## Boundaries

| ID | Direction | Workflow | Basis | Disposition |
| --- | --- | --- | --- | --- |
| H01 | new-to-legacy | Record attendance | explicit-design-handoff | Required by the reviewed design for its stated class/classroom attendance contexts; exact destination contract is unresolved. |
| H02 | new-to-legacy | Class finance and HQ processing | navigation-without-native-interior | Continuity candidate if these finance workflows remain supported. |
| H03 | new-to-legacy | Give and complete a payment | navigation-without-native-interior | Continuity candidate until a replacement payment flow is delivered. |
| H04 | new-to-legacy | Resource library and home-training materials | explicit-not-M1-plus-partial-design | M1 continuity candidate; final owner depends on actual rollout, not Ready for dev. |
| H05 | new-to-legacy | Legacy lesson work, saved answers and personal scribble | phase-and-persistence-parity | Conditional bridge until rollout and personal-work ownership/migration are verified. |
| H06 | new-to-legacy | Join-request processing, next-study registration and child permission | native-workflow-not-established | Continuity candidate for retained registration/consent workflows. |
| H07 | new-to-legacy | Child protection and volunteer certification | native-workflow-not-established | Continuity candidate; protect the action-level scope and certification state. |
| H08 | new-to-legacy | Leadership applications and recommendations | native-workflow-not-established | Continuity candidate for retained leadership workflow. |
| H09 | new-to-legacy | Leader preparation banks | native-workflow-not-established | Owner decision: bridge if retained, otherwise explicitly retire/rebuild. |
| H10 | new-to-legacy | Online training and leader groups | role-product-scope-unresolved | Conditional continuity/ownership decision pending product and role mapping. |
| H11 | new-to-legacy | Reports, runtime viewers and exports | navigation-without-native-interior | Continuity candidate; retain unknown report coverage outside exclusive-set claims. |
| H12 | new-to-legacy | Curriculum, publishing and lecture upload | native-workflow-not-established | Continuity candidate; M1 Resources exclusion also applies. |
| H13 | new-to-legacy | Study-year and standard-calendar administration | administrative-parity-unresolved | Conditional bridge until the admin owner and master-calendar parity are verified. |
| H14 | new-to-legacy | Targeted alerts and operational announcements | native-authoring-not-designed | Continuity candidate if old authoring tools remain the owner. |
| H15 | new-to-legacy | Staff account recovery and PII operations | staff-only-scope-boundary | Staff-only continuity candidate; never an automatic end-user fallback. |
| H16 | new-to-legacy | Public class/group discovery and joining | native-discovery-flow-not-established | Continuity candidate until public discovery/join ownership is resolved. |
| H17 | new-to-legacy | Online group leaving and buddy finding | lifecycle-scope-not-established | Conditional continuity or explicit retirement decision. |
| H18 | legacy-to-new | Use unified cross-object search | new-only-delta | Reverse-link recommendation only after real delivery and authorization validation. |
| H19 | legacy-to-new | Manage person-linked attachments | new-only-delta | Reverse-link recommendation only after real delivery and object/role mapping. |
| H20 | new-to-external-owner | Open facility/FUA documents in LMDS | explicit-external-owner-parity-unresolved | Resolve LMDS ownership, existing capabilities, access and supported links before classifying novelty or cutover. |
| H21 | legacy-to-new | Create a group fellowship with selected calendar audiences | new-only-delta | Reverse-link recommendation only after real delivery and calendar ownership resolution. |
| H22 | new-to-legacy | Meeting polls and activation | native-workflow-not-designed | Continuity/retirement decision for retained polling; only supported existing-meeting targets. |
| H23 | new-to-legacy | Personnel and church/location change requests | request-versus-direct-edit-ownership | Conditional bridge if the request/approval operating process is retained; decide whether new authorized direct editing replaces it. |
| H24 | new-to-legacy | Own-account security and phone MFA | self-service-identity-owner-unresolved | Conditional bridge after resolving actual self-service/IdP ownership and delivered replacement coverage. |
| H25 | new-to-legacy | Existing support, ticket and contextual chat handoff | support-owner-and-context-unresolved | Conditional continuity/owner decision if the support workflow is retained; resolve provider and new entry policy. |

<a id="h01"></a>
### H01 — Record attendance

**Entry / trigger:** Calendar meeting details > Take Attendance; Classroom Detail > Attendance. Group tab destination remains unresolved.

**Audience:** Actors satisfying the exact legacy attendance rules; viewer role labels do not grant recording access.

**Required context:** legacy product identity, classId, groupId, meetingId, study/year, meeting date

**Risk / parity:** Online meeting format does not identify BSF Online product. Resolve product and valid meeting identity; new-only fellowship/group-date overrides may have no matching legacy attendance meeting. Legacy future-date, editability and membership-date constraints still apply.

**Disposition:** Required by the reviewed design for its stated class/classroom attendance contexts; exact destination contract is unresolved.

**New design:** [NW-009](FIGMA-APP-MAP.md#nw-009); [NG-006](FIGMA-APP-MAP.md#ng-006); [NG-013](FIGMA-APP-MAP.md#ng-013)

**Legacy source rules:** [CO-020](../legacy-ui/APP-MAP.md#co-020); [CO-021](../legacy-ui/APP-MAP.md#co-021); [CO-022](../legacy-ui/APP-MAP.md#co-022); [CO-023](../legacy-ui/APP-MAP.md#co-023); [CO-024](../legacy-ui/APP-MAP.md#co-024); [CO-025](../legacy-ui/APP-MAP.md#co-025); [OG-016](../legacy-ui/APP-MAP.md#og-016)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| CO-020 | MyBSF shell /attendance -> bsf-attendance routes; AttendanceForwardingGuard redirects eligible GroupLeader sessions to the first assigned group and otherwise forwards to list/placeholder behavior. |
| CO-021 | bsf-attendance attendance list route /list or /:classId/list; group detail route /group/:groupId and class-scoped variant. |
| CO-022 | Opened from a group attendance row or directly by group route; direct feature route is MSAL guarded only. |
| CO-023 | bsf-attendance class-day-leader route, with class-scoped route variant. |
| CO-024 | bsf-attendance leaders-meeting route, with class-scoped route variant. |
| CO-025 | bsf-attendance seminar route, with class-scoped route variant. |
| OG-016 | Shell prefix /attendance-list; local root route '' uses AuthGuardService. Root app route adds WelcomeAreaGuardService; global menu entry is displayed to GroupLeader for group attendance and Trainer/AOT for training attendance, but the nested direct route has no role guard. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): CO-020-A01, CO-021-A01, CO-022-A01, CO-023-A01, CO-024-A01, CO-025-A01, OG-016-A01, OG-016-A02

<a id="h02"></a>
### H02 — Class finance and HQ processing

**Entry / trigger:** Finance menu and its class/HQ/internal-control destinations.

**Audience:** Per-action class-finance, HQ financial add-on and auditor/read-only rules; HQ label alone is insufficient.

**Required context:** classId, effective role/add-on, jurisdiction, fiscal year/month, currency/reportId

**Risk / parity:** Finance host mount/origin is not established by library-local routes. Submission/approval/month-close state gates are independent; do not land every actor on HQ functions.

**Disposition:** Continuity candidate if these finance workflows remain supported.

**New design:** [NW-001](FIGMA-APP-MAP.md#nw-001)

**Legacy source rules:** [FG-005](../legacy-ui/APP-MAP.md#fg-005); [FG-006](../legacy-ui/APP-MAP.md#fg-006); [FG-007](../legacy-ui/APP-MAP.md#fg-007); [FG-008](../legacy-ui/APP-MAP.md#fg-008); [FG-009](../legacy-ui/APP-MAP.md#fg-009); [FG-010](../legacy-ui/APP-MAP.md#fg-010); [FG-011](../legacy-ui/APP-MAP.md#fg-011); [FG-012](../legacy-ui/APP-MAP.md#fg-012); [FG-013](../legacy-ui/APP-MAP.md#fg-013); [FG-014](../legacy-ui/APP-MAP.md#fg-014); [FG-015](../legacy-ui/APP-MAP.md#fg-015); [FG-016](../legacy-ui/APP-MAP.md#fg-016); [FG-017](../legacy-ui/APP-MAP.md#fg-017); [FG-018](../legacy-ui/APP-MAP.md#fg-018); [FG-019](../legacy-ui/APP-MAP.md#fg-019); [FG-020](../legacy-ui/APP-MAP.md#fg-020); [FG-021](../legacy-ui/APP-MAP.md#fg-021); [FG-022](../legacy-ui/APP-MAP.md#fg-022); [FG-023](../legacy-ui/APP-MAP.md#fg-023); [CO-006](../legacy-ui/APP-MAP.md#co-006)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| FG-005 | Finance library route `:classId` or its default child route under the host's finance module; class context is derived from the signed-in MyBSF person session (jurisdictionId 2) and loaded class list. Host route prefix is not established by this library route file. |
| FG-006 | Inside selected class report summary; Receipts and Disbursements tabs. Row click and row-menu View/Edit open the transaction dialog, except editable F101 summary receipts which use the React control when loaded. |
| FG-007 | Class report summary Add Receipt/Add Disbursement or editable transaction row View/Edit; also the F101-load-failure fallback for Add Receipt or editable F101 summary-row edit. |
| FG-008 | Transaction row action menu or editable transaction dialog. |
| FG-009 | Editable row action menu/editor footer, or transaction table bulk action bar. |
| FG-010 | Monthly Summary in selected class report; Save updates the report and refreshes the displayed value. |
| FG-011 | Submit To HQ in class report summary; the UI opens submission dialog, then a confirmation dialog after report submission. |
| FG-012 | Class report summary Add Receipt opens F101 when its lazy bundle loads. F101 mounts into the MyBSF finance content area; a saved F101 summary transaction may be reopened through its row Edit action. |
| FG-013 | Receipts row click/Edit within class report; F101 lookup maps summary transaction to form id. HQ ViewClass and any read-only row continue through the legacy view editor, not editable F101. |
| FG-014 | Finance library `hq` or `hq/:currency` route. HQ landing renders the summary only when local `isHqFinance` is true; service initializes HQ data only for jurisdiction HQ with HqFinancial add-on. |
| FG-015 | HQ table row click/View Detail opens selected class report. Edit toggle is in report summary. |
| FG-016 | HQ report detail, from Approve/Reject buttons; approval opens a separate confirmation dialog. |
| FG-017 | HQ class-report table row menu or Bulk Action > Mark as Paid > Apply. |
| FG-018 | HQ class report list Bulk Action > Submit Zero Report for selected period and country group. |
| FG-019 | HQ Summary Month End Close button for the current finance period. |
| FG-020 | US HQ class-report table Bulk Action > Generate EFT. |
| FG-021 | Finance library route `hq/onlinegiving`. |
| FG-022 | Finance library route `bankinfo`. |
| FG-023 | Finance library routes `internal-control`, `internal-control/:id` for class/year form and `internal-control-list` for list; class-form context is selected class unless report id supplies its class. |
| CO-006 | Embedded in bsf-classes class create/update editor. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): FG-005-A01, FG-006-A01, FG-006-A02, FG-007-A01, FG-007-A02, FG-008-A01, FG-009-A01, FG-009-A02, FG-010-A01, FG-011-A01, FG-012-A01, FG-012-A02, FG-013-A01, FG-013-A02, FG-014-A01, FG-015-A01, FG-015-A02, FG-016-A01, FG-016-A02, FG-017-A01, FG-018-A01, FG-019-A01, FG-019-A02, FG-020-A01, FG-021-A01, FG-022-A01, FG-022-A02, FG-022-A03, FG-022-A04, FG-023-A01, FG-023-A02, FG-023-A03, CO-006-A01

<a id="h03"></a>
### H03 — Give and complete a payment

**Entry / trigger:** Give; class-specific giving destination when available.

**Audience:** Donor-facing flow; not a finance-administrator permission.

**Required context:** approved giving destination/fund, legacy class giving identity if applicable, currency/campaign where supported

**Risk / parity:** Use supported donation entry points; do not invent a payment-step URL or pass donor PII. Giving destination, recurring/honorarium conditions and payment-provider return states remain owned by the giving flow.

**Disposition:** Continuity candidate until a replacement payment flow is delivered.

**New design:** [NW-001](FIGMA-APP-MAP.md#nw-001)

**Legacy source rules:** [FG-001](../legacy-ui/APP-MAP.md#fg-001); [FG-002](../legacy-ui/APP-MAP.md#fg-002); [FG-003](../legacy-ui/APP-MAP.md#fg-003); [FG-004](../legacy-ui/APP-MAP.md#fg-004); [DJ-009](../legacy-ui/APP-MAP.md#dj-009)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| FG-001 | Donations ClientApp root embeds <app-payment>; first step is rendered when the flow is at step 1. The wildcard route is not a step-specific route. |
| FG-002 | First step of the embedded donation form; controls are included in the amount/payment step. |
| FG-003 | Step 2 of the embedded flow, mounted by <app-payment-step-two> at flow step 2. |
| FG-004 | Step 3 is mounted after billing information; PayPal's SDK step is the flow's step 4. Payment selection itself is made on step 1. |
| DJ-009 | /features/find-a-group/class/:id, /class/:id/:location, /class/:id/:locationTime; equivalent give-to-your-class/class/:id. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): FG-001-A01, FG-002-A01, FG-002-A02, FG-003-A01, FG-004-A01, FG-004-A02, FG-004-A03, DJ-009-A01, DJ-009-A02

<a id="h04"></a>
### H04 — Resource library and home-training materials

**Entry / trigger:** Resources; Study parent-download/Home Training links.

**Audience:** Selected legacy library position/content-language and material-specific role availability; new resource-uploader label is not a runtime grant.

**Required context:** effective position, class/study/year, material/content language, material ID/category

**Risk / parity:** Main-file Resources is explicitly not M1; Web Study has no global M1 guarantee. Preserve AP-specialty filters, role-access metadata and batch-download needs. New AI Chat is not proof old Sharely behavior is absent.

**Disposition:** M1 continuity candidate; final owner depends on actual rollout, not Ready for dev.

**New design:** [NA-017](FIGMA-APP-MAP.md#na-017); [NA-018](FIGMA-APP-MAP.md#na-018); [NA-019](FIGMA-APP-MAP.md#na-019); [NA-020](FIGMA-APP-MAP.md#na-020); [NA-022](FIGMA-APP-MAP.md#na-022); [NW-001](FIGMA-APP-MAP.md#nw-001)

**Legacy source rules:** [CP-019](../legacy-ui/APP-MAP.md#cp-019); [CP-020](../legacy-ui/APP-MAP.md#cp-020); [CP-021](../legacy-ui/APP-MAP.md#cp-021); [CP-022](../legacy-ui/APP-MAP.md#cp-022); [CP-023](../legacy-ui/APP-MAP.md#cp-023); [SM-006](../legacy-ui/APP-MAP.md#sm-006); [OR-013](../legacy-ui/APP-MAP.md#or-013); [OR-014](../legacy-ui/APP-MAP.md#or-014)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| CP-019 | Shell prefix /resource; library-local / for listing and /search-assistant for assistant. |
| CP-020 | Shell /resource; expanded Resource Filter panel. |
| CP-021 | Expanded row on /resource resource list. |
| CP-022 | Shell /resource; individual row Download or select rows and use Download Selected. |
| CP-023 | Shell /resource/search-assistant; library-local /search-assistant. |
| SM-006 | Embedded in /lessons-user below lesson questions and notes. |
| OR-013 | /help-resource-materials; feature route uses AuthGuardService. |
| OR-014 | Resource links in category sections or search results under /help-resource-materials; Additional Resources link in the category sidebar. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): CP-019-A01, CP-019-A02, CP-020-A01, CP-021-A01, CP-022-A01, CP-023-A01, CP-023-A02, CP-023-A03, SM-006-A01, SM-006-A02, SM-006-A03, OR-013-A01, OR-013-A02, OR-014-A01, OR-014-A02, OR-014-A03

<a id="h05"></a>
### H05 — Legacy lesson work, saved answers and personal scribble

**Entry / trigger:** Study/lesson context > clearly labeled legacy lesson work; do not label the personal journal as published Lesson Notes. Optional mapped lecture playback troubleshooting is a separate legacy entry, not a new media ID guess.

**Audience:** Own study/lesson material access and personal answer/journal owner; material availability is role/state conditioned.

**Required context:** legacy product identity, person identity, study/year, lesson ID, written/audio language, legacy media entryId only for an authorized supported troubleshooting target

**Risk / parity:** Portal Study is explicitly not M1, while Web Study phase is unspecified. Answer persistence, historical data migration and journal parity are unresolved. Preserve year+lesson ownership; an Archive redesign is not absence of old historical access. A new resource/lesson ID is not necessarily the old media entryId; preserve media authorization and do not expose arbitrary legacy media identifiers.

**Disposition:** Conditional bridge until rollout and personal-work ownership/migration are verified.

**New design:** [NS-001](FIGMA-APP-MAP.md#ns-001); [NS-002](FIGMA-APP-MAP.md#ns-002); [NS-003](FIGMA-APP-MAP.md#ns-003); [NS-004](FIGMA-APP-MAP.md#ns-004); [NS-005](FIGMA-APP-MAP.md#ns-005); [NA-021](FIGMA-APP-MAP.md#na-021); [NA-023](FIGMA-APP-MAP.md#na-023); [NA-024](FIGMA-APP-MAP.md#na-024)

**Legacy source rules:** [SM-001](../legacy-ui/APP-MAP.md#sm-001); [SM-002](../legacy-ui/APP-MAP.md#sm-002); [SM-003](../legacy-ui/APP-MAP.md#sm-003); [SM-004](../legacy-ui/APP-MAP.md#sm-004); [SM-005](../legacy-ui/APP-MAP.md#sm-005); [SM-006](../legacy-ui/APP-MAP.md#sm-006); [SM-007](../legacy-ui/APP-MAP.md#sm-007); [SM-008](../legacy-ui/APP-MAP.md#sm-008); [OR-007](../legacy-ui/APP-MAP.md#or-007); [OR-008](../legacy-ui/APP-MAP.md#or-008); [SM-009](../legacy-ui/APP-MAP.md#sm-009)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| SM-001 | MyBSF /lessons-user; library-local path '' or ':lessonNumber'. The separate BSF-MCA-MY-Lessons/ui/user shell also mounts Lessons2Module at /lessons-user as a standalone harness. |
| SM-002 | Embedded in /lessons-user when MainComponent sets isWelcomeVisible for the current person context. |
| SM-003 | Embedded at the right side of the Questions & Notes card on /lessons-user. |
| SM-004 | Embedded in /lessons-user after selecting Q&A; the panel is conditional on the main component's displayQA state. |
| SM-005 | Embedded in /lessons-user in the Questions & Notes card for the selected lesson. |
| SM-006 | Embedded in /lessons-user below lesson questions and notes. |
| SM-007 | Embedded in /lessons-user when the main component considers the selected class active. |
| SM-008 | Embedded in /lessons-user after selecting Scribble; panel visibility is controlled by displayScribble. |
| OR-007 | Root /mylesson lazy-loads LessonsModule; child empty path renders MyLessonComponent behind AuthGuardService. |
| OR-008 | Sections within authenticated /mylesson; files route through MyLessonComponent.loadLessonMaterialFile. |
| SM-009 | MyBSF /lessons-user/troubleshoot/:entryId; library-local route 'troubleshoot/:entryId'. No visible trigger from the Lecture card was found. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): SM-001-A01, SM-001-A02, SM-002-A01, SM-003-A01, SM-003-A02, SM-004-A01, SM-004-A02, SM-004-A03, SM-005-A01, SM-005-A02, SM-005-A03, SM-006-A01, SM-006-A02, SM-006-A03, SM-007-A01, SM-007-A02, SM-008-A01, SM-008-A02, SM-008-A03, OR-007-A01, OR-007-A02, OR-008-A01, OR-008-A02, OR-008-A03, OR-008-A04, OR-008-A05, SM-009-A01, SM-009-A02

<a id="h06"></a>
### H06 — Join-request processing, next-study registration and child permission

**Entry / trigger:** Proposed Profile/Children > Study registration and permissions; authorized People > next-study registration. Existing document/form rows require type-specific target resolution. Proposed authorized People/Class People > existing class join-request queue for incoming requests.

**Audience:** Self/guardian versus class-operator versus specialist adult-link reconciliation, using exact old rules; these are not one grant.

**Required context:** person/child ID, guardian relationship, current versus next study/year, legacy class/group context, permission record ID when supported, existing join-request identity/state when processing an incoming request

**Risk / parity:** Profile child creation/editing is not next-year participation or legal consent signing. Do not overwrite guardian/signature data, assume document upload completes consent, or expose specialist link-reconciliation to all parents. Generic person creation or placement is not processing an existing join request; retain request linkage and its create/add/transfer state.

**Disposition:** Continuity candidate for retained registration/consent workflows.

**New design:** [NA-011](FIGMA-APP-MAP.md#na-011); [NA-012](FIGMA-APP-MAP.md#na-012); [NA-013](FIGMA-APP-MAP.md#na-013); [NP-001](FIGMA-APP-MAP.md#np-001); [NP-004](FIGMA-APP-MAP.md#np-004); [NP-010](FIGMA-APP-MAP.md#np-010); [NP-013](FIGMA-APP-MAP.md#np-013); [ORG-014](FIGMA-APP-MAP.md#org-014)

**Legacy source rules:** [DJ-015](../legacy-ui/APP-MAP.md#dj-015); [DJ-018](../legacy-ui/APP-MAP.md#dj-018); [DJ-019](../legacy-ui/APP-MAP.md#dj-019); [DJ-020](../legacy-ui/APP-MAP.md#dj-020); [DJ-021](../legacy-ui/APP-MAP.md#dj-021); [DJ-022](../legacy-ui/APP-MAP.md#dj-022); [DJ-023](../legacy-ui/APP-MAP.md#dj-023); [DJ-024](../legacy-ui/APP-MAP.md#dj-024); [DJ-028](../legacy-ui/APP-MAP.md#dj-028); [DJ-029](../legacy-ui/APP-MAP.md#dj-029); [CO-015](../legacy-ui/APP-MAP.md#co-015)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| DJ-015 | Home dashboard Registration Status panel; data is loaded from the Register service. Find A Group URL comes from runtime config; child consent URL is assembled locally. |
| DJ-018 | /register/me inside authenticated register module. |
| DJ-019 | /register/children; child and study consent deep links are under /register/child/... . |
| DJ-020 | Wizard in /register/children, /register/child/:groupId, /register/child/:childId/current-study/consent or /register/child/:childId/study/:studyId/consent. |
| DJ-021 | Second step of child permission wizard at the same /register/children and child consent routes. |
| DJ-022 | Third step of /register/children wizard and deep links /register/child/:childId/current-study/consent or /register/child/:childId/study/:studyId/consent; legacy /register/child/:groupId also loads the wizard. |
| DJ-023 | /register/class-members inside the MsalGuarded register module; class scope comes from personSessionContext jurisdiction and meeting/group filters. |
| DJ-024 | More menu on a child row in /register/class-members. |
| DJ-028 | /register/child-adult-linking; ChildAdultLinkingOfflineGuard. |
| DJ-029 | Row View > Link Adults to Child from /register/child-adult-linking. |
| CO-015 | bsf-class-composition join-request route, optionally scoped to classId. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): DJ-015-A01, DJ-015-A02, DJ-015-A03, DJ-018-A01, DJ-018-A02, DJ-019-A01, DJ-019-A02, DJ-020-A01, DJ-020-A02, DJ-021-A01, DJ-022-A01, DJ-022-A02, DJ-023-A01, DJ-023-A02, DJ-023-A03, DJ-024-A01, DJ-028-A01, DJ-029-A01, DJ-029-A02, CO-015-A01, CO-015-A02, CO-015-A03

<a id="h07"></a>
### H07 — Child protection and volunteer certification

**Entry / trigger:** Proposed authorized safeguarding/toolkit action; document rows only when exact form ownership/type is established.

**Audience:** Checklist editors, explicit AP validation action and eligible CP111 signers have distinct rules.

**Required context:** classId, personId, checklist/form ID, study/year, acting AP/class scope

**Risk / parity:** A generic file upload is not checklist completion, AP validation, CP111 signing or WWCC verification. External signing/upload interiors remain externally owned.

**Disposition:** Continuity candidate; protect the action-level scope and certification state.

**New design:** [NP-005](FIGMA-APP-MAP.md#np-005); [NP-010](FIGMA-APP-MAP.md#np-010); [NA-013](FIGMA-APP-MAP.md#na-013)

**Legacy source rules:** [CO-026](../legacy-ui/APP-MAP.md#co-026); [CO-027](../legacy-ui/APP-MAP.md#co-027); [CO-028](../legacy-ui/APP-MAP.md#co-028); [DJ-016](../legacy-ui/APP-MAP.md#dj-016)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| CO-026 | MyBSF shell /cp-checklist -> bsf-cp-checklist /:classId, /:classId/:apClassId, /create, /mecreate, /update, or /meupdate routes. |
| CO-027 | From the class checklist list when currentUserPositions contains abbreviation AP. |
| CO-028 | From the checklist create/update editor; no file upload control is implemented in this library. |
| DJ-016 | Home dashboard Forms To Complete panel; no route of its own. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): CO-026-A01, CO-026-A02, CO-026-A03, CO-027-A01, CO-027-A02, CO-028-A01, DJ-016-A01

<a id="h08"></a>
### H08 — Leadership applications and recommendations

**Entry / trigger:** Proposed leadership application/recommendation action; a named form/document row only after target type and application ownership are resolved.

**Audience:** Candidate/self, recommender, interviewer and authorized approver/rejector are distinct; use application status/canApprove rules.

**Required context:** candidate/person ID, application/recommendation ID, class/OLM context, application state

**Risk / parity:** Role assignment, document storage and application approval are not the same operation. Do not bypass screening, interview, signature or blocked-approval states.

**Disposition:** Continuity candidate for retained leadership workflow.

**New design:** [NA-013](FIGMA-APP-MAP.md#na-013); [NP-005](FIGMA-APP-MAP.md#np-005); [NP-014](FIGMA-APP-MAP.md#np-014); [ORG-003](FIGMA-APP-MAP.md#org-003); [ORG-008](FIGMA-APP-MAP.md#org-008); [ORG-013](FIGMA-APP-MAP.md#org-013)

**Legacy source rules:** [OL-001](../legacy-ui/APP-MAP.md#ol-001); [OL-002](../legacy-ui/APP-MAP.md#ol-002); [OL-003](../legacy-ui/APP-MAP.md#ol-003); [OL-004](../legacy-ui/APP-MAP.md#ol-004); [OL-005](../legacy-ui/APP-MAP.md#ol-005); [OL-006](../legacy-ui/APP-MAP.md#ol-006); [OL-007](../legacy-ui/APP-MAP.md#ol-007); [OL-008](../legacy-ui/APP-MAP.md#ol-008); [OL-009](../legacy-ui/APP-MAP.md#ol-009); [OL-010](../legacy-ui/APP-MAP.md#ol-010); [OL-011](../legacy-ui/APP-MAP.md#ol-011); [OL-012](../legacy-ui/APP-MAP.md#ol-012); [OL-013](../legacy-ui/APP-MAP.md#ol-013); [OL-014](../legacy-ui/APP-MAP.md#ol-014); [OL-015](../legacy-ui/APP-MAP.md#ol-015); [OL-016](../legacy-ui/APP-MAP.md#ol-016); [OL-017](../legacy-ui/APP-MAP.md#ol-017); [OL-018](../legacy-ui/APP-MAP.md#ol-018); [OL-019](../legacy-ui/APP-MAP.md#ol-019); [OL-020](../legacy-ui/APP-MAP.md#ol-020); [OL-021](../legacy-ui/APP-MAP.md#ol-021); [OL-022](../legacy-ui/APP-MAP.md#ol-022); [OL-023](../legacy-ui/APP-MAP.md#ol-023); [OL-024](../legacy-ui/APP-MAP.md#ol-024); [OL-025](../legacy-ui/APP-MAP.md#ol-025); [OL-026](../legacy-ui/APP-MAP.md#ol-026); [OL-027](../legacy-ui/APP-MAP.md#ol-027); [OL-028](../legacy-ui/APP-MAP.md#ol-028)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| OL-001 | /leadership-application/apply-recommend (module route under /leadership-application) |
| OL-002 | /leadership-application/recommend after external candidate selection; route also declares /leadership-application/recommend/:id |
| OL-003 | /leadership-application/recommend/:id from View in recommendation history |
| OL-004 | /leadership-application/application-status or embedded on /leadership-application/apply-recommend |
| OL-005 | Dialog opened by Withdraw in MyApplications on eligible status rows |
| OL-006 | Dialog opened from ViewApp in MyApplications |
| OL-007 | /leadership-application/:id/init |
| OL-008 | /leadership-application/:id/personal-info |
| OL-009 | /leadership-application/:id/family-info |
| OL-010 | /leadership-application/:id/policy |
| OL-011 | /leadership-application/:id/statement-of-faith |
| OL-012 | /leadership-application/:id/spiritual-gift |
| OL-013 | /leadership-application/:id/lifestyle-alcohol |
| OL-014 | /leadership-application/:id/lifestyle-sexuality |
| OL-015 | /leadership-application/:id/marital-counsel (legacy form state) |
| OL-016 | /leadership-application/:id/marital-counsel (new form state) |
| OL-017 | /leadership-application/:id/signature-screen (new form sequence only) |
| OL-018 | /leadership-application/candidate-applications |
| OL-019 | /leadership-application/:id/review |
| OL-020 | /leadership-application/:id/review, interview panel at top |
| OL-021 | Dialog opened by Approve in Candidate Applications when runtime item.canApprove is true |
| OL-022 | Dialog opened by Not Approve in Candidate Applications when runtime item.canApprove is true |
| OL-023 | Opened instead of approval/rejection confirmation when selected list item has canApprove=false |
| OL-024 | /leadership-application/findOLM; shell Find OLM link is shown only for isLeader() |
| OL-025 | Opened by RequestLeadersMeeting constructor when SessionService.isUserLeader() and onlineClassId is absent |
| OL-026 | /leadership-application/:id/request-leaders-meeting |
| OL-027 | /leadership-application/:id/confirm-leaders-meeting-request |
| OL-028 | Dialog opened from SubmitRec in /leadership-application/recommend |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): OL-001-A01, OL-001-A02, OL-001-A03, OL-002-A01, OL-002-A02, OL-003-A01, OL-004-A01, OL-004-A02, OL-004-A03, OL-004-A04, OL-005-A01, OL-005-A02, OL-006-A01, OL-007-A01, OL-007-A02, OL-008-A01, OL-008-A02, OL-009-A01, OL-009-A02, OL-010-A01, OL-010-A02, OL-011-A01, OL-011-A02, OL-012-A01, OL-012-A02, OL-013-A01, OL-013-A02, OL-014-A01, OL-014-A02, OL-015-A01, OL-015-A02, OL-016-A01, OL-016-A02, OL-017-A01, OL-017-A02, OL-018-A01, OL-018-A02, OL-018-A03, OL-018-A04, OL-019-A01, OL-020-A01, OL-020-A02, OL-021-A01, OL-021-A02, OL-022-A01, OL-022-A02, OL-023-A01, OL-024-A01, OL-024-A02, OL-024-A03, OL-025-A01, OL-026-A01, OL-026-A02, OL-026-A03, OL-027-A01, OL-027-A02, OL-027-A03, OL-027-A04, OL-028-A01

<a id="h09"></a>
### H09 — Leader preparation banks

**Entry / trigger:** Proposed role-appropriate toolkit > Leader preparation.

**Audience:** Existing bank/creator/role rules; not all resource readers can author preparation records.

**Required context:** effective role, class/study/lesson where relevant, record/creator identity

**Risk / parity:** Resource consumption is not illustration, prayer/announcement or shepherding-topic CRUD. Preserve creator/edit/delete rules and unsaved work.

**Disposition:** Owner decision: bridge if retained, otherwise explicitly retire/rebuild.

**New design:** [NW-003](FIGMA-APP-MAP.md#nw-003); [NA-017](FIGMA-APP-MAP.md#na-017)

**Legacy source rules:** [CP-007](../legacy-ui/APP-MAP.md#cp-007); [CP-008](../legacy-ui/APP-MAP.md#cp-008); [CP-009](../legacy-ui/APP-MAP.md#cp-009)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| CP-007 | Shell prefix /leading; library-local /illustrations-bank, /illustrations-bank/create, /illustrations-bank/update/:leadingPersonalIllustrationId. |
| CP-008 | Shell prefix /leading; library-local /announcement-prayer. |
| CP-009 | Shell prefix /leading; library-local /shepherding-topic. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): CP-007-A01, CP-007-A02, CP-007-A03, CP-007-A04, CP-008-A01, CP-008-A02, CP-008-A03, CP-008-A04, CP-008-A05, CP-009-A01, CP-009-A02, CP-009-A03, CP-009-A04, CP-009-A05

<a id="h10"></a>
### H10 — Online training and leader groups

**Entry / trigger:** Proposed authorized training/leader-group shortcut from class/group workspace.

**Audience:** Online Trainer/AOT/group-leader and selected-user contexts; do not equate with generic Class Staff/Class Leader labels.

**Required context:** BSF Online product identity, training/class ID, selected user ID, leader-group ID, role scope

**Risk / parity:** A group displayed as Online is not proof it belongs to the BSF Online product. Discussion groups/classrooms do not automatically replace training leader groups or OLM setup.

**Disposition:** Conditional continuity/ownership decision pending product and role mapping.

**New design:** [ORG-002](FIGMA-APP-MAP.md#org-002); [ORG-014](FIGMA-APP-MAP.md#org-014); [ORG-015](FIGMA-APP-MAP.md#org-015); [NG-004](FIGMA-APP-MAP.md#ng-004)

**Legacy source rules:** [OG-008](../legacy-ui/APP-MAP.md#og-008); [OG-009](../legacy-ui/APP-MAP.md#og-009); [OG-010](../legacy-ui/APP-MAP.md#og-010); [OG-011](../legacy-ui/APP-MAP.md#og-011); [OG-012](../legacy-ui/APP-MAP.md#og-012); [OG-013](../legacy-ui/APP-MAP.md#og-013); [OG-014](../legacy-ui/APP-MAP.md#og-014); [OG-015](../legacy-ui/APP-MAP.md#og-015)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| OG-008 | Shell prefix /myclass; local route ''. GroupGuardService protects the route. |
| OG-009 | Shell prefix /myclass; local /leaders_meeting and /leaders_meeting/:userId. Both routes use TrainingGuardService. Shell /mytraining/manage_group can navigate to other class management; leaders-meeting settings are reached from My Class creation or the role-gated training menu. |
| OG-010 | Shell prefix /mytraining; local route ''. TrainingGuard2Service protects root and requires authenticated GroupLeaderOrAbove. |
| OG-011 | Shell prefix /mytraining; local route ':id', protected by TrainingGuardService. |
| OG-012 | Embedded in /mytraining and /mytraining/:id after training details load. |
| OG-013 | Embedded in /mytraining or /mytraining/:id; banners and member groups render only after relevant training details load. |
| OG-014 | Shell prefix /mytraining; local /manage_group protected by TrainingGuardService. Add/current settings are embedded panes. Manage People navigates to /mytraining/manage-leader-group. |
| OG-015 | Shell prefix /mytraining; local /manage-leader-group, reached from Manage Group's Manage People in Leader Group action. Route is AOT-or-above and has NavigationDataGuard canDeactivate. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): OG-008-A01, OG-008-A02, OG-009-A01, OG-009-A02, OG-010-A01, OG-011-A01, OG-012-A01, OG-012-A02, OG-012-A03, OG-012-A04, OG-013-A01, OG-013-A02, OG-013-A03, OG-013-A04, OG-014-A01, OG-014-A02, OG-014-A03, OG-014-A04, OG-015-A01

<a id="h11"></a>
### H11 — Reports, runtime viewers and exports

**Entry / trigger:** Reports menu; a dashboard report shortcut only if its target is defined.

**Audience:** Runtime catalog/report access plus exact dashboard/route rules; menu visibility is not route authorization.

**Required context:** product/role/jurisdiction, report ID/key, content/UI language, supported report parameters

**Risk / parity:** New dashboard cards are not proof of full Bold/Power BI parity. Runtime report parameters and embedded contents are unknown; do not fabricate filter URLs or replace exports with card screenshots.

**Disposition:** Continuity candidate; retain unknown report coverage outside exclusive-set claims.

**New design:** [NW-001](FIGMA-APP-MAP.md#nw-001); [NW-003](FIGMA-APP-MAP.md#nw-003)

**Legacy source rules:** [AI-004](../legacy-ui/APP-MAP.md#ai-004); [AI-005](../legacy-ui/APP-MAP.md#ai-005); [AI-006](../legacy-ui/APP-MAP.md#ai-006); [AI-007](../legacy-ui/APP-MAP.md#ai-007); [AI-008](../legacy-ui/APP-MAP.md#ai-008); [AI-009](../legacy-ui/APP-MAP.md#ai-009); [OA-012](../legacy-ui/APP-MAP.md#oa-012); [OA-013](../legacy-ui/APP-MAP.md#oa-013); [OA-014](../legacy-ui/APP-MAP.md#oa-014)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| AI-004 | Host path /reports; BsfReportsModule child route empty string renders the catalog. |
| AI-005 | Host path /reports/:id; child route :id fetches the selected report in the current language. |
| AI-006 | Host path /reports/:id; remote viewer rendered for a runtime report definition. |
| AI-007 | The export controls are within the remote viewer on /reports/:id; the Angular template does not implement a separate export dialog. |
| AI-008 | Dashboard button on /reports; child route /reports/powerbi/:key. |
| AI-009 | Child route /reports/powerbi/:key; the feature route itself has no actor guard. Normal navigation starts from the role-conditioned Dashboard button, but the child route is separately addressable. |
| OA-012 | Active /reports route; root route and child use WelcomeAreaGuardService and AuthGuardService respectively. Dashboard link is shown for OnlineAreaPersonel or SessionService.isAdmin() (HQAdminVO/HQAdmin). |
| OA-013 | Active /reports/:id route with AuthGuardService and the root WelcomeAreaGuardService. |
| OA-014 | Active /reports/dashboard route with DashboardGuardService; the report-catalog Dashboard link is visible to Area Personnel and HQ Admin/HQ Admin View Only, while the route guard also includes Regional Directors. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): AI-004-A01, AI-005-A01, AI-006-A01, AI-007-A01, AI-008-A01, AI-009-A01, OA-012-A01, OA-012-A02, OA-013-A01, OA-013-A02, OA-014-A01

<a id="h12"></a>
### H12 — Curriculum, publishing and lecture upload

**Entry / trigger:** Resources uploader button intent; proposed authorized publishing/lecture toolkit actions.

**Audience:** Per-action legacy authoring rules and eligible uploader/operator scope; new uploader label has no enum mapping.

**Required context:** study/lesson/language, resource ID/version/status, publication audience/class IDs, lecture owner/class

**Risk / parity:** Reading/downloading is not authoring/publishing. Preserve scan failures, ready/published transitions, audience/date targeting, revision unlock and lecture replacement rules. Do not revive disabled lesson-publish/add controls.

**Disposition:** Continuity candidate; M1 Resources exclusion also applies.

**New design:** [NA-019](FIGMA-APP-MAP.md#na-019); [NA-017](FIGMA-APP-MAP.md#na-017); [NA-021](FIGMA-APP-MAP.md#na-021); [NW-003](FIGMA-APP-MAP.md#nw-003)

**Legacy source rules:** [CP-001](../legacy-ui/APP-MAP.md#cp-001); [CP-002](../legacy-ui/APP-MAP.md#cp-002); [CP-003](../legacy-ui/APP-MAP.md#cp-003); [CP-004](../legacy-ui/APP-MAP.md#cp-004); [CP-010](../legacy-ui/APP-MAP.md#cp-010); [CP-011](../legacy-ui/APP-MAP.md#cp-011); [CP-012](../legacy-ui/APP-MAP.md#cp-012); [CP-013](../legacy-ui/APP-MAP.md#cp-013); [CP-014](../legacy-ui/APP-MAP.md#cp-014); [CP-015](../legacy-ui/APP-MAP.md#cp-015); [CP-016](../legacy-ui/APP-MAP.md#cp-016); [CP-017](../legacy-ui/APP-MAP.md#cp-017); [CP-018](../legacy-ui/APP-MAP.md#cp-018); [SM-010](../legacy-ui/APP-MAP.md#sm-010); [SM-011](../legacy-ui/APP-MAP.md#sm-011)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| CP-001 | Shell prefix /curriculum; library-local routes /, /manage/:studyId, /edit-lesson/:lessonId. |
| CP-002 | Shell /curriculum; library-local /edit-lesson/:lessonId. |
| CP-003 | Within shell /curriculum/edit-lesson/:lessonId; written language comes from route state, local storage, or English default. |
| CP-004 | Within /curriculum/edit-lesson/:lessonId for a published lesson. |
| CP-010 | Shell prefix /resource-uploader; uploader-library routes /, /ready, /published, /publish/:id. |
| CP-011 | From Uploaded/Ready/Published row Edit Resource Details, or uploader Add Resource; inside /resource-uploader/publish/:id via Edit. |
| CP-012 | From an Uploaded resource row Edit, or from Save and Mark Ready after upload/add. |
| CP-013 | Shell /resource-uploader; library-local / and /ready. |
| CP-014 | Row menu in /resource-uploader, /resource-uploader/ready, or /resource-uploader/published; bulk action menu on the same lists. |
| CP-015 | Shell /resource-uploader/publish/:id; reached from Ready Edit Publish Details/bulk Add Publish Details and Published Edit Publish Details. Route itself accepts id without a status-specific route guard. |
| CP-016 | Within /resource-uploader/publish/:id; optional subsection of Publish Details. |
| CP-017 | Shell /resource-uploader/published; library-local /published. |
| CP-018 | Shell /resource-uploader/published; Published tab bulk action Group Create Alert. |
| SM-010 | MyBSF /lessons/upload-lecture; library-local path /lessons/upload-lecture. The MyBSF route is MsalGuard-protected; the library route itself has no position guard. |
| SM-011 | MyBSF /lessons/upload-lecture after selecting a lesson. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): CP-001-A01, CP-001-A02, CP-001-A03, CP-002-A01, CP-002-A02, CP-002-A03, CP-003-A01, CP-003-A02, CP-004-A01, CP-004-A02, CP-010-A01, CP-010-A02, CP-011-A01, CP-012-A01, CP-013-A01, CP-013-A02, CP-013-A03, CP-014-A01, CP-015-A01, CP-015-A02, CP-016-A01, CP-017-A01, CP-017-A02, CP-017-A03, CP-018-A01, SM-010-A01, SM-010-A02, SM-010-A03, SM-011-A01, SM-011-A02

<a id="h13"></a>
### H13 — Study-year and standard-calendar administration

**Entry / trigger:** Proposed authorized administration shortcut, not a general group-calendar edit link.

**Audience:** System/HQ study-setup actors and standard-calendar operators according to exact old rules; class/group editors are not automatically equivalent.

**Required context:** legacy product, study/release year, class population scope, standard leaders-meeting schedule

**Risk / parity:** New class/group calendars do not establish global study population, child-program population or standard break-calendar generation. Avoid duplicate generation across systems.

**Disposition:** Conditional bridge until the admin owner and master-calendar parity are verified.

**New design:** [NW-006](FIGMA-APP-MAP.md#nw-006); [NW-007](FIGMA-APP-MAP.md#nw-007); [ORG-017](FIGMA-APP-MAP.md#org-017)

**Legacy source rules:** [DJ-025](../legacy-ui/APP-MAP.md#dj-025); [DJ-026](../legacy-ui/APP-MAP.md#dj-026); [DJ-027](../legacy-ui/APP-MAP.md#dj-027); [SM-016](../legacy-ui/APP-MAP.md#sm-016); [OA-017](../legacy-ui/APP-MAP.md#oa-017)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| DJ-025 | /study/manage-study-year under authenticated MyBSF shell. |
| DJ-026 | /study/populate-class-study under authenticated MyBSF shell. |
| DJ-027 | /study/populate-children-program under authenticated MyBSF shell. |
| SM-016 | MyBSF /standard-calendar; library-local StandardCalendarModule route ''. Main shell route has MsalGuard. |
| OA-017 | Active /admin/study nested route; root /admin route requires authenticated exact HQAdmin. The admin layout links Setup Study Year. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): DJ-025-A01, DJ-025-A02, DJ-026-A01, DJ-027-A01, SM-016-A01, SM-016-A02, SM-016-A03, SM-016-A04, SM-016-A05, SM-016-A06, OA-017-A01, OA-017-A02

<a id="h14"></a>
### H14 — Targeted alerts and operational announcements

**Entry / trigger:** Proposed authorized communication/operations tool, separate from consumer News & Updates.

**Audience:** Existing alert/banner/system-announcement editing rights and targeting conditions; readers are not publishers.

**Required context:** product, alert/banner ID, target roles/classes/country, schedule/enablement

**Risk / parity:** Reading or auto-marking updates read does not replace authoring targeted messages, recurring maintenance schedules or publication alerts.

**Disposition:** Continuity candidate if old authoring tools remain the owner.

**New design:** [NW-005](FIGMA-APP-MAP.md#nw-005); [NA-017](FIGMA-APP-MAP.md#na-017)

**Legacy source rules:** [AI-001](../legacy-ui/APP-MAP.md#ai-001); [AI-002](../legacy-ui/APP-MAP.md#ai-002); [AI-003](../legacy-ui/APP-MAP.md#ai-003); [OA-018](../legacy-ui/APP-MAP.md#oa-018)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| AI-001 | Host path /alerts/list; AlertsModule child route list, with its empty child route redirecting to list. The published library consumer's mount prefix is consumer-defined. |
| AI-002 | Host path /alerts/create for creation and /alerts/edit/:id for editing; these are AlertsModule child routes. The parent prefix in published consumers is not fixed by the library. |
| AI-003 | Host path /banners/create; BannerModule child route create (its empty route redirects to create). This is separate from the /alerts mount. |
| OA-018 | Active /admin/announcement nested route inside the guarded admin layout. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): AI-001-A01, AI-002-A01, AI-002-A02, AI-003-A01, AI-003-A02, AI-003-A03, OA-018-A01, OA-018-A02, OA-018-A03

<a id="h15"></a>
### H15 — Staff account recovery and PII operations

**Entry / trigger:** Proposed staff-only support action; no public recovery or self-deletion link into this tool.

**Audience:** McaAuthorize change-password/update/all plus separately constrained UserAdmin/verification operations, exactly as source rules state.

**Required context:** verified business-person identity, support operator identity/permissions, verification state

**Risk / parity:** New self-service settings/deletion requests are not staff overrides or Remove PII. Local IdentityUser UI is a separate account model. Manual verification, action authorization and audit obligations remain.

**Disposition:** Staff-only continuity candidate; never an automatic end-user fallback.

**New design:** [NA-010](FIGMA-APP-MAP.md#na-010); [NA-014](FIGMA-APP-MAP.md#na-014); [NA-015](FIGMA-APP-MAP.md#na-015); [NA-016](FIGMA-APP-MAP.md#na-016)

**Legacy source rules:** [ID-022](../legacy-ui/APP-MAP.md#id-022); [ID-023](../legacy-ui/APP-MAP.md#id-023); [ID-024](../legacy-ui/APP-MAP.md#id-024); [ID-025](../legacy-ui/APP-MAP.md#id-025); [ID-026](../legacy-ui/APP-MAP.md#id-026); [ID-027](../legacy-ui/APP-MAP.md#id-027); [ID-028](../legacy-ui/APP-MAP.md#id-028)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| ID-022 | MVC /reset-password/search; form posts to searchByEmailOrPersonId. Step2 opens after a match. Controller class has McaAuthorize(change-password, update, all). |
| ID-023 | Step2 Security Questions button opens /reset-password/view-security-qa partial/panel. |
| ID-024 | Step2 Reset Password; modal submits to ResetPasswordController.ResetPassword. |
| ID-025 | Step2 MFA phone Edit opens /reset-password/edit-mfa-phone partial; submit invokes UpdateMfaPhone. |
| ID-026 | Step2 Reset MFA; OnViewResetMfa chooses a reset modal or no-MFA method-selection partial. |
| ID-027 | Step2 Reset Account opens _ResetAccount; POST invokes ResetAccount action. |
| ID-028 | Step2 Remove PII opens the RemovePiiConfirmation partial; POST invokes UserAdminController.RemovePii. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): ID-022-A01, ID-023-A01, ID-024-A01, ID-025-A01, ID-026-A01, ID-027-A01, ID-028-A01

<a id="h16"></a>
### H16 — Public class/group discovery and joining

**Entry / trigger:** Proposed Find/join a group entry for visitors or unplaced account holders; role-specific dashboard interiors remain partly unread.

**Audience:** Public visitor versus authenticated applicant/member/leader contexts; some OLM actions are role guarded or no-op publicly.

**Required context:** local versus BSF Online product, selected legacy class/group, join context, supported sign-in continuation

**Risk / parity:** Internal quick search is not public discovery. Preserve selected destination through sign-in using supported legacy flow; do not invent a general returnUrl or treat disabled public OLM request as available. Existing sign-in assistance is distinct from public password recovery, staff overrides and local IdentityUser authentication; resolve the supported identity flow rather than inventing a recovery target.

**Disposition:** Continuity candidate until public discovery/join ownership is resolved.

**New design:** [NA-002](FIGMA-APP-MAP.md#na-002); [NW-003](FIGMA-APP-MAP.md#nw-003); [NW-001](FIGMA-APP-MAP.md#nw-001)

**Legacy source rules:** [DJ-001](../legacy-ui/APP-MAP.md#dj-001); [DJ-002](../legacy-ui/APP-MAP.md#dj-002); [DJ-003](../legacy-ui/APP-MAP.md#dj-003); [DJ-004](../legacy-ui/APP-MAP.md#dj-004); [DJ-005](../legacy-ui/APP-MAP.md#dj-005); [DJ-006](../legacy-ui/APP-MAP.md#dj-006); [DJ-007](../legacy-ui/APP-MAP.md#dj-007); [DJ-008](../legacy-ui/APP-MAP.md#dj-008); [DJ-009](../legacy-ui/APP-MAP.md#dj-009); [DJ-010](../legacy-ui/APP-MAP.md#dj-010); [DJ-011](../legacy-ui/APP-MAP.md#dj-011); [DJ-012](../legacy-ui/APP-MAP.md#dj-012); [DJ-013](../legacy-ui/APP-MAP.md#dj-013); [SM-002](../legacy-ui/APP-MAP.md#sm-002); [OA-004](../legacy-ui/APP-MAP.md#oa-004)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| DJ-001 | Root / (and /home); root has WelcomeAreaGuardService only, while /home additionally has MsalGuard. The CTA routes to /mygroup/group. |
| DJ-002 | /mygroup/group (no inner AuthGuard; public/sessionless mode); /mygroup/find-a-group (AuthGuard); /mygroup/search-olm and /mygroup/request-leaders-meeting/apply are distinct OLM/application contexts. All are under /mygroup and WelcomeAreaGuardService. |
| DJ-003 | Join button in /mygroup/group or authenticated /mygroup/find-a-group result table; continuation after identity sign-in resumes the selected group flow. |
| DJ-004 | Authenticated /mygroup/find-a-group route (AuthGuardService); this operation is not exposed as a Join column on the ordinary /mygroup/group route unless the guarded find-a-group context is active. |
| DJ-005 | /mygroup/search-olm or /mygroup/request-leaders-meeting/apply; then external-to-this-capability route /leadership-application/:id/request-leaders-meeting. |
| DJ-006 | /features/find-a-group, /features/find-a-group/find-in-person-group; parallel /give-to-your-class and /give-to-your-class/find-in-person-group routes. |
| DJ-007 | /features/find-a-group/find-in-person-group (and give-to-your-class search routes); Search button on landing filter. |
| DJ-008 | /features/find-a-group/class; parallel /give-to-your-class/class. Result detail uses /class/:id[/location[/locationTime]]. |
| DJ-009 | /features/find-a-group/class/:id, /class/:id/:location, /class/:id/:locationTime; equivalent give-to-your-class/class/:id. |
| DJ-010 | Join button from result/detail opens request dialog. Unauthenticated sign-in saves selected class and invokes OIDC; when Azure account has no MyBSF person, AuthService redirects to MyBSF /welcome/create-account?returnUrl=<FCL origin>. Success shows JoinConfirm; child-consent link goes to configured Acct children-information route. |
| DJ-011 | Contact button from local class detail opens ContactUs dialog; success opens ContactUsConfirm. |
| DJ-012 | Invite a Friend button in local class detail; opens invite dialog and then confirmation. |
| DJ-013 | /features/find-a-group/invite-friend/class/:id (header and footer hidden by route data); may carry campaignId query value. |
| SM-002 | Embedded in /lessons-user when MainComponent sets isWelcomeVisible for the current person context. |
| OA-004 | Active unguarded child route /account/locked-out. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): DJ-001-A01, DJ-002-A01, DJ-002-A02, DJ-003-A01, DJ-003-A02, DJ-004-A01, DJ-004-A02, DJ-005-A01, DJ-005-A02, DJ-005-A03, DJ-006-A01, DJ-006-A02, DJ-007-A01, DJ-008-A01, DJ-009-A01, DJ-009-A02, DJ-010-A01, DJ-010-A02, DJ-010-A03, DJ-011-A01, DJ-012-A01, DJ-013-A01, SM-002-A01, OA-004-A01, OA-004-A02

<a id="h17"></a>
### H17 — Online group leaving and buddy finding

**Entry / trigger:** Proposed eligible group/member action, only after product/group identity is resolved.

**Audience:** Existing member leave versus guarded leader buddy-search contexts; not all group viewers.

**Required context:** current online user/group, pending destination group if any, leader-meeting context

**Risk / parity:** A study group selector is not leave-and-join. Buddy search contacts a leader but does not join/move users; preserve any pending destination state in the existing lifecycle.

**Disposition:** Conditional continuity or explicit retirement decision.

**New design:** [NG-004](FIGMA-APP-MAP.md#ng-004); [NA-004](FIGMA-APP-MAP.md#na-004)

**Legacy source rules:** [OG-006](../legacy-ui/APP-MAP.md#og-006); [OG-007](../legacy-ui/APP-MAP.md#og-007)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| OG-006 | Shell prefix /mygroup; local routes /leave and /leave/:userId, both AuthGuardService. The account-profile template links to /mygroup/leave only when isInGroup() resolves true and the signed-in user is not a group leader; the external profile's interiors are identity-mapped. |
| OG-007 | Shell prefix /mygroup; local /buddy and /buddy/:userId routes use GroupGuardService. GroupSettingsComponent has a findABuddy() navigation method, but no button binding was found in its template; direct route is otherwise possible. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): OG-006-A01, OG-006-A02, OG-007-A01, OG-007-A02

<a id="h18"></a>
### H18 — Use unified cross-object search

**Entry / trigger:** Proposed legacy workspace shortcut > Search in new workspace.

**Audience:** Only actors actually authorized for the new search scope; HQ/AP design examples are not inherited grants.

**Required context:** verified identity/role scope, optional mapped object ID; no PII query transport assumed

**Risk / parity:** New runtime route and index authorization are not established; do not infer BSF-wide visibility from an old person-search grant.

**Disposition:** Reverse-link recommendation only after real delivery and authorization validation.

**New design:** [NW-004](FIGMA-APP-MAP.md#nw-004)

**Legacy source rules:** [OA-007](../legacy-ui/APP-MAP.md#oa-007); [ID-015](../legacy-ui/APP-MAP.md#id-015); [CO-017](../legacy-ui/APP-MAP.md#co-017); [CO-007](../legacy-ui/APP-MAP.md#co-007)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| OA-007 | Active routes /finda/user and /user-management/user (both aliases load UserManagementModule); both root prefixes have WelcomeAreaGuardService and both child routes use UserManagementGuardService. |
| ID-015 | Accounts library local /find-a-user in both apps; host prefix /accounts or /welcome. User-management route has no local child MsalGuard in either route tree. |
| CO-017 | MyBSF shell /group -> bsf-groups list, class-scoped list/editor, and member routes. |
| CO-007 | MyBSF shell /locations -> bsf-locations routes for list, create, and update/:locationId. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): OA-007-A01, OA-007-A02, OA-007-A03, OA-007-A04, ID-015-A01, CO-017-A01, CO-017-A02, CO-017-A03, CO-017-A04, CO-017-A05, CO-007-A01, CO-007-A02, CO-007-A03

<a id="h19"></a>
### H19 — Manage person-linked attachments

**Entry / trigger:** Proposed legacy person summary > Person Detail / Documents in new workspace, only for records with a verified destination. Child permission/consent links remain H06/H07.

**Audience:** Verified new document reader/uploader and selected-person scope, independently authorized.

**Required context:** mapped business person ID, verified Person Detail Documents destination, document category/form ownership if relevant

**Risk / parity:** Child generic Documents destination is not established by NP-005. Do not map local IdentityUser ID to business person ID or treat file upload as compliance/signature completion.

**Disposition:** Reverse-link recommendation only after real delivery and object/role mapping.

**New design:** [NP-005](FIGMA-APP-MAP.md#np-005)

**Legacy source rules:** [ID-006](../legacy-ui/APP-MAP.md#id-006); [ID-016](../legacy-ui/APP-MAP.md#id-016)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| ID-006 | Accounts library local account/:personId/profile-in-person/general-in-person; host /accounts or /welcome. Profile navigation lists General and Children Information; member-license navigation is separately permission-gated. |
| ID-016 | Accounts library local /user-management/user/:id in both apps; no local child route guard is shown. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): ID-006-A01, ID-006-A02, ID-006-A03, ID-016-A01

<a id="h20"></a>
### H20 — Open facility/FUA documents in LMDS

**Entry / trigger:** Location Detail > Documents > open document record (NG-E044); upload flow also designed.

**Audience:** LMDS audience and authorization must be established; facility-list visibility is not document access/upload authority.

**Required context:** mapped shared location/facility identity, LMDS document/FUA identity

**Risk / parity:** LMDS may already provide the document outcome. Do not count this as new-only or route document links to the old location editor. Distinguish shared locationId from classLocationId and address-only matches.

**Disposition:** Resolve LMDS ownership, existing capabilities, access and supported links before classifying novelty or cutover.

**New design:** [NG-012](FIGMA-APP-MAP.md#ng-012)

**Legacy source rules:** LMDS owner/version and existing workflows are not established by the available legacy baseline.

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): 

<a id="h21"></a>
### H21 — Create a group fellowship with selected calendar audiences

**Entry / trigger:** Proposed eligible legacy group/calendar action > Create fellowship in new workspace.

**Audience:** Group Leader: own group and prefilled fellowship type only; Class Staff: explicitly authorized group audience.

**Required context:** explicit legacy product identity (not Online format), mapped canonical group/class identity, effective role, calendar owner, mapped shared location ID or fresh location selection

**Risk / parity:** Resolve product and canonical group mapping; Online meeting format does not prove BSF Online product. Map legacy classLocationId through its associated shared location, never reuse it as locationId; use a fresh location selection if no mapping exists. New-only fellowship may have no legacy attendance meeting; resolve calendar ownership and event-type eligibility.

**Disposition:** Reverse-link recommendation only after real delivery and calendar ownership resolution.

**New design:** [NW-008](FIGMA-APP-MAP.md#nw-008)

**Legacy source rules:** [OG-005](../legacy-ui/APP-MAP.md#og-005); [CO-009](../legacy-ui/APP-MAP.md#co-009)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| OG-005 | Shell prefix /mygroup; local /create and /edit or /edit/:userId. /mygroup/create and /mygroup/edit are guarded by GroupGuardService; /mygroup/edit/:userId is the selected-user context. Normal leader menu entry targets /mygroup/edit; create is launched from NoGroup. |
| CO-009 | MyBSF shell /calendar -> bsf-calendar local routes manage/:classId, create-for/study/:studyId/meeting/:classLocationId, and edit-for/study/:studyId/meeting/:classLocationId. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): OG-005-A01, OG-005-A02, OG-005-A03, CO-009-A01, CO-009-A02, CO-009-A03, CO-009-A04, CO-009-A05

<a id="h22"></a>
### H22 — Meeting polls and activation

**Entry / trigger:** Proposed eligible meeting tools > Legacy Polls; no native new poll editor is evidenced.

**Audience:** Actors authorized for the canonical legacy meeting and host/poll controls; MSAL-only route presence is not a role grant.

**Required context:** explicit legacy product identity, canonical onlineMeetingId, class/group and meeting state

**Risk / parity:** Do not infer BSF Online from Online format or fabricate a legacy meeting ID for a new fellowship. Keep working poll-library activation/deactivation separate from inactive create/edit/duplicate/delete lifecycle SM-019.

**Disposition:** Continuity/retirement decision for retained polling; only supported existing-meeting targets.

**New design:** [NW-009](FIGMA-APP-MAP.md#nw-009); [NG-004](FIGMA-APP-MAP.md#ng-004)

**Legacy source rules:** [SM-017](../legacy-ui/APP-MAP.md#sm-017); [SM-018](../legacy-ui/APP-MAP.md#sm-018); [OG-013](../legacy-ui/APP-MAP.md#og-013)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| SM-017 | MyBSF /my-polls/:onlineMeetingId, with MsalGuard on the shell route and library-local ':onlineMeetingId' route. |
| SM-018 | Inside /my-polls/:onlineMeetingId landing, in the Polls list tabs. |
| OG-013 | Embedded in /mytraining or /mytraining/:id; banners and member groups render only after relevant training details load. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): SM-017-A01, SM-017-A02, SM-018-A01, SM-018-A02, SM-018-A03, SM-018-A04, OG-013-A01, OG-013-A02, OG-013-A03, OG-013-A04

<a id="h23"></a>
### H23 — Personnel and church/location change requests

**Entry / trigger:** Proposed relevant class/location/personnel settings > Request personnel or church/location change. Limit to the legacy supported request types.

**Audience:** The exact legacy request-action rules and selected class/meeting scope; a headquarters-locked field is not permission to edit directly.

**Required context:** class ID, legacy class meeting/classLocation identity, supported request type, effective date and affected personnel/location details

**Risk / parity:** New direct role/contact/settings edits are not the old request process. Submission does not prove an applied change. Legacy BankInfo/EditMeeting request choices are disabled; do not invent those fallbacks.

**Disposition:** Conditional bridge if the request/approval operating process is retained; decide whether new authorized direct editing replaces it.

**New design:** [NW-010](FIGMA-APP-MAP.md#nw-010); [NG-009](FIGMA-APP-MAP.md#ng-009); [NP-014](FIGMA-APP-MAP.md#np-014)

**Legacy source rules:** [CO-010](../legacy-ui/APP-MAP.md#co-010)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| CO-010 | MyBSF shell /home or /change-request -> bsf-change-request select and class-scoped or unscoped personnel/church routes. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): CO-010-A01, CO-010-A02

<a id="h24"></a>
### H24 — Own-account security and phone MFA

**Entry / trigger:** Proposed own Profile > Account Settings/Security > supported existing self-service security, or the confirmed identity-provider flow. This is not staff MemberSupport.

**Audience:** The authenticated owner of the mapped account and the exact existing verification/state rules; no selected-person staff delegation is inferred.

**Required context:** mapped own business-person/account identity, confirmed account/IdP owner, target-owned verification challenge/state

**Risk / parity:** Phone MFA enrollment/status/edit and skip allowances are not established by a generic new Verify Account or Q&A screen. Do not conflate local IdentityUser auth, unauthenticated recovery or staff MFA reset. Never transport passwords, security answers or OTPs in URLs.

**Disposition:** Conditional bridge after resolving actual self-service/IdP ownership and delivered replacement coverage.

**New design:** [NA-009](FIGMA-APP-MAP.md#na-009); [NA-014](FIGMA-APP-MAP.md#na-014); [NA-015](FIGMA-APP-MAP.md#na-015)

**Legacy source rules:** [ID-008](../legacy-ui/APP-MAP.md#id-008); [ID-009](../legacy-ui/APP-MAP.md#id-009); [ID-010](../legacy-ui/APP-MAP.md#id-010); [ID-011](../legacy-ui/APP-MAP.md#id-011); [ID-012](../legacy-ui/APP-MAP.md#id-012); [ID-013](../legacy-ui/APP-MAP.md#id-013)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| ID-008 | Accounts library local settings/password; BSF Online host /accounts or /welcome. MyBSF host /accounts or /welcome; MyBSF /accounts root uses CanActivateSession, while the child password route itself has no MsalGuard. BSF Online password route also has no child MsalGuard. |
| ID-009 | Accounts library local settings/email; both account route trees attach MsalGuard to email. Host shell prefix is /accounts or /welcome. |
| ID-010 | Accounts library local settings/language; both account route trees attach MsalGuard. Host prefix is /accounts or /welcome. |
| ID-011 | Accounts library local settings/security and security-questions; welcome flow uses /welcome/security-questions. BSF Online question route uses MsalGuard/canDeactivate; MyBSF also uses SecurityQuestionsAccessGuard. |
| ID-012 | Accounts library local /mfa-options routes to MfaPhoneComponent; follow-on phone/validation routes require MsalGuard and MfaAccessGuard. Host entry is /welcome/mfa-options or the guarded accounts context. |
| ID-013 | Accounts library local settings/security embeds MFA settings only when feature/person flags allow it; setup and phone validation routes are separate. |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): ID-008-A01, ID-009-A01, ID-009-A02, ID-010-A01, ID-011-A01, ID-011-A02, ID-011-A03, ID-012-A01, ID-012-A02, ID-013-A01, ID-013-A02

<a id="h25"></a>
### H25 — Existing support, ticket and contextual chat handoff

**Entry / trigger:** Proposed Help/Support entry to the approved existing support site or contextual launcher; no such native destination contract is established by the new AI Chat screen.

**Audience:** Actors eligible for the existing configured support/launcher path; public versus authenticated support scope must remain distinct.

**Required context:** confirmed support provider/entry, supported product/UI-language/context fields only, independently authenticated support identity if required

**Risk / parity:** Resource Library AI, sign-in/self-service identity flows and staff recovery are not automatically the same support destination. Verify supported context transport; do not add credentials, unnecessary PII or grant-bearing parameters. External support interior is not mapped by the source launcher.

**Disposition:** Conditional continuity/owner decision if the support workflow is retained; resolve provider and new entry policy.

**New design:** [NW-001](FIGMA-APP-MAP.md#nw-001); [NW-003](FIGMA-APP-MAP.md#nw-003); [NA-020](FIGMA-APP-MAP.md#na-020)

**Legacy source rules:** [NC-011](../legacy-ui/APP-MAP.md#nc-011)

| Legacy ID | Source-backed entry / route pattern |
| --- | --- |
| NC-011 | Online menu > Support > Contact; context-specific MyBSF widget |

Exact qualifying action-rule IDs (actors, scope, state and source links are in [actions-and-access.csv](actions-and-access.csv)): NC-011-A01, NC-011-A02

