Home / Help Center / pos-app-saloon-spa / saloon / Prepaid Packages
🎁 saloon

Prepaid Packages

Prepaid Packages lets you bundle one or more services with a fixed number of sessions each (e.g. "5 Facials + 1 Free" = 6 facial sessions) into a single package a customer buys once, then redeems session-by-session at future visits as zero-price billing lines until the balance runs out or it expires.

📍 Menu path: Saloon & Spa → Prepaid Packages
👤 Who uses it: All roles with the Billing feature enabled

Overview

Like Memberships, this is a generic BazaarPOS entitlement module (packages/pos-core/src/service-package.js), not saloon-exclusive under the hood — the same shape works for gyms, tuition centres or restaurant meal plans.

A Package definition has a Name, a Price, a Validity (days) and one or more line items, each an existing Service plus a Sessions count for that service.

Selling a package to a customer creates a CustomerPackage record with its own independent remaining-session counter per service item, expiring Validity Days after the sale date.

Redemption happens later, at billing: when the customer is selected on the Sales screen, any services they still have package sessions remaining for can be added to the cart as a zero-price line, decrementing the balance. This page only creates and sells packages — it does not redeem sessions itself.

Before You Start

Step-by-Step Guide

1 Create a prepaid package

  1. Open Saloon & Spa → Prepaid Packages and click "+ New Package".
  2. Enter Package Name (required, e.g. "5 Facials + 1 Free"), Price and Validity (days).
  3. For "Services included", pick a Service and a Sessions count for it; click "+ Add service" to add further service lines.
  4. Click Create Package — it requires at least one service line with a name; blank rows are silently dropped on save.

2 Sell a package to a customer

  1. Click "Sell Package".
  2. Search for and select the customer — if they already have any existing packages, their names are shown as a quick reference just below the search field.
  3. Choose the Package, then click Sell.
  4. A success message reminds you to "collect the price at billing" — as with Memberships, this page does not charge the customer.

3 Redeem a session at billing

  1. On the Sales/Billing screen, select the customer whose package you want to redeem from.
  2. Any service they still have remaining sessions for appears as a redeemable, zero-price option; adding it to the cart decrements that service's remaining-session count on their package.
  3. The remaining balance is validated again server-side at the moment the sale is finalised — a package with insufficient sessions for the requested service/quantity is rejected even if the billing screen's cached view suggested it had enough.

4 Retire a package definition

  1. Click Delete on a package card and confirm — this removes the definition only; customers who already own that package keep their purchased sessions and remaining balance untouched.

Every Field & Button, Explained

Field / ButtonWhat it does
Package NameRequired. Shown on the package card and in customer-facing package lists.
PriceThe one-time price of the whole package — informational here; you must separately collect it via a sale on the Billing screen.
Validity (days)Days from the sale date until the whole package (all its service items) expires, regardless of remaining sessions.
Services included (per item)A Service picked from the Service Menu plus a Sessions count — a package can bundle multiple different services, each with its own session allotment.
"Existing" packages hintShown in the Sell dialog once a customer is picked — the names of packages that customer already owns, as a quick duplicate-purchase sanity check (not a hard block).

Tips & Best Practices

Troubleshooting & FAQ

A customer's package still shows sessions remaining but redemption failed at billing.
The billing screen re-validates the live remaining-session count and expiry date server-side at sale time — if the package expired (past its Validity window) or another device already redeemed the last session moments earlier, the redemption is correctly rejected even though the cached view still showed a balance.
I added a service line but it disappeared when I saved.
Package items with no Service selected (blank serviceName) are silently filtered out on save — make sure every item row has a service chosen before clicking Create Package.
The package price was never actually collected from the customer.
Expected — as with Memberships, selling a package only creates the entitlement. Add the package Price as a charge on that customer's next Sales/Billing transaction separately.