Last updated 2026-04-25
Sales & commissions
OtiumWork tracks two flavors of revenue per salesperson — services and consulting — with tiered commission plans that reflect annual quotas. All amounts are in USD; convert at booking-day rate before entering.
Data model
| Entity | Holds |
|---|---|
| Sale | One signed deal: salesperson, customer, type, USD value, signed date, status (open/closed/canceled), optional linked project, locked commission %, tier breakdown |
| Sale payment | Each cash-in event against a sale (one or many). Commission auto-accrues at the sale's locked rate × payment amount |
| Commission plan | Per (salesperson, sale_type, year): JSON list of tier brackets (up_to_usd, rate_pct) |
| Commission payout | One row per payroll cycle per salesperson: rolls up unpaid sale_payments, status = pending → paid (or reversed) |
Workflow
- Plan setup (once per salesperson per year):
/finance/commissions/plans. Add brackets like:
$0 – $500K → 5%
$500K – $1M → 7%
above $1M → 10%
Empty "up to" = unlimited (use for the last bracket).
-
Record a sale (when a deal closes):
/finance/sales/new. System looks up the salesperson's YTD bookings + their plan, computes the blended rate spanning whatever tiers this sale crosses, and freezes that rate on the sale row. Tier math is saved in the breakdown JSON for audit. -
Record payments as customers pay: open the sale → "Record payment" form. Each payment auto-accrues
amount × locked_rateof commission. A sale paid in 3 installments creates 3 commission accruals at the same rate. -
Generate payout twice a month (or whatever your payroll cadence):
/finance/commissionsshows per-salesperson outstanding commission. Click Generate with the payroll date — system rolls all unpaid sale_payments into apendingpayout. -
Mark paid once payroll runs. Reverse if needed (frees rolled-in payments back to outstanding).
Why blended rate at signing
If we recomputed at payment time, late payments by customers would change a salesperson's effective rate after the fact — unfair when the deal's already done. Freezing at signing matches how comp is actually negotiated.
Refunds
Enter a negative sale_payment amount. Commission accrual goes negative too, offsetting in the next payout.
Setting fallback rates
Each employee has commission_rate_services_pct and commission_rate_consulting_pct on their record. Used when no commission_plan row exists for that (salesperson, sale_type, year). Defaults to 0 — explicit setup encouraged.
What's not in V1
- Splits between multiple salespeople on one deal (one salesperson per sale today)
- Multi-currency — everything in USD
- Draws against future commissions
- Auto-sync with QuickBooks / Stripe payments (manual entry today)
- Tier definitions changing mid-year — edit the plan, but already-signed sales keep their locked rate
See something wrong or outdated in this article? Report it →