Billing and Documents
On customer invoice details, empty payment and online-attempt histories use short status lines. Recorded payments, attempt outcomes and amounts remain available when present.
Workshop invoice drafts remain staff-only. Customers see an invoice in the portal only after it
leaves DRAFT; later customer-visible historical states remain available according to ownership
and module-read permissions.
Billing and document features keep approved service work tied to clear customer-facing records.
Billing capabilities
| Feature | Purpose |
|---|---|
| Workshop invoicing | Create, issue, void, and review service invoices. |
| Manual payments | Record offline payment state where the role permits it. |
| Payment requests | Service Advisor, Cashier, Branch Manager, or Tenant Admin users with the right permission can create standalone or invoice-linked full-amount payment requests when the module is enabled. |
| Online payments | Backend-created PayHere Checkout handoff when enabled, form callback validation, reconciliation, tenant credential readiness, and separate review reminders. |
| Customer payment states | Backend records created, sent, opened, pending, succeeded, failed, expired, cancelled, and review states. The token-public page exposes only active pending/processing or review state. |
Search-first Cashier handoff
Cashiers and other authorized invoice-handling staff can start in Payment Requests and search by invoice number, customer name or phone, or vehicle plate. Results show the customer and vehicle context, invoice status, total, and balance. The selected invoice is checked again against the current signed-in role and branch before payment actions appear.
The Ignition handoff does not require Customer IDs, Vehicle IDs, Service-package IDs, or Payment-request IDs. It also does not download a customer or vehicle directory into the browser. Manual payment is for funds already received outside online checkout; an online request is always for the invoice’s current full balance. A disabled or unavailable action is guidance only—the backend still enforces permission, ownership, invoice state, amount, module, and readiness rules.
Manual-payment balance changes and their mandatory audit evidence commit together. Retrying the exact same payment intent returns the original payment without reducing the balance or writing the audit a second time. A reused key with changed amount, method, reference, invoice, or recorded time is rejected.
Standalone payment-request queue
Authorized Tenant Admin, Branch Manager, Service Advisor, and Cashier users can switch from Invoice handoff to Standalone requests. The queue can be filtered by customer-known text, effective payment status, reconciliation state, and an authorized branch. It shows the plate, customer and vehicle context, amount, expiry in the branch timezone, and the safe next step without exposing internal or provider identifiers. Assigned-branch staff cannot select an all-branch view.
Open a request to cancel, expire, or Renew access link only when that action is available. Renewal invalidates the previous link immediately and prepares a new link for open or copy in the current staff session; it does not send SMS or email. Share it through the service center’s approved channel. If reconciliation review is required, follow the displayed review guidance instead of retrying, editing history, or treating a browser return as payment proof.
Standalone request creation and both mandatory creation/link audit records also commit together. Concurrent submission of the same idempotency key resolves to one durable request; it does not expose a database uniqueness error or create another provider order. Changed request details still require a new idempotency key.
Staff invoice workspace
Read staff invoice workspace for the steps, expected results and common problems.
Document capabilities
Read document capabilities for the steps, expected results and common problems.
Payment state flow
Read payment state flow for the steps, expected results and common problems.
Payment request states
| State | What it means |
|---|---|
| Created or sent | Staff created the request and may have shared the customer-safe link. |
| Opened | The customer opened the Motornauts payment page. This is not payment proof. |
| Pending or processing | Motornauts is waiting for validated backend provider confirmation or reconciliation. |
| Succeeded | Backend state has a validated success outcome. |
| Failed or cancelled | The provider or customer flow did not complete successfully. The old public link is revoked; confirm protected backend state before an authorized replacement. |
| Expired | The request is no longer payable and a new approved request is needed. |
| Review | Reconciliation is required, such as amount/currency mismatch, chargeback-like status, or callback-after-terminal-state. |
Common blockers are missing payment-request entitlement, missing role permission, incomplete PayHere
credentials, missing allowed domain/app setup, missing public notify_url readiness, provider-not-ready
status, unsupported currency, expired/cancelled request state, or a reconciliation warning.
See Readiness Gates for Tenant Admin setup examples.