Appearance
Notifications
| Backlog field | Value |
|---|---|
| Story ID | AP-GS-007 |
| Epic | General Settings |
| Story type | Business workflow |
| Review status | Draft - business analyst and business owner review required |
| Source evidence | AppsPortal.Apis controller, application command/query handlers, validators, domain entities, and matching MFE workflow where available |
| Last source review | 2026-07-10 |
User story
As administrators and users, I want to configure notification services and review company or personal notifications so that important business events reach the right users.
Acceptance criteria
- Only authorized users can view or execute the feature's actions.
- Required business data, active dependencies, tenant/branch scope, and current document state are validated.
- Invalid requests return actionable validation errors without applying a partial change.
- Search, list, view, print, and export operations use the same authorized business scope.
- Material create, edit, status, approval, posting, reversal, and integration actions are auditable where applicable.
- Financial or stock effects are applied atomically and no more than once.
Business rules
Required
Service/channel identity, enabled state, recipients/rules, and timing are required for enabled notifications.
Optional or conditional
Templates, escalation, quiet hours, and optional channels are configurable.
Action behavior
Save changes future delivery; notification center read/mark actions do not change source business documents.
Blocking rule or downstream effect
Delivery failure is logged/retried and must not roll back the originating committed transaction.
Frontend page coverage
The following UI coverage is sourced from the pulled MFE route configuration. A Module-level supporting artifact mapping is evidence of a reachable screen, but requires BA confirmation that it belongs to this story rather than a more specific feature story.
| Route/page | Component | Mode | Route permission/guard | Mapping confidence | Source |
|---|---|---|---|---|---|
| (module default) | NotificationCenterComponent | List/navigation | Permission: AppGeneralSettingsPermissions.NotificationCenter_List; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:54 |
| (module default) | NotificationDetailsComponent | View/detail | Permission: AppGeneralSettingsPermissions.MyNotification_List; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:76 |
| (module default) | NotificationListComponent | List/navigation | Permission: AppGeneralSettingsPermissions.NotificationSettings_List; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:22 |
| center | NotificationsMainComponent | List/navigation | Permission: AppGeneralSettingsPermissions.NotificationCenter_List; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:44 |
| edit/:id | NotificationEditComponent | Edit | Permission: AppGeneralSettingsPermissions.NotificationSettings_Edit; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:32 |
| my-notifications | NotificationsMainComponent | List/navigation | Permission: AppGeneralSettingsPermissions.MyNotification_List; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:66 |
| notifications | Lazy-loaded route | List/navigation | No route-level permission/guard found in source window | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/general-setting.module.ts:323 |
| notifications/notification-service-timing | NotificationServicesComponent | List/navigation | No route-level permission/guard found in source window | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/general-setting.module.ts:330 |
| settings | NotificationsMainComponent | List/navigation | Permission: AppGeneralSettingsPermissions.NotificationSettings_List; Guards: PolicyAuthGuard | Feature token match | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/notification-routing.module.ts:12 |
Observed frontend fields and validation
| Component | Control | Observed frontend rule | Component source |
|---|---|---|---|
| NotificationEditComponent | channels | Required in component validator | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/pages/notification-edit/notification-edit.component.ts |
| NotificationEditComponent | isActive | Visible control; optional or API-dependent | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/pages/notification-edit/notification-edit.component.ts |
| NotificationEditComponent | service | Visible control; optional or API-dependent | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/pages/notification-edit/notification-edit.component.ts |
| NotificationServicesComponent | serviceName | Required in component validator | apps/erpHome/src/app/remote-entry/general-setting/pages/notification-services/notification-services.component.ts |
| NotificationServicesComponent | startTimeId | Required in component validator | apps/erpHome/src/app/remote-entry/general-setting/pages/notification-services/notification-services.component.ts |
| NotificationServicesComponent | status | Visible control; optional or API-dependent | apps/erpHome/src/app/remote-entry/general-setting/pages/notification-services/notification-services.component.ts |
Observed frontend actions
| Component | Click action/handler | Business review requirement | Component source |
|---|---|---|---|
| NotificationDetailsComponent | onView | Open the authorized record in view mode with its status, totals, lines, source and generated-document links; handle deleted, forbidden, and missing records without exposing stale data. | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/pages/notification-details/notification-details.component.ts |
| NotificationListComponent | onEdit | Open the identified editable record only with Edit permission; posted/locked records remain blocked by route or action state and list context must be recoverable on return. | apps/erpHome/src/app/remote-entry/general-setting/pages/notifications/pages/notification-list/notification-list.component.ts |
| RolesUsersComponent | onAdd | Document the enabled state, permission, input context, resulting API or navigation effect, success refresh, and concrete failure behavior for this handler. | apps/erpHome/src/app/remote-entry/admin/pages/AccessControl/roles-users/roles-users.component.ts |
| RolesUsersComponent | onDelete | Available only in deletable states with Delete permission; identify the record in confirmation, call delete once, remove/refresh the list row on success, and retain the row with the API reason on failure. | apps/erpHome/src/app/remote-entry/admin/pages/AccessControl/roles-users/roles-users.component.ts |
Page-specific frontend acceptance criteria
- (module default) - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: Permission: AppGeneralSettingsPermissions.NotificationSettings_List; Guards: PolicyAuthGuard
- (module default) - View/detail: Load an authorized immutable/detail representation with status-aware actions, linked records, print/export where exposed, and not-found/forbidden handling. Security observed: Permission: AppGeneralSettingsPermissions.MyNotification_List; Guards: PolicyAuthGuard
- center - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: Permission: AppGeneralSettingsPermissions.NotificationCenter_List; Guards: PolicyAuthGuard
- edit/:id - Edit: Load the identified record, enforce state/permission field locks, preserve concurrency identity, validate changes, and return without losing filters. Security observed: Permission: AppGeneralSettingsPermissions.NotificationSettings_Edit; Guards: PolicyAuthGuard
- my-notifications - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: Permission: AppGeneralSettingsPermissions.MyNotification_List; Guards: PolicyAuthGuard
- notifications - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: No route-level permission/guard found in source window
- notifications/notification-service-timing - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: No route-level permission/guard found in source window
- settings - List/navigation: Load an authorized paged/searchable list or navigation page; preserve filters/sort/paging and expose only permitted row and bulk actions. Security observed: Permission: AppGeneralSettingsPermissions.NotificationSettings_List; Guards: PolicyAuthGuard