Performance comparison dashboard
Route: /dashboard/bsc-comparison
Audience: Company-wide roles and multi-site managers only (see Access)
Performance comparison answers: How do sites, clusters, or departments compare on Total BSC across a fiscal cycle?
It complements the other dashboard pages:
| Page | Route | Question | Time lens |
|---|---|---|---|
| Balanced Scorecard | /dashboard/bsc | What happened this month? | Single month |
| Target Score Report | /dashboard/bsc-target | What do I need to reach the next remark? | Forward / planning |
| Bonus qualification | /dashboard/bsc-bonus | Who is bonus-ready, and which gate failed? | Single month |
| Monthly performance | /dashboard/bsc-performance | How did scores move through the cycle? | Full cycle (12 mo) |
| Performance comparison | /dashboard/bsc-comparison | How do segments compare in the cycle? | Full cycle (aggregated) |
Employees and single-site managers keep the personal/team dashboards above; comparison is hidden from the sidebar when not eligible.
Access
The Performance comparison nav item appears only when can_view_bsc_comparison is true:
| Condition | Eligible |
|---|---|
| Access level 5+ (company-wide) | Yes |
| 2+ employees in your BSC access pool and 2+ distinct sites among them | Yes |
| Self view or single-site manager with one employee | No |
The web app checks GET /v1/dashboard/bsc/comparison-access before showing the nav item. Direct URL access without eligibility shows an explanatory empty state.
Controls
- BSC cycle — Same cycle selector as Monthly performance (active or ended cycles).
- Compare by — Segmented control: Site, Cluster, or Department. A tab appears only when your filtered access pool has ≥ 2 distinct values for that dimension. Default tab: first available in order Site → Cluster → Department.
- Snapshot month — Month used for band mix and Vs cycle avg columns (defaults to the latest scored month in the cycle).
- Scope filters — Cluster, department, site (when the pool spans multiple sites), and BSC / bonus eligibility filters — same controls as Monthly performance. Comparison keeps its own filter state (URL + session storage); navigating from Balanced Scorecard or Monthly performance does not copy their cycle or scope into comparison unless you use a drill-through link or set filters on this page directly.
- Row spotlight — Click a table row to highlight that segment on the trend chart.
Employees in multiple clusters or departments appear in each applicable segment bucket (same semantics as scope filters elsewhere).
Page sections
Comparison table
One row per segment (site, cluster, or department) in the selected dimension:
| Column | Content |
|---|---|
| Segment | Site name (e.g. Cebu, Baybay), cluster name, or department name |
| Headcount | Employees in that segment |
| Cycle avg | Mean Total BSC across all scored employee-months in the cycle |
| Snapshot month | Mean Total BSC for the selected snapshot month |
| Vs cycle avg | Snapshot month score minus cycle average (sortable). Positive = above the segment’s cycle norm that month. |
| Band mix | Share of employees in each remark band for the snapshot month (scored employees only) |
| Coverage | Cycle evaluation coverage (see below). Rows below 70% show a data-quality warning. |
Sort — Segment name, cycle avg, snapshot month, vs cycle avg, headcount, or coverage.
Export CSV — Full table download for sharing in meetings.
Drill-through — Each row links to Monthly performance with cycle_id and the matching site, cluster, or department filter pre-applied.
Column header tooltips explain band mix, coverage, and vs cycle avg.
Total BSC trend chart
- One line per segment (monthly average Total BSC in the cycle).
- Scope benchmark — Dashed line showing the monthly average across your full filtered access pool (helps answer “above or below norm?”).
- Click a table row to spotlight that segment’s line.
- Final months use the same emphasis as Monthly performance.
Evaluation coverage
Comparison and Monthly performance share the same coverage rules (mid-cycle hires and employees whose evaluations have not started no longer inflate gaps):
| Status | Meaning |
|---|---|
| Scored | Total BSC present for that employee-month |
| Gap | Employee had at least one scored month earlier in the cycle, but is missing this month |
| Not started | No scored month before this period and no score this period |
Cycle coverage (comparison table): scored employee-months ÷ expected employee-months, where expected = months from each employee’s first scored month through cycle end. Employees who never score in the cycle contribute zero expected slots.
On Monthly performance, the data health strip shows scored / expected per month plus gap and not-started counts.
Data source
Reuses GET /v1/dashboard/bsc/performance?cycle_id= — the same payload as Monthly performance. Each employee_series row includes site, cluster_ids, and department_ids for client-side aggregation. No separate comparison API.
Related links
- Dashboard overview — how all five pages relate
- Bonus qualification — manager gate matrix for one month
- Monthly performance — drill-through destination
- Total score goals — remark bands
- Progress report — shipped status
