Skip to main content

Signal — Summary

Written by Schae Lilley

Summary is the company-wide financial dashboard of Signal (Power Digital's internal BI web app), at route /summary. It is the app's default landing page and the one view every signed-in user can open, and it answers "how is the business doing this month?" in one screen: KPI tiles for MRR, Total Revenue, Gross Profit (MGP), VABO, Outsource Costs, Total Seats, Active Clients, RPE, Retention Rate, Full-Time Employees, and Assigned Leads, plus a metric-over-time chart and a division/department breakdown. Revenue and cost figures originate in Vena (the finance planning system); the headline Total Revenue and RPE tiles switch to NetSuite (the accounting GL) for closed months per a June 2026 Finance decision; client, employee, and seat-assignment records originate in the Nova platform's application data; team-assignment overrides and data-issue flags are Signal's own records (entered by users in Signal). Elevated users can filter, drill into every tile, and export; base-tier Members see tiles and the trend chart only.

Field

Value

Route

/summary

Access

All signed-in users (Google OAuth, company domain). No route guard; base-tier Members get a reduced read-only experience (no filters, drill-downs, breakdown, or export)

Nav section

Overview → "Summary" (also the app's default route and the default pinned view)

Primary data sources

Vena contract revenue (MRR, in-contract revenue, MGP, outsource costs, VABO); NetSuite GL revenue (Total Revenue + RPE, closed months, unfiltered view only); Nova platform records (clients & churn dates, employee roster & headcount, seat assignments); Signal's own records (team-assignment overrides)

Writes

Flag-a-data-issue → data_corrections (Signal's own records, status pending); automatic page_view usage event (module summary)

Key code refs

src/views/SummaryView.tsx; src/App.tsx:1131 (route), :377 (nav); src/context/DataContext.tsx:2578 (getSummaryMetrics), :2065 (getYtdRetention); src/utils/nsRevenueSummary.ts (summarizeNsRevenue); server/index.ts:9355 (GET /api/netsuite-revenue), :1035 (GET /api/assignments), :1454 (GET /api/headcount); server/vena-kpi-engine.ts:1664 (getAssignmentsData); server/netsuite.ts:178 (REVENUE_ACCOUNT_CODES)

Last verified

staging @ 98df0c4, verified 2026-07-07

Purpose

The Summary view in Signal consolidates the monthly book of business into a single trusted screen so leadership does not have to pull numbers from Vena, NetSuite, and the Nova platform separately. It shows recurring revenue (MRR), total revenue, gross profit after outsource costs (MGP), VABO, outsource costs (COGS), client counts, seat assignments, full-time headcount, revenue per employee (RPE), and client retention for whichever month(s) are selected in the app-wide month selector, sliceable by division or department. Because /summary is Signal's default route and the one view every access tier can see, it doubles as the shared scoreboard for the whole company.

One deliberate business decision is baked into this screen: per a Finance alignment (Matt Whalen, 2026-06-12, recorded in a code comment in src/views/SummaryView.tsx), the Total Revenue and RPE tiles on the Summary view use NetSuite — specific GL revenue accounts — as the source of truth for total company revenue, because Vena misses revenue pickup that posts every month and was understating RPE. This NetSuite basis applies to the Summary view only, only when no division/department filter is active, and only for closed months with complete NetSuite financials; every other view in Signal, and every filtered or open-month figure on Summary itself, stays on the Vena-based numbers.

Access & visibility

The Summary view in Signal is at /summary and appears in the left navigation under the Overview section (src/App.tsx:377). Gate mechanics as of staging @ 98df0c4 (verified 2026-07-07):

  • Route guard: none. /summary is the only major route with no role wrapper (src/App.tsx:1131) — any user who can sign in to Signal can open it. Sign-in is Google OAuth restricted to the company domain. Every other guard in the app (TeamLeadRoute, AdminRoute, GandalfRoute, SauronRoute, MemberAllowedRoute, the Growth guards) redirects unauthorized users to /summary, making it the universal fallback destination.

  • Default route: the root path / redirects to the user's saved landing preference or /summary (src/App.tsx:1130). "Summary" is also the default entry in the pinned-views list (browser localStorage key signal-pinned-views).

  • Member tier (reduced experience): a "Member" is any signed-in user with none of the elevated role flags — not Team Lead, not Admin, not Gandalf, not Sauron, not Growth-allowed, not a Performance Radar viewer, and not a Growth access manager (src/context/AuthContext.tsx:634). Role flags come from Signal's own user records (the app_users table), resolved at sign-in; Growth capabilities are resolved by the backend from the growth-access grant tables. Members see the KPI tile values and the aggregate metric-over-time chart only: the filters bar, tile drill-downs, gross-profit bar and pie charts, the breakdown table, and the Excel export are all hidden (isMember checks throughout src/views/SummaryView.tsx). Members' sidebar is stripped to exactly two links: Summary and Employees (src/App.tsx:513).

  • Full experience: any non-Member (Team Lead and above, plus users holding any Growth capability) gets filters, click-to-drill tiles, breakdown table, and export.

  • How elevation is granted: role flags are set by administrators in Signal's General Access screen (/users, Gandalf-gated); Growth capabilities in the Growth Access screen (/growth/access). There is no Summary-specific flag.

Data sources & lineage

All Snowflake/warehouse references below are transport only; the origin systems are Vena (finance planning), NetSuite (accounting GL), the Nova platform's application database (clients, users, assignments), and Signal's own records (entered by users in Signal).

On-screen element

Origin system

Code path

Refresh

Caveat

MRR tile

Vena contract revenue (retainer contracts only)

DataContext.getSummaryMetrics() over accounts from GET /api/assignments / /api/assignments/batch → getAssignmentsData() in server/vena-kpi-engine.ts:1664

Server caches contract reads ~30–60 min per endpoint; upstream Vena pipeline cadence not defined in the app repo

Project revenue excluded (per Rodolfo, code comment); VABO excluded

Total Revenue tile (unfiltered)

NetSuite GL revenue accounts 42100/43300/43400/43500/43550/43560 (REVENUE_ACCOUNT_CODES, server/netsuite.ts:178); per-month fallback to Vena revenue incl. VABO

GET /api/netsuite-revenue (server/index.ts:9355) → summarizeNsRevenue() (src/utils/nsRevenueSummary.ts)

30-min server cache; browser refetches when the tab regains visibility, at most every 5 min

Only closed months with a positive NetSuite figure use NetSuite; the open month and incomplete closed months fall back to Vena + VABO. Tile subtitle states the basis; a tooltip appears when an incomplete month was excluded. If the latest closed month is missing from the pipeline, the server does a live NetSuite SuiteQL pull for serving only

Total Revenue tile (secondary "In Contract" line; whole tile when a filter is active)

Vena contract revenue (retainer + project, VABO excluded)

getSummaryMetrics().inContractRevenue (src/context/DataContext.tsx:2578)

Same as MRR

NetSuite totals cannot be split by division/department, so filtered views stay entirely on Vena

Gross Profit tile (MGP)

Vena (per-row MGP = revenue − outsource cost)

getSummaryMetrics().totalMgp

Same as MRR

Averaged per month when multiple months are selected

VABO tile

Vena. Historical months: VABO rows in the contracts data; current calendar month: latest VABO value override (FINAL_VENA_CLIENTS.LATEST_VABO_VALUE_2MO, server/vena-kpi-engine.ts:176)

Client-side vaboTotals over accountsByMonth (src/views/SummaryView.tsx:284)

Same as MRR

Hidden whenever a division/department filter is active. Single-month view shows a "Last Mo" comparison; multi-month shows an accumulated total ("Accum. VABO"), not an average

Outsource Costs tile

Vena (per-row outsource cost)

getSummaryMetrics().totalOutsourceCost

Same as MRR

Monthly COGS (third-party outsourcing)

Total Seats tile

Nova platform assignment records (CLIENT_ACCOUNT_ASSIGNMENT_HISTORY, query in server/kpi-queries.ts:114), joined to Vena revenue; overridden by Signal's own team-assignment records where teams are managed in Signal

getSummaryMetrics().totalSeats; seats joined into rows by getAssignmentsData()

Same as MRR

Unique (employee, role) seats on accounts with Vena financial activity

Active Clients tile

Computed: distinct client names among accounts with Vena financial activity (revenue, MGP, or outsource > 0) in the selected month(s)

getSummaryMetrics().activeClientCount

Same as MRR

VABO-only rows excluded

RPE tile

NetSuite revenue ÷ Nova full-time headcount (unfiltered, NetSuite data present); Vena revenue ÷ full-time headcount (unfiltered, NetSuite absent); Vena revenue ÷ delivery employees (filtered)

rpeValue in src/views/SummaryView.tsx:241

NetSuite path as above; headcount 1-hour server cache

Subtitle flags the basis ("Total Co. Rev / FTE" vs "Per Employee")

Retention Rate tile (+ YTD secondary)

Nova platform client records — churn_date on the client (GET /api/clients, server/index.ts:1273; retention math in src/services/transform.ts:349)

getSummaryMetrics().retentionRate; YTD from getYtdRetention() (src/context/DataContext.tsx:2065)

1-hour server cache on client metadata

Point-in-time: a client counts as retained for a month if their churn date is after that month's end; a client is retained if ANY of their accounts are retained. YTD appears only after the background month-history load completes

Full-Time Employees tile

Nova platform user records (active, full-time flag, company email domains, name sanity filters)

Unfiltered: GET /api/headcount (server/index.ts:1454); filtered: client-side getEmployeeMetrics({ fullTimeOnly, novaProfile })

1-hour server cache

Filtered count is computed client-side so it matches the Employees view

Assigned Leads tile

Nova platform assignment records for lead seats, overridden by Signal's own team-assignment records where teams are managed in Signal (with server-disk assignment backups as an outage fallback); roster from GET /api/employees (Nova user records)

getSummaryMetrics().employeeCount / getDeliveryEmployees() — both call deliveryEmployeesFor() (src/context/DataContext.tsx:297)

1-hour server cache on roster

Same definition as the drill-down list, so count and list always agree

Delivery Employees tile (filter active only)

Nova platform user records, classified by each person's Nova org profile

getEmployeeMetrics({ novaProfile: true }) client-side

Same as roster

Includes part-time & contractors; mirrors the Employees view count; clicking navigates to /employees

Metric-over-time line chart

Vena (all seven metrics; revenue here is Vena-based even when the Total Revenue tile shows NetSuite)

Server GET /api/time-series (server/index.ts:2906) while month history loads; then client-side getFilteredTimeSeries()

Same as MRR

Chart switches to the client-computed series once history finishes loading so it exactly matches tiles and filters; numbers can visibly settle a few seconds after load

Gross Profit bar chart / pie chart / Breakdown table

Computed from the same Vena + Nova data, grouped by division or department

getGroupedSummary() (src/context/DataContext.tsx:2660)

Same as MRR

Bar chart plots MGP; the pie chart (titled "Gross Profit Distribution") and the Breakdown table column headed "Gross Profit" actually plot Vena total revenue — see Caveats

Division/Department filter options

Hardcoded frontend lists ALL_DIVISIONS / ALL_DEPARTMENTS (src/utils/orgStructure.ts)

Changes require a deploy

Department display names resolve through GET /api/department-mapping (single source of truth for department identity)

Month selection (app shell)

Vena — distinct months with non-zero data, capped at the current calendar month

GET /api/months → computeMonths() (server/vena-kpi-engine.ts:1024)

30-min server cache

Multi-select; multi-month mode switches dollar tiles to per-month averages

Flag-a-data-issue (per drill-down row)

Write to Signal's own records (data_corrections, status pending)

submitDataCorrection() in src/services/supabase.ts:1539, direct from the browser

Immediate

Reviewed by admins in the Corrections view

Export button

The on-screen grouped breakdown data

Client-side XLSX generation (ExportButton)

Downloads signal-summary-<groupBy>.xlsx; hidden for Members

Metrics & definitions

All metrics on the Summary view are for the month(s) selected in Signal's app-wide month selector. When multiple months are selected, dollar tiles show per-month averages (subtitles say so) — except VABO, which shows an accumulated total.

  • MRR — monthly recurring revenue: Vena revenue from retainer contracts only, for accounts with financial activity in the month. Project revenue is excluded because it is one-time (per Rodolfo, code comment in src/context/DataContext.tsx). VABO excluded. Origin: Vena.

  • Total Revenue / In Contract Revenue — the tile is labeled "Total Revenue" when NetSuite data is available and no filter is active: the sum, over selected months, of NetSuite GL revenue (accounts 42100/43300/43400/43500/43550/43560 — code constant as of Jul 2026, server/netsuite.ts:178) for closed months with a positive figure, plus Vena revenue including VABO for the open month and for any closed month whose NetSuite financials are incomplete (non-positive figure — reversals only; those months get the tooltip "NetSuite excluded as financials are incomplete"). Subtitle states the exact basis: "NetSuite · Total Company", "NetSuite + In-Contract (open mo)", "NetSuite + In-Contract", "In-Contract + VABO (open mo)", or "In-Contract + VABO". A secondary line always shows the Vena "In Contract" figure (retainer + project, VABO excluded) for reconciliation. When a division/department filter is active, or NetSuite data is unavailable, the tile is labeled "In Contract Revenue" and is entirely Vena-based. Origin: NetSuite + Vena.

  • Gross Profit (MGP) — Monthly Gross Profit: Vena revenue minus third-party outsource cost, summed per row. Origin: Vena.

  • VABO — a distinct Vena revenue category kept out of every revenue/MGP rollup and surfaced on its own tile. Historical months come from the Vena contracts data; the current calendar month is overridden with Vena's latest VABO value (the contracts table lags the in-flight month). Single-month view shows a "Last Mo" comparison. Hidden whenever a filter is active (VABO cannot be cleanly attributed under a filter). The acronym's business expansion is not defined in the app repo. Origin: Vena.

  • Outsource Costs — monthly COGS: third-party outsourcing cost per Vena row. Origin: Vena.

  • Total Seats — unique (employee, role) seat assignments on accounts with Vena financial activity in the month. Seats originate in Nova platform assignment history, overridden by Signal's own team-assignment records where a client's team is managed in Signal. Origin: Nova + Signal's own records.

  • Active Clients — distinct client names with Vena financial activity (revenue, MGP, or outsource cost > 0) in the selected month(s); VABO-only rows excluded. Origin: Vena (activity) + Nova (client identity).

  • RPE — revenue per employee. Unfiltered view with NetSuite data: NetSuite total company revenue ÷ full-time headcount (subtitle "Total Co. Rev / FTE"). Unfiltered without NetSuite data: Vena revenue ÷ full-time headcount. Filtered: Vena revenue ÷ delivery employees for the filtered org (VABO stripped). Multi-month selections divide by the month count. Origin: NetSuite/Vena numerator, Nova denominator.

  • Retention Rate — client-level retention: a client counts as retained for a month if their churn_date (from Nova client records) is null or after that month's end; a client is retained if ANY of their accounts are retained. Rate = retained clients ÷ all clients in the filtered set. Point-in-time: months before a later churn still show the client as retained. The YTD secondary value averages client-level retention across all current-calendar-year months (available only after the background month-history load completes). Origin: Nova.

  • Full-Time Employees — active full-time headcount from Nova user records (no termination date, full-time flag, real company email domain, name sanity filters). Unfiltered: server count (1-hour cache); filtered: client-side count matching the Employees view. Origin: Nova.

  • Assigned Leads — employees holding lead seats on accounts with financial activity in the selected month(s) — the "delivery employees" definition shared with the drill-down list. Origin: Nova assignment records + Signal's own team-assignment overrides.

  • Delivery Employees (shown only when a filter is active) — total org headcount for the selected division/department per each person's Nova org profile, including part-time and contractors. Origin: Nova.

  • Retention badge colors (Breakdown table): green ≥ 80%, amber ≥ 60%, red below — code constants as of Jul 2026 (src/views/SummaryView.tsx:900).

How it's used

  1. Monthly business review. Land on the Summary view with the current month selected; read MRR, Total Revenue (NetSuite basis once the month closes with complete financials), Gross Profit, and Retention; check the YTD retention secondary number. Decision: is the company on plan this month, and does anything warrant escalation at the leadership meeting?

  2. Division/department health check. Filter to a division or department, or use the Group By breakdown table to compare all groups side by side — revenue, seats, client count, employee count, retention badge. Decision: which org units are under-delivering on revenue or retention and need attention this quarter?

  3. Churn triage. Click the Retention Rate tile; churned clients are listed first with their revenue. Decision: which lost clients were material, and who owned them (via the Employees / Manage Leads views) — feeding save plans and post-mortems.

  4. Outsourcing cost control. Click the Outsource Costs tile to see exactly which clients carry third-party costs and how that compares to their revenue. Decision: where is outsourcing eroding margin enough to justify bringing work in-house or renegotiating?

  5. Efficiency trend (RPE). Select a multi-month range, switch the trend chart to RPE, and compare against the Full-Time Employees tile. Decision: is revenue scaling faster than headcount — informing hiring-pace conversations.

  6. Revenue reconciliation. Compare the Total Revenue tile's NetSuite figure against its "In Contract" secondary line (Vena) to quantify the monthly revenue pickup that Vena misses. Decision: how much of total company revenue is outside contracted retainers/projects.

  7. Data-quality escalation. While drilling into any tile, spot a wrong number, hit the flag icon on that row, and submit a correction with context. It lands in the admin Corrections queue — this is how field knowledge fixes the data everyone else sees.

What users can change here

The Summary view in Signal is effectively read-only; it has one explicit write and one automatic one:

  • Flag a data issue (explicit): every row in a tile drill-down has a flag icon that opens the Flag Issue modal (FlagIssueModal); submitting inserts a row into data_corrections in Signal's own records with status pending (submitDataCorrection(), src/services/supabase.ts:1539, direct from the browser). Side effects: admins review the flag in the Corrections view; the submitter can track it in My Submissions. Nothing on the Summary screen changes source data directly. Drill-downs (and therefore flagging) are unavailable to base-tier Members.

  • Usage telemetry (automatic): opening the view logs a page_view usage event with module summary into Signal's own usage records (signal_usage_events, via src/hooks/useUsageTracking.ts), which feed the Sauron-only Analytics view.

  • Everything else — division/department filters, Group By, chart metric selector, month selection, pinned views — is view state. Division/department filters are shared app-wide for the session (other views honor them); pinned views persist in browser localStorage.

Caveats & data quality

  • Dual revenue basis is subtle. The Total Revenue and RPE tiles on the Summary view use NetSuite only on this view, only when no division/department filter is active, and only for closed months whose NetSuite figure is positive. The open calendar month always falls back to Vena revenue including VABO. A closed month whose NetSuite financials are incomplete (non-positive figure — reversal entries only, typical during the close window) is also excluded and falls back to Vena, with an "i" tooltip on the tile: "NetSuite excluded as financials are incomplete" (behavior added 2026-07-06, src/utils/nsRevenueSummary.ts). Which label ("Total Revenue" vs "In Contract Revenue") and subtitle appear depends on NetSuite data availability at view time.

  • Month-closed classification uses the server's clock, not the browser's: latestClosedMonth ships in the /api/netsuite-revenue payload, and the browser refetches it when the tab regains visibility (at most every 5 minutes), so two open tabs converge on the same figure for a just-closed month.

  • The trend chart is Vena-based even when the Total Revenue tile is NetSuite-based — the chart's Revenue series and the tile are not the same series and will not match for closed months.

  • Label/value mismatches in the grouped visuals (code as of staging @ 98df0c4): the Breakdown table column headed "Gross Profit" renders each group's Vena total revenue (metrics.totalRevenue), not MGP; the pie chart titled "Gross Profit Distribution" also plots total revenue; only the horizontal bar chart plots actual MGP. Likewise, in multi-month mode the Breakdown column headed "Avg Monthly" renders each group's average RPE. The Excel export is unaffected — it exports Revenue, Outsource Costs, and Gross Profit (MGP) as separate, correctly-labeled columns.

  • VABO tile disappears under any filter — by design (VABO cannot be attributed to a division/department), not a bug. RPE also drops VABO from its numerator whenever a filter is active. In multi-month mode the VABO tile shows an accumulated total ("Accum. VABO") while dollar tiles show per-month averages.

  • Multi-month mode changes tile semantics to per-month averages (subtitles say so, e.g. "Avg Monthly MGP (3 mo)") and removes the VABO "Last Mo" comparison.

  • Retention is point-in-time from churn_date — historical months never retroactively show later churns. The YTD retention secondary value and the exact tile/chart agreement depend on the background month-history load; numbers can visibly settle a few seconds after page load (the chart uses server aggregates until history finishes).

  • Retention badge thresholds (80% / 60%) and NetSuite GL account codes (42100/43300/43400/43500/43550/43560) are code constants as of Jul 2026 — changing either requires a deploy. Who owns keeping the GL code list in sync with Finance's chart of accounts is not defined in the app repo.

  • Division/department filter options are hardcoded in the frontend (ALL_DIVISIONS / ALL_DEPARTMENTS in src/utils/orgStructure.ts); the org structure changes periodically. The server also has a static divisions list (GET /api/divisions).

  • Freshness: the backend caches most reads 30–60 minutes (NetSuite revenue 30 min; headcount, roster, and client metadata 1 hour; months 30 min). The upstream pipeline cadences (Vena → warehouse, NetSuite → warehouse, Nova app → warehouse) are not defined in the app repo — figures are "as of the last pipeline run," not real-time.

  • What "VABO" stands for in business terms is not defined in the app repo — the code treats it as a distinct Vena revenue category, allocated per lead, excluded from revenue/MGP rollups.

  • Member-tier users see a much smaller screen (tiles + trend chart only), so two employees describing "the Summary page" may be describing different feature sets.

Related views

  • Manage Leads (/leads, Team Lead+): team assignments saved there (Signal's own team_assignments records) override the Nova-detected seats, which changes the Summary view's Assigned Leads count, Total Seats, and per-employee attribution.

  • Corrections (/corrections, Admin+) and My Submissions: flag-issue submissions from Summary drill-downs land in the corrections queue reviewed in Corrections; submitters track theirs in My Submissions.

  • Employees (/employees): the Delivery Employees tile deep-links there; headcount definitions are deliberately mirrored so the two screens agree. It is the only other view base-tier Members can reach.

  • Analytics, Client Profitability, KPI Targets, Divisional P&L, ETCR: share the same server-side Vena engine (server/vena-kpi-engine.ts) and/or the same frontend data spine (DataContext), so metric definitions (MGP, VABO handling, retention) are consistent by construction — with the deliberate exception of the NetSuite-based Total Revenue/RPE tiles, which exist only on Summary.

  • Every gated view redirects unauthorized users to /summary — it is the app-wide fallback.

FAQ

Q: Why doesn't the revenue on the Summary page match Vena? A: The Total Revenue tile on Signal's Summary view uses NetSuite GL revenue (accounts 42100/43300/43400/43500/43550/43560) as the source of truth for closed months, per a Finance alignment from June 2026 — Vena misses revenue pickup that posts every month. The Vena figure is still shown on the tile's secondary "In Contract" line, and the tile's subtitle states the exact basis. Every other view in Signal, and every filtered view of Summary itself, stays on Vena numbers.

Q: Why doesn't the revenue on the Summary page match NetSuite for the current month? A: NetSuite revenue posts at month-end, so the open calendar month has no complete NetSuite figure. For the open month (and any closed month whose NetSuite financials are still incomplete), the Total Revenue tile falls back to Vena in-contract revenue plus VABO — the subtitle reads "In-Contract + VABO (open mo)" or "NetSuite + In-Contract (open mo)". Once the month closes with complete financials, the tile flips to NetSuite actuals.

Q: Last month's revenue tile shows an "i" icon saying "NetSuite excluded as financials are incomplete" — what does that mean? A: During the accounting close window, a just-closed month may only have reversal/adjustment entries in NetSuite, which net to zero or negative — a sign the financials aren't final. The Summary view excludes such months from the NetSuite total and shows the Vena-based estimate instead, with that tooltip. The tile switches to the NetSuite actual automatically once a positive figure posts (data refreshes within roughly 30 minutes server-side, and the page refetches when you return to the tab).

Q: Why did the VABO tile disappear from my Summary page? A: The VABO tile is hidden whenever a division or department filter is active — VABO revenue cannot be cleanly attributed to a single division or department, so it is only shown in the unfiltered company view. Clear the filters and the tile returns. This is by design, not a bug.

Q: Why doesn't the trend chart's Revenue line match the Total Revenue tile? A: The metric-over-time chart on the Summary view is entirely Vena-based, while the Total Revenue tile uses NetSuite for closed months. They are intentionally different series: the chart matches the Vena "In Contract" secondary line, not the NetSuite headline.

Q: Why is the Full-Time Employees number different from Assigned Leads? A: They measure different populations. Full-Time Employees is the total active full-time headcount from Nova's employee records, whether or not the person is assigned to a client. Assigned Leads counts only employees holding lead seats on client accounts with financial activity in the selected month(s). A filtered view also adds a Delivery Employees tile — org headcount including part-time staff and contractors — which mirrors the Employees view count.

Q: A client churned recently — why does an earlier month still show them as retained? A: Retention on the Summary view is point-in-time: a client counts as retained for a given month if their churn date (from Nova's client records) is after that month's end. Months before the churn correctly show the client as retained; only the churn month and later show them as churned. The metric measures contractual status per month, not the client's eventual outcome.

Q: The Breakdown table's "Gross Profit" column doesn't match the Gross Profit tile — why? A: As of the July 2026 code, the Breakdown table column headed "Gross Profit" (and the "Gross Profit Distribution" pie chart) actually display each group's Vena total revenue, not MGP; only the horizontal bar chart shows true MGP. If you need per-group gross profit, use the bar chart or the Excel export, which has separate correctly-labeled Revenue and Gross Profit (MGP) columns.

Q: Why do all the dollar tiles change when I select several months? A: With more than one month selected, the Summary view switches dollar tiles (MRR, Total Revenue, Gross Profit, Outsource Costs) to per-month averages — the subtitles say so, e.g. "Avg Monthly MGP (3 mo)". RPE is also divided by the month count. The exception is VABO, which shows the accumulated total across the selected months and drops its "Last Mo" comparison.

Q: I found a wrong number on the Summary page — how do I report it? A: Click the tile to open its drill-down (available to Team Lead and above), find the client or employee row, and click the small flag icon on that row. The Flag Issue modal submits a data correction (status "pending") into Signal's own corrections queue; admins review it in the Corrections view and you can track yours in My Submissions. Base-tier Members don't have drill-downs — they should report the issue to their team lead.

Q: I only see Summary and Employees in the sidebar — why can't I see anything else? A: You are on Signal's base "Member" tier — a signed-in user with no elevated role (Team Lead, Admin, Gandalf, Sauron, or a Growth capability). Members are scoped to the Summary tiles + trend chart and their own row on the Employees view; filters, drill-downs, the breakdown table, export, global search, and all other views are hidden. Access changes are made by administrators in Signal's General Access screen — ask your manager or a Signal admin if your role needs elevation.

Did this answer your question?