Commissions
What it's for
Commissions is how technicians get paid for what they sell. It holds the commission plans, what each technician is on, what they have accrued this period, and the ledger of what has been paid — plus the recommendation templates that give a technician something consistent to offer in the field.
Reach it from People → Commissions in the sidebar, at /commissions.
Tabs
The screen has no tabs. It is four sections: plans, assignments, accruals, and templates.
Panels and controls
Plans
Each plan has a Plan name ("e.g. Senior Tech"), a Basis, a rate, an optional multiplier, and an optional Cap in cents — the note in the field spells it out: 10000 means a maximum of $100.00 per job. A cap is worth setting on any plan where one unusually large job could distort a month.
No plans yet is the empty state.
Assignments
Technician, Current schedule, and Assign — who is on which plan. A Schedule override lets one person sit on different terms without creating a whole plan for them.
Accruals and the ledger
Tech, Plan, Eligible revenue, Rate, and Accrued show what is building this period. The ledger shows WO, Earned, Job value, Date, and Status per entry. Mark paid settles an entry.
Void commission reverses one, and it requires a note — "e.g. Job was re-assigned after completion". That is the important control on this screen: a voided commission always carries the reason it was voided, so a technician asking why their number changed gets an answer rather than a shrug.
No accrued commissions yet this period and No ledger entries yet are the empty states.
Recommendation templates
A named bundle of price book items a technician can offer as one — "e.g. AC Tune-Up Upsell Bundle" — with Notes giving dispatchers a brief description. Each template holds Pricebook item and Qty rows.
What it accepts
| Field | Format | Required | Rule |
|---|---|---|---|
| Plan name | Free text | Yes | "Name is required." |
| Basis / rate type | Pick a type | Yes | "Invalid rate type." |
| Rate | A non-negative whole number | Yes | "Rate must be a non-negative integer." |
| Multiplier | A non-negative whole number | No | "Multiplier must be a non-negative integer."; blank means no multiplier |
| Cap | Cents, whole number | No | "Cap must be a non-negative integer (cents)."; blank means no cap |
| Status | Active or inactive | Yes | |
| Technician | Pick a technician | Yes, to assign | "Missing user id."; "Schedule not found or inactive." |
| Void reason | Free text | Yes, to void | "A note is required when voiding a commission." |
| Template name | Free text | Yes | |
| Template notes | Free text | No | "Brief description for dispatchers" |
| Pricebook item | Pick an item | Yes, per template row | "Pricebook item not found." |
| Qty | Greater than zero | Yes, per template row | "Quantity must be greater than zero." |
How to configure it
- Payroll settings decide how paid commissions reach the payroll export.
- Price book settings supply the items a recommendation template is built from.
- Job costing settings decide how commission cost lands against a job's margin — which is why an uncapped plan can quietly change what a job looks like it earned.
Who can see it
This screen sits behind the Staff area.
Owners and office managers can open it. Dispatchers and technicians cannot — a technician sees their own commissions in the field app, not the plans or anyone else's ledger. The gate is checked on the server, not just hidden in the sidebar, so a direct link does not get around it.
The full role matrix is on Roles & permissions.