Dashboard / Telemetry — End-user view
There are two main roles: Staff/Admin (view the Analytics Dashboard scoped by BusinessUnit) and customers (view their own Customer Dashboard).
A. Staff/Admin — Analytics Dashboard
1. Entering the dashboard
- Enter through the Topi portal → IFrame → Tuke embed-dashboard of the BU.
- Topi checks permissions before rendering; at least one of the three is required:
DASHBOARD_BOOKING_VIEW,DASHBOARD_ATTENDANCE_VIEW,DASHBOARD_ACCOUNTS_ATTENDEES_VIEW. - Insufficient permissions → a static fallback image is shown, the IFrame is not entered.
- Every backend endpoint requires a JWT bearer token.
Real-world example: A staff member has only DASHBOARD_ATTENDANCE_VIEW. → Do not let staff into an empty screen with no allowed data. → The IFrame shows the fallback; only the attendance widget loads when the corresponding permission is present.
2. Selecting BusinessUnit and site
- Changing the BusinessUnit in the dashboard → the site selector and every widget load only the new BU's data, no figures from the old BU.
- Filter siteIds (optional) belonging to the selected BU; sites outside the BU reject the whole request.
Real-world example: An admin viewing BU "Hà Nội" switches to BU "Đà Nẵng". → Avoid showing the wrong unit's figures. → The site selector and all widgets reload by the new BusinessUnitId; Hà Nội's sites are no longer in the list.
3. Selecting a date range
- Displayed dates and range boundaries ("Today", "This Week", "This Month", "This Quarter", "This Year") are computed in the user's timezone, not the machine's timezone.
fromDatemust be ≤toDate; entering them reversed → the request is rejected.
Real-world example: A user in Australia/Sydney (UTC+11) at 2024-03-25T02:00:00Z = 13:00 Sydney. → The "Today" boundary must follow the date in Sydney. → startDate = endDate = "2024-03-25", not "2024-03-24" per UTC.
4. Main widgets
| Widget | What it asks the system |
|---|---|
| Today's attendance snapshot | How many are onsite, away, absent in the BU's day. |
| Attendance analytics | Onsite range and peak hour within the date range. |
| Hourly flow | Check-in count per hour (BU local time) per site. |
| Booking statistics | Estimated revenue, total bookings, new bookings, active/cancelled by category. |
| Account & attendee overview | Account/attendee overview within the date range, filtered by site. |
| Registration trend | Registration trend by day/week/month. |
| Site distribution | Total accounts + attendees per site (cumulative). |
| BU info | The BU's name, logo, and site list. |
Real-world example: A manager wants to know the peak drop-off hours of site A. → Check HourlyFlow + peak hour to schedule staff. → Select BU + site A + date range; the widget returns in the BU's local time and the peak hour matches the actual operating schedule.
B. Customer — Customer Dashboard (IBEX portal)
- Scoped by the customer's own Account + session, with no permission check at the model layer.
- Shows: account info, active bookings (
StatusId IN [SUBMITTED, ATTENDANCE_APPROVED]within ±1 year), invoices withStatusId=APPROVED+lockedInvoice=falsesorted by dueDate, and the booking calendar. totalOutstandingAmount= sum ofcustomerDueof the outstanding invoices.- The calendar has 4 modes:
Week(default),Day,Month,TimelineMonth; the user picks the timezone for rendering.
Real-world example: A parent opens My Home to see unpaid invoices. → Do not show draft or other people's invoices. → The Customer Dashboard lists unlocked APPROVED invoices sorted by dueDate; total outstanding = sum of customerDue.
In short
| Role | What it does |
|---|---|
| Staff/Admin | Enter the Analytics Dashboard via Topi (permission + JWT), choose BU/site/range, read widgets by metric formula. |
| Customer | View their own account, bookings, invoices, and calendar in the Customer Portal; choose timezone. |
Next: Core concepts.