View employee worked hours
Review actual hours worked by each employee at Harbor Soho for one or more selected periods, without changing shifts or staff records.
In this article
The worked-hours report gives managers a period-based view of actual staff activity for the active location. For the GB demo, use Harbor Soho; periods are interpreted in Europe/London and the current product label may appear as `Horas trabajadas`.
The report is read-only. It totals worked hours, registered shifts and employees with activity, then shows the same period data by employee so operations or payroll teams can review it before making corrections elsewhere.
Before you start
- The operator is signed in to the administrative app.
- Harbor Demo Group and Harbor Soho are selected as the active organisation and location.
- The operator has at least one accepted location permission: `reports:view`, `tpv:view`, `tpv:use`, `catalog:view`, `reservation:view` or `staff:view`.
- The selected location exists; Harbor Soho periods are interpreted using `Europe/London`.
- To show non-empty data, the runtime contains employees and `calendar_events` with `kind = "staff_shift"` overlapping the selected periods.
Instructions
- 1.
Open the worked-hours report
From the active location sidebar, open Reports, then Employees, then Worked hours. The route resolves to `LocationReportsEmployeeWorkedHours` and the page key is `employee-worked-hours`.
- 2.
Choose the reporting period
Use the period selector or open the page with `periods=YYYY-MM-DD_YYYY-MM-DD`. For Harbor Soho documentation captures, use `2026-06-01_2026-06-07` for the main one-week view.
- 3.
Read the summary
Use the summary card to review worked hours, registered shifts and employees with activity. Only positive overlaps from `staff_shift` calendar events in the selected location and period contribute to the totals.
- 4.
Review the table by employee
Use the employee table to compare each staff member's worked hours and shift count. When matching shifts exist, Harbor Soho rows may include Olivia Hart, Mason Reed, Noah Stone and Ava Price.
- 5.
Compare multiple periods
Add a second period when managers need a week-to-week comparison. Multiple periods stay in the route separated by `~`, for example `2026-05-25_2026-05-31~2026-06-01_2026-06-07`.
- 6.
Export on web
On web, use the export menu on supported cards and tables to export CSV, Excel or PNG for payroll or operations sharing. Native platforms intentionally show the unavailable export alert.
Validations and limits
- If no organisation or location is selected, the page shows a location selection state instead of loading report data.
- If the operator lacks every accepted permission, the page shows a no-permission state and does not request the report.
- The implemented period format is `YYYY-MM-DD_YYYY-MM-DD`, with multiple periods separated by `~`.
- Invalid period chunks are discarded; if no valid period remains, the frontend creates a default period. If an end date is earlier than the start date, the period is normalised to the start date.
- There is no dedicated endpoint only for worked hours; the page consumes `GET /api/app/{orgId}/{locationId}/reports` and selects `employee-worked-hours`.
- The report only counts `calendar_events` for the selected `LocationID` where `kind = "staff_shift"` and the event overlaps the selected period with positive duration.
- Shifts without a valid `starts_at` do not contribute hours. If a `staff_shift` has no `ends_at`, the backend uses the current UTC time as a fallback end.
- Employee names come from staff loaded with `IncludeDeleted: true`; if no employee name can be resolved, the row falls back to `SIN ASIGNAR`.
- Rows are sorted by hours in the most recent period, descending, then by key for ties.
- The table has no search field for this report.
- The action is read-only: it does not create, edit, correct or delete shifts, staff records or calendar events.
- Report export is implemented for web only.
Expected result
Managers can see worked hours, registered shifts and active employees for the selected period or comparison periods, grouped by employee, and can export the report on web without changing staff or shift data.