{"token":"1144d1a2-d563-42ad-a7cd-0adfe939c1cc","title":"财务案例","dashboard_str":"{\"title\":\"财务案例\",\"viewInfos\":[{\"file_name\":\"quarterly-budget-report.xlsx\",\"file_url\":\"https://excelup.kyou.ltd/dashboard/quarterly-budget-report.xlsx\",\"id\":0,\"hashId\":\"\"}],\"query\":\"原样输出该html,不要有任何修改:\\n\u003c!DOCTYPE html\u003e\\n\u003chtml lang=\\\"zh-CN\\\"\u003e\\n\u003chead\u003e\\n\u003cmeta charset=\\\"UTF-8\\\"\u003e\\n\u003cmeta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1\\\"\u003e\\n\u003ctitle\u003e财务预算监控看板 · Q1 2025\u003c/title\u003e\\n\u003clink rel=\\\"stylesheet\\\" href=\\\"https://cdn.jsdelivr.net/npm/bulma@1.0.4/css/bulma.min.css\\\"\u003e\\n\u003cscript src=\\\"https://cdn.jsdelivr.net/npm/echarts@5.5.0/dist/echarts.min.js\\\"\u003e\u003c/script\u003e\\n\u003cstyle\u003e\\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800\u0026display=swap');\\n\\n * { box-sizing: border-box; }\\n\\n :root {\\n --bg-dark: #0a0a0a;\\n --bg-card: #1a1a1a;\\n --bg-elevated: #222;\\n --gold: #c9a84c;\\n --gold-light: #e8d48b;\\n --gold-dark: #a8882a;\\n --green: #4caf50;\\n --green-bg: #1b3a1b;\\n --red: #f44336;\\n --red-bg: #3a1b1b;\\n --orange: #ff9800;\\n --orange-bg: #3a2a0a;\\n --text-primary: #e8e8e8;\\n --text-secondary: #b0b0b0;\\n --text-muted: #777;\\n --border-color: #333;\\n --card-shadow: 0 4px 20px rgba(0,0,0,0.3), 0 1px 3px rgba(0,0,0,0.2);\\n --card-radius: 12px;\\n --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;\\n }\\n\\n html { font-family: var(--font); }\\n body { font-family: var(--font); background: #0d0d0d; color: var(--text-primary); }\\n\\n /* ===== HEADER ===== */\\n .dash-header {\\n background: linear-gradient(135deg, #000 0%, #0a0a0a 50%, #111 100%);\\n padding: 1.25rem 0;\\n border-bottom: 3px solid var(--gold);\\n box-shadow: 0 2px 12px rgba(201,168,76,0.3);\\n position: relative;\\n overflow: hidden;\\n }\\n .dash-header::after {\\n content: '';\\n position: absolute;\\n top: 0; left: 0; right: 0; bottom: 0;\\n background: url(\\\"data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23c9a84c' fill-opacity='0.05'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\\\");\\n opacity: 0.5;\\n }\\n .dash-header .container { position: relative; z-index: 1; }\\n .dash-header h1 {\\n color: #fff; font-weight: 800; font-size: 1.65rem; letter-spacing: -0.5px;\\n display: flex; align-items: center; gap: 0.75rem;\\n }\\n .dash-header h1 .logo-icon {\\n display: inline-flex; align-items: center; justify-content: center;\\n width: 40px; height: 40px; background: var(--gold); border-radius: 10px;\\n font-size: 1.4rem; color: #000;\\n }\\n .dash-header .subtitle {\\n color: rgba(255,255,255,0.7); font-size: 0.9rem; font-weight: 400;\\n margin-top: 0.2rem; letter-spacing: 0.3px;\\n padding-left: 3.25rem;\\n }\\n .dash-header .header-meta {\\n text-align: right; color: rgba(255,255,255,0.6); font-size: 0.75rem;\\n }\\n .dash-header .header-meta strong { color: var(--gold); font-weight: 600; }\\n\\n /* ===== FILTER BAR ===== */\\n .filter-bar {\\n background: var(--bg-card); border-radius: var(--card-radius); box-shadow: var(--card-shadow);\\n padding: 0.75rem 1.25rem;\\n border: 1px solid rgba(201,168,76,0.15);\\n display: flex;\\n align-items: center;\\n gap: 1rem;\\n flex-wrap: wrap;\\n }\\n .filter-bar .filter-label {\\n font-size: 0.75rem; font-weight: 700; text-transform: uppercase;\\n color: var(--gold); letter-spacing: 0.8px;\\n white-space: nowrap;\\n flex-shrink: 0;\\n }\\n .filter-bar .filter-group {\\n display: flex;\\n align-items: center;\\n gap: 0.5rem;\\n flex-wrap: wrap;\\n }\\n .filter-bar .filter-group select {\\n border: 1px solid var(--border-color); border-radius: 8px; font-size: 0.8rem;\\n padding: 0.65rem 2rem 0.65rem 0.75rem; background: #111; font-family: var(--font);\\n color: var(--text-primary); font-weight: 500;\\n -webkit-appearance: none;\\n -moz-appearance: none;\\n appearance: none;\\n cursor: pointer;\\n background-image: url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%23c9a84c'/%3E%3C/svg%3E\\\");\\n background-repeat: no-repeat;\\n background-position: right 0.6rem center;\\n background-size: 10px 6px;\\n }\\n .filter-bar .filter-group select:focus {\\n border-color: var(--gold);\\n box-shadow: 0 0 0 0.125em rgba(201,168,76,0.25);\\n outline: none;\\n }\\n .filter-bar .filter-group select option {\\n background: #1a1a1a;\\n color: #e8e8e8;\\n }\\n .filter-bar .filter-group select option:checked {\\n background: #c9a84c;\\n color: #000;\\n }\\n .filter-bar .filter-group select option:hover {\\n background: #333;\\n }\\n .filter-bar .filter-group select:focus option {\\n background: #1a1a1a;\\n color: #e8e8e8;\\n }\\n\\n /* ===== KPI CARDS ===== */\\n .kpi-card {\\n background: var(--bg-card); border-radius: var(--card-radius); box-shadow: var(--card-shadow);\\n padding: 1.25rem 1.5rem; position: relative; overflow: hidden;\\n border: 1px solid var(--border-color);\\n transition: transform 0.2s, box-shadow 0.2s;\\n }\\n .kpi-card:hover { transform: translateY(-2px); box-shadow: 0 8px 30px rgba(0,0,0,0.4); border-color: rgba(201,168,76,0.3); }\\n .kpi-card .kpi-icon {\\n width: 36px; height: 36px; border-radius: 10px;\\n display: flex; align-items: center; justify-content: center;\\n font-size: 1.1rem; margin-bottom: 0.5rem;\\n background: #222 !important;\\n color: var(--gold) !important;\\n }\\n .kpi-card .label {\\n font-size: 0.72rem; color: var(--text-muted); font-weight: 600;\\n text-transform: uppercase; letter-spacing: 0.5px;\\n }\\n .kpi-card .value {\\n font-size: 1.85rem; font-weight: 800; margin: 0.15rem 0; font-family: var(--font);\\n letter-spacing: -0.5px;\\n }\\n .kpi-card .sub { font-size: 0.78rem; font-weight: 500; }\\n .kpi-card .sub.positive { color: #81c784; }\\n .kpi-card .sub.negative { color: #e57373; }\\n .kpi-card .sub.neutral { color: var(--text-muted); }\\n\\n /* ===== CHART CARDS ===== */\\n .chart-card {\\n background: var(--bg-card); border-radius: var(--card-radius); box-shadow: var(--card-shadow);\\n padding: 1.25rem 1.5rem; border: 1px solid var(--border-color);\\n transition: border-color 0.2s;\\n }\\n .chart-card:hover { border-color: rgba(201,168,76,0.2); }\\n .chart-card .card-header {\\n display: flex; align-items: center; justify-content: space-between;\\n padding-bottom: 0.75rem; margin-bottom: 0.75rem;\\n border-bottom: 1px solid rgba(201,168,76,0.12);\\n }\\n .chart-card .card-header-title {\\n font-size: 0.85rem; font-weight: 700; color: var(--gold);\\n display: flex; align-items: center; gap: 0.5rem;\\n letter-spacing: 0.3px;\\n }\\n .chart-card .card-header-title .hdot {\\n width: 6px; height: 6px; border-radius: 50%; background: var(--gold);\\n display: inline-block;\\n }\\n .chart-container { width: 100%; height: 370px; }\\n .chart-container-lg { width: 100%; height: 500px; }\\n\\n /* ===== RISK TAGS ===== */\\n .risk-tag {\\n font-size: 0.7rem; padding: 0.2rem 0.6rem; border-radius: 20px; font-weight: 600;\\n display: inline-block; letter-spacing: 0.3px;\\n }\\n .risk-high { background: var(--red-bg); color: #e57373; }\\n .risk-medium { background: var(--orange-bg); color: #ffb74d; }\\n .risk-low { background: var(--green-bg); color: #81c784; }\\n\\n /* ===== TABLE ===== */\\n .scrollable-x { overflow: visible; }\\n .table-wrap { margin-top: 0.75rem; }\\n .table-wrap table {\\n width: 100%; border-collapse: separate; border-spacing: 0;\\n font-size: 0.8rem;\\n }\\n .table-wrap table thead th {\\n background: #111; padding: 0.65rem 0.75rem; font-weight: 700;\\n color: var(--text-secondary); font-size: 0.7rem; text-transform: uppercase;\\n letter-spacing: 0.5px; border-bottom: 2px solid rgba(201,168,76,0.2);\\n color: var(--gold);\\n white-space: nowrap;\\n }\\n .table-wrap table tbody td {\\n padding: 0.6rem 0.75rem; border-bottom: 1px solid rgba(201,168,76,0.12);\\n vertical-align: middle;\\n color: rgba(255,255,255,0.9);\\n font-weight: 500;\\n font-size: 0.85rem;\\n }\\n .table-wrap table tbody td strong {\\n color: rgba(255,255,255,0.9);\\n font-weight: 600;\\n }\\n .table-wrap table tbody tr:hover td { background: #1a1a1a; }\\n .table-wrap table tbody tr:last-child td { border-bottom: none; }\\n\\n /* ===== RESPONSIVE ===== */\\n @media screen and (max-width: 768px) {\\n .dash-header h1 { font-size: 1.2rem; }\\n .dash-header h1 .logo-icon { width: 32px; height: 32px; font-size: 1rem; }\\n .dash-header .header-meta { text-align: left; margin-top: 0.5rem; }\\n .chart-container { height: 280px; }\\n .chart-container-lg { height: 380px; }\\n .kpi-card .value { font-size: 1.45rem; }\\n .kpi-card { padding: 1rem; }\\n }\\n\\n /* ===== UNIFIED SECTION SPACING ===== */\\n .section-wrap { padding-top: 1.5rem; }\\n .section-wrap:first-of-type { padding-top: 0; }\\n\u003c/style\u003e\\n\u003c/head\u003e\\n\u003cbody\u003e\\n\\n\u003c!-- ===== HEADER ===== --\u003e\\n\u003cdiv class=\\\"dash-header\\\"\u003e\\n \u003cdiv class=\\\"container\\\"\u003e\\n \u003cdiv class=\\\"columns is-vcentered\\\"\u003e\\n \u003cdiv class=\\\"column\\\"\u003e\\n \u003ch1\u003e\\n \u003cspan class=\\\"logo-icon\\\"\u003e💰\u003c/span\u003e\\n 财务预算监控看板\\n \u003c/h1\u003e\\n \u003cdiv class=\\\"subtitle\\\"\u003e季度预算执行追踪 · 支出与超支风险分析\u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"column is-narrow\\\"\u003e\\n \u003cdiv class=\\\"header-meta\\\"\u003e\\n \u003cdiv\u003e报告周期\u003c/div\u003e\\n \u003cstrong\u003eQ1 · 2025年1月 - 3月\u003c/strong\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\\n\\n\u003cscript\u003e\\nconst DASHBOARD_DATA = {\\\"records\\\": [{\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 18000000, \\\"budgetMonthly\\\": 1500000, \\\"actualSpend\\\": 1520000, \\\"varianceAmount\\\": -20000, \\\"variancePercent\\\": -1.3, \\\"headcount\\\": 125, \\\"spendPerEmployee\\\": 12160, \\\"notes\\\": \\\"New senior hires started in Jan, slight overage expected\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 1200000, \\\"budgetMonthly\\\": 100000, \\\"actualSpend\\\": 95000, \\\"varianceAmount\\\": 5000, \\\"variancePercent\\\": 5, \\\"headcount\\\": 125, \\\"spendPerEmployee\\\": 760, \\\"notes\\\": \\\"AWS costs lower than expected due to optimization\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 45000, \\\"varianceAmount\\\": -15000, \\\"variancePercent\\\": -50, \\\"headcount\\\": 125, \\\"spendPerEmployee\\\": 360, \\\"notes\\\": \\\"Additional security audit and consulting\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 8500, \\\"varianceAmount\\\": 1500, \\\"variancePercent\\\": 15, \\\"headcount\\\": 125, \\\"spendPerEmployee\\\": 68, \\\"notes\\\": \\\"Reduced conference travel in Q1\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 18500, \\\"varianceAmount\\\": 1500, \\\"variancePercent\\\": 7.5, \\\"headcount\\\": 125, \\\"spendPerEmployee\\\": 148, \\\"notes\\\": \\\"Office supplies and equipment\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 7200000, \\\"budgetMonthly\\\": 600000, \\\"actualSpend\\\": 595000, \\\"varianceAmount\\\": 5000, \\\"variancePercent\\\": 0.8, \\\"headcount\\\": 45, \\\"spendPerEmployee\\\": 13222, \\\"notes\\\": \\\"Quota attainment bonuses lower than projected\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 300000, \\\"budgetMonthly\\\": 25000, \\\"actualSpend\\\": 28000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -12, \\\"headcount\\\": 45, \\\"spendPerEmployee\\\": 622, \\\"notes\\\": \\\"New sales tools and CRM upgrades\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 480000, \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 52000, \\\"varianceAmount\\\": -12000, \\\"variancePercent\\\": -30, \\\"headcount\\\": 45, \\\"spendPerEmployee\\\": 1156, \\\"notes\\\": \\\"Increased customer visits and conferences\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Marketing\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 32000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -6.7, \\\"headcount\\\": 45, \\\"spendPerEmployee\\\": 711, \\\"notes\\\": \\\"Sales collateral and trade show materials\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 180000, \\\"budgetMonthly\\\": 15000, \\\"actualSpend\\\": 14200, \\\"varianceAmount\\\": 800, \\\"variancePercent\\\": 5.3, \\\"headcount\\\": 45, \\\"spendPerEmployee\\\": 316, \\\"notes\\\": \\\"Office and general expenses\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 3600000, \\\"budgetMonthly\\\": 300000, \\\"actualSpend\\\": 305000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -1.7, \\\"headcount\\\": 25, \\\"spendPerEmployee\\\": 12200, \\\"notes\\\": \\\"New content marketing hire\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 600000, \\\"budgetMonthly\\\": 50000, \\\"actualSpend\\\": 48000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 4, \\\"headcount\\\": 25, \\\"spendPerEmployee\\\": 1920, \\\"notes\\\": \\\"Marketing automation and analytics tools\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Advertising\\\", \\\"budgetAnnual\\\": 2400000, \\\"budgetMonthly\\\": 200000, \\\"actualSpend\\\": 195000, \\\"varianceAmount\\\": 5000, \\\"variancePercent\\\": 2.5, \\\"headcount\\\": 25, \\\"spendPerEmployee\\\": 7800, \\\"notes\\\": \\\"Paid advertising campaigns\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 25000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -25, \\\"headcount\\\": 25, \\\"spendPerEmployee\\\": 1000, \\\"notes\\\": \\\"Agency support for campaigns\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 12000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -20, \\\"headcount\\\": 25, \\\"spendPerEmployee\\\": 480, \\\"notes\\\": \\\"Conference and event travel\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 4800000, \\\"budgetMonthly\\\": 400000, \\\"actualSpend\\\": 410000, \\\"varianceAmount\\\": -10000, \\\"variancePercent\\\": -2.5, \\\"headcount\\\": 35, \\\"spendPerEmployee\\\": 11714, \\\"notes\\\": \\\"Product manager and designer hires\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 180000, \\\"budgetMonthly\\\": 15000, \\\"actualSpend\\\": 16000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -6.7, \\\"headcount\\\": 35, \\\"spendPerEmployee\\\": 457, \\\"notes\\\": \\\"Product analytics and design tools\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 8500, \\\"varianceAmount\\\": 1500, \\\"variancePercent\\\": 15, \\\"headcount\\\": 35, \\\"spendPerEmployee\\\": 243, \\\"notes\\\": \\\"User research and consulting\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 60000, \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 4200, \\\"varianceAmount\\\": 800, \\\"variancePercent\\\": 16, \\\"headcount\\\": 35, \\\"spendPerEmployee\\\": 120, \\\"notes\\\": \\\"Customer research travel\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 2400000, \\\"budgetMonthly\\\": 200000, \\\"actualSpend\\\": 198000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 1, \\\"headcount\\\": 30, \\\"spendPerEmployee\\\": 6600, \\\"notes\\\": \\\"CSM team fully staffed\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 11000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -10, \\\"headcount\\\": 30, \\\"spendPerEmployee\\\": 367, \\\"notes\\\": \\\"Customer success platforms\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 96000, \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 9500, \\\"varianceAmount\\\": -1500, \\\"variancePercent\\\": -18.8, \\\"headcount\\\": 30, \\\"spendPerEmployee\\\": 317, \\\"notes\\\": \\\"Customer onsite visits\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 72000, \\\"budgetMonthly\\\": 6000, \\\"actualSpend\\\": 5800, \\\"varianceAmount\\\": 200, \\\"variancePercent\\\": 3.3, \\\"headcount\\\": 30, \\\"spendPerEmployee\\\": 193, \\\"notes\\\": \\\"Training materials and resources\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1800000, \\\"budgetMonthly\\\": 150000, \\\"actualSpend\\\": 148000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 1.3, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 12333, \\\"notes\\\": \\\"Full finance team in place\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 9500, \\\"varianceAmount\\\": 500, \\\"variancePercent\\\": 5, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 792, \\\"notes\\\": \\\"Financial systems and tools\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 22000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -10, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 1833, \\\"notes\\\": \\\"Audit and tax preparation\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 60000, \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 4800, \\\"varianceAmount\\\": 200, \\\"variancePercent\\\": 4, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 400, \\\"notes\\\": \\\"Office and administrative costs\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1200000, \\\"budgetMonthly\\\": 100000, \\\"actualSpend\\\": 102000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -2, \\\"headcount\\\": 8, \\\"spendPerEmployee\\\": 12750, \\\"notes\\\": \\\"HR team and benefits admin\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 96000, \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 8500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -6.3, \\\"headcount\\\": 8, \\\"spendPerEmployee\\\": 1063, \\\"notes\\\": \\\"HRIS and recruiting tools\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 144000, \\\"budgetMonthly\\\": 12000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -25, \\\"headcount\\\": 8, \\\"spendPerEmployee\\\": 1875, \\\"notes\\\": \\\"Executive search and consulting\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 72000, \\\"budgetMonthly\\\": 6000, \\\"actualSpend\\\": 5500, \\\"varianceAmount\\\": 500, \\\"variancePercent\\\": 8.3, \\\"headcount\\\": 8, \\\"spendPerEmployee\\\": 688, \\\"notes\\\": \\\"Employee events and programs\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1800000, \\\"budgetMonthly\\\": 150000, \\\"actualSpend\\\": 145000, \\\"varianceAmount\\\": 5000, \\\"variancePercent\\\": 3.3, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 7250, \\\"notes\\\": \\\"IT and facilities team\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 32000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -6.7, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 1600, \\\"notes\\\": \\\"IT infrastructure and security\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 8000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 20, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 400, \\\"notes\\\": \\\"Legal and compliance\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 48000, \\\"budgetMonthly\\\": 4000, \\\"actualSpend\\\": 3500, \\\"varianceAmount\\\": 500, \\\"variancePercent\\\": 12.5, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 175, \\\"notes\\\": \\\"Minimal travel requirements\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-01-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Facilities\\\", \\\"budgetAnnual\\\": 480000, \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 38000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 5, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 1900, \\\"notes\\\": \\\"Office rent and utilities\\\", \\\"monthLabel\\\": \\\"Jan\\\", \\\"monthKey\\\": \\\"2025-01-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 18000000, \\\"budgetMonthly\\\": 1500000, \\\"actualSpend\\\": 1535000, \\\"varianceAmount\\\": -35000, \\\"variancePercent\\\": -2.3, \\\"headcount\\\": 128, \\\"spendPerEmployee\\\": 11992, \\\"notes\\\": \\\"Additional backend engineers hired\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 1200000, \\\"budgetMonthly\\\": 100000, \\\"actualSpend\\\": 102000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -2, \\\"headcount\\\": 128, \\\"spendPerEmployee\\\": 797, \\\"notes\\\": \\\"Increased cloud usage with growth\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 25000, \\\"varianceAmount\\\": 5000, \\\"variancePercent\\\": 16.7, \\\"headcount\\\": 128, \\\"spendPerEmployee\\\": 195, \\\"notes\\\": \\\"Lower consulting needs this month\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 7500, \\\"varianceAmount\\\": 2500, \\\"variancePercent\\\": 25, \\\"headcount\\\": 128, \\\"spendPerEmployee\\\": 59, \\\"notes\\\": \\\"Continued low travel\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 19000, \\\"varianceAmount\\\": 1000, \\\"variancePercent\\\": 5, \\\"headcount\\\": 128, \\\"spendPerEmployee\\\": 148, \\\"notes\\\": \\\"Standard operational costs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 7200000, \\\"budgetMonthly\\\": 600000, \\\"actualSpend\\\": 610000, \\\"varianceAmount\\\": -10000, \\\"variancePercent\\\": -1.7, \\\"headcount\\\": 47, \\\"spendPerEmployee\\\": 12979, \\\"notes\\\": \\\"Strong quota attainment bonuses\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 300000, \\\"budgetMonthly\\\": 25000, \\\"actualSpend\\\": 26000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -4, \\\"headcount\\\": 47, \\\"spendPerEmployee\\\": 553, \\\"notes\\\": \\\"Ongoing tool subscriptions\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 480000, \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 48000, \\\"varianceAmount\\\": -8000, \\\"variancePercent\\\": -20, \\\"headcount\\\": 47, \\\"spendPerEmployee\\\": 1021, \\\"notes\\\": \\\"Heavy conference season\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Marketing\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 28000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 6.7, \\\"headcount\\\": 47, \\\"spendPerEmployee\\\": 596, \\\"notes\\\": \\\"Reduced trade show expenses\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 180000, \\\"budgetMonthly\\\": 15000, \\\"actualSpend\\\": 15500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -3.3, \\\"headcount\\\": 47, \\\"spendPerEmployee\\\": 330, \\\"notes\\\": \\\"Standard operations\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 3600000, \\\"budgetMonthly\\\": 300000, \\\"actualSpend\\\": 308000, \\\"varianceAmount\\\": -8000, \\\"variancePercent\\\": -2.7, \\\"headcount\\\": 26, \\\"spendPerEmployee\\\": 11846, \\\"notes\\\": \\\"Growth marketing specialist added\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 600000, \\\"budgetMonthly\\\": 50000, \\\"actualSpend\\\": 52000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -4, \\\"headcount\\\": 26, \\\"spendPerEmployee\\\": 2000, \\\"notes\\\": \\\"New attribution tools\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Advertising\\\", \\\"budgetAnnual\\\": 2400000, \\\"budgetMonthly\\\": 200000, \\\"actualSpend\\\": 210000, \\\"varianceAmount\\\": -10000, \\\"variancePercent\\\": -5, \\\"headcount\\\": 26, \\\"spendPerEmployee\\\": 8077, \\\"notes\\\": \\\"Increased paid spend for growth\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 18000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 10, \\\"headcount\\\": 26, \\\"spendPerEmployee\\\": 692, \\\"notes\\\": \\\"Lower agency costs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 8000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 20, \\\"headcount\\\": 26, \\\"spendPerEmployee\\\": 308, \\\"notes\\\": \\\"Remote events focus\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 4800000, \\\"budgetMonthly\\\": 400000, \\\"actualSpend\\\": 415000, \\\"varianceAmount\\\": -15000, \\\"variancePercent\\\": -3.8, \\\"headcount\\\": 36, \\\"spendPerEmployee\\\": 11528, \\\"notes\\\": \\\"Senior product manager hire\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 180000, \\\"budgetMonthly\\\": 15000, \\\"actualSpend\\\": 15500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -3.3, \\\"headcount\\\": 36, \\\"spendPerEmployee\\\": 431, \\\"notes\\\": \\\"Additional design tools\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 12000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -20, \\\"headcount\\\": 36, \\\"spendPerEmployee\\\": 333, \\\"notes\\\": \\\"User research projects\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 60000, \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 6000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -20, \\\"headcount\\\": 36, \\\"spendPerEmployee\\\": 167, \\\"notes\\\": \\\"Customer development travel\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 2400000, \\\"budgetMonthly\\\": 200000, \\\"actualSpend\\\": 202000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -1, \\\"headcount\\\": 31, \\\"spendPerEmployee\\\": 6516, \\\"notes\\\": \\\"Customer success manager added\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 10500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -5, \\\"headcount\\\": 31, \\\"spendPerEmployee\\\": 339, \\\"notes\\\": \\\"Platform upgrades\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 96000, \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 11000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -37.5, \\\"headcount\\\": 31, \\\"spendPerEmployee\\\": 355, \\\"notes\\\": \\\"Increased customer visits\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 72000, \\\"budgetMonthly\\\": 6000, \\\"actualSpend\\\": 6200, \\\"varianceAmount\\\": -200, \\\"variancePercent\\\": -3.3, \\\"headcount\\\": 31, \\\"spendPerEmployee\\\": 200, \\\"notes\\\": \\\"Training and materials\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1800000, \\\"budgetMonthly\\\": 150000, \\\"actualSpend\\\": 149000, \\\"varianceAmount\\\": 1000, \\\"variancePercent\\\": 0.7, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 12417, \\\"notes\\\": \\\"Stable team\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 9800, \\\"varianceAmount\\\": 200, \\\"variancePercent\\\": 2, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 817, \\\"notes\\\": \\\"Standard tech costs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 18000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 10, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 1500, \\\"notes\\\": \\\"Lower consulting needs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 60000, \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 5200, \\\"varianceAmount\\\": -200, \\\"variancePercent\\\": -4, \\\"headcount\\\": 12, \\\"spendPerEmployee\\\": 433, \\\"notes\\\": \\\"Standard operations\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1200000, \\\"budgetMonthly\\\": 100000, \\\"actualSpend\\\": 105000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -5, \\\"headcount\\\": 9, \\\"spendPerEmployee\\\": 11667, \\\"notes\\\": \\\"Recruiter added to team\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 96000, \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 8200, \\\"varianceAmount\\\": -200, \\\"variancePercent\\\": -2.5, \\\"headcount\\\": 9, \\\"spendPerEmployee\\\": 911, \\\"notes\\\": \\\"HRIS and ATS costs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 144000, \\\"budgetMonthly\\\": 12000, \\\"actualSpend\\\": 10000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 16.7, \\\"headcount\\\": 9, \\\"spendPerEmployee\\\": 1111, \\\"notes\\\": \\\"Lower recruiting fees\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 72000, \\\"budgetMonthly\\\": 6000, \\\"actualSpend\\\": 6500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -8.3, \\\"headcount\\\": 9, \\\"spendPerEmployee\\\": 722, \\\"notes\\\": \\\"Employee programs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1800000, \\\"budgetMonthly\\\": 150000, \\\"actualSpend\\\": 148000, \\\"varianceAmount\\\": 2000, \\\"variancePercent\\\": 1.3, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 7400, \\\"notes\\\": \\\"Stable operations team\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 31000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -3.3, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 1550, \\\"notes\\\": \\\"Security tool upgrades\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 9000, \\\"varianceAmount\\\": 1000, \\\"variancePercent\\\": 10, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 450, \\\"notes\\\": \\\"Legal costs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 48000, \\\"budgetMonthly\\\": 4000, \\\"actualSpend\\\": 3000, \\\"varianceAmount\\\": 1000, \\\"variancePercent\\\": 25, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 150, \\\"notes\\\": \\\"Minimal travel\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-02-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Facilities\\\", \\\"budgetAnnual\\\": 480000, \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 40500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -1.3, \\\"headcount\\\": 20, \\\"spendPerEmployee\\\": 2025, \\\"notes\\\": \\\"Office costs\\\", \\\"monthLabel\\\": \\\"Feb\\\", \\\"monthKey\\\": \\\"2025-02-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 18000000, \\\"budgetMonthly\\\": 1500000, \\\"actualSpend\\\": 1580000, \\\"varianceAmount\\\": -80000, \\\"variancePercent\\\": -5.3, \\\"headcount\\\": 132, \\\"spendPerEmployee\\\": 11970, \\\"notes\\\": \\\"Significant hiring push\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 1200000, \\\"budgetMonthly\\\": 100000, \\\"actualSpend\\\": 108000, \\\"varianceAmount\\\": -8000, \\\"variancePercent\\\": -8, \\\"headcount\\\": 132, \\\"spendPerEmployee\\\": 818, \\\"notes\\\": \\\"Infrastructure scaling\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 35000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -16.7, \\\"headcount\\\": 132, \\\"spendPerEmployee\\\": 265, \\\"notes\\\": \\\"Security and compliance work\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 12000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -20, \\\"headcount\\\": 132, \\\"spendPerEmployee\\\": 91, \\\"notes\\\": \\\"Conference attendance picking up\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 20500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -2.5, \\\"headcount\\\": 132, \\\"spendPerEmployee\\\": 155, \\\"notes\\\": \\\"Equipment purchases\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 7200000, \\\"budgetMonthly\\\": 600000, \\\"actualSpend\\\": 625000, \\\"varianceAmount\\\": -25000, \\\"variancePercent\\\": -4.2, \\\"headcount\\\": 50, \\\"spendPerEmployee\\\": 12500, \\\"notes\\\": \\\"Strong Q1 performance bonuses\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 300000, \\\"budgetMonthly\\\": 25000, \\\"actualSpend\\\": 27000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -8, \\\"headcount\\\": 50, \\\"spendPerEmployee\\\": 540, \\\"notes\\\": \\\"Sales stack improvements\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 480000, \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 55000, \\\"varianceAmount\\\": -15000, \\\"variancePercent\\\": -37.5, \\\"headcount\\\": 50, \\\"spendPerEmployee\\\": 1100, \\\"notes\\\": \\\"Major conference and customer events\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Marketing\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 35000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -16.7, \\\"headcount\\\": 50, \\\"spendPerEmployee\\\": 700, \\\"notes\\\": \\\"Trade show and materials\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 180000, \\\"budgetMonthly\\\": 15000, \\\"actualSpend\\\": 16000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -6.7, \\\"headcount\\\": 50, \\\"spendPerEmployee\\\": 320, \\\"notes\\\": \\\"Operations support\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 3600000, \\\"budgetMonthly\\\": 300000, \\\"actualSpend\\\": 312000, \\\"varianceAmount\\\": -12000, \\\"variancePercent\\\": -4, \\\"headcount\\\": 27, \\\"spendPerEmployee\\\": 11556, \\\"notes\\\": \\\"Marketing operations hire\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 600000, \\\"budgetMonthly\\\": 50000, \\\"actualSpend\\\": 55000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -10, \\\"headcount\\\": 27, \\\"spendPerEmployee\\\": 2037, \\\"notes\\\": \\\"Marketing stack expansion\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Advertising\\\", \\\"budgetAnnual\\\": 2400000, \\\"budgetMonthly\\\": 200000, \\\"actualSpend\\\": 225000, \\\"varianceAmount\\\": -25000, \\\"variancePercent\\\": -12.5, \\\"headcount\\\": 27, \\\"spendPerEmployee\\\": 8333, \\\"notes\\\": \\\"Aggressive growth campaigns\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 22000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -10, \\\"headcount\\\": 27, \\\"spendPerEmployee\\\": 815, \\\"notes\\\": \\\"Agency partnerships\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -50, \\\"headcount\\\": 27, \\\"spendPerEmployee\\\": 556, \\\"notes\\\": \\\"Conference and event season\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 4800000, \\\"budgetMonthly\\\": 400000, \\\"actualSpend\\\": 425000, \\\"varianceAmount\\\": -25000, \\\"variancePercent\\\": -6.3, \\\"headcount\\\": 38, \\\"spendPerEmployee\\\": 11184, \\\"notes\\\": \\\"Product design team expansion\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 180000, \\\"budgetMonthly\\\": 15000, \\\"actualSpend\\\": 16000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -6.7, \\\"headcount\\\": 38, \\\"spendPerEmployee\\\": 421, \\\"notes\\\": \\\"Design and analytics tools\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -50, \\\"headcount\\\": 38, \\\"spendPerEmployee\\\": 395, \\\"notes\\\": \\\"Extensive user research\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 60000, \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 8000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -60, \\\"headcount\\\": 38, \\\"spendPerEmployee\\\": 211, \\\"notes\\\": \\\"Customer development trips\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 2400000, \\\"budgetMonthly\\\": 200000, \\\"actualSpend\\\": 205000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -2.5, \\\"headcount\\\": 32, \\\"spendPerEmployee\\\": 6406, \\\"notes\\\": \\\"Team growth continues\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 11000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -10, \\\"headcount\\\": 32, \\\"spendPerEmployee\\\": 344, \\\"notes\\\": \\\"Platform investments\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 96000, \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 14000, \\\"varianceAmount\\\": -6000, \\\"variancePercent\\\": -75, \\\"headcount\\\": 32, \\\"spendPerEmployee\\\": 438, \\\"notes\\\": \\\"Heavy customer engagement\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 72000, \\\"budgetMonthly\\\": 6000, \\\"actualSpend\\\": 6500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -8.3, \\\"headcount\\\": 32, \\\"spendPerEmployee\\\": 203, \\\"notes\\\": \\\"Training and enablement\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1800000, \\\"budgetMonthly\\\": 150000, \\\"actualSpend\\\": 151000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -0.7, \\\"headcount\\\": 13, \\\"spendPerEmployee\\\": 11615, \\\"notes\\\": \\\"Accounting specialist added\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 10200, \\\"varianceAmount\\\": -200, \\\"variancePercent\\\": -2, \\\"headcount\\\": 13, \\\"spendPerEmployee\\\": 785, \\\"notes\\\": \\\"Standard costs\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 240000, \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 25000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -25, \\\"headcount\\\": 13, \\\"spendPerEmployee\\\": 1923, \\\"notes\\\": \\\"Year-end audit preparation\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 60000, \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 5100, \\\"varianceAmount\\\": -100, \\\"variancePercent\\\": -2, \\\"headcount\\\": 13, \\\"spendPerEmployee\\\": 392, \\\"notes\\\": \\\"Standard operations\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1200000, \\\"budgetMonthly\\\": 100000, \\\"actualSpend\\\": 108000, \\\"varianceAmount\\\": -8000, \\\"variancePercent\\\": -8, \\\"headcount\\\": 10, \\\"spendPerEmployee\\\": 10800, \\\"notes\\\": \\\"Additional recruiter\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 96000, \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 8500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -6.3, \\\"headcount\\\": 10, \\\"spendPerEmployee\\\": 850, \\\"notes\\\": \\\"Recruiting tool upgrades\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 144000, \\\"budgetMonthly\\\": 12000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -25, \\\"headcount\\\": 10, \\\"spendPerEmployee\\\": 1500, \\\"notes\\\": \\\"Executive search projects\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetAnnual\\\": 72000, \\\"budgetMonthly\\\": 6000, \\\"actualSpend\\\": 7000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -16.7, \\\"headcount\\\": 10, \\\"spendPerEmployee\\\": 700, \\\"notes\\\": \\\"Employee engagement programs\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetAnnual\\\": 1800000, \\\"budgetMonthly\\\": 150000, \\\"actualSpend\\\": 152000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -1.3, \\\"headcount\\\": 21, \\\"spendPerEmployee\\\": 7238, \\\"notes\\\": \\\"IT support hire\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetAnnual\\\": 360000, \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 33000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -10, \\\"headcount\\\": 21, \\\"spendPerEmployee\\\": 1571, \\\"notes\\\": \\\"Infrastructure upgrades\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetAnnual\\\": 120000, \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 12000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -20, \\\"headcount\\\": 21, \\\"spendPerEmployee\\\": 571, \\\"notes\\\": \\\"Legal and compliance\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetAnnual\\\": 48000, \\\"budgetMonthly\\\": 4000, \\\"actualSpend\\\": 4500, \\\"varianceAmount\\\": -500, \\\"variancePercent\\\": -12.5, \\\"headcount\\\": 21, \\\"spendPerEmployee\\\": 214, \\\"notes\\\": \\\"Vendor meetings\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}, {\\\"month\\\": \\\"2025-03-01 00:00:00\\\", \\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Facilities\\\", \\\"budgetAnnual\\\": 480000, \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 41000, \\\"varianceAmount\\\": -1000, \\\"variancePercent\\\": -2.5, \\\"headcount\\\": 21, \\\"spendPerEmployee\\\": 1952, \\\"notes\\\": \\\"Facility improvements\\\", \\\"monthLabel\\\": \\\"Mar\\\", \\\"monthKey\\\": \\\"2025-03-01\\\"}], \\\"departments\\\": [\\\"Customer Success\\\", \\\"Engineering\\\", \\\"Finance\\\", \\\"HR\\\", \\\"Marketing\\\", \\\"Operations\\\", \\\"Product\\\", \\\"Sales\\\"], \\\"categories\\\": [\\\"Advertising\\\", \\\"Facilities\\\", \\\"Marketing\\\", \\\"Operations\\\", \\\"Personnel\\\", \\\"Professional Services\\\", \\\"Technology\\\", \\\"Travel\\\"], \\\"months\\\": [\\\"Jan\\\", \\\"Feb\\\", \\\"Mar\\\"], \\\"monthKeys\\\": [\\\"01-01-25\\\", \\\"02-01-25\\\", \\\"03-01-25\\\"], \\\"summary\\\": {\\\"totalBudgetAnnual\\\": 149364000, \\\"totalBudgetMonthly\\\": 12447000, \\\"totalActualSpend\\\": 12846700, \\\"totalVarianceAmount\\\": -399700, \\\"totalHeadcount\\\": 4394}, \\\"byDepartment\\\": {\\\"Customer Success\\\": {\\\"budgetMonthly\\\": 672000.0, \\\"actualSpend\\\": 690500.0, \\\"varianceAmount\\\": 18500.0, \\\"variancePercent\\\": 2.8}, \\\"Engineering\\\": {\\\"budgetMonthly\\\": 4980000.0, \\\"actualSpend\\\": 5131000.0, \\\"varianceAmount\\\": 151000.0, \\\"variancePercent\\\": 3.0}, \\\"Finance\\\": {\\\"budgetMonthly\\\": 555000.0, \\\"actualSpend\\\": 557600.0, \\\"varianceAmount\\\": 2600.0, \\\"variancePercent\\\": 0.5}, \\\"HR\\\": {\\\"budgetMonthly\\\": 378000.0, \\\"actualSpend\\\": 399200.0, \\\"varianceAmount\\\": 21200.0, \\\"variancePercent\\\": 5.6}, \\\"Marketing\\\": {\\\"budgetMonthly\\\": 1740000.0, \\\"actualSpend\\\": 1810000.0, \\\"varianceAmount\\\": 70000.0, \\\"variancePercent\\\": 4.0}, \\\"Operations\\\": {\\\"budgetMonthly\\\": 702000.0, \\\"actualSpend\\\": 700500.0, \\\"varianceAmount\\\": -1500.0, \\\"variancePercent\\\": -0.2}, \\\"Product\\\": {\\\"budgetMonthly\\\": 1290000.0, \\\"actualSpend\\\": 1351200.0, \\\"varianceAmount\\\": 61200.0, \\\"variancePercent\\\": 4.7}, \\\"Sales\\\": {\\\"budgetMonthly\\\": 2130000.0, \\\"actualSpend\\\": 2206700.0, \\\"varianceAmount\\\": 76700.0, \\\"variancePercent\\\": 3.6}}, \\\"byCategory\\\": {\\\"Advertising\\\": {\\\"budgetMonthly\\\": 600000.0, \\\"actualSpend\\\": 630000.0, \\\"varianceAmount\\\": 30000.0, \\\"variancePercent\\\": 5.0}, \\\"Facilities\\\": {\\\"budgetMonthly\\\": 120000.0, \\\"actualSpend\\\": 119500.0, \\\"varianceAmount\\\": -500.0, \\\"variancePercent\\\": -0.4}, \\\"Marketing\\\": {\\\"budgetMonthly\\\": 90000.0, \\\"actualSpend\\\": 95000.0, \\\"varianceAmount\\\": 5000.0, \\\"variancePercent\\\": 5.6}, \\\"Operations\\\": {\\\"budgetMonthly\\\": 156000.0, \\\"actualSpend\\\": 156300.0, \\\"varianceAmount\\\": 300.0, \\\"variancePercent\\\": 0.2}, \\\"Personnel\\\": {\\\"budgetMonthly\\\": 10200000.0, \\\"actualSpend\\\": 10453000.0, \\\"varianceAmount\\\": 253000.0, \\\"variancePercent\\\": 2.5}, \\\"Professional Services\\\": {\\\"budgetMonthly\\\": 306000.0, \\\"actualSpend\\\": 339500.0, \\\"varianceAmount\\\": 33500.0, \\\"variancePercent\\\": 10.9}, \\\"Technology\\\": {\\\"budgetMonthly\\\": 744000.0, \\\"actualSpend\\\": 771700.0, \\\"varianceAmount\\\": 27700.0, \\\"variancePercent\\\": 3.7}, \\\"Travel\\\": {\\\"budgetMonthly\\\": 231000.0, \\\"actualSpend\\\": 281700.0, \\\"varianceAmount\\\": 50700.0, \\\"variancePercent\\\": 21.9}}, \\\"byMonth\\\": {\\\"01-01-25\\\": {\\\"budgetMonthly\\\": 4149000, \\\"actualSpend\\\": 4198000, \\\"varianceAmount\\\": -49000}, \\\"02-01-25\\\": {\\\"budgetMonthly\\\": 4149000, \\\"actualSpend\\\": 4233400, \\\"varianceAmount\\\": -84400}, \\\"03-01-25\\\": {\\\"budgetMonthly\\\": 4149000, \\\"actualSpend\\\": 4415300, \\\"varianceAmount\\\": -266300}}, \\\"overBudgetItems\\\": [{\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 14000, \\\"varianceAmount\\\": -6000, \\\"variancePercent\\\": -75}, {\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 5000, \\\"actualSpend\\\": 8000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -60}, {\\\"month\\\": \\\"Jan\\\", \\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 30000, \\\"actualSpend\\\": 45000, \\\"varianceAmount\\\": -15000, \\\"variancePercent\\\": -50}, {\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -50}, {\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -50}, {\\\"month\\\": \\\"Feb\\\", \\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 8000, \\\"actualSpend\\\": 11000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -37.5}, {\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 55000, \\\"varianceAmount\\\": -15000, \\\"variancePercent\\\": -37.5}, {\\\"month\\\": \\\"Jan\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 52000, \\\"varianceAmount\\\": -12000, \\\"variancePercent\\\": -30}, {\\\"month\\\": \\\"Jan\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 25000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -25}, {\\\"month\\\": \\\"Jan\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 12000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -25}, {\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 20000, \\\"actualSpend\\\": 25000, \\\"varianceAmount\\\": -5000, \\\"variancePercent\\\": -25}, {\\\"month\\\": \\\"Mar\\\", \\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 12000, \\\"actualSpend\\\": 15000, \\\"varianceAmount\\\": -3000, \\\"variancePercent\\\": -25}, {\\\"month\\\": \\\"Jan\\\", \\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 12000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -20}, {\\\"month\\\": \\\"Feb\\\", \\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 40000, \\\"actualSpend\\\": 48000, \\\"varianceAmount\\\": -8000, \\\"variancePercent\\\": -20}, {\\\"month\\\": \\\"Feb\\\", \\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 10000, \\\"actualSpend\\\": 12000, \\\"varianceAmount\\\": -2000, \\\"variancePercent\\\": -20}], \\\"monthlyTrend\\\": {\\\"monthLabels\\\": [\\\"Jan\\\", \\\"Feb\\\", \\\"Mar\\\"], \\\"budget\\\": [4149000, 4149000, 4149000], \\\"actual\\\": [4198000, 4233400, 4415300], \\\"variance\\\": [-49000, -84400, -266300]}, \\\"deptCategoryMatrix\\\": [{\\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetMonthly\\\": 18000.0, \\\"actualSpend\\\": 18500.0, \\\"variancePercent\\\": 2.8}, {\\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 600000.0, \\\"actualSpend\\\": 605000.0, \\\"variancePercent\\\": 0.8}, {\\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 30000.0, \\\"actualSpend\\\": 32500.0, \\\"variancePercent\\\": 8.3}, {\\\"department\\\": \\\"Customer Success\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 24000.0, \\\"actualSpend\\\": 34500.0, \\\"variancePercent\\\": 43.8}, {\\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetMonthly\\\": 60000.0, \\\"actualSpend\\\": 58000.0, \\\"variancePercent\\\": -3.3}, {\\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 4500000.0, \\\"actualSpend\\\": 4635000.0, \\\"variancePercent\\\": 3.0}, {\\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 90000.0, \\\"actualSpend\\\": 105000.0, \\\"variancePercent\\\": 16.7}, {\\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 300000.0, \\\"actualSpend\\\": 305000.0, \\\"variancePercent\\\": 1.7}, {\\\"department\\\": \\\"Engineering\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 30000.0, \\\"actualSpend\\\": 28000.0, \\\"variancePercent\\\": -6.7}, {\\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetMonthly\\\": 15000.0, \\\"actualSpend\\\": 15100.0, \\\"variancePercent\\\": 0.7}, {\\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 450000.0, \\\"actualSpend\\\": 448000.0, \\\"variancePercent\\\": -0.4}, {\\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 60000.0, \\\"actualSpend\\\": 65000.0, \\\"variancePercent\\\": 8.3}, {\\\"department\\\": \\\"Finance\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 30000.0, \\\"actualSpend\\\": 29500.0, \\\"variancePercent\\\": -1.7}, {\\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetMonthly\\\": 18000.0, \\\"actualSpend\\\": 19000.0, \\\"variancePercent\\\": 5.6}, {\\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 300000.0, \\\"actualSpend\\\": 315000.0, \\\"variancePercent\\\": 5.0}, {\\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 36000.0, \\\"actualSpend\\\": 40000.0, \\\"variancePercent\\\": 11.1}, {\\\"department\\\": \\\"HR\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 24000.0, \\\"actualSpend\\\": 25200.0, \\\"variancePercent\\\": 5.0}, {\\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Advertising\\\", \\\"budgetMonthly\\\": 600000.0, \\\"actualSpend\\\": 630000.0, \\\"variancePercent\\\": 5.0}, {\\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 900000.0, \\\"actualSpend\\\": 925000.0, \\\"variancePercent\\\": 2.8}, {\\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 60000.0, \\\"actualSpend\\\": 65000.0, \\\"variancePercent\\\": 8.3}, {\\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 150000.0, \\\"actualSpend\\\": 155000.0, \\\"variancePercent\\\": 3.3}, {\\\"department\\\": \\\"Marketing\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 30000.0, \\\"actualSpend\\\": 35000.0, \\\"variancePercent\\\": 16.7}, {\\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Facilities\\\", \\\"budgetMonthly\\\": 120000.0, \\\"actualSpend\\\": 119500.0, \\\"variancePercent\\\": -0.4}, {\\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 450000.0, \\\"actualSpend\\\": 445000.0, \\\"variancePercent\\\": -1.1}, {\\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 30000.0, \\\"actualSpend\\\": 29000.0, \\\"variancePercent\\\": -3.3}, {\\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 90000.0, \\\"actualSpend\\\": 96000.0, \\\"variancePercent\\\": 6.7}, {\\\"department\\\": \\\"Operations\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 12000.0, \\\"actualSpend\\\": 11000.0, \\\"variancePercent\\\": -8.3}, {\\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 1200000.0, \\\"actualSpend\\\": 1250000.0, \\\"variancePercent\\\": 4.2}, {\\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Professional Services\\\", \\\"budgetMonthly\\\": 30000.0, \\\"actualSpend\\\": 35500.0, \\\"variancePercent\\\": 18.3}, {\\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 45000.0, \\\"actualSpend\\\": 47500.0, \\\"variancePercent\\\": 5.6}, {\\\"department\\\": \\\"Product\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 15000.0, \\\"actualSpend\\\": 18200.0, \\\"variancePercent\\\": 21.3}, {\\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Marketing\\\", \\\"budgetMonthly\\\": 90000.0, \\\"actualSpend\\\": 95000.0, \\\"variancePercent\\\": 5.6}, {\\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Operations\\\", \\\"budgetMonthly\\\": 45000.0, \\\"actualSpend\\\": 45700.0, \\\"variancePercent\\\": 1.6}, {\\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Personnel\\\", \\\"budgetMonthly\\\": 1800000.0, \\\"actualSpend\\\": 1830000.0, \\\"variancePercent\\\": 1.7}, {\\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Technology\\\", \\\"budgetMonthly\\\": 75000.0, \\\"actualSpend\\\": 81000.0, \\\"variancePercent\\\": 8.0}, {\\\"department\\\": \\\"Sales\\\", \\\"category\\\": \\\"Travel\\\", \\\"budgetMonthly\\\": 120000.0, \\\"actualSpend\\\": 155000.0, \\\"variancePercent\\\": 29.2}]};\\n\u003c/script\u003e\\n\\n\u003cdiv class=\\\"container\\\" style=\\\"padding:1.5rem 0.75rem;\\\"\u003e\\n\\n\u003cdiv class=\\\"section-wrap\\\"\u003e\\n\u003c!-- ===== FILTER BAR ===== --\u003e\\n\u003cdiv class=\\\"filter-bar\\\"\u003e\\n \u003cspan class=\\\"filter-label\\\"\u003e过滤条件\u003c/span\u003e\\n \u003cdiv class=\\\"filter-group\\\"\u003e\\n \u003cselect id=\\\"filterDept\\\"\u003e\\n \u003coption value=\\\"all\\\"\u003e全部部门\u003c/option\u003e\\n \u003c/select\u003e\\n \u003cselect id=\\\"filterCategory\\\"\u003e\\n \u003coption value=\\\"all\\\"\u003e全部类别\u003c/option\u003e\\n \u003c/select\u003e\\n \u003cselect id=\\\"filterMonth\\\"\u003e\\n \u003coption value=\\\"all\\\"\u003e全部月份\u003c/option\u003e\\n \u003c/select\u003e\\n \u003cselect id=\\\"filterRisk\\\"\u003e\\n \u003coption value=\\\"all\\\"\u003e全部风险\u003c/option\u003e\\n \u003coption value=\\\"high\\\"\u003e高风险 (超支≥20%)\u003c/option\u003e\\n \u003coption value=\\\"medium\\\"\u003e中风险 (超支10-20%)\u003c/option\u003e\\n \u003coption value=\\\"low\\\"\u003e正常/节约\u003c/option\u003e\\n \u003c/select\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\u003c/div\u003e\\n\\n\u003cdiv class=\\\"section-wrap\\\"\u003e\\n\u003c!-- ===== KPI ROW ===== --\u003e\\n\u003cdiv class=\\\"columns is-multiline is-variable is-3\\\" id=\\\"kpiRow\\\"\u003e\\n \u003cdiv class=\\\"column is-3-desktop is-6-tablet is-12-mobile\\\"\u003e\\n \u003cdiv class=\\\"kpi-card\\\"\u003e\\n\u003cdiv class=\\\"kpi-icon\\\" style=\\\"background:#222;color:var(--gold);\\\"\u003e📋\u003c/div\u003e\\n \u003cdiv class=\\\"label\\\"\u003e月度总预算\u003c/div\u003e\\n \u003cdiv class=\\\"value\\\" id=\\\"kpiBudget\\\" style=\\\"color:var(--gold);\\\"\u003e--\u003c/div\u003e\\n \u003cdiv class=\\\"sub neutral\\\"\u003e年度预算 \u003cspan id=\\\"kpiAnnualBudget\\\"\u003e--\u003c/span\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"column is-3-desktop is-6-tablet is-12-mobile\\\"\u003e\\n \u003cdiv class=\\\"kpi-card\\\"\u003e\\n\u003cdiv class=\\\"kpi-icon\\\" style=\\\"background:#222;color:var(--gold);\\\"\u003e💳\u003c/div\u003e\\n \u003cdiv class=\\\"label\\\"\u003e实际支出\u003c/div\u003e\\n \u003cdiv class=\\\"value\\\" id=\\\"kpiActual\\\" style=\\\"color:var(--gold);\\\"\u003e--\u003c/div\u003e\\n \u003cdiv class=\\\"sub neutral\\\"\u003e总人数 \u003cspan id=\\\"kpiHeadcount\\\"\u003e--\u003c/span\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"column is-3-desktop is-6-tablet is-12-mobile\\\"\u003e\\n \u003cdiv class=\\\"kpi-card\\\"\u003e\\n\u003cdiv class=\\\"kpi-icon\\\" style=\\\"background:#222;color:var(--gold);\\\"\u003e⚖️\u003c/div\u003e\\n \u003cdiv class=\\\"label\\\"\u003e预算偏差\u003c/div\u003e\\n \u003cdiv class=\\\"value\\\" id=\\\"kpiVariance\\\" style=\\\"color:var(--gold);\\\"\u003e--\u003c/div\u003e\\n \u003cdiv class=\\\"sub\\\" id=\\\"kpiVarianceSub\\\"\u003e--\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"column is-3-desktop is-6-tablet is-12-mobile\\\"\u003e\\n \u003cdiv class=\\\"kpi-card\\\"\u003e\\n\u003cdiv class=\\\"kpi-icon\\\" style=\\\"background:#222;color:var(--gold);\\\"\u003e📊\u003c/div\u003e\\n \u003cdiv class=\\\"label\\\"\u003e预算执行率\u003c/div\u003e\\n \u003cdiv class=\\\"value\\\" id=\\\"kpiRate\\\" style=\\\"color:var(--gold);\\\"\u003e--\u003c/div\u003e\\n \u003cdiv class=\\\"sub\\\" id=\\\"kpiRateSub\\\"\u003e--\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\u003c/div\u003e\\n\\n\u003c!-- ===== CHARTS ROW 1 ===== --\u003e\\n\u003cdiv class=\\\"section-wrap\\\"\u003e\u003cdiv class=\\\"columns is-multiline is-variable is-3\\\"\u003e\\n \u003cdiv class=\\\"column is-8-desktop is-12-tablet\\\"\u003e\\n \u003cdiv class=\\\"chart-card\\\"\u003e\\n \u003cdiv class=\\\"card-header\\\"\u003e\\n \u003cdiv class=\\\"card-header-title\\\"\u003e\u003cspan class=\\\"hdot\\\"\u003e\u003c/span\u003e月度预算 vs 实际支出趋势\u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"chart-container\\\" id=\\\"chartTrend\\\"\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"column is-4-desktop is-12-tablet\\\"\u003e\\n \u003cdiv class=\\\"chart-card\\\"\u003e\\n \u003cdiv class=\\\"card-header\\\"\u003e\\n \u003cdiv class=\\\"card-header-title\\\"\u003e\u003cspan class=\\\"hdot\\\"\u003e\u003c/span\u003e各部门预算偏差率\u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"chart-container\\\" id=\\\"chartDeptVariance\\\"\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\u003c/div\u003e\\n\\n\u003c!-- ===== CHARTS ROW 2 ===== --\u003e\\n\u003cdiv class=\\\"section-wrap\\\"\u003e\u003cdiv class=\\\"columns is-multiline is-variable is-3\\\"\u003e\\n \u003cdiv class=\\\"column is-5-desktop is-12-tablet\\\"\u003e\\n \u003cdiv class=\\\"chart-card\\\"\u003e\\n \u003cdiv class=\\\"card-header\\\"\u003e\\n \u003cdiv class=\\\"card-header-title\\\"\u003e\u003cspan class=\\\"hdot\\\"\u003e\u003c/span\u003e各部门支出分布\u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"chart-container\\\" id=\\\"chartDeptSpend\\\"\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"column is-7-desktop is-12-tablet\\\"\u003e\\n \u003cdiv class=\\\"chart-card\\\"\u003e\\n \u003cdiv class=\\\"card-header\\\"\u003e\\n \u003cdiv class=\\\"card-header-title\\\"\u003e\u003cspan class=\\\"hdot\\\"\u003e\u003c/span\u003e各费用类别预算 vs 实际\u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"chart-container\\\" id=\\\"chartCategory\\\"\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\u003c/div\u003e\\n\\n\u003c!-- ===== CHARTS ROW 3 ===== --\u003e\\n\u003cdiv class=\\\"section-wrap\\\"\u003e\u003cdiv class=\\\"columns is-multiline is-variable is-3\\\"\u003e\\n \u003cdiv class=\\\"column is-12\\\"\u003e\\n \u003cdiv class=\\\"chart-card\\\"\u003e\\n \u003cdiv class=\\\"card-header\\\"\u003e\\n \u003cdiv class=\\\"card-header-title\\\"\u003e\u003cspan class=\\\"hdot\\\"\u003e\u003c/span\u003e部门×类别 热力图 - 预算偏差率 (%)\u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"chart-container-lg\\\" id=\\\"chartHeatmap\\\"\u003e\u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\u003c/div\u003e\\n\\n\u003c!-- ===== OVER-BUDGET TABLE ===== --\u003e\\n\u003cdiv class=\\\"section-wrap\\\"\u003e\u003cdiv class=\\\"columns is-multiline is-variable is-3\\\"\u003e\\n \u003cdiv class=\\\"column is-12\\\"\u003e\\n \u003cdiv class=\\\"chart-card\\\"\u003e\\n \u003cdiv class=\\\"card-header\\\"\u003e\\n \u003cdiv class=\\\"card-header-title\\\"\u003e\\n \u003cspan class=\\\"hdot\\\" style=\\\"background:#f44336;\\\"\u003e\u003c/span\u003e\\n 超支风险项目 TOP 15\\n \u003cspan class=\\\"tag ml-2\\\" id=\\\"overBudgetCount\\\" style=\\\"border-radius:20px;font-weight:700;background:#f44336;color:#fff;border:none;\\\"\u003e0\u003c/span\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003cdiv class=\\\"table-wrap scrollable-x\\\"\u003e\\n \u003ctable class=\\\"is-fullwidth\\\" id=\\\"overBudgetTable\\\"\u003e\\n \u003cthead\u003e\\n \u003ctr\u003e\\n \u003cth\u003e月份\u003c/th\u003e\\n \u003cth\u003e部门\u003c/th\u003e\\n \u003cth\u003e类别\u003c/th\u003e\\n \u003cth\u003e预算\u003c/th\u003e\\n \u003cth\u003e实际支出\u003c/th\u003e\\n \u003cth\u003e超支金额\u003c/th\u003e\\n \u003cth\u003e超支率\u003c/th\u003e\\n \u003cth\u003e风险等级\u003c/th\u003e\\n \u003c/tr\u003e\\n \u003c/thead\u003e\\n \u003ctbody id=\\\"overBudgetBody\\\"\u003e\u003c/tbody\u003e\\n \u003c/table\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n \u003c/div\u003e\\n\u003c/div\u003e\u003c/div\u003e\\n\\n\u003c/div\u003e\u003c!-- container --\u003e\\n\\n\u003cscript\u003e\\nconst DATA = DASHBOARD_DATA;\\n\\n// --- Format helpers ---\\nconst fmt = (n) =\u003e {\\n if (n === null || n === undefined) return '--';\\n return '¥' + Number(n).toLocaleString('zh-CN');\\n};\\nconst fmtPct = (n) =\u003e {\\n if (n === null || n === undefined) return '--';\\n const v = Number(n);\\n return (v \u003e 0 ? '+' : '') + v.toFixed(1) + '%';\\n};\\nconst fmtShort = (n) =\u003e {\\n if (n === null || n === undefined) return '--';\\n const abs = Math.abs(n);\\n if (abs \u003e= 10000000) return '¥' + (n/10000000).toFixed(1) + '千万';\\n if (abs \u003e= 10000) return '¥' + (n/10000).toFixed(1) + '万';\\n return '¥' + Number(n).toLocaleString('zh-CN');\\n};\\n\\n// --- Filter state ---\\nlet filteredRecords = [];\\n\\nfunction applyFilters() {\\n const dept = document.getElementById('filterDept').value;\\n const cat = document.getElementById('filterCategory').value;\\n const month = document.getElementById('filterMonth').value;\\n const risk = document.getElementById('filterRisk').value;\\n\\n filteredRecords = DATA.records.filter(r =\u003e {\\n if (dept !== 'all' \u0026\u0026 r.department !== dept) return false;\\n if (cat !== 'all' \u0026\u0026 r.category !== cat) return false;\\n if (month !== 'all') {\\n const m = r.month.substring(0, 7);\\n if (month === '01-01-25' \u0026\u0026 m !== '2025-01') return false;\\n if (month === '02-01-25' \u0026\u0026 m !== '2025-02') return false;\\n if (month === '03-01-25' \u0026\u0026 m !== '2025-03') return false;\\n }\\n if (risk !== 'all') {\\n const vp = Number(r.variancePercent);\\n if (risk === 'high' \u0026\u0026 vp \u003e= -20) return false;\\n if (risk === 'medium' \u0026\u0026 (vp \u003c -20 || vp \u003e= -10)) return false;\\n if (risk === 'low' \u0026\u0026 vp \u003c -10) return false;\\n }\\n return true;\\n });\\n updateKPIs();\\n updateCharts();\\n updateOverBudgetTable();\\n}\\n\\nfunction updateKPIs() {\\n const totalBudget = filteredRecords.reduce((s, r) =\u003e s + Number(r.budgetMonthly), 0);\\n const totalActual = filteredRecords.reduce((s, r) =\u003e s + Number(r.actualSpend), 0);\\n const totalVariance = filteredRecords.reduce((s, r) =\u003e s + Number(r.varianceAmount), 0);\\n const totalHeadcount = filteredRecords.reduce((s, r) =\u003e s + Number(r.headcount), 0);\\n const rate = totalBudget \u003e 0 ? (totalActual / totalBudget * 100) : 0;\\n\\n document.getElementById('kpiBudget').textContent = fmtShort(totalBudget);\\n document.getElementById('kpiActual').textContent = fmtShort(totalActual);\\n document.getElementById('kpiVariance').textContent = fmtShort(totalVariance);\\n\\n const varSub = document.getElementById('kpiVarianceSub');\\n if (totalVariance \u003c 0) {\\n varSub.textContent = '⚠️ 超支 ' + fmtShort(Math.abs(totalVariance));\\n varSub.className = 'sub negative';\\n } else if (totalVariance \u003e 0) {\\n varSub.textContent = '✅ 节约 ' + fmtShort(totalVariance);\\n varSub.className = 'sub positive';\\n } else {\\n varSub.textContent = '持平';\\n varSub.className = 'sub neutral';\\n }\\n\\n document.getElementById('kpiRate').textContent = rate.toFixed(1) + '%';\\n const rateSub = document.getElementById('kpiRateSub');\\n if (rate \u003e 100) {\\n rateSub.textContent = '超出预算 ' + (rate - 100).toFixed(1) + '%';\\n rateSub.className = 'sub negative';\\n } else if (rate \u003c 100) {\\n rateSub.textContent = '预算内,节约 ' + (100 - rate).toFixed(1) + '%';\\n rateSub.className = 'sub positive';\\n } else {\\n rateSub.textContent = '完全持平';\\n rateSub.className = 'sub neutral';\\n }\\n\\n document.getElementById('kpiAnnualBudget').textContent = fmtShort(DATA.summary.totalBudgetAnnual);\\n document.getElementById('kpiHeadcount').textContent = totalHeadcount.toLocaleString();\\n}\\n\\nfunction updateCharts() {\\n updateChartTrend();\\n updateChartDeptVariance();\\n updateChartDeptSpend();\\n updateChartCategory();\\n updateChartHeatmap();\\n}\\n\\n// --- Chart: Monthly Trend ---\\nfunction updateChartTrend() {\\n const chart = echarts.getInstanceByDom(document.getElementById('chartTrend'));\\n if (chart) chart.dispose();\\n const dom = document.getElementById('chartTrend');\\n const c = echarts.init(dom);\\n\\n const monthMap = {};\\n filteredRecords.forEach(r =\u003e {\\n const m = r.month.substring(0, 7);\\n if (!monthMap[m]) monthMap[m] = { budget: 0, actual: 0 };\\n monthMap[m].budget += Number(r.budgetMonthly);\\n monthMap[m].actual += Number(r.actualSpend);\\n });\\n\\n const monthOrder = ['2025-01', '2025-02', '2025-03'];\\n const labels = ['1月', '2月', '3月'];\\n const budgetData = monthOrder.map(m =\u003e monthMap[m] ? monthMap[m].budget : 0);\\n const actualData = monthOrder.map(m =\u003e monthMap[m] ? monthMap[m].actual : 0);\\n\\n c.setOption({\\n tooltip: {\\n trigger: 'axis',\\n backgroundColor: 'rgba(0,0,0,0.9)',\\n borderColor: 'transparent',\\n textStyle: { color: 'rgba(255,255,255,0.9)', fontSize: 12 },\\n valueFormatter: v =\u003e '¥' + Number(v).toLocaleString('zh-CN')\\n },\\n legend: {\\n data: ['预算', '实际支出'],\\n bottom: 0,\\n icon: 'circle',\\n itemWidth: 8,\\n textStyle: { fontSize: 11, color: '#b0b0b0' }\\n },\\n grid: { top: 25, left: 60, right: 20, bottom: 40 },\\n xAxis: {\\n type: 'category',\\n data: labels,\\n axisLabel: { fontWeight: 700, fontSize: 12, color: '#e8e8e8' },\\n axisLine: { lineStyle: { color: '#444' } }\\n },\\n yAxis: {\\n type: 'value',\\n axisLabel: { formatter: v =\u003e '¥' + (v/10000).toFixed(0) + '万', color: '#777' },\\n splitLine: { lineStyle: { color: '#333', type: 'dashed' } }\\n },\\n series: [\\n {\\n name: '预算',\\n type: 'line',\\n data: budgetData,\\n smooth: true,\\n lineStyle: { color: '#c9a84c', width: 3 },\\n itemStyle: { color: '#c9a84c' },\\n areaStyle: { color: 'rgba(201,168,76,0.15)' },\\n symbol: 'circle',\\n symbolSize: 8\\n },\\n {\\n name: '实际支出',\\n type: 'line',\\n data: actualData,\\n smooth: true,\\n lineStyle: { color: '#f44336', width: 3 },\\n itemStyle: { color: '#f44336' },\\n areaStyle: { color: 'rgba(244,67,54,0.15)' },\\n symbol: 'diamond',\\n symbolSize: 9\\n }\\n ]\\n });\\n window.addEventListener('resize', () =\u003e c.resize());\\n}\\n\\n// --- Chart: Dept Variance Bar ---\\nfunction updateChartDeptVariance() {\\n const chart = echarts.getInstanceByDom(document.getElementById('chartDeptVariance'));\\n if (chart) chart.dispose();\\n const dom = document.getElementById('chartDeptVariance');\\n const c = echarts.init(dom);\\n\\n const deptMap = {};\\n filteredRecords.forEach(r =\u003e {\\n if (!deptMap[r.department]) deptMap[r.department] = { budget: 0, actual: 0 };\\n deptMap[r.department].budget += Number(r.budgetMonthly);\\n deptMap[r.department].actual += Number(r.actualSpend);\\n });\\n\\n const depts = Object.keys(deptMap).sort();\\n const pcts = depts.map(d =\u003e {\\n const b = deptMap[d].budget;\\n const a = deptMap[d].actual;\\n return b \u003e 0 ? ((a - b) / b * 100) : 0;\\n });\\n\\n c.setOption({\\n tooltip: {\\n trigger: 'axis',\\n backgroundColor: 'rgba(0,0,0,0.9)',\\n borderColor: 'transparent',\\n textStyle: { color: 'rgba(255,255,255,0.9)' },\\n formatter: p =\u003e {\\n const v = p[0].value;\\n const color = v \u003e 0 ? '#f44336' : '#4caf50';\\n return `\u003cstrong\u003e${p[0].name}\u003c/strong\u003e\u003cbr/\u003e偏差率: \u003cspan style=\\\"color:${color};font-weight:700\\\"\u003e${v.toFixed(1)}%\u003c/span\u003e`;\\n }\\n },\\n grid: { top: 10, left: 85, right: 25, bottom: 20 },\\n xAxis: {\\n type: 'value',\\n axisLabel: { formatter: v =\u003e v.toFixed(0) + '%', color: '#777' },\\n splitLine: { lineStyle: { color: '#333', type: 'dashed' } }\\n },\\n yAxis: {\\n type: 'category',\\n data: depts,\\n axisLabel: { fontSize: 10, color: '#e8e8e8', fontWeight: 600 },\\n axisLine: { lineStyle: { color: '#444' } }\\n },\\n series: [{\\n type: 'bar',\\n data: depts.map((d, i) =\u003e ({\\n value: pcts[i],\\n itemStyle: {\\n color: pcts[i] \u003e 0 ? '#f44336' : (pcts[i] \u003c -5 ? '#ff9800' : '#4caf50'),\\n borderRadius: [0, 4, 4, 0]\\n }\\n })),\\n label: {\\n show: true,\\n position: 'right',\\n formatter: p =\u003e p.value.toFixed(1) + '%',\\n fontSize: 10,\\n fontWeight: 600,\\n color: '#e8e8e8'\\n },\\n barMaxWidth: 22\\n }]\\n });\\n window.addEventListener('resize', () =\u003e c.resize());\\n}\\n\\n// --- Chart: Dept Spend Pie ---\\nfunction updateChartDeptSpend() {\\n const chart = echarts.getInstanceByDom(document.getElementById('chartDeptSpend'));\\n if (chart) chart.dispose();\\n const dom = document.getElementById('chartDeptSpend');\\n const c = echarts.init(dom);\\n\\n const deptMap = {};\\n filteredRecords.forEach(r =\u003e {\\n if (!deptMap[r.department]) deptMap[r.department] = 0;\\n deptMap[r.department] += Number(r.actualSpend);\\n });\\n\\n const sorted = Object.entries(deptMap).sort((a, b) =\u003e b[1] - a[1]);\\n const total = sorted.reduce((s, d) =\u003e s + d[1], 0);\\n\\n const colorPalette = ['#c9a84c', '#e8d48b', '#a8882a', '#f44336', '#4caf50', '#ff9800', '#9c27b0', '#00bcd4'];\\n\\n c.setOption({\\n tooltip: {\\n backgroundColor: 'rgba(0,0,0,0.9)',\\n borderColor: 'transparent',\\n textStyle: { color: 'rgba(255,255,255,0.9)' },\\n formatter: p =\u003e {\\n return `\u003cstrong\u003e${p.name}\u003c/strong\u003e\u003cbr/\u003e¥${Number(p.value).toLocaleString('zh-CN')}\u003cbr/\u003e占比 ${p.percent.toFixed(1)}%`;\\n }\\n },\\n series: [{\\n type: 'pie',\\n radius: ['38%', '70%'],\\n center: ['50%', '50%'],\\n label: {\\n formatter: p =\u003e {\\n const pct = (p.value / total * 100);\\n return pct \u003e 4 ? p.name + '\\\\n' + pct.toFixed(1) + '%' : '';\\n },\\n fontSize: 10,\\n fontWeight: 600,\\n color: '#e8e8e8'\\n },\\n emphasis: {\\n label: { show: true, fontSize: 13, fontWeight: 'bold' },\\n itemStyle: { shadowBlur: 10, shadowColor: 'rgba(0,0,0,0.2)' }\\n },\\n data: sorted.map((d, i) =\u003e ({ name: d[0], value: d[1], itemStyle: { color: colorPalette[i % colorPalette.length] } })),\\n itemStyle: {\\n borderRadius: 4,\\n borderColor: 'transparent',\\n borderWidth: 0\\n }\\n }]\\n });\\n window.addEventListener('resize', () =\u003e c.resize());\\n}\\n\\n// --- Chart: Category Bar ---\\nfunction updateChartCategory() {\\n const chart = echarts.getInstanceByDom(document.getElementById('chartCategory'));\\n if (chart) chart.dispose();\\n const dom = document.getElementById('chartCategory');\\n const c = echarts.init(dom);\\n\\n const catMap = {};\\n filteredRecords.forEach(r =\u003e {\\n if (!catMap[r.category]) catMap[r.category] = { budget: 0, actual: 0 };\\n catMap[r.category].budget += Number(r.budgetMonthly);\\n catMap[r.category].actual += Number(r.actualSpend);\\n });\\n\\n const cats = Object.keys(catMap).sort();\\n const budgetData = cats.map(c =\u003e catMap[c].budget);\\n const actualData = cats.map(c =\u003e catMap[c].actual);\\n\\n c.setOption({\\n tooltip: {\\n trigger: 'axis',\\n backgroundColor: 'rgba(0,0,0,0.9)',\\n borderColor: 'transparent',\\n textStyle: { color: 'rgba(255,255,255,0.9)' },\\n valueFormatter: v =\u003e '¥' + Number(v).toLocaleString('zh-CN')\\n },\\n legend: {\\n data: ['预算', '实际支出'],\\n bottom: 0,\\n icon: 'circle',\\n itemWidth: 8,\\n textStyle: { fontSize: 11, color: '#b0b0b0' }\\n },\\n grid: { top: 15, left: 85, right: 25, bottom: 40 },\\n xAxis: {\\n type: 'value',\\n axisLabel: { formatter: v =\u003e '¥' + (v/10000).toFixed(0) + '万', color: '#777' },\\n splitLine: { lineStyle: { color: '#333', type: 'dashed' } }\\n },\\n yAxis: {\\n type: 'category',\\n data: cats,\\n axisLabel: { fontSize: 10, color: '#e8e8e8', fontWeight: 600 },\\n axisLine: { lineStyle: { color: '#444' } }\\n },\\n series: [\\n {\\n name: '预算',\\n type: 'bar',\\n data: budgetData,\\n barMaxWidth: 14,\\n itemStyle: { color: '#c9a84c', borderRadius: [0, 3, 3, 0] }\\n },\\n {\\n name: '实际支出',\\n type: 'bar',\\n data: actualData,\\n barMaxWidth: 14,\\n itemStyle: { color: '#f44336', borderRadius: [0, 3, 3, 0] }\\n }\\n ]\\n });\\n window.addEventListener('resize', () =\u003e c.resize());\\n}\\n\\n// --- Chart: Heatmap ---\\nfunction updateChartHeatmap() {\\n const chart = echarts.getInstanceByDom(document.getElementById('chartHeatmap'));\\n if (chart) chart.dispose();\\n const dom = document.getElementById('chartHeatmap');\\n const c = echarts.init(dom);\\n\\n const deptSet = new Set();\\n const catSet = new Set();\\n const cellMap = {};\\n filteredRecords.forEach(r =\u003e {\\n deptSet.add(r.department);\\n catSet.add(r.category);\\n const key = r.department + '||' + r.category;\\n if (!cellMap[key]) cellMap[key] = { budget: 0, actual: 0 };\\n cellMap[key].budget += Number(r.budgetMonthly);\\n cellMap[key].actual += Number(r.actualSpend);\\n });\\n\\n const depts = ['Engineering','Sales','Marketing','Product','Customer Success','Finance','HR','Operations'].filter(d =\u003e deptSet.has(d));\\n const cats = ['Personnel','Technology','Professional Services','Travel','Operations','Marketing','Advertising','Facilities'].filter(c =\u003e catSet.has(c));\\n\\n const data = [];\\n depts.forEach((d, di) =\u003e {\\n cats.forEach((c, ci) =\u003e {\\n const key = d + '||' + c;\\n const cell = cellMap[key];\\n if (cell) {\\n const pct = cell.budget \u003e 0 ? ((cell.actual - cell.budget) / cell.budget * 100) : 0;\\n data.push([ci, di, +pct.toFixed(1)]);\\n }\\n });\\n });\\n\\n c.setOption({\\n tooltip: {\\n position: 'top',\\n backgroundColor: 'rgba(0,0,0,0.9)',\\n borderColor: 'transparent',\\n textStyle: { color: 'rgba(255,255,255,0.9)' },\\n formatter: p =\u003e {\\n const d = depts[p.value[1]];\\n const ct = cats[p.value[0]];\\n const v = p.value[2];\\n if (v === null || v === undefined) return `\u003cstrong\u003e${d} - ${ct}\u003c/strong\u003e\u003cbr/\u003e无数据`;\\n const color = v \u003e 0 ? '#f44336' : (v \u003c -10 ? '#c9a84c' : '#e8d48b');\\n return `\u003cstrong\u003e${d} - ${ct}\u003c/strong\u003e\u003cbr/\u003e偏差率: \u003cspan style=\\\"color:${color};font-weight:700\\\"\u003e${v.toFixed(1)}%\u003c/span\u003e`;\\n }\\n },\\n grid: { top: 15, left: 110, right: 80, bottom: 110 },\\n xAxis: {\\n type: 'category',\\n data: cats,\\n axisLabel: { rotate: 30, fontSize: 10, color: '#e8e8e8', fontWeight: 600 },\\n axisLine: { lineStyle: { color: '#444' } },\\n splitArea: { show: true, areaStyle: { color: ['rgba(51,51,51,0.3)', 'rgba(34,34,34,0.4)'] } }\\n },\\n yAxis: {\\n type: 'category',\\n data: depts,\\n axisLabel: { fontSize: 10, color: '#e8e8e8', fontWeight: 600 },\\n axisLine: { lineStyle: { color: '#444' } },\\n splitArea: { show: true, areaStyle: { color: ['rgba(51,51,51,0.3)', 'rgba(34,34,34,0.4)'] } }\\n },\\n visualMap: {\\n min: -30,\\n max: 30,\\n calculable: true,\\n orient: 'horizontal',\\n left: 'center',\\n bottom: 10,\\n textStyle: { color: '#b0b0b0', fontSize: 10 },\\n inRange: {\\n color: ['#c9a84c', '#e8d48b', '#1a1a1a', '#3a1b1b', '#f44336']\\n },\\n formatter: v =\u003e v.toFixed(0) + '%'\\n },\\n series: [{\\n type: 'heatmap',\\n data: data,\\n label: {\\n show: true,\\n formatter: p =\u003e p.value[2].toFixed(1),\\n fontSize: 10,\\n fontWeight: 600,\\n color: '#e8e8e8'\\n },\\n emphasis: {\\n itemStyle: { shadowBlur: 12, shadowColor: 'rgba(0,0,0,0.3)' }\\n }\\n }]\\n });\\n window.addEventListener('resize', () =\u003e c.resize());\\n}\\n\\n// --- Over-budget Table ---\\nfunction updateOverBudgetTable() {\\n const overItems = filteredRecords\\n .filter(r =\u003e Number(r.varianceAmount) \u003c 0)\\n .sort((a, b) =\u003e Number(a.variancePercent) - Number(b.variancePercent))\\n .slice(0, 15);\\n\\n document.getElementById('overBudgetCount').textContent = overItems.length;\\n\\n const tbody = document.getElementById('overBudgetBody');\\n tbody.innerHTML = '';\\n\\n if (overItems.length === 0) {\\n tbody.innerHTML = '\u003ctr\u003e\u003ctd colspan=\\\"8\\\" style=\\\"text-align:center;padding:2rem;color:#8a9aaa;\\\"\u003e暂无超支项目\u003c/td\u003e\u003c/tr\u003e';\\n return;\\n }\\n\\n const monthMap = {\\n '2025-01-01 00:00:00': '1月',\\n '2025-02-01 00:00:00': '2月',\\n '2025-03-01 00:00:00': '3月'\\n };\\n\\n overItems.forEach(item =\u003e {\\n const vp = Number(item.variancePercent);\\n let riskLevel, riskClass;\\n if (vp \u003c= -20) {\\n riskLevel = '高风险';\\n riskClass = 'risk-high';\\n } else if (vp \u003c= -10) {\\n riskLevel = '中风险';\\n riskClass = 'risk-medium';\\n } else {\\n riskLevel = '低风险';\\n riskClass = 'risk-low';\\n }\\n\\n const tr = document.createElement('tr');\\n tr.innerHTML = `\\n \u003ctd\u003e${monthMap[item.month] || item.month.substring(0,7)}\u003c/td\u003e\\n \u003ctd\u003e${item.department}\u003c/td\u003e\\n \u003ctd\u003e${item.category}\u003c/td\u003e\\n \u003ctd\u003e${fmt(item.budgetMonthly)}\u003c/td\u003e\\n \u003ctd\u003e${fmt(item.actualSpend)}\u003c/td\u003e\\n \u003ctd style=\\\"color:#e57373;\\\"\u003e${fmt(item.varianceAmount)}\u003c/td\u003e\\n \u003ctd style=\\\"color:#e57373;\\\"\u003e${fmtPct(item.variancePercent)}\u003c/td\u003e\\n \u003ctd\u003e\u003cspan class=\\\"risk-tag ${riskClass}\\\"\u003e${riskLevel}\u003c/span\u003e\u003c/td\u003e\\n `;\\n tbody.appendChild(tr);\\n });\\n}\\n\\n// --- Init filters ---\\nfunction initFilters() {\\n const deptSel = document.getElementById('filterDept');\\n DATA.departments.forEach(d =\u003e {\\n const opt = document.createElement('option');\\n opt.value = d;\\n opt.textContent = d;\\n deptSel.appendChild(opt);\\n });\\n\\n const catSel = document.getElementById('filterCategory');\\n DATA.categories.forEach(c =\u003e {\\n const opt = document.createElement('option');\\n opt.value = c;\\n opt.textContent = c;\\n catSel.appendChild(opt);\\n });\\n\\n const monthSel = document.getElementById('filterMonth');\\n const monthLabels = ['1月', '2月', '3月'];\\n DATA.monthKeys.forEach((m, i) =\u003e {\\n const opt = document.createElement('option');\\n opt.value = m;\\n opt.textContent = monthLabels[i];\\n monthSel.appendChild(opt);\\n });\\n}\\n\\n// --- Init ---\\ninitFilters();\\n\\n['filterDept','filterCategory','filterMonth','filterRisk'].forEach(id =\u003e {\\n document.getElementById(id).addEventListener('change', applyFilters);\\n});\\n\\napplyFilters();\\n\u003c/script\u003e\\n\u003cfooter\u003e\\n \u003cstyle\u003e\\n .dashboard-guide-footer-link {\\n transition: transform 0.2s ease, background-color 0.2s ease, box-shadow 0.2s ease;\\n }\\n .dashboard-guide-footer-link:hover {\\n transform: translateY(-4px);\\n background: #2f4ee8 !important;\\n box-shadow: 0 12px 24px rgba(65, 95, 255, 0.24) !important;\\n }\\n \u003c/style\u003e\\n \u003cdiv style=\\\"padding: 24px 24px 40px; text-align: center; background: transparent; color: #333; font-family: inherit;\\\"\u003e\\n \u003cdiv style=\\\"display: flex; align-items: center; width: 100%; gap: 12px; font-size: 16px; line-height: 1.6; margin-bottom: 16px;\\\"\u003e\\n \u003cspan style=\\\"display: block; height: 1px; flex: 1 1 auto; background: #8a8a8a26;\\\"\u003e\u003c/span\u003e\\n \u003cspan style=\\\"flex: 0 1 auto; min-width: 0; color: #7676767a;\\\"\u003e由 RowSpeak 提供 · 数秒内创建你的 AI 看板。\u003c/span\u003e\\n \u003cspan style=\\\"display: block; height: 1px; flex: 1 1 auto; background: #8a8a8a26;\\\"\u003e\u003c/span\u003e\\n \u003c/div\u003e\\n \u003ca class=\\\"dashboard-guide-footer-link\\\" href=\\\"https://dash.rowspeak.ai/dashboard\\\" target=\\\"_top\\\" style=\\\"display: inline-flex; align-items: center; justify-content: center; min-height: 48px; padding: 8px 16px; border-radius: 8px; background: #415fff; color: #fff; text-decoration: none; box-shadow: 0 8px 18px rgba(65, 95, 255, 0.18);\\\"\u003e\\n \u003cspan\u003e免费试用\u003c/span\u003e\\n \u003cspan style=\\\"margin-left: 4px;\\\"\u003e-\u0026gt;\u003c/span\u003e\\n \u003c/a\u003e\\n \u003c/div\u003e\\n \u003c/footer\u003e\u003c/body\u003e\\n\u003c/html\u003e\",\"dashboardHtmlPreview\":{\"title\":\"💰 财务预算监控看板\",\"metrics\":[\"月度总预算\",\"实际支出\",\"预算偏差\",\"预算执行率\"]},\"html_content_version\":3}","shared":true,"updated_at":1788226631}