Open Service From Calendar
Start Harbor Soho's POS floor from the nearest public calendar service, such as Soho lunch service, so the active service session is linked to the scheduled occurrence before the team works with tables, reservations, tickets, cash and production.
In this article
Use this guide when a front-of-house manager or POS operator needs to turn a planned calendar service into the live service context.
This action creates one open service session for the location. It does not open a cash register, create tickets, take payments, print jobs, issue invoices, select staff or create a terminal-scoped session.
Before you start
- Harbor Demo Group and Harbor Soho are selected as the organisation and location.
- The operator has the location permission `tpv:use`.
- Harbor Soho has no existing `service_session` with `status="open"`.
- A public service occurrence for the current local day is close enough to open: `ends_at >= now - 1 hour` and `starts_at <= now + 6 hours`.
- For GB captures, refresh or adjust the runtime first: the supplied Soho lunch service occurrence is dated `2026-06-23T12:30:00+00:00`, outside the `2026-06-25` candidate window.
Instructions
- 1.
Open the POS floor
Open Harbor Soho at `/:orgId/:locationId/tpv?tab=floor`. The POS checks the selected context, requires `tpv:use`, and treats a 404 from the active service check as the normal starting point when no service is open.
- 2.
Review the closest service
The POS loads today's public service occurrences and picks the nearest eligible service. When Soho lunch service is inside the near-now window, the Closest service modal shows the service title, scheduled time and the Open calendar service confirmation.
- 3.
Confirm the calendar service
Select Open calendar service. The POS sends `{ "occurrence_id": "<service_occurrence.id>" }` only. The backend rejects the request if another service is already open, if the occurrence belongs to another location, or if the event is not a public service.
- 4.
Wait for the live service context
The backend prepares the occurrence for live operation, creates one open `service_sessions` row linked to the occurrence and calendar event, and returns the active service detail. The POS refreshes service, reservation and table-assignment data before showing the active floor.
- 5.
Operate inside the service
Tickets, output jobs and payment operations now work under the returned `service_session_id`; reservations and table assignments stay linked to the calendar occurrence. Cash register, payment, invoice and production actions remain separate workflows.
Validations and limits
- The POS screen is blocked if organisation or location context is missing, or if the operator lacks `tpv:use`.
- Only public calendar events with `kind == "service"` are eligible for this action.
- The Open calendar service button is disabled when no nearby candidate exists or while the request is pending.
- The database allows only one open service session per location.
- The TPV deep link may include `terminalId`, but this action does not post `terminal_id` when creating the service session.
Expected result
Harbor Soho has one open calendar-backed POS service session. The POS floor renders in that service context, with the session linked to the selected service occurrence and its calendar event.