Household income card

The whole household's annual income stacked by source across the life plan, with the per-person events that reshape it.

Your household income

Annual income by source in today's money

Employment / company income

Bridge pots

Pension drawdown

State pensions

<HouseholdIncomeCard data={incomePlan} />

Usage

import { HouseholdIncomeCard, type HouseholdIncomeData } from "@reva/ui";

Renders the household income tool output (wiring lands with the follow-up agent tool). One stacked bar per calendar year splits the household's income by source — while people work spending is met from employment and company income, then each person's retirement, pension access and state pension layer in on the shared axis. One chart for everyone; it scales to any number of people. An optional expenditure value per point overlays the household's planned spend as a dashed line, so income and spend read against each other (the tooltip adds Spend and Short/Surplus rows on those years; omit a year's value to gap the line).

Series are generic: series names each source and sets the stack order bottom to top, and each point's values map carries decimal strings keyed by series key (a missing key plots as zero). Colours come from the positional chart-role ramp (neutral, positive, primary, accent, negative — wrapping for five or more series), so the payload never carries colour.

Pass data with a stable reference (module scope, state or useMemo). The x-axis is categorical, so event years must land on plotted years — an event between points renders no marker.

Examples

Life plan with events

The full state: four income sources stacking across a fifty-year horizon, per-person event flags on a staggered rail above the bars, and the dashed spend line reading against the stack. Hover a bar for the year, age, per-source split, total, spend and that year's events.

Your household income

Annual income by source in today's money

Employment / company income

Bridge pots

Pension drawdown

State pensions

<HouseholdIncomeCarddata={{  reporting_currency: "GBP",  series: [    { key: "employment", label: "Employment / company income" },    { key: "bridge", label: "Bridge pots" },    { key: "drawdown", label: "Pension drawdown" },    { key: "state", label: "State pensions" },  ],  points, // one per year, ~50 years  events: [    { year: 2036, label: "Michael retires" },    { year: 2044, label: "Michael pension" },    { year: 2055, label: "Michael state pension" },  ],}}/>

Bars only

Without events or expenditure the flag headroom collapses — just the stacked income series and the legend.

Your household income

Annual income by source in today's money

Employment / company income

Bridge pots

Pension drawdown

State pensions

<HouseholdIncomeCard data={{ reporting_currency: "GBP", series, points }} />

Short horizon

At a twelve-year horizon the bars widen and every year keeps its tick.

Your household income

Annual income by source in today's money

Employment / company income

Bridge pots

Pension drawdown

State pensions

<HouseholdIncomeCard data={shortPlan} />

Props

PropTypeDefaultDescription
dataHouseholdIncomeDataThe card payload. Stable reference required.
titlestring"Your household income"Card title.
subtitlestring"Annual income by source in today's money"Muted line under the title.

The data fields:

FieldTypeDescription
reporting_currencystringISO currency for every value (e.g. "GBP").
seriesHouseholdIncomeSeries[]The income sources: key, label. Array order is stack order, bottom to top.
pointsHouseholdIncomePoint[]One per calendar year: year, optional age (tooltip header), values decimal strings keyed by series key, optional expenditure decimal string (the dashed spend line; omit to gap it).
eventsHouseholdIncomeEvent[]Optional one-off markers: year, label, optional sublabel.

On this page