StackTrading Docs

SRS: UC_4.7.1 — Notification Center: Bell & Dropdown

FieldValue
BA in ChargeTrang Nguyen
Date Created2026-08-08
Versionv1.9
Document ReferencesRFQ_ Website and Dashboard Implementation V7.pdf (§Unique Measures — Notification Center) · RFQ_ Stack Trading Prop Tech V7.pdf (§3.2, S4.A WebSocket) · Zapier Integration V7.pdf (§3.1.12 Notification data model, Flow 23 — News Event Manager, Flow 24 — Overnight Margin & Swap Monitor) ·docs/BA/Common_rule/notification_center_matrix.md · docs/BA/UC_4.1-4.17/dashboard_sim/UC_4.7.1/QnA_init_docs.md (QN-4.7.1-01..05) · References/CR/2026-08-28_CHR67_finnhub-replaces-fxstreet/CR_summary.md (CHR_67)

UC_4.7.1 — Notification Center: Bell & Dropdown

1. Overview

FieldContent
IDUC_4.7.1
Use CaseNotification Center: Bell & Dropdown
DescriptionA bell icon in the persistent header (Ref:UC_4.1.1 §2 Screen Description) with an unread-count badge. Clicking the bell opens a dropdown panel — this panel is the full notification history. The panel hosts the filter tabs (owned by UC_4.7.2) and the full paginated notification list with mark-as-read and empty state (owned by UC_4.7.3). This UC owns only: the bell icon, the unread-count badge, and the panel's open/close mechanism, Per A-08. 3 of the 5 filter categories (Risk Warning, System Status, Level Events) have a confirmed backend event feeding this UC today; the remaining 2 (Payout Events, Mentor/Community Prompts) are documented as placeholder tabs only (Ref: BR_4.7.1.1).
Zapier FlowFlow 23 — News Event Manager (drives NC-RISK-01…04) · Flow 24 — Overnight Margin & Swap Monitor (drives NC-RISK-05, NC-SYS-01) (Ref:zapier_v7_full.txt §Flow 23/§Flow 24)
Zapier TableTable C — Notional Cap / Stop Threshold Registry (consumed by Flow 23's enforcement step, NC-RISK-03)
3rd Party

🎨 Design reference: Bell — Collapsed · Bell — Expanded

2. Trigger

  • The Dashboard layout (Ref: UC_4.1.1) has rendered — frontend calls GET /notifications for the initial unread badge count.
  • A NOTIFICATION WebSocket event arrives while the user is on the Dashboard (Source: QN-4.7.1-03).
  • User clicks the bell icon to open/close the dropdown panel.

3. Pre-conditions

  • User is on the Dashboard (Ref: UC_4.1.1 §1 Overview).
  • Applies to both SIM and LIVE account types — the bell icon, unread badge, and panel open/close mechanism are the same shared UI across account types. Only the underlying event set differs: SIM uses the 14 confirmed message patterns (Ref: BR_4.7.1.1); LIVE uses a separate event set (Ref: UC_4.12.4).

4. Post-conditions

  • The bell badge shows the current total unread count.
  • The dropdown, when open, renders the full paginated notification history starting at page 1, ordered by timestamp_utc descending (owned by UC_4.7.3; not repeated here).

5. Basic Flow

  1. On Dashboard load, frontend calls GET /notifications (user_id, status=All) to populate the bell badge count only. The dropdown's list content is not fetched until the panel is opened.
  2. Backend returns the total unread count.
  3. Frontend renders the unread-count badge on the bell icon from the total unread count in the response (Source: QN-4.7.1-03).
  4. User clicks the bell icon → dropdown panel opens, rendering the filter tabs (owned by UC_4.7.2) and the full paginated notification list, page 1 (owned by UC_4.7.3; not repeated here).
  5. [If a NOTIFICATION WebSocket event arrives] → frontend prepends the new notification to the in-memory list and increments the unread badge immediately, without re-calling GET /notifications (Source: QN-4.7.1-03).
  6. User clicks the bell icon again, or clicks outside the dropdown → dropdown closes.

6. Alternative Flow

  • [If the user selects one of the 2 unconfirmed category tabs] (Payout Events / Mentor/Community Prompts) → the tab is shown and selectable (per A-13), but the list area renders the empty state, since no event source is wired for these categories yet (Ref: BR_4.7.1.1).
    • Context: this is a [BLOCKED — pending client confirmation] gap, not a bug; do not treat the empty list as an error state.
  • [If the user selects the Level Events tab] → the tab renders the 2 NC-LVL-* notifications from BR_4.7.1.1, same as any other confirmed category — Level Events is confirmed on both SIM and LIVE (Ref: BR_4.7.1.1).

7. Exceptional Flow

  • WebSocket disconnects while the dropdown is open: the currently-rendered list stays as last-known-good; no error banner. On reconnect, frontend re-calls GET /notifications to resync (same reconciliation pattern as UC_4.9.1 QN-4.9.1-11 — not yet documented in this repo).

8. Business Rules

BR_4.7.1.1: SIM Event Set — 14 Confirmed Message Patterns

SIM uses 14 confirmed message patterns (across 8 distinct Event IDs), across the 3 categories in BR_4.7.1.1. NC-RISK-05 and NC-SYS-01 each fire from a single Flow 24 webhook but carry several distinct Alert_Level values, each with its own severity and message pattern — shown below as separate rows (same Event ID, different Alert_Level, noted at the start of the Trigger Condition cell) so each pattern is traceable on its own. The 2 NC-LVL-* rows are the Level Events mapping (Ref: BR_4.7.1.1). NC-LVL-02 (Drawdown Defense Activated) is excluded from this SIM event set — it is a LIVE-only event, documented in UC_4.12.4 (Source: BA correction, 2026-08-28):

Event IDCategorySeverityTrigger ConditionMessage PatternNote
NC-RISK-01Risk WarningWARNFlow 23, T-30 min checkpoint before a confirmed high-impact news event — fires only ifImpact_Level == "High" AND Asset_Class is relevant to the event's currency"News Warning: [Event] in 30 mins"
NC-RISK-02Risk WarningWARNFlow 23, T-10 min checkpoint — same filter conditions as T-30"News Warning: [Event] in 10 mins"
NC-RISK-03Risk WarningCRITICALFlow 23, T-1 min checkpoint — News Protocol enforcement activates (POST /enforce-news-event)"News Protocol Active. Holding Limits Enforced."
NC-RISK-04Risk WarningINFOFlow 23, T+1 min checkpoint — enforcement window closes"News Protocol Complete. Trading Resumed."
NC-RISK-05Risk WarningINFOAlert_Level = Warning_60 — Flow 24 webhook, 60 minutes before [Asset_Class]'s overnight enforcement cycle begins (Node.js Dynamic Timekeeper, per-asset dynamic schedule)"⏰ 60-Minute Risk Warning: The enforcement cycle for [Asset_Class] begins in 1 hour. Verify your account meets both session loss thresholds and absolute overnight holding limits."
NC-RISK-05Risk WarningWARNAlert_Level = Warning_30 — Flow 24 webhook, 30 minutes before the compliance engine runs / [Asset_Class] order entry locks"⚠️ 30-Minute Risk Warning: The compliance engine runs in 30 minutes. Portfolios violating the 25% notional limit or absolute CME overnight margin rules must be adjusted before [Asset_Class] order entry locks."
NC-RISK-05Risk WarningCRITICALAlert_Level = Warning_10 — Flow 24 webhook, 10 minutes before new position entry for [Asset_Class] locks"🚨 10-Minute Final Warning: New position entry for [Asset_Class] locks in 10 minutes. Secure your compliance state immediately to prevent automated system trimming."
NC-RISK-05Risk WarningCRITICALAlert_Level = Lockout_Active — Flow 24 webhook, order-entry lockout window is now active for [Asset_Class] (follows Warning_10)"🔒 Enforced: New order entry is frozen for [Asset_Class]. Portfolios are locked in liquidation only mode for the final execution window."Trigger begins at the T-3min mark (Pre-Close Entry Lockout milestone, Dynamic Timekeeper) per Flow 23/24 logic — fires immediately afterWarning_10 closes the T-3min window (Ref: UC_6.1.2 Margin Enforcement trigger chain, docs/BA/scratch/Stage4_LiveTrading_RiskManagement_Analysis.md). Not pending.
NC-RISK-05Risk WarningWARNAlert_Level = Halt_Active — Flow 24 webhook, [Symbol] enters a scheduled intraday maintenance halt"🛑 Market Halt Enforced: [Symbol] has entered its scheduled intraday maintenance pause. Electronic order routing is frozen across the execution networks."
NC-SYS-01System StatusINFOAlert_Level = Enforcement_Complete — Flow 24 webhook, audit cycle finalizes"✅ Audit Cycle Complete: [Asset_Class] margin compliance check finalized. Overnight risk states are locked and archived to the ledger."⚠️Pending Stage 4 UC SRS — Margin Enforcement / Flow 24 Notification Matrix logic not yet formally documented (Ref: UC_6.1.2, UC_6.2.2, docs/BA/scratch/Stage4_LiveTrading_RiskManagement_Analysis.md, BA doc status: Todo)
NC-SYS-01System StatusINFOAlert_Level = Halt_Cleared — Flow 24 webhook, [Symbol]'s maintenance halt window ends"🔓 Market Halt Cleared: The maintenance window for [Symbol] has concluded. Order routing networks have re-opened for execution."
NC-SYS-01System StatusINFOAlert_Level = Session_Open — Flow 24 webhook, [Asset_Class]'s new trading session opens"🚀 New Trading Session Open: The electronic order books are open for [Asset_Class]. Baseline day trading margins are active across all whitelisted roots."
NC-LVL-01Level EventsINFO"Flow 4A":Net_PnL >= Profit_Target (client image wording — source docs define this as Flow 4's Promotion Path, triggered by Profit_Target_Hit on Net Equity, not Net_PnL)"Promotion unlocked. You are now Level [Next_Level]."
NC-LVL-03Level EventsCRITICAL"Flow 7A": Account Failed/Terminated — max drawdown reached,Defense_Used = True, resignation = true (client image wording — source docs define this as Flow 7's Liquidation branch)"Account terminated. Trading access has been revoked."

BR_4.7.1.2: Notifications Are Discrete Messages, Not Live-Ticking Countdowns

Each of the confirmed events (Ref: BR_4.7.1.1) is pushed as a discrete notification row with static text at its own checkpoint (e.g. T-30, T-10, T-1, T+1 for the News Protocol sequence). The target_timestamp field exists in the data model (nullable) but is not used by this UC to render a client-side ticking countdown inside a notification message — that live-countdown behavior belongs to the Market Status Widget (Ref: UC_4.1.3), a separate header component. (Source: QN-4.7.1-04)

BR_4.7.1.3: Real-Time Update via WebSocket Push

The bell badge (and, when the dropdown panel is open, the notification list rendered by UC_4.7.3) update immediately on receiving a NOTIFICATION WebSocket event — no polling and no re-call to GET /notifications is needed for live updates. The badge-only GET /notifications call is made once, on initial Dashboard mount; the panel's own list fetch (page 1) happens separately, each time the panel is opened (Ref: UC_4.7.3). (Source: QN-4.7.1-05)

BR_4.7.1.4: Flow 23 — News Event Currency-Relevance Mapping Logic

Elaborates the two Zapier filter conditions already referenced in NC-RISK-01NC-RISK-04's Trigger Condition (Ref: BR_4.7.1.1):

  1. Step 1 — Ingestion: Flow 23 calls a 3rd-party news API — Finnhub — to receive incoming Event Name / Impact_Level / Timestamp / Currency payloads. Finnhub is a client-confirmed change replacing the placeholder provider example (FXStreet) named in the original Zapier Integration V7.pdf §Flow 23 text ("Trigger: Webhook from External News Provider (e.g. FXStreet)") — no longer a source conflict; Finnhub is the confirmed provider going forward.
  2. Step 2 — Filtering: each incoming event passes through 2 filters (Source: Zapier Integration V7.pdf §Flow 23):
    • Filter 1: Impact_Level == "High"?
    • Filter 2: Is Asset_Class relevant to the event's Currency? — the source states only this one-line condition; the relevance breakdown below is confirmed by the client:
      • Futures Traders: all whitelisted Futures indices, commodities, and treasuries (ES, NQ, CL, GC, etc.) are US-domiciled and priced/settled in USD. Any high-impact event with Currency == "USD" is automatically marked relevant and triggers the news protocol for all Futures traders — no per-account position scan needed.
      • Forex Traders: the system dynamically scans the trader's active open position metrics. If the account holds an open position on a currency pair where either the base or the quote currency matches the event's Currency (e.g., an open EURUSD position when a high-impact EUR or USD event is released), the account is flagged relevant/affected.
  3. Step 3 — Persistence & Notification Sequencing: events passing both filters are saved into the system's news-event store, which then drives the sequential T-30 / T-10 / T-1 / T+1 notification checkpoints (NC-RISK-01NC-RISK-04, Ref: BR_4.7.1.1).
  4. Enforcement logic (the T-1 min POST /enforce-news-event universal P&L check, Stop_Threshold flatten, and Notional_Cap trim/liquidation actions) is out of scope for this UC — refer to the Stage 4 — Live Trading & Risk Management UC covering Flow 23 enforcement (Ref: UC_6.2.1, docs/BA/scratch/Stage4_LiveTrading_RiskManagement_Analysis.md, same reference already used for NC-RISK-03 in BR_4.7.1.1).

(Source: Zapier Integration V7.pdf §Flow 23 — News Event Manager, for Steps 1–3's filter/sequencing structure. Finnhub provider name and the Futures/Forex relevance breakdown: client-confirmed change, formalized as CHR_67 — Ref: References/CR/2026-08-28_CHR67_finnhub-replaces-fxstreet/CR_summary.md.)

9. Screen Description

No.Field NameField TypeDisplaying rule / Behaviour rule
1Bell IconButton (Icon)Displaying rule:- Persistent header icon. Always visible.- Shows a small unread-indicator dot overlaid on the icon whenever the total unread count > 0 (same underlying value as the Unread Count Badge, row 2 — Source: QN-4.7.1-03). The dot is hidden entirely once there are no unread notifications left (unread count = 0).Behaviour rule:- On click: toggles the dropdown panel open/closed. On click outside the panel: closes the dropdown.
2Unread Count BadgeCount BadgeDisplaying rule:- Shows the total unread count across all categories (Source: QN-4.7.1-03). Behaviour rule:- Auto-updates on NOTIFICATION WS push (increment) and on mark-as-read actions in UC_4.7.3 (decrement).
3Filter TabsTabDisplaying rule:- 5 tabs, always all visible: Risk Warning, Level Events, Payout Events, System Status, Mentor/Community Prompts (Ref: A-13). Default active: "All" view (no single category pre-selected) showing every confirmed-category notification together.Behaviour rule:- Full filter interaction (single vs. multi-select, date range, reset) owned by UC_4.7.2; not re-described here.- Selecting Payout Events / Mentor-Community Prompts renders the empty state (Ref: BR_4.7.1.1). Selecting Level Events renders the 2 NC-LVL-* notifications (Ref: BR_4.7.1.1), confirmed on both SIM and LIVE (Ref: BR_4.7.1.1).
4Notification List, Severity Indicator, Pagination, "Mark as read"Not owned by this UC. Rendered inside the dropdown panel, but fully specified byUC_4.7.3 §9 Screen Description — not repeated here. There is no separate "View All" link or page: the dropdown panel opened by the Bell Icon (row 1) is UC_4.7.3's full paginated history.

Changelog

DateVersionUpdated itemBeforeAfterNotes
2026-08-28v1 → v1.1BR_4.7.1.1NC-LVL-02 removed from SIM event setTable listed 15 message patterns across 9 distinct Event IDs (mis-stated in prose as "7"), includingNC-LVL-02 (Drawdown Defense Activated). §3 Pre-conditions, §6 Alternative Flow, §9 Screen Description row 3 all said "3 NC-LVL-*" / "15 confirmed message patterns".NC-LVL-02 row removed — it is a LIVE-only event (already documented in UC_4.12.4), not part of the SIM set. Table now: 14 message patterns across 8 distinct Event IDs (prose count corrected to match the actual table). §3/§6/§9 updated to "2 NC-LVL-*" / "14 confirmed message patterns".Source: BA direct instruction, 2026-08-28.
2026-08-28v1 → v1.1BR_4.7.1.1 — pending-logic annotation on 4 rowsNC-RISK-03 (T-1), NC-RISK-04 (T+1), NC-RISK-05/Alert_Level = Lockout_Active, NC-SYS-01/Alert_Level = Enforcement_Complete had no annotation flagging that their underlying enforcement/webhook logic is undocumented elsewhere.Added⚠️¹ marker to these 4 rows plus a footnote below the table noting the underlying business logic is pending formal UC SRS under Stage 4 — Live Trading & Risk Management (UC_6.2.1 Flow 23 News Events; UC_6.1.2 Margin Enforcement; UC_6.2.2 Flow 24 Notification Matrix — currently only a greenfield analysis in docs/BA/scratch/Stage4_LiveTrading_RiskManagement_Analysis.md, no formal UC doc yet).Source: BA direct instruction, 2026-08-28.
2026-08-28v1.1 → v1.2BR_4.7.1.1 — pending-logic note moved into a table columnPending-Stage-4 note was shown as an inline⚠️¹ superscript marker on 4 rows plus one shared footnote paragraph below the table (harder to scan per-row).Added a dedicatedNote column to the event table; each row now carries (no pending item) or the full pending-Stage-4 explanation directly in its own cell (NC-RISK-03, NC-RISK-04, NC-RISK-05/Lockout_Active, NC-SYS-01/Enforcement_Complete). The ⚠️¹ markers and the shared footnote paragraph were removed — same content, easier to scan per row.Source: BA direct instruction, 2026-08-28.
2026-08-28v1.2 → v1.3BR_4.7.1.1 — pending note removed from Lockout_Active rowNC-RISK-05/Alert_Level = Lockout_Active carried the "Pending Stage 4 UC SRS" note (Margin Enforcement / Flow 24 Notification Matrix logic not yet formally documented, Ref: UC_6.1.2, UC_6.2.2).Note removed — cell reverted to, same as the other non-pending rows. NC-RISK-03, NC-RISK-04, and NC-SYS-01/Enforcement_Complete still carry their pending-Stage-4 note, unchanged.Source: BA direct instruction, 2026-08-28.
2026-08-28v1.3 → v1.4BR_4.7.1.1 — Note column: T-3m trigger detail on Lockout_Active; pending removed from NC-RISK-03/NC-RISK-04NC-RISK-05/Alert_Level = Lockout_Active had Note = . NC-RISK-03 (T-1) and NC-RISK-04 (T+1) carried the "Pending Stage 4 UC SRS" note.Lockout_Active Note now describes its trigger starting at T-3min (Pre-Close Entry Lockout milestone), per Flow 23/24 logic — not flagged pending. NC-RISK-03/NC-RISK-04 pending note replaced: this notification fires in parallel with Flow 23's own enforcement processing, consistent with the Flow 24 NOTIFICATION WS pattern (Ref: UC_6.2.1, Q&A NE-01) — no longer treated as an undocumented gap. NC-SYS-01/Enforcement_Complete unchanged, still pending.Source: BA direct instruction, 2026-08-28.
2026-08-28v1.4 → v1.5BR_4.7.1.1 — Message Pattern column: icon prefix added to the 8 Flow 24 Alert_Level rowsNC-RISK-05 (Warning_60, Warning_30, Warning_10, Lockout_Active, Halt_Active) and NC-SYS-01 (Enforcement_Complete, Halt_Cleared, Session_Open) Message Pattern cells had plain text, no icon prefix, even though the Zapier V7 Notification Matrix source pairs each Alert_Level with an icon.Prepended the source-defined icon to each of the 8 rows' Message Pattern text: Warning_60, ⚠️ Warning_30, 🚨 Warning_10, 🔒 Lockout_Active, 🛑 Halt_Active, Enforcement_Complete, 🔓 Halt_Cleared, 🚀 Session_Open. NC-RISK-01NC-RISK-04 (Flow 23 News Events) and NC-LVL-01/NC-LVL-03 (client-image-sourced Level Events) left unchanged — no icon defined for these in any source.Source: Zapier Integration V7.pdf, Flow 24 — Overnight Margin & Swap Monitor, Notification Matrix table. Icon glyphs verified against a fuller-fidelity re-extraction of the same PDF (Zapier_Integration_V7.txt), since the primary-cited extract (zapier_v7_full.txt) stripped emoji characters during its own PDF-to-text conversion pass. BA direct instruction, 2026-08-28.
2026-08-28v1.5 → v1.6NewBR_4.7.1.5 — Flow 23 News Event currency-relevance mapping logic§8 Business Rules had no dedicated rule explaining HOW Flow 23's Filter 2 ("IsAsset_Class relevant?") is evaluated — only the one-line filter condition existed, referenced from NC-RISK-01NC-RISK-04's Trigger Condition cells.Added BR_4.7.1.5: Step 1 ingestion (3rd-party news API call), Step 2 the 2 filters incl. Futures (all USD-domiciled,Currency == "USD" auto-relevant) vs. Forex (dynamic scan of open positions for base/quote currency match against the event Currency) relevance breakdown, Step 3 persistence feeding the T-30/T-10/T-1/T+1 sequence, and Step 4 a scope note deferring enforcement logic to the Stage 4 UC.⚠️ Source conflict flagged in-line: client source namesFXStreet as the example news provider (Zapier Integration V7.pdf §Flow 23; RFQ_ Stack Trading Prop Tech V7.pdf), not "Finnhub" — Finnhub does not appear in any CR/QnA/Customer supplies source, added per BA direct instruction pending client confirmation. The Futures/Forex relevance breakdown itself is also a BA elaboration beyond the source's single-line filter condition — pending client confirmation, consistent with existing pending-Stage-4 notes elsewhere in this doc. Source: BA direct instruction, 2026-08-28.
2026-08-28v1.6 → v1.7BR_4.7.1.5 — 3rd-party news provider confirmed as Finnhub; Step 2 relevance breakdown confirmedStep 1 flagged a ⚠️ source conflict ("Finnhub" vs. the source's FXStreet example, not yet confirmed). Step 2's Futures/Forex relevance breakdown was flagged ⚠️ as a BA elaboration pending client confirmation.⚠️ flags removed. Step 1 now states Finnhub is the client-confirmed provider, replacing the FXStreet placeholder example from Zapier Integration V7.pdf §Flow 23 — no longer a conflict. Step 2's Futures (USD-domiciled auto-relevant) / Forex (open-position base/quote currency scan) breakdown is now stated as client-confirmed rather than a pending BA elaboration. Closing citation updated accordingly.Source: Client confirmation, communicated by BA, 2026-08-28.
2026-08-28v1.7 → v1.8Document References +BR_4.7.1.5 closing citation — formalized as CR CHR_67The Finnhub-replaces-FXStreet provider change and the Filter 2 Futures/Forex relevance breakdown were recorded in this UC only as a client-confirmed BA note, with no dedicated CR file.CreatedReferences/CR/2026-08-28_CHR67_finnhub-replaces-fxstreet/CR_summary.md (CHR_67) — formal CR documenting the provider change + Filter 2 breakdown, added to References/CR/_CR_INDEX.md. This UC's Document References table and BR_4.7.1.5's closing citation now reference CHR_67 as the authoritative source for this change (★★★★ CR, highest priority per project source chain).Source: BA direct instruction, 2026-08-28.
2026-08-28v1.8 → v1.9Removed BR_4.7.1.2 ("Unread Badge Count Is Filter-Independent"); renumbered remaining Business Rules; fixed anchor/heading mismatch§8 had 5 rules (BR_4.7.1.1–4.7.1.5). BR_4.7.1.2 stated the badge is filter-independent — no source actually defines this as its own rule; it duplicated the badge-count description already given in §5 Basic Flow step 3 and §9 Screen Description rows 1–2. Separately, every anchor <a id="BR_4.7.1.N"> in §8 was one number ahead of the heading text below it (a pre-existing bug), with a duplicate anchor pair (BR_4.7.1.1+BR_4.7.1.2) both landing on the first rule — so several [BR_4.7.1.2]-labeled links actually navigated to the SIM Event Set rule, not to the Unread Badge rule.BR_4.7.1.2 heading and content deleted. Remaining rules renumbered sequentially with anchors corrected to match their heading (no more off-by-one, no duplicate anchor): "Notifications Are Discrete Messages..." is now BR_4.7.1.2, "Real-Time Update via WebSocket Push" is now BR_4.7.1.3, "Flow 23 — News Event Currency-Relevance Mapping Logic" is now BR_4.7.1.4. Every cross-reference in §2, §3, §5, §6, §8, §9 re-pointed to its correct target: links that truly meant the SIM Event Set rule now read [BR_4.7.1.1]; the two genuine citations of the deleted badge rule (§5 step 3; §9 rows 1–2) now cite the underlying source directly (Source: QN-4.7.1-03) instead of a BR link, keeping the descriptive badge-count text intact.Source: BA direct instruction, 2026-08-28 — "Bỏ BR_4.7.1.2 và cập nhật các số của business rule khác cho đúng thứ tự tuần tự. Không có rule hiển thị số lượng unread ở bell."

On this page