/* ============================================================ Theo dõi KPI — Plan vs Actual (đối chiếu từng mục của tháp phân rã) Đọc kế hoạch đã lưu (localStorage) + snapshot thực tế month-to-date. ============================================================ */ // thanh tiến độ: fill = thực tế / kế hoạch cả tháng; vạch = % thời gian đã trôi function PaceBar({ pct, pace, tone }) { const color = tone === 'success' ? '#0a7d4f' : tone === 'warning' ? '#b06f00' : tone === 'critical' ? '#c4320a' : '#0e6b8a'; return (
mktFacts (doanh thu · won · lead · ads · theo kênh) + ghi danh theo khóa.
{act._modeled && act._modeled.length ? <> Ước lượng từ hệ số phễu: {act._modeled.join(', ')} (chưa có bảng fact riêng).> : null}
>
) : (
<>
Dữ liệu mẫu (MOCK)
Chưa kết nối backend — mở với ?api=http://localhost:8080 để đọc số thực tế.
>
)}
| Chỉ số | Cần đến nay | Thực tế | Tiến độ tháng | Δ vs nhịp |
|---|
| Khóa | Target HV | Đã ghi danh | Fill | DT kế hoạch | DT thực tế |
|---|---|---|---|---|---|
{r.c.name} {r.c.code} |
{r.target} | {r.enrolled} | {AAU.fmtVNDm(r.planRev)} | {AAU.fmtVNDm(r.actRev)} |