Create invoice
Issue a POS invoice for a paid Harbor Soho ticket. The operator opens the paid ticket, starts Generate invoice, selects the saved Harbor Soho Demo Ltd billing details or enters a complete new billing profile, and confirms Issue invoice. The ticket then refreshes with an issued invoice card; download, delivery, fiscal submission and email are follow-up behaviours, not the core create action.
In this article
Use this guide when a customer needs an invoice for a POS ticket that has already been paid in Harbor Soho.
The create flow starts from the ticket detail and keeps the ticket, billing details, issued invoice card and follow-up actions in the same operational context.
Before you start
- The operator is signed in to Harbor Demo Group and working in Harbor Soho.
- The ticket is paid, not void, not closed in the UI, and does not already have a non-simplified invoice. For GB captures, use TPV_PAID_TICKET_ID only if it is still uninvoiced.
- The route includes ticketId, terminalId, staffId and usually sourceTab=floor, using TPV_TERMINAL_ID and TPV_STAFF_ID for Olivia Hart in the demo runtime.
- The operator has invoice rights for Harbor Soho. Ticket management rights also allow the action; invoice-only access also needs access to the active POS service session that owns the ticket.
- A billing profile such as Harbor Soho Demo Ltd is available, or the operator can enter complete billing details before issuing.
Instructions
- 1.
Open the paid ticket
Open the Harbor Soho paid ticket from the POS floor context or with the direct ticket link. The manual invoice flow starts from the ticket detail with the active terminal and staff context already present.
- 2.
Start invoice creation
Open the ticket action menu and choose Generate invoice. The Billing details modal opens and loads the saved billing profiles for the current location.
- 3.
Use saved billing details
Select Harbor Soho Demo Ltd when it matches the customer. The profile is copied into the invoice form and will be saved or updated before the invoice snapshot is created.
- 4.
Or enter a new profile
Use the new-profile path only when the saved profile is not suitable. Complete the legal name or name, tax ID, address line, city, postcode and country before issuing; for the GB demo, the country should be GB.
- 5.
Issue the invoice
Choose Issue invoice. The app sends billing details, the optional customer and the active terminal id. The backend stores the billing snapshot, assigns the series and number, creates the invoice as issued and links the effective ticket payments.
- 6.
Confirm the issued state
After the request succeeds, the modal closes and the ticket refreshes. Check the issued invoice card for the series and number, total, billing snapshot and available follow-up actions.
Validations and limits
- Generate invoice is available only when the ticket has no pending amount, no existing non-simplified invoice, is not void, is not closed in the UI, and the operator has invoice permissions.
- KDS-only access is not enough for this action.
- Issue invoice is enabled only when an existing billing profile is selected or the new billing form is complete.
- The backend rejects an empty ticket id, missing location context, a ticket from another location, a void ticket, billing details from another location, and a ticket that already has a non-simplified invoice.
- Fiscal validation can block creation only when a configured provider returns a blocked invoice validation check.
- Only effective payments are linked to the invoice: ticket payments with empty or completed status.
- The manual create route creates a full F1 invoice by default, or an F3 substitution when replacing an existing simplified invoice; simplified F2 invoices are created by another path.
- Do not promise a PDF, share link, email history, VERI*FACTU, TicketBAI or other fiscal-platform state unless the runtime configuration provides it.
Expected result
The paid ticket refreshes with an issued invoice tied to the selected billing snapshot. Invoice download, email delivery, manual delivery, fiscal submission and marking sent remain separate follow-up actions.