Skip to main content

Notifications

The Notifications screen is the portal inbox that surfaces every notification routed to the current user. Each row is a single delivery — one invoice status change matched by a Notification Rule, wrapped with the right subject, message and metadata, and persisted in the F564253 table.

The page is the read side of the notification system. The write side — which event triggers what notification, sent to whom, on which channels — lives in the Notification Rules editor.

A complementary bell in the top utility bar polls the unread count every 30 s and previews the last six entries without leaving the current page; clicking a preview opens the linked invoice modal directly.

The page applies regardless of source system — JD Edwards, SAP, NetSuite or a custom ERP — since the notification payload is built from the persisted UBL invoice, not from the raw source XML.


Opening the inbox

  • Sidebar → Management → Notifications.
  • Or click the 🔔 bell in the top utility bar, then View all at the bottom of the dropdown.
  • The inbox always opens on the All tab; switch to Unread to focus on what has not been acknowledged yet.

At a glance

Notifications↻ Refresh✓ Mark all readAllUnread (3)9904Invoice 12345 RI 00070 — PA RejectREJ_ADR — Recipient unknown on the PPF directory12345 · RI · 00070 · REJ_ADR · INV-correction · pa-rejection2 min ago×10Invoice 12300 RI 00001 — DepositedPA confirms deposit12300 · RI · 00001 · pa-success14:329906Invoice 12299 RI 00001 — PA PendingAwaiting PA import12299 · RI · 00001 · pa-pendingYesterday9903Invoice 12299 RI 00001 — Sent to PAsubmission_id=ABC-4212299 · RI · 00001 · pa-sentYesterday9901Invoice 12298 RI 00001 — Validated12298 · RI · 00001 · validation-successYesterdayToolbarrefresh + mark all readFilter tabsAll vs Unread (count)Unread accentleft blue stripe + tinted bgPer-row dismissremove without marking readStatus badgecatalog-driven coloursMeta linedoc · dct · kco · reason · action · ruleClick → invoice modalmarks the row read in passing

A notification row carries five visual cues: the status badge at the left (colour from the statuses catalogue), the subject (default Invoice {doc} {dct} {kco} — {statusLabel}), the message (the rule's body or the dispatcher's default), the meta line with the canonical identifiers, and a right column with relative time + the dismiss button.


Toolbar actions

ActionEffect
RefreshRe-fetches the inbox from /api/notifications, honouring the active tab filter (All vs Unread).
Mark all readPosts to /api/notifications/mark-all-read. Every row that was unread switches to read; the bell badge clears at the next 30 s poll, or immediately on the next focus event. Disabled when there are no unread rows.
Filter tabsAll shows every undismissed row; Unread keeps only the rows where read = false. The unread tab carries the ( N ) count next to its label.

A row, in detail

ElementSourceMeaning
Left accent stripe + tinted backgroundread = falseUnread rows. The stripe disappears the moment the row is marked read.
Status badgeNTEV01 joined to the statuses catalogueThe status that fired the notification. The badge background, foreground and border come from the catalogue colours, so 9904 / PA Reject is red, 10 / Deposited is green, 9906 / PA Pending is orange, etc.
Subject (top line)NTSUBJ (rule's emailSubject, or the dispatcher default)Short, human-readable headline. The default is Invoice {doc} {dct} {kco} — {statusLabel}.
Message (second line)NTMSGE (rule's emailBody, or the dispatcher default)The fuller body text. Truncated on overflow; the modal that opens on click carries the full lifecycle.
Meta lineNTDOC · NTDCT · NTKCO · reason · action · ruleCanonical invoice identifiers, plus the PA rejection reason / expected action / rule name when present. The reason and action are resolved against the rejection-reason-codes and action-codes catalogues, so the user reads the human label, not the bare code.
Relative timeNTUPMJ + NTTDAYjust now, 2 min ago, 14:32 (today), Yesterday, then the absolute dd/mm/yyyy hh:mm for older entries.
Dismiss buttonper-rowRemoves the row from the inbox without marking the rest as read.

Clicking anywhere in the row body opens the invoice detail modal for the linked (doc, dct, kco) triplet — same seven tabs as the E-Invoicing page (Summary, Parties, Lines, VAT, Notes, History, PDF). The row is marked read on the way through.


The 🔔 bell in the navbar

A complementary entry sits in the top utility bar of every page. Three things it does:

  1. Polls every 30 s the unread count (GET /api/notifications/unread-count). A red badge shows the count when greater than zero.
  2. Drops down the last 6 entries on click — same shape as an inbox row, but condensed: subject, message, doc reference, relative time. Unread rows carry the same blue dot used in the inbox.
  3. Clicking a preview marks the entry read and opens the invoice modal directly. The bell uses a small dance to handle both cases: when the user is already on the inbox, it dispatches a nomaubl:open-notification window event so the modal opens without a remount; otherwise it stores the payload in sessionStorage under notif-auto-open and navigates to /notifications, which drains the entry on cold mount.

A View all footer at the bottom of the dropdown links to /notifications for the full inbox.

The bell stays visible regardless of authentication state: when global.authEnabled != "Y", the inbox shows the broadcast notifications written under the NTUSER='*' sentinel, and the bell counts them.


Storage & retention

Every delivered notification is one row in F564253 (Oracle + Postgres). The columns the inbox cares about are:

ColumnTypeRole
NTUKIDnumericPrimary key. Unique across the whole table — the row addresses no longer carry the (doc, dct, kco) triplet.
NTUSERstringResolved username, or * when running with auth disabled (broadcast).
NTEV01string0 for unread, 1 for read. The bell badge counts rows where NTEV01 = 0.
NTSUBJ / NTMSGEstringSubject / message body.
NTDOC / NTDCT / NTKCOmixedThe invoice triplet; nullable for system-level alerts that don't link to a specific invoice.
NTUPMJ / NTTDAYjul / hmsIssue date and time. The composite index on (NTUSER, NTEV01, NTUPMJ DESC) keeps the bell badge query and the inbox sort fast.

A daily retention sweep in BackgroundScheduler deletes rows older than global.notificationsRetentionDays (default 90 days). Set the property to 0 to disable the sweep — useful for installations that want to keep notifications indefinitely or that drive their own retention policy.


Tips & best practices

  • Triage with the Unread tab. Switching to Unread is faster than scrolling the All feed; Mark all read clears every row in one click when the day-end review is done.
  • Use the meta line for context. The reason · action · rule fragment tells you why a notification fired — useful when several rules cover overlapping status codes.
  • The bell is a peek, not the inbox. It only shows the last six entries; for triage of every undismissed row, open Notifications. The View all footer of the dropdown is the one-click shortcut.
  • Dismissing is not the same as marking read. Dismiss removes the row from your inbox; Mark read leaves it in All with no accent. Use Dismiss for entries that don't need an audit trail.
  • For PA rejections, click through. A 9904 / PA Reject row carries the reason in the meta line, but the lifecycle on the invoice modal's History tab carries the full PA payload and the expected action.
  • Configure retention. Notifications can grow fast — every status change of every invoice produces a row when a matching rule fires. The 90-day default fits most installations; raise or lower it via global.notificationsRetentionDays.