KPI cards, trends, and donuts that change with the viewer's role, period, and currency — via one injected adapter.
One adapter projects domain rows into generic primitives the chart layer never has to know about.
Role gates panels automatically — a viewer sees fewer KPIs than a group_admin. Period and currency switchers re-fetch; FX and pure calculators run on the returned data before charts render.
Bell = in-app alertAmber diamond = automatic check
app/dashboard
One adapter, any domain. Inject DashboardDataAdapter; the roleScope gate filters panels automatically; period and currency switchers re-fetch; FX conversion and pure calculators run before KpiCard, TrendChart, DonutChart, and PacingBar render.