Overage Billing Explained

15 minutes

Tutorial 20.8: Overage Billing Explained

Introduction

In Full mode, a finalised colour formula that uses more product than the service's pricing allows for automatically stages a Colour overage line on the appointment's transaction. This tutorial walks through every stage of that line's life — from the formula finalising to the transaction completing — and what happens when edits, reverts, or refunds hit.

Who this is for: Owner, Admin, Manager — anyone responsible for how colour revenue reaches the till What you'll learn:

  • What makes a formula produce an overage line
  • How the line reaches the draft transaction
  • Why the line on a draft is system-managed (and what you can and can't change)
  • How completion locks everything
  • How refund / modify reopens the flow

Time to complete: 15 minutes


Prerequisites

  • Salon colour formula mode set to Full (Tutorial 20.2)
  • At least one active Colour Charge Rule configured (Tutorial 20.2)
  • Services have Colour grams included set where an Overage-only rule should apply (Tutorial 7.1)
  • Read Tutorial 20.6 for the formula dialog

Step-by-Step Instructions

Step 1: Understand when a line is staged

An overage line is staged automatically when all of these are true:

  1. Salon mode is Full
  2. The appointment's service is flagged as a colour service. (For an Overage only rule it must also have Colour grams included set — see the callout below)
  3. A colour formula on the appointment is finalised (not a draft plan, not mid-mix)
  4. An applicable charge rule is active — either the formula's chosen rule, or the salon's active default
  5. The calculated charge is non-zero — qualifying grams are at or above the rule's Minimum overage grams, AND the calculated amount is at or above the rule's Minimum charge

If any condition fails, no line is staged and no charge appears.

Three rule types — how the threshold applies

Conditions 2 and 5 hide a subtlety. Only the Overage only rule type uses Colour grams included as a deductible, and that rule type requires the threshold to be set — without it, nothing is charged. Full usage and Per gram rules ignore the threshold entirely and qualify every gram, so they bill even on a colour service that has no Colour grams included value. See Tutorial 20.2 for the rule-type comparison.

Step 2: The lifecycle — where the charge lives

Every finalised formula has a projection_status — a label for where its overage charge lives right now:

Status Meaning
unfinalised Formula hasn't been finalised; no charge yet
pending Finalised, but the appointment has no draft transaction yet. The charge will "land" on the next draft created for this appointment
in_draft Charge is an emerald line item on the appointment's current draft
committed Charge is on a non-draft (pending / completed / refunded) transaction. Formula becomes read-only

The status informs whether the formula can still be edited or reverted.

Step 3: Watch the status change as you work

A typical flow:

Formula created, plan saved     → unfinalised
Mixed and finalised             → pending (no draft yet) OR in_draft (draft exists)
Customer reaches the till       → receptionist creates draft → formula transitions to in_draft
Receptionist hits Complete      → formula transitions to committed

The receptionist sees the emerald line in the cart while the transaction is in_draft; it locks once completed.

Step 4: Editing while the draft is open

While the formula is in_draft, the way you change the charge is to change the formula, not the line on the till:

  • The stylist can open the formula and click Revert → stock returns, the overage line disappears, and the formula reopens in mixing mode so the actuals can be corrected.
  • The stylist can re-finalise with different actuals → the line rebuilds with the new amount and a fresh rule snapshot.

The overage line on a draft is system-managed. It belongs to the formula and the charge rule, not to the till operator. On the till it looks like an ordinary editable line — but when the draft is saved, the system reconciles it back to the formula's computed charge:

  • Editing the line's price on the draft does not stick. The saved draft always shows the formula's calculated amount. To change what's charged, change the formula (Revert and re-mix, or re-finalise with corrected actuals).
  • Deleting the line from the draft does not stick. The system re-adds it on the next save, because the formula is still finalised and still owes a charge. To remove the charge, Revert the formula, make the rule produce no charge (see the FAQ), or abandon the draft entirely.

If you abandon a draft that carried an overage line, the charge isn't lost — the formula drops back to pending and the line re-applies to the next transaction created for that appointment.

Revert the formula vs trying to delete the line

Action Stock Overage line Formula state
Revert the formula Returned in full Removed Reopens for mixing — actuals editable again
Re-finalise with new actuals Re-decremented to the new usage Rebuilds at the new amount, fresh snapshot Stays finalised
Edit / delete the line on the draft Untouched Reverts to the computed line on save Unchanged — the line is system-managed

Use Revert when the actuals were wrong. Don't rely on hand-editing or deleting the till line on a draft — the formula is the source of truth until the transaction is completed.

Step 5: Completion locks everything

When the transaction is completed (or even left as pending, partly paid):

  • Formula projection_status becomes committed
  • Formula can_edit becomes false — unfinalise and edit now return an error
  • Revert disappears
  • The overage line's rule_snapshot (the rule's name, markup type and markup value at finalise time) is frozen — future changes to charge rules do NOT change historical charges
  • Stock decrements are now permanent

Step 6: Refund or modify to change a committed charge

Need to change a committed formula? You can't edit the formula any more — go through the transaction. Both paths are Owner / Admin only (they need the refund-transactions permission).

  • Edit (modify) — only available the same day the transaction was completed (the salon's business day, not UTC). Edit the colour overage line's price directly on the transaction and save. The transaction stays completed — this is an in-place edit, not a return to draft — and the new price is what the customer pays. Because you're editing the transaction directly here (not the draft), the price change does stick. Use this for small price corrections.
  • Refund — reverses the transaction. The formula stays committed against the refunded transaction, so the audit record persists. To then re-bill the customer, create a fresh transaction; if the formula itself needs different actuals first, see the note below.

Re-pricing a committed formula completely

The cleanest path when a finalised formula itself needs to change after the bill is paid is: refund the original transaction → create a new draft for the appointment → Revert and re-finalise the formula so the new charge stages onto the new draft. The original transaction stays in the audit log as refunded. Bulk re-pricing is intentionally not supported — see "Can I bulk re-price old formulas?" below.

See Tutorial 8.2 for the full refund / modify flow.


Worked example: edit a formula after finalise

This example uses a deliberately simple illustrative rule — Overage only, Per-gram rate at ÂŖ0.20/g, no minimums — so the arithmetic is easy to follow. Your salon's shipped default rule is different (see the box below it).

  1. Formula finalised: actuals 75g, threshold 60g → 15g overage → ÂŖ3.00 charge → pending (no draft yet)
  2. Receptionist creates the draft transaction → formula moves to in_draft, emerald ÂŖ3.00 line appears
  3. Colourist realises they miscounted one bowl → clicks Revert, corrects actuals to 68g, re-finalises
  4. Line rebuilds: 8g overage → ÂŖ1.60 → in_draft
  5. Receptionist completes the transaction → formula moves to committed, line locks at ÂŖ1.60

What the shipped default rule actually charges

A fresh salon comes seeded with one default rule: Overage only, Percentage of cost at 200% (i.e. 2× the cost of the over-threshold product), with a ÂŖ1.00 minimum charge and a 5g minimum overage. That rule prices on the cost of the extra grams, not a flat per-gram rate, so the numbers above won't match it gram-for-gram. Tutorial 20.2 covers tailoring the rule to your salon.


Worked example: customer pushes back after completion

Same-day, transaction was just completed. Owner / Admin permission required.

  1. Transaction completed earlier today with a ÂŖ6.00 overage line
  2. Customer pushes back: "I only agreed to a ÂŖ4.00 add-on"
  3. Owner opens the transaction and clicks Edit — the colour overage line is editable here because you're editing the completed transaction directly (the transaction stays in Completed state)
  4. Owner changes the overage line's price to ÂŖ4.00 and saves — totals recalculate, and the transaction now reads as overpaid by ÂŖ2.00, which you return to the customer through your normal refund / change process
  5. Done — no formula re-finalise needed for a simple price adjustment

If instead the formula itself was wrong (different products, very different grams), refund the transaction outright, recreate a draft for the appointment, then Revert and re-finalise the formula. The new charge stages cleanly onto the new draft.


Common Pitfalls

"No overage line appeared"

Walk through the five conditions in Step 1 in order. Nine times out of ten it's condition 2 (an Overage-only rule on a service with no Colour grams included) or condition 5 (the calculated charge is below the rule's minimum overage grams or minimum charge).

"The overage line has a beaker icon and emerald colour — is that deliberate?"

Yes. Colour overage lines use a distinctive emerald row + beaker icon so receptionists and customers can tell them apart from regular services and products.

"I changed the overage line's price on the till and it changed back"

That's expected on a draft. The line is system-managed — the saved draft always reflects the formula's computed charge. To change the amount before completion, change the formula (Revert and re-mix, or re-finalise). Only an Owner / Admin editing an already-completed transaction (same day) can adjust the price directly — see Step 6.

"A stylist changed the formula after the customer paid"

They shouldn't be able to — a committed formula is read-only. If it happened somehow, report it to support. The audit log will still show what changed.

"Our rule changed but old charges are different"

Correct — each formula snapshots the rule at the moment it was finalised. Historical charges are frozen on purpose so your audit trail is accurate.

"Can I bulk re-price old formulas?"

No. Editing each completed transaction individually (same-day) or refunding and re-billing is the only path. This is deliberate — automatic bulk re-pricing would rewrite customer receipts.


Tips and Best Practices

  1. Train receptionists on the four statuses — unfinalised / pending / in_draft / committed are the mental model, not implementation detail.
  2. Complete transactions same-day where possible — leaving formulas pending too long creates gaps in stock visibility, and same-day is the only window for an in-place price edit.
  3. Fix the formula, not the till line — on a draft the overage line is system-managed; Revert and re-mix (or re-finalise) is how you change it. Hand-editing the line on the draft won't stick.
  4. Audit quarterly — spot-check a handful of committed formulas against the POS lines to confirm the numbers tie out.
  5. Price rules conservatively — a higher minimum charge and minimum overage reduces ticket disputes for tiny amounts.

Related Tutorials

  • Tutorial 2.4: Processing Transactions — the receptionist's view of the overage line in POS
  • Tutorial 7.1: Creating and Managing Your Service Menu — set Colour grams included
  • Tutorial 8.1: Understanding Transactions and Payment Status — the colour_overage polymorphic item type
  • Tutorial 8.2: Handling Refunds and Cancellations — how modify / refund handles committed transactions
  • Tutorial 20.2: Configuring Colour Settings & Charge Rules — the rule engine behind the charge
  • Tutorial 20.6: Creating a Colour Formula — where finalise happens

Frequently Asked Questions

What if the rule's Minimum charge is higher than the calculated overage?

No charge is staged. Minimum charge acts as a floor for whether to bill at all, not a guaranteed minimum bill — if the calculated amount comes in below it, the system skips the line entirely. Set this low (or to zero) if you'd rather always bill the calculated amount, however small.

What if the customer exceeds the threshold but the rule's minimum overage isn't met?

No charge is staged. A 2g overage with a 5g minimum-overage rule simply doesn't trigger.

Can I pause overage billing without leaving Full mode?

Yes — deactivate every charge rule (via Is active). Without an active rule, no charge can be staged. Note that a rule which calculates to ÂŖ0 produces no line at all (not a ÂŖ0 audit line), so you can't use a zero-value rule to keep an audit trail without a cost — deactivating is the clean way to pause.

Does the overage line count toward commission?

That's determined by your commission configuration (Tutorial 4.4), not by this system. Check how commission is configured against the colour_overage item type.

Are overage charges VATable?

By default yes — they inherit the salon's tax rate. Confirm with your accountant that this suits your jurisdiction.


Last Updated: April 2026