File: 2026.10.23 - Kestrel Medical - 03 Story and Chart Choices.md
Kestrel Medical: Story and Chart Choices
Test case, Sample data. Built by Viktor (Stage 3) from the Business Requirements v1.2 and the KPI Calculation Pack v1.1. Every number on the dashboards comes fromkpi_results.jsonandsubstitutes_results.jsonthrough03 - Working Files/viktor_build_dashboard.py. No KPI definition or calculation was changed.
Date: 23-Oct-26 · Pattern: Executive scorecard on the first screen, Driver diagnostic underneath (Dashboard Patterns guide) · Audience: the sales leader, in a pack for global and on screen in rep meetings
1. The story
Checked against the requirements. Gary recommended leading with Kewpie's note C10: the data doesn't support "lost on price". The Problem Statement says Kestrel "believes price is the reason but can't yet prove or disprove it" and needs evidence before asking global for more discount room. Why we lost, from the debriefs (a built sub-KPI) answers that directly, so it can lead. The evidence is Strong Inference (scores parsed from the debrief letters), and the page says so under the headline. It says "the debriefs point to", not "service caused the losses".
| Beat | Sentence |
|---|---|
| Headline | Kestrel lost 3 of its last 5 big tenders, and the buyers' debriefs point to service and support, not price: it was the biggest scoring gap on all three. |
| Under it | Price was the biggest gap on only 3 of 20 scored losses. Discount on big deals has held at 17.03% since 2024; revenue is 6.8% down on last year. Strong Inference (debrief scores). |
| What changed | Discount on big deals rose from 14.05% to 17.03% in 2024, and Kestrel still lost 3 of its last 5 big tenders. |
| Why | Service and support was the biggest gap on all 3 big losses; price was never the biggest. Across all 20 scored losses, price was the biggest gap on only 3, service and support on 7. The 3 big losses went to 3 different winners, one a distributor that bundles brands. |
| What to do | The 3 actions below. |
Read aloud without the charts, the four beats make sense on their own: the losses, the discount that didn't buy wins, the debrief evidence, the actions.
Top 3 actions (cards under the headline, repeated in full in What to do)
| # | Owner (from the Business Requirements) | Action | Target and date | Tied to |
|---|---|---|---|---|
| 1 | Bid manager, with the sales leader | Reviews the debriefs; the sales leader sets the response | Proposed: 3 of the last 5 by Dec-27 (target set in Phase 2) | Headline (big tender losses, service gap). Action wording from Big tender win rate's "Action if outside threshold" |
| 2 | Sales leader | Pulls back discounts that aren't winning business | Proposed: big-deal discount down to 14% by Dec-27 | What changed (discount up, wins didn't follow). From Average discount's action and target |
| 3 | Sales leader | Moves rep focus to the growing product groups | Revenue growth of 4% in 2027 | The revenue fall in the sub-headline. From Revenue growth on the year's action and target |
Targets 1 and 2 are Gary's proposals, marked "Proposed" on the page, for the sales leader and bid manager to confirm at the Stage 5 walk-through or in Phase 2. Pace and trend sit in What to do, not on the cards.
↑ Back to top2. Each chart and the question it answers
| Zone | Chart | Question | Why this form | Finding title |
|---|---|---|---|---|
| C. Top 5 tiles | Standard KPI tile: number and sparkline side by side, dashed target line, end dot; target, gap, needs, trend, status, note. A 10th row holds the stand-in where there is one | Where are we against target? | The tile is the standard; rows line up across all five | (tiles) |
| D. What changed | Line by year with the proposed path dashed to 14% by Dec-27, and a lane of the last 5 big tenders (filled won, hollow lost) on the same time line | Did more discount buy big-tender wins? | "Trend vs target: line with a required path". The tender lane shares the time axis only, so there is one y-axis, never two | Discount on big deals rose from 14.05% to 17.03% in 2024, and Kestrel still lost 3 of its last 5 big tenders |
| E. Why (1) | Small multiples of diverging bars: the 3 big losses, 6 scoring areas each, one scale | On what did we lose each big tender? | Diverging bars show who was ahead in each area; small multiples compare the three losses on one scale | Service and support was the biggest gap on all 3 big losses; price was never the biggest |
| E. Why (2) | Ranked bar with highlight | Across all losses, how often is price the biggest gap? | Ranking; service and price in full colour, the rest faded | Price was the biggest gap on only 3 of 20 lost tenders; service and support on 7 |
| E. Why (3) | Ranked bar, big-loss winners highlighted | Is one competitor taking the tenders? | Ranking by contract value, count beside each | The 3 big losses went to 3 different winners, one a distributor that bundles brands |
| G. Detail | Line, year-to-date growth by month, target line | Is revenue growth closing the gap? | Trend vs target | Revenue is −6.8% on last year; it needs +0.72 points a month and is moving +0.27 |
| G. Detail | Diverging bars, with a toggle by product group or by rep | Which product groups and reps grow or go backwards? | Same chart type at both levels; signed value on each bar, pace and trend beside | Only Beds is growing; Service is −20.8% / 12 of 14 reps are going backwards; Rep R10 is −17.5% |
| G. Detail | Table of the last 5 big tenders, plus the size-line note | Which tenders make up the 2 of 5? | Five rows read best as a table | 2 of the last 5 big tenders won; the count moves a lot with the size line |
| G. Detail | Placeholder plus stand-in: diverging bars of price score gap on the 3 big losses | Did we lose on price? (Phase 2 KPI) | Same diverging form as Why (1) | Behind on price in 11 of 20 scored losses |
| G. Detail | Placeholder plus stand-in: bars of net price realisation by product group, with share | Where might margin leak? (Phase 2 KPI) | One colour, Calculation Pack order, no best or worst | (stand-in label, no finding title: not ranked) |
| G. Detail | Stand-in detail: counts of sales definition and customer grouping across the 30 reports | Why might the reports disagree? | Two short bar lists | Reports on the draft set: 3 of 30 |
Colour. Monochrome blue throughout. The scoring areas are 6 categories, so they use the Charcoal and teal category colours in fixed slots (service and support teal, price coral, then clinical fit, supply reliability, training, sustainability), and keep the same colour on both charts they appear in. Status colours appear only on the two rated tiles, always with an icon and a word.
No barbell. The only two-period comparison by category is the net price realisation stand-in (2026 against 2025, 10 product groups). Ten categories exceed the 6 category slots and the changes are under half a point, so it stays as bars with the change in the label and the "See data" table.
Every chart has hover detail, a "Why it matters" line on hover or focus (from the "Why?" column), a "See data" table, animation on first view (click to replay, off with reduced motion), and works in dark and light mode.
↑ Back to top3. Phase 2 placeholders and stand-ins (as the Business Requirements v1.2 document them)
| KPI | On the page | Stand-in beside it |
|---|---|---|
| Gross margin per cent | Top 5 tile, slot 1: exact name, "Owner: sales leader", "Phase 2: waiting for data", "Target: 43% for 2027" as text, "Needs cost of sales (finance)", neutral chip "Not rated: Phase 2", note "Finance's stated figure about 41%, not calculated (Working Hypothesis)". No number, colour, sparkline, gap or pace | Net price realisation: 87.36%, Jan to Sep 26; 87.67% in 2025. "Stand-in, not the KPI · Sample data". "Price side only. This is not gross margin and can't be compared with the 43% target." No target, no colour (Adam's choice, Stage 2 gate) |
| Monthly reports that match the agreed set of numbers | Top 5 tile, slot 5: exact name, "Owner: finance report owner", "Phase 2: waiting for data", "Target: set in Phase 2", neutral chip | Reports on the draft agreed set: 3 of 30, 17 combinations in use, with its caution line and labels |
| Gross margin by product group | Detail section: placeholder box, owner sales leader | Net price realisation by product group, with share; "Service and Parts show 100%…"; not ranked |
| Our price against the winning price on lost tenders | Detail section: placeholder box, owner bid manager | Price score gap on lost tenders: behind on price in 11 of 20; big losses +0.60, +1.20, −0.90; "Price score, not price…" |
Big tender win rate shows "2 of 5" with five won or lost dots (no trend line), "Target set in Phase 2", the calendar-year counts, and a neutral chip "Not rated: target open". No status colour, gap or pace needed. Gary's starting proposal appears only in the action, marked Proposed and Working Hypothesis.
↑ Back to top4. Trace: every element to the Business Requirements v1.2
| Element | Traces to |
|---|---|
| Header: Sample data, data to 30-Sep-26, Business Requirements v1.2 | Test-case note; Change control (footer version) |
| Headline and sub-headline | Problem Statement; Objective "Stop losing the big tenders" (O3, O3.1); Why we lost, from the debriefs (K4.2); Big tender win rate (K4); Average discount (K2); Revenue growth (K3) |
| Action card 1 | Big tender win rate (K4): action, owner, open target (Gary's proposal) |
| Action card 2 | Average discount off list price on big deals (K2): action, owner, target path |
| Action card 3 | Revenue growth on the year (K3): action, owner, target |
| Tile 1 and stand-in | Gross margin per cent (K1), O1; Placeholder tiles; Stand-ins for the first pass |
| Tile 2 | Average discount off list price on big deals (K2), O1, O1.1 |
| Tile 3 | Revenue growth on the year (K3), O2 |
| Tile 4 | Big tender win rate (K4), O3; How validation treats Phase 2 KPIs, item 4 |
| Tile 5 and stand-in | Monthly reports that match the agreed set of numbers (K5), O4 |
| What changed chart | Average discount (K2) target path and counter-metric (Big tender win rate, K4) |
| Why (1) and Why (2) | Why we lost, from the debriefs (K4.2), O3.1 |
| Why (3) | Who is winning the tenders we lose (K4.3), O3.1 |
| What to do | Action, owner and target columns of K2, K3, K4 |
| Revenue detail and toggle | Revenue growth on the year (K3); by product group (K3.1); by rep (K3.2), O2.1 |
| Big tender detail | Big tender win rate (K4): the five tenders and the size line |
| Price detail | Our price against the winning price on lost tenders (K4.1), placeholder and stand-in |
| Margin by group detail | Gross margin by product group (K1.1), placeholder and stand-in |
| Reports detail | Stand-in for K5 (index facts) |
| Definitions | Measures for the Top 5 and Sub-KPIs tables |
Every KPI shown: all 5 Top 5 KPIs and all 6 sub-KPIs (4 built, 2 as Phase 2 placeholders), plus the 4 stand-ins. Nothing on the page traces to the backlog.
↑ Back to top5. Checks run
- First screen at 1280 × 800: header, headline, the 3 action cards and the Top 5 tiles (with both stand-ins) end at 793px. Measured in the Browser pane
- No detail line wraps at 1280px. No sideways scroll at 375px (page width 375). Sticky header switches off on phones
- No console errors (Standard and Experimental A)
- Lost tender values recalculated with Kewpie's correction C7 match Who is winning the tenders we lose (K4.3) for every winner (asserted in the build script)
- No em dashes; plain names, no codes (reps are shown as "Rep R01" to "Rep R14", which are the data's rep names)
6. Versions
| Version | What differs | Rule it bends |
|---|---|---|
| Standard | Everything above | None |
| Experimental A | The second Why chart becomes a full-width dot swarm of all 25 lost tenders, in the column of their biggest gap, sized by contract value, with the 3 big losses ringed and numbered. The winners chart moves to full width under it | "Exact values can be read" (dot size is approximate). Keeps hover and a "See data" table; every number on the Standard page stays |
Recommendation for Jennifer: Standard. It is the clearest for a pack to global and a rep meeting. Experimental A is a good optional slide for the walk-through: it shows the big losses inside the whole register at a glance.
↑ Back to top