Dashboard / Telemetry — Góc nhìn end-user
Có hai vai chính: Staff/Admin (xem bảng Analytics Dashboard theo BusinessUnit) và khách hàng (xem Customer Dashboard của chính mình).
A. Staff/Admin — Analytics Dashboard
1. Vào dashboard
- Vào qua Topi portal → IFrame → Tuke embed-dashboard của BU.
- Topi kiểm tra permission trước khi render; cần ít nhất một trong ba:
DASHBOARD_BOOKING_VIEW,DASHBOARD_ATTENDANCE_VIEW,DASHBOARD_ACCOUNTS_ATTENDEES_VIEW. - Không đủ permission → hiện ảnh fallback tĩnh, không vào được IFrame.
- Backend mọi endpoint đều yêu cầu JWT bearer token.
Ví dụ thực tế: Staff chỉ có DASHBOARD_ATTENDANCE_VIEW. → Không để staff vào trống màn hình không có dữ liệu được phép. → IFrame hiện fallback; chỉ widget attendance load được khi đủ quyền tương ứng.
2. Chọn BusinessUnit và site
- Đổi BusinessUnit trong dashboard → site selector và mọi widget chỉ load dữ liệu của BU mới, không còn số của BU cũ.
- Lọc siteIds (tùy chọn) thuộc BU đang chọn; site ngoài BU bị reject cả request.
Ví dụ thực tế: Admin đang xem BU "Hà Nội" đổi sang BU "Đà Nẵng". → Tránh hiển thị nhầm số liệu của đơn vị cũ. → Site selector và toàn bộ widget load lại theo BusinessUnitId mới; site của Hà Nội không còn trong danh sách.
3. Chọn khoảng ngày
- Ngày hiển thị và ranh giới range ("Today", "This Week", "This Month", "This Quarter", "This Year") tính theo timezone người dùng, không theo timezone máy.
fromDatephải ≤toDate; nhập ngược → request bị từ chối.
Ví dụ thực tế: User ở Australia/Sydney (UTC+11) lúc 2024-03-25T02:00:00Z = 13:00 Sydney. → Ranh giới "Today" phải theo ngày ở Sydney. → startDate = endDate = "2024-03-25", không phải "2024-03-24" theo UTC.
4. Các widget chính
| Widget | Hỏi hệ thống |
|---|---|
| Attendance snapshot hôm nay | Số đang onsite, away, absent trong ngày của BU. |
| Attendance analytics | Onsite range và peak hour trong khoảng ngày. |
| Hourly flow | Lượng check-in theo từng giờ (giờ địa phương BU) từng site. |
| Booking statistics | Estimated revenue, total bookings, new bookings, active/cancelled theo category. |
| Account & attendee overview | Tổng quan account/attendee trong khoảng ngày, lọc theo site. |
| Registration trend | Xu hướng đăng ký theo ngày/tuần/tháng. |
| Site distribution | Tổng account + attendee theo site (tổng cộng dồn). |
| BU info | Tên, logo, danh sách site của BU. |
Ví dụ thực tế: Quản lý muốn biết giờ cao điểm đón trẻ của site A. → Xem HourlyFlow + peak hour để xếp nhân sự. → Chọn BU + site A + khoảng ngày, widget trả theo giờ địa phương của BU, giờ cao điểm khớp lịch hoạt động thực tế.
B. Khách hàng — Customer Dashboard (IBEX portal)
- Scope theo Account + session của chính khách, không có permission check ở model layer.
- Hiển thị: thông tin account, booking active (
StatusId IN [SUBMITTED, ATTENDANCE_APPROVED]trong ±1 năm), invoiceStatusId=APPROVED+lockedInvoice=falsesắp theo dueDate, và booking calendar. totalOutstandingAmount= tổngcustomerDuecủa các invoice còn nợ.- Calendar có 4 chế độ:
Week(mặc định),Day,Month,TimelineMonth; user chọn timezone để render lịch.
Ví dụ thực tế: Phụ huynh mở My Home muốn xem hóa đơn chưa đóng. → Không hiện hóa đơn nháp hay của người khác. → Customer Dashboard liệt kê invoice APPROVED chưa lock, sorted theo dueDate; tổng nợ = sum customerDue.
Tóm lại
| Vai | Làm gì |
|---|---|
| Staff/Admin | Vào Analytics Dashboard qua Topi (permission + JWT), chọn BU/site/range, đọc widget theo công thức metric. |
| Khách hàng | Xem account, booking, invoice và calendar của chính mình trong Customer Portal; chọn timezone. |
Tiếp theo: Khái niệm cốt lõi.