// FRAZIER Finance OS — Home ("finance command center"). Phase 1: MOCK DATA // ONLY (hardcoded below, clearly labeled) — no fin_calc_* backend exists // yet. Phase 2 replaces FIN_HOME_MOCK with a real finApi('fin_home_summary') // call backed by the deterministic calc engine (see the Finance OS plan, // §6). The layout/behavior built here does not change when that lands — // only the data source does. const FIN_HOME_MOCK = { greeting: 'Good morning', healthy: false, healthLine: '3 things need your attention.', cash: 418_500_000, moneyInMonth: 185_000_000, moneyOutMonth: 142_300_000, cash3mo: 512_000_000, attention: [ { id: 'ar1', tone: 'warn', title: '3 invoices overdue', amount: 45_000_000 }, { id: 'pr1', tone: 'warn', title: 'Payroll due in 5 days', amount: 72_000_000 }, { id: 'cf1', tone: 'crit', title: 'Cash may drop below reserve in January', amount: null }, ], }; const FIN_JARVIS_SUGGEST = [ 'Can we hire someone?', 'How much cash will we have in 3 months?', "Who hasn't paid us?", 'Why did expenses increase?', ]; function FinHomeCard({ label, value, tone }) { return (
{label} {finIDR(value)}
); } function FinHome({ user, onNavigate }) { const d = FIN_HOME_MOCK; const [q, setQ] = React.useState(''); const first = (user && user.name ? user.name.split(' ')[0] : '') || ''; return (
{d.greeting}{first ? ', ' + first : ''}

{d.healthy ? 'Your finances look healthy.' : d.healthLine}

{d.attention.length ? (
{d.attention.map((a) => ( ))}
) : null}
{ e.preventDefault(); onNavigate('jarvis', q); }}> setQ(e.target.value)} />
{FIN_JARVIS_SUGGEST.map((s) => ( ))}
); } Object.assign(window, { FinHome, FIN_HOME_MOCK });