Skip to content

CAP-PFM-NOT-009Manage a personal notification inbox

Markdown

CAP-PFM-NOT-009

Manage a personal notification inbox

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationPartially observed

KindCapabilityProduct areaPlatformModuleStaff Notifications and Association CommunicationsRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Staff browse, read and archive their own notices.The inbox presents the implemented summary and navigation behavior.
Surfaces
consoleapi
Intent sources
services-platform:docs/milestones/PLAT-M23-notifications-core-and-in-app.md#D2services-platform:docs/proposals/notifications/23-decisions.md#D-06services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#3. How it works for the userservices-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#PLAT-M23-S01services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#PLAT-M23-S02services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#PLAT-M23-S03services-platform:docs/milestones/plans/PLAT-M23-plan.humanized.md#PLAT-M23-S13

Controls

29 controls apply, from the corpus control catalogue.

TC-AVL-005 TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-002 TC-DAT-003 TC-IAM-001 TC-IAM-002 TC-IAM-004 TC-IAM-005 TC-PI-001 TC-PI-002 TC-PI-003 TC-PI-005 TC-PRV-001 TC-PRV-002 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-TEN-004 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.notifications.useapirecord
platform.notifications.useconsoletenant

Business Rules

10 rules, 8 to be proved before approval. A rule's product intent is derived from its origin: 1 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
Built-in console roles include personal notification permission; every personal notification route rejects callers lacking it.
no proof recorded yet
permissionapi, consoletest
services-platform:modules/notifications/tests/unit/permissions.spec.js#puts use at tier read, so every built-in console role carries it, and open to customers
02must prove
Proposed
Personal routes derive identity from the signed-in user rather than accepting a user selector; Another person's item is not found and cannot change; portal accounts are excluded.
no proof recorded yet
permissionapi, servicetest
services-platform:modules/notifications/tests/e2e/notifications.e2e.spec.js#finds nothing of another person’s notification, whoever asks
03must prove
Proposed
The inbox returns newest-first notices, normally omitting archived items; Unread, category and since filters apply; pages default to fifty and cap at one hundred; invalid filters, cursors and sizes identify the offending parameter.
no proof recorded yet
validationapi, servicetest
services-platform:modules/notifications/tests/e2e/notifications.e2e.spec.js#refuses a bad filter, cursor or page size with a 400 naming the parameter
04must prove
Proposed
Unread totals and category totals include only unread, unarchived, applicable notices; the unread list follows the same exclusions.
no proof recorded yet
calculationservicetest
05must prove
Proposed
Opening marks an item read; repeated reading preserves the original read time; unread, archive and restore operations affect only the caller's item and return its updated state.
no proof recorded yet
lifecycleservice, consoletest
services-platform:modules/notifications/tests/e2e/notifications.e2e.spec.js#marks one read and unread, archives and unarchives it, answering it each time
06must prove
Proposed
Mark-all-read updates the caller's unread, unarchived items, optionally restricted by category or creation cutoff; it returns the changed count and is idempotent.
no proof recorded yet
lifecycleservicetest
services-platform:modules/notifications/tests/integration/services/persistence/instances.integration.spec.js#marks every unread instance read, but neither an archived instance nor another person’s
07must prove
Proposed
A personal test request targets only the caller through the complete pipeline, supplying default wording when the message is omitted.
no proof recorded yet
policyapi, service, consoletest
services-platform:modules/notifications/tests/e2e/notifications.e2e.spec.js#puts a test notification in the caller’s own list, through the whole pipeline, and nobody else’s
08
Proposed
The inbox groups rows under Today, Yesterday and dated headings, provides Unread, All and Archived views, highlights unread titles and labels superseded notices in muted styling.
policyconsoletest
react-console:lib/notifications/__tests__/model.test.ts#groups under Today, Yesterday, then dates, keeping the order given
09must prove
Confirmed
The intended bell combines unread required-attention items and notifications in one count and presents notifications alongside Needs Your Attention.
no proof recorded yet
calculationconsoledocumented
10
Proposed
Navigation exposes the Notifications page only when the user has personal notification permission.
permissionconsoleobserved

Scenarios

IdGivenWhenThenProvenance
01A nonadministrative clerk account for Jane receives a Batch posting assignment.Jane opens Notifications and follows the assignment item.The item becomes read, its unread total decreases by one and My Responsibilities opens.test
02Jane has moved an item out of her normal inbox.She selects Archived.The item is listed there and restoration returns it to the normal inbox.test

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.