// Finance hub dashboard for Harding & Vane — a C-level financial overview. // Built from the same visual primitives as the Construction Project dashboard // (StatTile / AnalysisCard / RichTrendChart / GroupedBarChart), so the two hubs // share one design language. Also exports HubComingSoon — the placeholder shown // for hubs still being built out (People / Diligence / Sales / Operations). const { StatTile, AnalysisCard, RichTrendChart, GroupedBarChart, } = window; /* ============ Finance dashboard ============ */ // Trailing-six-quarters series (FY2025 Q1 → FY2026 Q2). const FH_QTRS = ['Q1 25', 'Q2 25', 'Q3 25', 'Q4 25', 'Q1 26', 'Q2 26']; const FH_REVENUE = [292, 305, 315, 322, 331, 341]; const FH_MARGIN = [11.4, 11.8, 12.1, 12.3, 12.6, 12.8]; // Orders vs revenue (last four quarters) — visualises the 1.3× book-to-bill. const FH_ORDER_QTRS = ['Q3 25', 'Q4 25', 'Q1 26', 'Q2 26']; const FH_ORDERS = [352, 388, 401, 452]; const FH_REV_4 = [315, 322, 331, 341]; const FH_KPI_1 = [ { label: 'Revenue (TTM)', value: '$1.24B', sub: '+11% YoY · $341M in Q2' }, { label: 'Adj. EBITDA margin', value: '12.8%', sub: '$159M TTM · +90 bps YoY', tone: 'ok' }, { label: 'Total liquidity', value: '$522M', sub: '$142M cash · $380M undrawn revolver' }, { label: 'Backlog', value: '$3.10B', sub: '1.3× book-to-bill · 2.3 yrs coverage' }, ]; const FH_KPI_2 = [ { label: 'Net income (TTM)', value: '$71M', sub: '+18% YoY · 5.7% net margin', tone: 'ok' }, { label: 'Free cash flow (TTM)', value: '$98M', sub: '62% EBITDA conversion' }, { label: 'Leverage', value: 'Net cash', sub: '$102M net cash · 0.3× gross', tone: 'ok' }, { label: 'DSO', value: '58 days', sub: '−4 days QoQ · target ≤ 55', tone: 'warn' }, ]; const FH_SEGMENTS = [ ['Infrastructure', '$512M', '14.1%', '$1.38B', '+14%'], ['Energy & Utilities', '$358M', '11.2%', '$0.86B', '+9%'], ['Buildings', '$236M', '9.8%', '$0.52B', '+6%'], ['Water', '$134M', '15.3%', '$0.34B', '+21%'], ]; const FH_LIQUIDITY = [ ['Cash & equivalents', '$142M'], ['Undrawn revolver', '$380M'], ['Total liquidity', '$522M'], ['Total debt', '$40M'], ['Net cash', '$102M'], ]; function FinanceDashboard() { return (
{/* === Summary header === */}

Harding & Vane closed the first half of FY2026 ahead of plan — revenue reached{' '} $341M in Q2, the sixth consecutive quarter of growth, while adjusted EBITDA margin expanded 90 bps to 12.8%.

FY2026 · Q2 close As of June 30, 2026 USD · unaudited
{/* === Headline KPI strip === */}
{FH_KPI_1.map((k, i) => ( ))}
{FH_KPI_2.map((k, i) => ( ))}
{/* === Status callout === */}

Where the business stands — Q2 FY2026

Backlog held at $3.1B on a 1.3× book-to-bill and the balance sheet remains in a net cash position with $522M of total liquidity. Free cash flow of $98M represents 62% conversion, held back modestly by higher working capital in the Energy & Utilities segment. Trailing margin now sits above the 12% through-cycle target for the first time since FY2023.

{/* === Trend charts === */}
{/* === Book-to-bill + liquidity === */}
Capital & liquidity
Item
Amount
{FH_LIQUIDITY.map((row, i) => (
{row[0]}
{row[1]}
))}
{/* === Segment performance === */}
Segment performance — trailing twelve months
Segment
Revenue
EBITDA %
Backlog
YoY
{FH_SEGMENTS.map((row, i) => (
{row[0]}
{row[1]}
{row[2]}
{row[3]}
{row[4]}
))}
Total
$1.24B
12.8%
$3.10B
+11%
{/* === CFO watch items === */}

CFO watch items — Q2 FY2026

Two fixed-price Energy & Utilities contracts are tracking below bid margin and account for most of the working-capital build; an $18M claim on the Cascade transit package remains in commercial review, with recovery expected in Q4. DSO of 58 days sits four days above the ≤55-day target, driven by delayed owner certifications on three Infrastructure jobs.

); } /* ============ Placeholder for hubs still in build ============ */ const HUB_PLACEHOLDER = { People: { Icon: IconUsers, body: 'Headcount, hiring funnel, retention and org-health metrics for Harding & Vane will live here.', }, Sales: { Icon: IconDollar, body: 'Bookings, pipeline coverage, win-rate and revenue forecast across the commercial organization will live here.', }, Operations: { Icon: IconSliders, body: 'Project delivery, resource utilization and margin health across active engagements will live here.', }, }; function HubComingSoon({ hub }) { const meta = HUB_PLACEHOLDER[hub] || { Icon: IconLayoutDash, body: 'This dashboard is being built.' }; const Icon = meta.Icon; return (
Coming soon
The {hub} dashboard is on the way
{meta.body}
); } window.FinanceDashboard = FinanceDashboard; window.HubComingSoon = HubComingSoon;