- expiring_appeals / slow_payer / underpayment no longer get the denial-spike
charts sliced by payer alone (one bar per department x code)
- weekly and recovery rows folded to their chart grain
- replayed mornings show only the trend, cut at the replay date
- new charts: payer speed (slow_payer) and appeal scorecard
- y-axis ticks no longer clipped at two digits
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Every user-facing string rewritten from a narrator's voice into an
application's. "What she wants you to approve" is now "Recommended actions";
"Her evidence" is "Query log"; "Watch how she did it" is "Activity trace";
"The full story" is "Analysis"; "Ava is reviewing" is "Review in progress";
"Nothing needs your attention this morning" is "No findings". Chart captions
state what the chart shows ("Gray: 8-week baseline · Blue: last 6 weeks")
instead of commenting on it ("One insurer moved").
The AI is an attribution — "AI analysis · Ava · Confidence 97%" — not a
character the page talks about. Labels are nouns, hints are facts, and the
queue and action names use the workflow's own vocabulary (Approve actions,
Request changes, Resume review, Close case).
Same treatment on the exported slides: Summary, Trend, Comparison, Recovery,
Recommended actions, Method.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A case now carries pictures, and a button that turns it into a deck.
THE CHARTS (Briefing.tsx) answer the same three questions the page does,
visually: the spike (the flagged slice's weekly denials, with the payer's
rule change drawn as a line — weeks after it in the accent, before in gray),
where it sits (denial rate by insurer, baseline vs now), where the money
stands (the slice's denied dollars by what can still happen to them), and
appeals about to expire by insurer. Every chart has a table twin.
Data comes from six pre-aggregated Databricks views (sm2/…/chart_views.py)
read through the ordinary record-view API, filtered by the slice Ava now
records in four structured fields (slice_payer, slice_department,
slice_reason_code, spike_start). Nothing is computed from raw claims in the
browser.
COLOUR WAS COMPUTED, NOT EYEBALLED. The palette is the dataviz reference
set (blue 1, orange 2, green 6, violet 7, gray) run through
validate_palette.js against this console's own surfaces, both themes — all
checks pass. Two things the validator caught: the brand teal fails the
chroma floor and would read as gray on a chart, so it is never a data hue;
and red beside orange in the recovery stack fails adjacent-pair separation
even for normal vision (ΔE 7.1), so "lost on appeal" is violet.
THE SLIDES (lib/slides.ts) are six native-chart PowerPoint slides built in
the browser with pptxgenjs from the same rows: what happened, the spike,
where it sits, the money, the recommendations, the method. Text is Ava's
verbatim. Lazy-imported so the 700 KB library is paid for only on click.
Backend counterpart: sm2/custom-apps/denials-investigator/10_briefing.sql.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>