---
id: CAP-PFM-NOT-010
title: Explain notification selection and delivery
feature: FEAT-PFM-NOT-03
product_area: platform
module: notifications
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - NT-ACC-0101
  - PLAT-M23-S12
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  react-console: baf6dae382d6f41dce976c7f848667ccc37e076f
intent_sources:
  - >-
    services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#3. How it
    works for the user
  - >-
    services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#PLAT-M23-S12
purpose: >-
  Recipients can understand the audience decision and the available delivery
  routes for a notice.
outcomes:
  - A notice explains recipient selection and recorded delivery outcomes.
  - Stored explanations connect the notice to its originating event.
concepts:
  - CON-PFM-NOT-003
actors:
  - ACT-PFM-027
surfaces:
  - console
  - api
preconditions: []
postconditions: []
permissions:
  - key: platform.notifications.use
    where_checked: api
    scope: record
rules:
  - id: BR-CAP-PFM-NOT-010-01
    statement: >-
      Notice detail includes explanatory lists for selected channels, skipped
      channels with reasons, recipient-selection rules and collapsed
      contributions, even when those lists are empty.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/notifications/tests/e2e/notifications.e2e.spec.js#reads
      one of its own with its why, and nobody else’s
    origin: none
  - id: BR-CAP-PFM-NOT-010-02
    statement: >-
      Recipient explanations distinguish direct selection, responsibility
      holding, delegation with an optional delegator name, responsibility
      fallback, role or permission holding, and HQ routing.
    kind: calculation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/notifications/tests/unit/audience-planner.spec.js#says
      a delegate covers the responsibility for the person they cover
    origin: none
  - id: BR-CAP-PFM-NOT-010-03
    statement: >-
      A nonblank producer-supplied audience reason replaces generic recipient
      wording; blank reasons retain the standard explanation.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/notifications/tests/unit/audience-planner.spec.js#uses
      the producer’s own words for the rule when the entry carries a reason
    origin: none
  - id: BR-CAP-PFM-NOT-010-04
    statement: >-
      Unavailable-channel explanations name the future milestone, absence of
      support for the definition, or the adapter's reason; Delivery summaries
      use the same explanations.
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js#says
      the milestone of a channel not yet available on the delivery summary, as
      the resolution does
    origin: none
  - id: BR-CAP-PFM-NOT-010-05
    statement: >-
      The explanation sheet combines recipient reason and delivery destination
      into a readable sentence, lists unused-channel reasons and omits raw
      reason tokens.
    kind: policy
    enforced_at:
      - console
    must_prove: true
    provenance: test
    source: >-
      react-console:components/notifications/__tests__/notifications.test.tsx#tells
      why in a sentence in the Why sheet
    origin: none
  - id: BR-CAP-PFM-NOT-010-06
    statement: >-
      Older notices lacking server-supplied wording receive client-generated
      explanations for recipient rules and skipped channels.
    kind: policy
    enforced_at:
      - console
    must_prove: false
    provenance: test
    source: >-
      react-console:lib/notifications/__tests__/model.test.ts#words each rule
      kind when there is no label
    origin: none
  - id: BR-CAP-PFM-NOT-010-07
    statement: >-
      Viewing a notice or its explanation grants no additional permission to
      act.
    kind: policy
    enforced_at:
      - service
    must_prove: false
    provenance: documented
    source: >-
      services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#D2.
      Does every console user get an inbox by default?
    origin: none
scenarios:
  - id: SC-CAP-PFM-NOT-010-01
    given: An administrator's assignment causes Jane to receive a Batch posting item.
    when: Jane opens its recipient explanation.
    then: >-
      The sheet identifies the administrator's assignment reason, console
      delivery and future e-mail availability.
    provenance: test
    source: >-
      react-console:acceptance/notifications/playwright/journeys/history/NT-ACC-0101.spec.ts#NT-ACC-0101
edge_cases: []
constraints: []
depends_on:
  - CAP-PFM-NOT-003
  - CAP-PFM-NOT-007
related:
  - CAP-PFM-NOT-009
  - CAP-PFM-NOT-011
journeys:
  - JNY-PFM-NOT-001
  - JNY-PFM-NOT-003
open_questions: []
evidence:
  - >-
    Pinned evidence inventory 1:
    services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md;
    services-platform:modules/notifications/tests/unit/audience-planner.spec.js;
    react-console:components/notifications/__tests__/notifications.test.tsx;
    react-console:acceptance/notifications/playwright/journeys/history/NT-ACC-0101.spec.ts
  - >-
    Pinned evidence inventory 2:
    services-platform:modules/notifications/tests/e2e/notifications.e2e.spec.js;
    services-platform:modules/notifications/tests/integration/services/centre/notification-centre.integration.spec.js;
    react-console:lib/notifications/__tests__/model.test.ts
controls: [TC-AVL-001, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-LOG-001, TC-MON-001, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Explain notification selection and delivery

## Purpose

Recipients can understand the audience decision and the available delivery routes for a notice.

## How It Works

A recipient opens the explanation for an inbox item. Platform returns recipient-rule and channel-resolution lists even when empty. Producer reasons take precedence over generic audience wording. Standard wording distinguishes direct selection, roles, permissions, responsibility holding and delegation. Skipped channels explain the unavailable milestone or adapter decision. The console combines those facts into a readable explanation. Older records can use client-generated explanations when server text is absent. Viewing the explanation leaves authorization for the underlying work unchanged.

The rule rows define this outcome; the acceptance set identifies existing proof and proposed checks. Implementation evidence alone does not approve the observed details.

## Relationships

Recipient selection supplies the eligible people and their audience explanations.

Channel processing supplies the delivery states and reasons inspected here.
