Open the POS ticket invoice modal
From a fully paid Harbor Soho POS ticket, open the Billing details modal to choose a saved billing profile or start a new one before invoice creation.
In this article
Invoice preparation starts from the POS ticket detail, so the operator keeps the original account, payments, customer link and billing profile in the same context.
This action only opens Billing details. The invoice is not issued, saved or delivered until the separate Issue invoice action runs.
Before you start
- You are signed in to Harbor Demo Group and working in the Harbor Soho location.
- The ticket detail opens with a valid paid ticket such as ${TPV_PAID_TICKET_ID}, with ${TPV_TERMINAL_ID} and Olivia Hart as ${TPV_STAFF_ID}.
- The ticket is fully paid, not void, not closed by the current UI rules, and does not already have an invoice.
- The app can load the ticket, saved billing details and customers for the location.
- Your role allows POS use and invoicing through `tpv:use` plus `tpv:invoice` or `tickets:manage`.
Instructions
- 1.
Open the paid POS ticket
Open the Harbor Soho ticket detail from the floor context. The screen loads the ticket, payment lines, invoice state, customer links and saved billing profiles for the location.
- 2.
Check that Generate invoice is available
Open the ticket actions and use Generate invoice only when it is enabled. If the ticket already has an invoice, the action changes to Download invoice instead of opening Billing details.
- 3.
Open Billing details
Select Generate invoice. The actions menu closes and the Billing details modal opens for the ticket; no invoice has been issued at this point.
- 4.
Choose a saved billing profile
Use recommended profiles or search saved billing details by name, tax identifier, email or phone. In the GB demo, use Harbor Soho Demo Ltd when ${TPV_BILLING_DETAILS_TITLE} is available.
- 5.
Start a new billing profile if needed
Select New billing profile when no saved profile should be used. Issue invoice stays disabled until the required fiscal fields are complete.
Validations and limits
- The route must include `ticketId`; otherwise the ticket detail cannot show the requested account.
- The user must have `tpv:use` and either `tpv:invoice` or `tickets:manage`.
- The invoice modal can open only when the ticket is fully paid, has no existing invoice, is not void and is not closed by the current UI rules.
- If any amount is pending, the UI blocks the action before the modal opens.
- Opening the modal is local UI state; there is no `open-modal` API request.
- Invoice creation, payload sanitisation and delivery belong to the follow-up `tpv.invoice.create` flow.
Expected result
The Billing details modal is open with a saved-profile path and a new-profile path available, ready for the operator to continue without issuing the invoice yet.