Home / Help Center / pos-app / Staff / Commission Rules
⚙️ Staff

Commission Rules

Commission Rules is where managers define how each staff member earns commission — a flat percentage, a fixed amount per sale or per item, which base the percentage applies to, and which sale-amount range or priority the rule takes effect at.

📍 Menu path: Staff → Commission Rules
👤 Who uses it: Managers/Owners only (managerOnly nav item)
🏷️ Plan tier: advanced+

Overview

Every rule is tied to exactly one staff member; the same person can have multiple rules with different priorities and sale-amount ranges (e.g. a higher rate for big-ticket sales).

When multiple rules could match the same sale, Priority (lower number = higher priority) decides which one is actually applied.

Rules are never hard-deleted from here — the Delete action deactivates a rule (sets it inactive) rather than removing history, since past commissions were already calculated against it.

Before You Start

Step-by-Step Guide

1 Create a new commission rule

  1. Click Add Rule.
  2. Select the Staff Member this rule applies to (required) — the dropdown shows each user's name and role.
  3. Enter a Rule Name (required), e.g. "Default Sales Commission" or "Bulk Order Bonus".
  4. Choose the Commission Type: Percentage, Fixed per Sale, or Fixed per Item.
  5. If Percentage is selected, enter the Percentage (0–100, required) and choose what it applies to under Apply On — Total Amount, Subtotal (before tax), or Profit Margin.
  6. If Fixed per Sale or Fixed per Item is selected, enter the Fixed Amount instead.
  7. Optionally set a Minimum Sale Amount and/or Maximum Sale Amount so the rule only triggers within that sale-value range.
  8. Set the Priority (lower number wins when more than one rule could apply to the same sale) — defaults to 10.
  9. Toggle Exclude discounted sales if heavily discounted sales should not earn this commission.
  10. Leave Active checked (default) so the rule takes effect immediately, add any Notes, then click Create Rule.

2 Edit an existing rule

  1. Click the pencil (edit) icon on any rule row/card.
  2. The same form opens pre-filled with the rule's current values, including the correct fields shown/hidden for its Commission Type.
  3. Adjust any field and click Update Rule to save.

3 Deactivate (delete) a rule

  1. Click the trash icon on the rule.
  2. Confirm the prompt ("Are you sure you want to deactivate the commission rule…?").
  3. The rule is deactivated — its Status badge changes to Inactive rather than the row disappearing.
💡 This is a soft delete: it stops the rule from applying to new sales but keeps it visible for record-keeping and re-activation later via Edit.

4 Sort and search rules

  1. The list sorts by Priority ascending by default, so the highest-priority rules appear first.
  2. Use the search box to find rules by staff name, role, or rule name.
  3. Switch between table and card view, or export the current rule list, using the data grid toolbar.

Every Field & Button, Explained

Field / ButtonWhat it does
Add RuleOpens a blank rule-creation modal.
Staff MemberRequired — the user this commission rule applies to.
Rule NameRequired free-text label to identify the rule, shown in the list.
Commission TypePercentage, Fixed per Sale, or Fixed per Item — determines which amount fields are shown.
PercentageShown only for Percentage type; 0–100, required, accepts decimals.
Apply OnShown only for Percentage type: Total Amount, Subtotal (before tax), or Profit Margin — the base the percentage is calculated against.
Fixed AmountShown only for Fixed per Sale / Fixed per Item types; a flat currency amount, required.
Minimum Sale AmountOptional floor — the rule only applies to sales at or above this amount.
Maximum Sale AmountOptional ceiling — leave blank ("No limit") for no upper bound.
PriorityNumeric tie-breaker when multiple rules could apply to the same sale; lower number = higher priority. Defaults to 10.
Exclude discounted salesCheckbox — when on, sales with a discount applied do not earn this commission.
ActiveCheckbox — inactive rules are kept for history but never applied to new sales.
NotesFree-text notes about the rule's intent or conditions.
Commission (column)Human-readable summary of the rule, e.g. "10% of total" or "₹50 per sale".
Min Sale (column)The configured minimum sale amount, or "—" if none set.
Edit (pencil icon)Opens the same form pre-filled for that rule.
Delete (trash icon)Deactivates the rule after a confirmation prompt (soft delete, not permanent removal).

Tips & Best Practices

Troubleshooting & FAQ

"Please select a staff member" / "Please enter a rule name" error on save.
Both Staff Member and Rule Name are required fields validated before the form submits — fill them in and try again.
A staff member has two rules and I am not sure which one applied to a sale.
Check Priority on both rules — the one with the lower Priority number takes effect. Also confirm the sale amount falls within each rule's Minimum/Maximum Sale Amount range.
I deleted a rule but it still shows in the list.
Delete deactivates rather than removes the rule — look for its Status badge changing to Inactive. This is intentional so past commissions calculated under that rule remain traceable.
Commissions are not appearing on My Commissions for a staff member with a rule configured here.
Confirm the rule is Active, that the sale amount is within any configured Minimum/Maximum range, and that "Exclude discounted sales" is not unexpectedly filtering out their sales.

🧑‍💻 Developer Notes

Source component(s):

  • frontend-app/packages/pos-react-lib/src/pages/CommissionRulesPage.jsx

Backend endpoints used:

  • GET /staff-commissions/rules
  • GET /settings/users
  • POST /staff-commissions/rules
  • PUT /staff-commissions/rules/:id
  • DELETE /staff-commissions/rules/:id

Related tables (db-core repositories):

  • CommissionRule
  • User

Redux slices:

  • scope (selectCurrentScope / getScopeQueryParams)

Feature flag key: commissions (requires advanced plan tier or above)

The "Apply On" field is only rendered for Commission Type = PERCENTAGE, and the Fixed Amount field only for FIXED_PER_SALE / FIXED_PER_ITEM, driven by conditional JSX on formData.commissionType. DELETE calls the same /staff-commissions/rules/:id endpoint as a true removal at the API layer, but the frontend confirmation copy and UX describe it as "deactivate" — treat it as a soft delete from the user's perspective. Uses the shared DataGrid component with a custom rowActions renderer for the edit/delete icon pair.